From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 10:12:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 10:12:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWiY5-0003Vn-OI; Tue, 01 Sep 2015 10:12:17 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWiY4-0003Ve-Cq
	for win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 10:12:16 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	B9/4F-31122-FF975E55; Tue, 01 Sep 2015 10:12:15 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1441102334!174303!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.1; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 55591 invoked from network); 1 Sep 2015 10:12:15 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 10:12:15 -0000
X-IronPort-AV: E=Sophos;i="5.17,448,1437436800"; 
   d="scan'208";a="2362305"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ31F6rxt738I9bk2vbpMWR79DbZ4nfm+Q
Date: Tue, 1 Sep 2015 10:12:13 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5AC584@AMSPEX01CL01.citrite.net>
References: <55DC94B7.6030605@invisiblethingslab.com>
In-Reply-To: <55DC94B7.6030605@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 25 August 2015 17:16
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting Xenstore key permissions.

Thanks for the patches. I'm only just back from vacation so it may take me a couple of days to review. I'll get to it a.s.a.p. though.

  Paul

> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 10:12:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 10:12:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWiY5-0003Vn-OI; Tue, 01 Sep 2015 10:12:17 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWiY4-0003Ve-Cq
	for win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 10:12:16 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	B9/4F-31122-FF975E55; Tue, 01 Sep 2015 10:12:15 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-21.messagelabs.com!1441102334!174303!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 7.19.1; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 55591 invoked from network); 1 Sep 2015 10:12:15 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-21.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 10:12:15 -0000
X-IronPort-AV: E=Sophos;i="5.17,448,1437436800"; 
   d="scan'208";a="2362305"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ31F6rxt738I9bk2vbpMWR79DbZ4nfm+Q
Date: Tue, 1 Sep 2015 10:12:13 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5AC584@AMSPEX01CL01.citrite.net>
References: <55DC94B7.6030605@invisiblethingslab.com>
In-Reply-To: <55DC94B7.6030605@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 25 August 2015 17:16
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [Patch 0/2] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting Xenstore key permissions.

Thanks for the patches. I'm only just back from vacation so it may take me a couple of days to review. I'll get to it a.s.a.p. though.

  Paul

> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 11:06:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 11:06:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWjOr-0007zB-Au; Tue, 01 Sep 2015 11:06:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>) id 1ZWjOp-0007ut-Cq
	for Win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 11:06:47 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	FA/D5-22089-6C685E55; Tue, 01 Sep 2015 11:06:46 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441105605!31936790!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_50_60,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17086 invoked from network); 1 Sep 2015 11:06:45 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 11:06:45 -0000
Received: by wiclp12 with SMTP id lp12so26610494wic.1
	for <Win-pv-devel@lists.xenproject.org>;
	Tue, 01 Sep 2015 04:06:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:message-id:references:to;
	bh=5ROZ5IQiuKiMQrGsBddc7XZgdmCEZGX9v0lSShWxwZw=;
	b=zm9D+kF0kxgeGfE8XlWHSNrFtm6xfqaG5u4EuGWvXkgAD2tKJIYnqEvD6qp86KuDf3
	c4SXNaQNVkUrvGdDoJrx/ZdMoJjjzwrdI3yORhlW5lAa0ntn4W10yDyefVE0JwFl0EyY
	Is73P2vKUpuN8mWLJJJVeLEkD1yMshneGk89TPPGZUn7Ml9SD0nGlu0vo1M9fcXJvNa2
	sYSkpMunO2cd/sBtiZEf3Jx2NfHtWniDjWWX3l84K94qBBz1gL8usmaNRAbxWtaN2v/0
	p0bbfiq/1U9aTEpQJ9u2D0SK8fhNZ3/zQIorw5lDrJgcR2JEjy+o1V2Vt4XOs8iNbP2C
	nwYA==
X-Received: by 10.194.21.230 with SMTP id y6mr36062738wje.132.1441105605444;
	Tue, 01 Sep 2015 04:06:45 -0700 (PDT)
Received: from [192.168.0.8] (97e55056.skybroadband.com. [151.229.80.86])
	by smtp.gmail.com with ESMTPSA id
	hn2sm26630279wjc.45.2015.09.01.04.06.43
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 01 Sep 2015 04:06:44 -0700 (PDT)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <D1F91F84.620CC%ctakemura@axcient.com>
Date: Tue, 1 Sep 2015 12:06:43 +0100
Message-Id: <9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
References: <D1F91F84.620CC%ctakemura@axcient.com>
To: Chris Takemura <ctakemura@axcient.com>
X-Mailer: Apple Mail (2.2104)
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	Win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+
	GPLPV issues)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6070887278077656065=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


--===============6070887278077656065==
Content-Type: multipart/alternative; boundary="Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1"


--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

Chris,
adding the Windows PV driver list=20
Lars

> On 19 Aug 2015, at 01:44, Chris Takemura <ctakemura@axcient.com> =
wrote:
>=20
> Hi everyone,
>=20
> What's the status of the various PV driver projects?  Which drivers =
would be recommended for end-users who just want PV drivers that work?  =
I've been something of a fan of the GPL PV drivers, but meadowcourt.org =
has been down for a while, and I don't think there have been recent =
updates.  There are the erstwhile Xenserver drivers, but my impression =
is that they're under development and not ready for actual use.
>=20
> I would be entirely happy with the GPL PV drivers, but it seems like =
XenPCI isn't hiding all the emulated block devices --  I have one =
machine with 5 emulated disks, 4 ATA and 1 SCSI.  I still see one disk =
attached to ATA channel 1 and one disk on the SCSI controller.  Neither =
of these is the system disk.  XenVBD is attaching to all 5 disks, but =
some of the disks are (rightly) disabled because of signature collision.
>=20
> --=20
> chris
> _______________________________________________
> Xen-users mailing list
> Xen-users@lists.xen.org
> http://lists.xen.org/xen-users


--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=us-ascii

<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Chris,<div class="">adding the Windows PV driver list&nbsp;</div><div class="">Lars</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 19 Aug 2015, at 01:44, Chris Takemura &lt;<a href="mailto:ctakemura@axcient.com" class="">ctakemura@axcient.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">

<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" class="">

<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; font-size: 14px; font-family: Calibri, sans-serif;" class="">
<div class="">Hi everyone,</div>
<div class=""><br class="">
</div>
<div class="">What's the status of the various PV driver projects? &nbsp;Which drivers would be recommended for end-users who just want PV drivers that work? &nbsp;I've been something of a fan of the GPL PV drivers, but <a href="http://meadowcourt.org" class="">meadowcourt.org</a> has been down for a while, and I don't think
 there have been recent updates. &nbsp;There are the erstwhile Xenserver drivers, but my impression is that they're under development and not ready for actual use.</div>
<div class=""><br class="">
</div>
<div class="">I would be entirely happy with the GPL PV drivers, but it seems like XenPCI isn't hiding all the emulated block devices -- &nbsp;I have one machine with 5 emulated disks, 4 ATA and 1 SCSI. &nbsp;I still see one disk attached to ATA channel 1 and one disk on the
 SCSI controller. &nbsp;Neither of these is the system disk. &nbsp;XenVBD is attaching to all 5 disks, but some of the disks are (rightly) disabled because of signature collision.</div>
<div class=""><br class="">
</div>
<div class="">--&nbsp;</div>
<div class="">chris</div>
</div>

_______________________________________________<br class="">Xen-users mailing list<br class=""><a href="mailto:Xen-users@lists.xen.org" class="">Xen-users@lists.xen.org</a><br class="">http://lists.xen.org/xen-users</div></blockquote></div><br class=""></div></body></html>
--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1--


--===============6070887278077656065==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6070887278077656065==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 11:06:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 11:06:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWjOr-0007zB-Au; Tue, 01 Sep 2015 11:06:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <lars.kurth.xen@gmail.com>) id 1ZWjOp-0007ut-Cq
	for Win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 11:06:47 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	FA/D5-22089-6C685E55; Tue, 01 Sep 2015 11:06:46 +0000
X-Env-Sender: lars.kurth.xen@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441105605!31936790!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_50_60,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17086 invoked from network); 1 Sep 2015 11:06:45 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 11:06:45 -0000
Received: by wiclp12 with SMTP id lp12so26610494wic.1
	for <Win-pv-devel@lists.xenproject.org>;
	Tue, 01 Sep 2015 04:06:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=content-type:mime-version:subject:from:in-reply-to:date:cc
	:message-id:references:to;
	bh=5ROZ5IQiuKiMQrGsBddc7XZgdmCEZGX9v0lSShWxwZw=;
	b=zm9D+kF0kxgeGfE8XlWHSNrFtm6xfqaG5u4EuGWvXkgAD2tKJIYnqEvD6qp86KuDf3
	c4SXNaQNVkUrvGdDoJrx/ZdMoJjjzwrdI3yORhlW5lAa0ntn4W10yDyefVE0JwFl0EyY
	Is73P2vKUpuN8mWLJJJVeLEkD1yMshneGk89TPPGZUn7Ml9SD0nGlu0vo1M9fcXJvNa2
	sYSkpMunO2cd/sBtiZEf3Jx2NfHtWniDjWWX3l84K94qBBz1gL8usmaNRAbxWtaN2v/0
	p0bbfiq/1U9aTEpQJ9u2D0SK8fhNZ3/zQIorw5lDrJgcR2JEjy+o1V2Vt4XOs8iNbP2C
	nwYA==
X-Received: by 10.194.21.230 with SMTP id y6mr36062738wje.132.1441105605444;
	Tue, 01 Sep 2015 04:06:45 -0700 (PDT)
Received: from [192.168.0.8] (97e55056.skybroadband.com. [151.229.80.86])
	by smtp.gmail.com with ESMTPSA id
	hn2sm26630279wjc.45.2015.09.01.04.06.43
	(version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
	Tue, 01 Sep 2015 04:06:44 -0700 (PDT)
Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
From: Lars Kurth <lars.kurth.xen@gmail.com>
In-Reply-To: <D1F91F84.620CC%ctakemura@axcient.com>
Date: Tue, 1 Sep 2015 12:06:43 +0100
Message-Id: <9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
References: <D1F91F84.620CC%ctakemura@axcient.com>
To: Chris Takemura <ctakemura@axcient.com>
X-Mailer: Apple Mail (2.2104)
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	Win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+
	GPLPV issues)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6070887278077656065=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org


--===============6070887278077656065==
Content-Type: multipart/alternative; boundary="Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1"


--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=us-ascii

Chris,
adding the Windows PV driver list=20
Lars

> On 19 Aug 2015, at 01:44, Chris Takemura <ctakemura@axcient.com> =
wrote:
>=20
> Hi everyone,
>=20
> What's the status of the various PV driver projects?  Which drivers =
would be recommended for end-users who just want PV drivers that work?  =
I've been something of a fan of the GPL PV drivers, but meadowcourt.org =
has been down for a while, and I don't think there have been recent =
updates.  There are the erstwhile Xenserver drivers, but my impression =
is that they're under development and not ready for actual use.
>=20
> I would be entirely happy with the GPL PV drivers, but it seems like =
XenPCI isn't hiding all the emulated block devices --  I have one =
machine with 5 emulated disks, 4 ATA and 1 SCSI.  I still see one disk =
attached to ATA channel 1 and one disk on the SCSI controller.  Neither =
of these is the system disk.  XenVBD is attaching to all 5 disks, but =
some of the disks are (rightly) disabled because of signature collision.
>=20
> --=20
> chris
> _______________________________________________
> Xen-users mailing list
> Xen-users@lists.xen.org
> http://lists.xen.org/xen-users


--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=us-ascii

<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Chris,<div class="">adding the Windows PV driver list&nbsp;</div><div class="">Lars</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 19 Aug 2015, at 01:44, Chris Takemura &lt;<a href="mailto:ctakemura@axcient.com" class="">ctakemura@axcient.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class="">

<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" class="">

<div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; font-size: 14px; font-family: Calibri, sans-serif;" class="">
<div class="">Hi everyone,</div>
<div class=""><br class="">
</div>
<div class="">What's the status of the various PV driver projects? &nbsp;Which drivers would be recommended for end-users who just want PV drivers that work? &nbsp;I've been something of a fan of the GPL PV drivers, but <a href="http://meadowcourt.org" class="">meadowcourt.org</a> has been down for a while, and I don't think
 there have been recent updates. &nbsp;There are the erstwhile Xenserver drivers, but my impression is that they're under development and not ready for actual use.</div>
<div class=""><br class="">
</div>
<div class="">I would be entirely happy with the GPL PV drivers, but it seems like XenPCI isn't hiding all the emulated block devices -- &nbsp;I have one machine with 5 emulated disks, 4 ATA and 1 SCSI. &nbsp;I still see one disk attached to ATA channel 1 and one disk on the
 SCSI controller. &nbsp;Neither of these is the system disk. &nbsp;XenVBD is attaching to all 5 disks, but some of the disks are (rightly) disabled because of signature collision.</div>
<div class=""><br class="">
</div>
<div class="">--&nbsp;</div>
<div class="">chris</div>
</div>

_______________________________________________<br class="">Xen-users mailing list<br class=""><a href="mailto:Xen-users@lists.xen.org" class="">Xen-users@lists.xen.org</a><br class="">http://lists.xen.org/xen-users</div></blockquote></div><br class=""></div></body></html>
--Apple-Mail=_B35EA96E-772A-4CBF-8164-1F0AA9A170E1--


--===============6070887278077656065==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6070887278077656065==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 13:50:05 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 13:50:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWlwr-0005OA-Bl; Tue, 01 Sep 2015 13:50:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWlwq-0005Ng-3d
	for Win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 13:50:04 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	24/63-28791-B0DA5E55; Tue, 01 Sep 2015 13:50:03 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441115401!19202703!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14114 invoked from network); 1 Sep 2015 13:50:01 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 13:50:01 -0000
X-IronPort-AV: E=Sophos;i="5.17,449,1437436800"; d="scan'208,217";a="2368510"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Chris Takemura
	<ctakemura@axcient.com>
Thread-Topic: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+
	GPLPV issues)
Thread-Index: AQHQ5KZj7bBAqOVIEEuf7HYn0TD1gZ4nr6Ig
Date: Tue, 1 Sep 2015 13:49:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47@AMSPEX01CL01.citrite.net>
References: <D1F91F84.620CC%ctakemura@axcient.com>
	<9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
In-Reply-To: <9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	"Win-pv-devel@lists.xenproject.org" <Win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers?
	(+	GPLPV issues)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0237941246125032448=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0237941246125032448==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Chris,

  Please take a look at http://xenproject.org/downloads/windows-pv-drivers.=
 These drivers are actively developed (they are the basis of the XenServer =
PV drivers) and are reasonably stable at the moment. There have been some p=
roblems with XENVBD reported on the list recently but I will be looking int=
o these as soon as I can.

  Cheers,

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Lars Kurth
Sent: 01 September 2015 12:07
To: Chris Takemura
Cc: xen-users@lists.xen.org; Win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+ =
GPLPV issues)

Chris,
adding the Windows PV driver list
Lars

On 19 Aug 2015, at 01:44, Chris Takemura <ctakemura@axcient.com<mailto:ctak=
emura@axcient.com>> wrote:

Hi everyone,

What's the status of the various PV driver projects?  Which drivers would b=
e recommended for end-users who just want PV drivers that work?  I've been =
something of a fan of the GPL PV drivers, but meadowcourt.org<http://meadow=
court.org> has been down for a while, and I don't think there have been rec=
ent updates.  There are the erstwhile Xenserver drivers, but my impression =
is that they're under development and not ready for actual use.

I would be entirely happy with the GPL PV drivers, but it seems like XenPCI=
 isn't hiding all the emulated block devices --  I have one machine with 5 =
emulated disks, 4 ATA and 1 SCSI.  I still see one disk attached to ATA cha=
nnel 1 and one disk on the SCSI controller.  Neither of these is the system=
 disk.  XenVBD is attaching to all 5 disks, but some of the disks are (righ=
tly) disabled because of signature collision.

--
chris
_______________________________________________
Xen-users mailing list
Xen-users@lists.xen.org<mailto:Xen-users@lists.xen.org>
http://lists.xen.org/xen-users


--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0E4C5.79398F50"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Chris,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Please take a look at <a href=3D"http://xenproject.org/downloads/win=
dows-pv-drivers">
http://xenproject.org/downloads/windows-pv-drivers</a>. These drivers are a=
ctively developed (they are the basis of the XenServer PV drivers) and are =
reasonably stable at the moment. There have been some problems with XENVBD =
reported on the list recently but
 I will be looking into these as soon as I can.<o:p></o:p></span></font></p=
>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Lars Kurth<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 01 September 2015 12:0=
7<br>
<b><span style=3D"font-weight:bold">To:</span></b> Chris Takemura<br>
<b><span style=3D"font-weight:bold">Cc:</span></b> xen-users@lists.xen.org;=
 Win-pv-devel@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: [win-pv-devel] =
[Xen-users] Recommended Windows PV drivers? (&#43; GPLPV issues)<o:p></o:p>=
</span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
Chris,<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
adding the Windows PV driver list&nbsp;<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
Lars<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
<div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
On 19 Aug 2015, at 01:44, Chris Takemura &lt;<a href=3D"mailto:ctakemura@ax=
cient.com">ctakemura@axcient.com</a>&gt; wrote:<o:p></o:p></span></font></p=
>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
<div>
<div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">Hi everyone,<o:p></o:p></spa=
n></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">What's the status of the var=
ious PV driver projects? &nbsp;Which drivers would be recommended for end-u=
sers
 who just want PV drivers that work? &nbsp;I've been something of a fan of =
the GPL PV drivers, but
<a href=3D"http://meadowcourt.org">meadowcourt.org</a> has been down for a =
while, and I don't think there have been recent updates. &nbsp;There are th=
e erstwhile Xenserver drivers, but my impression is that they're under deve=
lopment and not ready for actual use.<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">I would be entirely happy wi=
th the GPL PV drivers, but it seems like XenPCI isn't hiding all the emulat=
ed
 block devices -- &nbsp;I have one machine with 5 emulated disks, 4 ATA and=
 1 SCSI. &nbsp;I still see one disk attached to ATA channel 1 and one disk =
on the SCSI controller. &nbsp;Neither of these is the system disk. &nbsp;Xe=
nVBD is attaching to all 5 disks, but some of the disks
 are (rightly) disabled because of signature collision.<o:p></o:p></span></=
font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">--&nbsp;<o:p></o:p></span></=
font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">chris<o:p></o:p></span></fon=
t></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
_______________________________________________<br>
Xen-users mailing list<br>
<a href=3D"mailto:Xen-users@lists.xen.org">Xen-users@lists.xen.org</a><br>
<a href=3D"http://lists.xen.org/xen-users">http://lists.xen.org/xen-users</=
a><o:p></o:p></span></font></p>
</div>
</blockquote>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_--


--===============0237941246125032448==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0237941246125032448==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 13:50:05 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 13:50:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWlwr-0005OA-Bl; Tue, 01 Sep 2015 13:50:05 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWlwq-0005Ng-3d
	for Win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 13:50:04 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	24/63-28791-B0DA5E55; Tue, 01 Sep 2015 13:50:03 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441115401!19202703!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14114 invoked from network); 1 Sep 2015 13:50:01 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 13:50:01 -0000
X-IronPort-AV: E=Sophos;i="5.17,449,1437436800"; d="scan'208,217";a="2368510"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Lars Kurth <lars.kurth.xen@gmail.com>, Chris Takemura
	<ctakemura@axcient.com>
Thread-Topic: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+
	GPLPV issues)
Thread-Index: AQHQ5KZj7bBAqOVIEEuf7HYn0TD1gZ4nr6Ig
Date: Tue, 1 Sep 2015 13:49:59 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47@AMSPEX01CL01.citrite.net>
References: <D1F91F84.620CC%ctakemura@axcient.com>
	<9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
In-Reply-To: <9FA09DC6-1B07-4B31-B052-4C6263E46789@gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "xen-users@lists.xen.org" <xen-users@lists.xen.org>,
	"Win-pv-devel@lists.xenproject.org" <Win-pv-devel@lists.xenproject.org>
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers?
	(+	GPLPV issues)
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0237941246125032448=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0237941246125032448==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Chris,

  Please take a look at http://xenproject.org/downloads/windows-pv-drivers.=
 These drivers are actively developed (they are the basis of the XenServer =
PV drivers) and are reasonably stable at the moment. There have been some p=
roblems with XENVBD reported on the list recently but I will be looking int=
o these as soon as I can.

  Cheers,

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Lars Kurth
Sent: 01 September 2015 12:07
To: Chris Takemura
Cc: xen-users@lists.xen.org; Win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] [Xen-users] Recommended Windows PV drivers? (+ =
GPLPV issues)

Chris,
adding the Windows PV driver list
Lars

On 19 Aug 2015, at 01:44, Chris Takemura <ctakemura@axcient.com<mailto:ctak=
emura@axcient.com>> wrote:

Hi everyone,

What's the status of the various PV driver projects?  Which drivers would b=
e recommended for end-users who just want PV drivers that work?  I've been =
something of a fan of the GPL PV drivers, but meadowcourt.org<http://meadow=
court.org> has been down for a while, and I don't think there have been rec=
ent updates.  There are the erstwhile Xenserver drivers, but my impression =
is that they're under development and not ready for actual use.

I would be entirely happy with the GPL PV drivers, but it seems like XenPCI=
 isn't hiding all the emulated block devices --  I have one machine with 5 =
emulated disks, 4 ATA and 1 SCSI.  I still see one disk attached to ATA cha=
nnel 1 and one disk on the SCSI controller.  Neither of these is the system=
 disk.  XenVBD is attaching to all 5 disks, but some of the disks are (righ=
tly) disabled because of signature collision.

--
chris
_______________________________________________
Xen-users mailing list
Xen-users@lists.xen.org<mailto:Xen-users@lists.xen.org>
http://lists.xen.org/xen-users


--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0E4C5.79398F50"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
span.EmailStyle17
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Chris,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Please take a look at <a href=3D"http://xenproject.org/downloads/win=
dows-pv-drivers">
http://xenproject.org/downloads/windows-pv-drivers</a>. These drivers are a=
ctively developed (they are the basis of the XenServer PV drivers) and are =
reasonably stable at the moment. There have been some problems with XENVBD =
reported on the list recently but
 I will be looking into these as soon as I can.<o:p></o:p></span></font></p=
>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Lars Kurth<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 01 September 2015 12:0=
7<br>
<b><span style=3D"font-weight:bold">To:</span></b> Chris Takemura<br>
<b><span style=3D"font-weight:bold">Cc:</span></b> xen-users@lists.xen.org;=
 Win-pv-devel@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: [win-pv-devel] =
[Xen-users] Recommended Windows PV drivers? (&#43; GPLPV issues)<o:p></o:p>=
</span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
Chris,<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
adding the Windows PV driver list&nbsp;<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
Lars<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
<div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
On 19 Aug 2015, at 01:44, Chris Takemura &lt;<a href=3D"mailto:ctakemura@ax=
cient.com">ctakemura@axcient.com</a>&gt; wrote:<o:p></o:p></span></font></p=
>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
<div>
<div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">Hi everyone,<o:p></o:p></spa=
n></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">What's the status of the var=
ious PV driver projects? &nbsp;Which drivers would be recommended for end-u=
sers
 who just want PV drivers that work? &nbsp;I've been something of a fan of =
the GPL PV drivers, but
<a href=3D"http://meadowcourt.org">meadowcourt.org</a> has been down for a =
while, and I don't think there have been recent updates. &nbsp;There are th=
e erstwhile Xenserver drivers, but my impression is that they're under deve=
lopment and not ready for actual use.<o:p></o:p></span></font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">I would be entirely happy wi=
th the GPL PV drivers, but it seems like XenPCI isn't hiding all the emulat=
ed
 block devices -- &nbsp;I have one machine with 5 emulated disks, 4 ATA and=
 1 SCSI. &nbsp;I still see one disk attached to ATA channel 1 and one disk =
on the SCSI controller. &nbsp;Neither of these is the system disk. &nbsp;Xe=
nVBD is attaching to all 5 disks, but some of the disks
 are (rightly) disabled because of signature collision.<o:p></o:p></span></=
font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;"><o:p>&nbsp;</o:p></span></fo=
nt></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">--&nbsp;<o:p></o:p></span></=
font></p>
</div>
<div>
<p class=3D"MsoNormal"><font size=3D"2" face=3D"Calibri"><span style=3D"fon=
t-size:10.5pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fa=
reast-font-family:&quot;Times New Roman&quot;">chris<o:p></o:p></span></fon=
t></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
_______________________________________________<br>
Xen-users mailing list<br>
<a href=3D"mailto:Xen-users@lists.xen.org">Xen-users@lists.xen.org</a><br>
<a href=3D"http://lists.xen.org/xen-users">http://lists.xen.org/xen-users</=
a><o:p></o:p></span></font></p>
</div>
</blockquote>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times New Roman&quot;">=
<o:p>&nbsp;</o:p></span></font></p>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACA47AMSPEX01CL01cit_--


--===============0237941246125032448==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0237941246125032448==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 14:41:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 14:41:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWmks-0002am-F5; Tue, 01 Sep 2015 14:41:46 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWmkq-0002ah-Sz
	for win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 14:41:45 +0000
Received: from [85.158.137.68] by server-11.bemta-3.messagelabs.com id
	54/9A-32641-829B5E55; Tue, 01 Sep 2015 14:41:44 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441118502!40149747!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20616 invoked from network); 1 Sep 2015 14:41:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 14:41:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,449,1437436800"; 
   d="scan'208";a="2369917"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbA=
Date: Tue, 1 Sep 2015 14:41:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
In-Reply-To: <55D72427.5060904@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNA0K
PiBUbzogUmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0
aCB4ZW52YmQNCj4gDQo+IElsIDIxLzA4LzIwMTUgMTA6MTIsIEZhYmlvIEZhbnRvbmkgaGEgc2Ny
aXR0bzoNCj4gPiBJbCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0
bzoNCj4gPj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+Pj4+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tIEZyb206DQo+ID4+Pj4gd2luLXB2LWRldmVsLWJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+Pj4g
Ym91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEg
U2VudDogMTgNCj4gPj4+PiBBdWd1c3QgMjAxNSAxNDozMyBUbzogd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnIFN1YmplY3Q6DQo+ID4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMg
d2l0aCB4ZW52YmQNCj4gPj4+Pg0KPiA+Pj4+IEhpLA0KPiA+Pj4+DQo+ID4+Pj4gSSd2ZSBiZWVu
IHRlc3RpbmcgdGhlIGN1cnJlbnQgcHZkcml2ZXJzIGNvZGUgaW4gcHJlcGFyYXRpb24gZm9yDQo+
ID4+Pj4gY3JlYXRpbmcgdXBzdHJlYW0gcGF0Y2hlcyBmb3IgbXkgeGVuaWZhY2UgYWRkaXRpb25z
IGFuZCBJIG5vdGljZWQNCj4gPj4+PiB0aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3Rh
YmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmIGl0J3MNCj4gPj4+PiBhIHByb2JsZW0gd2l0aCB4
ZW52YmQgaXRzZWxmIG9yIG15IGNvZGUgYmVjYXVzZSBpdCBzZWVtZWQgdG8gb25seQ0KPiA+Pj4+
IG1hbmlmZXN0IHdoZW4gdGhlIGZ1bGwgc3VpdGUgb2Ygb3VyIGd1ZXN0IHRvb2xzIHdhcyBpbnN0
YWxsZWQgYWxvbmcNCj4gPj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRp
bWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgNCj4gPj4+PiBrZXJuZWwgbWVtb3J5IGNvcnJ1cHRp
b24gaW4gc2VlbWluZ2x5IHJhbmRvbSBwcm9jZXNzZXMgc2hvcnRseQ0KPiA+Pj4+IGFmdGVyIHN0
YXJ0LiBEcml2ZXIgVmVyaWZpZXIgZGlkbid0IHNlZW0gdG8gY2F0Y2ggYW55dGhpbmcuIFlvdSBj
YW4NCj4gPj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVu
dCBjcmFzaDEudHh0Lg0KPiA+Pj4+DQo+ID4+Pj4gVG9kYXkgSSB0cmllZCB0byBwZXJmb3JtIHNv
bWUgbW9yZSB0ZXN0cyBidXQgdGhpcyB0aW1lIHdpdGhvdXQgb3VyDQo+ID4+Pj4gZ3Vlc3QgdG9v
bHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4+Pj4g
aW5zdGFsbGVkKS4gVG8gbXkgc3VycHJpc2Ugbm93IERyaXZlciBWZXJpZmllciB3YXMgY3Jhc2hp
bmcgdGhlDQo+ID4+Pj4gc3lzdGVtIGV2ZXJ5IHRpbWUgaW4geGVudmJkIChzZWUgY3Jhc2gyLnR4
dCkuIEkgZG9uJ3Qga25vdyB3aHkgaXQNCj4gPj4+PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91
c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+Pj4gb2ZmZW5kaW5nIHdh
aXQgZG9lc24ndCBicmVhayBhbnl0aGluZyBJJ2xsIHRyeSB0aGF0IHRvIHNlZSBpZiBJIGNhbg0K
PiA+Pj4+IHJlcHJvZHVjZSB0aGUgcHJldmlvdXMgbWVtb3J5IGNvcnJ1cHRpb25zLg0KPiA+Pj4+
DQo+ID4+PiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0aGUgbmV4
dCB3ZWVrIGJ1dCBJJ2xsIGhhdmUNCj4gPj4+IGEgbG9vayB3aGVuIEkgZ2V0IGJhY2sgdG8gdGhl
IG9mZmljZS4gSSBkaWQgcnVuIHZlcmlmaWVyIG9uIGFsbCB0aGUNCj4gPj4+IGRyaXZlcnMgYSB3
ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBidXQN
Cj4gPj4+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+
ID4+Pg0KPiA+Pj4gUGF1bA0KPiA+Pj4NCj4gPj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21l
IG1vcmUgbG9ncy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcgc3lzdGVtDQo+ID4+IHNodXRkb3du
LCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVwdGVkDQo+
ID4+IGZpbGVzeXN0ZW0gc2luY2UgdGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0
aGF0KS4gSSB0aGluayBldmVyeQ0KPiA+PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9S
IHNvbWV3aGVyZSBidXQgSSdtIG5vdCB5ZXQgZmFtaWxpYXIgd2l0aA0KPiA+PiBYZW4gUFYgZGV2
aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLg0KPiA+Pg0KPiA+PiBJ
biB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFj
ZSBkcml2ZXIgdG8NCj4gPj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVz
ZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvDQo+ID4+IGJlIGZpbmUgdGhlcmUuDQo+
ID4+DQo+ID4+DQo+ID4NCj4gPiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRv
d3MgMTAgcHJvIDY0IGJpdCB3aXRoIHB2IGRyaXZlcnMNCj4gPiBidWlsZCBvZiAxMSBhdWd1c3Qg
YnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywNCj4gPiBv
biBzYW1lIGRvbVUgSSBzdGFydGVkIHRlc3RpbmcgYWxzbyBzbmFwc2hvdCB3aXRoIHFjb3cyIGRp
c2sgb3ZlcmxheS4NCj4gPiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3Jt
YXRpb24gYmVjYXVzZSBkb24ndCB0cnkgdG8NCj4gPiBib290IHdpbmRvd3MgYXQgYWxsIGJ1dCBp
ZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bA0KPiA+IGluZm9ybWF0aW9u
Lg0KPiANCj4gSGFwcGVuIGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0
byB1bmRlcnN0YW5kIHdoYXQgaXMNCj4gZXhhY3RseSB0aGUgY2F1c2UuDQo+IE9uIHdpbmRvd3Mg
cmVib290IGFsbCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0K
PiByZWJvb3Qgc2VhYmlvcyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBk
b24ndCBzaG93IHVzZWZ1bA0KPiBpbmZvcm1hdGlvbnMuDQo+IHFlbXUtaW1nIGNoZWNrIHNob3cg
ZXJyb3JzOg0KPiA+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY2hlY2sgVzEwLmRpc2sxLmNv
dy1zbjENCj4gPiBFUlJPUiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4g
TGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+ID4gRVJST1IgY2x1
c3RlciAxMjIxIHJlZmNvdW50PTEgcmVmZXJlbmNlPTINCj4gPiBMZWFrZWQgY2x1c3RlciAyNzAz
IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50
PTEgcmVmZXJlbmNlPTANCj4gPiBMZWFrZWQgY2x1c3RlciAxMzM3NSByZWZjb3VudD0xIHJlZmVy
ZW5jZT0wDQo+ID4NCj4gPiAyIGVycm9ycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4NCj4gPiBE
YXRhIG1heSBiZSBjb3JydXB0ZWQsIG9yIGZ1cnRoZXIgd3JpdGVzIHRvIHRoZSBpbWFnZSBtYXkg
Y29ycnVwdCBpdC4NCj4gPg0KPiA+IDQgbGVha2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhl
IGltYWdlLg0KPiA+IFRoaXMgbWVhbnMgd2FzdGUgb2YgZGlzayBzcGFjZSwgYnV0IG5vIGhhcm0g
dG8gZGF0YS4NCj4gPiAyNzg1My84MTkyMDAgPSAzLjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFn
bWVudGVkLCAwLjAwJSBjb21wcmVzc2VkDQo+ID4gY2x1c3RlcnMNCj4gPiBJbWFnZSBlbmQgb2Zm
c2V0OiAxODUwNzM2NjQwDQo+IEkgY3JlYXRlZCBpdCB3aXRoOg0KPiAvdXNyL2xpYi94ZW4vYmlu
L3FlbXUtaW1nIGNyZWF0ZSAtbw0KPiBiYWNraW5nX2ZpbGU9VzEwLmRpc2sxLnhtLGJhY2tpbmdf
Zm10PXJhdyAtZiBxY293MiBXMTAuZGlzazEuY293LXNuMQ0KPiBhbmQgY2hhbmdlZCB0aGUgeGwg
ZG9tVSBjb25maWd1cmF0aW9uOg0KPiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11IDIu
NC4wDQo+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycyBidWls
ZCBvZiAxMSBhdWd1c3QNCj4gDQo+IEhvdyBJIGNhbiBrbm93IGZvciBzdXJlIGlmIGl0IGlzIGEg
d2lucHYgb3IgcWVtdSBvciBvdGhlciBwcm9ibGVtIGFuZA0KPiB0YWtlIHVzZWZ1bCBpbmZvcm1h
dGlvbiB0byByZXBvcnQ/DQo+IA0KPiBUaGFua3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9y
IG15IGJhZCBlbmdsaXNoLg0KDQpUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Yg
c3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSSByZWNhbGwgc2VlaW5nIG90aGVyIHByb2JsZW1z
IG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2luZyBhcm91bmQgd2l0aCBPX0RJUkVD
VCBmb3Igb3BlbmluZyBpbWFnZXMuIEkgd29uZGVyIGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2gg
b3BlcmF0aW9uIG9uIHNodXRkb3duLg0KDQogIFBhdWwNCg0KX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 01 14:41:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 01 Sep 2015 14:41:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZWmks-0002am-F5; Tue, 01 Sep 2015 14:41:46 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6790d1476=Paul.Durrant@citrix.com>)
	id 1ZWmkq-0002ah-Sz
	for win-pv-devel@lists.xenproject.org; Tue, 01 Sep 2015 14:41:45 +0000
Received: from [85.158.137.68] by server-11.bemta-3.messagelabs.com id
	54/9A-32641-829B5E55; Tue, 01 Sep 2015 14:41:44 +0000
X-Env-Sender: prvs=6790d1476=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441118502!40149747!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20616 invoked from network); 1 Sep 2015 14:41:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	1 Sep 2015 14:41:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,449,1437436800"; 
   d="scan'208";a="2369917"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbA=
Date: Tue, 1 Sep 2015 14:41:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
In-Reply-To: <55D72427.5060904@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNA0K
PiBUbzogUmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0
aCB4ZW52YmQNCj4gDQo+IElsIDIxLzA4LzIwMTUgMTA6MTIsIEZhYmlvIEZhbnRvbmkgaGEgc2Ny
aXR0bzoNCj4gPiBJbCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0
bzoNCj4gPj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+Pj4+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tIEZyb206DQo+ID4+Pj4gd2luLXB2LWRldmVsLWJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+Pj4g
Ym91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEg
U2VudDogMTgNCj4gPj4+PiBBdWd1c3QgMjAxNSAxNDozMyBUbzogd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnIFN1YmplY3Q6DQo+ID4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMg
d2l0aCB4ZW52YmQNCj4gPj4+Pg0KPiA+Pj4+IEhpLA0KPiA+Pj4+DQo+ID4+Pj4gSSd2ZSBiZWVu
IHRlc3RpbmcgdGhlIGN1cnJlbnQgcHZkcml2ZXJzIGNvZGUgaW4gcHJlcGFyYXRpb24gZm9yDQo+
ID4+Pj4gY3JlYXRpbmcgdXBzdHJlYW0gcGF0Y2hlcyBmb3IgbXkgeGVuaWZhY2UgYWRkaXRpb25z
IGFuZCBJIG5vdGljZWQNCj4gPj4+PiB0aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3Rh
YmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmIGl0J3MNCj4gPj4+PiBhIHByb2JsZW0gd2l0aCB4
ZW52YmQgaXRzZWxmIG9yIG15IGNvZGUgYmVjYXVzZSBpdCBzZWVtZWQgdG8gb25seQ0KPiA+Pj4+
IG1hbmlmZXN0IHdoZW4gdGhlIGZ1bGwgc3VpdGUgb2Ygb3VyIGd1ZXN0IHRvb2xzIHdhcyBpbnN0
YWxsZWQgYWxvbmcNCj4gPj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRp
bWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgNCj4gPj4+PiBrZXJuZWwgbWVtb3J5IGNvcnJ1cHRp
b24gaW4gc2VlbWluZ2x5IHJhbmRvbSBwcm9jZXNzZXMgc2hvcnRseQ0KPiA+Pj4+IGFmdGVyIHN0
YXJ0LiBEcml2ZXIgVmVyaWZpZXIgZGlkbid0IHNlZW0gdG8gY2F0Y2ggYW55dGhpbmcuIFlvdSBj
YW4NCj4gPj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVu
dCBjcmFzaDEudHh0Lg0KPiA+Pj4+DQo+ID4+Pj4gVG9kYXkgSSB0cmllZCB0byBwZXJmb3JtIHNv
bWUgbW9yZSB0ZXN0cyBidXQgdGhpcyB0aW1lIHdpdGhvdXQgb3VyDQo+ID4+Pj4gZ3Vlc3QgdG9v
bHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4+Pj4g
aW5zdGFsbGVkKS4gVG8gbXkgc3VycHJpc2Ugbm93IERyaXZlciBWZXJpZmllciB3YXMgY3Jhc2hp
bmcgdGhlDQo+ID4+Pj4gc3lzdGVtIGV2ZXJ5IHRpbWUgaW4geGVudmJkIChzZWUgY3Jhc2gyLnR4
dCkuIEkgZG9uJ3Qga25vdyB3aHkgaXQNCj4gPj4+PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91
c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+Pj4gb2ZmZW5kaW5nIHdh
aXQgZG9lc24ndCBicmVhayBhbnl0aGluZyBJJ2xsIHRyeSB0aGF0IHRvIHNlZSBpZiBJIGNhbg0K
PiA+Pj4+IHJlcHJvZHVjZSB0aGUgcHJldmlvdXMgbWVtb3J5IGNvcnJ1cHRpb25zLg0KPiA+Pj4+
DQo+ID4+PiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0aGUgbmV4
dCB3ZWVrIGJ1dCBJJ2xsIGhhdmUNCj4gPj4+IGEgbG9vayB3aGVuIEkgZ2V0IGJhY2sgdG8gdGhl
IG9mZmljZS4gSSBkaWQgcnVuIHZlcmlmaWVyIG9uIGFsbCB0aGUNCj4gPj4+IGRyaXZlcnMgYSB3
ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBidXQN
Cj4gPj4+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+
ID4+Pg0KPiA+Pj4gUGF1bA0KPiA+Pj4NCj4gPj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21l
IG1vcmUgbG9ncy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcgc3lzdGVtDQo+ID4+IHNodXRkb3du
LCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVwdGVkDQo+
ID4+IGZpbGVzeXN0ZW0gc2luY2UgdGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0
aGF0KS4gSSB0aGluayBldmVyeQ0KPiA+PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9S
IHNvbWV3aGVyZSBidXQgSSdtIG5vdCB5ZXQgZmFtaWxpYXIgd2l0aA0KPiA+PiBYZW4gUFYgZGV2
aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLg0KPiA+Pg0KPiA+PiBJ
biB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFj
ZSBkcml2ZXIgdG8NCj4gPj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVz
ZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvDQo+ID4+IGJlIGZpbmUgdGhlcmUuDQo+
ID4+DQo+ID4+DQo+ID4NCj4gPiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRv
d3MgMTAgcHJvIDY0IGJpdCB3aXRoIHB2IGRyaXZlcnMNCj4gPiBidWlsZCBvZiAxMSBhdWd1c3Qg
YnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywNCj4gPiBv
biBzYW1lIGRvbVUgSSBzdGFydGVkIHRlc3RpbmcgYWxzbyBzbmFwc2hvdCB3aXRoIHFjb3cyIGRp
c2sgb3ZlcmxheS4NCj4gPiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3Jt
YXRpb24gYmVjYXVzZSBkb24ndCB0cnkgdG8NCj4gPiBib290IHdpbmRvd3MgYXQgYWxsIGJ1dCBp
ZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bA0KPiA+IGluZm9ybWF0aW9u
Lg0KPiANCj4gSGFwcGVuIGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0
byB1bmRlcnN0YW5kIHdoYXQgaXMNCj4gZXhhY3RseSB0aGUgY2F1c2UuDQo+IE9uIHdpbmRvd3Mg
cmVib290IGFsbCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0K
PiByZWJvb3Qgc2VhYmlvcyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBk
b24ndCBzaG93IHVzZWZ1bA0KPiBpbmZvcm1hdGlvbnMuDQo+IHFlbXUtaW1nIGNoZWNrIHNob3cg
ZXJyb3JzOg0KPiA+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY2hlY2sgVzEwLmRpc2sxLmNv
dy1zbjENCj4gPiBFUlJPUiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4g
TGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+ID4gRVJST1IgY2x1
c3RlciAxMjIxIHJlZmNvdW50PTEgcmVmZXJlbmNlPTINCj4gPiBMZWFrZWQgY2x1c3RlciAyNzAz
IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50
PTEgcmVmZXJlbmNlPTANCj4gPiBMZWFrZWQgY2x1c3RlciAxMzM3NSByZWZjb3VudD0xIHJlZmVy
ZW5jZT0wDQo+ID4NCj4gPiAyIGVycm9ycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4NCj4gPiBE
YXRhIG1heSBiZSBjb3JydXB0ZWQsIG9yIGZ1cnRoZXIgd3JpdGVzIHRvIHRoZSBpbWFnZSBtYXkg
Y29ycnVwdCBpdC4NCj4gPg0KPiA+IDQgbGVha2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhl
IGltYWdlLg0KPiA+IFRoaXMgbWVhbnMgd2FzdGUgb2YgZGlzayBzcGFjZSwgYnV0IG5vIGhhcm0g
dG8gZGF0YS4NCj4gPiAyNzg1My84MTkyMDAgPSAzLjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFn
bWVudGVkLCAwLjAwJSBjb21wcmVzc2VkDQo+ID4gY2x1c3RlcnMNCj4gPiBJbWFnZSBlbmQgb2Zm
c2V0OiAxODUwNzM2NjQwDQo+IEkgY3JlYXRlZCBpdCB3aXRoOg0KPiAvdXNyL2xpYi94ZW4vYmlu
L3FlbXUtaW1nIGNyZWF0ZSAtbw0KPiBiYWNraW5nX2ZpbGU9VzEwLmRpc2sxLnhtLGJhY2tpbmdf
Zm10PXJhdyAtZiBxY293MiBXMTAuZGlzazEuY293LXNuMQ0KPiBhbmQgY2hhbmdlZCB0aGUgeGwg
ZG9tVSBjb25maWd1cmF0aW9uOg0KPiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11IDIu
NC4wDQo+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycyBidWls
ZCBvZiAxMSBhdWd1c3QNCj4gDQo+IEhvdyBJIGNhbiBrbm93IGZvciBzdXJlIGlmIGl0IGlzIGEg
d2lucHYgb3IgcWVtdSBvciBvdGhlciBwcm9ibGVtIGFuZA0KPiB0YWtlIHVzZWZ1bCBpbmZvcm1h
dGlvbiB0byByZXBvcnQ/DQo+IA0KPiBUaGFua3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9y
IG15IGJhZCBlbmdsaXNoLg0KDQpUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Yg
c3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSSByZWNhbGwgc2VlaW5nIG90aGVyIHByb2JsZW1z
IG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2luZyBhcm91bmQgd2l0aCBPX0RJUkVD
VCBmb3Igb3BlbmluZyBpbWFnZXMuIEkgd29uZGVyIGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2gg
b3BlcmF0aW9uIG9uIHNodXRkb3duLg0KDQogIFBhdWwNCg0KX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 02 08:53:38 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Sep 2015 08:53:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZX3nV-0006Fg-Dg; Wed, 02 Sep 2015 08:53:37 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZX3nT-0006FJ-Lz
	for win-pv-devel@lists.xenproject.org; Wed, 02 Sep 2015 08:53:35 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	B2/08-09570-E09B6E55; Wed, 02 Sep 2015 08:53:34 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-31.messagelabs.com!1441184013!37992019!1
X-Originating-IP: [209.85.212.196]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1058 invoked from network); 2 Sep 2015 08:53:34 -0000
Received: from mail-wi0-f196.google.com (HELO mail-wi0-f196.google.com)
	(209.85.212.196)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Sep 2015 08:53:34 -0000
Received: by wicmc4 with SMTP id mc4so1877750wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=aKICqz7nPsK3VfsZEZinVwBp5d9+NqzERAYjOuqyLaI=;
	b=BX9m+KD1qn49J8NQpEyM+HEx9zvWraE8RIuA+OQWQbGEqdqc/Oet7pUuSTZu/gL/4M
	3VEcaL7vWjd+BJSjwn9caw8rW/6hiXsGT81efZ9d+NWP6Tf9atDk/MpeV7CGhA5PzO22
	1FIg/Gn1cF6ipYMIlwQ/O2ITYD2pH79QPiaXXb4HGJjy2kZPxONNajQq3GjOqQQRTsKH
	xYQl+Tw34BCXwRe3a7R6kTX8ysYVzdebdnLqf6O8QUj3a3U8n2eY/N9DnFpCYaP2Ast3
	Nz496l5VXzqpY9GkrqRTmEK0udLOrN4uDjY/mJOag/xVEjhWD965iLm3bWFx/ISmDNu3
	y+Kg==
X-Gm-Message-State: ALoCoQnxH4vgADlC+0Q+6wcvZjQJoOzkutmoKOjHa10PXPXfhHuMPfSDlfLH30R5HAPp7jUeTp4y
X-Received: by 10.180.90.198 with SMTP id by6mr2853366wib.82.1441184013707;
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	r19sm2466802wib.7.2015.09.02.01.53.32
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E6B910.4040604@m2r.biz>
Date: Wed, 2 Sep 2015 10:53:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
Content-Length: 8531
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDEvMDkvMjAxNSAxNjo0MSwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5m
YW50b25pQG0yci5iaXpdCj4+IFNlbnQ6IDIxIEF1Z3VzdCAyMDE1IDE0OjE0Cj4+IFRvOiBSYWZh
xYIgV29qZHnFgmE7IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCj4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+
Pgo+PiBJbCAyMS8wOC8yMDE1IDEwOjEyLCBGYWJpbyBGYW50b25pIGhhIHNjcml0dG86Cj4+PiBJ
bCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0bzoKPj4+PiBPbiAy
MDE1LTA4LTE5IDIzOjI1LCBQYXVsIER1cnJhbnQgd3JvdGU6Cj4+Pj4+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLSBGcm9tOgo+Pj4+Pj4gd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtCj4+Pj4+PiBib3VuY2VzQGxpc3RzLnhl
bnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYSBTZW50OiAxOAo+Pj4+Pj4g
QXVndXN0IDIwMTUgMTQ6MzMgVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyBT
dWJqZWN0Ogo+Pj4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQKPj4+Pj4+
Cj4+Pj4+PiBIaSwKPj4+Pj4+Cj4+Pj4+PiBJJ3ZlIGJlZW4gdGVzdGluZyB0aGUgY3VycmVudCBw
dmRyaXZlcnMgY29kZSBpbiBwcmVwYXJhdGlvbiBmb3IKPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFt
IHBhdGNoZXMgZm9yIG15IHhlbmlmYWNlIGFkZGl0aW9ucyBhbmQgSSBub3RpY2VkCj4+Pj4+PiB0
aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJl
IGlmIGl0J3MKPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBi
ZWNhdXNlIGl0IHNlZW1lZCB0byBvbmx5Cj4+Pj4+PiBtYW5pZmVzdCB3aGVuIHRoZSBmdWxsIHN1
aXRlIG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkIGFsb25nCj4+Pj4+PiB3aXRoIHhl
bnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgK
Pj4+Pj4+IGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHByb2Nl
c3NlcyBzaG9ydGx5Cj4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRpZG4ndCBz
ZWVtIHRvIGNhdGNoIGFueXRoaW5nLiBZb3UgY2FuCj4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUg
c3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lgo+Pj4+Pj4KPj4+Pj4+IFRv
ZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVzdHMgYnV0IHRoaXMgdGltZSB3aXRo
b3V0IG91cgo+Pj4+Pj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVk
IGxpYnJhcmllcyB3ZXJlCj4+Pj4+PiBpbnN0YWxsZWQpLiBUbyBteSBzdXJwcmlzZSBub3cgRHJp
dmVyIFZlcmlmaWVyIHdhcyBjcmFzaGluZyB0aGUKPj4+Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGlu
IHhlbnZiZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0IGtub3cgd2h5IGl0Cj4+Pj4+PiBkaWRu
J3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhl
Cj4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIEknbGwgdHJ5IHRo
YXQgdG8gc2VlIGlmIEkgY2FuCj4+Pj4+PiByZXByb2R1Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBj
b3JydXB0aW9ucy4KPj4+Pj4+Cj4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBv
biBQVE8gZm9yIHRoZSBuZXh0IHdlZWsgYnV0IEknbGwgaGF2ZQo+Pj4+PiBhIGxvb2sgd2hlbiBJ
IGdldCBiYWNrIHRvIHRoZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlCj4+
Pj4+IGRyaXZlcnMgYSB3ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5w
bHVnIHRlc3RzKSBidXQKPj4+Pj4gdGhlcmUgaGF2ZSBiZWVuIGEgY291cGxlIG9mIGNoYW5nZXMg
c2luY2UgdGhlbi4KPj4+Pj4KPj4+Pj4gUGF1bAo+Pj4+Pgo+Pj4+IE5vIHByb2JsZW0uIEkgYXR0
YWNoZWQgc29tZSBtb3JlIGxvZ3MuIFRoZSBsYXN0IG9uZSB3YXMgZHVyaW5nIHN5c3RlbQo+Pj4+
IHNodXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29y
cnVwdGVkCj4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYgc2VlbWVkIHRvIGlu
ZGljYXRlIHRoYXQpLiBJIHRoaW5rIGV2ZXJ5Cj4+Pj4gdGltZSB0aGVyZSBpcyBhIEJMS0lGX1JT
UF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0IGZhbWlsaWFyIHdpdGgKPj4+PiBYZW4g
UFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLgo+Pj4+Cj4+
Pj4gSW4gdGhlIG1lYW50aW1lIEkndmUgcnVuIG1vcmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVu
aWZhY2UgZHJpdmVyIHRvCj4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0
aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvCj4+Pj4gYmUgZmluZSB0aGVyZS4K
Pj4+Pgo+Pj4+Cj4+PiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRvd3MgMTAg
cHJvIDY0IGJpdCB3aXRoIHB2IGRyaXZlcnMKPj4+IGJ1aWxkIG9mIDExIGF1Z3VzdCBidXQgSSdt
IG5vdCBzdXJlIHRoYXQgaXMgcmVsYXRlZCB0byB3aW5wdiBkcml2ZXJzLAo+Pj4gb24gc2FtZSBk
b21VIEkgc3RhcnRlZCB0ZXN0aW5nIGFsc28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJs
YXkuCj4+PiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3JtYXRpb24gYmVj
YXVzZSBkb24ndCB0cnkgdG8KPj4+IGJvb3Qgd2luZG93cyBhdCBhbGwgYnV0IGlmIHJlaGFwcGVu
IEknbGwgdHJ5IHRvIHRha2Ugb3RoZXIgdXNlZnVsCj4+PiBpbmZvcm1hdGlvbi4KPj4gSGFwcGVu
IGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0byB1bmRlcnN0YW5kIHdo
YXQgaXMKPj4gZXhhY3RseSB0aGUgY2F1c2UuCj4+IE9uIHdpbmRvd3MgcmVib290IGFsbCBzZWVt
cyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbgo+PiByZWJvb3Qgc2VhYmlv
cyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBkb24ndCBzaG93IHVzZWZ1
bAo+PiBpbmZvcm1hdGlvbnMuCj4+IHFlbXUtaW1nIGNoZWNrIHNob3cgZXJyb3JzOgo+Pj4gL3Vz
ci9saWIveGVuL2Jpbi9xZW11LWltZyBjaGVjayBXMTAuZGlzazEuY293LXNuMQo+Pj4gRVJST1Ig
Y2x1c3RlciAxNDMgcmVmY291bnQ9MSByZWZlcmVuY2U9Mgo+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3
NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+PiBFUlJPUiBjbHVzdGVyIDEyMjEgcmVmY291bnQ9
MSByZWZlcmVuY2U9Mgo+Pj4gTGVha2VkIGNsdXN0ZXIgMjcwMyByZWZjb3VudD0xIHJlZmVyZW5j
ZT0wCj4+PiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTAKPj4+IExl
YWtlZCBjbHVzdGVyIDEzMzc1IHJlZmNvdW50PTEgcmVmZXJlbmNlPTAKPj4+Cj4+PiAyIGVycm9y
cyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4KPj4+IERhdGEgbWF5IGJlIGNvcnJ1cHRlZCwgb3Ig
ZnVydGhlciB3cml0ZXMgdG8gdGhlIGltYWdlIG1heSBjb3JydXB0IGl0Lgo+Pj4KPj4+IDQgbGVh
a2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLgo+Pj4gVGhpcyBtZWFucyB3YXN0
ZSBvZiBkaXNrIHNwYWNlLCBidXQgbm8gaGFybSB0byBkYXRhLgo+Pj4gMjc4NTMvODE5MjAwID0g
My40MCUgYWxsb2NhdGVkLCAyMi42NSUgZnJhZ21lbnRlZCwgMC4wMCUgY29tcHJlc3NlZAo+Pj4g
Y2x1c3RlcnMKPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4NTA3MzY2NDAKPj4gSSBjcmVhdGVkIGl0
IHdpdGg6Cj4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vCj4+IGJhY2tpbmdf
ZmlsZT1XMTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1mIHFjb3cyIFcxMC5kaXNrMS5jb3ct
c24xCj4+IGFuZCBjaGFuZ2VkIHRoZSB4bCBkb21VIGNvbmZpZ3VyYXRpb246Cj4+IGRpc2s9Wycv
bW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293MixoZGEscncnLC4uLgo+PiBEb20wIGlzIHdp
dGggeGVuIDQuNi1yYzEgYW5kIHFlbXUgMi40LjAKPj4gRG9tVSBpcyB3aW5kb3dzIDEwIHBybyA2
NCBiaXQgd2l0aCBwdiBkcml2ZXJzIGJ1aWxkIG9mIDExIGF1Z3VzdAo+Pgo+PiBIb3cgSSBjYW4g
a25vdyBmb3Igc3VyZSBpZiBpdCBpcyBhIHdpbnB2IG9yIHFlbXUgb3Igb3RoZXIgcHJvYmxlbSBh
bmQKPj4gdGFrZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gcmVwb3J0Pwo+Pgo+PiBUaGFua3MgZm9y
IGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgo+IFRoaXMgc291bmRzIHZl
cnkgbXVjaCBsaWtlIGEgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gc29tZXdoZXJlLiBJIHJlY2Fs
bCBzZWVpbmcgb3RoZXIgcHJvYmxlbXMgb2YgdGhpcyBpbGsgd2hlbiBzb21lb25lIHdhcyBtZXNz
aW5nIGFyb3VuZCB3aXRoIE9fRElSRUNUIGZvciBvcGVuaW5nIGltYWdlcy4gSSB3b25kZXIgaWYg
d2UgYXJlIG1pc3NpbmcgYSBmbHVzaCBvcGVyYXRpb24gb24gc2h1dGRvd24uCj4KPiAgICBQYXVs
Cj4KVGhhbmtzIGZvciByZXBseS4KSSBkaWQgYSBmYXN0IHNlYXJjaCBidXQgSSBub3QgZm91bmQg
T19ESVJFQ1QgZ3JlcHBpbmcgaW4gbGlieGwsIEkgZm91bmQgCml0IG9ubHkgaW4gcWVtdSBjb2Rl
LgpBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhhdCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0
IGZvciB4ZW46Cmh0dHA6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXRkaWZmO2g9
NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgzNzY0MzVhOGU3NGJiNGVkZApDaGVja2luZyBpbiBsaWJ4
bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNvbWUgb2xkIHhlbiBwb3N0IApz
ZWVtcyB0aGF0IE9fRElSRUNUIGNyZWF0ZXMgcHJvYmxlbXMuCkkgc2hvdWxkIHRyeSBpdCBlbmFi
bGUgZGlyZWN0LWlvLXNhZmUgaW4gZG9tVXMgcWNvdzIgZGlza3M/CkFkZGVkIGFsc28gU3RlZmFu
byBTdGFiZWxsaW5pIGFzIGNjLgpAU3RlZmFubyBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJy
ZW50IGtub3cgc3RhdHVzIGFuZCByZXN1bHQgb2YgCmRpcmVjdC1pby1zYWZlPwpTb3JyeSBpcyB0
aGUgcXVlc3Rpb24gYXJlIHN0dXBpZCBieSBvciBteSBlbmdsaXNoIGlzIHRvbyBiYWQgb3IgbWFu
eSAKcG9zdCBvZiBsYXRlc3QgeWVhcnMgYXJlIGNvbmZ1c2VkIGFuZCBpbiBzYW1lIGNhc2VzIHNl
ZW1zIGFsc28gCmNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3Jt
YW5jZSB1c2luZyBpdCBvciBub3QuCkluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2ggd2l0aCBzb21l
IGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseSAKd2hhdCB2ZXJzaW9ucyBhbmQv
b3Igd2l0aCB3aGljaCBwYXRjaGVzLgoKQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90
aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkgCmxhdGVzdCB0ZXN0IHdpdGgg
eGVuIDQuNiB3aXRob3V0IHVkZXYgZmlsZSB3aW5kb3dzIGRvbVVzIHdpdGggbmV3IHB2IApkcml2
ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVjdGx5IEkgbXVzdCByZWFk
ZCB1ZGV2IApmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2UgcmVsYXRlZCB0byB0
aGlzIHByb2JsZW0gb3IgaXMgCmRpZmZlcmVudD8KaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2
ZXMvaHRtbC93aW4tcHYtZGV2ZWwvMjAxNS0wOC9tc2cwMDAzMy5odG1sCgpUaGFua3MgZm9yIGFu
eSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgoKCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0
Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 02 08:53:38 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Sep 2015 08:53:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZX3nV-0006Fg-Dg; Wed, 02 Sep 2015 08:53:37 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZX3nT-0006FJ-Lz
	for win-pv-devel@lists.xenproject.org; Wed, 02 Sep 2015 08:53:35 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	B2/08-09570-E09B6E55; Wed, 02 Sep 2015 08:53:34 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-14.tower-31.messagelabs.com!1441184013!37992019!1
X-Originating-IP: [209.85.212.196]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1058 invoked from network); 2 Sep 2015 08:53:34 -0000
Received: from mail-wi0-f196.google.com (HELO mail-wi0-f196.google.com)
	(209.85.212.196)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Sep 2015 08:53:34 -0000
Received: by wicmc4 with SMTP id mc4so1877750wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=aKICqz7nPsK3VfsZEZinVwBp5d9+NqzERAYjOuqyLaI=;
	b=BX9m+KD1qn49J8NQpEyM+HEx9zvWraE8RIuA+OQWQbGEqdqc/Oet7pUuSTZu/gL/4M
	3VEcaL7vWjd+BJSjwn9caw8rW/6hiXsGT81efZ9d+NWP6Tf9atDk/MpeV7CGhA5PzO22
	1FIg/Gn1cF6ipYMIlwQ/O2ITYD2pH79QPiaXXb4HGJjy2kZPxONNajQq3GjOqQQRTsKH
	xYQl+Tw34BCXwRe3a7R6kTX8ysYVzdebdnLqf6O8QUj3a3U8n2eY/N9DnFpCYaP2Ast3
	Nz496l5VXzqpY9GkrqRTmEK0udLOrN4uDjY/mJOag/xVEjhWD965iLm3bWFx/ISmDNu3
	y+Kg==
X-Gm-Message-State: ALoCoQnxH4vgADlC+0Q+6wcvZjQJoOzkutmoKOjHa10PXPXfhHuMPfSDlfLH30R5HAPp7jUeTp4y
X-Received: by 10.180.90.198 with SMTP id by6mr2853366wib.82.1441184013707;
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	r19sm2466802wib.7.2015.09.02.01.53.32
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 02 Sep 2015 01:53:33 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E6B910.4040604@m2r.biz>
Date: Wed, 2 Sep 2015 10:53:36 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
Content-Length: 8531
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDEvMDkvMjAxNSAxNjo0MSwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5m
YW50b25pQG0yci5iaXpdCj4+IFNlbnQ6IDIxIEF1Z3VzdCAyMDE1IDE0OjE0Cj4+IFRvOiBSYWZh
xYIgV29qZHnFgmE7IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCj4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+
Pgo+PiBJbCAyMS8wOC8yMDE1IDEwOjEyLCBGYWJpbyBGYW50b25pIGhhIHNjcml0dG86Cj4+PiBJ
bCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0bzoKPj4+PiBPbiAy
MDE1LTA4LTE5IDIzOjI1LCBQYXVsIER1cnJhbnQgd3JvdGU6Cj4+Pj4+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLSBGcm9tOgo+Pj4+Pj4gd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtCj4+Pj4+PiBib3VuY2VzQGxpc3RzLnhl
bnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYSBTZW50OiAxOAo+Pj4+Pj4g
QXVndXN0IDIwMTUgMTQ6MzMgVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyBT
dWJqZWN0Ogo+Pj4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQKPj4+Pj4+
Cj4+Pj4+PiBIaSwKPj4+Pj4+Cj4+Pj4+PiBJJ3ZlIGJlZW4gdGVzdGluZyB0aGUgY3VycmVudCBw
dmRyaXZlcnMgY29kZSBpbiBwcmVwYXJhdGlvbiBmb3IKPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFt
IHBhdGNoZXMgZm9yIG15IHhlbmlmYWNlIGFkZGl0aW9ucyBhbmQgSSBub3RpY2VkCj4+Pj4+PiB0
aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJl
IGlmIGl0J3MKPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBi
ZWNhdXNlIGl0IHNlZW1lZCB0byBvbmx5Cj4+Pj4+PiBtYW5pZmVzdCB3aGVuIHRoZSBmdWxsIHN1
aXRlIG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkIGFsb25nCj4+Pj4+PiB3aXRoIHhl
bnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgK
Pj4+Pj4+IGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHByb2Nl
c3NlcyBzaG9ydGx5Cj4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRpZG4ndCBz
ZWVtIHRvIGNhdGNoIGFueXRoaW5nLiBZb3UgY2FuCj4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUg
c3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lgo+Pj4+Pj4KPj4+Pj4+IFRv
ZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVzdHMgYnV0IHRoaXMgdGltZSB3aXRo
b3V0IG91cgo+Pj4+Pj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVk
IGxpYnJhcmllcyB3ZXJlCj4+Pj4+PiBpbnN0YWxsZWQpLiBUbyBteSBzdXJwcmlzZSBub3cgRHJp
dmVyIFZlcmlmaWVyIHdhcyBjcmFzaGluZyB0aGUKPj4+Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGlu
IHhlbnZiZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0IGtub3cgd2h5IGl0Cj4+Pj4+PiBkaWRu
J3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhl
Cj4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vzbid0IGJyZWFrIGFueXRoaW5nIEknbGwgdHJ5IHRo
YXQgdG8gc2VlIGlmIEkgY2FuCj4+Pj4+PiByZXByb2R1Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBj
b3JydXB0aW9ucy4KPj4+Pj4+Cj4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBv
biBQVE8gZm9yIHRoZSBuZXh0IHdlZWsgYnV0IEknbGwgaGF2ZQo+Pj4+PiBhIGxvb2sgd2hlbiBJ
IGdldCBiYWNrIHRvIHRoZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlCj4+
Pj4+IGRyaXZlcnMgYSB3ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5w
bHVnIHRlc3RzKSBidXQKPj4+Pj4gdGhlcmUgaGF2ZSBiZWVuIGEgY291cGxlIG9mIGNoYW5nZXMg
c2luY2UgdGhlbi4KPj4+Pj4KPj4+Pj4gUGF1bAo+Pj4+Pgo+Pj4+IE5vIHByb2JsZW0uIEkgYXR0
YWNoZWQgc29tZSBtb3JlIGxvZ3MuIFRoZSBsYXN0IG9uZSB3YXMgZHVyaW5nIHN5c3RlbQo+Pj4+
IHNodXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29y
cnVwdGVkCj4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYgc2VlbWVkIHRvIGlu
ZGljYXRlIHRoYXQpLiBJIHRoaW5rIGV2ZXJ5Cj4+Pj4gdGltZSB0aGVyZSBpcyBhIEJMS0lGX1JT
UF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0IGZhbWlsaWFyIHdpdGgKPj4+PiBYZW4g
UFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLgo+Pj4+Cj4+
Pj4gSW4gdGhlIG1lYW50aW1lIEkndmUgcnVuIG1vcmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVu
aWZhY2UgZHJpdmVyIHRvCj4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0
aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvCj4+Pj4gYmUgZmluZSB0aGVyZS4K
Pj4+Pgo+Pj4+Cj4+PiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRvd3MgMTAg
cHJvIDY0IGJpdCB3aXRoIHB2IGRyaXZlcnMKPj4+IGJ1aWxkIG9mIDExIGF1Z3VzdCBidXQgSSdt
IG5vdCBzdXJlIHRoYXQgaXMgcmVsYXRlZCB0byB3aW5wdiBkcml2ZXJzLAo+Pj4gb24gc2FtZSBk
b21VIEkgc3RhcnRlZCB0ZXN0aW5nIGFsc28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJs
YXkuCj4+PiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3JtYXRpb24gYmVj
YXVzZSBkb24ndCB0cnkgdG8KPj4+IGJvb3Qgd2luZG93cyBhdCBhbGwgYnV0IGlmIHJlaGFwcGVu
IEknbGwgdHJ5IHRvIHRha2Ugb3RoZXIgdXNlZnVsCj4+PiBpbmZvcm1hdGlvbi4KPj4gSGFwcGVu
IGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0byB1bmRlcnN0YW5kIHdo
YXQgaXMKPj4gZXhhY3RseSB0aGUgY2F1c2UuCj4+IE9uIHdpbmRvd3MgcmVib290IGFsbCBzZWVt
cyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbgo+PiByZWJvb3Qgc2VhYmlv
cyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBkb24ndCBzaG93IHVzZWZ1
bAo+PiBpbmZvcm1hdGlvbnMuCj4+IHFlbXUtaW1nIGNoZWNrIHNob3cgZXJyb3JzOgo+Pj4gL3Vz
ci9saWIveGVuL2Jpbi9xZW11LWltZyBjaGVjayBXMTAuZGlzazEuY293LXNuMQo+Pj4gRVJST1Ig
Y2x1c3RlciAxNDMgcmVmY291bnQ9MSByZWZlcmVuY2U9Mgo+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3
NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+PiBFUlJPUiBjbHVzdGVyIDEyMjEgcmVmY291bnQ9
MSByZWZlcmVuY2U9Mgo+Pj4gTGVha2VkIGNsdXN0ZXIgMjcwMyByZWZjb3VudD0xIHJlZmVyZW5j
ZT0wCj4+PiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTAKPj4+IExl
YWtlZCBjbHVzdGVyIDEzMzc1IHJlZmNvdW50PTEgcmVmZXJlbmNlPTAKPj4+Cj4+PiAyIGVycm9y
cyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4KPj4+IERhdGEgbWF5IGJlIGNvcnJ1cHRlZCwgb3Ig
ZnVydGhlciB3cml0ZXMgdG8gdGhlIGltYWdlIG1heSBjb3JydXB0IGl0Lgo+Pj4KPj4+IDQgbGVh
a2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLgo+Pj4gVGhpcyBtZWFucyB3YXN0
ZSBvZiBkaXNrIHNwYWNlLCBidXQgbm8gaGFybSB0byBkYXRhLgo+Pj4gMjc4NTMvODE5MjAwID0g
My40MCUgYWxsb2NhdGVkLCAyMi42NSUgZnJhZ21lbnRlZCwgMC4wMCUgY29tcHJlc3NlZAo+Pj4g
Y2x1c3RlcnMKPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4NTA3MzY2NDAKPj4gSSBjcmVhdGVkIGl0
IHdpdGg6Cj4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vCj4+IGJhY2tpbmdf
ZmlsZT1XMTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1mIHFjb3cyIFcxMC5kaXNrMS5jb3ct
c24xCj4+IGFuZCBjaGFuZ2VkIHRoZSB4bCBkb21VIGNvbmZpZ3VyYXRpb246Cj4+IGRpc2s9Wycv
bW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293MixoZGEscncnLC4uLgo+PiBEb20wIGlzIHdp
dGggeGVuIDQuNi1yYzEgYW5kIHFlbXUgMi40LjAKPj4gRG9tVSBpcyB3aW5kb3dzIDEwIHBybyA2
NCBiaXQgd2l0aCBwdiBkcml2ZXJzIGJ1aWxkIG9mIDExIGF1Z3VzdAo+Pgo+PiBIb3cgSSBjYW4g
a25vdyBmb3Igc3VyZSBpZiBpdCBpcyBhIHdpbnB2IG9yIHFlbXUgb3Igb3RoZXIgcHJvYmxlbSBh
bmQKPj4gdGFrZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gcmVwb3J0Pwo+Pgo+PiBUaGFua3MgZm9y
IGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgo+IFRoaXMgc291bmRzIHZl
cnkgbXVjaCBsaWtlIGEgbGFjayBvZiBzeW5jaHJvbml6YXRpb24gc29tZXdoZXJlLiBJIHJlY2Fs
bCBzZWVpbmcgb3RoZXIgcHJvYmxlbXMgb2YgdGhpcyBpbGsgd2hlbiBzb21lb25lIHdhcyBtZXNz
aW5nIGFyb3VuZCB3aXRoIE9fRElSRUNUIGZvciBvcGVuaW5nIGltYWdlcy4gSSB3b25kZXIgaWYg
d2UgYXJlIG1pc3NpbmcgYSBmbHVzaCBvcGVyYXRpb24gb24gc2h1dGRvd24uCj4KPiAgICBQYXVs
Cj4KVGhhbmtzIGZvciByZXBseS4KSSBkaWQgYSBmYXN0IHNlYXJjaCBidXQgSSBub3QgZm91bmQg
T19ESVJFQ1QgZ3JlcHBpbmcgaW4gbGlieGwsIEkgZm91bmQgCml0IG9ubHkgaW4gcWVtdSBjb2Rl
LgpBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhhdCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0
IGZvciB4ZW46Cmh0dHA6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXRkaWZmO2g9
NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgzNzY0MzVhOGU3NGJiNGVkZApDaGVja2luZyBpbiBsaWJ4
bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNvbWUgb2xkIHhlbiBwb3N0IApz
ZWVtcyB0aGF0IE9fRElSRUNUIGNyZWF0ZXMgcHJvYmxlbXMuCkkgc2hvdWxkIHRyeSBpdCBlbmFi
bGUgZGlyZWN0LWlvLXNhZmUgaW4gZG9tVXMgcWNvdzIgZGlza3M/CkFkZGVkIGFsc28gU3RlZmFu
byBTdGFiZWxsaW5pIGFzIGNjLgpAU3RlZmFubyBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJy
ZW50IGtub3cgc3RhdHVzIGFuZCByZXN1bHQgb2YgCmRpcmVjdC1pby1zYWZlPwpTb3JyeSBpcyB0
aGUgcXVlc3Rpb24gYXJlIHN0dXBpZCBieSBvciBteSBlbmdsaXNoIGlzIHRvbyBiYWQgb3IgbWFu
eSAKcG9zdCBvZiBsYXRlc3QgeWVhcnMgYXJlIGNvbmZ1c2VkIGFuZCBpbiBzYW1lIGNhc2VzIHNl
ZW1zIGFsc28gCmNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3Jt
YW5jZSB1c2luZyBpdCBvciBub3QuCkluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2ggd2l0aCBzb21l
IGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseSAKd2hhdCB2ZXJzaW9ucyBhbmQv
b3Igd2l0aCB3aGljaCBwYXRjaGVzLgoKQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90
aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkgCmxhdGVzdCB0ZXN0IHdpdGgg
eGVuIDQuNiB3aXRob3V0IHVkZXYgZmlsZSB3aW5kb3dzIGRvbVVzIHdpdGggbmV3IHB2IApkcml2
ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVjdGx5IEkgbXVzdCByZWFk
ZCB1ZGV2IApmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2UgcmVsYXRlZCB0byB0
aGlzIHByb2JsZW0gb3IgaXMgCmRpZmZlcmVudD8KaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2
ZXMvaHRtbC93aW4tcHYtZGV2ZWwvMjAxNS0wOC9tc2cwMDAzMy5odG1sCgpUaGFua3MgZm9yIGFu
eSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgoKCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0
Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 02 09:00:01 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Sep 2015 09:00:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZX3tg-0006nI-T1; Wed, 02 Sep 2015 09:00:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6800d1a06=Paul.Durrant@citrix.com>)
	id 1ZX3tf-0006nD-A1
	for win-pv-devel@lists.xenproject.org; Wed, 02 Sep 2015 08:59:59 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	B7/B8-28791-E8AB6E55; Wed, 02 Sep 2015 08:59:58 +0000
X-Env-Sender: prvs=6800d1a06=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441184397!27279149!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19398 invoked from network); 2 Sep 2015 08:59:57 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Sep 2015 08:59:57 -0000
X-IronPort-AV: E=Sophos;i="5.17,452,1437436800"; 
   d="scan'208";a="2399818"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQ
Date: Wed, 2 Sep 2015 08:59:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
In-Reply-To: <55E6B910.4040604@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAxNSAwOTo1
NA0KPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDEvMDkvMjAx
NSAxNjo0MSwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25p
QG0yci5iaXpdDQo+ID4+IFNlbnQ6IDIxIEF1Z3VzdCAyMDE1IDE0OjE0DQo+ID4+IFRvOiBSYWZh
xYIgV29qZHnFgmE7IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pg0KPiA+PiBJbCAyMS8wOC8yMDE1IDEwOjEyLCBGYWJpbyBGYW50b25pIGhhIHNjcml0
dG86DQo+ID4+PiBJbCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0
bzoNCj4gPj4+PiBPbiAyMDE1LTA4LTE5IDIzOjI1LCBQYXVsIER1cnJhbnQgd3JvdGU6DQo+ID4+
Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLSBGcm9tOg0KPiA+Pj4+Pj4gd2luLXB2LWRl
dmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+
ID4+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwg
V29qZHlsYSBTZW50OiAxOA0KPiA+Pj4+Pj4gQXVndXN0IDIwMTUgMTQ6MzMgVG86IHdpbi1wdi1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyBTdWJqZWN0Og0KPiA+Pj4+Pj4gW3dpbi1wdi1kZXZl
bF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBIaSwNCj4gPj4+Pj4+
DQo+ID4+Pj4+PiBJJ3ZlIGJlZW4gdGVzdGluZyB0aGUgY3VycmVudCBwdmRyaXZlcnMgY29kZSBp
biBwcmVwYXJhdGlvbiBmb3INCj4gPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFtIHBhdGNoZXMgZm9y
IG15IHhlbmlmYWNlIGFkZGl0aW9ucyBhbmQgSSBub3RpY2VkDQo+ID4+Pj4+PiB0aGFuIHhlbnZi
ZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmIGl0J3MN
Cj4gPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBiZWNhdXNl
IGl0IHNlZW1lZCB0byBvbmx5DQo+ID4+Pj4+PiBtYW5pZmVzdCB3aGVuIHRoZSBmdWxsIHN1aXRl
IG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkIGFsb25nDQo+ID4+Pj4+PiB3aXRoIHhl
bnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgN
Cj4gPj4+Pj4+IGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHBy
b2Nlc3NlcyBzaG9ydGx5DQo+ID4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRp
ZG4ndCBzZWVtIHRvIGNhdGNoIGFueXRoaW5nLiBZb3UgY2FuDQo+ID4+Pj4+PiBzZWUgYSBsb2cg
ZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+Pj4+
Pj4NCj4gPj4+Pj4+IFRvZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVzdHMgYnV0
IHRoaXMgdGltZSB3aXRob3V0IG91cg0KPiA+Pj4+Pj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2
ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4+Pj4+PiBpbnN0YWxsZWQpLiBU
byBteSBzdXJwcmlzZSBub3cgRHJpdmVyIFZlcmlmaWVyIHdhcyBjcmFzaGluZyB0aGUNCj4gPj4+
Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGluIHhlbnZiZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0
IGtub3cgd2h5IGl0DQo+ID4+Pj4+PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElm
IGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vz
bid0IGJyZWFrIGFueXRoaW5nIEknbGwgdHJ5IHRoYXQgdG8gc2VlIGlmIEkgY2FuDQo+ID4+Pj4+
PiByZXByb2R1Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBjb3JydXB0aW9ucy4NCj4gPj4+Pj4+DQo+
ID4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBvbiBQVE8gZm9yIHRoZSBuZXh0
IHdlZWsgYnV0IEknbGwgaGF2ZQ0KPiA+Pj4+PiBhIGxvb2sgd2hlbiBJIGdldCBiYWNrIHRvIHRo
ZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlDQo+ID4+Pj4+IGRyaXZlcnMg
YSB3ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBi
dXQNCj4gPj4+Pj4gdGhlcmUgaGF2ZSBiZWVuIGEgY291cGxlIG9mIGNoYW5nZXMgc2luY2UgdGhl
bi4NCj4gPj4+Pj4NCj4gPj4+Pj4gUGF1bA0KPiA+Pj4+Pg0KPiA+Pj4+IE5vIHByb2JsZW0uIEkg
YXR0YWNoZWQgc29tZSBtb3JlIGxvZ3MuIFRoZSBsYXN0IG9uZSB3YXMgZHVyaW5nDQo+IHN5c3Rl
bQ0KPiA+Pj4+IHNodXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJv
YmFibHkgY29ycnVwdGVkDQo+ID4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYg
c2VlbWVkIHRvIGluZGljYXRlIHRoYXQpLiBJIHRoaW5rIGV2ZXJ5DQo+ID4+Pj4gdGltZSB0aGVy
ZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0IGZhbWlsaWFy
DQo+IHdpdGgNCj4gPj4+PiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hh
dCB0aGF0IG1lYW5zLg0KPiA+Pj4+DQo+ID4+Pj4gSW4gdGhlIG1lYW50aW1lIEkndmUgcnVuIG1v
cmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVuaWZhY2UgZHJpdmVyIHRvDQo+ID4+Pj4gbWFrZSBz
dXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcg
c2VlbWVkDQo+IHRvDQo+ID4+Pj4gYmUgZmluZSB0aGVyZS4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+
PiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRvd3MgMTAgcHJvIDY0IGJpdCB3
aXRoIHB2IGRyaXZlcnMNCj4gPj4+IGJ1aWxkIG9mIDExIGF1Z3VzdCBidXQgSSdtIG5vdCBzdXJl
IHRoYXQgaXMgcmVsYXRlZCB0byB3aW5wdiBkcml2ZXJzLA0KPiA+Pj4gb24gc2FtZSBkb21VIEkg
c3RhcnRlZCB0ZXN0aW5nIGFsc28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJsYXkuDQo+
ID4+PiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3JtYXRpb24gYmVjYXVz
ZSBkb24ndCB0cnkgdG8NCj4gPj4+IGJvb3Qgd2luZG93cyBhdCBhbGwgYnV0IGlmIHJlaGFwcGVu
IEknbGwgdHJ5IHRvIHRha2Ugb3RoZXIgdXNlZnVsDQo+ID4+PiBpbmZvcm1hdGlvbi4NCj4gPj4g
SGFwcGVuIGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0byB1bmRlcnN0
YW5kIHdoYXQgaXMNCj4gPj4gZXhhY3RseSB0aGUgY2F1c2UuDQo+ID4+IE9uIHdpbmRvd3MgcmVi
b290IGFsbCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0KPiA+
PiByZWJvb3Qgc2VhYmlvcyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBk
b24ndCBzaG93IHVzZWZ1bA0KPiA+PiBpbmZvcm1hdGlvbnMuDQo+ID4+IHFlbXUtaW1nIGNoZWNr
IHNob3cgZXJyb3JzOg0KPiA+Pj4gL3Vzci9saWIveGVuL2Jpbi9xZW11LWltZyBjaGVjayBXMTAu
ZGlzazEuY293LXNuMQ0KPiA+Pj4gRVJST1IgY2x1c3RlciAxNDMgcmVmY291bnQ9MSByZWZlcmVu
Y2U9Mg0KPiA+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+
ID4+PiBFUlJPUiBjbHVzdGVyIDEyMjEgcmVmY291bnQ9MSByZWZlcmVuY2U9Mg0KPiA+Pj4gTGVh
a2VkIGNsdXN0ZXIgMjcwMyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+ID4+PiBMZWFrZWQgY2x1
c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+IExlYWtlZCBjbHVzdGVyIDEz
Mzc1IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+DQo+ID4+PiAyIGVycm9ycyB3ZXJlIGZv
dW5kIG9uIHRoZSBpbWFnZS4NCj4gPj4+IERhdGEgbWF5IGJlIGNvcnJ1cHRlZCwgb3IgZnVydGhl
ciB3cml0ZXMgdG8gdGhlIGltYWdlIG1heSBjb3JydXB0IGl0Lg0KPiA+Pj4NCj4gPj4+IDQgbGVh
a2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+Pj4gVGhpcyBtZWFucyB3
YXN0ZSBvZiBkaXNrIHNwYWNlLCBidXQgbm8gaGFybSB0byBkYXRhLg0KPiA+Pj4gMjc4NTMvODE5
MjAwID0gMy40MCUgYWxsb2NhdGVkLCAyMi42NSUgZnJhZ21lbnRlZCwgMC4wMCUgY29tcHJlc3Nl
ZA0KPiA+Pj4gY2x1c3RlcnMNCj4gPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4NTA3MzY2NDANCj4g
Pj4gSSBjcmVhdGVkIGl0IHdpdGg6DQo+ID4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3Jl
YXRlIC1vDQo+ID4+IGJhY2tpbmdfZmlsZT1XMTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1m
IHFjb3cyIFcxMC5kaXNrMS5jb3ctDQo+IHNuMQ0KPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9t
VSBjb25maWd1cmF0aW9uOg0KPiA+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gPj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11
IDIuNC4wDQo+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVy
cyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPj4NCj4gPj4gSG93IEkgY2FuIGtub3cgZm9yIHN1cmUg
aWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2JsZW0gYW5kDQo+ID4+IHRha2Ug
dXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPj4NCj4gPj4gVGhhbmtzIGZvciBhbnkg
cmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCj4gPiBUaGlzIHNvdW5kcyB2ZXJ5
IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSSByZWNhbGwN
Cj4gc2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVz
c2luZyBhcm91bmQgd2l0aA0KPiBPX0RJUkVDVCBmb3Igb3BlbmluZyBpbWFnZXMuIEkgd29uZGVy
IGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2ggb3BlcmF0aW9uDQo+IG9uIHNodXRkb3duLg0KPiA+
DQo+ID4gICAgUGF1bA0KPiA+DQo+IFRoYW5rcyBmb3IgcmVwbHkuDQo+IEkgZGlkIGEgZmFzdCBz
ZWFyY2ggYnV0IEkgbm90IGZvdW5kIE9fRElSRUNUIGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5k
DQo+IGl0IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiBBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhh
dCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+IGh0dHA6Ly9naXQucWVtdS5v
cmcvP3A9cWVtdS5naXQ7YT1jb21taXRkaWZmO2g9NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgNCj4g
Mzc2NDM1YThlNzRiYjRlZGQNCj4gQ2hlY2tpbmcgaW4gbGlieGwgc2VlbXMgZGlzYWJsZWQgYnkg
ZGVmYXVsdCBhbmQgZnJvbSBzb21lIG9sZCB4ZW4gcG9zdA0KPiBzZWVtcyB0aGF0IE9fRElSRUNU
IGNyZWF0ZXMgcHJvYmxlbXMuDQo+IEkgc2hvdWxkIHRyeSBpdCBlbmFibGUgZGlyZWN0LWlvLXNh
ZmUgaW4gZG9tVXMgcWNvdzIgZGlza3M/DQo+IEFkZGVkIGFsc28gU3RlZmFubyBTdGFiZWxsaW5p
IGFzIGNjLg0KPiBAU3RlZmFubyBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJyZW50IGtub3cg
c3RhdHVzIGFuZCByZXN1bHQgb2YNCj4gZGlyZWN0LWlvLXNhZmU/DQo+IFNvcnJ5IGlzIHRoZSBx
dWVzdGlvbiBhcmUgc3R1cGlkIGJ5IG9yIG15IGVuZ2xpc2ggaXMgdG9vIGJhZCBvciBtYW55DQo+
IHBvc3Qgb2YgbGF0ZXN0IHllYXJzIGFyZSBjb25mdXNlZCBhbmQgaW4gc2FtZSBjYXNlcyBzZWVt
cyBhbHNvDQo+IGNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3Jt
YW5jZSB1c2luZyBpdCBvciBub3QuDQo+IEluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2ggd2l0aCBz
b21lIGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseQ0KPiB3aGF0IHZlcnNpb25z
IGFuZC9vciB3aXRoIHdoaWNoIHBhdGNoZXMuDQo+IA0KPiBAUGF1bCBEdXJyYW50OiBoYXZlIHlv
dSBzZWUgbXkgb3RoZXIgbWFpbCB3aGVuIEkgd3JvdGUgdGhhdCBiYXNlZCBvbiBteQ0KPiBsYXRl
c3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2IGZpbGUgd2luZG93cyBkb21VcyB3aXRo
IG5ldyBwdg0KPiBkcml2ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVj
dGx5IEkgbXVzdCByZWFkZCB1ZGV2DQo+IGZpbGUsIGNhbiB0aGlzIGNhdXNlIHVuZXhwZWN0ZWQg
Y2FzZSByZWxhdGVkIHRvIHRoaXMgcHJvYmxlbSBvciBpcw0KPiBkaWZmZXJlbnQ/DQo+IGh0dHA6
Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDgvbXNnMDAw
MzMuaHRtbA0KPiANCg0KSSdtIG5vdCBzdXJlIHdoeSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhl
cmUuIFRoZSBwcm9ibGVtIHlvdSBoYXZlIGFwcGVhcnMgdG8gYmUgUUVNVSBpZ25vcmluZyB0aGUg
cmVxdWVzdCB0byB1bnBsdWcgZW11bGF0ZWQgZGlza3MuIEkndmUgbm90IHNlZW4gdGhpcyBiZWhh
dmlvdXIgb24gbXkgdGVzdCBib3ggc28gSSdsbCBuZWVkIHRvIGRpZyBzb21lIG1vcmUuDQoNCiAg
UGF1bA0KDQo+IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xp
c2guDQo+IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 02 09:00:01 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 02 Sep 2015 09:00:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZX3tg-0006nI-T1; Wed, 02 Sep 2015 09:00:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6800d1a06=Paul.Durrant@citrix.com>)
	id 1ZX3tf-0006nD-A1
	for win-pv-devel@lists.xenproject.org; Wed, 02 Sep 2015 08:59:59 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	B7/B8-28791-E8AB6E55; Wed, 02 Sep 2015 08:59:58 +0000
X-Env-Sender: prvs=6800d1a06=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441184397!27279149!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19398 invoked from network); 2 Sep 2015 08:59:57 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	2 Sep 2015 08:59:57 -0000
X-IronPort-AV: E=Sophos;i="5.17,452,1437436800"; 
   d="scan'208";a="2399818"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQ
Date: Wed, 2 Sep 2015 08:59:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
In-Reply-To: <55E6B910.4040604@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAxNSAwOTo1
NA0KPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDEvMDkvMjAx
NSAxNjo0MSwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25p
QG0yci5iaXpdDQo+ID4+IFNlbnQ6IDIxIEF1Z3VzdCAyMDE1IDE0OjE0DQo+ID4+IFRvOiBSYWZh
xYIgV29qZHnFgmE7IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnDQo+ID4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pg0KPiA+PiBJbCAyMS8wOC8yMDE1IDEwOjEyLCBGYWJpbyBGYW50b25pIGhhIHNjcml0
dG86DQo+ID4+PiBJbCAyMS8wOC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0
bzoNCj4gPj4+PiBPbiAyMDE1LTA4LTE5IDIzOjI1LCBQYXVsIER1cnJhbnQgd3JvdGU6DQo+ID4+
Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLSBGcm9tOg0KPiA+Pj4+Pj4gd2luLXB2LWRl
dmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+
ID4+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwg
V29qZHlsYSBTZW50OiAxOA0KPiA+Pj4+Pj4gQXVndXN0IDIwMTUgMTQ6MzMgVG86IHdpbi1wdi1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZyBTdWJqZWN0Og0KPiA+Pj4+Pj4gW3dpbi1wdi1kZXZl
bF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBIaSwNCj4gPj4+Pj4+
DQo+ID4+Pj4+PiBJJ3ZlIGJlZW4gdGVzdGluZyB0aGUgY3VycmVudCBwdmRyaXZlcnMgY29kZSBp
biBwcmVwYXJhdGlvbiBmb3INCj4gPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFtIHBhdGNoZXMgZm9y
IG15IHhlbmlmYWNlIGFkZGl0aW9ucyBhbmQgSSBub3RpY2VkDQo+ID4+Pj4+PiB0aGFuIHhlbnZi
ZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmIGl0J3MN
Cj4gPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBiZWNhdXNl
IGl0IHNlZW1lZCB0byBvbmx5DQo+ID4+Pj4+PiBtYW5pZmVzdCB3aGVuIHRoZSBmdWxsIHN1aXRl
IG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkIGFsb25nDQo+ID4+Pj4+PiB3aXRoIHhl
bnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgN
Cj4gPj4+Pj4+IGtlcm5lbCBtZW1vcnkgY29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHBy
b2Nlc3NlcyBzaG9ydGx5DQo+ID4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRp
ZG4ndCBzZWVtIHRvIGNhdGNoIGFueXRoaW5nLiBZb3UgY2FuDQo+ID4+Pj4+PiBzZWUgYSBsb2cg
ZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+Pj4+
Pj4NCj4gPj4+Pj4+IFRvZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVzdHMgYnV0
IHRoaXMgdGltZSB3aXRob3V0IG91cg0KPiA+Pj4+Pj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2
ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4+Pj4+PiBpbnN0YWxsZWQpLiBU
byBteSBzdXJwcmlzZSBub3cgRHJpdmVyIFZlcmlmaWVyIHdhcyBjcmFzaGluZyB0aGUNCj4gPj4+
Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGluIHhlbnZiZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0
IGtub3cgd2h5IGl0DQo+ID4+Pj4+PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElm
IGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vz
bid0IGJyZWFrIGFueXRoaW5nIEknbGwgdHJ5IHRoYXQgdG8gc2VlIGlmIEkgY2FuDQo+ID4+Pj4+
PiByZXByb2R1Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBjb3JydXB0aW9ucy4NCj4gPj4+Pj4+DQo+
ID4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBvbiBQVE8gZm9yIHRoZSBuZXh0
IHdlZWsgYnV0IEknbGwgaGF2ZQ0KPiA+Pj4+PiBhIGxvb2sgd2hlbiBJIGdldCBiYWNrIHRvIHRo
ZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlDQo+ID4+Pj4+IGRyaXZlcnMg
YSB3ZWVrIG9yIHNvIGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBi
dXQNCj4gPj4+Pj4gdGhlcmUgaGF2ZSBiZWVuIGEgY291cGxlIG9mIGNoYW5nZXMgc2luY2UgdGhl
bi4NCj4gPj4+Pj4NCj4gPj4+Pj4gUGF1bA0KPiA+Pj4+Pg0KPiA+Pj4+IE5vIHByb2JsZW0uIEkg
YXR0YWNoZWQgc29tZSBtb3JlIGxvZ3MuIFRoZSBsYXN0IG9uZSB3YXMgZHVyaW5nDQo+IHN5c3Rl
bQ0KPiA+Pj4+IHNodXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJv
YmFibHkgY29ycnVwdGVkDQo+ID4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYg
c2VlbWVkIHRvIGluZGljYXRlIHRoYXQpLiBJIHRoaW5rIGV2ZXJ5DQo+ID4+Pj4gdGltZSB0aGVy
ZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0IGZhbWlsaWFy
DQo+IHdpdGgNCj4gPj4+PiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90IHN1cmUgd2hh
dCB0aGF0IG1lYW5zLg0KPiA+Pj4+DQo+ID4+Pj4gSW4gdGhlIG1lYW50aW1lIEkndmUgcnVuIG1v
cmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVuaWZhY2UgZHJpdmVyIHRvDQo+ID4+Pj4gbWFrZSBz
dXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcg
c2VlbWVkDQo+IHRvDQo+ID4+Pj4gYmUgZmluZSB0aGVyZS4NCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+
PiBJIGFsc28gaGFkIGEgZGlzayBjb3JydXB0aW9uIG9uIHdpbmRvd3MgMTAgcHJvIDY0IGJpdCB3
aXRoIHB2IGRyaXZlcnMNCj4gPj4+IGJ1aWxkIG9mIDExIGF1Z3VzdCBidXQgSSdtIG5vdCBzdXJl
IHRoYXQgaXMgcmVsYXRlZCB0byB3aW5wdiBkcml2ZXJzLA0KPiA+Pj4gb24gc2FtZSBkb21VIEkg
c3RhcnRlZCB0ZXN0aW5nIGFsc28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJsYXkuDQo+
ID4+PiBGb3IgdGhpcyBjYXNlIEkgZG9uJ3QgaGF2ZSB1c2VmdWwgaW5mb3JtYXRpb24gYmVjYXVz
ZSBkb24ndCB0cnkgdG8NCj4gPj4+IGJvb3Qgd2luZG93cyBhdCBhbGwgYnV0IGlmIHJlaGFwcGVu
IEknbGwgdHJ5IHRvIHRha2Ugb3RoZXIgdXNlZnVsDQo+ID4+PiBpbmZvcm1hdGlvbi4NCj4gPj4g
SGFwcGVuIGFub3RoZXIgdGltZSBidXQgYWxzbyB0aGlzIEkgd2FzIHVuYWJsZSB0byB1bmRlcnN0
YW5kIHdoYXQgaXMNCj4gPj4gZXhhY3RseSB0aGUgY2F1c2UuDQo+ID4+IE9uIHdpbmRvd3MgcmVi
b290IGFsbCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0KPiA+
PiByZWJvb3Qgc2VhYmlvcyBkb24ndCBmb3VuZCBib290YWJsZSBkaXNrIGFuZCBxZW11IGxvZyBk
b24ndCBzaG93IHVzZWZ1bA0KPiA+PiBpbmZvcm1hdGlvbnMuDQo+ID4+IHFlbXUtaW1nIGNoZWNr
IHNob3cgZXJyb3JzOg0KPiA+Pj4gL3Vzci9saWIveGVuL2Jpbi9xZW11LWltZyBjaGVjayBXMTAu
ZGlzazEuY293LXNuMQ0KPiA+Pj4gRVJST1IgY2x1c3RlciAxNDMgcmVmY291bnQ9MSByZWZlcmVu
Y2U9Mg0KPiA+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+
ID4+PiBFUlJPUiBjbHVzdGVyIDEyMjEgcmVmY291bnQ9MSByZWZlcmVuY2U9Mg0KPiA+Pj4gTGVh
a2VkIGNsdXN0ZXIgMjcwMyByZWZjb3VudD0xIHJlZmVyZW5jZT0wDQo+ID4+PiBMZWFrZWQgY2x1
c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+IExlYWtlZCBjbHVzdGVyIDEz
Mzc1IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+DQo+ID4+PiAyIGVycm9ycyB3ZXJlIGZv
dW5kIG9uIHRoZSBpbWFnZS4NCj4gPj4+IERhdGEgbWF5IGJlIGNvcnJ1cHRlZCwgb3IgZnVydGhl
ciB3cml0ZXMgdG8gdGhlIGltYWdlIG1heSBjb3JydXB0IGl0Lg0KPiA+Pj4NCj4gPj4+IDQgbGVh
a2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+Pj4gVGhpcyBtZWFucyB3
YXN0ZSBvZiBkaXNrIHNwYWNlLCBidXQgbm8gaGFybSB0byBkYXRhLg0KPiA+Pj4gMjc4NTMvODE5
MjAwID0gMy40MCUgYWxsb2NhdGVkLCAyMi42NSUgZnJhZ21lbnRlZCwgMC4wMCUgY29tcHJlc3Nl
ZA0KPiA+Pj4gY2x1c3RlcnMNCj4gPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4NTA3MzY2NDANCj4g
Pj4gSSBjcmVhdGVkIGl0IHdpdGg6DQo+ID4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3Jl
YXRlIC1vDQo+ID4+IGJhY2tpbmdfZmlsZT1XMTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1m
IHFjb3cyIFcxMC5kaXNrMS5jb3ctDQo+IHNuMQ0KPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9t
VSBjb25maWd1cmF0aW9uOg0KPiA+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gPj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11
IDIuNC4wDQo+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVy
cyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPj4NCj4gPj4gSG93IEkgY2FuIGtub3cgZm9yIHN1cmUg
aWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2JsZW0gYW5kDQo+ID4+IHRha2Ug
dXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPj4NCj4gPj4gVGhhbmtzIGZvciBhbnkg
cmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCj4gPiBUaGlzIHNvdW5kcyB2ZXJ5
IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSSByZWNhbGwN
Cj4gc2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVz
c2luZyBhcm91bmQgd2l0aA0KPiBPX0RJUkVDVCBmb3Igb3BlbmluZyBpbWFnZXMuIEkgd29uZGVy
IGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2ggb3BlcmF0aW9uDQo+IG9uIHNodXRkb3duLg0KPiA+
DQo+ID4gICAgUGF1bA0KPiA+DQo+IFRoYW5rcyBmb3IgcmVwbHkuDQo+IEkgZGlkIGEgZmFzdCBz
ZWFyY2ggYnV0IEkgbm90IGZvdW5kIE9fRElSRUNUIGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5k
DQo+IGl0IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiBBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhh
dCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+IGh0dHA6Ly9naXQucWVtdS5v
cmcvP3A9cWVtdS5naXQ7YT1jb21taXRkaWZmO2g9NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgNCj4g
Mzc2NDM1YThlNzRiYjRlZGQNCj4gQ2hlY2tpbmcgaW4gbGlieGwgc2VlbXMgZGlzYWJsZWQgYnkg
ZGVmYXVsdCBhbmQgZnJvbSBzb21lIG9sZCB4ZW4gcG9zdA0KPiBzZWVtcyB0aGF0IE9fRElSRUNU
IGNyZWF0ZXMgcHJvYmxlbXMuDQo+IEkgc2hvdWxkIHRyeSBpdCBlbmFibGUgZGlyZWN0LWlvLXNh
ZmUgaW4gZG9tVXMgcWNvdzIgZGlza3M/DQo+IEFkZGVkIGFsc28gU3RlZmFubyBTdGFiZWxsaW5p
IGFzIGNjLg0KPiBAU3RlZmFubyBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJyZW50IGtub3cg
c3RhdHVzIGFuZCByZXN1bHQgb2YNCj4gZGlyZWN0LWlvLXNhZmU/DQo+IFNvcnJ5IGlzIHRoZSBx
dWVzdGlvbiBhcmUgc3R1cGlkIGJ5IG9yIG15IGVuZ2xpc2ggaXMgdG9vIGJhZCBvciBtYW55DQo+
IHBvc3Qgb2YgbGF0ZXN0IHllYXJzIGFyZSBjb25mdXNlZCBhbmQgaW4gc2FtZSBjYXNlcyBzZWVt
cyBhbHNvDQo+IGNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3Jt
YW5jZSB1c2luZyBpdCBvciBub3QuDQo+IEluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2ggd2l0aCBz
b21lIGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseQ0KPiB3aGF0IHZlcnNpb25z
IGFuZC9vciB3aXRoIHdoaWNoIHBhdGNoZXMuDQo+IA0KPiBAUGF1bCBEdXJyYW50OiBoYXZlIHlv
dSBzZWUgbXkgb3RoZXIgbWFpbCB3aGVuIEkgd3JvdGUgdGhhdCBiYXNlZCBvbiBteQ0KPiBsYXRl
c3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2IGZpbGUgd2luZG93cyBkb21VcyB3aXRo
IG5ldyBwdg0KPiBkcml2ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVj
dGx5IEkgbXVzdCByZWFkZCB1ZGV2DQo+IGZpbGUsIGNhbiB0aGlzIGNhdXNlIHVuZXhwZWN0ZWQg
Y2FzZSByZWxhdGVkIHRvIHRoaXMgcHJvYmxlbSBvciBpcw0KPiBkaWZmZXJlbnQ/DQo+IGh0dHA6
Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDgvbXNnMDAw
MzMuaHRtbA0KPiANCg0KSSdtIG5vdCBzdXJlIHdoeSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhl
cmUuIFRoZSBwcm9ibGVtIHlvdSBoYXZlIGFwcGVhcnMgdG8gYmUgUUVNVSBpZ25vcmluZyB0aGUg
cmVxdWVzdCB0byB1bnBsdWcgZW11bGF0ZWQgZGlza3MuIEkndmUgbm90IHNlZW4gdGhpcyBiZWhh
dmlvdXIgb24gbXkgdGVzdCBib3ggc28gSSdsbCBuZWVkIHRvIGRpZyBzb21lIG1vcmUuDQoNCiAg
UGF1bA0KDQo+IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xp
c2guDQo+IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 09:35:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 09:35:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXQw1-0002zV-0y; Thu, 03 Sep 2015 09:35:57 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXQw0-0002zM-18
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 09:35:56 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	51/06-10715-B7418E55; Thu, 03 Sep 2015 09:35:55 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441272953!27654878!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17249 invoked from network); 3 Sep 2015 09:35:54 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 09:35:54 -0000
Received: by wiclk2 with SMTP id lk2so1237716wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 02:35:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=Etit0d6qBy6cMil37lrn0UlxRre0PmEIgqnA9D7nMWQ=;
	b=k7kIusaoyYF9erO9vTsIOvlfz4/C6/vInXXJ2FUSLUsTwLbyq+7SM3++Nhu6QZvasI
	hbi1ArkI/fzEyCLDaopkbi2jusqHOvfEiIdZztui5AuHVmpdR7ucgVVR1Du2rF+NiUk6
	fKqrlNR6ur4+cJhUOAMei1AbDlXa7FhZRgfjNEMdHmaEffkylr+PJ8QQxIrQDaT/lrKj
	f2AWhxJuD3hGuWRPPjyyvLSHS0lbG8e7+3bfGyi/MRBvSYVQ12/6vMj812xnD35tGH+m
	DlQuP8kG/HmYrRa9EsC/P6bI62haJgjsOjl9xz6tYy5Yl2ctFJ+GGekhZHm0GghtxKMY
	/0Tg==
X-Received: by 10.194.110.37 with SMTP id hx5mr2721926wjb.149.1441272953690;
	Thu, 03 Sep 2015 02:35:53 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	kl8sm23911027wjb.39.2015.09.03.02.35.52
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 02:35:52 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 10:35:37 +0100
Message-Id: <1441272937-11356-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Don't NULL out fragment in pending array
	__TransmitterRingFakeResponses()
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

It is completion of the response in TransmitterRingPoll() that should NULL
out the entry in the array. Doing so causes the assertion at
transmitter.c:2111 to fire in a debug build and a page fault in a non-debug
build.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/transmitter.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index a915d73..4cf21db 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -1961,7 +1961,6 @@ __TransmitterRingFakeResponses(
         netif_tx_response_t             *rsp;
 
         Fragment = Ring->Pending[id];
-        Ring->Pending[id] = NULL;
 
         if (Fragment == NULL)
             continue;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 09:35:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 09:35:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXQw1-0002zV-0y; Thu, 03 Sep 2015 09:35:57 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXQw0-0002zM-18
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 09:35:56 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	51/06-10715-B7418E55; Thu, 03 Sep 2015 09:35:55 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441272953!27654878!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17249 invoked from network); 3 Sep 2015 09:35:54 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 09:35:54 -0000
Received: by wiclk2 with SMTP id lk2so1237716wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 02:35:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=Etit0d6qBy6cMil37lrn0UlxRre0PmEIgqnA9D7nMWQ=;
	b=k7kIusaoyYF9erO9vTsIOvlfz4/C6/vInXXJ2FUSLUsTwLbyq+7SM3++Nhu6QZvasI
	hbi1ArkI/fzEyCLDaopkbi2jusqHOvfEiIdZztui5AuHVmpdR7ucgVVR1Du2rF+NiUk6
	fKqrlNR6ur4+cJhUOAMei1AbDlXa7FhZRgfjNEMdHmaEffkylr+PJ8QQxIrQDaT/lrKj
	f2AWhxJuD3hGuWRPPjyyvLSHS0lbG8e7+3bfGyi/MRBvSYVQ12/6vMj812xnD35tGH+m
	DlQuP8kG/HmYrRa9EsC/P6bI62haJgjsOjl9xz6tYy5Yl2ctFJ+GGekhZHm0GghtxKMY
	/0Tg==
X-Received: by 10.194.110.37 with SMTP id hx5mr2721926wjb.149.1441272953690;
	Thu, 03 Sep 2015 02:35:53 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	kl8sm23911027wjb.39.2015.09.03.02.35.52
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 02:35:52 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 10:35:37 +0100
Message-Id: <1441272937-11356-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Don't NULL out fragment in pending array
	__TransmitterRingFakeResponses()
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

It is completion of the response in TransmitterRingPoll() that should NULL
out the entry in the array. Doing so causes the assertion at
transmitter.c:2111 to fire in a debug build and a page fault in a non-debug
build.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/transmitter.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index a915d73..4cf21db 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -1961,7 +1961,6 @@ __TransmitterRingFakeResponses(
         netif_tx_response_t             *rsp;
 
         Fragment = Ring->Pending[id];
-        Ring->Pending[id] = NULL;
 
         if (Fragment == NULL)
             continue;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 16:40:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 16:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXXZ2-0003Ts-2m; Thu, 03 Sep 2015 16:40:40 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXXZ0-0003TW-BR
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 16:40:38 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	00/9F-13905-50878E55; Thu, 03 Sep 2015 16:40:37 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1441298436!32615426!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31845 invoked from network); 3 Sep 2015 16:40:36 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 16:40:36 -0000
Received: by wiclk2 with SMTP id lk2so14506551wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=kD/pE/vDO7vEml78F+5cI517CyBC4joLoakq8h6Cblw=;
	b=j+tXVrmKiZvh7ZpYTJIbIe0Tf82fz0oxmfSkevIXp3OvqAn/shF1g2rnWHQrSK8Pm7
	8xTNEUAALxijwp6Xo7cqNe/+KYmhq59ZAoc13YHryuIz22OUXG+CbUyamIKqH36uZ8y0
	uEYnRtdUExQ/UWXQBbZoy22bDs/dC0CXuNfbgXwZv6cTZILyDDj+oOV/7vEuKWYN1ufq
	RE1/YNujGn0/N6HjV+ABpBxDqMvGkWN5Fq34jOJlAe5MWv+68VcYlVDoLvL0aGRnQ4Ei
	wou9AU1qh9m3dkordiEojI4UF27Gx6lQssWPd4UhgeG6aL1/biI22n7nzjYj5axghmPF
	QBhQ==
X-Received: by 10.180.8.135 with SMTP id r7mr16725502wia.58.1441298436576;
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	eu10sm2158482wib.5.2015.09.03.09.40.35
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 09:40:35 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 17:40:21 +0100
Message-Id: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Simplify unplug request
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Since the PDO driver in XENVBD's case is in-box, we don't need to defer
requesting emulated device unplug to when PDOs are started, we can do it
when the FDO is started.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvbd/fdo.c | 73 ++++++++++++++++++++------------------------------------
 src/xenvbd/fdo.h |  5 ----
 src/xenvbd/pdo.c | 49 ++++++-------------------------------
 3 files changed, 33 insertions(+), 94 deletions(-)

diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c
index 8d5231f..f6b47f2 100644
--- a/src/xenvbd/fdo.c
+++ b/src/xenvbd/fdo.c
@@ -760,20 +760,8 @@ FdoScan(
             StorPortNotification(BusChangeDetected, Fdo, 0);
         }
 
-        if (NeedReboot) {
-            PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-            Unplug = FdoAcquireUnplug(Fdo);
-            ASSERT(Unplug != NULL);
-
-            XENBUS_UNPLUG(Request,
-                          Unplug,
-                          XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                          TRUE);
-            XENBUS_UNPLUG(Release, Unplug);
-
+        if (NeedReboot)
             __FdoNotifyInstaller(Fdo);
-        }
     }
 
     return STATUS_SUCCESS;
@@ -1000,14 +988,8 @@ __FdoAcquire(
     if (!NT_SUCCESS(status))
         goto fail6;
 
-    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
-    if (!NT_SUCCESS(status))
-        goto fail7;
-
     return STATUS_SUCCESS;
 
-fail7:
-    XENBUS_UNPLUG(Release, &Fdo->Unplug);
 fail6:
     XENBUS_EVTCHN(Release, &Fdo->Evtchn);
 fail5:
@@ -1027,7 +1009,6 @@ __FdoRelease(
     __in PXENVBD_FDO             Fdo
     )
 {
-    XENBUS_UNPLUG(Release, &Fdo->Unplug);
     XENBUS_STORE(Release, &Fdo->Store);
     XENBUS_EVTCHN(Release, &Fdo->Evtchn);
     XENBUS_GNTTAB(Release, &Fdo->Gnttab);
@@ -1518,6 +1499,26 @@ FdoAdapterControl(
     return ScsiAdapterControlSuccess;
 }
 
+static VOID
+FdoUnplugRequest(
+    IN  PXENVBD_FDO Fdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Fdo->Unplug,
+                  XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Fdo->Unplug);
+}
+
 ULONG
 FdoFindAdapter(
     __in PXENVBD_FDO                 Fdo,
@@ -1555,6 +1556,9 @@ FdoFindAdapter(
 
     if (!NT_SUCCESS(__FdoInitialize(Fdo)))
         return SP_RETURN_ERROR;
+
+    FdoUnplugRequest(Fdo, TRUE);
+
     if (!NT_SUCCESS(__FdoD3ToD0(Fdo)))
         return SP_RETURN_ERROR;
 
@@ -1656,6 +1660,7 @@ FdoDispatchPnp(
     case IRP_MN_REMOVE_DEVICE:
         Verbose("FDO:IRP_MN_REMOVE_DEVICE\n");
         __FdoD0ToD3(Fdo);
+        FdoUnplugRequest(Fdo, FALSE);
         // drop ref-count acquired in DriverGetFdo *before* destroying Fdo
         FdoDereference(Fdo);
         __FdoTerminate(Fdo);
@@ -1681,20 +1686,8 @@ FdoDispatchPnp(
             if (NeedInvalidate)
                 FdoLogTargets("QUERY_RELATIONS", Fdo);
 
-            if (NeedReboot) {
-                PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-                Unplug = FdoAcquireUnplug(Fdo);
-                ASSERT(Unplug != NULL);
-
-                XENBUS_UNPLUG(Request,
-                              Unplug,
-                              XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                              TRUE);
-                XENBUS_UNPLUG(Release, Unplug);
-
+            if (NeedReboot)
                 __FdoNotifyInstaller(Fdo);
-            }
         }
         FdoDereference(Fdo);
         break;
@@ -1977,17 +1970,3 @@ FdoAcquireSuspend(
 
     return &Fdo->Suspend;
 }
-
-PXENBUS_UNPLUG_INTERFACE
-FdoAcquireUnplug(
-    __in PXENVBD_FDO    Fdo
-    )
-{
-    NTSTATUS            status;
-
-    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
-    if (!NT_SUCCESS(status))
-        return NULL;
-
-    return &Fdo->Unplug;
-}
diff --git a/src/xenvbd/fdo.h b/src/xenvbd/fdo.h
index 981ffbb..c1974ec 100644
--- a/src/xenvbd/fdo.h
+++ b/src/xenvbd/fdo.h
@@ -193,9 +193,4 @@ FdoAcquireSuspend(
     __in PXENVBD_FDO                 Fdo
     );
 
-extern PXENBUS_UNPLUG_INTERFACE
-FdoAcquireUnplug(
-    __in PXENVBD_FDO                 Fdo
-    );
-
 #endif // _XENVBD_FDO_H
diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index f0d6674..e00729e 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -2595,23 +2595,11 @@ PdoDispatchPnp(
     __PdoCheckEjectPending(Pdo);
 
     switch (Stack->MinorFunction) {
-    case IRP_MN_START_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      TRUE);
-        XENBUS_UNPLUG(Release, Unplug);
-
+    case IRP_MN_START_DEVICE:
         (VOID) PdoD3ToD0(Pdo);
-
         PdoSetDevicePnpState(Pdo, Started);
         break;
-    }
+
     case IRP_MN_QUERY_STOP_DEVICE:
         PdoSetDevicePnpState(Pdo, StopPending);
         break;
@@ -2620,22 +2608,11 @@ PdoDispatchPnp(
         __PdoRestoreDevicePnpState(Pdo, StopPending);
         break;
 
-    case IRP_MN_STOP_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
+    case IRP_MN_STOP_DEVICE:
+        PdoD0ToD3(Pdo);
         PdoSetDevicePnpState(Pdo, Stopped);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      FALSE);
-        XENBUS_UNPLUG(Release, Unplug);
-
         break;
-    }
+
     case IRP_MN_QUERY_REMOVE_DEVICE:
         PdoSetDevicePnpState(Pdo, RemovePending);
         break;
@@ -2649,22 +2626,10 @@ PdoDispatchPnp(
         PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
         break;
 
-    case IRP_MN_REMOVE_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
+    case IRP_MN_REMOVE_DEVICE:
         __PdoRemoveDevice(Pdo);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      FALSE);
-        XENBUS_UNPLUG(Release, Unplug);
-
         break;
-    }
+
     case IRP_MN_EJECT:
         __PdoEject(Pdo);
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 16:40:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 16:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXXZ2-0003Tw-3u; Thu, 03 Sep 2015 16:40:40 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXXZ1-0003TX-0W
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 16:40:39 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	C4/5A-15765-60878E55; Thu, 03 Sep 2015 16:40:38 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1441298437!46599739!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23963 invoked from network); 3 Sep 2015 16:40:37 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-6.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 16:40:37 -0000
Received: by wiclk2 with SMTP id lk2so14506955wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 09:40:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=5XcyzvxGOw61U1g3aduTdK0g4fx6seWBtkHAESwk4XI=;
	b=YvTggbyZNkCa6RlMZwyxqUT88ckjyIIW/09Vmhlg1YRd/F8tnU96TNX6rIWLc2tOgP
	pt5aMKwoGftn3Vj8N7XKIBJzTEjocWM0t6ry6gsfAJWFQ9OdBHAfSZp2dN59iLS2BJon
	VF/84YCcp0le+2wXq7CPFyiOXeDy+VoNq4pQ/6suvvySiRJSBeegt01FPFVPdDhW1po0
	3/jNT76M4KU8HD98xcRCm1BeguC3GyKcL18w5+aYPuDNBxusj/pISO7l8mjQZE4PEQWM
	LaXeX3I5M21LVDLzGcrcml7iVagOvBtZI20YSV4TO15Q/7xq00yMEXT14wcFDjWy5QXo
	NGiA==
X-Received: by 10.180.106.99 with SMTP id gt3mr15266025wib.51.1441298437488;
	Thu, 03 Sep 2015 09:40:37 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	eu10sm2158482wib.5.2015.09.03.09.40.36
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 17:40:22 +0100
Message-Id: <1441298422-8064-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
References: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Clear unplug requests from co-installer
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When XENVBD is uninstalled there is no suitable notification in kernel
which can be used to clear any remaining unplug requests. This leads to
a certain 0x7B bugcheck on reboot. This patch therefore does the job
from the co-installer since this seems to be the only way.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 53 insertions(+), 1 deletion(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 9069435..7f421c9 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -46,6 +46,9 @@ __user_code;
 #define SERVICE_KEY(_Driver)    \
         SERVICES_KEY ## "\\" ## #_Driver
 
+#define UNPLUG_KEY \
+        SERVICE_KEY(XEN) ## "\\Unplug"
+
 #define STATUS_KEY  \
         SERVICE_KEY(XENVBD) ## "\\Status"
 
@@ -183,6 +186,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = __GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OverrideGroupPolicyOptions(
     )
 {
@@ -566,7 +616,9 @@ __DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
+    Log("<===>");
+
+    (VOID) ClearUnplugRequest("DISKS");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 16:40:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 16:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXXZ2-0003Tw-3u; Thu, 03 Sep 2015 16:40:40 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXXZ1-0003TX-0W
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 16:40:39 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	C4/5A-15765-60878E55; Thu, 03 Sep 2015 16:40:38 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1441298437!46599739!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23963 invoked from network); 3 Sep 2015 16:40:37 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-6.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 16:40:37 -0000
Received: by wiclk2 with SMTP id lk2so14506955wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 09:40:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=5XcyzvxGOw61U1g3aduTdK0g4fx6seWBtkHAESwk4XI=;
	b=YvTggbyZNkCa6RlMZwyxqUT88ckjyIIW/09Vmhlg1YRd/F8tnU96TNX6rIWLc2tOgP
	pt5aMKwoGftn3Vj8N7XKIBJzTEjocWM0t6ry6gsfAJWFQ9OdBHAfSZp2dN59iLS2BJon
	VF/84YCcp0le+2wXq7CPFyiOXeDy+VoNq4pQ/6suvvySiRJSBeegt01FPFVPdDhW1po0
	3/jNT76M4KU8HD98xcRCm1BeguC3GyKcL18w5+aYPuDNBxusj/pISO7l8mjQZE4PEQWM
	LaXeX3I5M21LVDLzGcrcml7iVagOvBtZI20YSV4TO15Q/7xq00yMEXT14wcFDjWy5QXo
	NGiA==
X-Received: by 10.180.106.99 with SMTP id gt3mr15266025wib.51.1441298437488;
	Thu, 03 Sep 2015 09:40:37 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	eu10sm2158482wib.5.2015.09.03.09.40.36
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 17:40:22 +0100
Message-Id: <1441298422-8064-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
References: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Clear unplug requests from co-installer
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When XENVBD is uninstalled there is no suitable notification in kernel
which can be used to clear any remaining unplug requests. This leads to
a certain 0x7B bugcheck on reboot. This patch therefore does the job
from the co-installer since this seems to be the only way.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 53 insertions(+), 1 deletion(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 9069435..7f421c9 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -46,6 +46,9 @@ __user_code;
 #define SERVICE_KEY(_Driver)    \
         SERVICES_KEY ## "\\" ## #_Driver
 
+#define UNPLUG_KEY \
+        SERVICE_KEY(XEN) ## "\\Unplug"
+
 #define STATUS_KEY  \
         SERVICE_KEY(XENVBD) ## "\\Status"
 
@@ -183,6 +186,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = __GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OverrideGroupPolicyOptions(
     )
 {
@@ -566,7 +616,9 @@ __DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
+    Log("<===>");
+
+    (VOID) ClearUnplugRequest("DISKS");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 16:40:41 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 16:40:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXXZ2-0003Ts-2m; Thu, 03 Sep 2015 16:40:40 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXXZ0-0003TW-BR
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 16:40:38 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	00/9F-13905-50878E55; Thu, 03 Sep 2015 16:40:37 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-6.tower-206.messagelabs.com!1441298436!32615426!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31845 invoked from network); 3 Sep 2015 16:40:36 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-6.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 16:40:36 -0000
Received: by wiclk2 with SMTP id lk2so14506551wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=kD/pE/vDO7vEml78F+5cI517CyBC4joLoakq8h6Cblw=;
	b=j+tXVrmKiZvh7ZpYTJIbIe0Tf82fz0oxmfSkevIXp3OvqAn/shF1g2rnWHQrSK8Pm7
	8xTNEUAALxijwp6Xo7cqNe/+KYmhq59ZAoc13YHryuIz22OUXG+CbUyamIKqH36uZ8y0
	uEYnRtdUExQ/UWXQBbZoy22bDs/dC0CXuNfbgXwZv6cTZILyDDj+oOV/7vEuKWYN1ufq
	RE1/YNujGn0/N6HjV+ABpBxDqMvGkWN5Fq34jOJlAe5MWv+68VcYlVDoLvL0aGRnQ4Ei
	wou9AU1qh9m3dkordiEojI4UF27Gx6lQssWPd4UhgeG6aL1/biI22n7nzjYj5axghmPF
	QBhQ==
X-Received: by 10.180.8.135 with SMTP id r7mr16725502wia.58.1441298436576;
	Thu, 03 Sep 2015 09:40:36 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	eu10sm2158482wib.5.2015.09.03.09.40.35
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 09:40:35 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 17:40:21 +0100
Message-Id: <1441298422-8064-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Simplify unplug request
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Since the PDO driver in XENVBD's case is in-box, we don't need to defer
requesting emulated device unplug to when PDOs are started, we can do it
when the FDO is started.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvbd/fdo.c | 73 ++++++++++++++++++++------------------------------------
 src/xenvbd/fdo.h |  5 ----
 src/xenvbd/pdo.c | 49 ++++++-------------------------------
 3 files changed, 33 insertions(+), 94 deletions(-)

diff --git a/src/xenvbd/fdo.c b/src/xenvbd/fdo.c
index 8d5231f..f6b47f2 100644
--- a/src/xenvbd/fdo.c
+++ b/src/xenvbd/fdo.c
@@ -760,20 +760,8 @@ FdoScan(
             StorPortNotification(BusChangeDetected, Fdo, 0);
         }
 
-        if (NeedReboot) {
-            PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-            Unplug = FdoAcquireUnplug(Fdo);
-            ASSERT(Unplug != NULL);
-
-            XENBUS_UNPLUG(Request,
-                          Unplug,
-                          XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                          TRUE);
-            XENBUS_UNPLUG(Release, Unplug);
-
+        if (NeedReboot)
             __FdoNotifyInstaller(Fdo);
-        }
     }
 
     return STATUS_SUCCESS;
@@ -1000,14 +988,8 @@ __FdoAcquire(
     if (!NT_SUCCESS(status))
         goto fail6;
 
-    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
-    if (!NT_SUCCESS(status))
-        goto fail7;
-
     return STATUS_SUCCESS;
 
-fail7:
-    XENBUS_UNPLUG(Release, &Fdo->Unplug);
 fail6:
     XENBUS_EVTCHN(Release, &Fdo->Evtchn);
 fail5:
@@ -1027,7 +1009,6 @@ __FdoRelease(
     __in PXENVBD_FDO             Fdo
     )
 {
-    XENBUS_UNPLUG(Release, &Fdo->Unplug);
     XENBUS_STORE(Release, &Fdo->Store);
     XENBUS_EVTCHN(Release, &Fdo->Evtchn);
     XENBUS_GNTTAB(Release, &Fdo->Gnttab);
@@ -1518,6 +1499,26 @@ FdoAdapterControl(
     return ScsiAdapterControlSuccess;
 }
 
+static VOID
+FdoUnplugRequest(
+    IN  PXENVBD_FDO Fdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Fdo->Unplug,
+                  XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Fdo->Unplug);
+}
+
 ULONG
 FdoFindAdapter(
     __in PXENVBD_FDO                 Fdo,
@@ -1555,6 +1556,9 @@ FdoFindAdapter(
 
     if (!NT_SUCCESS(__FdoInitialize(Fdo)))
         return SP_RETURN_ERROR;
+
+    FdoUnplugRequest(Fdo, TRUE);
+
     if (!NT_SUCCESS(__FdoD3ToD0(Fdo)))
         return SP_RETURN_ERROR;
 
@@ -1656,6 +1660,7 @@ FdoDispatchPnp(
     case IRP_MN_REMOVE_DEVICE:
         Verbose("FDO:IRP_MN_REMOVE_DEVICE\n");
         __FdoD0ToD3(Fdo);
+        FdoUnplugRequest(Fdo, FALSE);
         // drop ref-count acquired in DriverGetFdo *before* destroying Fdo
         FdoDereference(Fdo);
         __FdoTerminate(Fdo);
@@ -1681,20 +1686,8 @@ FdoDispatchPnp(
             if (NeedInvalidate)
                 FdoLogTargets("QUERY_RELATIONS", Fdo);
 
-            if (NeedReboot) {
-                PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-                Unplug = FdoAcquireUnplug(Fdo);
-                ASSERT(Unplug != NULL);
-
-                XENBUS_UNPLUG(Request,
-                              Unplug,
-                              XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                              TRUE);
-                XENBUS_UNPLUG(Release, Unplug);
-
+            if (NeedReboot)
                 __FdoNotifyInstaller(Fdo);
-            }
         }
         FdoDereference(Fdo);
         break;
@@ -1977,17 +1970,3 @@ FdoAcquireSuspend(
 
     return &Fdo->Suspend;
 }
-
-PXENBUS_UNPLUG_INTERFACE
-FdoAcquireUnplug(
-    __in PXENVBD_FDO    Fdo
-    )
-{
-    NTSTATUS            status;
-
-    status = XENBUS_UNPLUG(Acquire, &Fdo->Unplug);
-    if (!NT_SUCCESS(status))
-        return NULL;
-
-    return &Fdo->Unplug;
-}
diff --git a/src/xenvbd/fdo.h b/src/xenvbd/fdo.h
index 981ffbb..c1974ec 100644
--- a/src/xenvbd/fdo.h
+++ b/src/xenvbd/fdo.h
@@ -193,9 +193,4 @@ FdoAcquireSuspend(
     __in PXENVBD_FDO                 Fdo
     );
 
-extern PXENBUS_UNPLUG_INTERFACE
-FdoAcquireUnplug(
-    __in PXENVBD_FDO                 Fdo
-    );
-
 #endif // _XENVBD_FDO_H
diff --git a/src/xenvbd/pdo.c b/src/xenvbd/pdo.c
index f0d6674..e00729e 100644
--- a/src/xenvbd/pdo.c
+++ b/src/xenvbd/pdo.c
@@ -2595,23 +2595,11 @@ PdoDispatchPnp(
     __PdoCheckEjectPending(Pdo);
 
     switch (Stack->MinorFunction) {
-    case IRP_MN_START_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      TRUE);
-        XENBUS_UNPLUG(Release, Unplug);
-
+    case IRP_MN_START_DEVICE:
         (VOID) PdoD3ToD0(Pdo);
-
         PdoSetDevicePnpState(Pdo, Started);
         break;
-    }
+
     case IRP_MN_QUERY_STOP_DEVICE:
         PdoSetDevicePnpState(Pdo, StopPending);
         break;
@@ -2620,22 +2608,11 @@ PdoDispatchPnp(
         __PdoRestoreDevicePnpState(Pdo, StopPending);
         break;
 
-    case IRP_MN_STOP_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
+    case IRP_MN_STOP_DEVICE:
+        PdoD0ToD3(Pdo);
         PdoSetDevicePnpState(Pdo, Stopped);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      FALSE);
-        XENBUS_UNPLUG(Release, Unplug);
-
         break;
-    }
+
     case IRP_MN_QUERY_REMOVE_DEVICE:
         PdoSetDevicePnpState(Pdo, RemovePending);
         break;
@@ -2649,22 +2626,10 @@ PdoDispatchPnp(
         PdoSetDevicePnpState(Pdo, SurpriseRemovePending);
         break;
 
-    case IRP_MN_REMOVE_DEVICE: {
-        PXENBUS_UNPLUG_INTERFACE    Unplug;
-
-        Unplug = FdoAcquireUnplug(PdoGetFdo(Pdo));
-        ASSERT(Unplug != NULL);
-
+    case IRP_MN_REMOVE_DEVICE:
         __PdoRemoveDevice(Pdo);
-
-        XENBUS_UNPLUG(Request,
-                      Unplug,
-                      XENBUS_UNPLUG_DEVICE_TYPE_DISKS,
-                      FALSE);
-        XENBUS_UNPLUG(Release, Unplug);
-
         break;
-    }
+
     case IRP_MN_EJECT:
         __PdoEject(Pdo);
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 17:13:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 17:13:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXY52-0007KO-Pq; Thu, 03 Sep 2015 17:13:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXY51-0007KB-BX
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 17:13:43 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	BD/67-12371-7CF78E55; Thu, 03 Sep 2015 17:13:43 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1441300421!46568934!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24431 invoked from network); 3 Sep 2015 17:13:42 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 17:13:42 -0000
Received: by wiclk2 with SMTP id lk2so15426343wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=yD5Z4+ofrSQ2FBxzhQwF8//euArXUyj6lXQ3rc1PS+8=;
	b=IkCWHJIVBwTB+bo/sm3zJUZVHurudPHISzSRdMNyKFJ5iIh9WZNx6iEFma3oaOHnjC
	W+/Og3686+Cqe1rB6GDkxP+LPjfuiQokt54K2+wFQ2QADZXoRSP3sXj9UiUvJbZpSAYC
	HeHREZLH1oVB9FL2TnZxQXM0SCqGCVobaFw8x990qCEtFrQ/9sp9Xfg/bIWma8pAL85l
	O6lFsfnJN/lZzt6jIwqkXTAQUN8jy4IMIxFY5TuNXn/7MUCEgRn20JajKcGc1DMQypFC
	OpZEEma9YgTR30btgpSESLUUM5/wUyMHv6IlNfAnajICKuFc7UAtYTFcNk5Zg67gA1a0
	z7JQ==
X-Received: by 10.194.121.232 with SMTP id ln8mr15769843wjb.76.1441300421797; 
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	pe1sm9947020wic.20.2015.09.03.10.13.41
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 18:13:30 +0100
Message-Id: <1441300410-10376-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
References: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Stop manipulating the old unplug value
	in the co-installer...
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

...and take the new ClearUnplugRequest() code from the XENVBD co-installer
instead.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 326 ++++++++--------------------------------------------
 1 file changed, 50 insertions(+), 276 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 60ed2bc..406fcae 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -50,7 +50,7 @@ __user_code;
         SERVICES_KEY ## "\\" ## #_Driver
 
 #define UNPLUG_KEY \
-        SERVICE_KEY(XENFILT) ## "\\Unplug"
+        SERVICE_KEY(XEN) ## "\\Unplug"
 
 #define CONTROL_KEY "SYSTEM\\CurrentControlSet\\Control"
 
@@ -188,6 +188,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OpenEnumKey(
     OUT PHKEY   EnumKey
     )
@@ -849,271 +896,6 @@ fail1:
     return FALSE;
 }
 
-static BOOLEAN
-InstallUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-
-    Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
-                           UNPLUG_KEY,
-                           0,
-                           NULL,
-                           REG_OPTION_NON_VOLATILE,
-                           KEY_ALL_ACCESS,
-                           NULL,
-                           &UnplugKey,
-                           NULL);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        if (Error == ERROR_FILE_NOT_FOUND) {
-            Type = REG_MULTI_SZ;
-            OldLength = sizeof (TCHAR);
-        } else {
-            SetLastError(Error);
-            goto fail2;
-        }
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    NewLength = OldLength + (DWORD)((strlen(ServiceName) + 1) * sizeof (TCHAR));
-
-    ServiceNames = calloc(1, NewLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Offset = 0;
-    if (OldLength != sizeof (TCHAR)) {
-        Error = RegQueryValueEx(UnplugKey,
-                                ClassName,
-                                NULL,
-                                &Type,
-                                (LPBYTE)ServiceNames,
-                                &OldLength);
-        if (Error != ERROR_SUCCESS) {
-            SetLastError(ERROR_BAD_FORMAT);
-            goto fail5;
-        }
-
-        while (ServiceNames[Offset] != '\0') {
-            ULONG   ServiceNameLength;
-
-            ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-            if (_stricmp(&ServiceNames[Offset], ServiceName) == 0) {
-                Log("%s already present", ServiceName);
-                goto done;
-            }
-
-            Offset += ServiceNameLength + 1;
-        }
-    }
-
-    memmove(&ServiceNames[Offset], ServiceName, strlen(ServiceName));
-    Log("added %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail5");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail5");
-
-fail3:
-    Log("fail5");
-
-fail2:
-    Log("fail5");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
-static BOOLEAN
-RemoveUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-    ULONG           ServiceNameLength;
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         UNPLUG_KEY,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &UnplugKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail2;
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    ServiceNames = calloc(1, OldLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            (LPBYTE)ServiceNames,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail5;
-    }
-
-    Offset = 0;
-    ServiceNameLength = 0;
-    while (ServiceNames[Offset] != '\0') {
-        ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-        if (_stricmp(&ServiceNames[Offset], ServiceName) == 0)
-            goto remove;
-
-        Offset += ServiceNameLength + 1;
-    }
-
-    goto done;
-
-remove:
-    NewLength = OldLength - ((ServiceNameLength + 1) * sizeof (TCHAR));
-
-    memmove(&ServiceNames[Offset],
-            &ServiceNames[Offset + ServiceNameLength + 1],
-            (NewLength - Offset) * sizeof (TCHAR));
-
-    Log("removed %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail6");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail4");
-
-fail3:
-    Log("fail3");
-
-fail2:
-    Log("fail2");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
 static HRESULT
 DifInstallPreProcess(
     IN  HDEVINFO                    DeviceInfoSet,
@@ -1163,11 +945,7 @@ DifInstallPostProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) InstallUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR;
 }
@@ -1239,11 +1017,7 @@ DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) RemoveUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 17:13:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 17:13:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXY52-0007KK-Oh; Thu, 03 Sep 2015 17:13:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXY50-0007KB-SL
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 17:13:43 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	CA/67-12371-6CF78E55; Thu, 03 Sep 2015 17:13:42 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1441300421!40478879!1
X-Originating-IP: [209.85.212.175]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4939 invoked from network); 3 Sep 2015 17:13:41 -0000
Received: from mail-wi0-f175.google.com (HELO mail-wi0-f175.google.com)
	(209.85.212.175)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 17:13:41 -0000
Received: by wibz8 with SMTP id z8so106172111wib.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=C54mpUr6Vnhc82D0FMp2CFbiXgS28xTvjRgcZ1v3+UY=;
	b=LsVuADfgPGDihkHuM4UOHnEqoUIBeoyf4yYTAwojjAXVrgbeR3Q0G73iceNaAgDYML
	/uzOwHSJ3nLMF5r0vzGFdgugzMGczz7l3jpaRwFpUzFwgbD1fLGyqoK+nUXrY1PfuAkE
	bPWhcTPW6rVPq5jQcoRc+X/7j97zRgddvGVEPJJJRPvP0+GBWFHEuion3JyYojTDb/Pw
	AoLG+S5yQc128Zdxp0y+/ifVRpL7GgDjxtZmPZHf1iCWK58T0GZPizJNmPXkES+vwZn+
	eG0TA1/Q04Q/G+OP+De7xNVhta70dBuOO5up5w3nlH9v5I/SIXd/L+pIqcvREipRlhJj
	LViQ==
X-Received: by 10.194.203.3 with SMTP id km3mr50353307wjc.114.1441300421029;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	pe1sm9947020wic.20.2015.09.03.10.13.40
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 10:13:40 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 18:13:29 +0100
Message-Id: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Avoid holding a reference to the UNLPLUG
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

If the system goes into S3 or S4 then currently the reference will still be
held. This is not problematic for this interface but it is not desirable to
hold references in this circumstance and for other interfaces it can lead
to bugchecks.

This patch adds a function, PdoRequestUnplug(), which only acquires the
interface as needed and then makes use of that.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/pdo.c | 90 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 77fee31..53bed7a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -1008,11 +1008,6 @@ PdoD3ToD0(
 
     KeLowerIrql(Irql);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     return STATUS_SUCCESS;
 
 fail3:
@@ -1043,11 +1038,6 @@ PdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  FALSE);
-
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     XENBUS_SUSPEND(Deregister,
@@ -1144,6 +1134,26 @@ fail1:
     return status;
 }
 
+static VOID
+PdoUnplugRequest(
+    IN  PXENVIF_PDO Pdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Pdo->UnplugInterface,
+                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
     IN  PXENVIF_PDO     Pdo,
@@ -1165,21 +1175,19 @@ PdoStartDevice(
     if (DriverIsRebootRequested())
         goto fail1;
 
-    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
+    PdoUnplugRequest(Pdo, TRUE);
 
     status = RegistryOpenSoftwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
 
     status = RegistryOpenHardwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &HardwareKey);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
 
     (VOID) PdoSetFriendlyName(Pdo,
                               SoftwareKey,
@@ -1187,23 +1195,23 @@ PdoStartDevice(
 
     status = __PdoSetCurrentAddress(Pdo, SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "GetIfTable2",
                                    (PVOID *)&__GetIfTable2);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail5;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "FreeMibTable",
                                    (PVOID *)&__FreeMibTable);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
 
     status = __GetIfTable2(&Table);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail7;
 
     //
     // Look for a network interface with the same permanent address
@@ -1229,7 +1237,7 @@ PdoStartDevice(
             continue;
 
         status = STATUS_UNSUCCESSFUL;
-        goto fail9;
+        goto fail8;
     }
 
     //
@@ -1257,7 +1265,7 @@ PdoStartDevice(
 
     status = PdoD3ToD0(Pdo);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     __PdoSetDevicePnpState(Pdo, Started);
 
@@ -1270,15 +1278,15 @@ PdoStartDevice(
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail9:
+    Error("fail9\n");
 
     __FreeMibTable(Table);
 
-    goto fail7;
+    goto fail6;
 
-fail9:
-    Error("fail9\n");
+fail8:
+    Error("fail8\n");
 
     (VOID) SettingsSave(SoftwareKey,
                         Row->Alias,
@@ -1286,39 +1294,29 @@ fail9:
                         &Row->InterfaceGuid,
                         &Row->InterfaceLuid);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     DriverRequestReboot();
     __FreeMibTable(Table);
 
-fail8:
-    Error("fail8\n");
-
 fail7:
     Error("fail7\n");
 
 fail6:
     Error("fail6\n");
 
-    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
-
 fail5:
     Error("fail5\n");
 
-    RegistryCloseKey(HardwareKey);
+    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
 fail4:
     Error("fail4\n");
 
-    RegistryCloseKey(SoftwareKey);
+    RegistryCloseKey(HardwareKey);
 
 fail3:
     Error("fail3\n");
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+    RegistryCloseKey(SoftwareKey);
 
 fail2:
     Error("fail2\n");
@@ -1358,7 +1356,6 @@ PdoCancelStopDevice(
     NTSTATUS        status;
 
     __PdoRestoreDevicePnpState(Pdo, StopPending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1375,12 +1372,16 @@ PdoStopDevice(
 {
     NTSTATUS            status;
 
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    PdoUnplugRequest(Pdo, FALSE);
+
     PdoD0ToD3(Pdo);
 
+done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     __PdoSetDevicePnpState(Pdo, Stopped);
     status = STATUS_SUCCESS;
 
@@ -1419,7 +1420,6 @@ PdoCancelRemoveDevice(
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
 
     __PdoRestoreDevicePnpState(Pdo, RemovePending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1462,11 +1462,11 @@ PdoRemoveDevice(
 
     PdoD0ToD3(Pdo);
 
+    PdoUnplugRequest(Pdo, FALSE);
+
 done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     NeedInvalidate = FALSE;
 
     FdoAcquireMutex(Fdo);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 17:13:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 17:13:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXY52-0007KO-Pq; Thu, 03 Sep 2015 17:13:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXY51-0007KB-BX
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 17:13:43 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	BD/67-12371-7CF78E55; Thu, 03 Sep 2015 17:13:43 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1441300421!46568934!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24431 invoked from network); 3 Sep 2015 17:13:42 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-7.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 17:13:42 -0000
Received: by wiclk2 with SMTP id lk2so15426343wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=yD5Z4+ofrSQ2FBxzhQwF8//euArXUyj6lXQ3rc1PS+8=;
	b=IkCWHJIVBwTB+bo/sm3zJUZVHurudPHISzSRdMNyKFJ5iIh9WZNx6iEFma3oaOHnjC
	W+/Og3686+Cqe1rB6GDkxP+LPjfuiQokt54K2+wFQ2QADZXoRSP3sXj9UiUvJbZpSAYC
	HeHREZLH1oVB9FL2TnZxQXM0SCqGCVobaFw8x990qCEtFrQ/9sp9Xfg/bIWma8pAL85l
	O6lFsfnJN/lZzt6jIwqkXTAQUN8jy4IMIxFY5TuNXn/7MUCEgRn20JajKcGc1DMQypFC
	OpZEEma9YgTR30btgpSESLUUM5/wUyMHv6IlNfAnajICKuFc7UAtYTFcNk5Zg67gA1a0
	z7JQ==
X-Received: by 10.194.121.232 with SMTP id ln8mr15769843wjb.76.1441300421797; 
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	pe1sm9947020wic.20.2015.09.03.10.13.41
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 18:13:30 +0100
Message-Id: <1441300410-10376-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
References: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Stop manipulating the old unplug value
	in the co-installer...
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

...and take the new ClearUnplugRequest() code from the XENVBD co-installer
instead.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 326 ++++++++--------------------------------------------
 1 file changed, 50 insertions(+), 276 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 60ed2bc..406fcae 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -50,7 +50,7 @@ __user_code;
         SERVICES_KEY ## "\\" ## #_Driver
 
 #define UNPLUG_KEY \
-        SERVICE_KEY(XENFILT) ## "\\Unplug"
+        SERVICE_KEY(XEN) ## "\\Unplug"
 
 #define CONTROL_KEY "SYSTEM\\CurrentControlSet\\Control"
 
@@ -188,6 +188,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OpenEnumKey(
     OUT PHKEY   EnumKey
     )
@@ -849,271 +896,6 @@ fail1:
     return FALSE;
 }
 
-static BOOLEAN
-InstallUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-
-    Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
-                           UNPLUG_KEY,
-                           0,
-                           NULL,
-                           REG_OPTION_NON_VOLATILE,
-                           KEY_ALL_ACCESS,
-                           NULL,
-                           &UnplugKey,
-                           NULL);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        if (Error == ERROR_FILE_NOT_FOUND) {
-            Type = REG_MULTI_SZ;
-            OldLength = sizeof (TCHAR);
-        } else {
-            SetLastError(Error);
-            goto fail2;
-        }
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    NewLength = OldLength + (DWORD)((strlen(ServiceName) + 1) * sizeof (TCHAR));
-
-    ServiceNames = calloc(1, NewLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Offset = 0;
-    if (OldLength != sizeof (TCHAR)) {
-        Error = RegQueryValueEx(UnplugKey,
-                                ClassName,
-                                NULL,
-                                &Type,
-                                (LPBYTE)ServiceNames,
-                                &OldLength);
-        if (Error != ERROR_SUCCESS) {
-            SetLastError(ERROR_BAD_FORMAT);
-            goto fail5;
-        }
-
-        while (ServiceNames[Offset] != '\0') {
-            ULONG   ServiceNameLength;
-
-            ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-            if (_stricmp(&ServiceNames[Offset], ServiceName) == 0) {
-                Log("%s already present", ServiceName);
-                goto done;
-            }
-
-            Offset += ServiceNameLength + 1;
-        }
-    }
-
-    memmove(&ServiceNames[Offset], ServiceName, strlen(ServiceName));
-    Log("added %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail5");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail5");
-
-fail3:
-    Log("fail5");
-
-fail2:
-    Log("fail5");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
-static BOOLEAN
-RemoveUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-    ULONG           ServiceNameLength;
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         UNPLUG_KEY,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &UnplugKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail2;
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    ServiceNames = calloc(1, OldLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            (LPBYTE)ServiceNames,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail5;
-    }
-
-    Offset = 0;
-    ServiceNameLength = 0;
-    while (ServiceNames[Offset] != '\0') {
-        ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-        if (_stricmp(&ServiceNames[Offset], ServiceName) == 0)
-            goto remove;
-
-        Offset += ServiceNameLength + 1;
-    }
-
-    goto done;
-
-remove:
-    NewLength = OldLength - ((ServiceNameLength + 1) * sizeof (TCHAR));
-
-    memmove(&ServiceNames[Offset],
-            &ServiceNames[Offset + ServiceNameLength + 1],
-            (NewLength - Offset) * sizeof (TCHAR));
-
-    Log("removed %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail6");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail4");
-
-fail3:
-    Log("fail3");
-
-fail2:
-    Log("fail2");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
 static HRESULT
 DifInstallPreProcess(
     IN  HDEVINFO                    DeviceInfoSet,
@@ -1163,11 +945,7 @@ DifInstallPostProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) InstallUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR;
 }
@@ -1239,11 +1017,7 @@ DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) RemoveUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 03 17:13:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 03 Sep 2015 17:13:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXY52-0007KK-Oh; Thu, 03 Sep 2015 17:13:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXY50-0007KB-SL
	for win-pv-devel@lists.xenproject.org; Thu, 03 Sep 2015 17:13:43 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	CA/67-12371-6CF78E55; Thu, 03 Sep 2015 17:13:42 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1441300421!40478879!1
X-Originating-IP: [209.85.212.175]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4939 invoked from network); 3 Sep 2015 17:13:41 -0000
Received: from mail-wi0-f175.google.com (HELO mail-wi0-f175.google.com)
	(209.85.212.175)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	3 Sep 2015 17:13:41 -0000
Received: by wibz8 with SMTP id z8so106172111wib.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=C54mpUr6Vnhc82D0FMp2CFbiXgS28xTvjRgcZ1v3+UY=;
	b=LsVuADfgPGDihkHuM4UOHnEqoUIBeoyf4yYTAwojjAXVrgbeR3Q0G73iceNaAgDYML
	/uzOwHSJ3nLMF5r0vzGFdgugzMGczz7l3jpaRwFpUzFwgbD1fLGyqoK+nUXrY1PfuAkE
	bPWhcTPW6rVPq5jQcoRc+X/7j97zRgddvGVEPJJJRPvP0+GBWFHEuion3JyYojTDb/Pw
	AoLG+S5yQc128Zdxp0y+/ifVRpL7GgDjxtZmPZHf1iCWK58T0GZPizJNmPXkES+vwZn+
	eG0TA1/Q04Q/G+OP+De7xNVhta70dBuOO5up5w3nlH9v5I/SIXd/L+pIqcvREipRlhJj
	LViQ==
X-Received: by 10.194.203.3 with SMTP id km3mr50353307wjc.114.1441300421029;
	Thu, 03 Sep 2015 10:13:41 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	pe1sm9947020wic.20.2015.09.03.10.13.40
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 03 Sep 2015 10:13:40 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu,  3 Sep 2015 18:13:29 +0100
Message-Id: <1441300410-10376-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Avoid holding a reference to the UNLPLUG
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

If the system goes into S3 or S4 then currently the reference will still be
held. This is not problematic for this interface but it is not desirable to
hold references in this circumstance and for other interfaces it can lead
to bugchecks.

This patch adds a function, PdoRequestUnplug(), which only acquires the
interface as needed and then makes use of that.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/pdo.c | 90 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 77fee31..53bed7a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -1008,11 +1008,6 @@ PdoD3ToD0(
 
     KeLowerIrql(Irql);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     return STATUS_SUCCESS;
 
 fail3:
@@ -1043,11 +1038,6 @@ PdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  FALSE);
-
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     XENBUS_SUSPEND(Deregister,
@@ -1144,6 +1134,26 @@ fail1:
     return status;
 }
 
+static VOID
+PdoUnplugRequest(
+    IN  PXENVIF_PDO Pdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Pdo->UnplugInterface,
+                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
     IN  PXENVIF_PDO     Pdo,
@@ -1165,21 +1175,19 @@ PdoStartDevice(
     if (DriverIsRebootRequested())
         goto fail1;
 
-    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
+    PdoUnplugRequest(Pdo, TRUE);
 
     status = RegistryOpenSoftwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
 
     status = RegistryOpenHardwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &HardwareKey);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
 
     (VOID) PdoSetFriendlyName(Pdo,
                               SoftwareKey,
@@ -1187,23 +1195,23 @@ PdoStartDevice(
 
     status = __PdoSetCurrentAddress(Pdo, SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "GetIfTable2",
                                    (PVOID *)&__GetIfTable2);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail5;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "FreeMibTable",
                                    (PVOID *)&__FreeMibTable);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
 
     status = __GetIfTable2(&Table);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail7;
 
     //
     // Look for a network interface with the same permanent address
@@ -1229,7 +1237,7 @@ PdoStartDevice(
             continue;
 
         status = STATUS_UNSUCCESSFUL;
-        goto fail9;
+        goto fail8;
     }
 
     //
@@ -1257,7 +1265,7 @@ PdoStartDevice(
 
     status = PdoD3ToD0(Pdo);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     __PdoSetDevicePnpState(Pdo, Started);
 
@@ -1270,15 +1278,15 @@ PdoStartDevice(
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail9:
+    Error("fail9\n");
 
     __FreeMibTable(Table);
 
-    goto fail7;
+    goto fail6;
 
-fail9:
-    Error("fail9\n");
+fail8:
+    Error("fail8\n");
 
     (VOID) SettingsSave(SoftwareKey,
                         Row->Alias,
@@ -1286,39 +1294,29 @@ fail9:
                         &Row->InterfaceGuid,
                         &Row->InterfaceLuid);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     DriverRequestReboot();
     __FreeMibTable(Table);
 
-fail8:
-    Error("fail8\n");
-
 fail7:
     Error("fail7\n");
 
 fail6:
     Error("fail6\n");
 
-    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
-
 fail5:
     Error("fail5\n");
 
-    RegistryCloseKey(HardwareKey);
+    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
 fail4:
     Error("fail4\n");
 
-    RegistryCloseKey(SoftwareKey);
+    RegistryCloseKey(HardwareKey);
 
 fail3:
     Error("fail3\n");
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+    RegistryCloseKey(SoftwareKey);
 
 fail2:
     Error("fail2\n");
@@ -1358,7 +1356,6 @@ PdoCancelStopDevice(
     NTSTATUS        status;
 
     __PdoRestoreDevicePnpState(Pdo, StopPending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1375,12 +1372,16 @@ PdoStopDevice(
 {
     NTSTATUS            status;
 
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    PdoUnplugRequest(Pdo, FALSE);
+
     PdoD0ToD3(Pdo);
 
+done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     __PdoSetDevicePnpState(Pdo, Stopped);
     status = STATUS_SUCCESS;
 
@@ -1419,7 +1420,6 @@ PdoCancelRemoveDevice(
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
 
     __PdoRestoreDevicePnpState(Pdo, RemovePending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1462,11 +1462,11 @@ PdoRemoveDevice(
 
     PdoD0ToD3(Pdo);
 
+    PdoUnplugRequest(Pdo, FALSE);
+
 done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     NeedInvalidate = FALSE;
 
     FdoAcquireMutex(Fdo);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 07:32:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 07:32:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXlTx-00029s-3G; Fri, 04 Sep 2015 07:32:21 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXlTv-00029i-DW
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 07:32:19 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	A3/1A-30270-20949E55; Fri, 04 Sep 2015 07:32:18 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441351937!32747768!1
X-Originating-IP: [209.85.212.178]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16659 invoked from network); 4 Sep 2015 07:32:18 -0000
Received: from mail-wi0-f178.google.com (HELO mail-wi0-f178.google.com)
	(209.85.212.178)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 07:32:18 -0000
Received: by wiclk2 with SMTP id lk2so8283633wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=C54mpUr6Vnhc82D0FMp2CFbiXgS28xTvjRgcZ1v3+UY=;
	b=ISY1jUcRrKeAiYtNZrLNNvdDZgJHMx5eKw/rGprPCyDilaL5+OP920MlTQGMpP0Ssi
	I/9cd4W8xiqA4iIzaMuLQpSuMRXuxA9MDoZOdVkl8ybzxUoARrD1dPK0IZJQIZ48v8Dh
	wXlWHZPwJ7mtOfNWhk8gy+9rE7pz44En9qBdKFXcDXg4i+Hh5Vc8y15ZgPka5VQiaN0G
	NsesLsx87xpWW4LNy6llV5vO6kOWtXMJZ7/rxRKKh4aUeC7mVOlTBdOKNXrUnaY319sn
	JyB8Aabm/dNNnnvSzzntehLRKzR4IIiJfuCZjLKnmc/sDx9rcoou9rLPoyalec10wj9u
	yyeA==
X-Received: by 10.194.121.131 with SMTP id lk3mr4305019wjb.77.1441351937715;
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p3sm2452215wib.16.2015.09.04.00.32.16
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Fri,  4 Sep 2015 08:32:04 +0100
Message-Id: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Avoid holding a reference to the UNLPLUG
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

If the system goes into S3 or S4 then currently the reference will still be
held. This is not problematic for this interface but it is not desirable to
hold references in this circumstance and for other interfaces it can lead
to bugchecks.

This patch adds a function, PdoRequestUnplug(), which only acquires the
interface as needed and then makes use of that.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/pdo.c | 90 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 77fee31..53bed7a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -1008,11 +1008,6 @@ PdoD3ToD0(
 
     KeLowerIrql(Irql);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     return STATUS_SUCCESS;
 
 fail3:
@@ -1043,11 +1038,6 @@ PdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  FALSE);
-
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     XENBUS_SUSPEND(Deregister,
@@ -1144,6 +1134,26 @@ fail1:
     return status;
 }
 
+static VOID
+PdoUnplugRequest(
+    IN  PXENVIF_PDO Pdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Pdo->UnplugInterface,
+                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
     IN  PXENVIF_PDO     Pdo,
@@ -1165,21 +1175,19 @@ PdoStartDevice(
     if (DriverIsRebootRequested())
         goto fail1;
 
-    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
+    PdoUnplugRequest(Pdo, TRUE);
 
     status = RegistryOpenSoftwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
 
     status = RegistryOpenHardwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &HardwareKey);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
 
     (VOID) PdoSetFriendlyName(Pdo,
                               SoftwareKey,
@@ -1187,23 +1195,23 @@ PdoStartDevice(
 
     status = __PdoSetCurrentAddress(Pdo, SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "GetIfTable2",
                                    (PVOID *)&__GetIfTable2);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail5;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "FreeMibTable",
                                    (PVOID *)&__FreeMibTable);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
 
     status = __GetIfTable2(&Table);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail7;
 
     //
     // Look for a network interface with the same permanent address
@@ -1229,7 +1237,7 @@ PdoStartDevice(
             continue;
 
         status = STATUS_UNSUCCESSFUL;
-        goto fail9;
+        goto fail8;
     }
 
     //
@@ -1257,7 +1265,7 @@ PdoStartDevice(
 
     status = PdoD3ToD0(Pdo);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     __PdoSetDevicePnpState(Pdo, Started);
 
@@ -1270,15 +1278,15 @@ PdoStartDevice(
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail9:
+    Error("fail9\n");
 
     __FreeMibTable(Table);
 
-    goto fail7;
+    goto fail6;
 
-fail9:
-    Error("fail9\n");
+fail8:
+    Error("fail8\n");
 
     (VOID) SettingsSave(SoftwareKey,
                         Row->Alias,
@@ -1286,39 +1294,29 @@ fail9:
                         &Row->InterfaceGuid,
                         &Row->InterfaceLuid);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     DriverRequestReboot();
     __FreeMibTable(Table);
 
-fail8:
-    Error("fail8\n");
-
 fail7:
     Error("fail7\n");
 
 fail6:
     Error("fail6\n");
 
-    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
-
 fail5:
     Error("fail5\n");
 
-    RegistryCloseKey(HardwareKey);
+    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
 fail4:
     Error("fail4\n");
 
-    RegistryCloseKey(SoftwareKey);
+    RegistryCloseKey(HardwareKey);
 
 fail3:
     Error("fail3\n");
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+    RegistryCloseKey(SoftwareKey);
 
 fail2:
     Error("fail2\n");
@@ -1358,7 +1356,6 @@ PdoCancelStopDevice(
     NTSTATUS        status;
 
     __PdoRestoreDevicePnpState(Pdo, StopPending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1375,12 +1372,16 @@ PdoStopDevice(
 {
     NTSTATUS            status;
 
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    PdoUnplugRequest(Pdo, FALSE);
+
     PdoD0ToD3(Pdo);
 
+done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     __PdoSetDevicePnpState(Pdo, Stopped);
     status = STATUS_SUCCESS;
 
@@ -1419,7 +1420,6 @@ PdoCancelRemoveDevice(
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
 
     __PdoRestoreDevicePnpState(Pdo, RemovePending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1462,11 +1462,11 @@ PdoRemoveDevice(
 
     PdoD0ToD3(Pdo);
 
+    PdoUnplugRequest(Pdo, FALSE);
+
 done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     NeedInvalidate = FALSE;
 
     FdoAcquireMutex(Fdo);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 07:32:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 07:32:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXlTx-00029w-4L; Fri, 04 Sep 2015 07:32:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXlTw-00029n-95
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 07:32:20 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	06/C9-10678-30949E55; Fri, 04 Sep 2015 07:32:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441351938!41215302!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30939 invoked from network); 4 Sep 2015 07:32:18 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 07:32:18 -0000
Received: by wiclk2 with SMTP id lk2so8283967wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=yD5Z4+ofrSQ2FBxzhQwF8//euArXUyj6lXQ3rc1PS+8=;
	b=Dn6Z8BnkaCvG52P5sto5i1P9PH8VYBxmKWz1ZC67areMuWWVvny073nftjtQFxa7n4
	+2xF6ftf0y54IDxzNzDDXJ+8/GwzJc2a4MpGrp5OQw1wvY+LoKWdE8uI8Tc8Rcqatg5V
	QNWf7GYSwma3KuQK9ymmTOC6oD5FVAhA4q4HnFuba1Ucv3He0X0azDlSlEqrrVKNSqjr
	sSHoUnR/q9IDmm4vY9iKWlPzJV0k4KdTK/XPCRmnzqnqxSd/jwxVVLN02KzJJQMdDJy4
	3eoKnpUi0tifpMhwh5DYBrNiij47l92sl1Z3B3Rziof6ONXJxJ0RELy+z8JYZa97TwI5
	rn/g==
X-Received: by 10.194.242.36 with SMTP id wn4mr4322934wjc.29.1441351938508;
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p3sm2452215wib.16.2015.09.04.00.32.17
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Fri,  4 Sep 2015 08:32:05 +0100
Message-Id: <1441351925-11100-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
References: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Stop manipulating the old unplug value
	in the co-installer...
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

...and take the new ClearUnplugRequest() code from the XENVBD co-installer
instead.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 326 ++++++++--------------------------------------------
 1 file changed, 50 insertions(+), 276 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 60ed2bc..406fcae 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -50,7 +50,7 @@ __user_code;
         SERVICES_KEY ## "\\" ## #_Driver
 
 #define UNPLUG_KEY \
-        SERVICE_KEY(XENFILT) ## "\\Unplug"
+        SERVICE_KEY(XEN) ## "\\Unplug"
 
 #define CONTROL_KEY "SYSTEM\\CurrentControlSet\\Control"
 
@@ -188,6 +188,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OpenEnumKey(
     OUT PHKEY   EnumKey
     )
@@ -849,271 +896,6 @@ fail1:
     return FALSE;
 }
 
-static BOOLEAN
-InstallUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-
-    Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
-                           UNPLUG_KEY,
-                           0,
-                           NULL,
-                           REG_OPTION_NON_VOLATILE,
-                           KEY_ALL_ACCESS,
-                           NULL,
-                           &UnplugKey,
-                           NULL);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        if (Error == ERROR_FILE_NOT_FOUND) {
-            Type = REG_MULTI_SZ;
-            OldLength = sizeof (TCHAR);
-        } else {
-            SetLastError(Error);
-            goto fail2;
-        }
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    NewLength = OldLength + (DWORD)((strlen(ServiceName) + 1) * sizeof (TCHAR));
-
-    ServiceNames = calloc(1, NewLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Offset = 0;
-    if (OldLength != sizeof (TCHAR)) {
-        Error = RegQueryValueEx(UnplugKey,
-                                ClassName,
-                                NULL,
-                                &Type,
-                                (LPBYTE)ServiceNames,
-                                &OldLength);
-        if (Error != ERROR_SUCCESS) {
-            SetLastError(ERROR_BAD_FORMAT);
-            goto fail5;
-        }
-
-        while (ServiceNames[Offset] != '\0') {
-            ULONG   ServiceNameLength;
-
-            ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-            if (_stricmp(&ServiceNames[Offset], ServiceName) == 0) {
-                Log("%s already present", ServiceName);
-                goto done;
-            }
-
-            Offset += ServiceNameLength + 1;
-        }
-    }
-
-    memmove(&ServiceNames[Offset], ServiceName, strlen(ServiceName));
-    Log("added %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail5");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail5");
-
-fail3:
-    Log("fail5");
-
-fail2:
-    Log("fail5");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
-static BOOLEAN
-RemoveUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-    ULONG           ServiceNameLength;
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         UNPLUG_KEY,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &UnplugKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail2;
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    ServiceNames = calloc(1, OldLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            (LPBYTE)ServiceNames,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail5;
-    }
-
-    Offset = 0;
-    ServiceNameLength = 0;
-    while (ServiceNames[Offset] != '\0') {
-        ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-        if (_stricmp(&ServiceNames[Offset], ServiceName) == 0)
-            goto remove;
-
-        Offset += ServiceNameLength + 1;
-    }
-
-    goto done;
-
-remove:
-    NewLength = OldLength - ((ServiceNameLength + 1) * sizeof (TCHAR));
-
-    memmove(&ServiceNames[Offset],
-            &ServiceNames[Offset + ServiceNameLength + 1],
-            (NewLength - Offset) * sizeof (TCHAR));
-
-    Log("removed %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail6");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail4");
-
-fail3:
-    Log("fail3");
-
-fail2:
-    Log("fail2");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
 static HRESULT
 DifInstallPreProcess(
     IN  HDEVINFO                    DeviceInfoSet,
@@ -1163,11 +945,7 @@ DifInstallPostProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) InstallUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR;
 }
@@ -1239,11 +1017,7 @@ DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) RemoveUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 07:32:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 07:32:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXlTx-00029w-4L; Fri, 04 Sep 2015 07:32:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXlTw-00029n-95
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 07:32:20 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	06/C9-10678-30949E55; Fri, 04 Sep 2015 07:32:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441351938!41215302!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30939 invoked from network); 4 Sep 2015 07:32:18 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 07:32:18 -0000
Received: by wiclk2 with SMTP id lk2so8283967wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=yD5Z4+ofrSQ2FBxzhQwF8//euArXUyj6lXQ3rc1PS+8=;
	b=Dn6Z8BnkaCvG52P5sto5i1P9PH8VYBxmKWz1ZC67areMuWWVvny073nftjtQFxa7n4
	+2xF6ftf0y54IDxzNzDDXJ+8/GwzJc2a4MpGrp5OQw1wvY+LoKWdE8uI8Tc8Rcqatg5V
	QNWf7GYSwma3KuQK9ymmTOC6oD5FVAhA4q4HnFuba1Ucv3He0X0azDlSlEqrrVKNSqjr
	sSHoUnR/q9IDmm4vY9iKWlPzJV0k4KdTK/XPCRmnzqnqxSd/jwxVVLN02KzJJQMdDJy4
	3eoKnpUi0tifpMhwh5DYBrNiij47l92sl1Z3B3Rziof6ONXJxJ0RELy+z8JYZa97TwI5
	rn/g==
X-Received: by 10.194.242.36 with SMTP id wn4mr4322934wjc.29.1441351938508;
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p3sm2452215wib.16.2015.09.04.00.32.17
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 00:32:18 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Fri,  4 Sep 2015 08:32:05 +0100
Message-Id: <1441351925-11100-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
References: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Stop manipulating the old unplug value
	in the co-installer...
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

...and take the new ClearUnplugRequest() code from the XENVBD co-installer
instead.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 326 ++++++++--------------------------------------------
 1 file changed, 50 insertions(+), 276 deletions(-)

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 60ed2bc..406fcae 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -50,7 +50,7 @@ __user_code;
         SERVICES_KEY ## "\\" ## #_Driver
 
 #define UNPLUG_KEY \
-        SERVICE_KEY(XENFILT) ## "\\Unplug"
+        SERVICE_KEY(XEN) ## "\\Unplug"
 
 #define CONTROL_KEY "SYSTEM\\CurrentControlSet\\Control"
 
@@ -188,6 +188,53 @@ __FunctionName(
 }
 
 static BOOLEAN
+ClearUnplugRequest(
+    IN  PTCHAR      ClassName
+    )
+{
+    HKEY            UnplugKey;
+    HRESULT         Error;
+
+    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                         UNPLUG_KEY,
+                         0,
+                         KEY_ALL_ACCESS,
+                         &UnplugKey);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail1;
+    }
+
+    Error = RegDeleteValue(UnplugKey, ClassName);
+    if (Error != ERROR_SUCCESS) {
+        SetLastError(Error);
+        goto fail2;
+    }
+
+    RegCloseKey(UnplugKey);
+
+    return TRUE;
+
+fail2:
+    Log("fail2");
+
+    RegCloseKey(UnplugKey);
+
+fail1:
+    Error = GetLastError();
+
+    {
+        PTCHAR  Message;
+
+        Message = GetErrorMessage(Error);
+        Log("fail1 (%s)", Message);
+        LocalFree(Message);
+    }
+
+    return FALSE;
+}
+
+static BOOLEAN
 OpenEnumKey(
     OUT PHKEY   EnumKey
     )
@@ -849,271 +896,6 @@ fail1:
     return FALSE;
 }
 
-static BOOLEAN
-InstallUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-
-    Error = RegCreateKeyEx(HKEY_LOCAL_MACHINE,
-                           UNPLUG_KEY,
-                           0,
-                           NULL,
-                           REG_OPTION_NON_VOLATILE,
-                           KEY_ALL_ACCESS,
-                           NULL,
-                           &UnplugKey,
-                           NULL);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        if (Error == ERROR_FILE_NOT_FOUND) {
-            Type = REG_MULTI_SZ;
-            OldLength = sizeof (TCHAR);
-        } else {
-            SetLastError(Error);
-            goto fail2;
-        }
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    NewLength = OldLength + (DWORD)((strlen(ServiceName) + 1) * sizeof (TCHAR));
-
-    ServiceNames = calloc(1, NewLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Offset = 0;
-    if (OldLength != sizeof (TCHAR)) {
-        Error = RegQueryValueEx(UnplugKey,
-                                ClassName,
-                                NULL,
-                                &Type,
-                                (LPBYTE)ServiceNames,
-                                &OldLength);
-        if (Error != ERROR_SUCCESS) {
-            SetLastError(ERROR_BAD_FORMAT);
-            goto fail5;
-        }
-
-        while (ServiceNames[Offset] != '\0') {
-            ULONG   ServiceNameLength;
-
-            ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-            if (_stricmp(&ServiceNames[Offset], ServiceName) == 0) {
-                Log("%s already present", ServiceName);
-                goto done;
-            }
-
-            Offset += ServiceNameLength + 1;
-        }
-    }
-
-    memmove(&ServiceNames[Offset], ServiceName, strlen(ServiceName));
-    Log("added %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail5");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail5");
-
-fail3:
-    Log("fail5");
-
-fail2:
-    Log("fail5");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
-static BOOLEAN
-RemoveUnplugService(
-    IN  PTCHAR      ClassName,
-    IN  PTCHAR      ServiceName
-    )
-{
-    HKEY            UnplugKey;
-    HRESULT         Error;
-    DWORD           Type;
-    DWORD           OldLength;
-    DWORD           NewLength;
-    PTCHAR          ServiceNames;
-    ULONG           Offset;
-    ULONG           ServiceNameLength;
-
-    Error = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
-                         UNPLUG_KEY,
-                         0,
-                         KEY_ALL_ACCESS,
-                         &UnplugKey);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail1;
-    }
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            NULL,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail2;
-    }
-
-    if (Type != REG_MULTI_SZ) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail3;
-    }
-
-    ServiceNames = calloc(1, OldLength);
-    if (ServiceNames == NULL)
-        goto fail4;
-
-    Error = RegQueryValueEx(UnplugKey,
-                            ClassName,
-                            NULL,
-                            &Type,
-                            (LPBYTE)ServiceNames,
-                            &OldLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(ERROR_BAD_FORMAT);
-        goto fail5;
-    }
-
-    Offset = 0;
-    ServiceNameLength = 0;
-    while (ServiceNames[Offset] != '\0') {
-        ServiceNameLength = (ULONG)strlen(&ServiceNames[Offset]) / sizeof (TCHAR);
-
-        if (_stricmp(&ServiceNames[Offset], ServiceName) == 0)
-            goto remove;
-
-        Offset += ServiceNameLength + 1;
-    }
-
-    goto done;
-
-remove:
-    NewLength = OldLength - ((ServiceNameLength + 1) * sizeof (TCHAR));
-
-    memmove(&ServiceNames[Offset],
-            &ServiceNames[Offset + ServiceNameLength + 1],
-            (NewLength - Offset) * sizeof (TCHAR));
-
-    Log("removed %s", ServiceName);
-
-    Error = RegSetValueEx(UnplugKey,
-                          ClassName,
-                          0,
-                          REG_MULTI_SZ,
-                          (LPBYTE)ServiceNames,
-                          NewLength);
-    if (Error != ERROR_SUCCESS) {
-        SetLastError(Error);
-        goto fail6;
-    }
-
-done:
-    free(ServiceNames);
-
-    RegCloseKey(UnplugKey);
-
-    return TRUE;
-
-fail6:
-    Log("fail6");
-
-fail5:
-    Log("fail5");
-
-    free(ServiceNames);
-
-fail4:
-    Log("fail4");
-
-fail3:
-    Log("fail3");
-
-fail2:
-    Log("fail2");
-
-    RegCloseKey(UnplugKey);
-
-fail1:
-    Error = GetLastError();
-
-    {
-        PTCHAR  Message;
-
-        Message = GetErrorMessage(Error);
-        Log("fail1 (%s)", Message);
-        LocalFree(Message);
-    }
-
-    return FALSE;
-}
-
 static HRESULT
 DifInstallPreProcess(
     IN  HDEVINFO                    DeviceInfoSet,
@@ -1163,11 +945,7 @@ DifInstallPostProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) InstallUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR;
 }
@@ -1239,11 +1017,7 @@ DifRemovePreProcess(
     UNREFERENCED_PARAMETER(DeviceInfoData);
     UNREFERENCED_PARAMETER(Context);
 
-    Log("====>");
-
-    (VOID) RemoveUnplugService("NICS", "XENVIF");
-
-    Log("<====");
+    Log("<===>");
 
     return NO_ERROR; 
 }
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 07:32:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 07:32:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXlTx-00029s-3G; Fri, 04 Sep 2015 07:32:21 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZXlTv-00029i-DW
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 07:32:19 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	A3/1A-30270-20949E55; Fri, 04 Sep 2015 07:32:18 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441351937!32747768!1
X-Originating-IP: [209.85.212.178]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16659 invoked from network); 4 Sep 2015 07:32:18 -0000
Received: from mail-wi0-f178.google.com (HELO mail-wi0-f178.google.com)
	(209.85.212.178)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 07:32:18 -0000
Received: by wiclk2 with SMTP id lk2so8283633wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=C54mpUr6Vnhc82D0FMp2CFbiXgS28xTvjRgcZ1v3+UY=;
	b=ISY1jUcRrKeAiYtNZrLNNvdDZgJHMx5eKw/rGprPCyDilaL5+OP920MlTQGMpP0Ssi
	I/9cd4W8xiqA4iIzaMuLQpSuMRXuxA9MDoZOdVkl8ybzxUoARrD1dPK0IZJQIZ48v8Dh
	wXlWHZPwJ7mtOfNWhk8gy+9rE7pz44En9qBdKFXcDXg4i+Hh5Vc8y15ZgPka5VQiaN0G
	NsesLsx87xpWW4LNy6llV5vO6kOWtXMJZ7/rxRKKh4aUeC7mVOlTBdOKNXrUnaY319sn
	JyB8Aabm/dNNnnvSzzntehLRKzR4IIiJfuCZjLKnmc/sDx9rcoou9rLPoyalec10wj9u
	yyeA==
X-Received: by 10.194.121.131 with SMTP id lk3mr4305019wjb.77.1441351937715;
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p3sm2452215wib.16.2015.09.04.00.32.16
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 00:32:17 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Fri,  4 Sep 2015 08:32:04 +0100
Message-Id: <1441351925-11100-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Avoid holding a reference to the UNLPLUG
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

If the system goes into S3 or S4 then currently the reference will still be
held. This is not problematic for this interface but it is not desirable to
hold references in this circumstance and for other interfaces it can lead
to bugchecks.

This patch adds a function, PdoRequestUnplug(), which only acquires the
interface as needed and then makes use of that.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/pdo.c | 90 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 77fee31..53bed7a 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -1008,11 +1008,6 @@ PdoD3ToD0(
 
     KeLowerIrql(Irql);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     return STATUS_SUCCESS;
 
 fail3:
@@ -1043,11 +1038,6 @@ PdoD0ToD3(
 
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  FALSE);
-
     KeRaiseIrql(DISPATCH_LEVEL, &Irql);
 
     XENBUS_SUSPEND(Deregister,
@@ -1144,6 +1134,26 @@ fail1:
     return status;
 }
 
+static VOID
+PdoUnplugRequest(
+    IN  PXENVIF_PDO Pdo,
+    IN  BOOLEAN     Make
+    )
+{
+    NTSTATUS        status;
+
+    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
+    if (!NT_SUCCESS(status))
+        return;
+
+    XENBUS_UNPLUG(Request,
+                  &Pdo->UnplugInterface,
+                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
+                  Make);
+
+    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+}
+
 static DECLSPEC_NOINLINE NTSTATUS
 PdoStartDevice(
     IN  PXENVIF_PDO     Pdo,
@@ -1165,21 +1175,19 @@ PdoStartDevice(
     if (DriverIsRebootRequested())
         goto fail1;
 
-    status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
-    if (!NT_SUCCESS(status))
-        goto fail2;
+    PdoUnplugRequest(Pdo, TRUE);
 
     status = RegistryOpenSoftwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail3;
+        goto fail2;
 
     status = RegistryOpenHardwareKey(__PdoGetDeviceObject(Pdo),
                                      KEY_ALL_ACCESS,
                                      &HardwareKey);
     if (!NT_SUCCESS(status))
-        goto fail4;
+        goto fail3;
 
     (VOID) PdoSetFriendlyName(Pdo,
                               SoftwareKey,
@@ -1187,23 +1195,23 @@ PdoStartDevice(
 
     status = __PdoSetCurrentAddress(Pdo, SoftwareKey);
     if (!NT_SUCCESS(status))
-        goto fail5;
+        goto fail4;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "GetIfTable2",
                                    (PVOID *)&__GetIfTable2);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail5;
 
     status = LinkGetRoutineAddress("netio.sys",
                                    "FreeMibTable",
                                    (PVOID *)&__FreeMibTable);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail6;
 
     status = __GetIfTable2(&Table);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail7;
 
     //
     // Look for a network interface with the same permanent address
@@ -1229,7 +1237,7 @@ PdoStartDevice(
             continue;
 
         status = STATUS_UNSUCCESSFUL;
-        goto fail9;
+        goto fail8;
     }
 
     //
@@ -1257,7 +1265,7 @@ PdoStartDevice(
 
     status = PdoD3ToD0(Pdo);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail9;
 
     __PdoSetDevicePnpState(Pdo, Started);
 
@@ -1270,15 +1278,15 @@ PdoStartDevice(
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail9:
+    Error("fail9\n");
 
     __FreeMibTable(Table);
 
-    goto fail7;
+    goto fail6;
 
-fail9:
-    Error("fail9\n");
+fail8:
+    Error("fail8\n");
 
     (VOID) SettingsSave(SoftwareKey,
                         Row->Alias,
@@ -1286,39 +1294,29 @@ fail9:
                         &Row->InterfaceGuid,
                         &Row->InterfaceLuid);
 
-    XENBUS_UNPLUG(Request,
-                  &Pdo->UnplugInterface,
-                  XENBUS_UNPLUG_DEVICE_TYPE_NICS,
-                  TRUE);
-
     DriverRequestReboot();
     __FreeMibTable(Table);
 
-fail8:
-    Error("fail8\n");
-
 fail7:
     Error("fail7\n");
 
 fail6:
     Error("fail6\n");
 
-    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
-
 fail5:
     Error("fail5\n");
 
-    RegistryCloseKey(HardwareKey);
+    RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
 fail4:
     Error("fail4\n");
 
-    RegistryCloseKey(SoftwareKey);
+    RegistryCloseKey(HardwareKey);
 
 fail3:
     Error("fail3\n");
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
+    RegistryCloseKey(SoftwareKey);
 
 fail2:
     Error("fail2\n");
@@ -1358,7 +1356,6 @@ PdoCancelStopDevice(
     NTSTATUS        status;
 
     __PdoRestoreDevicePnpState(Pdo, StopPending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1375,12 +1372,16 @@ PdoStopDevice(
 {
     NTSTATUS            status;
 
+    if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
+        goto done;
+
+    PdoUnplugRequest(Pdo, FALSE);
+
     PdoD0ToD3(Pdo);
 
+done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     __PdoSetDevicePnpState(Pdo, Stopped);
     status = STATUS_SUCCESS;
 
@@ -1419,7 +1420,6 @@ PdoCancelRemoveDevice(
         FrontendEjectFailed(__PdoGetFrontend(Pdo));
 
     __PdoRestoreDevicePnpState(Pdo, RemovePending);
-
     status = STATUS_SUCCESS;
 
     Irp->IoStatus.Status = status;
@@ -1462,11 +1462,11 @@ PdoRemoveDevice(
 
     PdoD0ToD3(Pdo);
 
+    PdoUnplugRequest(Pdo, FALSE);
+
 done:
     RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
 
-    XENBUS_UNPLUG(Release, &Pdo->UnplugInterface);
-
     NeedInvalidate = FALSE;
 
     FdoAcquireMutex(Fdo);
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 08:58:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 08:58:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXmpa-0002Xj-S8; Fri, 04 Sep 2015 08:58:46 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXmpZ-0002XS-Hn
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 08:58:45 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	2B/1E-12371-44D59E55; Fri, 04 Sep 2015 08:58:44 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1441357123!14417035!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21426 invoked from network); 4 Sep 2015 08:58:43 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 08:58:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2455820"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ31F+/j0j99Sl5ky47zllSFi+KZ4sG9uQ
Date: Fri, 4 Sep 2015 08:58:42 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
References: <55DC94C9.2080606@invisiblethingslab.com>
In-Reply-To: <55DC94C9.2080606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMS8yXSBBZGQgZm9yZWlnbiBw
YWdlIG1hcHBpbmcgZnVuY3Rpb25zIHRvDQo+IHRoZSBHTlRUQUIgaW50ZXJmYWNlDQo+IA0KPiBH
TlRUQUIgaW50ZXJmYWNlIG5vdyBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gbWFwIGFuZCB1bm1hcCBt
ZW1vcnkgcGFnZXMNCj4gZ3JhbnRlZCBieSBhIGZvcmVpZ24gZG9tYWluLiBUaGUgcGFnZShzKSBh
cmUgbWFwcGVkIHVuZGVyIGFuIGFkZHJlc3MNCj4gYWxsb2NhdGVkIGZyb20gdGhlIFBDSSBCQVIg
c3BhY2UuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgV29qZHnFgmEgPG9tZWdAaW52aXNp
YmxldGhpbmdzbGFiLmNvbT4NCj4gLS0tDQo+ICBpbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCB8
ICA2MiArKysrKysrKysrKysrKysrKysrKysrKy0NCj4gIGluY2x1ZGUveGVuLmggICAgICAgICAg
ICAgIHwgIDE5ICsrKysrKysrDQo+ICBzcmMveGVuL2dyYW50X3RhYmxlLmMgICAgICB8ICA4NSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHNyYy94ZW5idXMvZ250dGFiLmMg
ICAgICAgIHwgMTE0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKw0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyNzggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo
LSkNCj4gDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBiL2luY2x1
ZGUvZ250dGFiX2ludGVyZmFjZS5oDQo+IGluZGV4IGQyOTQ0MGEuLjAwMTY4ODggMTAwNjQ0DQo+
IC0tLSBhL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oDQo+ICsrKyBiL2luY2x1ZGUvZ250dGFi
X2ludGVyZmFjZS5oDQo+IEBAIC0xNjMsNiArMTYzLDQ3IEBAIHR5cGVkZWYgVk9JRA0KPiAgICAg
IElOICBQWEVOQlVTX0dOVFRBQl9DQUNIRSAgICBDYWNoZQ0KPiAgICAgICk7DQo+IA0KPiArLyoh
IFx0eXBlZGVmIFhFTkJVU19HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVMNCj4gKyAgICBcYnJpZWYg
TWFwIGZvcmVpZ24gbWVtb3J5IHBhZ2VzIGludG8gdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlDQo+
ICsNCj4gKyAgICBccGFyYW0gSW50ZXJmYWNlIFRoZSBpbnRlcmZhY2UgaGVhZGVyDQo+ICsgICAg
XHBhcmFtIERvbWFpbiBUaGUgZG9taWQgb2YgdGhlIGZvcmVpZ24gZG9tYWluIHRoYXQgZ3JhbnRl
ZCB0aGUgcGFnZXMNCj4gKyAgICBccGFyYW0gTnVtYmVyUGFnZXMgTnVtYmVyIG9mIHBhZ2VzIHRv
IG1hcA0KPiArICAgIFxwYXJhbSBSZWZlcmVuY2VzIEFycmF5IG9mIGdyYW50IHJlZmVyZW5jZSBu
dW1iZXJzIHNoYXJlZCBieSB0aGUNCj4gZm9yZWlnbiBkb21haW4NCj4gKyAgICBccGFyYW0gUmVh
ZE9ubHkgSWYgVFJVRSwgcGFnZXMgYXJlIG1hcHBlZCB3aXRoIHJlYWQtb25seSBhY2Nlc3MNCj4g
KyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0aGF0IHRoZSBmb3JlaWdu
IHBhZ2VzIGFyZSBtYXBwZWQNCj4gdW5kZXINCj4gKyAgICAoYWxsb2NhdGVkIGZyb20gdGhlIFBD
SSBJTyBzcGFjZSkNCg0KVGhleSBuZWVkIG5vdCBiZSAtIHdlIGNvdWxkIGRlY3JlYXNlX3Jlc2Vy
dmF0aW9uIG91dCBzb21lIFJBTSAtIHNvIEknZCBzZWUgdGhpcyBhcyBhbiBpbXBsZW1lbnRhdGlv
biBkZXRhaWwgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIGlu
dGVyZmFjZS4NCg0KPiArICAgIFxwYXJhbSBIYW5kbGVzIEFuIGFycmF5IG9mIHRyYWNraW5nIG51
bWJlcnMgdGhhdCByZXByZXNlbnQgdGhlIG1hcHBpbmcNCj4gKyAgICBvZiBlYWNoIGluZGl2aWR1
YWwgcGFnZQ0KPiArICovDQoNCkl0J3Mga2luZCBvZiB1Z2x5IHRvIGV4cG9zZSBYZW4ncyBncmFu
dCBtYXBwaW5nIGhhbmRsZXMgb3V0IHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuIENvdWxkIHdlIGRv
IGJldHRlcj8gSSB0aGluayB3ZSBjb3VsZDogSG93IGFib3V0IHVzaW5nIGEgaGFzaCB0YWJsZSBv
ZiBiYXNlIGFkZHJlc3NlcyB0byBncmFudCBtYXAgaGFuZGxlcz8gQWxzbywgdGhhdCBtZWFucyB0
aGUgdW5tYXAtcGFnZXMgZnVuY3Rpb24gb25seSBuZWVkIHRha2UgdGhlIGJhc2UgYWRkcmVzczsg
bm8gbmVlZCBmb3IgbnVtYmVyIG9mIHBhZ2VzIG9yIGhhbmRsZSBhcnJheS4gVGhhdCBtYWtlcyB0
aGUgZnVuY3Rpb25zIGxvb2sgZm9yIGxpa2UgYSBtYWxsb2MoKS9mcmVlKCkgcGFpciB3aGljaCBJ
IHRoaW5rIGlzIG5pY2VyLg0KDQo+ICsNCj4gK3R5cGVkZWYgTlRTVEFUVVMNCj4gKygqWEVOQlVT
X0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUykoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0UgICAgICAg
ICAgICAgIEludGVyZmFjZSwNCj4gKyAgICBJTiAgVVNIT1JUICAgICAgICAgICAgICAgICAgRG9t
YWluLA0KPiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywNCj4g
KyAgICBJTiAgUFVMT05HICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlcywNCj4gKyAgICBJTiAg
Qk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksDQo+ICsgICAgT1VUIFBIWVNJQ0FMX0FE
RFJFU1MgICAgICAgICpBZGRyZXNzLA0KPiArICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAgICAg
ICAqSGFuZGxlcw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcdHlwZWRlZiBYRU5CVVNfR05UVEFC
X1VOTUFQX0ZPUkVJR05fUEFHRVMNCj4gKyAgICBcYnJpZWYgVW5tYXAgZm9yZWlnbiBtZW1vcnkg
cGFnZXMgZnJvbSB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UNCj4gKw0KPiArICAgIFxwYXJhbSBJ
bnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXINCj4gKyAgICBccGFyYW0gTnVtYmVyUGFnZXMg
TnVtYmVyIG9mIHBhZ2VzIHRvIHVubWFwDQo+ICsgICAgXHBhcmFtIEFkZHJlc3MgVGhlIHBoeXNp
Y2FsIGFkZHJlc3MgdGhhdCB0aGUgZm9yZWlnbiBwYWdlcyBhcmUgbWFwcGVkDQo+IHVuZGVyDQo+
ICsgICAgXHBhcmFtIEhhbmRsZXMgQW4gYXJyYXkgb2YgdHJhY2tpbmcgbnVtYmVycyB0aGF0IHJl
cHJlc2VudCB0aGUgbWFwcGluZw0KPiArICovDQo+ICt0eXBlZGVmIE5UU1RBVFVTDQo+ICsoKlhF
TkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUykoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0Ug
ICAgICAgICAgICAgIEludGVyZmFjZSwNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgTnVtYmVyUGFnZXMsDQo+ICsgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJl
c3MsDQo+ICsgICAgSU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIEhhbmRsZXMNCj4gKyAgICAp
Ow0KPiArDQo+ICAvLyB7NzYzNjc5QzUtRTVDMi00QTZELThCODgtNkJCMDJFQzQyRDhFfQ0KPiAg
REVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRSwNCj4gIDB4NzYzNjc5YzUs
IDB4ZTVjMiwgMHg0YTZkLCAweDhiLCAweDg4LCAweDZiLCAweGIwLCAweDJlLCAweGM0LCAweDJk
LCAweDhlKTsNCj4gQEAgLTE4Miw3ICsyMjMsMjQgQEAgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lO
VEVSRkFDRV9WMSB7DQo+ICAgICAgWEVOQlVTX0dOVFRBQl9ERVNUUk9ZX0NBQ0hFICAgICAgICAg
R250dGFiRGVzdHJveUNhY2hlOw0KPiAgfTsNCj4gDQo+IC10eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X0dOVFRBQl9JTlRFUkZBQ0VfVjENCj4gWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0UsICpQWEVOQlVT
X0dOVFRBQl9JTlRFUkZBQ0U7DQo+ICsvKiEgXHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZB
Q0VfVjINCj4gKyAgICBcYnJpZWYgR05UVEFCIGludGVyZmFjZSB2ZXJzaW9uIDIgKGFkZGVkIG1h
cC91bm1hcCBmb3JlaWduIHBhZ2VzKQ0KPiArICAgIFxpbmdyb3VwIGludGVyZmFjZXMNCj4gKyAq
Lw0KPiArc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMiB7DQo+ICsgICAgSU5URVJG
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlOw0KPiArICAgIFhFTkJVU19H
TlRUQUJfQUNRVUlSRSAgICAgICAgICAgICAgIEdudHRhYkFjcXVpcmU7DQo+ICsgICAgWEVOQlVT
X0dOVFRBQl9SRUxFQVNFICAgICAgICAgICAgICAgR250dGFiUmVsZWFzZTsNCj4gKyAgICBYRU5C
VVNfR05UVEFCX0NSRUFURV9DQUNIRSAgICAgICAgICBHbnR0YWJDcmVhdGVDYWNoZTsNCj4gKyAg
ICBYRU5CVVNfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTUw0KPiBHbnR0YWJQZXJtaXRGb3Jl
aWduQWNjZXNzOw0KPiArICAgIFhFTkJVU19HTlRUQUJfUkVWT0tFX0ZPUkVJR05fQUNDRVNTDQo+
IEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3M7DQo+ICsgICAgWEVOQlVTX0dOVFRBQl9HRVRfUkVG
RVJFTkNFICAgICAgICAgR250dGFiR2V0UmVmZXJlbmNlOw0KPiArICAgIFhFTkJVU19HTlRUQUJf
REVTVFJPWV9DQUNIRSAgICAgICAgIEdudHRhYkRlc3Ryb3lDYWNoZTsNCj4gKyAgICBYRU5CVVNf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTICAgICBHbnR0YWJNYXBGb3JlaWduUGFnZXM7DQo+ICsg
ICAgWEVOQlVTX0dOVFRBQl9VTk1BUF9GT1JFSUdOX1BBR0VTDQo+IEdudHRhYlVubWFwRm9yZWln
blBhZ2VzOw0KPiArfTsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5U
RVJGQUNFX1YyDQo+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRUQUJfSU5U
RVJGQUNFOw0KPiANCj4gIC8qISBcZGVmIFhFTkJVU19HTlRUQUINCj4gICAgICBcYnJpZWYgTWFj
cm8gYXQgYXNzaXN0IGluIG1ldGhvZCBpbnZvY2F0aW9uDQo+IEBAIC0xOTMsNyArMjUxLDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YxDQo+IFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlQNCj4gICNlbmRpZiAgLy8gX1dJTkRMTA0KPiANCj4g
ICNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVkVSU0lPTl9NSU4gMQ0KPiAtI2RlZmlu
ZSBYRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WRVJTSU9OX01BWCAxDQo+ICsjZGVmaW5lIFhFTkJV
U19HTlRUQUJfSU5URVJGQUNFX1ZFUlNJT05fTUFYIDINCj4gDQo+ICAjZW5kaWYgIC8vIF9YRU5C
VVNfR05UVEFCX0lOVEVSRkFDRV9IDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4uaCBi
L2luY2x1ZGUveGVuLmgNCj4gaW5kZXggNjAwNzU4Mi4uMjNjN2FjMCAxMDA2NDQNCj4gLS0tIGEv
aW5jbHVkZS94ZW4uaA0KPiArKysgYi9pbmNsdWRlL3hlbi5oDQo+IEBAIC0yNTgsNiArMjU4LDI1
IEBAIEdyYW50VGFibGVDb3B5KA0KPiAgICAgIElOICBVTE9ORyAgICAgICAgICAgICAgIENvdW50
DQo+ICAgICAgKTsNCj4gDQo+ICtfX2NoZWNrUmV0dXJuDQo+ICtYRU5fQVBJDQo+ICtOVFNUQVRV
Uw0KPiArR3JhbnRUYWJsZU1hcEZvcmVpZ25QYWdlKA0KPiArICAgIElOICBVU0hPUlQgICAgICAg
ICAgICAgICAgICBEb21haW4sDQo+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgICAgIEdy
YW50UmVmLA0KPiArICAgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzLA0KPiAr
ICAgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBSZWFkT25seSwNCj4gKyAgICBPVVQgVUxP
TkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZQ0KPiArICAgICk7DQo+ICsNCj4gK19fY2hlY2tS
ZXR1cm4NCj4gK1hFTl9BUEkNCj4gK05UU1RBVFVTDQo+ICtHcmFudFRhYmxlVW5tYXBGb3JlaWdu
UGFnZSgNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KPiArICAg
IElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzDQo+ICsgICAgKTsNCj4gKw0KPiAg
Ly8gU0NIRUQNCj4gDQo+ICBfX2NoZWNrUmV0dXJuDQo+IGRpZmYgLS1naXQgYS9zcmMveGVuL2dy
YW50X3RhYmxlLmMgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMNCj4gaW5kZXggNmZhY2IzZi4uNjQ1
MDA2MiAxMDA2NDQNCj4gLS0tIGEvc3JjL3hlbi9ncmFudF90YWJsZS5jDQo+ICsrKyBiL3NyYy94
ZW4vZ3JhbnRfdGFibGUuYw0KPiBAQCAtMTMxLDMgKzEzMSw4OCBAQCBmYWlsMToNCj4gDQo+ICAg
ICAgcmV0dXJuIHN0YXR1czsNCj4gIH0NCj4gKw0KPiArX19jaGVja1JldHVybg0KPiArWEVOX0FQ
SQ0KPiArTlRTVEFUVVMNCj4gK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgNCj4gKyAgICBJTiAg
VVNIT1JUICAgICAgICAgICAgICAgICAgRG9tYWluLA0KPiArICAgIElOICBVTE9ORyAgICAgICAg
ICAgICAgICAgICBHcmFudFJlZiwNCj4gKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAg
QWRkcmVzcywNCj4gKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksDQo+
ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAgICpIYW5kbGUNCj4gKyAgICApDQo+ICt7
DQo+ICsgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmIG9wOw0KPiArICAgIExPTkdfUFRS
IHJjOw0KPiArICAgIE5UU1RBVFVTIHN0YXR1czsNCj4gKw0KPiArICAgIFJ0bFplcm9NZW1vcnko
Jm9wLCBzaXplb2Yob3ApKTsNCj4gKyAgICBvcC5kb20gPSBEb21haW47DQo+ICsgICAgb3AucmVm
ID0gR3JhbnRSZWY7DQo+ICsgICAgb3AuZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7DQo+ICsgICAg
aWYgKFJlYWRPbmx5KQ0KPiArICAgICAgICBvcC5mbGFncyB8PSBHTlRNQVBfcmVhZG9ubHk7DQo+
ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5RdWFkUGFydDsNCj4gKw0KPiArICAgIHJjID0g
R3JhbnRUYWJsZU9wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7DQo+ICsNCj4gKyAg
ICBpZiAocmMgPCAwKSB7DQo+ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7
DQo+ICsgICAgICAgIGdvdG8gZmFpbDE7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKG9wLnN0
YXR1cyAhPSBHTlRTVF9va2F5KSB7DQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NF
U1NGVUw7DQo+ICsgICAgICAgIGdvdG8gZmFpbDI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgKkhh
bmRsZSA9IG9wLmhhbmRsZTsNCj4gKw0KPiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsNCj4g
Kw0KPiArZmFpbDI6DQo+ICsgICAgRXJyb3IoImZhaWwyOiBvcC5zdGF0dXMgPSAlZFxuIiwgb3Au
c3RhdHVzKTsNCg0KSW4gZ2VuZXJhbCBJJ3ZlIHRyaWVkIHRvIGtlZXAgJ0Vycm9yJyBtZXNzYWdl
cyBvdGhlciB0aGFuICdmYWlsMTonICBwbGFpbi4gUmF0aGVyIHRoYW4ganVzdCBzZXR0aW5nIHN0
YXR1cyB0byB1bnN1Y2Nlc3NmdWwgYW5kIGxvZ2dpbmcgdGhlIHJhdyBncmFudCBzdGF0dXMgaGVy
ZSBpdCB3b3VsZCBiZSBuaWNlciB0byBoYXZlIGEgR05UU1RfVE9fU1RBVFVTKCkgbWFjcm8gdG8g
c2V0IHN0YXR1cyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgdGhlbiBqdXN0IGxvZyB0aGF0
IGluIHRoZSAnZmFpbDE6JyBiZWxvdy4NCg0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwx
ICglMDh4KVxuIiwgc3RhdHVzKTsNCj4gKw0KPiArICAgIHJldHVybiBzdGF0dXM7DQo+ICt9DQo+
ICsNCj4gK19fY2hlY2tSZXR1cm4NCj4gK1hFTl9BUEkNCj4gK05UU1RBVFVTDQo+ICtHcmFudFRh
YmxlVW5tYXBGb3JlaWduUGFnZSgNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAg
SGFuZGxlLA0KPiArICAgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzDQo+ICsg
ICAgKQ0KPiArew0KPiArICAgIHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9wOw0KPiAr
ICAgIExPTkdfUFRSIHJjOw0KPiArICAgIE5UU1RBVFVTIHN0YXR1czsNCj4gKw0KPiArICAgIFJ0
bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsNCj4gKyAgICBvcC5oYW5kbGUgPSBIYW5kbGU7
DQo+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5RdWFkUGFydDsNCj4gKw0KPiArICAgIHJj
ID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgJm9wLCAxKTsNCj4gKw0K
PiArICAgIGlmIChyYyA8IDApIHsNCj4gKyAgICAgICAgRVJSTk9fVE9fU1RBVFVTKC1yYywgc3Rh
dHVzKTsNCj4gKyAgICAgICAgZ290byBmYWlsMTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAo
b3Auc3RhdHVzICE9IEdOVFNUX29rYXkpIHsNCj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1VO
U1VDQ0VTU0ZVTDsNCj4gKyAgICAgICAgZ290byBmYWlsMjsNCj4gKyAgICB9DQo+ICsNCj4gKyAg
ICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7DQo+ICsNCj4gK2ZhaWwyOg0KPiArICAgIEVycm9yKCJv
cC5zdGF0dXMgPSAlZFxuIiwgb3Auc3RhdHVzKTsNCg0KU2FtZSBoZXJlLg0KDQo+ICtmYWlsMToN
Cj4gKyAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOw0KPiArDQo+ICsgICAgcmV0
dXJuIHN0YXR1czsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvZ250dGFiLmMgYi9z
cmMveGVuYnVzL2dudHRhYi5jDQo+IGluZGV4IDE2NWUzOGYuLjI0ZDQ1YWYgMTAwNjQ0DQo+IC0t
LSBhL3NyYy94ZW5idXMvZ250dGFiLmMNCj4gKysrIGIvc3JjL3hlbmJ1cy9nbnR0YWIuYw0KPiBA
QCAtNTM0LDYgKzUzNCw5MCBAQCBHbnR0YWJHZXRSZWZlcmVuY2UoDQo+ICAgICAgcmV0dXJuIChV
TE9ORylFbnRyeS0+UmVmZXJlbmNlOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBOVFNUQVRVUw0KPiAr
R250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQSU5URVJGQUNFICAgICAgICAgICAg
ICBJbnRlcmZhY2UsDQo+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwN
Cj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsDQo+ICsgICAg
SU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsDQo+ICsgICAgSU4gIEJPT0xF
QU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LA0KPiArICAgIE9VVCBQSFlTSUNBTF9BRERSRVNT
ICAgICAgICAqQWRkcmVzcywNCj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhh
bmRsZXMNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAg
IHN0YXR1czsNCj4gKyAgICBQWEVOQlVTX0dOVFRBQl9DT05URVhUICAgICAgQ29udGV4dCA9IElu
dGVyZmFjZS0+Q29udGV4dDsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgUGFn
ZUluZGV4Ow0KPiArICAgIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICBQYWdlQWRkcmVzczsN
Cj4gKw0KPiArICAgIHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFjZShDb250ZXh0LT5GZG8sIE51
bWJlclBhZ2VzICogUEFHRV9TSVpFLA0KPiBBZGRyZXNzKTsNCj4gKyAgICBpZiAoIU5UX1NVQ0NF
U1Moc3RhdHVzKSkNCj4gKyAgICAgICAgZ290byBmYWlsMTsNCj4gKw0KPiArICAgIFBhZ2VBZGRy
ZXNzLlF1YWRQYXJ0ID0gQWRkcmVzcy0+UXVhZFBhcnQ7DQo+ICsNCj4gKyAgICBmb3IgKFBhZ2VJ
bmRleCA9IDA7IFBhZ2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgrKykgew0KPiArICAg
ICAgICBzdGF0dXMgPSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdlSW5kZXhd
LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJl
c3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25s
eSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSGFuZGxl
c1tQYWdlSW5kZXhdKSk7DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAr
ICAgICAgICAgICAgZ290byBmYWlsMjsNCj4gKw0KPiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFk
UGFydCArPSBQQUdFX1NJWkU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIFNUQVRVU19T
VUNDRVNTOw0KPiArDQo+ICtmYWlsMjoNCj4gKyAgICBFcnJvcigiZmFpbDI6IFBhZ2VJbmRleCAl
bHUsIFBhZ2VBZGRyZXNzICVwLCBIYW5kbGUgJWx1XG4iLCBQYWdlSW5kZXgsDQo+IFBhZ2VBZGRy
ZXNzLlF1YWRQYXJ0LCBIYW5kbGVzW1BhZ2VJbmRleF0pOw0KPiArDQo+ICsgICAgd2hpbGUgKFBh
Z2VJbmRleCA+IDApIHsNCj4gKyAgICAgICAgLS1QYWdlSW5kZXg7DQo+ICsgICAgICAgIFBhZ2VB
ZGRyZXNzLlF1YWRQYXJ0IC09IFBBR0VfU0laRTsNCj4gKw0KPiBBU1NFUlQoTlRfU1VDQ0VTUyhH
cmFudFRhYmxlVW5tYXBGb3JlaWduUGFnZShIYW5kbGVzW1BhZ2VJbmRleF0sDQo+IFBhZ2VBZGRy
ZXNzKSkpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEZkb0ZyZWVJb1NwYWNlKENvbnRleHQtPkZk
bywgKkFkZHJlc3MsIE51bWJlclBhZ2VzICogUEFHRV9TSVpFKTsNCj4gKw0KPiArZmFpbDE6DQo+
ICsgICAgRXJyb3IoImZhaWwxOiAoJTA4eClcbiIsIHN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIHN0
YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIE5UU1RBVFVTDQo+ICtHbnR0YWJVbm1hcEZvcmVp
Z25QYWdlcygNCj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNlLA0K
PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywNCj4gKyAgICBJ
TiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywNCj4gKyAgICBJTiAgUFVMT05HICAg
ICAgICAgICAgICAgICAgSGFuZGxlcw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBOVFNUQVRVUyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiArICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQg
ICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250ZXh0Ow0KPiArICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgICAgICBQYWdlSW5kZXg7DQo+ICsgICAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAg
ICAgIFBhZ2VBZGRyZXNzOw0KPiArDQo+ICsgICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgPSBBZGRy
ZXNzLlF1YWRQYXJ0Ow0KPiArDQo+ICsgICAgZm9yIChQYWdlSW5kZXggPSAwOyBQYWdlSW5kZXgg
PCBOdW1iZXJQYWdlczsgUGFnZUluZGV4KyspIHsNCj4gKyAgICAgICAgc3RhdHVzID0gR3JhbnRU
YWJsZVVubWFwRm9yZWlnblBhZ2UoSGFuZGxlc1tQYWdlSW5kZXhdLA0KPiBQYWdlQWRkcmVzcyk7
DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICAgICAgZ290
byBmYWlsMTsNCj4gKw0KPiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdFX1NJ
WkU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRmRvRnJlZUlvU3BhY2UoQ29udGV4dC0+RmRvLCBB
ZGRyZXNzLCBOdW1iZXJQYWdlcyAqIFBBR0VfU0laRSk7DQo+ICsgICAgcmV0dXJuIFNUQVRVU19T
VUNDRVNTOw0KPiArDQo+ICtmYWlsMToNCj4gKyAgICBFcnJvcigiZmFpbDE6ICglMDh4KSwgbGVh
a2luZyBtZW1vcnkgYXQgJXAsIHNpemUgMHglbHguIFBhZ2VJbmRleCA9ICVsdSwNCj4gUGFnZUFk
ZHJlc3MgPSAlcCwgSGFuZGxlID0gJWx1XG4iLA0KPiArICAgICAgICAgIHN0YXR1cywgQWRkcmVz
cy5RdWFkUGFydCwgTnVtYmVyUGFnZXMgKiBQQUdFX1NJWkUsIFBhZ2VJbmRleCwNCj4gUGFnZUFk
ZHJlc3MuUXVhZFBhcnQsIEhhbmRsZXNbUGFnZUluZGV4XSk7DQoNCkhtbS4gV2hhdCBkbyB3ZSB3
YW50IHRvIGRvIG9uIGFuIHVubWFwIGZhaWx1cmU/IEkgc3VzcGVjdCBzdWNoIGEgZmFpbHVyZSBw
cm9iYWJseSBtZWFucyBzb21ldGhpbmcgaGFzIGdvbmUgcHJldHR5IGRpc2FzdHJvdXNseSB3cm9u
ZyBzb21ld2hlcmUuIFdlIHNob3VsZCBwcm9iYWJseSBidWdjaGVjayBhbmQgbGV0IFhlbiBjbGVh
biB1cCwgb3RoZXJ3aXNlIHdlJ3JlIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYW5vdGhlciBkb21h
aW4gZnJvbSBkeWluZy4NCg0KICBQYXVsDQoNCj4gKyAgICByZXR1cm4gc3RhdHVzOw0KPiArfQ0K
PiArDQo+ICBzdGF0aWMgVk9JRA0KPiAgR250dGFiU3VzcGVuZENhbGxiYWNrRWFybHkoDQo+ICAg
ICAgSU4gIFBWT0lEICAgICAgICAgICAgICAgQXJndW1lbnQNCj4gQEAgLTc4OSw2ICs4NzMsMTkg
QEAgc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjENCj4gR250dGFiSW50
ZXJmYWNlVmVyc2lvbjEgPSB7DQo+ICAgICAgR250dGFiRGVzdHJveUNhY2hlDQo+ICB9Ow0KPiAN
Cj4gK3N0YXRpYyBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyICAgR250dGFiSW50
ZXJmYWNlVmVyc2lvbjIgPQ0KPiB7DQo+ICsgICAgeyBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WMiksIDIsIE5VTEwsIE5VTEwsIE5VTEwNCj4gfSwNCj4gKyAgICBHbnR0
YWJBY3F1aXJlLA0KPiArICAgIEdudHRhYlJlbGVhc2UsDQo+ICsgICAgR250dGFiQ3JlYXRlQ2Fj
aGUsDQo+ICsgICAgR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzcywNCj4gKyAgICBHbnR0YWJSZXZv
a2VGb3JlaWduQWNjZXNzLA0KPiArICAgIEdudHRhYkdldFJlZmVyZW5jZSwNCj4gKyAgICBHbnR0
YWJEZXN0cm95Q2FjaGUsDQo+ICsgICAgR250dGFiTWFwRm9yZWlnblBhZ2VzLA0KPiArICAgIEdu
dHRhYlVubWFwRm9yZWlnblBhZ2VzDQo+ICt9Ow0KPiArDQo+ICBOVFNUQVRVUw0KPiAgR250dGFi
SW5pdGlhbGl6ZSgNCj4gICAgICBJTiAgUFhFTkJVU19GRE8gICAgICAgICAgICAgRmRvLA0KPiBA
QCAtODc4LDYgKzk3NSwyMyBAQCBHbnR0YWJHZXRJbnRlcmZhY2UoDQo+ICAgICAgICAgIHN0YXR1
cyA9IFNUQVRVU19TVUNDRVNTOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICB9DQo+ICsgICAg
Y2FzZSAyOiB7DQo+ICsgICAgICAgIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIg
ICpHbnR0YWJJbnRlcmZhY2U7DQo+ICsNCj4gKyAgICAgICAgR250dGFiSW50ZXJmYWNlID0gKHN0
cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjINCj4gKilJbnRlcmZhY2U7DQo+ICsNCj4g
KyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9PVkVSRkxPVzsNCj4gKyAgICAgICAgaWYg
KFNpemUgPCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMikpDQo+ICsg
ICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICAqR250dGFiSW50ZXJmYWNlID0gR250
dGFiSW50ZXJmYWNlVmVyc2lvbjI7DQo+ICsNCj4gKyAgICAgICAgQVNTRVJUM1UoSW50ZXJmYWNl
LT5WZXJzaW9uLCA9PSwgVmVyc2lvbik7DQo+ICsgICAgICAgIEludGVyZmFjZS0+Q29udGV4dCA9
IENvbnRleHQ7DQo+ICsNCj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7DQo+ICsg
ICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gICAgICBkZWZhdWx0Og0KPiAgICAgICAgICBzdGF0
dXMgPSBTVEFUVVNfTk9UX1NVUFBPUlRFRDsNCj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2
ZWwgbWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBo
dHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1w
di1kZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
d2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93
aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 08:58:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 08:58:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXmpa-0002Xj-S8; Fri, 04 Sep 2015 08:58:46 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXmpZ-0002XS-Hn
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 08:58:45 +0000
Received: from [193.109.254.147] by server-13.bemta-14.messagelabs.com id
	2B/1E-12371-44D59E55; Fri, 04 Sep 2015 08:58:44 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1441357123!14417035!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21426 invoked from network); 4 Sep 2015 08:58:43 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 08:58:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2455820"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ31F+/j0j99Sl5ky47zllSFi+KZ4sG9uQ
Date: Fri, 4 Sep 2015 08:58:42 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
References: <55DC94C9.2080606@invisiblethingslab.com>
In-Reply-To: <55DC94C9.2080606@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMS8yXSBBZGQgZm9yZWlnbiBw
YWdlIG1hcHBpbmcgZnVuY3Rpb25zIHRvDQo+IHRoZSBHTlRUQUIgaW50ZXJmYWNlDQo+IA0KPiBH
TlRUQUIgaW50ZXJmYWNlIG5vdyBpbmNsdWRlcyBmdW5jdGlvbnMgdG8gbWFwIGFuZCB1bm1hcCBt
ZW1vcnkgcGFnZXMNCj4gZ3JhbnRlZCBieSBhIGZvcmVpZ24gZG9tYWluLiBUaGUgcGFnZShzKSBh
cmUgbWFwcGVkIHVuZGVyIGFuIGFkZHJlc3MNCj4gYWxsb2NhdGVkIGZyb20gdGhlIFBDSSBCQVIg
c3BhY2UuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgV29qZHnFgmEgPG9tZWdAaW52aXNp
YmxldGhpbmdzbGFiLmNvbT4NCj4gLS0tDQo+ICBpbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCB8
ICA2MiArKysrKysrKysrKysrKysrKysrKysrKy0NCj4gIGluY2x1ZGUveGVuLmggICAgICAgICAg
ICAgIHwgIDE5ICsrKysrKysrDQo+ICBzcmMveGVuL2dyYW50X3RhYmxlLmMgICAgICB8ICA4NSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIHNyYy94ZW5idXMvZ250dGFiLmMg
ICAgICAgIHwgMTE0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKw0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyNzggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo
LSkNCj4gDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBiL2luY2x1
ZGUvZ250dGFiX2ludGVyZmFjZS5oDQo+IGluZGV4IGQyOTQ0MGEuLjAwMTY4ODggMTAwNjQ0DQo+
IC0tLSBhL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oDQo+ICsrKyBiL2luY2x1ZGUvZ250dGFi
X2ludGVyZmFjZS5oDQo+IEBAIC0xNjMsNiArMTYzLDQ3IEBAIHR5cGVkZWYgVk9JRA0KPiAgICAg
IElOICBQWEVOQlVTX0dOVFRBQl9DQUNIRSAgICBDYWNoZQ0KPiAgICAgICk7DQo+IA0KPiArLyoh
IFx0eXBlZGVmIFhFTkJVU19HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVMNCj4gKyAgICBcYnJpZWYg
TWFwIGZvcmVpZ24gbWVtb3J5IHBhZ2VzIGludG8gdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlDQo+
ICsNCj4gKyAgICBccGFyYW0gSW50ZXJmYWNlIFRoZSBpbnRlcmZhY2UgaGVhZGVyDQo+ICsgICAg
XHBhcmFtIERvbWFpbiBUaGUgZG9taWQgb2YgdGhlIGZvcmVpZ24gZG9tYWluIHRoYXQgZ3JhbnRl
ZCB0aGUgcGFnZXMNCj4gKyAgICBccGFyYW0gTnVtYmVyUGFnZXMgTnVtYmVyIG9mIHBhZ2VzIHRv
IG1hcA0KPiArICAgIFxwYXJhbSBSZWZlcmVuY2VzIEFycmF5IG9mIGdyYW50IHJlZmVyZW5jZSBu
dW1iZXJzIHNoYXJlZCBieSB0aGUNCj4gZm9yZWlnbiBkb21haW4NCj4gKyAgICBccGFyYW0gUmVh
ZE9ubHkgSWYgVFJVRSwgcGFnZXMgYXJlIG1hcHBlZCB3aXRoIHJlYWQtb25seSBhY2Nlc3MNCj4g
KyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0aGF0IHRoZSBmb3JlaWdu
IHBhZ2VzIGFyZSBtYXBwZWQNCj4gdW5kZXINCj4gKyAgICAoYWxsb2NhdGVkIGZyb20gdGhlIFBD
SSBJTyBzcGFjZSkNCg0KVGhleSBuZWVkIG5vdCBiZSAtIHdlIGNvdWxkIGRlY3JlYXNlX3Jlc2Vy
dmF0aW9uIG91dCBzb21lIFJBTSAtIHNvIEknZCBzZWUgdGhpcyBhcyBhbiBpbXBsZW1lbnRhdGlv
biBkZXRhaWwgcmF0aGVyIHRoYW4gc29tZXRoaW5nIHRvIGJlIGRvY3VtZW50ZWQgaW4gdGhlIGlu
dGVyZmFjZS4NCg0KPiArICAgIFxwYXJhbSBIYW5kbGVzIEFuIGFycmF5IG9mIHRyYWNraW5nIG51
bWJlcnMgdGhhdCByZXByZXNlbnQgdGhlIG1hcHBpbmcNCj4gKyAgICBvZiBlYWNoIGluZGl2aWR1
YWwgcGFnZQ0KPiArICovDQoNCkl0J3Mga2luZCBvZiB1Z2x5IHRvIGV4cG9zZSBYZW4ncyBncmFu
dCBtYXBwaW5nIGhhbmRsZXMgb3V0IHRocm91Z2ggdGhpcyBpbnRlcmZhY2UuIENvdWxkIHdlIGRv
IGJldHRlcj8gSSB0aGluayB3ZSBjb3VsZDogSG93IGFib3V0IHVzaW5nIGEgaGFzaCB0YWJsZSBv
ZiBiYXNlIGFkZHJlc3NlcyB0byBncmFudCBtYXAgaGFuZGxlcz8gQWxzbywgdGhhdCBtZWFucyB0
aGUgdW5tYXAtcGFnZXMgZnVuY3Rpb24gb25seSBuZWVkIHRha2UgdGhlIGJhc2UgYWRkcmVzczsg
bm8gbmVlZCBmb3IgbnVtYmVyIG9mIHBhZ2VzIG9yIGhhbmRsZSBhcnJheS4gVGhhdCBtYWtlcyB0
aGUgZnVuY3Rpb25zIGxvb2sgZm9yIGxpa2UgYSBtYWxsb2MoKS9mcmVlKCkgcGFpciB3aGljaCBJ
IHRoaW5rIGlzIG5pY2VyLg0KDQo+ICsNCj4gK3R5cGVkZWYgTlRTVEFUVVMNCj4gKygqWEVOQlVT
X0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUykoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0UgICAgICAg
ICAgICAgIEludGVyZmFjZSwNCj4gKyAgICBJTiAgVVNIT1JUICAgICAgICAgICAgICAgICAgRG9t
YWluLA0KPiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywNCj4g
KyAgICBJTiAgUFVMT05HICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlcywNCj4gKyAgICBJTiAg
Qk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksDQo+ICsgICAgT1VUIFBIWVNJQ0FMX0FE
RFJFU1MgICAgICAgICpBZGRyZXNzLA0KPiArICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAgICAg
ICAqSGFuZGxlcw0KPiArICAgICk7DQo+ICsNCj4gKy8qISBcdHlwZWRlZiBYRU5CVVNfR05UVEFC
X1VOTUFQX0ZPUkVJR05fUEFHRVMNCj4gKyAgICBcYnJpZWYgVW5tYXAgZm9yZWlnbiBtZW1vcnkg
cGFnZXMgZnJvbSB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UNCj4gKw0KPiArICAgIFxwYXJhbSBJ
bnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXINCj4gKyAgICBccGFyYW0gTnVtYmVyUGFnZXMg
TnVtYmVyIG9mIHBhZ2VzIHRvIHVubWFwDQo+ICsgICAgXHBhcmFtIEFkZHJlc3MgVGhlIHBoeXNp
Y2FsIGFkZHJlc3MgdGhhdCB0aGUgZm9yZWlnbiBwYWdlcyBhcmUgbWFwcGVkDQo+IHVuZGVyDQo+
ICsgICAgXHBhcmFtIEhhbmRsZXMgQW4gYXJyYXkgb2YgdHJhY2tpbmcgbnVtYmVycyB0aGF0IHJl
cHJlc2VudCB0aGUgbWFwcGluZw0KPiArICovDQo+ICt0eXBlZGVmIE5UU1RBVFVTDQo+ICsoKlhF
TkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUykoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0Ug
ICAgICAgICAgICAgIEludGVyZmFjZSwNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAg
ICAgTnVtYmVyUGFnZXMsDQo+ICsgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJl
c3MsDQo+ICsgICAgSU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIEhhbmRsZXMNCj4gKyAgICAp
Ow0KPiArDQo+ICAvLyB7NzYzNjc5QzUtRTVDMi00QTZELThCODgtNkJCMDJFQzQyRDhFfQ0KPiAg
REVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRSwNCj4gIDB4NzYzNjc5YzUs
IDB4ZTVjMiwgMHg0YTZkLCAweDhiLCAweDg4LCAweDZiLCAweGIwLCAweDJlLCAweGM0LCAweDJk
LCAweDhlKTsNCj4gQEAgLTE4Miw3ICsyMjMsMjQgQEAgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lO
VEVSRkFDRV9WMSB7DQo+ICAgICAgWEVOQlVTX0dOVFRBQl9ERVNUUk9ZX0NBQ0hFICAgICAgICAg
R250dGFiRGVzdHJveUNhY2hlOw0KPiAgfTsNCj4gDQo+IC10eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X0dOVFRBQl9JTlRFUkZBQ0VfVjENCj4gWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0UsICpQWEVOQlVT
X0dOVFRBQl9JTlRFUkZBQ0U7DQo+ICsvKiEgXHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZB
Q0VfVjINCj4gKyAgICBcYnJpZWYgR05UVEFCIGludGVyZmFjZSB2ZXJzaW9uIDIgKGFkZGVkIG1h
cC91bm1hcCBmb3JlaWduIHBhZ2VzKQ0KPiArICAgIFxpbmdyb3VwIGludGVyZmFjZXMNCj4gKyAq
Lw0KPiArc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMiB7DQo+ICsgICAgSU5URVJG
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlOw0KPiArICAgIFhFTkJVU19H
TlRUQUJfQUNRVUlSRSAgICAgICAgICAgICAgIEdudHRhYkFjcXVpcmU7DQo+ICsgICAgWEVOQlVT
X0dOVFRBQl9SRUxFQVNFICAgICAgICAgICAgICAgR250dGFiUmVsZWFzZTsNCj4gKyAgICBYRU5C
VVNfR05UVEFCX0NSRUFURV9DQUNIRSAgICAgICAgICBHbnR0YWJDcmVhdGVDYWNoZTsNCj4gKyAg
ICBYRU5CVVNfR05UVEFCX1BFUk1JVF9GT1JFSUdOX0FDQ0VTUw0KPiBHbnR0YWJQZXJtaXRGb3Jl
aWduQWNjZXNzOw0KPiArICAgIFhFTkJVU19HTlRUQUJfUkVWT0tFX0ZPUkVJR05fQUNDRVNTDQo+
IEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3M7DQo+ICsgICAgWEVOQlVTX0dOVFRBQl9HRVRfUkVG
RVJFTkNFICAgICAgICAgR250dGFiR2V0UmVmZXJlbmNlOw0KPiArICAgIFhFTkJVU19HTlRUQUJf
REVTVFJPWV9DQUNIRSAgICAgICAgIEdudHRhYkRlc3Ryb3lDYWNoZTsNCj4gKyAgICBYRU5CVVNf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTICAgICBHbnR0YWJNYXBGb3JlaWduUGFnZXM7DQo+ICsg
ICAgWEVOQlVTX0dOVFRBQl9VTk1BUF9GT1JFSUdOX1BBR0VTDQo+IEdudHRhYlVubWFwRm9yZWln
blBhZ2VzOw0KPiArfTsNCj4gKw0KPiArdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5U
RVJGQUNFX1YyDQo+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRUQUJfSU5U
RVJGQUNFOw0KPiANCj4gIC8qISBcZGVmIFhFTkJVU19HTlRUQUINCj4gICAgICBcYnJpZWYgTWFj
cm8gYXQgYXNzaXN0IGluIG1ldGhvZCBpbnZvY2F0aW9uDQo+IEBAIC0xOTMsNyArMjUxLDcgQEAg
dHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YxDQo+IFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlQNCj4gICNlbmRpZiAgLy8gX1dJTkRMTA0KPiANCj4g
ICNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVkVSU0lPTl9NSU4gMQ0KPiAtI2RlZmlu
ZSBYRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WRVJTSU9OX01BWCAxDQo+ICsjZGVmaW5lIFhFTkJV
U19HTlRUQUJfSU5URVJGQUNFX1ZFUlNJT05fTUFYIDINCj4gDQo+ICAjZW5kaWYgIC8vIF9YRU5C
VVNfR05UVEFCX0lOVEVSRkFDRV9IDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4uaCBi
L2luY2x1ZGUveGVuLmgNCj4gaW5kZXggNjAwNzU4Mi4uMjNjN2FjMCAxMDA2NDQNCj4gLS0tIGEv
aW5jbHVkZS94ZW4uaA0KPiArKysgYi9pbmNsdWRlL3hlbi5oDQo+IEBAIC0yNTgsNiArMjU4LDI1
IEBAIEdyYW50VGFibGVDb3B5KA0KPiAgICAgIElOICBVTE9ORyAgICAgICAgICAgICAgIENvdW50
DQo+ICAgICAgKTsNCj4gDQo+ICtfX2NoZWNrUmV0dXJuDQo+ICtYRU5fQVBJDQo+ICtOVFNUQVRV
Uw0KPiArR3JhbnRUYWJsZU1hcEZvcmVpZ25QYWdlKA0KPiArICAgIElOICBVU0hPUlQgICAgICAg
ICAgICAgICAgICBEb21haW4sDQo+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgICAgIEdy
YW50UmVmLA0KPiArICAgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzLA0KPiAr
ICAgIElOICBCT09MRUFOICAgICAgICAgICAgICAgICBSZWFkT25seSwNCj4gKyAgICBPVVQgVUxP
TkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZQ0KPiArICAgICk7DQo+ICsNCj4gK19fY2hlY2tS
ZXR1cm4NCj4gK1hFTl9BUEkNCj4gK05UU1RBVFVTDQo+ICtHcmFudFRhYmxlVW5tYXBGb3JlaWdu
UGFnZSgNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgSGFuZGxlLA0KPiArICAg
IElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzDQo+ICsgICAgKTsNCj4gKw0KPiAg
Ly8gU0NIRUQNCj4gDQo+ICBfX2NoZWNrUmV0dXJuDQo+IGRpZmYgLS1naXQgYS9zcmMveGVuL2dy
YW50X3RhYmxlLmMgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMNCj4gaW5kZXggNmZhY2IzZi4uNjQ1
MDA2MiAxMDA2NDQNCj4gLS0tIGEvc3JjL3hlbi9ncmFudF90YWJsZS5jDQo+ICsrKyBiL3NyYy94
ZW4vZ3JhbnRfdGFibGUuYw0KPiBAQCAtMTMxLDMgKzEzMSw4OCBAQCBmYWlsMToNCj4gDQo+ICAg
ICAgcmV0dXJuIHN0YXR1czsNCj4gIH0NCj4gKw0KPiArX19jaGVja1JldHVybg0KPiArWEVOX0FQ
SQ0KPiArTlRTVEFUVVMNCj4gK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgNCj4gKyAgICBJTiAg
VVNIT1JUICAgICAgICAgICAgICAgICAgRG9tYWluLA0KPiArICAgIElOICBVTE9ORyAgICAgICAg
ICAgICAgICAgICBHcmFudFJlZiwNCj4gKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAg
QWRkcmVzcywNCj4gKyAgICBJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksDQo+
ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAgICpIYW5kbGUNCj4gKyAgICApDQo+ICt7
DQo+ICsgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmIG9wOw0KPiArICAgIExPTkdfUFRS
IHJjOw0KPiArICAgIE5UU1RBVFVTIHN0YXR1czsNCj4gKw0KPiArICAgIFJ0bFplcm9NZW1vcnko
Jm9wLCBzaXplb2Yob3ApKTsNCj4gKyAgICBvcC5kb20gPSBEb21haW47DQo+ICsgICAgb3AucmVm
ID0gR3JhbnRSZWY7DQo+ICsgICAgb3AuZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7DQo+ICsgICAg
aWYgKFJlYWRPbmx5KQ0KPiArICAgICAgICBvcC5mbGFncyB8PSBHTlRNQVBfcmVhZG9ubHk7DQo+
ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5RdWFkUGFydDsNCj4gKw0KPiArICAgIHJjID0g
R3JhbnRUYWJsZU9wKEdOVFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7DQo+ICsNCj4gKyAg
ICBpZiAocmMgPCAwKSB7DQo+ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7
DQo+ICsgICAgICAgIGdvdG8gZmFpbDE7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgaWYgKG9wLnN0
YXR1cyAhPSBHTlRTVF9va2F5KSB7DQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NF
U1NGVUw7DQo+ICsgICAgICAgIGdvdG8gZmFpbDI7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgKkhh
bmRsZSA9IG9wLmhhbmRsZTsNCj4gKw0KPiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsNCj4g
Kw0KPiArZmFpbDI6DQo+ICsgICAgRXJyb3IoImZhaWwyOiBvcC5zdGF0dXMgPSAlZFxuIiwgb3Au
c3RhdHVzKTsNCg0KSW4gZ2VuZXJhbCBJJ3ZlIHRyaWVkIHRvIGtlZXAgJ0Vycm9yJyBtZXNzYWdl
cyBvdGhlciB0aGFuICdmYWlsMTonICBwbGFpbi4gUmF0aGVyIHRoYW4ganVzdCBzZXR0aW5nIHN0
YXR1cyB0byB1bnN1Y2Nlc3NmdWwgYW5kIGxvZ2dpbmcgdGhlIHJhdyBncmFudCBzdGF0dXMgaGVy
ZSBpdCB3b3VsZCBiZSBuaWNlciB0byBoYXZlIGEgR05UU1RfVE9fU1RBVFVTKCkgbWFjcm8gdG8g
c2V0IHN0YXR1cyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgdGhlbiBqdXN0IGxvZyB0aGF0
IGluIHRoZSAnZmFpbDE6JyBiZWxvdy4NCg0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwx
ICglMDh4KVxuIiwgc3RhdHVzKTsNCj4gKw0KPiArICAgIHJldHVybiBzdGF0dXM7DQo+ICt9DQo+
ICsNCj4gK19fY2hlY2tSZXR1cm4NCj4gK1hFTl9BUEkNCj4gK05UU1RBVFVTDQo+ICtHcmFudFRh
YmxlVW5tYXBGb3JlaWduUGFnZSgNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAg
SGFuZGxlLA0KPiArICAgIElOICBQSFlTSUNBTF9BRERSRVNTICAgICAgICBBZGRyZXNzDQo+ICsg
ICAgKQ0KPiArew0KPiArICAgIHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9wOw0KPiAr
ICAgIExPTkdfUFRSIHJjOw0KPiArICAgIE5UU1RBVFVTIHN0YXR1czsNCj4gKw0KPiArICAgIFJ0
bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsNCj4gKyAgICBvcC5oYW5kbGUgPSBIYW5kbGU7
DQo+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5RdWFkUGFydDsNCj4gKw0KPiArICAgIHJj
ID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgJm9wLCAxKTsNCj4gKw0K
PiArICAgIGlmIChyYyA8IDApIHsNCj4gKyAgICAgICAgRVJSTk9fVE9fU1RBVFVTKC1yYywgc3Rh
dHVzKTsNCj4gKyAgICAgICAgZ290byBmYWlsMTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAo
b3Auc3RhdHVzICE9IEdOVFNUX29rYXkpIHsNCj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1VO
U1VDQ0VTU0ZVTDsNCj4gKyAgICAgICAgZ290byBmYWlsMjsNCj4gKyAgICB9DQo+ICsNCj4gKyAg
ICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7DQo+ICsNCj4gK2ZhaWwyOg0KPiArICAgIEVycm9yKCJv
cC5zdGF0dXMgPSAlZFxuIiwgb3Auc3RhdHVzKTsNCg0KU2FtZSBoZXJlLg0KDQo+ICtmYWlsMToN
Cj4gKyAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOw0KPiArDQo+ICsgICAgcmV0
dXJuIHN0YXR1czsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvZ250dGFiLmMgYi9z
cmMveGVuYnVzL2dudHRhYi5jDQo+IGluZGV4IDE2NWUzOGYuLjI0ZDQ1YWYgMTAwNjQ0DQo+IC0t
LSBhL3NyYy94ZW5idXMvZ250dGFiLmMNCj4gKysrIGIvc3JjL3hlbmJ1cy9nbnR0YWIuYw0KPiBA
QCAtNTM0LDYgKzUzNCw5MCBAQCBHbnR0YWJHZXRSZWZlcmVuY2UoDQo+ICAgICAgcmV0dXJuIChV
TE9ORylFbnRyeS0+UmVmZXJlbmNlOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBOVFNUQVRVUw0KPiAr
R250dGFiTWFwRm9yZWlnblBhZ2VzKA0KPiArICAgIElOICBQSU5URVJGQUNFICAgICAgICAgICAg
ICBJbnRlcmZhY2UsDQo+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwN
Cj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsDQo+ICsgICAg
SU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsDQo+ICsgICAgSU4gIEJPT0xF
QU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LA0KPiArICAgIE9VVCBQSFlTSUNBTF9BRERSRVNT
ICAgICAgICAqQWRkcmVzcywNCj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhh
bmRsZXMNCj4gKyAgICApDQo+ICt7DQo+ICsgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAg
IHN0YXR1czsNCj4gKyAgICBQWEVOQlVTX0dOVFRBQl9DT05URVhUICAgICAgQ29udGV4dCA9IElu
dGVyZmFjZS0+Q29udGV4dDsNCj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgUGFn
ZUluZGV4Ow0KPiArICAgIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICBQYWdlQWRkcmVzczsN
Cj4gKw0KPiArICAgIHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFjZShDb250ZXh0LT5GZG8sIE51
bWJlclBhZ2VzICogUEFHRV9TSVpFLA0KPiBBZGRyZXNzKTsNCj4gKyAgICBpZiAoIU5UX1NVQ0NF
U1Moc3RhdHVzKSkNCj4gKyAgICAgICAgZ290byBmYWlsMTsNCj4gKw0KPiArICAgIFBhZ2VBZGRy
ZXNzLlF1YWRQYXJ0ID0gQWRkcmVzcy0+UXVhZFBhcnQ7DQo+ICsNCj4gKyAgICBmb3IgKFBhZ2VJ
bmRleCA9IDA7IFBhZ2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgrKykgew0KPiArICAg
ICAgICBzdGF0dXMgPSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLA0KPiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdlSW5kZXhd
LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJl
c3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25s
eSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSGFuZGxl
c1tQYWdlSW5kZXhdKSk7DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiAr
ICAgICAgICAgICAgZ290byBmYWlsMjsNCj4gKw0KPiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFk
UGFydCArPSBQQUdFX1NJWkU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgcmV0dXJuIFNUQVRVU19T
VUNDRVNTOw0KPiArDQo+ICtmYWlsMjoNCj4gKyAgICBFcnJvcigiZmFpbDI6IFBhZ2VJbmRleCAl
bHUsIFBhZ2VBZGRyZXNzICVwLCBIYW5kbGUgJWx1XG4iLCBQYWdlSW5kZXgsDQo+IFBhZ2VBZGRy
ZXNzLlF1YWRQYXJ0LCBIYW5kbGVzW1BhZ2VJbmRleF0pOw0KPiArDQo+ICsgICAgd2hpbGUgKFBh
Z2VJbmRleCA+IDApIHsNCj4gKyAgICAgICAgLS1QYWdlSW5kZXg7DQo+ICsgICAgICAgIFBhZ2VB
ZGRyZXNzLlF1YWRQYXJ0IC09IFBBR0VfU0laRTsNCj4gKw0KPiBBU1NFUlQoTlRfU1VDQ0VTUyhH
cmFudFRhYmxlVW5tYXBGb3JlaWduUGFnZShIYW5kbGVzW1BhZ2VJbmRleF0sDQo+IFBhZ2VBZGRy
ZXNzKSkpOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEZkb0ZyZWVJb1NwYWNlKENvbnRleHQtPkZk
bywgKkFkZHJlc3MsIE51bWJlclBhZ2VzICogUEFHRV9TSVpFKTsNCj4gKw0KPiArZmFpbDE6DQo+
ICsgICAgRXJyb3IoImZhaWwxOiAoJTA4eClcbiIsIHN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIHN0
YXR1czsNCj4gK30NCj4gKw0KPiArc3RhdGljIE5UU1RBVFVTDQo+ICtHbnR0YWJVbm1hcEZvcmVp
Z25QYWdlcygNCj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNlLA0K
PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywNCj4gKyAgICBJ
TiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywNCj4gKyAgICBJTiAgUFVMT05HICAg
ICAgICAgICAgICAgICAgSGFuZGxlcw0KPiArICAgICkNCj4gK3sNCj4gKyAgICBOVFNUQVRVUyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiArICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQg
ICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250ZXh0Ow0KPiArICAgIFVMT05HICAgICAgICAg
ICAgICAgICAgICAgICBQYWdlSW5kZXg7DQo+ICsgICAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAg
ICAgIFBhZ2VBZGRyZXNzOw0KPiArDQo+ICsgICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgPSBBZGRy
ZXNzLlF1YWRQYXJ0Ow0KPiArDQo+ICsgICAgZm9yIChQYWdlSW5kZXggPSAwOyBQYWdlSW5kZXgg
PCBOdW1iZXJQYWdlczsgUGFnZUluZGV4KyspIHsNCj4gKyAgICAgICAgc3RhdHVzID0gR3JhbnRU
YWJsZVVubWFwRm9yZWlnblBhZ2UoSGFuZGxlc1tQYWdlSW5kZXhdLA0KPiBQYWdlQWRkcmVzcyk7
DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICAgICAgZ290
byBmYWlsMTsNCj4gKw0KPiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdFX1NJ
WkU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgRmRvRnJlZUlvU3BhY2UoQ29udGV4dC0+RmRvLCBB
ZGRyZXNzLCBOdW1iZXJQYWdlcyAqIFBBR0VfU0laRSk7DQo+ICsgICAgcmV0dXJuIFNUQVRVU19T
VUNDRVNTOw0KPiArDQo+ICtmYWlsMToNCj4gKyAgICBFcnJvcigiZmFpbDE6ICglMDh4KSwgbGVh
a2luZyBtZW1vcnkgYXQgJXAsIHNpemUgMHglbHguIFBhZ2VJbmRleCA9ICVsdSwNCj4gUGFnZUFk
ZHJlc3MgPSAlcCwgSGFuZGxlID0gJWx1XG4iLA0KPiArICAgICAgICAgIHN0YXR1cywgQWRkcmVz
cy5RdWFkUGFydCwgTnVtYmVyUGFnZXMgKiBQQUdFX1NJWkUsIFBhZ2VJbmRleCwNCj4gUGFnZUFk
ZHJlc3MuUXVhZFBhcnQsIEhhbmRsZXNbUGFnZUluZGV4XSk7DQoNCkhtbS4gV2hhdCBkbyB3ZSB3
YW50IHRvIGRvIG9uIGFuIHVubWFwIGZhaWx1cmU/IEkgc3VzcGVjdCBzdWNoIGEgZmFpbHVyZSBw
cm9iYWJseSBtZWFucyBzb21ldGhpbmcgaGFzIGdvbmUgcHJldHR5IGRpc2FzdHJvdXNseSB3cm9u
ZyBzb21ld2hlcmUuIFdlIHNob3VsZCBwcm9iYWJseSBidWdjaGVjayBhbmQgbGV0IFhlbiBjbGVh
biB1cCwgb3RoZXJ3aXNlIHdlJ3JlIHBvdGVudGlhbGx5IHByZXZlbnRpbmcgYW5vdGhlciBkb21h
aW4gZnJvbSBkeWluZy4NCg0KICBQYXVsDQoNCj4gKyAgICByZXR1cm4gc3RhdHVzOw0KPiArfQ0K
PiArDQo+ICBzdGF0aWMgVk9JRA0KPiAgR250dGFiU3VzcGVuZENhbGxiYWNrRWFybHkoDQo+ICAg
ICAgSU4gIFBWT0lEICAgICAgICAgICAgICAgQXJndW1lbnQNCj4gQEAgLTc4OSw2ICs4NzMsMTkg
QEAgc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjENCj4gR250dGFiSW50
ZXJmYWNlVmVyc2lvbjEgPSB7DQo+ICAgICAgR250dGFiRGVzdHJveUNhY2hlDQo+ICB9Ow0KPiAN
Cj4gK3N0YXRpYyBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyICAgR250dGFiSW50
ZXJmYWNlVmVyc2lvbjIgPQ0KPiB7DQo+ICsgICAgeyBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WMiksIDIsIE5VTEwsIE5VTEwsIE5VTEwNCj4gfSwNCj4gKyAgICBHbnR0
YWJBY3F1aXJlLA0KPiArICAgIEdudHRhYlJlbGVhc2UsDQo+ICsgICAgR250dGFiQ3JlYXRlQ2Fj
aGUsDQo+ICsgICAgR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzcywNCj4gKyAgICBHbnR0YWJSZXZv
a2VGb3JlaWduQWNjZXNzLA0KPiArICAgIEdudHRhYkdldFJlZmVyZW5jZSwNCj4gKyAgICBHbnR0
YWJEZXN0cm95Q2FjaGUsDQo+ICsgICAgR250dGFiTWFwRm9yZWlnblBhZ2VzLA0KPiArICAgIEdu
dHRhYlVubWFwRm9yZWlnblBhZ2VzDQo+ICt9Ow0KPiArDQo+ICBOVFNUQVRVUw0KPiAgR250dGFi
SW5pdGlhbGl6ZSgNCj4gICAgICBJTiAgUFhFTkJVU19GRE8gICAgICAgICAgICAgRmRvLA0KPiBA
QCAtODc4LDYgKzk3NSwyMyBAQCBHbnR0YWJHZXRJbnRlcmZhY2UoDQo+ICAgICAgICAgIHN0YXR1
cyA9IFNUQVRVU19TVUNDRVNTOw0KPiAgICAgICAgICBicmVhazsNCj4gICAgICB9DQo+ICsgICAg
Y2FzZSAyOiB7DQo+ICsgICAgICAgIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIg
ICpHbnR0YWJJbnRlcmZhY2U7DQo+ICsNCj4gKyAgICAgICAgR250dGFiSW50ZXJmYWNlID0gKHN0
cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjINCj4gKilJbnRlcmZhY2U7DQo+ICsNCj4g
KyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9PVkVSRkxPVzsNCj4gKyAgICAgICAgaWYg
KFNpemUgPCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMikpDQo+ICsg
ICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICAqR250dGFiSW50ZXJmYWNlID0gR250
dGFiSW50ZXJmYWNlVmVyc2lvbjI7DQo+ICsNCj4gKyAgICAgICAgQVNTRVJUM1UoSW50ZXJmYWNl
LT5WZXJzaW9uLCA9PSwgVmVyc2lvbik7DQo+ICsgICAgICAgIEludGVyZmFjZS0+Q29udGV4dCA9
IENvbnRleHQ7DQo+ICsNCj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7DQo+ICsg
ICAgICAgIGJyZWFrOw0KPiArICAgIH0NCj4gICAgICBkZWZhdWx0Og0KPiAgICAgICAgICBzdGF0
dXMgPSBTVEFUVVNfTk9UX1NVUFBPUlRFRDsNCj4gICAgICAgICAgYnJlYWs7DQo+IA0KPiBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2
ZWwgbWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBo
dHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1w
di1kZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
d2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93
aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:25:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:25:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnFT-0004cf-EB; Fri, 04 Sep 2015 09:25:31 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnFR-0004cW-LI
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:25:29 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	B7/D3-30270-98369E55; Fri, 04 Sep 2015 09:25:29 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441358721!17039058!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23097 invoked from network); 4 Sep 2015 09:25:21 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:25:21 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456622"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add support for changing key
	permissions to the STORE interface
Thread-Index: AQHQ31H/E9dOfF+YbU2HSi41Emb4654sI1Jg
Date: Fri, 4 Sep 2015 09:25:09 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
References: <55DC94DA.6010003@invisiblethingslab.com>
In-Reply-To: <55DC94DA.6010003@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgc3VwcG9ydCBm
b3IgY2hhbmdpbmcga2V5DQo+IHBlcm1pc3Npb25zIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UNCj4g
DQo+IFNUT1JFIGludGVyZmFjZSBub3cgaW5jbHVkZXMgYSBmdW5jdGlvbiB0byBjaGFuZ2Uga2V5
IHBlcm1pc3Npb25zLiBUaGlzDQo+IGFsbG93cyBncmFudGluZyBrZXkgYWNjZXNzIHRvIG90aGVy
LCBub24tcHJpdmlsZWdlZCBkb21haW5zLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUmFmYcWCIFdv
amR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+DQo+IC0tLQ0KPiAgaW5jbHVkZS9z
dG9yZV9pbnRlcmZhY2UuaCB8ICA2OCArKysrKysrKysrKystDQo+ICBzcmMveGVuYnVzL3N0b3Jl
LmMgICAgICAgIHwgMjU0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKy0NCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzE3IGluc2VydGlvbnMoKyksIDUgZGVsZXRp
b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2lu
Y2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgNCj4gaW5kZXggNWJjYmJhMy4uYTM0YjgxNiAxMDA2NDQN
Cj4gLS0tIGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaA0KPiArKysgYi9pbmNsdWRlL3N0b3Jl
X2ludGVyZmFjZS5oDQo+IEBAIC01MCw2ICs1MCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X1NUT1JFX1RSQU5TQUNUSU9ODQo+IFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiwgKlBYRU5CVVNf
Uw0KPiAgKi8NCj4gIHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0ggICAgICAgICAg
WEVOQlVTX1NUT1JFX1dBVENILA0KPiAqUFhFTkJVU19TVE9SRV9XQVRDSDsNCj4gDQo+ICsvKiEg
XHR5cGVkZWYgWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSw0KPiArICAgIFxicmllZiBCaXRt
YXNrIG9mIFhlblN0b3JlIGtleSBwZXJtaXNzaW9ucw0KPiArICovDQo+ICt0eXBlZGVmIGVudW0g
X1hFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sgew0KPiArICAgIFhTX1BFUk1fTk9ORSA9IDAs
DQo+ICsgICAgWFNfUEVSTV9SRUFEID0gMSwNCj4gKyAgICBYU19QRVJNX1dSSVRFID0gMiwNCj4g
K30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSzsNCg0KVGhlc2UgdmFsdWVzIGFyZSBub3Qg
ZGVmaW5lZCBpbiB4c193aXJlLmggc28gSSB0aGluayB0aGV5IG5lZWQgYSBYRU5CVVNfU1RPUkVf
IHByZWZpeCByYXRoZXIgdGhhbiBYU18uDQoNCj4gKw0KPiArLyohIFx0eXBlZGVmIFhFTkJVU19T
VE9SRV9QRVJNSVNTSU9ODQo+ICsgICAgXGJyaWVmIFhlblN0b3JlIGtleSBwZXJtaXNzaW9ucyBl
bnRyeSBmb3IgYSBzaW5nbGUgZG9tYWluDQo+ICsgKi8NCj4gK3R5cGVkZWYgc3RydWN0IF9YRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTiB7DQo+ICsgICAgVVNIT1JUIERvbWFpbjsNCj4gKyAgICBYRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTl9NQVNLIE1hc2s7DQo+ICt9IFhFTkJVU19TVE9SRV9QRVJNSVNT
SU9OLCAqUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OOw0KPiArDQo+ICAvKiEgXHR5cGVkZWYgWEVO
QlVTX1NUT1JFX0FDUVVJUkUNCj4gICAgICBcYnJpZWYgQWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0
aGUgU1RPUkUgaW50ZXJmYWNlDQo+IA0KPiBAQCAtMjQ3LDEwICsyNjQsMzYgQEAgdHlwZWRlZiBW
T0lEDQo+ICAgICAgSU4gIFBJTlRFUkZBQ0UgIEludGVyZmFjZQ0KPiAgICAgICk7DQo+IA0KPiAr
LyohIFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OU19TRVQNCj4gKyAgICBcYnJpZWYg
U2V0IHBlcm1pc3Npb25zIGZvciBhIFhlblN0b3JlIGtleQ0KPiArDQo+ICsgICAgXHBhcmFtIElu
dGVyZmFjZSBUaGUgaW50ZXJmYWNlIGhlYWRlcg0KPiArICAgIFxwYXJhbSBUcmFuc2FjdGlvbiBU
aGUgdHJhbnNhY3Rpb24gaGFuZGxlIChOVUxMIGlmIHRoaXMgaXMgbm90DQo+ICsgICAgcGFydCBv
ZiBhIHRyYW5zYWN0aW9uKQ0KPiArICAgIFxwYXJhbSBQcmVmaXggQW4gb3B0aW9uYWwgcHJlZml4
IGZvciB0aGUgXGEgTm9kZQ0KPiArICAgIFxwYXJhbSBOb2RlIFRoZSBjb25jYXRlbmF0aW9uIG9m
IHRoZSBcYSBQcmVmaXggYW5kIHRoaXMgdmFsdWUgc3BlY2lmaWVzDQo+ICsgICAgdGhlIFhlblN0
b3JlIGtleSB0byBzZXQgcGVybWlzc2lvbnMgb2YNCj4gKyAgICBccGFyYW0gUGVybWlzc2lvbnMg
QW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0DQo+ICsgICAgXHBhcmFtIE51bWJlclBlcm1p
c3Npb25zIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgXGEgUGVybWlzc2lvbnMNCj4gYXJyYXkN
Cj4gKyAqLw0KPiArdHlwZWRlZiBOVFNUQVRVUw0KPiArKCpYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TlNfU0VUKSgNCj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgICAgIEludGVyZmFj
ZSwNCj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAgIFRyYW5zYWN0aW9uIE9Q
VElPTkFMLA0KPiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgUHJlZml4IE9Q
VElPTkFMLA0KPiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgTm9kZSwNCj4g
KyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1pc3Npb25zLA0KPiArICAg
IElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVybWlzc2lvbnMNCj4gKyAg
ICApOw0KPiArDQo+ICAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEtMkYxRTNBRDIxNEQ3fQ0K
PiAgREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFLA0KPiAgMHg4NjgyNGMz
YiwgMHhkMzRlLCAweDQ3NTMsIDB4YjIsIDB4ODEsIDB4MmYsIDB4MWUsIDB4M2EsIDB4ZDIsIDB4
MTQsIDB4ZDcpOw0KPiANCj4gKy8qISBcc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1Yx
DQo+ICsgICAgXGJyaWVmIFNUT1JFIGludGVyZmFjZSB2ZXJzaW9uIDENCj4gKyAgICBcaW5ncm91
cCBpbnRlcmZhY2VzDQo+ICsgKi8NCj4gIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9W
MSB7DQo+ICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2U7DQo+
ICAgICAgWEVOQlVTX1NUT1JFX0FDUVVJUkUgICAgICAgICAgICBTdG9yZUFjcXVpcmU7DQo+IEBA
IC0yNjcsMTEgKzMxMCwyOCBAQCBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgew0K
PiAgICAgIFhFTkJVU19TVE9SRV9QT0xMICAgICAgICAgICAgICAgU3RvcmVQb2xsOw0KPiAgfTsN
Cj4gDQo+IC0vKiEgXHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMQ0KPiAtICAgIFxi
cmllZiBTVE9SRSBpbnRlcmZhY2UgdmVyc2lvbiAxDQo+ICsvKiEgXHN0cnVjdCBfWEVOQlVTX1NU
T1JFX0lOVEVSRkFDRV9WMg0KPiArICAgIFxicmllZiBTVE9SRSBpbnRlcmZhY2UgdmVyc2lvbiAy
DQo+ICAgICAgXGluZ3JvdXAgaW50ZXJmYWNlcw0KPiAgKi8NCj4gLXR5cGVkZWYgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxDQo+IFhFTkJVU19TVE9SRV9JTlRFUkZBQ0UsICpQWEVO
QlVTX1NUT1JFX0lOVEVSRkFDRTsNCj4gK3N0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9W
MiB7DQo+ICsgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2U7DQo+
ICsgICAgWEVOQlVTX1NUT1JFX0FDUVVJUkUgICAgICAgICAgICBTdG9yZUFjcXVpcmU7DQo+ICsg
ICAgWEVOQlVTX1NUT1JFX1JFTEVBU0UgICAgICAgICAgICBTdG9yZVJlbGVhc2U7DQo+ICsgICAg
WEVOQlVTX1NUT1JFX0ZSRUUgICAgICAgICAgICAgICBTdG9yZUZyZWU7DQo+ICsgICAgWEVOQlVT
X1NUT1JFX1JFQUQgICAgICAgICAgICAgICBTdG9yZVJlYWQ7DQo+ICsgICAgWEVOQlVTX1NUT1JF
X1BSSU5URiAgICAgICAgICAgICBTdG9yZVByaW50ZjsNCj4gKyAgICBYRU5CVVNfU1RPUkVfUkVN
T1ZFICAgICAgICAgICAgIFN0b3JlUmVtb3ZlOw0KPiArICAgIFhFTkJVU19TVE9SRV9ESVJFQ1RP
UlkgICAgICAgICAgU3RvcmVEaXJlY3Rvcnk7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1RSQU5TQUNU
SU9OX1NUQVJUICBTdG9yZVRyYW5zYWN0aW9uU3RhcnQ7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1RS
QU5TQUNUSU9OX0VORCAgICBTdG9yZVRyYW5zYWN0aW9uRW5kOw0KPiArICAgIFhFTkJVU19TVE9S
RV9XQVRDSF9BREQgICAgICAgICAgU3RvcmVXYXRjaEFkZDsNCj4gKyAgICBYRU5CVVNfU1RPUkVf
V0FUQ0hfUkVNT1ZFICAgICAgIFN0b3JlV2F0Y2hSZW1vdmU7DQo+ICsgICAgWEVOQlVTX1NUT1JF
X1BPTEwgICAgICAgICAgICAgICBTdG9yZVBvbGw7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1BFUk1J
U1NJT05TX1NFVCAgICBTdG9yZVBlcm1pc3Npb25zU2V0Ow0KPiArfTsNCj4gKw0KPiArdHlwZWRl
ZiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjINCj4gWEVOQlVTX1NUT1JFX0lOVEVS
RkFDRSwgKlBYRU5CVVNfU1RPUkVfSU5URVJGQUNFOw0KPiANCj4gIC8qISBcZGVmIFhFTkJVU19T
VE9SRQ0KPiAgICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9kIGludm9jYXRpb24N
Cj4gQEAgLTI4Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVS
RkFDRV9WMQ0KPiBYRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19TVE9SRQ0KPiAgI2Vu
ZGlmICAvLyBfV0lORExMDQo+IA0KPiAgI2RlZmluZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZF
UlNJT05fTUlOICAxDQo+IC0jZGVmaW5lIFhFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVkVSU0lPTl9N
QVggIDENCj4gKyNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WRVJTSU9OX01BWCAgMg0K
PiANCj4gICNlbmRpZiAgLy8gX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfSA0KPiANCj4gZGlmZiAt
LWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5idXMvc3RvcmUuYw0KPiBpbmRleCAx
NmNhMzdiLi4yNjQyYmIzIDEwMDY0NA0KPiAtLS0gYS9zcmMveGVuYnVzL3N0b3JlLmMNCj4gKysr
IGIvc3JjL3hlbmJ1cy9zdG9yZS5jDQo+IEBAIC0yMzYsNiArMjM2LDczIEBAIGZhaWwxOg0KPiAg
ICAgIHJldHVybiBzdGF0dXM7DQo+ICB9DQo+IA0KPiArLy8gcHJlcGFyZSBhIHJlcXVlc3Qgd2l0
aCBrbm93biBudW1iZXIgb2YgZWxlbWVudHMNCj4gK3N0YXRpYyBOVFNUQVRVUw0KPiArU3RvcmVQ
cmVwYXJlUmVxdWVzdEZpeGVkKA0KPiArICAgIElOICBQWEVOQlVTX1NUT1JFX0NPTlRFWFQgICAg
ICAgQ29udGV4dCwNCj4gKyAgICBPVVQgUFhFTkJVU19TVE9SRV9SRVFVRVNUICAgICAgIFJlcXVl
c3QsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT04gICBUcmFuc2FjdGlvbiBP
UFRJT05BTCwNCj4gKyAgICBJTiAgZW51bSB4c2Rfc29ja21zZ190eXBlICAgICAgIFR5cGUsDQo+
ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfU0VHTUVOVCAgICAgICBTZWdtZW50cywNCj4gKyAgICBJ
TiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIE51bWJlclNlZ21lbnRzDQo+ICsgICAgKQ0K
PiArew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgSWQ7DQo+ICsgICAg
S0lSUUwgICAgICAgICAgICAgICAgICAgICAgICAgICBJcnFsOw0KPiArICAgIE5UU1RBVFVTICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiArICAgIFVMT05HICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KFJlcXVl
c3QsIHNpemVvZiAoWEVOQlVTX1NUT1JFX1JFUVVFU1QpKSk7DQo+ICsNCj4gKyAgICBzdGF0dXMg
PSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgaWYgKE51bWJlclNlZ21lbnRzID4g
WEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVCAtIDEpDQo+IC8vIG5lZWQgb25lIGZv
ciB0aGUgaGVhZGVyDQo+ICsgICAgICAgIGdvdG8gZmFpbDE7DQo+ICsNCj4gKyAgICBpZiAoVHJh
bnNhY3Rpb24gIT0gTlVMTCkgew0KPiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNT
RlVMOw0KPiArICAgICAgICBpZiAoIVRyYW5zYWN0aW9uLT5BY3RpdmUpDQo+ICsgICAgICAgICAg
ICBnb3RvIGZhaWwyOw0KPiArDQo+ICsgICAgICAgIElkID0gVHJhbnNhY3Rpb24tPklkOw0KPiAr
ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIElkID0gMDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBS
ZXF1ZXN0LT5IZWFkZXIudHlwZSA9IFR5cGU7DQo+ICsgICAgUmVxdWVzdC0+SGVhZGVyLnR4X2lk
ID0gSWQ7DQo+ICsgICAgUmVxdWVzdC0+SGVhZGVyLmxlbiA9IDA7DQo+ICsNCj4gKyAgICBLZUFj
cXVpcmVTcGluTG9jaygmQ29udGV4dC0+TG9jaywgJklycWwpOw0KPiArICAgIFJlcXVlc3QtPkhl
YWRlci5yZXFfaWQgPSBDb250ZXh0LT5SZXF1ZXN0SWQrKzsNCj4gKyAgICBLZVJlbGVhc2VTcGlu
TG9jaygmQ29udGV4dC0+TG9jaywgSXJxbCk7DQo+ICsNCj4gKyAgICAvLyBoZWFkZXIgaXMgdGhl
IGZpcnN0LCB0aGVuIHRoZSBhY3R1YWwgZGF0YQ0KPiArICAgIFJlcXVlc3QtPkNvdW50ID0gTnVt
YmVyU2VnbWVudHMgKyAxOw0KPiArDQo+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5EYXRhID0g
KFBDSEFSKSZSZXF1ZXN0LT5IZWFkZXI7DQo+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5PZmZz
ZXQgPSAwOw0KPiArICAgIFJlcXVlc3QtPlNlZ21lbnRbMF0uTGVuZ3RoID0gc2l6ZW9mKHN0cnVj
dCB4c2Rfc29ja21zZyk7DQo+ICsNCg0KSSBkb24ndCB0aGluayB5b3UgbmVlZCB0aGlzIG5ldyBm
dW5jdGlvbi4gU2VlIGJlbG93Li4uDQoNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBO
dW1iZXJTZWdtZW50czsgSW5kZXgrKykgew0KPiArICAgICAgICBSZXF1ZXN0LT5TZWdtZW50W0lu
ZGV4KzFdLkRhdGEgPSBTZWdtZW50c1tJbmRleF0uRGF0YTsNCj4gKyAgICAgICAgUmVxdWVzdC0+
U2VnbWVudFtJbmRleCsxXS5PZmZzZXQgPSAwOw0KPiArICAgICAgICBSZXF1ZXN0LT5TZWdtZW50
W0luZGV4KzFdLkxlbmd0aCA9IFNlZ21lbnRzW0luZGV4XS5MZW5ndGg7DQo+ICsNCj4gKyAgICAg
ICAgUmVxdWVzdC0+SGVhZGVyLmxlbiArPSBTZWdtZW50c1tJbmRleF0uTGVuZ3RoOw0KPiArICAg
IH0NCj4gKw0KPiArICAgIFJlcXVlc3QtPlN0YXRlID0gWEVOQlVTX1NUT1JFX1JFUVVFU1RfUFJF
UEFSRUQ7DQo+ICsNCj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7DQo+ICsNCj4gK2ZhaWwy
Og0KPiArICAgIEVycm9yKCJmYWlsMlxuIik7DQo+ICsNCj4gK2ZhaWwxOg0KPiArICAgIEVycm9y
KCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIHN0YXR1czsNCj4gK30N
Cj4gKw0KPiAgc3RhdGljIFVMT05HDQo+ICBTdG9yZUNvcHlUb1JpbmcoDQo+ICAgICAgSU4gIFBY
RU5CVVNfU1RPUkVfQ09OVEVYVCAgICAgICAgICAgQ29udGV4dCwNCj4gQEAgLTQzOSw3ICs1MDYs
NiBAQCBTdG9yZUlnbm9yZUhlYWRlclR5cGUoDQo+ICAgICAgY2FzZSBYU19SRUxFQVNFOg0KPiAg
ICAgIGNhc2UgWFNfR0VUX0RPTUFJTl9QQVRIOg0KPiAgICAgIGNhc2UgWFNfTUtESVI6DQo+IC0g
ICAgY2FzZSBYU19TRVRfUEVSTVM6DQo+ICAgICAgY2FzZSBYU19JU19ET01BSU5fSU5UUk9EVUNF
RDoNCj4gICAgICBjYXNlIFhTX1JFU1VNRToNCj4gICAgICBjYXNlIFhTX1NFVF9UQVJHRVQ6DQo+
IEBAIC00NjcsNiArNTMzLDcgQEAgU3RvcmVWZXJpZnlIZWFkZXIoDQo+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19UUkFOU0FDVElPTl9FTkQgJiYNCj4gICAgICAgICAgSGVhZGVyLT50eXBl
ICE9IFhTX1dSSVRFICYmDQo+ICAgICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19STSAmJg0KPiAr
ICAgICAgICBIZWFkZXItPnR5cGUgIT0gWFNfU0VUX1BFUk1TICYmDQo+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19XQVRDSF9FVkVOVCAmJg0KPiAgICAgICAgICBIZWFkZXItPnR5cGUgIT0g
WFNfRVJST1IgJiYNCj4gICAgICAgICAgIVN0b3JlSWdub3JlSGVhZGVyVHlwZShIZWFkZXItPnR5
cGUpKSB7DQo+IEBAIC0xNzg4LDYgKzE4NTUsMTU3IEBAIFN0b3JlUG9sbCgNCj4gICAgICBLZVJl
bGVhc2VTcGluTG9ja0Zyb21EcGNMZXZlbCgmQ29udGV4dC0+TG9jayk7DQo+ICB9DQo+IA0KPiAr
c3RhdGljIE5UU1RBVFVTDQo+ICtTdG9yZVBlcm1pc3Npb25Ub1N0cmluZygNCj4gKyAgICBJTiAg
UFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OIFBlcm1pc3Npb24sDQo+ICsgICAgSU4gIFVMT05HIEJ1
ZmZlclNpemUsDQo+ICsgICAgT1VUIFBDSEFSIEJ1ZmZlcg0KPiArICAgICkNCj4gK3sNCj4gKyAg
ICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsNCj4gKyAg
ICBBU1NFUlQoQnVmZmVyU2l6ZSA+IDEpOw0KPiArDQo+ICsgICAgc3dpdGNoIChQZXJtaXNzaW9u
LT5NYXNrKSB7DQo+ICsgICAgY2FzZSBYU19QRVJNX1dSSVRFOg0KPiArICAgICAgICAqQnVmZmVy
ID0gJ3cnOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFhTX1BFUk1fUkVBRDoNCj4g
KyAgICAgICAgKkJ1ZmZlciA9ICdyJzsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBY
U19QRVJNX1JFQUQgfCBYU19QRVJNX1dSSVRFOg0KPiArICAgICAgICAqQnVmZmVyID0gJ2InOw0K
PiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFhTX1BFUk1fTk9ORToNCj4gKyAgICAgICAg
KkJ1ZmZlciA9ICduJzsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAg
ICAgICAgZ290byBmYWlsMTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gUnRsU3RyaW5n
Q2JQcmludGZBKEJ1ZmZlciArIDEsIEJ1ZmZlclNpemUgLSAxLCAiJXUiLCBQZXJtaXNzaW9uLQ0K
PiA+RG9tYWluKTsNCj4gKw0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxu
Iiwgc3RhdHVzKTsNCj4gKyAgICByZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg
TlRTVEFUVVMNCj4gK1N0b3JlUGVybWlzc2lvbnNTZXQoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0Ug
ICAgICAgICAgICAgICAgICBJbnRlcmZhY2UsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfVFJB
TlNBQ1RJT04gICBUcmFuc2FjdGlvbiBPUFRJT05BTCwNCj4gKyAgICBJTiAgUENIQVIgICAgICAg
ICAgICAgICAgICAgICAgIFByZWZpeCBPUFRJT05BTCwNCj4gKyAgICBJTiAgUENIQVIgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TiAgICBQZXJtaXNzaW9ucywNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAg
IE51bWJlclBlcm1pc3Npb25zDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFBYRU5CVVNfU1RPUkVf
Q09OVEVYVCAgICAgICAgICAgQ29udGV4dCA9IEludGVyZmFjZS0+Q29udGV4dDsNCj4gKyAgICBY
RU5CVVNfU1RPUkVfUkVRVUVTVCAgICAgICAgICAgIFJlcXVlc3Q7DQo+ICsgICAgUFhFTkJVU19T
VE9SRV9SRVNQT05TRSAgICAgICAgICBSZXNwb25zZTsNCj4gKyAgICBOVFNUQVRVUyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1czsNCj4gKyAgICBYRU5CVVNfU1RPUkVfU0VHTUVOVA0KPiBT
ZWdtZW50c1tYRU5CVVNfU1RPUkVfUkVRVUVTVF9TRUdNRU5UX0NPVU5UXTsNCj4gKyAgICBVTE9O
RyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LCBCdWZmZXJTaXplOw0KPiArICAgIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCA9IE5VTEw7DQo+ICsNCj4gKyAgICBz
dGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgaWYgKE51bWJlclBlcm1p
c3Npb25zID4gWEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVCAtDQo+IDIpIC8vIDEg
Zm9yIHBhdGgsIDEgZm9yIGhlYWRlciBpbiBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQNCj4gKyAg
ICAgICAgZ290byBmYWlsMTsNCj4gKw0KPiArICAgIGlmIChQcmVmaXggIT0gTlVMTCkgew0KPiAr
ICAgICAgICAvLyB3ZSdyZSBjb25jYXRlbmF0aW5nIGl0IGhlcmUgaW5zdGVhZCBvZiBwYXNzaW5n
IHRvDQo+IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBz
ZWdtZW50cyB1c2VkDQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT19NRU1PUlk7DQo+ICsg
ICAgICAgIFBhdGggPSBfX1N0b3JlQWxsb2NhdGUoWEVOU1RPUkVfQUJTX1BBVEhfTUFYKTsNCj4g
KyAgICAgICAgaWYgKFBhdGggPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDI7DQo+
ICsNCj4gKyAgICAgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZBKFBhdGgsIFhFTlNUT1JF
X0FCU19QQVRIX01BWCwNCj4gIiVzLyVzIiwgUHJlZml4LCBOb2RlKTsNCj4gKyAgICAgICAgQVNT
RVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7DQo+ICsgICAgICAgIE5vZGUgPSBQYXRoOw0KPiArICAg
IH0NCj4gKw0KPiArICAgIFJ0bFplcm9NZW1vcnkoJlJlcXVlc3QsIHNpemVvZihYRU5CVVNfU1RP
UkVfUkVRVUVTVCkpOw0KPiArICAgIFJ0bFplcm9NZW1vcnkoU2VnbWVudHMsIHNpemVvZihTZWdt
ZW50cykpOw0KPiArDQo+ICsgICAgU2VnbWVudHNbMF0uRGF0YSA9IE5vZGU7IC8vIHBhdGgNCj4g
KyAgICBTZWdtZW50c1swXS5PZmZzZXQgPSAwOw0KPiArICAgIFNlZ21lbnRzWzBdLkxlbmd0aCA9
IChVTE9ORylzdHJsZW4oTm9kZSkgKyAxOyAvLyB6ZXJvIHRlcm1pbmF0b3INCj4gcmVxdWlyZWQN
Cj4gKw0KPiArICAgIEJ1ZmZlclNpemUgPSAxNjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5k
ZXggPCBOdW1iZXJQZXJtaXNzaW9uczsgSW5kZXgrKykgew0KPiArICAgICAgICBTZWdtZW50c1tJ
bmRleCArIDFdLkRhdGEgPSBfX1N0b3JlQWxsb2NhdGUoQnVmZmVyU2l6ZSk7DQo+ICsgICAgICAg
IGlmIChTZWdtZW50c1tJbmRleCArIDFdLkRhdGEgPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdv
dG8gZmFpbDM7DQo+ICsNCj4gKyAgICAgICAgc3RhdHVzID0gU3RvcmVQZXJtaXNzaW9uVG9TdHJp
bmcoJlBlcm1pc3Npb25zW0luZGV4XSwgQnVmZmVyU2l6ZSwNCj4gU2VnbWVudHNbSW5kZXgrMV0u
RGF0YSk7DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICAg
ICAgZ290byBmYWlsNDsNCj4gKw0KPiArICAgICAgICBTZWdtZW50c1tJbmRleCArIDFdLkxlbmd0
aCA9IChVTE9ORylzdHJsZW4oU2VnbWVudHNbSW5kZXggKw0KPiAxXS5EYXRhKSArIDE7IC8vIHpl
cm8gdGVybWluYXRvciByZXF1aXJlZA0KPiArICAgIH0NCj4gKw0KPiArICAgIHN0YXR1cyA9IFN0
b3JlUHJlcGFyZVJlcXVlc3RGaXhlZChDb250ZXh0LA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhTX1NFVF9QRVJNUywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VnbWVudHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE51bWJlclBlcm1pc3Npb25zICsgMSk7DQo+ICsNCg0KU2VnbWVudHMgYXJlIG9ubHkgYSBj
b2RpbmcgY29udmVuaWVuY2UuLi4gT24gdGhlICd3aXJlJyB0aGV5IGFyZSBqdXN0IGNvbmNhdGVu
YXRlZC4gU28gSSB0aGluayBhbGwgeW91IG5lZWQgdG8gaXMgcHJlcGFyZSBjaGFyYWN0ZXIgYnVm
ZmVyIHdpdGggYSBOVUwgc2VwYXJhdGVkIGxpc3Qgb2YgPHBlcm0+PGRvbWlkPiBzdHJpbmdzIGFu
ZCB0aGVuIHBhc3MgdGhhdCBhcyBhbiBhcmcgdG8gdGhlIG5vcm1hbCBlbGxpcHNpcyBTdG9yZVBy
ZXBhcmVSZXF1ZXN0KCkuIE5vIG5lZWQgZm9yIHRoZSBleHRyYSBjb21wbGV4aXR5IG9mIGEgbmV3
IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCgpLg0KDQogIFBhdWwNCg0KPiArICAgIGlmICghTlRf
U1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICBnb3RvIGZhaWw1Ow0KPiArDQo+ICsgICAgUmVz
cG9uc2UgPSBTdG9yZVN1Ym1pdFJlcXVlc3QoQ29udGV4dCwgJlJlcXVlc3QpOw0KPiArDQo+ICsg
ICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsNCj4gKyAgICBpZiAoUmVzcG9uc2UgPT0gTlVM
TCkNCj4gKyAgICAgICAgZ290byBmYWlsNjsNCj4gKw0KPiArICAgIHN0YXR1cyA9IFN0b3JlQ2hl
Y2tSZXNwb25zZShSZXNwb25zZSk7DQo+ICsgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+
ICsgICAgICAgIGdvdG8gZmFpbDc7DQo+ICsNCj4gKyAgICBTdG9yZUZyZWVSZXNwb25zZShSZXNw
b25zZSk7DQo+ICsgICAgQVNTRVJUKElzWmVyb01lbW9yeSgmUmVxdWVzdCwgc2l6ZW9mKFhFTkJV
U19TVE9SRV9SRVFVRVNUKSkpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJl
clBlcm1pc3Npb25zOyBJbmRleCsrKQ0KPiArICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJ
bmRleCArIDFdLkRhdGEpOw0KPiArDQo+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkNCj4gKyAgICAg
ICAgX19TdG9yZUZyZWUoUGF0aCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7
DQo+ICsNCj4gK2ZhaWw3Og0KPiArICAgIEVycm9yKCJmYWlsN1xuIik7DQo+ICsgICAgU3RvcmVG
cmVlUmVzcG9uc2UoUmVzcG9uc2UpOw0KPiArDQo+ICtmYWlsNjoNCj4gKyAgICBFcnJvcigiZmFp
bDZcbiIpOw0KPiArDQo+ICtmYWlsNToNCj4gKyAgICBFcnJvcigiZmFpbDVcbiIpOw0KPiArDQo+
ICtmYWlsNDoNCj4gKyAgICBFcnJvcigiZmFpbDRcbiIpOw0KPiArDQo+ICtmYWlsMzoNCj4gKyAg
ICBFcnJvcigiZmFpbDNcbiIpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJl
clBlcm1pc3Npb25zOyBJbmRleCsrKQ0KPiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAx
XS5EYXRhICE9IE5VTEwpDQo+ICsgICAgICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRl
eCArIDFdLkRhdGEpOw0KPiArDQo+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkNCj4gKyAgICAgICAg
X19TdG9yZUZyZWUoUGF0aCk7DQo+ICsNCj4gK2ZhaWwyOg0KPiArICAgIEVycm9yKCJmYWlsMlxu
Iik7DQo+ICsNCj4gKw0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwg
c3RhdHVzKTsNCj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2YoWEVO
QlVTX1NUT1JFX1JFUVVFU1QpKSk7DQo+ICsgICAgcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0K
PiAgc3RhdGljDQo+ICBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpDQo+ICBfSVJR
TF9yZXF1aXJlc18oSElHSF9MRVZFTCkNCj4gQEAgLTIyODUsNiArMjUwMywyMyBAQCBzdGF0aWMg
c3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxDQo+IFN0b3JlSW50ZXJmYWNlVmVyc2lv
bjEgPSB7DQo+ICAgICAgU3RvcmVQb2xsDQo+ICB9Ow0KPiANCj4gK3N0YXRpYyBzdHJ1Y3QgX1hF
TkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIgU3RvcmVJbnRlcmZhY2VWZXJzaW9uMiA9IHsNCj4gKyAg
ICB7IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIpLCAyLCBOVUxMLCBO
VUxMLCBOVUxMIH0sDQo+ICsgICAgU3RvcmVBY3F1aXJlLA0KPiArICAgIFN0b3JlUmVsZWFzZSwN
Cj4gKyAgICBTdG9yZUZyZWUsDQo+ICsgICAgU3RvcmVSZWFkLA0KPiArICAgIFN0b3JlUHJpbnRm
LA0KPiArICAgIFN0b3JlUmVtb3ZlLA0KPiArICAgIFN0b3JlRGlyZWN0b3J5LA0KPiArICAgIFN0
b3JlVHJhbnNhY3Rpb25TdGFydCwNCj4gKyAgICBTdG9yZVRyYW5zYWN0aW9uRW5kLA0KPiArICAg
IFN0b3JlV2F0Y2hBZGQsDQo+ICsgICAgU3RvcmVXYXRjaFJlbW92ZSwNCj4gKyAgICBTdG9yZVBv
bGwsDQo+ICsgICAgU3RvcmVQZXJtaXNzaW9uc1NldCwNCj4gK307DQo+ICsNCj4gIE5UU1RBVFVT
DQo+ICBTdG9yZUluaXRpYWxpemUoDQo+ICAgICAgSU4gIFBYRU5CVVNfRkRPICAgICAgICAgICAg
IEZkbywNCj4gQEAgLTIzODQsNiArMjYxOSwyMyBAQCBTdG9yZUdldEludGVyZmFjZSgNCj4gICAg
ICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7DQo+ICAgICAgICAgIGJyZWFrOw0KPiAgICAg
IH0NCj4gKyAgICBjYXNlIDI6IHsNCj4gKyAgICAgICAgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5U
RVJGQUNFX1YyICAqU3RvcmVJbnRlcmZhY2U7DQo+ICsNCj4gKyAgICAgICAgU3RvcmVJbnRlcmZh
Y2UgPSAoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyICopSW50ZXJmYWNlOw0KPiAr
DQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19CVUZGRVJfT1ZFUkZMT1c7DQo+ICsgICAgICAg
IGlmIChTaXplIDwgc2l6ZW9mKHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMikpDQo+
ICsgICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICAqU3RvcmVJbnRlcmZhY2UgPSBT
dG9yZUludGVyZmFjZVZlcnNpb24yOw0KPiArDQo+ICsgICAgICAgIEFTU0VSVDNVKEludGVyZmFj
ZS0+VmVyc2lvbiwgPT0gLCBWZXJzaW9uKTsNCj4gKyAgICAgICAgSW50ZXJmYWNlLT5Db250ZXh0
ID0gQ29udGV4dDsNCj4gKw0KPiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsNCj4g
KyAgICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiAgICAgIGRlZmF1bHQ6DQo+ICAgICAgICAgIHN0
YXR1cyA9IFNUQVRVU19OT1RfU1VQUE9SVEVEOw0KPiAgICAgICAgICBicmVhazsNCj4gDQo+IF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IHdpbi1wdi1k
ZXZlbCBtYWlsaW5nIGxpc3QNCj4gd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
IGh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2lu
LXB2LWRldmVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:25:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:25:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnFT-0004cf-EB; Fri, 04 Sep 2015 09:25:31 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnFR-0004cW-LI
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:25:29 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	B7/D3-30270-98369E55; Fri, 04 Sep 2015 09:25:29 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441358721!17039058!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23097 invoked from network); 4 Sep 2015 09:25:21 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:25:21 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456622"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/2] Add support for changing key
	permissions to the STORE interface
Thread-Index: AQHQ31H/E9dOfF+YbU2HSi41Emb4654sI1Jg
Date: Fri, 4 Sep 2015 09:25:09 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
References: <55DC94DA.6010003@invisiblethingslab.com>
In-Reply-To: <55DC94DA.6010003@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/2] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgc3VwcG9ydCBm
b3IgY2hhbmdpbmcga2V5DQo+IHBlcm1pc3Npb25zIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UNCj4g
DQo+IFNUT1JFIGludGVyZmFjZSBub3cgaW5jbHVkZXMgYSBmdW5jdGlvbiB0byBjaGFuZ2Uga2V5
IHBlcm1pc3Npb25zLiBUaGlzDQo+IGFsbG93cyBncmFudGluZyBrZXkgYWNjZXNzIHRvIG90aGVy
LCBub24tcHJpdmlsZWdlZCBkb21haW5zLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogUmFmYcWCIFdv
amR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+DQo+IC0tLQ0KPiAgaW5jbHVkZS9z
dG9yZV9pbnRlcmZhY2UuaCB8ICA2OCArKysrKysrKysrKystDQo+ICBzcmMveGVuYnVzL3N0b3Jl
LmMgICAgICAgIHwgMjU0DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKy0NCj4gIDIgZmlsZXMgY2hhbmdlZCwgMzE3IGluc2VydGlvbnMoKyksIDUgZGVsZXRp
b25zKC0pDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2lu
Y2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgNCj4gaW5kZXggNWJjYmJhMy4uYTM0YjgxNiAxMDA2NDQN
Cj4gLS0tIGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaA0KPiArKysgYi9pbmNsdWRlL3N0b3Jl
X2ludGVyZmFjZS5oDQo+IEBAIC01MCw2ICs1MCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X1NUT1JFX1RSQU5TQUNUSU9ODQo+IFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiwgKlBYRU5CVVNf
Uw0KPiAgKi8NCj4gIHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0ggICAgICAgICAg
WEVOQlVTX1NUT1JFX1dBVENILA0KPiAqUFhFTkJVU19TVE9SRV9XQVRDSDsNCj4gDQo+ICsvKiEg
XHR5cGVkZWYgWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSw0KPiArICAgIFxicmllZiBCaXRt
YXNrIG9mIFhlblN0b3JlIGtleSBwZXJtaXNzaW9ucw0KPiArICovDQo+ICt0eXBlZGVmIGVudW0g
X1hFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sgew0KPiArICAgIFhTX1BFUk1fTk9ORSA9IDAs
DQo+ICsgICAgWFNfUEVSTV9SRUFEID0gMSwNCj4gKyAgICBYU19QRVJNX1dSSVRFID0gMiwNCj4g
K30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSzsNCg0KVGhlc2UgdmFsdWVzIGFyZSBub3Qg
ZGVmaW5lZCBpbiB4c193aXJlLmggc28gSSB0aGluayB0aGV5IG5lZWQgYSBYRU5CVVNfU1RPUkVf
IHByZWZpeCByYXRoZXIgdGhhbiBYU18uDQoNCj4gKw0KPiArLyohIFx0eXBlZGVmIFhFTkJVU19T
VE9SRV9QRVJNSVNTSU9ODQo+ICsgICAgXGJyaWVmIFhlblN0b3JlIGtleSBwZXJtaXNzaW9ucyBl
bnRyeSBmb3IgYSBzaW5nbGUgZG9tYWluDQo+ICsgKi8NCj4gK3R5cGVkZWYgc3RydWN0IF9YRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTiB7DQo+ICsgICAgVVNIT1JUIERvbWFpbjsNCj4gKyAgICBYRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTl9NQVNLIE1hc2s7DQo+ICt9IFhFTkJVU19TVE9SRV9QRVJNSVNT
SU9OLCAqUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OOw0KPiArDQo+ICAvKiEgXHR5cGVkZWYgWEVO
QlVTX1NUT1JFX0FDUVVJUkUNCj4gICAgICBcYnJpZWYgQWNxdWlyZSBhIHJlZmVyZW5jZSB0byB0
aGUgU1RPUkUgaW50ZXJmYWNlDQo+IA0KPiBAQCAtMjQ3LDEwICsyNjQsMzYgQEAgdHlwZWRlZiBW
T0lEDQo+ICAgICAgSU4gIFBJTlRFUkZBQ0UgIEludGVyZmFjZQ0KPiAgICAgICk7DQo+IA0KPiAr
LyohIFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OU19TRVQNCj4gKyAgICBcYnJpZWYg
U2V0IHBlcm1pc3Npb25zIGZvciBhIFhlblN0b3JlIGtleQ0KPiArDQo+ICsgICAgXHBhcmFtIElu
dGVyZmFjZSBUaGUgaW50ZXJmYWNlIGhlYWRlcg0KPiArICAgIFxwYXJhbSBUcmFuc2FjdGlvbiBU
aGUgdHJhbnNhY3Rpb24gaGFuZGxlIChOVUxMIGlmIHRoaXMgaXMgbm90DQo+ICsgICAgcGFydCBv
ZiBhIHRyYW5zYWN0aW9uKQ0KPiArICAgIFxwYXJhbSBQcmVmaXggQW4gb3B0aW9uYWwgcHJlZml4
IGZvciB0aGUgXGEgTm9kZQ0KPiArICAgIFxwYXJhbSBOb2RlIFRoZSBjb25jYXRlbmF0aW9uIG9m
IHRoZSBcYSBQcmVmaXggYW5kIHRoaXMgdmFsdWUgc3BlY2lmaWVzDQo+ICsgICAgdGhlIFhlblN0
b3JlIGtleSB0byBzZXQgcGVybWlzc2lvbnMgb2YNCj4gKyAgICBccGFyYW0gUGVybWlzc2lvbnMg
QW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0DQo+ICsgICAgXHBhcmFtIE51bWJlclBlcm1p
c3Npb25zIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgXGEgUGVybWlzc2lvbnMNCj4gYXJyYXkN
Cj4gKyAqLw0KPiArdHlwZWRlZiBOVFNUQVRVUw0KPiArKCpYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TlNfU0VUKSgNCj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgICAgIEludGVyZmFj
ZSwNCj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAgIFRyYW5zYWN0aW9uIE9Q
VElPTkFMLA0KPiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgUHJlZml4IE9Q
VElPTkFMLA0KPiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgTm9kZSwNCj4g
KyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1pc3Npb25zLA0KPiArICAg
IElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVybWlzc2lvbnMNCj4gKyAg
ICApOw0KPiArDQo+ICAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEtMkYxRTNBRDIxNEQ3fQ0K
PiAgREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFLA0KPiAgMHg4NjgyNGMz
YiwgMHhkMzRlLCAweDQ3NTMsIDB4YjIsIDB4ODEsIDB4MmYsIDB4MWUsIDB4M2EsIDB4ZDIsIDB4
MTQsIDB4ZDcpOw0KPiANCj4gKy8qISBcc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1Yx
DQo+ICsgICAgXGJyaWVmIFNUT1JFIGludGVyZmFjZSB2ZXJzaW9uIDENCj4gKyAgICBcaW5ncm91
cCBpbnRlcmZhY2VzDQo+ICsgKi8NCj4gIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9W
MSB7DQo+ICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2U7DQo+
ICAgICAgWEVOQlVTX1NUT1JFX0FDUVVJUkUgICAgICAgICAgICBTdG9yZUFjcXVpcmU7DQo+IEBA
IC0yNjcsMTEgKzMxMCwyOCBAQCBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgew0K
PiAgICAgIFhFTkJVU19TVE9SRV9QT0xMICAgICAgICAgICAgICAgU3RvcmVQb2xsOw0KPiAgfTsN
Cj4gDQo+IC0vKiEgXHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMQ0KPiAtICAgIFxi
cmllZiBTVE9SRSBpbnRlcmZhY2UgdmVyc2lvbiAxDQo+ICsvKiEgXHN0cnVjdCBfWEVOQlVTX1NU
T1JFX0lOVEVSRkFDRV9WMg0KPiArICAgIFxicmllZiBTVE9SRSBpbnRlcmZhY2UgdmVyc2lvbiAy
DQo+ICAgICAgXGluZ3JvdXAgaW50ZXJmYWNlcw0KPiAgKi8NCj4gLXR5cGVkZWYgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxDQo+IFhFTkJVU19TVE9SRV9JTlRFUkZBQ0UsICpQWEVO
QlVTX1NUT1JFX0lOVEVSRkFDRTsNCj4gK3N0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9W
MiB7DQo+ICsgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2U7DQo+
ICsgICAgWEVOQlVTX1NUT1JFX0FDUVVJUkUgICAgICAgICAgICBTdG9yZUFjcXVpcmU7DQo+ICsg
ICAgWEVOQlVTX1NUT1JFX1JFTEVBU0UgICAgICAgICAgICBTdG9yZVJlbGVhc2U7DQo+ICsgICAg
WEVOQlVTX1NUT1JFX0ZSRUUgICAgICAgICAgICAgICBTdG9yZUZyZWU7DQo+ICsgICAgWEVOQlVT
X1NUT1JFX1JFQUQgICAgICAgICAgICAgICBTdG9yZVJlYWQ7DQo+ICsgICAgWEVOQlVTX1NUT1JF
X1BSSU5URiAgICAgICAgICAgICBTdG9yZVByaW50ZjsNCj4gKyAgICBYRU5CVVNfU1RPUkVfUkVN
T1ZFICAgICAgICAgICAgIFN0b3JlUmVtb3ZlOw0KPiArICAgIFhFTkJVU19TVE9SRV9ESVJFQ1RP
UlkgICAgICAgICAgU3RvcmVEaXJlY3Rvcnk7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1RSQU5TQUNU
SU9OX1NUQVJUICBTdG9yZVRyYW5zYWN0aW9uU3RhcnQ7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1RS
QU5TQUNUSU9OX0VORCAgICBTdG9yZVRyYW5zYWN0aW9uRW5kOw0KPiArICAgIFhFTkJVU19TVE9S
RV9XQVRDSF9BREQgICAgICAgICAgU3RvcmVXYXRjaEFkZDsNCj4gKyAgICBYRU5CVVNfU1RPUkVf
V0FUQ0hfUkVNT1ZFICAgICAgIFN0b3JlV2F0Y2hSZW1vdmU7DQo+ICsgICAgWEVOQlVTX1NUT1JF
X1BPTEwgICAgICAgICAgICAgICBTdG9yZVBvbGw7DQo+ICsgICAgWEVOQlVTX1NUT1JFX1BFUk1J
U1NJT05TX1NFVCAgICBTdG9yZVBlcm1pc3Npb25zU2V0Ow0KPiArfTsNCj4gKw0KPiArdHlwZWRl
ZiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjINCj4gWEVOQlVTX1NUT1JFX0lOVEVS
RkFDRSwgKlBYRU5CVVNfU1RPUkVfSU5URVJGQUNFOw0KPiANCj4gIC8qISBcZGVmIFhFTkJVU19T
VE9SRQ0KPiAgICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9kIGludm9jYXRpb24N
Cj4gQEAgLTI4Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVS
RkFDRV9WMQ0KPiBYRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19TVE9SRQ0KPiAgI2Vu
ZGlmICAvLyBfV0lORExMDQo+IA0KPiAgI2RlZmluZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZF
UlNJT05fTUlOICAxDQo+IC0jZGVmaW5lIFhFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVkVSU0lPTl9N
QVggIDENCj4gKyNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WRVJTSU9OX01BWCAgMg0K
PiANCj4gICNlbmRpZiAgLy8gX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfSA0KPiANCj4gZGlmZiAt
LWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5idXMvc3RvcmUuYw0KPiBpbmRleCAx
NmNhMzdiLi4yNjQyYmIzIDEwMDY0NA0KPiAtLS0gYS9zcmMveGVuYnVzL3N0b3JlLmMNCj4gKysr
IGIvc3JjL3hlbmJ1cy9zdG9yZS5jDQo+IEBAIC0yMzYsNiArMjM2LDczIEBAIGZhaWwxOg0KPiAg
ICAgIHJldHVybiBzdGF0dXM7DQo+ICB9DQo+IA0KPiArLy8gcHJlcGFyZSBhIHJlcXVlc3Qgd2l0
aCBrbm93biBudW1iZXIgb2YgZWxlbWVudHMNCj4gK3N0YXRpYyBOVFNUQVRVUw0KPiArU3RvcmVQ
cmVwYXJlUmVxdWVzdEZpeGVkKA0KPiArICAgIElOICBQWEVOQlVTX1NUT1JFX0NPTlRFWFQgICAg
ICAgQ29udGV4dCwNCj4gKyAgICBPVVQgUFhFTkJVU19TVE9SRV9SRVFVRVNUICAgICAgIFJlcXVl
c3QsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT04gICBUcmFuc2FjdGlvbiBP
UFRJT05BTCwNCj4gKyAgICBJTiAgZW51bSB4c2Rfc29ja21zZ190eXBlICAgICAgIFR5cGUsDQo+
ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfU0VHTUVOVCAgICAgICBTZWdtZW50cywNCj4gKyAgICBJ
TiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIE51bWJlclNlZ21lbnRzDQo+ICsgICAgKQ0K
PiArew0KPiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgSWQ7DQo+ICsgICAg
S0lSUUwgICAgICAgICAgICAgICAgICAgICAgICAgICBJcnFsOw0KPiArICAgIE5UU1RBVFVTICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOw0KPiArICAgIFVMT05HICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW5kZXg7DQo+ICsNCj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KFJlcXVl
c3QsIHNpemVvZiAoWEVOQlVTX1NUT1JFX1JFUVVFU1QpKSk7DQo+ICsNCj4gKyAgICBzdGF0dXMg
PSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgaWYgKE51bWJlclNlZ21lbnRzID4g
WEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVCAtIDEpDQo+IC8vIG5lZWQgb25lIGZv
ciB0aGUgaGVhZGVyDQo+ICsgICAgICAgIGdvdG8gZmFpbDE7DQo+ICsNCj4gKyAgICBpZiAoVHJh
bnNhY3Rpb24gIT0gTlVMTCkgew0KPiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNT
RlVMOw0KPiArICAgICAgICBpZiAoIVRyYW5zYWN0aW9uLT5BY3RpdmUpDQo+ICsgICAgICAgICAg
ICBnb3RvIGZhaWwyOw0KPiArDQo+ICsgICAgICAgIElkID0gVHJhbnNhY3Rpb24tPklkOw0KPiAr
ICAgIH0gZWxzZSB7DQo+ICsgICAgICAgIElkID0gMDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBS
ZXF1ZXN0LT5IZWFkZXIudHlwZSA9IFR5cGU7DQo+ICsgICAgUmVxdWVzdC0+SGVhZGVyLnR4X2lk
ID0gSWQ7DQo+ICsgICAgUmVxdWVzdC0+SGVhZGVyLmxlbiA9IDA7DQo+ICsNCj4gKyAgICBLZUFj
cXVpcmVTcGluTG9jaygmQ29udGV4dC0+TG9jaywgJklycWwpOw0KPiArICAgIFJlcXVlc3QtPkhl
YWRlci5yZXFfaWQgPSBDb250ZXh0LT5SZXF1ZXN0SWQrKzsNCj4gKyAgICBLZVJlbGVhc2VTcGlu
TG9jaygmQ29udGV4dC0+TG9jaywgSXJxbCk7DQo+ICsNCj4gKyAgICAvLyBoZWFkZXIgaXMgdGhl
IGZpcnN0LCB0aGVuIHRoZSBhY3R1YWwgZGF0YQ0KPiArICAgIFJlcXVlc3QtPkNvdW50ID0gTnVt
YmVyU2VnbWVudHMgKyAxOw0KPiArDQo+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5EYXRhID0g
KFBDSEFSKSZSZXF1ZXN0LT5IZWFkZXI7DQo+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5PZmZz
ZXQgPSAwOw0KPiArICAgIFJlcXVlc3QtPlNlZ21lbnRbMF0uTGVuZ3RoID0gc2l6ZW9mKHN0cnVj
dCB4c2Rfc29ja21zZyk7DQo+ICsNCg0KSSBkb24ndCB0aGluayB5b3UgbmVlZCB0aGlzIG5ldyBm
dW5jdGlvbi4gU2VlIGJlbG93Li4uDQoNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBO
dW1iZXJTZWdtZW50czsgSW5kZXgrKykgew0KPiArICAgICAgICBSZXF1ZXN0LT5TZWdtZW50W0lu
ZGV4KzFdLkRhdGEgPSBTZWdtZW50c1tJbmRleF0uRGF0YTsNCj4gKyAgICAgICAgUmVxdWVzdC0+
U2VnbWVudFtJbmRleCsxXS5PZmZzZXQgPSAwOw0KPiArICAgICAgICBSZXF1ZXN0LT5TZWdtZW50
W0luZGV4KzFdLkxlbmd0aCA9IFNlZ21lbnRzW0luZGV4XS5MZW5ndGg7DQo+ICsNCj4gKyAgICAg
ICAgUmVxdWVzdC0+SGVhZGVyLmxlbiArPSBTZWdtZW50c1tJbmRleF0uTGVuZ3RoOw0KPiArICAg
IH0NCj4gKw0KPiArICAgIFJlcXVlc3QtPlN0YXRlID0gWEVOQlVTX1NUT1JFX1JFUVVFU1RfUFJF
UEFSRUQ7DQo+ICsNCj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7DQo+ICsNCj4gK2ZhaWwy
Og0KPiArICAgIEVycm9yKCJmYWlsMlxuIik7DQo+ICsNCj4gK2ZhaWwxOg0KPiArICAgIEVycm9y
KCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7DQo+ICsgICAgcmV0dXJuIHN0YXR1czsNCj4gK30N
Cj4gKw0KPiAgc3RhdGljIFVMT05HDQo+ICBTdG9yZUNvcHlUb1JpbmcoDQo+ICAgICAgSU4gIFBY
RU5CVVNfU1RPUkVfQ09OVEVYVCAgICAgICAgICAgQ29udGV4dCwNCj4gQEAgLTQzOSw3ICs1MDYs
NiBAQCBTdG9yZUlnbm9yZUhlYWRlclR5cGUoDQo+ICAgICAgY2FzZSBYU19SRUxFQVNFOg0KPiAg
ICAgIGNhc2UgWFNfR0VUX0RPTUFJTl9QQVRIOg0KPiAgICAgIGNhc2UgWFNfTUtESVI6DQo+IC0g
ICAgY2FzZSBYU19TRVRfUEVSTVM6DQo+ICAgICAgY2FzZSBYU19JU19ET01BSU5fSU5UUk9EVUNF
RDoNCj4gICAgICBjYXNlIFhTX1JFU1VNRToNCj4gICAgICBjYXNlIFhTX1NFVF9UQVJHRVQ6DQo+
IEBAIC00NjcsNiArNTMzLDcgQEAgU3RvcmVWZXJpZnlIZWFkZXIoDQo+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19UUkFOU0FDVElPTl9FTkQgJiYNCj4gICAgICAgICAgSGVhZGVyLT50eXBl
ICE9IFhTX1dSSVRFICYmDQo+ICAgICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19STSAmJg0KPiAr
ICAgICAgICBIZWFkZXItPnR5cGUgIT0gWFNfU0VUX1BFUk1TICYmDQo+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19XQVRDSF9FVkVOVCAmJg0KPiAgICAgICAgICBIZWFkZXItPnR5cGUgIT0g
WFNfRVJST1IgJiYNCj4gICAgICAgICAgIVN0b3JlSWdub3JlSGVhZGVyVHlwZShIZWFkZXItPnR5
cGUpKSB7DQo+IEBAIC0xNzg4LDYgKzE4NTUsMTU3IEBAIFN0b3JlUG9sbCgNCj4gICAgICBLZVJl
bGVhc2VTcGluTG9ja0Zyb21EcGNMZXZlbCgmQ29udGV4dC0+TG9jayk7DQo+ICB9DQo+IA0KPiAr
c3RhdGljIE5UU1RBVFVTDQo+ICtTdG9yZVBlcm1pc3Npb25Ub1N0cmluZygNCj4gKyAgICBJTiAg
UFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OIFBlcm1pc3Npb24sDQo+ICsgICAgSU4gIFVMT05HIEJ1
ZmZlclNpemUsDQo+ICsgICAgT1VUIFBDSEFSIEJ1ZmZlcg0KPiArICAgICkNCj4gK3sNCj4gKyAg
ICBOVFNUQVRVUyBzdGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsNCj4gKyAg
ICBBU1NFUlQoQnVmZmVyU2l6ZSA+IDEpOw0KPiArDQo+ICsgICAgc3dpdGNoIChQZXJtaXNzaW9u
LT5NYXNrKSB7DQo+ICsgICAgY2FzZSBYU19QRVJNX1dSSVRFOg0KPiArICAgICAgICAqQnVmZmVy
ID0gJ3cnOw0KPiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFhTX1BFUk1fUkVBRDoNCj4g
KyAgICAgICAgKkJ1ZmZlciA9ICdyJzsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgY2FzZSBY
U19QRVJNX1JFQUQgfCBYU19QRVJNX1dSSVRFOg0KPiArICAgICAgICAqQnVmZmVyID0gJ2InOw0K
PiArICAgICAgICBicmVhazsNCj4gKyAgICBjYXNlIFhTX1BFUk1fTk9ORToNCj4gKyAgICAgICAg
KkJ1ZmZlciA9ICduJzsNCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgZGVmYXVsdDoNCj4gKyAg
ICAgICAgZ290byBmYWlsMTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICByZXR1cm4gUnRsU3RyaW5n
Q2JQcmludGZBKEJ1ZmZlciArIDEsIEJ1ZmZlclNpemUgLSAxLCAiJXUiLCBQZXJtaXNzaW9uLQ0K
PiA+RG9tYWluKTsNCj4gKw0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxu
Iiwgc3RhdHVzKTsNCj4gKyAgICByZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg
TlRTVEFUVVMNCj4gK1N0b3JlUGVybWlzc2lvbnNTZXQoDQo+ICsgICAgSU4gIFBJTlRFUkZBQ0Ug
ICAgICAgICAgICAgICAgICBJbnRlcmZhY2UsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfVFJB
TlNBQ1RJT04gICBUcmFuc2FjdGlvbiBPUFRJT05BTCwNCj4gKyAgICBJTiAgUENIQVIgICAgICAg
ICAgICAgICAgICAgICAgIFByZWZpeCBPUFRJT05BTCwNCj4gKyAgICBJTiAgUENIQVIgICAgICAg
ICAgICAgICAgICAgICAgIE5vZGUsDQo+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TiAgICBQZXJtaXNzaW9ucywNCj4gKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAg
IE51bWJlclBlcm1pc3Npb25zDQo+ICsgICAgKQ0KPiArew0KPiArICAgIFBYRU5CVVNfU1RPUkVf
Q09OVEVYVCAgICAgICAgICAgQ29udGV4dCA9IEludGVyZmFjZS0+Q29udGV4dDsNCj4gKyAgICBY
RU5CVVNfU1RPUkVfUkVRVUVTVCAgICAgICAgICAgIFJlcXVlc3Q7DQo+ICsgICAgUFhFTkJVU19T
VE9SRV9SRVNQT05TRSAgICAgICAgICBSZXNwb25zZTsNCj4gKyAgICBOVFNUQVRVUyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1czsNCj4gKyAgICBYRU5CVVNfU1RPUkVfU0VHTUVOVA0KPiBT
ZWdtZW50c1tYRU5CVVNfU1RPUkVfUkVRVUVTVF9TRUdNRU5UX0NPVU5UXTsNCj4gKyAgICBVTE9O
RyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LCBCdWZmZXJTaXplOw0KPiArICAgIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCA9IE5VTEw7DQo+ICsNCj4gKyAgICBz
dGF0dXMgPSBTVEFUVVNfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICsgICAgaWYgKE51bWJlclBlcm1p
c3Npb25zID4gWEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVCAtDQo+IDIpIC8vIDEg
Zm9yIHBhdGgsIDEgZm9yIGhlYWRlciBpbiBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQNCj4gKyAg
ICAgICAgZ290byBmYWlsMTsNCj4gKw0KPiArICAgIGlmIChQcmVmaXggIT0gTlVMTCkgew0KPiAr
ICAgICAgICAvLyB3ZSdyZSBjb25jYXRlbmF0aW5nIGl0IGhlcmUgaW5zdGVhZCBvZiBwYXNzaW5n
IHRvDQo+IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBz
ZWdtZW50cyB1c2VkDQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT19NRU1PUlk7DQo+ICsg
ICAgICAgIFBhdGggPSBfX1N0b3JlQWxsb2NhdGUoWEVOU1RPUkVfQUJTX1BBVEhfTUFYKTsNCj4g
KyAgICAgICAgaWYgKFBhdGggPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdvdG8gZmFpbDI7DQo+
ICsNCj4gKyAgICAgICAgc3RhdHVzID0gUnRsU3RyaW5nQ2JQcmludGZBKFBhdGgsIFhFTlNUT1JF
X0FCU19QQVRIX01BWCwNCj4gIiVzLyVzIiwgUHJlZml4LCBOb2RlKTsNCj4gKyAgICAgICAgQVNT
RVJUKE5UX1NVQ0NFU1Moc3RhdHVzKSk7DQo+ICsgICAgICAgIE5vZGUgPSBQYXRoOw0KPiArICAg
IH0NCj4gKw0KPiArICAgIFJ0bFplcm9NZW1vcnkoJlJlcXVlc3QsIHNpemVvZihYRU5CVVNfU1RP
UkVfUkVRVUVTVCkpOw0KPiArICAgIFJ0bFplcm9NZW1vcnkoU2VnbWVudHMsIHNpemVvZihTZWdt
ZW50cykpOw0KPiArDQo+ICsgICAgU2VnbWVudHNbMF0uRGF0YSA9IE5vZGU7IC8vIHBhdGgNCj4g
KyAgICBTZWdtZW50c1swXS5PZmZzZXQgPSAwOw0KPiArICAgIFNlZ21lbnRzWzBdLkxlbmd0aCA9
IChVTE9ORylzdHJsZW4oTm9kZSkgKyAxOyAvLyB6ZXJvIHRlcm1pbmF0b3INCj4gcmVxdWlyZWQN
Cj4gKw0KPiArICAgIEJ1ZmZlclNpemUgPSAxNjsNCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5k
ZXggPCBOdW1iZXJQZXJtaXNzaW9uczsgSW5kZXgrKykgew0KPiArICAgICAgICBTZWdtZW50c1tJ
bmRleCArIDFdLkRhdGEgPSBfX1N0b3JlQWxsb2NhdGUoQnVmZmVyU2l6ZSk7DQo+ICsgICAgICAg
IGlmIChTZWdtZW50c1tJbmRleCArIDFdLkRhdGEgPT0gTlVMTCkNCj4gKyAgICAgICAgICAgIGdv
dG8gZmFpbDM7DQo+ICsNCj4gKyAgICAgICAgc3RhdHVzID0gU3RvcmVQZXJtaXNzaW9uVG9TdHJp
bmcoJlBlcm1pc3Npb25zW0luZGV4XSwgQnVmZmVyU2l6ZSwNCj4gU2VnbWVudHNbSW5kZXgrMV0u
RGF0YSk7DQo+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICAg
ICAgZ290byBmYWlsNDsNCj4gKw0KPiArICAgICAgICBTZWdtZW50c1tJbmRleCArIDFdLkxlbmd0
aCA9IChVTE9ORylzdHJsZW4oU2VnbWVudHNbSW5kZXggKw0KPiAxXS5EYXRhKSArIDE7IC8vIHpl
cm8gdGVybWluYXRvciByZXF1aXJlZA0KPiArICAgIH0NCj4gKw0KPiArICAgIHN0YXR1cyA9IFN0
b3JlUHJlcGFyZVJlcXVlc3RGaXhlZChDb250ZXh0LA0KPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmUmVxdWVzdCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHJhbnNhY3Rpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFhTX1NFVF9QRVJNUywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2VnbWVudHMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE51bWJlclBlcm1pc3Npb25zICsgMSk7DQo+ICsNCg0KU2VnbWVudHMgYXJlIG9ubHkgYSBj
b2RpbmcgY29udmVuaWVuY2UuLi4gT24gdGhlICd3aXJlJyB0aGV5IGFyZSBqdXN0IGNvbmNhdGVu
YXRlZC4gU28gSSB0aGluayBhbGwgeW91IG5lZWQgdG8gaXMgcHJlcGFyZSBjaGFyYWN0ZXIgYnVm
ZmVyIHdpdGggYSBOVUwgc2VwYXJhdGVkIGxpc3Qgb2YgPHBlcm0+PGRvbWlkPiBzdHJpbmdzIGFu
ZCB0aGVuIHBhc3MgdGhhdCBhcyBhbiBhcmcgdG8gdGhlIG5vcm1hbCBlbGxpcHNpcyBTdG9yZVBy
ZXBhcmVSZXF1ZXN0KCkuIE5vIG5lZWQgZm9yIHRoZSBleHRyYSBjb21wbGV4aXR5IG9mIGEgbmV3
IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCgpLg0KDQogIFBhdWwNCg0KPiArICAgIGlmICghTlRf
U1VDQ0VTUyhzdGF0dXMpKQ0KPiArICAgICAgICBnb3RvIGZhaWw1Ow0KPiArDQo+ICsgICAgUmVz
cG9uc2UgPSBTdG9yZVN1Ym1pdFJlcXVlc3QoQ29udGV4dCwgJlJlcXVlc3QpOw0KPiArDQo+ICsg
ICAgc3RhdHVzID0gU1RBVFVTX05PX01FTU9SWTsNCj4gKyAgICBpZiAoUmVzcG9uc2UgPT0gTlVM
TCkNCj4gKyAgICAgICAgZ290byBmYWlsNjsNCj4gKw0KPiArICAgIHN0YXR1cyA9IFN0b3JlQ2hl
Y2tSZXNwb25zZShSZXNwb25zZSk7DQo+ICsgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpDQo+
ICsgICAgICAgIGdvdG8gZmFpbDc7DQo+ICsNCj4gKyAgICBTdG9yZUZyZWVSZXNwb25zZShSZXNw
b25zZSk7DQo+ICsgICAgQVNTRVJUKElzWmVyb01lbW9yeSgmUmVxdWVzdCwgc2l6ZW9mKFhFTkJV
U19TVE9SRV9SRVFVRVNUKSkpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJl
clBlcm1pc3Npb25zOyBJbmRleCsrKQ0KPiArICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJ
bmRleCArIDFdLkRhdGEpOw0KPiArDQo+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkNCj4gKyAgICAg
ICAgX19TdG9yZUZyZWUoUGF0aCk7DQo+ICsNCj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7
DQo+ICsNCj4gK2ZhaWw3Og0KPiArICAgIEVycm9yKCJmYWlsN1xuIik7DQo+ICsgICAgU3RvcmVG
cmVlUmVzcG9uc2UoUmVzcG9uc2UpOw0KPiArDQo+ICtmYWlsNjoNCj4gKyAgICBFcnJvcigiZmFp
bDZcbiIpOw0KPiArDQo+ICtmYWlsNToNCj4gKyAgICBFcnJvcigiZmFpbDVcbiIpOw0KPiArDQo+
ICtmYWlsNDoNCj4gKyAgICBFcnJvcigiZmFpbDRcbiIpOw0KPiArDQo+ICtmYWlsMzoNCj4gKyAg
ICBFcnJvcigiZmFpbDNcbiIpOw0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJl
clBlcm1pc3Npb25zOyBJbmRleCsrKQ0KPiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAx
XS5EYXRhICE9IE5VTEwpDQo+ICsgICAgICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRl
eCArIDFdLkRhdGEpOw0KPiArDQo+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkNCj4gKyAgICAgICAg
X19TdG9yZUZyZWUoUGF0aCk7DQo+ICsNCj4gK2ZhaWwyOg0KPiArICAgIEVycm9yKCJmYWlsMlxu
Iik7DQo+ICsNCj4gKw0KPiArZmFpbDE6DQo+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwg
c3RhdHVzKTsNCj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2YoWEVO
QlVTX1NUT1JFX1JFUVVFU1QpKSk7DQo+ICsgICAgcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0K
PiAgc3RhdGljDQo+ICBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpDQo+ICBfSVJR
TF9yZXF1aXJlc18oSElHSF9MRVZFTCkNCj4gQEAgLTIyODUsNiArMjUwMywyMyBAQCBzdGF0aWMg
c3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxDQo+IFN0b3JlSW50ZXJmYWNlVmVyc2lv
bjEgPSB7DQo+ICAgICAgU3RvcmVQb2xsDQo+ICB9Ow0KPiANCj4gK3N0YXRpYyBzdHJ1Y3QgX1hF
TkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIgU3RvcmVJbnRlcmZhY2VWZXJzaW9uMiA9IHsNCj4gKyAg
ICB7IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIpLCAyLCBOVUxMLCBO
VUxMLCBOVUxMIH0sDQo+ICsgICAgU3RvcmVBY3F1aXJlLA0KPiArICAgIFN0b3JlUmVsZWFzZSwN
Cj4gKyAgICBTdG9yZUZyZWUsDQo+ICsgICAgU3RvcmVSZWFkLA0KPiArICAgIFN0b3JlUHJpbnRm
LA0KPiArICAgIFN0b3JlUmVtb3ZlLA0KPiArICAgIFN0b3JlRGlyZWN0b3J5LA0KPiArICAgIFN0
b3JlVHJhbnNhY3Rpb25TdGFydCwNCj4gKyAgICBTdG9yZVRyYW5zYWN0aW9uRW5kLA0KPiArICAg
IFN0b3JlV2F0Y2hBZGQsDQo+ICsgICAgU3RvcmVXYXRjaFJlbW92ZSwNCj4gKyAgICBTdG9yZVBv
bGwsDQo+ICsgICAgU3RvcmVQZXJtaXNzaW9uc1NldCwNCj4gK307DQo+ICsNCj4gIE5UU1RBVFVT
DQo+ICBTdG9yZUluaXRpYWxpemUoDQo+ICAgICAgSU4gIFBYRU5CVVNfRkRPICAgICAgICAgICAg
IEZkbywNCj4gQEAgLTIzODQsNiArMjYxOSwyMyBAQCBTdG9yZUdldEludGVyZmFjZSgNCj4gICAg
ICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7DQo+ICAgICAgICAgIGJyZWFrOw0KPiAgICAg
IH0NCj4gKyAgICBjYXNlIDI6IHsNCj4gKyAgICAgICAgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5U
RVJGQUNFX1YyICAqU3RvcmVJbnRlcmZhY2U7DQo+ICsNCj4gKyAgICAgICAgU3RvcmVJbnRlcmZh
Y2UgPSAoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyICopSW50ZXJmYWNlOw0KPiAr
DQo+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19CVUZGRVJfT1ZFUkZMT1c7DQo+ICsgICAgICAg
IGlmIChTaXplIDwgc2l6ZW9mKHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMikpDQo+
ICsgICAgICAgICAgICBicmVhazsNCj4gKw0KPiArICAgICAgICAqU3RvcmVJbnRlcmZhY2UgPSBT
dG9yZUludGVyZmFjZVZlcnNpb24yOw0KPiArDQo+ICsgICAgICAgIEFTU0VSVDNVKEludGVyZmFj
ZS0+VmVyc2lvbiwgPT0gLCBWZXJzaW9uKTsNCj4gKyAgICAgICAgSW50ZXJmYWNlLT5Db250ZXh0
ID0gQ29udGV4dDsNCj4gKw0KPiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsNCj4g
KyAgICAgICAgYnJlYWs7DQo+ICsgICAgfQ0KPiAgICAgIGRlZmF1bHQ6DQo+ICAgICAgICAgIHN0
YXR1cyA9IFNUQVRVU19OT1RfU1VQUE9SVEVEOw0KPiAgICAgICAgICBicmVhazsNCj4gDQo+IF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IHdpbi1wdi1k
ZXZlbCBtYWlsaW5nIGxpc3QNCj4gd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
IGh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2lu
LXB2LWRldmVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:30:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:30:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnKk-0005cX-KF; Fri, 04 Sep 2015 09:30:58 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnKj-0005cJ-F7
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:30:57 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	9B/7E-19125-0D469E55; Fri, 04 Sep 2015 09:30:56 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441359055!25174912!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9337 invoked from network); 4 Sep 2015 09:30:55 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:30:55 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456731"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Fabio Fantoni
	<fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwA=
Date: Fri, 4 Sep 2015 09:30:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiBTZW50OiAw
MiBTZXB0ZW1iZXIgMjAxNSAxMDowMA0KPiBUbzogRmFiaW8gRmFudG9uaTsgUmFmYcWCIFdvamR5
xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IFN0ZWZhbm8gU3Rh
YmVsbGluaQ0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52
YmQNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBGYWJpbyBG
YW50b25pIFttYWlsdG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiA+IFNlbnQ6IDAyIFNlcHRl
bWJlciAyMDE1IDA5OjU0DQo+ID4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdvamR5xYJhOyB3
aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJk
DQo+ID4NCj4gPiBJbCAwMS8wOS8yMDE1IDE2OjQxLCBQYXVsIER1cnJhbnQgaGEgc2NyaXR0bzoN
Cj4gPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4+IEZyb206IEZhYmlvIEZh
bnRvbmkgW21haWx0bzpmYWJpby5mYW50b25pQG0yci5iaXpdDQo+ID4gPj4gU2VudDogMjEgQXVn
dXN0IDIwMTUgMTQ6MTQNCj4gPiA+PiBUbzogUmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7
IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+ID4+IFN1YmplY3Q6IFJlOiBb
d2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiA+ID4+DQo+ID4gPj4gSWwgMjEv
MDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBzY3JpdHRvOg0KPiA+ID4+PiBJbCAyMS8w
OC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0bzoNCj4gPiA+Pj4+IE9uIDIw
MTUtMDgtMTkgMjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPiA+Pj4+Pj4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPiA+Pj4+Pj4gd2luLXB2LWRldmVsLWJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4gPj4+Pj4+IGJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNl
bnQ6IDE4DQo+ID4gPj4+Pj4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4tcHYtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcgU3ViamVjdDoNCj4gPiA+Pj4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJv
YmxlbXMgd2l0aCB4ZW52YmQNCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4gSGksDQo+ID4gPj4+Pj4+
DQo+ID4gPj4+Pj4+IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50IHB2ZHJpdmVycyBjb2Rl
IGluIHByZXBhcmF0aW9uIGZvcg0KPiA+ID4+Pj4+PiBjcmVhdGluZyB1cHN0cmVhbSBwYXRjaGVz
IGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZA0KPiA+ID4+Pj4+PiB0aGFu
IHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlm
IGl0J3MNCj4gPiA+Pj4+Pj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2Rl
IGJlY2F1c2UgaXQgc2VlbWVkIHRvIG9ubHkNCj4gPiA+Pj4+Pj4gbWFuaWZlc3Qgd2hlbiB0aGUg
ZnVsbCBzdWl0ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZw0KPiA+ID4+
Pj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBj
cmFzaGVkIHdpdGgNCj4gPiA+Pj4+Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGluIHNlZW1p
bmdseSByYW5kb20gcHJvY2Vzc2VzIHNob3J0bHkNCj4gPiA+Pj4+Pj4gYWZ0ZXIgc3RhcnQuIERy
aXZlciBWZXJpZmllciBkaWRuJ3Qgc2VlbSB0byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbg0KPiA+
ID4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBj
cmFzaDEudHh0Lg0KPiA+ID4+Pj4+Pg0KPiA+ID4+Pj4+PiBUb2RheSBJIHRyaWVkIHRvIHBlcmZv
cm0gc29tZSBtb3JlIHRlc3RzIGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXINCj4gPiA+Pj4+Pj4g
Z3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJl
DQo+ID4gPj4+Pj4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNlIG5vdyBEcml2ZXIgVmVyaWZp
ZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+ID4+Pj4+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52
YmQgKHNlZSBjcmFzaDIudHh0KS4gSSBkb24ndCBrbm93IHdoeSBpdA0KPiA+ID4+Pj4+PiBkaWRu
J3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhl
DQo+ID4gPj4+Pj4+IG9mZmVuZGluZyB3YWl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0
cnkgdGhhdCB0byBzZWUgaWYgSSBjYW4NCj4gPiA+Pj4+Pj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91
cyBtZW1vcnkgY29ycnVwdGlvbnMuDQo+ID4gPj4+Pj4+DQo+ID4gPj4+Pj4gVGhvc2UgY3Jhc2hl
cyBkbyBsb29rIG9kZC4gSSdtIG9uIFBUTyBmb3IgdGhlIG5leHQgd2VlayBidXQgSSdsbA0KPiBo
YXZlDQo+ID4gPj4+Pj4gYSBsb29rIHdoZW4gSSBnZXQgYmFjayB0byB0aGUgb2ZmaWNlLiBJIGRp
ZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQ0KPiA+ID4+Pj4+IGRyaXZlcnMgYSB3ZWVrIG9yIHNv
IGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBidXQNCj4gPiA+Pj4+
PiB0aGVyZSBoYXZlIGJlZW4gYSBjb3VwbGUgb2YgY2hhbmdlcyBzaW5jZSB0aGVuLg0KPiA+ID4+
Pj4+DQo+ID4gPj4+Pj4gUGF1bA0KPiA+ID4+Pj4+DQo+ID4gPj4+PiBObyBwcm9ibGVtLiBJIGF0
dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZw0KPiA+IHN5c3Rl
bQ0KPiA+ID4+Pj4gc2h1dGRvd24sIGFmdGVyIHRoYXQgdGhlIE9TIGZhaWxlZCB0byBib290IChw
cm9iYWJseSBjb3JydXB0ZWQNCj4gPiA+Pj4+IGZpbGVzeXN0ZW0gc2luY2UgdGhlIEJTT0QgaXRz
ZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluaw0KPiBldmVyeQ0KPiA+ID4+Pj4g
dGltZSB0aGVyZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0
IGZhbWlsaWFyDQo+ID4gd2l0aA0KPiA+ID4+Pj4gWGVuIFBWIGRldmljZSBpbnRlcmZhY2VzIHNv
IG5vdCBzdXJlIHdoYXQgdGhhdCBtZWFucy4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBJbiB0aGUgbWVh
bnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFjZSBkcml2ZXIN
Cj4gdG8NCj4gPiA+Pj4+IG1ha2Ugc3VyZSBpdCdzIG5vdCBjb250cmlidXRpbmcgdG8gdGhlc2Ug
aXNzdWVzIGJ1dCBldmVyeXRoaW5nDQo+IHNlZW1lZA0KPiA+IHRvDQo+ID4gPj4+PiBiZSBmaW5l
IHRoZXJlLg0KPiA+ID4+Pj4NCj4gPiA+Pj4+DQo+ID4gPj4+IEkgYWxzbyBoYWQgYSBkaXNrIGNv
cnJ1cHRpb24gb24gd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycw0KPiA+ID4+
PiBidWlsZCBvZiAxMSBhdWd1c3QgYnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8g
d2lucHYgZHJpdmVycywNCj4gPiA+Pj4gb24gc2FtZSBkb21VIEkgc3RhcnRlZCB0ZXN0aW5nIGFs
c28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJsYXkuDQo+ID4gPj4+IEZvciB0aGlzIGNh
c2UgSSBkb24ndCBoYXZlIHVzZWZ1bCBpbmZvcm1hdGlvbiBiZWNhdXNlIGRvbid0IHRyeSB0bw0K
PiA+ID4+PiBib290IHdpbmRvd3MgYXQgYWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0
YWtlIG90aGVyIHVzZWZ1bA0KPiA+ID4+PiBpbmZvcm1hdGlvbi4NCj4gPiA+PiBIYXBwZW4gYW5v
dGhlciB0aW1lIGJ1dCBhbHNvIHRoaXMgSSB3YXMgdW5hYmxlIHRvIHVuZGVyc3RhbmQgd2hhdCBp
cw0KPiA+ID4+IGV4YWN0bHkgdGhlIGNhdXNlLg0KPiA+ID4+IE9uIHdpbmRvd3MgcmVib290IGFs
bCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0KPiA+ID4+IHJl
Ym9vdCBzZWFiaW9zIGRvbid0IGZvdW5kIGJvb3RhYmxlIGRpc2sgYW5kIHFlbXUgbG9nIGRvbid0
IHNob3cNCj4gdXNlZnVsDQo+ID4gPj4gaW5mb3JtYXRpb25zLg0KPiA+ID4+IHFlbXUtaW1nIGNo
ZWNrIHNob3cgZXJyb3JzOg0KPiA+ID4+PiAvdXNyL2xpYi94ZW4vYmluL3FlbXUtaW1nIGNoZWNr
IFcxMC5kaXNrMS5jb3ctc24xDQo+ID4gPj4+IEVSUk9SIGNsdXN0ZXIgMTQzIHJlZmNvdW50PTEg
cmVmZXJlbmNlPTINCj4gPiA+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVy
ZW5jZT0wDQo+ID4gPj4+IEVSUk9SIGNsdXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0y
DQo+ID4gPj4+IExlYWtlZCBjbHVzdGVyIDI3MDMgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+
ID4+PiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+Pj4g
TGVha2VkIGNsdXN0ZXIgMTMzNzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4+Pg0KPiA+
ID4+PiAyIGVycm9ycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4NCj4gPiA+Pj4gRGF0YSBtYXkg
YmUgY29ycnVwdGVkLCBvciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQg
aXQuDQo+ID4gPj4+DQo+ID4gPj4+IDQgbGVha2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhl
IGltYWdlLg0KPiA+ID4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sgc3BhY2UsIGJ1dCBubyBo
YXJtIHRvIGRhdGEuDQo+ID4gPj4+IDI3ODUzLzgxOTIwMCA9IDMuNDAlIGFsbG9jYXRlZCwgMjIu
NjUlIGZyYWdtZW50ZWQsIDAuMDAlDQo+IGNvbXByZXNzZWQNCj4gPiA+Pj4gY2x1c3RlcnMNCj4g
PiA+Pj4gSW1hZ2UgZW5kIG9mZnNldDogMTg1MDczNjY0MA0KPiA+ID4+IEkgY3JlYXRlZCBpdCB3
aXRoOg0KPiA+ID4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vDQo+ID4gPj4g
YmFja2luZ19maWxlPVcxMC5kaXNrMS54bSxiYWNraW5nX2ZtdD1yYXcgLWYgcWNvdzIgVzEwLmRp
c2sxLmNvdy0NCj4gPiBzbjENCj4gPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBjb25maWd1
cmF0aW9uOg0KPiA+ID4+IGRpc2s9WycvbW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293Mixo
ZGEscncnLC4uLg0KPiA+ID4+IERvbTAgaXMgd2l0aCB4ZW4gNC42LXJjMSBhbmQgcWVtdSAyLjQu
MA0KPiA+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycyBi
dWlsZCBvZiAxMSBhdWd1c3QNCj4gPiA+Pg0KPiA+ID4+IEhvdyBJIGNhbiBrbm93IGZvciBzdXJl
IGlmIGl0IGlzIGEgd2lucHYgb3IgcWVtdSBvciBvdGhlciBwcm9ibGVtIGFuZA0KPiA+ID4+IHRh
a2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPiA+Pg0KPiA+ID4+IFRoYW5rcyBm
b3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guDQo+ID4gPiBUaGlzIHNv
dW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4g
SSByZWNhbGwNCj4gPiBzZWVpbmcgb3RoZXIgcHJvYmxlbXMgb2YgdGhpcyBpbGsgd2hlbiBzb21l
b25lIHdhcyBtZXNzaW5nIGFyb3VuZCB3aXRoDQo+ID4gT19ESVJFQ1QgZm9yIG9wZW5pbmcgaW1h
Z2VzLiBJIHdvbmRlciBpZiB3ZSBhcmUgbWlzc2luZyBhIGZsdXNoIG9wZXJhdGlvbg0KPiA+IG9u
IHNodXRkb3duLg0KPiA+ID4NCj4gPiA+ICAgIFBhdWwNCj4gPiA+DQo+ID4gVGhhbmtzIGZvciBy
ZXBseS4NCj4gPiBJIGRpZCBhIGZhc3Qgc2VhcmNoIGJ1dCBJIG5vdCBmb3VuZCBPX0RJUkVDVCBn
cmVwcGluZyBpbiBsaWJ4bCwgSSBmb3VuZA0KPiA+IGl0IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiA+
IEFmdGVyIEkgdHJpZWQgd2l0aCBwYXRjaCB0aGF0IHNlZW1zIGFkZGVkIHNldHRpbmcgb2YgaXQg
Zm9yIHhlbjoNCj4gPg0KPiBodHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0
ZGlmZjtoPTQ1NGFlNzM0ZjFkOWY1OTEzNDVmYTc4DQo+ID4gMzc2NDM1YThlNzRiYjRlZGQNCj4g
PiBDaGVja2luZyBpbiBsaWJ4bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNv
bWUgb2xkIHhlbiBwb3N0DQo+ID4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1z
Lg0KPiA+IEkgc2hvdWxkIHRyeSBpdCBlbmFibGUgZGlyZWN0LWlvLXNhZmUgaW4gZG9tVXMgcWNv
dzIgZGlza3M/DQo+ID4gQWRkZWQgYWxzbyBTdGVmYW5vIFN0YWJlbGxpbmkgYXMgY2MuDQo+ID4g
QFN0ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1cyBhbmQg
cmVzdWx0IG9mDQo+ID4gZGlyZWN0LWlvLXNhZmU/DQo+ID4gU29ycnkgaXMgdGhlIHF1ZXN0aW9u
IGFyZSBzdHVwaWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkNCj4gPiBwb3N0
IG9mIGxhdGVzdCB5ZWFycyBhcmUgY29uZnVzZWQgYW5kIGluIHNhbWUgY2FzZXMgc2VlbXMgYWxz
bw0KPiA+IGNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3JtYW5j
ZSB1c2luZyBpdCBvciBub3QuDQo+ID4gSW4gcGFydGljdWxhciBzZWVtcyBjcmFzaCB3aXRoIHNv
bWUga2VybmVscyBidXQgSSBub3QgdW5kZXJzdGFuZCBleGFjdGx5DQo+ID4gd2hhdCB2ZXJzaW9u
cyBhbmQvb3Igd2l0aCB3aGljaCBwYXRjaGVzLg0KPiA+DQo+ID4gQFBhdWwgRHVycmFudDogaGF2
ZSB5b3Ugc2VlIG15IG90aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkNCj4g
PiBsYXRlc3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2IGZpbGUgd2luZG93cyBkb21V
cyB3aXRoIG5ldyBwdg0KPiA+IGRyaXZlciBkb24ndCBib290IGFuZCBmb3Igc3RpbGwgYm9vdCBp
dCBjb3JyZWN0bHkgSSBtdXN0IHJlYWRkIHVkZXYNCj4gPiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1
bmV4cGVjdGVkIGNhc2UgcmVsYXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMNCj4gPiBkaWZmZXJl
bnQ/DQo+ID4gaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC93aW4tcHYtZGV2ZWwv
MjAxNS0wOC9tc2cwMDAzMy5odG1sDQo+ID4NCj4gDQo+IEknbSBub3Qgc3VyZSB3aHkgdWRldiB3
b3VsZCBiZSBhbiBpc3N1ZSBoZXJlLiBUaGUgcHJvYmxlbSB5b3UgaGF2ZQ0KPiBhcHBlYXJzIHRv
IGJlIFFFTVUgaWdub3JpbmcgdGhlIHJlcXVlc3QgdG8gdW5wbHVnIGVtdWxhdGVkIGRpc2tzLiBJ
J3ZlIG5vdA0KPiBzZWVuIHRoaXMgYmVoYXZpb3VyIG9uIG15IHRlc3QgYm94IHNvIEknbGwgbmVl
ZCB0byBkaWcgc29tZSBtb3JlLg0KPiANCg0KSSBub3RpY2UgeW91IGhhdmUgNiBJREUgY2hhbm5l
bHM/IEFyZSB5b3UgdXNpbmcgQUhDSSBieSBhbnkgY2hhbmNlPyBJZiB5b3UgYXJlIHRoZW4gaXQg
bG9va3MgbGlrZSBRRU1VIGlzIG5vdCBob25vdXJpbmcgdGhlIHVucGx1ZyByZXF1ZXN0Li4uIHRo
YXQgd291bGQgYmUgd2hlcmUgdGhlIGJ1ZyBpcy4gSSdsbCB0cnkgdG8gcmVwcm8gbXlzZWxmLg0K
DQogIFBhdWwNCg0KPiAgIFBhdWwNCj4gDQo+ID4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNv
cnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCj4gPg0KPiANCj4gX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0K
PiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:30:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:30:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnKk-0005cX-KF; Fri, 04 Sep 2015 09:30:58 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnKj-0005cJ-F7
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:30:57 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	9B/7E-19125-0D469E55; Fri, 04 Sep 2015 09:30:56 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441359055!25174912!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9337 invoked from network); 4 Sep 2015 09:30:55 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:30:55 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456731"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, Fabio Fantoni
	<fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwA=
Date: Fri, 4 Sep 2015 09:30:55 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiBTZW50OiAw
MiBTZXB0ZW1iZXIgMjAxNSAxMDowMA0KPiBUbzogRmFiaW8gRmFudG9uaTsgUmFmYcWCIFdvamR5
xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gQ2M6IFN0ZWZhbm8gU3Rh
YmVsbGluaQ0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52
YmQNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBGYWJpbyBG
YW50b25pIFttYWlsdG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiA+IFNlbnQ6IDAyIFNlcHRl
bWJlciAyMDE1IDA5OjU0DQo+ID4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdvamR5xYJhOyB3
aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJk
DQo+ID4NCj4gPiBJbCAwMS8wOS8yMDE1IDE2OjQxLCBQYXVsIER1cnJhbnQgaGEgc2NyaXR0bzoN
Cj4gPiA+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4+IEZyb206IEZhYmlvIEZh
bnRvbmkgW21haWx0bzpmYWJpby5mYW50b25pQG0yci5iaXpdDQo+ID4gPj4gU2VudDogMjEgQXVn
dXN0IDIwMTUgMTQ6MTQNCj4gPiA+PiBUbzogUmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7
IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+ID4+IFN1YmplY3Q6IFJlOiBb
d2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiA+ID4+DQo+ID4gPj4gSWwgMjEv
MDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBzY3JpdHRvOg0KPiA+ID4+PiBJbCAyMS8w
OC8yMDE1IDAwOjAzLCBSYWZhxYIgV29qZHnFgmEgaGEgc2NyaXR0bzoNCj4gPiA+Pj4+IE9uIDIw
MTUtMDgtMTkgMjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPiA+Pj4+Pj4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPiA+Pj4+Pj4gd2luLXB2LWRldmVsLWJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4gPj4+Pj4+IGJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNl
bnQ6IDE4DQo+ID4gPj4+Pj4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4tcHYtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcgU3ViamVjdDoNCj4gPiA+Pj4+Pj4gW3dpbi1wdi1kZXZlbF0gUHJv
YmxlbXMgd2l0aCB4ZW52YmQNCj4gPiA+Pj4+Pj4NCj4gPiA+Pj4+Pj4gSGksDQo+ID4gPj4+Pj4+
DQo+ID4gPj4+Pj4+IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50IHB2ZHJpdmVycyBjb2Rl
IGluIHByZXBhcmF0aW9uIGZvcg0KPiA+ID4+Pj4+PiBjcmVhdGluZyB1cHN0cmVhbSBwYXRjaGVz
IGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZA0KPiA+ID4+Pj4+PiB0aGFu
IHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlm
IGl0J3MNCj4gPiA+Pj4+Pj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2Rl
IGJlY2F1c2UgaXQgc2VlbWVkIHRvIG9ubHkNCj4gPiA+Pj4+Pj4gbWFuaWZlc3Qgd2hlbiB0aGUg
ZnVsbCBzdWl0ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZw0KPiA+ID4+
Pj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBj
cmFzaGVkIHdpdGgNCj4gPiA+Pj4+Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGluIHNlZW1p
bmdseSByYW5kb20gcHJvY2Vzc2VzIHNob3J0bHkNCj4gPiA+Pj4+Pj4gYWZ0ZXIgc3RhcnQuIERy
aXZlciBWZXJpZmllciBkaWRuJ3Qgc2VlbSB0byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbg0KPiA+
ID4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBj
cmFzaDEudHh0Lg0KPiA+ID4+Pj4+Pg0KPiA+ID4+Pj4+PiBUb2RheSBJIHRyaWVkIHRvIHBlcmZv
cm0gc29tZSBtb3JlIHRlc3RzIGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXINCj4gPiA+Pj4+Pj4g
Z3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJl
DQo+ID4gPj4+Pj4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNlIG5vdyBEcml2ZXIgVmVyaWZp
ZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+ID4+Pj4+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52
YmQgKHNlZSBjcmFzaDIudHh0KS4gSSBkb24ndCBrbm93IHdoeSBpdA0KPiA+ID4+Pj4+PiBkaWRu
J3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhl
DQo+ID4gPj4+Pj4+IG9mZmVuZGluZyB3YWl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0
cnkgdGhhdCB0byBzZWUgaWYgSSBjYW4NCj4gPiA+Pj4+Pj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91
cyBtZW1vcnkgY29ycnVwdGlvbnMuDQo+ID4gPj4+Pj4+DQo+ID4gPj4+Pj4gVGhvc2UgY3Jhc2hl
cyBkbyBsb29rIG9kZC4gSSdtIG9uIFBUTyBmb3IgdGhlIG5leHQgd2VlayBidXQgSSdsbA0KPiBo
YXZlDQo+ID4gPj4+Pj4gYSBsb29rIHdoZW4gSSBnZXQgYmFjayB0byB0aGUgb2ZmaWNlLiBJIGRp
ZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQ0KPiA+ID4+Pj4+IGRyaXZlcnMgYSB3ZWVrIG9yIHNv
IGJhY2sgKHdoaWxlIHJ1bm5pbmcgdmJkIHBsdWcvdW5wbHVnIHRlc3RzKSBidXQNCj4gPiA+Pj4+
PiB0aGVyZSBoYXZlIGJlZW4gYSBjb3VwbGUgb2YgY2hhbmdlcyBzaW5jZSB0aGVuLg0KPiA+ID4+
Pj4+DQo+ID4gPj4+Pj4gUGF1bA0KPiA+ID4+Pj4+DQo+ID4gPj4+PiBObyBwcm9ibGVtLiBJIGF0
dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZw0KPiA+IHN5c3Rl
bQ0KPiA+ID4+Pj4gc2h1dGRvd24sIGFmdGVyIHRoYXQgdGhlIE9TIGZhaWxlZCB0byBib290IChw
cm9iYWJseSBjb3JydXB0ZWQNCj4gPiA+Pj4+IGZpbGVzeXN0ZW0gc2luY2UgdGhlIEJTT0QgaXRz
ZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluaw0KPiBldmVyeQ0KPiA+ID4+Pj4g
dGltZSB0aGVyZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0
IGZhbWlsaWFyDQo+ID4gd2l0aA0KPiA+ID4+Pj4gWGVuIFBWIGRldmljZSBpbnRlcmZhY2VzIHNv
IG5vdCBzdXJlIHdoYXQgdGhhdCBtZWFucy4NCj4gPiA+Pj4+DQo+ID4gPj4+PiBJbiB0aGUgbWVh
bnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFjZSBkcml2ZXIN
Cj4gdG8NCj4gPiA+Pj4+IG1ha2Ugc3VyZSBpdCdzIG5vdCBjb250cmlidXRpbmcgdG8gdGhlc2Ug
aXNzdWVzIGJ1dCBldmVyeXRoaW5nDQo+IHNlZW1lZA0KPiA+IHRvDQo+ID4gPj4+PiBiZSBmaW5l
IHRoZXJlLg0KPiA+ID4+Pj4NCj4gPiA+Pj4+DQo+ID4gPj4+IEkgYWxzbyBoYWQgYSBkaXNrIGNv
cnJ1cHRpb24gb24gd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycw0KPiA+ID4+
PiBidWlsZCBvZiAxMSBhdWd1c3QgYnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8g
d2lucHYgZHJpdmVycywNCj4gPiA+Pj4gb24gc2FtZSBkb21VIEkgc3RhcnRlZCB0ZXN0aW5nIGFs
c28gc25hcHNob3Qgd2l0aCBxY293MiBkaXNrIG92ZXJsYXkuDQo+ID4gPj4+IEZvciB0aGlzIGNh
c2UgSSBkb24ndCBoYXZlIHVzZWZ1bCBpbmZvcm1hdGlvbiBiZWNhdXNlIGRvbid0IHRyeSB0bw0K
PiA+ID4+PiBib290IHdpbmRvd3MgYXQgYWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0
YWtlIG90aGVyIHVzZWZ1bA0KPiA+ID4+PiBpbmZvcm1hdGlvbi4NCj4gPiA+PiBIYXBwZW4gYW5v
dGhlciB0aW1lIGJ1dCBhbHNvIHRoaXMgSSB3YXMgdW5hYmxlIHRvIHVuZGVyc3RhbmQgd2hhdCBp
cw0KPiA+ID4+IGV4YWN0bHkgdGhlIGNhdXNlLg0KPiA+ID4+IE9uIHdpbmRvd3MgcmVib290IGFs
bCBzZWVtcyB3YXMgb2sgYW5kIGRpZCBhIGNsZWFuIHNodXRkb3duIGJ1dCBvbg0KPiA+ID4+IHJl
Ym9vdCBzZWFiaW9zIGRvbid0IGZvdW5kIGJvb3RhYmxlIGRpc2sgYW5kIHFlbXUgbG9nIGRvbid0
IHNob3cNCj4gdXNlZnVsDQo+ID4gPj4gaW5mb3JtYXRpb25zLg0KPiA+ID4+IHFlbXUtaW1nIGNo
ZWNrIHNob3cgZXJyb3JzOg0KPiA+ID4+PiAvdXNyL2xpYi94ZW4vYmluL3FlbXUtaW1nIGNoZWNr
IFcxMC5kaXNrMS5jb3ctc24xDQo+ID4gPj4+IEVSUk9SIGNsdXN0ZXIgMTQzIHJlZmNvdW50PTEg
cmVmZXJlbmNlPTINCj4gPiA+Pj4gTGVha2VkIGNsdXN0ZXIgMTA3NyByZWZjb3VudD0xIHJlZmVy
ZW5jZT0wDQo+ID4gPj4+IEVSUk9SIGNsdXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0y
DQo+ID4gPj4+IExlYWtlZCBjbHVzdGVyIDI3MDMgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+
ID4+PiBMZWFrZWQgY2x1c3RlciA1MjEyIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+Pj4g
TGVha2VkIGNsdXN0ZXIgMTMzNzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4+Pg0KPiA+
ID4+PiAyIGVycm9ycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFnZS4NCj4gPiA+Pj4gRGF0YSBtYXkg
YmUgY29ycnVwdGVkLCBvciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQg
aXQuDQo+ID4gPj4+DQo+ID4gPj4+IDQgbGVha2VkIGNsdXN0ZXJzIHdlcmUgZm91bmQgb24gdGhl
IGltYWdlLg0KPiA+ID4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sgc3BhY2UsIGJ1dCBubyBo
YXJtIHRvIGRhdGEuDQo+ID4gPj4+IDI3ODUzLzgxOTIwMCA9IDMuNDAlIGFsbG9jYXRlZCwgMjIu
NjUlIGZyYWdtZW50ZWQsIDAuMDAlDQo+IGNvbXByZXNzZWQNCj4gPiA+Pj4gY2x1c3RlcnMNCj4g
PiA+Pj4gSW1hZ2UgZW5kIG9mZnNldDogMTg1MDczNjY0MA0KPiA+ID4+IEkgY3JlYXRlZCBpdCB3
aXRoOg0KPiA+ID4+IC91c3IvbGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vDQo+ID4gPj4g
YmFja2luZ19maWxlPVcxMC5kaXNrMS54bSxiYWNraW5nX2ZtdD1yYXcgLWYgcWNvdzIgVzEwLmRp
c2sxLmNvdy0NCj4gPiBzbjENCj4gPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBjb25maWd1
cmF0aW9uOg0KPiA+ID4+IGRpc2s9WycvbW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293Mixo
ZGEscncnLC4uLg0KPiA+ID4+IERvbTAgaXMgd2l0aCB4ZW4gNC42LXJjMSBhbmQgcWVtdSAyLjQu
MA0KPiA+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYgZHJpdmVycyBi
dWlsZCBvZiAxMSBhdWd1c3QNCj4gPiA+Pg0KPiA+ID4+IEhvdyBJIGNhbiBrbm93IGZvciBzdXJl
IGlmIGl0IGlzIGEgd2lucHYgb3IgcWVtdSBvciBvdGhlciBwcm9ibGVtIGFuZA0KPiA+ID4+IHRh
a2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPiA+Pg0KPiA+ID4+IFRoYW5rcyBm
b3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guDQo+ID4gPiBUaGlzIHNv
dW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4g
SSByZWNhbGwNCj4gPiBzZWVpbmcgb3RoZXIgcHJvYmxlbXMgb2YgdGhpcyBpbGsgd2hlbiBzb21l
b25lIHdhcyBtZXNzaW5nIGFyb3VuZCB3aXRoDQo+ID4gT19ESVJFQ1QgZm9yIG9wZW5pbmcgaW1h
Z2VzLiBJIHdvbmRlciBpZiB3ZSBhcmUgbWlzc2luZyBhIGZsdXNoIG9wZXJhdGlvbg0KPiA+IG9u
IHNodXRkb3duLg0KPiA+ID4NCj4gPiA+ICAgIFBhdWwNCj4gPiA+DQo+ID4gVGhhbmtzIGZvciBy
ZXBseS4NCj4gPiBJIGRpZCBhIGZhc3Qgc2VhcmNoIGJ1dCBJIG5vdCBmb3VuZCBPX0RJUkVDVCBn
cmVwcGluZyBpbiBsaWJ4bCwgSSBmb3VuZA0KPiA+IGl0IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiA+
IEFmdGVyIEkgdHJpZWQgd2l0aCBwYXRjaCB0aGF0IHNlZW1zIGFkZGVkIHNldHRpbmcgb2YgaXQg
Zm9yIHhlbjoNCj4gPg0KPiBodHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0
ZGlmZjtoPTQ1NGFlNzM0ZjFkOWY1OTEzNDVmYTc4DQo+ID4gMzc2NDM1YThlNzRiYjRlZGQNCj4g
PiBDaGVja2luZyBpbiBsaWJ4bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNv
bWUgb2xkIHhlbiBwb3N0DQo+ID4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1z
Lg0KPiA+IEkgc2hvdWxkIHRyeSBpdCBlbmFibGUgZGlyZWN0LWlvLXNhZmUgaW4gZG9tVXMgcWNv
dzIgZGlza3M/DQo+ID4gQWRkZWQgYWxzbyBTdGVmYW5vIFN0YWJlbGxpbmkgYXMgY2MuDQo+ID4g
QFN0ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1cyBhbmQg
cmVzdWx0IG9mDQo+ID4gZGlyZWN0LWlvLXNhZmU/DQo+ID4gU29ycnkgaXMgdGhlIHF1ZXN0aW9u
IGFyZSBzdHVwaWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkNCj4gPiBwb3N0
IG9mIGxhdGVzdCB5ZWFycyBhcmUgY29uZnVzZWQgYW5kIGluIHNhbWUgY2FzZXMgc2VlbXMgYWxz
bw0KPiA+IGNvbnRyYWRpY3RvcnkgYWJvdXQgc3RhYmlsaXR5L2ludGVncml0eS9wZXJmb3JtYW5j
ZSB1c2luZyBpdCBvciBub3QuDQo+ID4gSW4gcGFydGljdWxhciBzZWVtcyBjcmFzaCB3aXRoIHNv
bWUga2VybmVscyBidXQgSSBub3QgdW5kZXJzdGFuZCBleGFjdGx5DQo+ID4gd2hhdCB2ZXJzaW9u
cyBhbmQvb3Igd2l0aCB3aGljaCBwYXRjaGVzLg0KPiA+DQo+ID4gQFBhdWwgRHVycmFudDogaGF2
ZSB5b3Ugc2VlIG15IG90aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkNCj4g
PiBsYXRlc3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2IGZpbGUgd2luZG93cyBkb21V
cyB3aXRoIG5ldyBwdg0KPiA+IGRyaXZlciBkb24ndCBib290IGFuZCBmb3Igc3RpbGwgYm9vdCBp
dCBjb3JyZWN0bHkgSSBtdXN0IHJlYWRkIHVkZXYNCj4gPiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1
bmV4cGVjdGVkIGNhc2UgcmVsYXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMNCj4gPiBkaWZmZXJl
bnQ/DQo+ID4gaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC93aW4tcHYtZGV2ZWwv
MjAxNS0wOC9tc2cwMDAzMy5odG1sDQo+ID4NCj4gDQo+IEknbSBub3Qgc3VyZSB3aHkgdWRldiB3
b3VsZCBiZSBhbiBpc3N1ZSBoZXJlLiBUaGUgcHJvYmxlbSB5b3UgaGF2ZQ0KPiBhcHBlYXJzIHRv
IGJlIFFFTVUgaWdub3JpbmcgdGhlIHJlcXVlc3QgdG8gdW5wbHVnIGVtdWxhdGVkIGRpc2tzLiBJ
J3ZlIG5vdA0KPiBzZWVuIHRoaXMgYmVoYXZpb3VyIG9uIG15IHRlc3QgYm94IHNvIEknbGwgbmVl
ZCB0byBkaWcgc29tZSBtb3JlLg0KPiANCg0KSSBub3RpY2UgeW91IGhhdmUgNiBJREUgY2hhbm5l
bHM/IEFyZSB5b3UgdXNpbmcgQUhDSSBieSBhbnkgY2hhbmNlPyBJZiB5b3UgYXJlIHRoZW4gaXQg
bG9va3MgbGlrZSBRRU1VIGlzIG5vdCBob25vdXJpbmcgdGhlIHVucGx1ZyByZXF1ZXN0Li4uIHRo
YXQgd291bGQgYmUgd2hlcmUgdGhlIGJ1ZyBpcy4gSSdsbCB0cnkgdG8gcmVwcm8gbXlzZWxmLg0K
DQogIFBhdWwNCg0KPiAgIFBhdWwNCj4gDQo+ID4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNv
cnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCj4gPg0KPiANCj4gX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0K
PiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:34:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:34:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnNo-0005n5-9Y; Fri, 04 Sep 2015 09:34:08 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnNm-0005mw-AO
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:34:06 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	A0/8D-15765-D8569E55; Fri, 04 Sep 2015 09:34:05 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-27.messagelabs.com!1441359242!46752715!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26562 invoked from network); 4 Sep 2015 09:34:02 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:34:02 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456802"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAFuKJoA==
Date: Fri, 4 Sep 2015 09:34:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28C9@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>
In-Reply-To: <55D64EA3.8060000@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDIwIEF1Z3VzdCAyMDE1
IDIzOjAzDQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gDQo+IE9uIDIwMTUtMDgtMTkgMjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4gLS0t
LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPj4gd2luLXB2LWRldmVsLWJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+IGJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNlbnQ6IDE4
DQo+ID4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcgU3ViamVjdDoNCj4gPj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gPj4NCj4gPj4gSGksDQo+ID4+DQo+ID4+IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50
IHB2ZHJpdmVycyBjb2RlIGluIHByZXBhcmF0aW9uIGZvcg0KPiA+PiBjcmVhdGluZyB1cHN0cmVh
bSBwYXRjaGVzIGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZA0KPiA+PiB0
aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJl
IGlmIGl0J3MNCj4gPj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2RlIGJl
Y2F1c2UgaXQgc2VlbWVkIHRvIG9ubHkNCj4gPj4gbWFuaWZlc3Qgd2hlbiB0aGUgZnVsbCBzdWl0
ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZw0KPiA+PiB3aXRoIHhlbnZi
ZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgNCj4g
Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGluIHNlZW1pbmdseSByYW5kb20gcHJvY2Vzc2Vz
IHNob3J0bHkNCj4gPj4gYWZ0ZXIgc3RhcnQuIERyaXZlciBWZXJpZmllciBkaWRuJ3Qgc2VlbSB0
byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbg0KPiA+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBj
cmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+Pg0KPiA+PiBUb2RheSBJIHRy
aWVkIHRvIHBlcmZvcm0gc29tZSBtb3JlIHRlc3RzIGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXIN
Cj4gPj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmll
cyB3ZXJlDQo+ID4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNlIG5vdyBEcml2ZXIgVmVyaWZp
ZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52YmQgKHNl
ZSBjcmFzaDIudHh0KS4gSSBkb24ndCBrbm93IHdoeSBpdA0KPiA+PiBkaWRuJ3QgY2F0Y2ggdGhh
dCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+IG9mZmVu
ZGluZyB3YWl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0cnkgdGhhdCB0byBzZWUgaWYg
SSBjYW4NCj4gPj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91cyBtZW1vcnkgY29ycnVwdGlvbnMuDQo+
ID4+DQo+ID4NCj4gPiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0
aGUgbmV4dCB3ZWVrIGJ1dCBJJ2xsIGhhdmUNCj4gPiBhIGxvb2sgd2hlbiBJIGdldCBiYWNrIHRv
IHRoZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlDQo+ID4gZHJpdmVycyBh
IHdlZWsgb3Igc28gYmFjayAod2hpbGUgcnVubmluZyB2YmQgcGx1Zy91bnBsdWcgdGVzdHMpIGJ1
dA0KPiA+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+
ID4NCj4gPiBQYXVsDQo+ID4NCj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21lIG1vcmUgbG9n
cy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcgc3lzdGVtDQo+IHNodXRkb3duLCBhZnRlciB0aGF0
IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVwdGVkDQo+IGZpbGVzeXN0ZW0g
c2luY2UgdGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluayBl
dmVyeQ0KPiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3aGVyZSBidXQgSSdt
IG5vdCB5ZXQgZmFtaWxpYXIgd2l0aA0KPiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90
IHN1cmUgd2hhdCB0aGF0IG1lYW5zLg0KPiANCg0KQW55IGVycm9yIG9uIHRoZSBiYWNrZW5kIGlz
IHByZXR0eSBzdXNwaWNpb3VzLiBBcmUgeW91IHN0aWxsIHNlZWluZyB0aGVtPyBUaGUgb3RoZXIg
dGhpbmcgdG8gY2hlY2sgZm9yIGlzIHRoYXQgKGJlY2F1c2UgSSBtZXNzZWQgd2l0aCBhbGwgdGhp
cyBjb2RlIHJlY2VudGx5KSB5b3UgYXJlIG5vdCBlbmRpbmcgdXAgd2l0aCBhIFBWIGRpc2sgYW5k
IGFuIGVtdWxhdGVkIGRpc2sgYXQgdGhlIHNhbWUgdGltZS4gSWYgeW91IGRvIHRoZW4gV2luZG93
cyB3aWxsIG1vdW50IGJvdGggaW5zdGFuY2VzIGFuZCB0aGV5IHdpbGwgY29ycnVwdCBlYWNoIG90
aGVyIChzaW5jZSB0aGV5IGFyZSBiYWNrZWQgYnkgdGhlIHNhbWUgaW1hZ2UpLg0KDQogIFBhdWwN
Cg0KPiBJbiB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4
ZW5pZmFjZSBkcml2ZXIgdG8NCj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0
aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvDQo+IGJlIGZpbmUgdGhlcmUuDQo+
IA0KPiAtLQ0KPiBSYWZhxYIgV29qZHnFgmENCj4gUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2
ZWxvcGVyDQo+IGh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2lu
LXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 09:34:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 09:34:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXnNo-0005n5-9Y; Fri, 04 Sep 2015 09:34:08 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXnNm-0005mw-AO
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 09:34:06 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	A0/8D-15765-D8569E55; Fri, 04 Sep 2015 09:34:05 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-27.messagelabs.com!1441359242!46752715!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26562 invoked from network); 4 Sep 2015 09:34:02 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 09:34:02 -0000
X-IronPort-AV: E=Sophos;i="5.17,468,1437436800"; 
   d="scan'208";a="2456802"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAFuKJoA==
Date: Fri, 4 Sep 2015 09:34:00 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28C9@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>
In-Reply-To: <55D64EA3.8060000@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDIwIEF1Z3VzdCAyMDE1
IDIzOjAzDQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gDQo+IE9uIDIwMTUtMDgtMTkgMjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4gLS0t
LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPj4gd2luLXB2LWRldmVsLWJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtZGV2ZWwtDQo+ID4+IGJvdW5jZXNA
bGlzdHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNlbnQ6IDE4
DQo+ID4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcgU3ViamVjdDoNCj4gPj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gPj4NCj4gPj4gSGksDQo+ID4+DQo+ID4+IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50
IHB2ZHJpdmVycyBjb2RlIGluIHByZXBhcmF0aW9uIGZvcg0KPiA+PiBjcmVhdGluZyB1cHN0cmVh
bSBwYXRjaGVzIGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZA0KPiA+PiB0
aGFuIHhlbnZiZCBzZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJl
IGlmIGl0J3MNCj4gPj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2RlIGJl
Y2F1c2UgaXQgc2VlbWVkIHRvIG9ubHkNCj4gPj4gbWFuaWZlc3Qgd2hlbiB0aGUgZnVsbCBzdWl0
ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZw0KPiA+PiB3aXRoIHhlbnZi
ZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUgdGhlIHN5c3RlbSBjcmFzaGVkIHdpdGgNCj4g
Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGluIHNlZW1pbmdseSByYW5kb20gcHJvY2Vzc2Vz
IHNob3J0bHkNCj4gPj4gYWZ0ZXIgc3RhcnQuIERyaXZlciBWZXJpZmllciBkaWRuJ3Qgc2VlbSB0
byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbg0KPiA+PiBzZWUgYSBsb2cgZnJvbSBvbmUgc3VjaCBj
cmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+Pg0KPiA+PiBUb2RheSBJIHRy
aWVkIHRvIHBlcmZvcm0gc29tZSBtb3JlIHRlc3RzIGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXIN
Cj4gPj4gZ3Vlc3QgdG9vbHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmll
cyB3ZXJlDQo+ID4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNlIG5vdyBEcml2ZXIgVmVyaWZp
ZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52YmQgKHNl
ZSBjcmFzaDIudHh0KS4gSSBkb24ndCBrbm93IHdoeSBpdA0KPiA+PiBkaWRuJ3QgY2F0Y2ggdGhh
dCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQgdG8gdGhlDQo+ID4+IG9mZmVu
ZGluZyB3YWl0IGRvZXNuJ3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0cnkgdGhhdCB0byBzZWUgaWYg
SSBjYW4NCj4gPj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91cyBtZW1vcnkgY29ycnVwdGlvbnMuDQo+
ID4+DQo+ID4NCj4gPiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0
aGUgbmV4dCB3ZWVrIGJ1dCBJJ2xsIGhhdmUNCj4gPiBhIGxvb2sgd2hlbiBJIGdldCBiYWNrIHRv
IHRoZSBvZmZpY2UuIEkgZGlkIHJ1biB2ZXJpZmllciBvbiBhbGwgdGhlDQo+ID4gZHJpdmVycyBh
IHdlZWsgb3Igc28gYmFjayAod2hpbGUgcnVubmluZyB2YmQgcGx1Zy91bnBsdWcgdGVzdHMpIGJ1
dA0KPiA+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+
ID4NCj4gPiBQYXVsDQo+ID4NCj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21lIG1vcmUgbG9n
cy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcgc3lzdGVtDQo+IHNodXRkb3duLCBhZnRlciB0aGF0
IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVwdGVkDQo+IGZpbGVzeXN0ZW0g
c2luY2UgdGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluayBl
dmVyeQ0KPiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3aGVyZSBidXQgSSdt
IG5vdCB5ZXQgZmFtaWxpYXIgd2l0aA0KPiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28gbm90
IHN1cmUgd2hhdCB0aGF0IG1lYW5zLg0KPiANCg0KQW55IGVycm9yIG9uIHRoZSBiYWNrZW5kIGlz
IHByZXR0eSBzdXNwaWNpb3VzLiBBcmUgeW91IHN0aWxsIHNlZWluZyB0aGVtPyBUaGUgb3RoZXIg
dGhpbmcgdG8gY2hlY2sgZm9yIGlzIHRoYXQgKGJlY2F1c2UgSSBtZXNzZWQgd2l0aCBhbGwgdGhp
cyBjb2RlIHJlY2VudGx5KSB5b3UgYXJlIG5vdCBlbmRpbmcgdXAgd2l0aCBhIFBWIGRpc2sgYW5k
IGFuIGVtdWxhdGVkIGRpc2sgYXQgdGhlIHNhbWUgdGltZS4gSWYgeW91IGRvIHRoZW4gV2luZG93
cyB3aWxsIG1vdW50IGJvdGggaW5zdGFuY2VzIGFuZCB0aGV5IHdpbGwgY29ycnVwdCBlYWNoIG90
aGVyIChzaW5jZSB0aGV5IGFyZSBiYWNrZWQgYnkgdGhlIHNhbWUgaW1hZ2UpLg0KDQogIFBhdWwN
Cg0KPiBJbiB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9yZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4
ZW5pZmFjZSBkcml2ZXIgdG8NCj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0
aGVzZSBpc3N1ZXMgYnV0IGV2ZXJ5dGhpbmcgc2VlbWVkIHRvDQo+IGJlIGZpbmUgdGhlcmUuDQo+
IA0KPiAtLQ0KPiBSYWZhxYIgV29qZHnFgmENCj4gUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2
ZWxvcGVyDQo+IGh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2lu
LXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 11:08:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 11:08:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXoqu-00078C-5P; Fri, 04 Sep 2015 11:08:16 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXoqt-000787-2u
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 11:08:15 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	B2/6B-06179-E9B79E55; Fri, 04 Sep 2015 11:08:14 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-206.messagelabs.com!1441364893!32779206!1
X-Originating-IP: [209.85.212.196]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26396 invoked from network); 4 Sep 2015 11:08:13 -0000
Received: from mail-wi0-f196.google.com (HELO mail-wi0-f196.google.com)
	(209.85.212.196)
	by server-12.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 11:08:13 -0000
Received: by wiku15 with SMTP id u15so2583870wik.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 04:08:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=Efke10DcIgPYHSPph9dP7WaUVmo7dvlWswTIIR9qZn0=;
	b=XZXWN8B7it2LNSiEWSGmNKVFlbv2lOY9uKtAOK0ZgXfw5Vt4aV/yldLzdvnDCKMK6v
	wfm4mv9O7TL4L+VFnrUnPBDx2GCAmqY/Det+UhzfCul2+U7WDmp0IXv5WfKG0Vh0GJMc
	05YvozY+gHP95YpvNkiECL6fbNKLGltvSId1AL07iRVLp8NCblijFUNACclfV1B63AWa
	elIT3GQEuOkT5En1GXgo/scaK4gI7t691k8yRP6/qt/RWgaZikAv/LlCpQW/+QHMc7Pj
	XrxY83HSaAdDQytfmE11W3GXfzOSK42a9SLWRjOTiTbocGSZscHL1R/ED4fOM7LaKC8z
	JXfw==
X-Gm-Message-State: ALoCoQnSDpj9nxGGT6/0s9LjKqDG/UsZe8lFqKPm4yM3cmo7df4XouS7blVVP1v0DRJbp8N1IExl
X-Received: by 10.194.93.198 with SMTP id cw6mr6381690wjb.113.1441364892976;
	Fri, 04 Sep 2015 04:08:12 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	cm6sm3681962wib.22.2015.09.04.04.08.09
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 04:08:12 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E97BA3.7030804@m2r.biz>
Date: Fri, 4 Sep 2015 13:08:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
Content-Length:11157
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDQvMDkvMjAxNSAxMTozMCwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhl
bnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVsLQo+PiBib3VuY2VzQGxpc3RzLnhlbnBy
b2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUGF1bCBEdXJyYW50Cj4+IFNlbnQ6IDAyIFNlcHRlbWJl
ciAyMDE1IDEwOjAwCj4+IFRvOiBGYWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBDYzogU3RlZmFubyBTdGFiZWxsaW5pCj4+
IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+Pgo+Pj4g
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0
bzpmYWJpby5mYW50b25pQG0yci5iaXpdCj4+PiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAxNSAwOTo1
NAo+Pj4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKPj4+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkKPj4+IFN1YmplY3Q6
IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+Pj4KPj4+IElsIDAxLzA5
LzIwMTUgMTY6NDEsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOgo+Pj4+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+Pj4+PiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWlsdG86ZmFiaW8uZmFu
dG9uaUBtMnIuYml6XQo+Pj4+PiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNAo+Pj4+PiBUbzog
UmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwo+Pj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4
ZW52YmQKPj4+Pj4KPj4+Pj4gSWwgMjEvMDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBz
Y3JpdHRvOgo+Pj4+Pj4gSWwgMjEvMDgvMjAxNSAwMDowMywgUmFmYcWCIFdvamR5xYJhIGhhIHNj
cml0dG86Cj4+Pj4+Pj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+
Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToKPj4+Pj4+Pj4+IHdpbi1w
di1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVs
LQo+Pj4+Pj4+Pj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJh
ZmFsIFdvamR5bGEgU2VudDogMTgKPj4+Pj4+Pj4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcgU3ViamVjdDoKPj4+Pj4+Pj4+IFt3aW4tcHYt
ZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gSGksCj4+Pj4+
Pj4+Pgo+Pj4+Pj4+Pj4gSSd2ZSBiZWVuIHRlc3RpbmcgdGhlIGN1cnJlbnQgcHZkcml2ZXJzIGNv
ZGUgaW4gcHJlcGFyYXRpb24gZm9yCj4+Pj4+Pj4+PiBjcmVhdGluZyB1cHN0cmVhbSBwYXRjaGVz
IGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZAo+Pj4+Pj4+Pj4gdGhhbiB4
ZW52YmQgc2VlbXMgdG8gYmUgdmVyeSB1bnN0YWJsZSBmb3IgbWUuIEknbSBub3Qgc3VyZSBpZiBp
dCdzCj4+Pj4+Pj4+PiBhIHByb2JsZW0gd2l0aCB4ZW52YmQgaXRzZWxmIG9yIG15IGNvZGUgYmVj
YXVzZSBpdCBzZWVtZWQgdG8gb25seQo+Pj4+Pj4+Pj4gbWFuaWZlc3Qgd2hlbiB0aGUgZnVsbCBz
dWl0ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZwo+Pj4+Pj4+Pj4gd2l0
aCB4ZW52YmQuIEluIHNob3J0LCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBzeXN0ZW0gY3Jhc2hlZCB3
aXRoCj4+Pj4+Pj4+PiBrZXJuZWwgbWVtb3J5IGNvcnJ1cHRpb24gaW4gc2VlbWluZ2x5IHJhbmRv
bSBwcm9jZXNzZXMgc2hvcnRseQo+Pj4+Pj4+Pj4gYWZ0ZXIgc3RhcnQuIERyaXZlciBWZXJpZmll
ciBkaWRuJ3Qgc2VlbSB0byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbgo+Pj4+Pj4+Pj4gc2VlIGEg
bG9nIGZyb20gb25lIHN1Y2ggY3Jhc2ggaW4gdGhlIGF0dGFjaG1lbnQgY3Jhc2gxLnR4dC4KPj4+
Pj4+Pj4+Cj4+Pj4+Pj4+PiBUb2RheSBJIHRyaWVkIHRvIHBlcmZvcm0gc29tZSBtb3JlIHRlc3Rz
IGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXIKPj4+Pj4+Pj4+IGd1ZXN0IHRvb2xzIChvbmx5IHB2
ZHJpdmVycyBhbmQgb3VyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZQo+Pj4+Pj4+Pj4gaW5zdGFsbGVk
KS4gVG8gbXkgc3VycHJpc2Ugbm93IERyaXZlciBWZXJpZmllciB3YXMgY3Jhc2hpbmcgdGhlCj4+
Pj4+Pj4+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52YmQgKHNlZSBjcmFzaDIudHh0KS4gSSBk
b24ndCBrbm93IHdoeSBpdAo+Pj4+Pj4+Pj4gZGlkbid0IGNhdGNoIHRoYXQgcHJldmlvdXNseS4u
LiBJZiBhZGRpbmcgc29tZSB0aW1lb3V0IHRvIHRoZQo+Pj4+Pj4+Pj4gb2ZmZW5kaW5nIHdhaXQg
ZG9lc24ndCBicmVhayBhbnl0aGluZyBJJ2xsIHRyeSB0aGF0IHRvIHNlZSBpZiBJIGNhbgo+Pj4+
Pj4+Pj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91cyBtZW1vcnkgY29ycnVwdGlvbnMuCj4+Pj4+Pj4+
Pgo+Pj4+Pj4+PiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0aGUg
bmV4dCB3ZWVrIGJ1dCBJJ2xsCj4+IGhhdmUKPj4+Pj4+Pj4gYSBsb29rIHdoZW4gSSBnZXQgYmFj
ayB0byB0aGUgb2ZmaWNlLiBJIGRpZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQo+Pj4+Pj4+PiBk
cml2ZXJzIGEgd2VlayBvciBzbyBiYWNrICh3aGlsZSBydW5uaW5nIHZiZCBwbHVnL3VucGx1ZyB0
ZXN0cykgYnV0Cj4+Pj4+Pj4+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNp
bmNlIHRoZW4uCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFBhdWwKPj4+Pj4+Pj4KPj4+Pj4+PiBObyBwcm9i
bGVtLiBJIGF0dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZwo+
Pj4gc3lzdGVtCj4+Pj4+Pj4gc2h1dGRvd24sIGFmdGVyIHRoYXQgdGhlIE9TIGZhaWxlZCB0byBi
b290IChwcm9iYWJseSBjb3JydXB0ZWQKPj4+Pj4+PiBmaWxlc3lzdGVtIHNpbmNlIHRoZSBCU09E
IGl0c2VsZiBzZWVtZWQgdG8gaW5kaWNhdGUgdGhhdCkuIEkgdGhpbmsKPj4gZXZlcnkKPj4+Pj4+
PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3aGVyZSBidXQgSSdtIG5vdCB5
ZXQgZmFtaWxpYXIKPj4+IHdpdGgKPj4+Pj4+PiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28g
bm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSW4gdGhlIG1lYW50aW1l
IEkndmUgcnVuIG1vcmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVuaWZhY2UgZHJpdmVyCj4+IHRv
Cj4+Pj4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMg
YnV0IGV2ZXJ5dGhpbmcKPj4gc2VlbWVkCj4+PiB0bwo+Pj4+Pj4+IGJlIGZpbmUgdGhlcmUuCj4+
Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4gSSBhbHNvIGhhZCBhIGRpc2sgY29ycnVwdGlvbiBvbiB3aW5k
b3dzIDEwIHBybyA2NCBiaXQgd2l0aCBwdiBkcml2ZXJzCj4+Pj4+PiBidWlsZCBvZiAxMSBhdWd1
c3QgYnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywKPj4+
Pj4+IG9uIHNhbWUgZG9tVSBJIHN0YXJ0ZWQgdGVzdGluZyBhbHNvIHNuYXBzaG90IHdpdGggcWNv
dzIgZGlzayBvdmVybGF5Lgo+Pj4+Pj4gRm9yIHRoaXMgY2FzZSBJIGRvbid0IGhhdmUgdXNlZnVs
IGluZm9ybWF0aW9uIGJlY2F1c2UgZG9uJ3QgdHJ5IHRvCj4+Pj4+PiBib290IHdpbmRvd3MgYXQg
YWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bAo+Pj4+Pj4g
aW5mb3JtYXRpb24uCj4+Pj4+IEhhcHBlbiBhbm90aGVyIHRpbWUgYnV0IGFsc28gdGhpcyBJIHdh
cyB1bmFibGUgdG8gdW5kZXJzdGFuZCB3aGF0IGlzCj4+Pj4+IGV4YWN0bHkgdGhlIGNhdXNlLgo+
Pj4+PiBPbiB3aW5kb3dzIHJlYm9vdCBhbGwgc2VlbXMgd2FzIG9rIGFuZCBkaWQgYSBjbGVhbiBz
aHV0ZG93biBidXQgb24KPj4+Pj4gcmVib290IHNlYWJpb3MgZG9uJ3QgZm91bmQgYm9vdGFibGUg
ZGlzayBhbmQgcWVtdSBsb2cgZG9uJ3Qgc2hvdwo+PiB1c2VmdWwKPj4+Pj4gaW5mb3JtYXRpb25z
Lgo+Pj4+PiBxZW11LWltZyBjaGVjayBzaG93IGVycm9yczoKPj4+Pj4+IC91c3IvbGliL3hlbi9i
aW4vcWVtdS1pbWcgY2hlY2sgVzEwLmRpc2sxLmNvdy1zbjEKPj4+Pj4+IEVSUk9SIGNsdXN0ZXIg
MTQzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTIKPj4+Pj4+IExlYWtlZCBjbHVzdGVyIDEwNzcgcmVm
Y291bnQ9MSByZWZlcmVuY2U9MAo+Pj4+Pj4gRVJST1IgY2x1c3RlciAxMjIxIHJlZmNvdW50PTEg
cmVmZXJlbmNlPTIKPj4+Pj4+IExlYWtlZCBjbHVzdGVyIDI3MDMgcmVmY291bnQ9MSByZWZlcmVu
Y2U9MAo+Pj4+Pj4gTGVha2VkIGNsdXN0ZXIgNTIxMiByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+
Pj4+PiBMZWFrZWQgY2x1c3RlciAxMzM3NSByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+Pj4+Pgo+
Pj4+Pj4gMiBlcnJvcnMgd2VyZSBmb3VuZCBvbiB0aGUgaW1hZ2UuCj4+Pj4+PiBEYXRhIG1heSBi
ZSBjb3JydXB0ZWQsIG9yIGZ1cnRoZXIgd3JpdGVzIHRvIHRoZSBpbWFnZSBtYXkgY29ycnVwdCBp
dC4KPj4+Pj4+Cj4+Pj4+PiA0IGxlYWtlZCBjbHVzdGVycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFn
ZS4KPj4+Pj4+IFRoaXMgbWVhbnMgd2FzdGUgb2YgZGlzayBzcGFjZSwgYnV0IG5vIGhhcm0gdG8g
ZGF0YS4KPj4+Pj4+IDI3ODUzLzgxOTIwMCA9IDMuNDAlIGFsbG9jYXRlZCwgMjIuNjUlIGZyYWdt
ZW50ZWQsIDAuMDAlCj4+IGNvbXByZXNzZWQKPj4+Pj4+IGNsdXN0ZXJzCj4+Pj4+PiBJbWFnZSBl
bmQgb2Zmc2V0OiAxODUwNzM2NjQwCj4+Pj4+IEkgY3JlYXRlZCBpdCB3aXRoOgo+Pj4+PiAvdXNy
L2xpYi94ZW4vYmluL3FlbXUtaW1nIGNyZWF0ZSAtbwo+Pj4+PiBiYWNraW5nX2ZpbGU9VzEwLmRp
c2sxLnhtLGJhY2tpbmdfZm10PXJhdyAtZiBxY293MiBXMTAuZGlzazEuY293LQo+Pj4gc24xCj4+
Pj4+IGFuZCBjaGFuZ2VkIHRoZSB4bCBkb21VIGNvbmZpZ3VyYXRpb246Cj4+Pj4+IGRpc2s9Wycv
bW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293MixoZGEscncnLC4uLgo+Pj4+PiBEb20wIGlz
IHdpdGggeGVuIDQuNi1yYzEgYW5kIHFlbXUgMi40LjAKPj4+Pj4gRG9tVSBpcyB3aW5kb3dzIDEw
IHBybyA2NCBiaXQgd2l0aCBwdiBkcml2ZXJzIGJ1aWxkIG9mIDExIGF1Z3VzdAo+Pj4+Pgo+Pj4+
PiBIb3cgSSBjYW4ga25vdyBmb3Igc3VyZSBpZiBpdCBpcyBhIHdpbnB2IG9yIHFlbXUgb3Igb3Ro
ZXIgcHJvYmxlbSBhbmQKPj4+Pj4gdGFrZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gcmVwb3J0Pwo+
Pj4+Pgo+Pj4+PiBUaGFua3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmds
aXNoLgo+Pj4+IFRoaXMgc291bmRzIHZlcnkgbXVjaCBsaWtlIGEgbGFjayBvZiBzeW5jaHJvbml6
YXRpb24gc29tZXdoZXJlLiBJIHJlY2FsbAo+Pj4gc2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRo
aXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2luZyBhcm91bmQgd2l0aAo+Pj4gT19ESVJFQ1Qg
Zm9yIG9wZW5pbmcgaW1hZ2VzLiBJIHdvbmRlciBpZiB3ZSBhcmUgbWlzc2luZyBhIGZsdXNoIG9w
ZXJhdGlvbgo+Pj4gb24gc2h1dGRvd24uCj4+Pj4gICAgIFBhdWwKPj4+Pgo+Pj4gVGhhbmtzIGZv
ciByZXBseS4KPj4+IEkgZGlkIGEgZmFzdCBzZWFyY2ggYnV0IEkgbm90IGZvdW5kIE9fRElSRUNU
IGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5kCj4+PiBpdCBvbmx5IGluIHFlbXUgY29kZS4KPj4+
IEFmdGVyIEkgdHJpZWQgd2l0aCBwYXRjaCB0aGF0IHNlZW1zIGFkZGVkIHNldHRpbmcgb2YgaXQg
Zm9yIHhlbjoKPj4+Cj4+IGh0dHA6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXRk
aWZmO2g9NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgKPj4+IDM3NjQzNWE4ZTc0YmI0ZWRkCj4+PiBD
aGVja2luZyBpbiBsaWJ4bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNvbWUg
b2xkIHhlbiBwb3N0Cj4+PiBzZWVtcyB0aGF0IE9fRElSRUNUIGNyZWF0ZXMgcHJvYmxlbXMuCj4+
PiBJIHNob3VsZCB0cnkgaXQgZW5hYmxlIGRpcmVjdC1pby1zYWZlIGluIGRvbVVzIHFjb3cyIGRp
c2tzPwo+Pj4gQWRkZWQgYWxzbyBTdGVmYW5vIFN0YWJlbGxpbmkgYXMgY2MuCj4+PiBAU3RlZmFu
byBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJyZW50IGtub3cgc3RhdHVzIGFuZCByZXN1bHQg
b2YKPj4+IGRpcmVjdC1pby1zYWZlPwo+Pj4gU29ycnkgaXMgdGhlIHF1ZXN0aW9uIGFyZSBzdHVw
aWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkKPj4+IHBvc3Qgb2YgbGF0ZXN0
IHllYXJzIGFyZSBjb25mdXNlZCBhbmQgaW4gc2FtZSBjYXNlcyBzZWVtcyBhbHNvCj4+PiBjb250
cmFkaWN0b3J5IGFib3V0IHN0YWJpbGl0eS9pbnRlZ3JpdHkvcGVyZm9ybWFuY2UgdXNpbmcgaXQg
b3Igbm90Lgo+Pj4gSW4gcGFydGljdWxhciBzZWVtcyBjcmFzaCB3aXRoIHNvbWUga2VybmVscyBi
dXQgSSBub3QgdW5kZXJzdGFuZCBleGFjdGx5Cj4+PiB3aGF0IHZlcnNpb25zIGFuZC9vciB3aXRo
IHdoaWNoIHBhdGNoZXMuCj4+Pgo+Pj4gQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90
aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkKPj4+IGxhdGVzdCB0ZXN0IHdp
dGggeGVuIDQuNiB3aXRob3V0IHVkZXYgZmlsZSB3aW5kb3dzIGRvbVVzIHdpdGggbmV3IHB2Cj4+
PiBkcml2ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVjdGx5IEkgbXVz
dCByZWFkZCB1ZGV2Cj4+PiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2UgcmVs
YXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMKPj4+IGRpZmZlcmVudD8KPj4+IGh0dHA6Ly9saXN0
cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDgvbXNnMDAwMzMuaHRt
bAo+Pj4KPj4gSSdtIG5vdCBzdXJlIHdoeSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhlcmUuIFRo
ZSBwcm9ibGVtIHlvdSBoYXZlCj4+IGFwcGVhcnMgdG8gYmUgUUVNVSBpZ25vcmluZyB0aGUgcmVx
dWVzdCB0byB1bnBsdWcgZW11bGF0ZWQgZGlza3MuIEkndmUgbm90Cj4+IHNlZW4gdGhpcyBiZWhh
dmlvdXIgb24gbXkgdGVzdCBib3ggc28gSSdsbCBuZWVkIHRvIGRpZyBzb21lIG1vcmUuCj4+Cj4g
SSBub3RpY2UgeW91IGhhdmUgNiBJREUgY2hhbm5lbHM/IEFyZSB5b3UgdXNpbmcgQUhDSSBieSBh
bnkgY2hhbmNlPyBJZiB5b3UgYXJlIHRoZW4gaXQgbG9va3MgbGlrZSBRRU1VIGlzIG5vdCBob25v
dXJpbmcgdGhlIHVucGx1ZyByZXF1ZXN0Li4uIHRoYXQgd291bGQgYmUgd2hlcmUgdGhlIGJ1ZyBp
cy4gSSdsbCB0cnkgdG8gcmVwcm8gbXlzZWxmLgo+Cj4gICAgUGF1bAoKSWYgSSByZW1lbWJlciBn
b29kIEkgYWxyZWFkeSB0cmllZCBhbHNvIHdpdGggaWRlIGFib3V0IGJvdGggcHJvYmxlbXMgCih1
ZGV2IGFuZCBxY293KSB3aXRoIHNhbWUgcmVzdWx0LgpJJ20gYWxzbyBhbHJlYWR5IHVzaW5nIG1h
aW5seSBhaGNpIG9uIHdpbmRvd3MgZG9tVXMgKHdpdGggbmV3IHB2KSBpbiAKdGVzdCBzeXN0ZW0g
Zm9yIHNvbWUgbW9udGhzLgpCdXQgaWYgbmVlZGVkIHRlbGwgbWUgYW5kIEknbGwgZG8gbW9yZSB0
ZXN0cy4KQWJvdXQgeW91ciByZWNlbnQgcGF0Y2hlcyBzZWVtcyBmaXggcmVsYXRlZCB0byB1bnBs
dWcgb3IgSSdtIHdyb25nPyBJJ2xsIApyZXRyeSB3aXRoIHRoZW0gdGhpcyBhZnRlcm5vb24gd2l0
aG91dCB1ZGV2IGZpbGUgaWYgbmV3IHB2IHRlc3QgYnVpbGQgCndpbGwgYmUgcmVhZHkuCgpUaGFu
a3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 11:08:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 11:08:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXoqu-00078C-5P; Fri, 04 Sep 2015 11:08:16 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXoqt-000787-2u
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 11:08:15 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	B2/6B-06179-E9B79E55; Fri, 04 Sep 2015 11:08:14 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-206.messagelabs.com!1441364893!32779206!1
X-Originating-IP: [209.85.212.196]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26396 invoked from network); 4 Sep 2015 11:08:13 -0000
Received: from mail-wi0-f196.google.com (HELO mail-wi0-f196.google.com)
	(209.85.212.196)
	by server-12.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 11:08:13 -0000
Received: by wiku15 with SMTP id u15so2583870wik.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 04:08:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=Efke10DcIgPYHSPph9dP7WaUVmo7dvlWswTIIR9qZn0=;
	b=XZXWN8B7it2LNSiEWSGmNKVFlbv2lOY9uKtAOK0ZgXfw5Vt4aV/yldLzdvnDCKMK6v
	wfm4mv9O7TL4L+VFnrUnPBDx2GCAmqY/Det+UhzfCul2+U7WDmp0IXv5WfKG0Vh0GJMc
	05YvozY+gHP95YpvNkiECL6fbNKLGltvSId1AL07iRVLp8NCblijFUNACclfV1B63AWa
	elIT3GQEuOkT5En1GXgo/scaK4gI7t691k8yRP6/qt/RWgaZikAv/LlCpQW/+QHMc7Pj
	XrxY83HSaAdDQytfmE11W3GXfzOSK42a9SLWRjOTiTbocGSZscHL1R/ED4fOM7LaKC8z
	JXfw==
X-Gm-Message-State: ALoCoQnSDpj9nxGGT6/0s9LjKqDG/UsZe8lFqKPm4yM3cmo7df4XouS7blVVP1v0DRJbp8N1IExl
X-Received: by 10.194.93.198 with SMTP id cw6mr6381690wjb.113.1441364892976;
	Fri, 04 Sep 2015 04:08:12 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	cm6sm3681962wib.22.2015.09.04.04.08.09
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 04:08:12 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E97BA3.7030804@m2r.biz>
Date: Fri, 4 Sep 2015 13:08:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
Content-Length:11157
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDQvMDkvMjAxNSAxMTozMCwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhl
bnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVsLQo+PiBib3VuY2VzQGxpc3RzLnhlbnBy
b2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUGF1bCBEdXJyYW50Cj4+IFNlbnQ6IDAyIFNlcHRlbWJl
ciAyMDE1IDEwOjAwCj4+IFRvOiBGYWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBDYzogU3RlZmFubyBTdGFiZWxsaW5pCj4+
IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+Pgo+Pj4g
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0
bzpmYWJpby5mYW50b25pQG0yci5iaXpdCj4+PiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAxNSAwOTo1
NAo+Pj4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKPj4+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkKPj4+IFN1YmplY3Q6
IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZAo+Pj4KPj4+IElsIDAxLzA5
LzIwMTUgMTY6NDEsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOgo+Pj4+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+Pj4+PiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWlsdG86ZmFiaW8uZmFu
dG9uaUBtMnIuYml6XQo+Pj4+PiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNAo+Pj4+PiBUbzog
UmFmYcWCIFdvamR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwo+Pj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4
ZW52YmQKPj4+Pj4KPj4+Pj4gSWwgMjEvMDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBz
Y3JpdHRvOgo+Pj4+Pj4gSWwgMjEvMDgvMjAxNSAwMDowMywgUmFmYcWCIFdvamR5xYJhIGhhIHNj
cml0dG86Cj4+Pj4+Pj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+
Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToKPj4+Pj4+Pj4+IHdpbi1w
di1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVs
LQo+Pj4+Pj4+Pj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJh
ZmFsIFdvamR5bGEgU2VudDogMTgKPj4+Pj4+Pj4+IEF1Z3VzdCAyMDE1IDE0OjMzIFRvOiB3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcgU3ViamVjdDoKPj4+Pj4+Pj4+IFt3aW4tcHYt
ZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gSGksCj4+Pj4+
Pj4+Pgo+Pj4+Pj4+Pj4gSSd2ZSBiZWVuIHRlc3RpbmcgdGhlIGN1cnJlbnQgcHZkcml2ZXJzIGNv
ZGUgaW4gcHJlcGFyYXRpb24gZm9yCj4+Pj4+Pj4+PiBjcmVhdGluZyB1cHN0cmVhbSBwYXRjaGVz
IGZvciBteSB4ZW5pZmFjZSBhZGRpdGlvbnMgYW5kIEkgbm90aWNlZAo+Pj4+Pj4+Pj4gdGhhbiB4
ZW52YmQgc2VlbXMgdG8gYmUgdmVyeSB1bnN0YWJsZSBmb3IgbWUuIEknbSBub3Qgc3VyZSBpZiBp
dCdzCj4+Pj4+Pj4+PiBhIHByb2JsZW0gd2l0aCB4ZW52YmQgaXRzZWxmIG9yIG15IGNvZGUgYmVj
YXVzZSBpdCBzZWVtZWQgdG8gb25seQo+Pj4+Pj4+Pj4gbWFuaWZlc3Qgd2hlbiB0aGUgZnVsbCBz
dWl0ZSBvZiBvdXIgZ3Vlc3QgdG9vbHMgd2FzIGluc3RhbGxlZCBhbG9uZwo+Pj4+Pj4+Pj4gd2l0
aCB4ZW52YmQuIEluIHNob3J0LCBtb3N0IG9mIHRoZSB0aW1lIHRoZSBzeXN0ZW0gY3Jhc2hlZCB3
aXRoCj4+Pj4+Pj4+PiBrZXJuZWwgbWVtb3J5IGNvcnJ1cHRpb24gaW4gc2VlbWluZ2x5IHJhbmRv
bSBwcm9jZXNzZXMgc2hvcnRseQo+Pj4+Pj4+Pj4gYWZ0ZXIgc3RhcnQuIERyaXZlciBWZXJpZmll
ciBkaWRuJ3Qgc2VlbSB0byBjYXRjaCBhbnl0aGluZy4gWW91IGNhbgo+Pj4+Pj4+Pj4gc2VlIGEg
bG9nIGZyb20gb25lIHN1Y2ggY3Jhc2ggaW4gdGhlIGF0dGFjaG1lbnQgY3Jhc2gxLnR4dC4KPj4+
Pj4+Pj4+Cj4+Pj4+Pj4+PiBUb2RheSBJIHRyaWVkIHRvIHBlcmZvcm0gc29tZSBtb3JlIHRlc3Rz
IGJ1dCB0aGlzIHRpbWUgd2l0aG91dCBvdXIKPj4+Pj4+Pj4+IGd1ZXN0IHRvb2xzIChvbmx5IHB2
ZHJpdmVycyBhbmQgb3VyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZQo+Pj4+Pj4+Pj4gaW5zdGFsbGVk
KS4gVG8gbXkgc3VycHJpc2Ugbm93IERyaXZlciBWZXJpZmllciB3YXMgY3Jhc2hpbmcgdGhlCj4+
Pj4+Pj4+PiBzeXN0ZW0gZXZlcnkgdGltZSBpbiB4ZW52YmQgKHNlZSBjcmFzaDIudHh0KS4gSSBk
b24ndCBrbm93IHdoeSBpdAo+Pj4+Pj4+Pj4gZGlkbid0IGNhdGNoIHRoYXQgcHJldmlvdXNseS4u
LiBJZiBhZGRpbmcgc29tZSB0aW1lb3V0IHRvIHRoZQo+Pj4+Pj4+Pj4gb2ZmZW5kaW5nIHdhaXQg
ZG9lc24ndCBicmVhayBhbnl0aGluZyBJJ2xsIHRyeSB0aGF0IHRvIHNlZSBpZiBJIGNhbgo+Pj4+
Pj4+Pj4gcmVwcm9kdWNlIHRoZSBwcmV2aW91cyBtZW1vcnkgY29ycnVwdGlvbnMuCj4+Pj4+Pj4+
Pgo+Pj4+Pj4+PiBUaG9zZSBjcmFzaGVzIGRvIGxvb2sgb2RkLiBJJ20gb24gUFRPIGZvciB0aGUg
bmV4dCB3ZWVrIGJ1dCBJJ2xsCj4+IGhhdmUKPj4+Pj4+Pj4gYSBsb29rIHdoZW4gSSBnZXQgYmFj
ayB0byB0aGUgb2ZmaWNlLiBJIGRpZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQo+Pj4+Pj4+PiBk
cml2ZXJzIGEgd2VlayBvciBzbyBiYWNrICh3aGlsZSBydW5uaW5nIHZiZCBwbHVnL3VucGx1ZyB0
ZXN0cykgYnV0Cj4+Pj4+Pj4+IHRoZXJlIGhhdmUgYmVlbiBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNp
bmNlIHRoZW4uCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFBhdWwKPj4+Pj4+Pj4KPj4+Pj4+PiBObyBwcm9i
bGVtLiBJIGF0dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZwo+
Pj4gc3lzdGVtCj4+Pj4+Pj4gc2h1dGRvd24sIGFmdGVyIHRoYXQgdGhlIE9TIGZhaWxlZCB0byBi
b290IChwcm9iYWJseSBjb3JydXB0ZWQKPj4+Pj4+PiBmaWxlc3lzdGVtIHNpbmNlIHRoZSBCU09E
IGl0c2VsZiBzZWVtZWQgdG8gaW5kaWNhdGUgdGhhdCkuIEkgdGhpbmsKPj4gZXZlcnkKPj4+Pj4+
PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3aGVyZSBidXQgSSdtIG5vdCB5
ZXQgZmFtaWxpYXIKPj4+IHdpdGgKPj4+Pj4+PiBYZW4gUFYgZGV2aWNlIGludGVyZmFjZXMgc28g
bm90IHN1cmUgd2hhdCB0aGF0IG1lYW5zLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSW4gdGhlIG1lYW50aW1l
IEkndmUgcnVuIG1vcmUgdGVzdHMgb24gbXkgbW9kaWZpZWQgeGVuaWZhY2UgZHJpdmVyCj4+IHRv
Cj4+Pj4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMg
YnV0IGV2ZXJ5dGhpbmcKPj4gc2VlbWVkCj4+PiB0bwo+Pj4+Pj4+IGJlIGZpbmUgdGhlcmUuCj4+
Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4gSSBhbHNvIGhhZCBhIGRpc2sgY29ycnVwdGlvbiBvbiB3aW5k
b3dzIDEwIHBybyA2NCBiaXQgd2l0aCBwdiBkcml2ZXJzCj4+Pj4+PiBidWlsZCBvZiAxMSBhdWd1
c3QgYnV0IEknbSBub3Qgc3VyZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywKPj4+
Pj4+IG9uIHNhbWUgZG9tVSBJIHN0YXJ0ZWQgdGVzdGluZyBhbHNvIHNuYXBzaG90IHdpdGggcWNv
dzIgZGlzayBvdmVybGF5Lgo+Pj4+Pj4gRm9yIHRoaXMgY2FzZSBJIGRvbid0IGhhdmUgdXNlZnVs
IGluZm9ybWF0aW9uIGJlY2F1c2UgZG9uJ3QgdHJ5IHRvCj4+Pj4+PiBib290IHdpbmRvd3MgYXQg
YWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bAo+Pj4+Pj4g
aW5mb3JtYXRpb24uCj4+Pj4+IEhhcHBlbiBhbm90aGVyIHRpbWUgYnV0IGFsc28gdGhpcyBJIHdh
cyB1bmFibGUgdG8gdW5kZXJzdGFuZCB3aGF0IGlzCj4+Pj4+IGV4YWN0bHkgdGhlIGNhdXNlLgo+
Pj4+PiBPbiB3aW5kb3dzIHJlYm9vdCBhbGwgc2VlbXMgd2FzIG9rIGFuZCBkaWQgYSBjbGVhbiBz
aHV0ZG93biBidXQgb24KPj4+Pj4gcmVib290IHNlYWJpb3MgZG9uJ3QgZm91bmQgYm9vdGFibGUg
ZGlzayBhbmQgcWVtdSBsb2cgZG9uJ3Qgc2hvdwo+PiB1c2VmdWwKPj4+Pj4gaW5mb3JtYXRpb25z
Lgo+Pj4+PiBxZW11LWltZyBjaGVjayBzaG93IGVycm9yczoKPj4+Pj4+IC91c3IvbGliL3hlbi9i
aW4vcWVtdS1pbWcgY2hlY2sgVzEwLmRpc2sxLmNvdy1zbjEKPj4+Pj4+IEVSUk9SIGNsdXN0ZXIg
MTQzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTIKPj4+Pj4+IExlYWtlZCBjbHVzdGVyIDEwNzcgcmVm
Y291bnQ9MSByZWZlcmVuY2U9MAo+Pj4+Pj4gRVJST1IgY2x1c3RlciAxMjIxIHJlZmNvdW50PTEg
cmVmZXJlbmNlPTIKPj4+Pj4+IExlYWtlZCBjbHVzdGVyIDI3MDMgcmVmY291bnQ9MSByZWZlcmVu
Y2U9MAo+Pj4+Pj4gTGVha2VkIGNsdXN0ZXIgNTIxMiByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+
Pj4+PiBMZWFrZWQgY2x1c3RlciAxMzM3NSByZWZjb3VudD0xIHJlZmVyZW5jZT0wCj4+Pj4+Pgo+
Pj4+Pj4gMiBlcnJvcnMgd2VyZSBmb3VuZCBvbiB0aGUgaW1hZ2UuCj4+Pj4+PiBEYXRhIG1heSBi
ZSBjb3JydXB0ZWQsIG9yIGZ1cnRoZXIgd3JpdGVzIHRvIHRoZSBpbWFnZSBtYXkgY29ycnVwdCBp
dC4KPj4+Pj4+Cj4+Pj4+PiA0IGxlYWtlZCBjbHVzdGVycyB3ZXJlIGZvdW5kIG9uIHRoZSBpbWFn
ZS4KPj4+Pj4+IFRoaXMgbWVhbnMgd2FzdGUgb2YgZGlzayBzcGFjZSwgYnV0IG5vIGhhcm0gdG8g
ZGF0YS4KPj4+Pj4+IDI3ODUzLzgxOTIwMCA9IDMuNDAlIGFsbG9jYXRlZCwgMjIuNjUlIGZyYWdt
ZW50ZWQsIDAuMDAlCj4+IGNvbXByZXNzZWQKPj4+Pj4+IGNsdXN0ZXJzCj4+Pj4+PiBJbWFnZSBl
bmQgb2Zmc2V0OiAxODUwNzM2NjQwCj4+Pj4+IEkgY3JlYXRlZCBpdCB3aXRoOgo+Pj4+PiAvdXNy
L2xpYi94ZW4vYmluL3FlbXUtaW1nIGNyZWF0ZSAtbwo+Pj4+PiBiYWNraW5nX2ZpbGU9VzEwLmRp
c2sxLnhtLGJhY2tpbmdfZm10PXJhdyAtZiBxY293MiBXMTAuZGlzazEuY293LQo+Pj4gc24xCj4+
Pj4+IGFuZCBjaGFuZ2VkIHRoZSB4bCBkb21VIGNvbmZpZ3VyYXRpb246Cj4+Pj4+IGRpc2s9Wycv
bW50L3ZtMi9XMTAuZGlzazEuY293LXNuMSxxY293MixoZGEscncnLC4uLgo+Pj4+PiBEb20wIGlz
IHdpdGggeGVuIDQuNi1yYzEgYW5kIHFlbXUgMi40LjAKPj4+Pj4gRG9tVSBpcyB3aW5kb3dzIDEw
IHBybyA2NCBiaXQgd2l0aCBwdiBkcml2ZXJzIGJ1aWxkIG9mIDExIGF1Z3VzdAo+Pj4+Pgo+Pj4+
PiBIb3cgSSBjYW4ga25vdyBmb3Igc3VyZSBpZiBpdCBpcyBhIHdpbnB2IG9yIHFlbXUgb3Igb3Ro
ZXIgcHJvYmxlbSBhbmQKPj4+Pj4gdGFrZSB1c2VmdWwgaW5mb3JtYXRpb24gdG8gcmVwb3J0Pwo+
Pj4+Pgo+Pj4+PiBUaGFua3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmds
aXNoLgo+Pj4+IFRoaXMgc291bmRzIHZlcnkgbXVjaCBsaWtlIGEgbGFjayBvZiBzeW5jaHJvbml6
YXRpb24gc29tZXdoZXJlLiBJIHJlY2FsbAo+Pj4gc2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRo
aXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2luZyBhcm91bmQgd2l0aAo+Pj4gT19ESVJFQ1Qg
Zm9yIG9wZW5pbmcgaW1hZ2VzLiBJIHdvbmRlciBpZiB3ZSBhcmUgbWlzc2luZyBhIGZsdXNoIG9w
ZXJhdGlvbgo+Pj4gb24gc2h1dGRvd24uCj4+Pj4gICAgIFBhdWwKPj4+Pgo+Pj4gVGhhbmtzIGZv
ciByZXBseS4KPj4+IEkgZGlkIGEgZmFzdCBzZWFyY2ggYnV0IEkgbm90IGZvdW5kIE9fRElSRUNU
IGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5kCj4+PiBpdCBvbmx5IGluIHFlbXUgY29kZS4KPj4+
IEFmdGVyIEkgdHJpZWQgd2l0aCBwYXRjaCB0aGF0IHNlZW1zIGFkZGVkIHNldHRpbmcgb2YgaXQg
Zm9yIHhlbjoKPj4+Cj4+IGh0dHA6Ly9naXQucWVtdS5vcmcvP3A9cWVtdS5naXQ7YT1jb21taXRk
aWZmO2g9NDU0YWU3MzRmMWQ5ZjU5MTM0NWZhNzgKPj4+IDM3NjQzNWE4ZTc0YmI0ZWRkCj4+PiBD
aGVja2luZyBpbiBsaWJ4bCBzZWVtcyBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBmcm9tIHNvbWUg
b2xkIHhlbiBwb3N0Cj4+PiBzZWVtcyB0aGF0IE9fRElSRUNUIGNyZWF0ZXMgcHJvYmxlbXMuCj4+
PiBJIHNob3VsZCB0cnkgaXQgZW5hYmxlIGRpcmVjdC1pby1zYWZlIGluIGRvbVVzIHFjb3cyIGRp
c2tzPwo+Pj4gQWRkZWQgYWxzbyBTdGVmYW5vIFN0YWJlbGxpbmkgYXMgY2MuCj4+PiBAU3RlZmFu
byBTdGFiZWxsaW5pOiBXaGF0IGlzIHRoZSBjdXJyZW50IGtub3cgc3RhdHVzIGFuZCByZXN1bHQg
b2YKPj4+IGRpcmVjdC1pby1zYWZlPwo+Pj4gU29ycnkgaXMgdGhlIHF1ZXN0aW9uIGFyZSBzdHVw
aWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkKPj4+IHBvc3Qgb2YgbGF0ZXN0
IHllYXJzIGFyZSBjb25mdXNlZCBhbmQgaW4gc2FtZSBjYXNlcyBzZWVtcyBhbHNvCj4+PiBjb250
cmFkaWN0b3J5IGFib3V0IHN0YWJpbGl0eS9pbnRlZ3JpdHkvcGVyZm9ybWFuY2UgdXNpbmcgaXQg
b3Igbm90Lgo+Pj4gSW4gcGFydGljdWxhciBzZWVtcyBjcmFzaCB3aXRoIHNvbWUga2VybmVscyBi
dXQgSSBub3QgdW5kZXJzdGFuZCBleGFjdGx5Cj4+PiB3aGF0IHZlcnNpb25zIGFuZC9vciB3aXRo
IHdoaWNoIHBhdGNoZXMuCj4+Pgo+Pj4gQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90
aGVyIG1haWwgd2hlbiBJIHdyb3RlIHRoYXQgYmFzZWQgb24gbXkKPj4+IGxhdGVzdCB0ZXN0IHdp
dGggeGVuIDQuNiB3aXRob3V0IHVkZXYgZmlsZSB3aW5kb3dzIGRvbVVzIHdpdGggbmV3IHB2Cj4+
PiBkcml2ZXIgZG9uJ3QgYm9vdCBhbmQgZm9yIHN0aWxsIGJvb3QgaXQgY29ycmVjdGx5IEkgbXVz
dCByZWFkZCB1ZGV2Cj4+PiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2UgcmVs
YXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMKPj4+IGRpZmZlcmVudD8KPj4+IGh0dHA6Ly9saXN0
cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDgvbXNnMDAwMzMuaHRt
bAo+Pj4KPj4gSSdtIG5vdCBzdXJlIHdoeSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhlcmUuIFRo
ZSBwcm9ibGVtIHlvdSBoYXZlCj4+IGFwcGVhcnMgdG8gYmUgUUVNVSBpZ25vcmluZyB0aGUgcmVx
dWVzdCB0byB1bnBsdWcgZW11bGF0ZWQgZGlza3MuIEkndmUgbm90Cj4+IHNlZW4gdGhpcyBiZWhh
dmlvdXIgb24gbXkgdGVzdCBib3ggc28gSSdsbCBuZWVkIHRvIGRpZyBzb21lIG1vcmUuCj4+Cj4g
SSBub3RpY2UgeW91IGhhdmUgNiBJREUgY2hhbm5lbHM/IEFyZSB5b3UgdXNpbmcgQUhDSSBieSBh
bnkgY2hhbmNlPyBJZiB5b3UgYXJlIHRoZW4gaXQgbG9va3MgbGlrZSBRRU1VIGlzIG5vdCBob25v
dXJpbmcgdGhlIHVucGx1ZyByZXF1ZXN0Li4uIHRoYXQgd291bGQgYmUgd2hlcmUgdGhlIGJ1ZyBp
cy4gSSdsbCB0cnkgdG8gcmVwcm8gbXlzZWxmLgo+Cj4gICAgUGF1bAoKSWYgSSByZW1lbWJlciBn
b29kIEkgYWxyZWFkeSB0cmllZCBhbHNvIHdpdGggaWRlIGFib3V0IGJvdGggcHJvYmxlbXMgCih1
ZGV2IGFuZCBxY293KSB3aXRoIHNhbWUgcmVzdWx0LgpJJ20gYWxzbyBhbHJlYWR5IHVzaW5nIG1h
aW5seSBhaGNpIG9uIHdpbmRvd3MgZG9tVXMgKHdpdGggbmV3IHB2KSBpbiAKdGVzdCBzeXN0ZW0g
Zm9yIHNvbWUgbW9udGhzLgpCdXQgaWYgbmVlZGVkIHRlbGwgbWUgYW5kIEknbGwgZG8gbW9yZSB0
ZXN0cy4KQWJvdXQgeW91ciByZWNlbnQgcGF0Y2hlcyBzZWVtcyBmaXggcmVsYXRlZCB0byB1bnBs
dWcgb3IgSSdtIHdyb25nPyBJJ2xsIApyZXRyeSB3aXRoIHRoZW0gdGhpcyBhZnRlcm5vb24gd2l0
aG91dCB1ZGV2IGZpbGUgaWYgbmV3IHB2IHRlc3QgYnVpbGQgCndpbGwgYmUgcmVhZHkuCgpUaGFu
a3MgZm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLgoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:39:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:39:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqHZ-0002dB-NR; Fri, 04 Sep 2015 12:39:53 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZXqHX-0002cm-Fe
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:39:51 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	DC/8B-24856-61199E55; Fri, 04 Sep 2015 12:39:50 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1441370388!32818724!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4410 invoked from network); 4 Sep 2015 12:39:49 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-2.tower-206.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 4 Sep 2015 12:39:49 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id CB25120463
	for <win-pv-devel@lists.xenproject.org>;
	Fri,  4 Sep 2015 08:39:48 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 04 Sep 2015 08:39:48 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=Mt4o8qK0MSSmjnNi
	b+Zuv87Glsc=; b=qoeY82hFu5apsppujyt67quu6mZXvOmf3gVzOuPf/3qR8Xng
	cmm+ENIPjM+Ca1Gry/dLd4Ix9G8+iNlA8wuFsdri6Jg4s1POBpRfDtuCKVJbeb3w
	AePswPvqwamyqOGSNrHJdnpzgRFZguGtQL+YtCHkYeFMkoI2ZOIxj/T7Q30=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=Mt4o8qK0MSSmjnN
	ib+Zuv87Glsc=; b=mnUb+D4tmJhL96spRaMuwx4SGuQOcfYMkIrOeG6dLrOokKZ
	l7OR4xVZCZH7PZCfNKpbb+JXYRl2RdvE7E3rJAYhwHzm+uFpW4jmm3NB+SVZLecb
	zFI2RDGiRwyrCt9UXecRBqa4BW7wS3XsC8djRJar4Lx6qV3Zi7zkXuxmhhB4=
X-Sasl-enc: O8UPQ/CO/XOUlNJC3ijlRrYljbfypMAVXwrzvJ8HtUR6 1441370388
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 01C92680113;
	Fri,  4 Sep 2015 08:39:47 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55E99119.9030809@invisiblethingslab.com>
Date: Fri, 4 Sep 2015 14:39:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
Content-Length: 19303
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxMDo1OCwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMjUgQXVndXN0IDIwMTUg
MTc6MTYKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJqZWN0
OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMS8yXSBBZGQgZm9yZWlnbiBwYWdlIG1hcHBpbmcgZnVu
Y3Rpb25zIHRvCj4+IHRoZSBHTlRUQUIgaW50ZXJmYWNlCj4+Cj4+IEdOVFRBQiBpbnRlcmZhY2Ug
bm93IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBtYXAgYW5kIHVubWFwIG1lbW9yeSBwYWdlcwo+PiBn
cmFudGVkIGJ5IGEgZm9yZWlnbiBkb21haW4uIFRoZSBwYWdlKHMpIGFyZSBtYXBwZWQgdW5kZXIg
YW4gYWRkcmVzcwo+PiBhbGxvY2F0ZWQgZnJvbSB0aGUgUENJIEJBUiBzcGFjZS4KPj4KPj4gU2ln
bmVkLW9mZi1ieTogUmFmYcWCIFdvamR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+
Cj4+IC0tLQo+PiAgaW5jbHVkZS9nbnR0YWJfaW50ZXJmYWNlLmggfCAgNjIgKysrKysrKysrKysr
KysrKysrKysrKystCj4+ICBpbmNsdWRlL3hlbi5oICAgICAgICAgICAgICB8ICAxOSArKysrKysr
Kwo+PiAgc3JjL3hlbi9ncmFudF90YWJsZS5jICAgICAgfCAgODUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCj4+ICBzcmMveGVuYnVzL2dudHRhYi5jICAgICAgICB8IDExNAo+PiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDQgZmlsZXMg
Y2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1n
aXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvZ250dGFiX2ludGVyZmFj
ZS5oCj4+IGluZGV4IGQyOTQ0MGEuLjAwMTY4ODggMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvZ250
dGFiX2ludGVyZmFjZS5oCj4+ICsrKyBiL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCj4+IEBA
IC0xNjMsNiArMTYzLDQ3IEBAIHR5cGVkZWYgVk9JRAo+PiAgICAgIElOICBQWEVOQlVTX0dOVFRB
Ql9DQUNIRSAgICBDYWNoZQo+PiAgICAgICk7Cj4+Cj4+ICsvKiEgXHR5cGVkZWYgWEVOQlVTX0dO
VFRBQl9NQVBfRk9SRUlHTl9QQUdFUwo+PiArICAgIFxicmllZiBNYXAgZm9yZWlnbiBtZW1vcnkg
cGFnZXMgaW50byB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UKPj4gKwo+PiArICAgIFxwYXJhbSBJ
bnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXIKPj4gKyAgICBccGFyYW0gRG9tYWluIFRoZSBk
b21pZCBvZiB0aGUgZm9yZWlnbiBkb21haW4gdGhhdCBncmFudGVkIHRoZSBwYWdlcwo+PiArICAg
IFxwYXJhbSBOdW1iZXJQYWdlcyBOdW1iZXIgb2YgcGFnZXMgdG8gbWFwCj4+ICsgICAgXHBhcmFt
IFJlZmVyZW5jZXMgQXJyYXkgb2YgZ3JhbnQgcmVmZXJlbmNlIG51bWJlcnMgc2hhcmVkIGJ5IHRo
ZQo+PiBmb3JlaWduIGRvbWFpbgo+PiArICAgIFxwYXJhbSBSZWFkT25seSBJZiBUUlVFLCBwYWdl
cyBhcmUgbWFwcGVkIHdpdGggcmVhZC1vbmx5IGFjY2Vzcwo+PiArICAgIFxwYXJhbSBBZGRyZXNz
IFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoYXQgdGhlIGZvcmVpZ24gcGFnZXMgYXJlIG1hcHBlZAo+
PiB1bmRlcgo+PiArICAgIChhbGxvY2F0ZWQgZnJvbSB0aGUgUENJIElPIHNwYWNlKQo+IAo+IFRo
ZXkgbmVlZCBub3QgYmUgLSB3ZSBjb3VsZCBkZWNyZWFzZV9yZXNlcnZhdGlvbiBvdXQgc29tZSBS
QU0gLSBzbyBJJ2Qgc2VlIHRoaXMgYXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHJhdGhlciB0
aGFuIHNvbWV0aGluZyB0byBiZSBkb2N1bWVudGVkIGluIHRoZSBpbnRlcmZhY2UuCj4gClRydWUu
Cgo+PiArICAgIFxwYXJhbSBIYW5kbGVzIEFuIGFycmF5IG9mIHRyYWNraW5nIG51bWJlcnMgdGhh
dCByZXByZXNlbnQgdGhlIG1hcHBpbmcKPj4gKyAgICBvZiBlYWNoIGluZGl2aWR1YWwgcGFnZQo+
PiArICovCj4gCj4gSXQncyBraW5kIG9mIHVnbHkgdG8gZXhwb3NlIFhlbidzIGdyYW50IG1hcHBp
bmcgaGFuZGxlcyBvdXQgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gQ291bGQgd2UgZG8gYmV0dGVy
PyBJIHRoaW5rIHdlIGNvdWxkOiBIb3cgYWJvdXQgdXNpbmcgYSBoYXNoIHRhYmxlIG9mIGJhc2Ug
YWRkcmVzc2VzIHRvIGdyYW50IG1hcCBoYW5kbGVzPyBBbHNvLCB0aGF0IG1lYW5zIHRoZSB1bm1h
cC1wYWdlcyBmdW5jdGlvbiBvbmx5IG5lZWQgdGFrZSB0aGUgYmFzZSBhZGRyZXNzOyBubyBuZWVk
IGZvciBudW1iZXIgb2YgcGFnZXMgb3IgaGFuZGxlIGFycmF5LiBUaGF0IG1ha2VzIHRoZSBmdW5j
dGlvbnMgbG9vayBmb3IgbGlrZSBhIG1hbGxvYygpL2ZyZWUoKSBwYWlyIHdoaWNoIEkgdGhpbmsg
aXMgbmljZXIuCj4gCkFncmVlZC4gSW4gbXkgY3VycmVudCBjb2RlIHhlbmlmYWNlIGRvZXMgbW9z
dCBvZiB0aGF0IGVuY2Fwc3VsYXRpb24gYnV0IHlvdXIgYXBwcm9hY2ggbWFrZXMgbW9yZSBzZW5z
ZS4KPj4gKwo+PiArdHlwZWRlZiBOVFNUQVRVUwo+PiArKCpYRU5CVVNfR05UVEFCX01BUF9GT1JF
SUdOX1BBR0VTKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNl
LAo+PiArICAgIElOICBVU0hPUlQgICAgICAgICAgICAgICAgICBEb21haW4sCj4+ICsgICAgSU4g
IFVMT05HICAgICAgICAgICAgICAgICAgIE51bWJlclBhZ2VzLAo+PiArICAgIElOICBQVUxPTkcg
ICAgICAgICAgICAgICAgICBSZWZlcmVuY2VzLAo+PiArICAgIElOICBCT09MRUFOICAgICAgICAg
ICAgICAgICBSZWFkT25seSwKPj4gKyAgICBPVVQgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgKkFk
ZHJlc3MsCj4+ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAgICpIYW5kbGVzCj4+ICsg
ICAgKTsKPj4gKwo+PiArLyohIFx0eXBlZGVmIFhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUwo+PiArICAgIFxicmllZiBVbm1hcCBmb3JlaWduIG1lbW9yeSBwYWdlcyBmcm9tIHRoZSBz
eXN0ZW0gYWRkcmVzcyBzcGFjZQo+PiArCj4+ICsgICAgXHBhcmFtIEludGVyZmFjZSBUaGUgaW50
ZXJmYWNlIGhlYWRlcgo+PiArICAgIFxwYXJhbSBOdW1iZXJQYWdlcyBOdW1iZXIgb2YgcGFnZXMg
dG8gdW5tYXAKPj4gKyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0aGF0
IHRoZSBmb3JlaWduIHBhZ2VzIGFyZSBtYXBwZWQKPj4gdW5kZXIKPj4gKyAgICBccGFyYW0gSGFu
ZGxlcyBBbiBhcnJheSBvZiB0cmFja2luZyBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHRoZSBtYXBw
aW5nCj4+ICsgKi8KPj4gK3R5cGVkZWYgTlRTVEFUVVMKPj4gKygqWEVOQlVTX0dOVFRBQl9VTk1B
UF9GT1JFSUdOX1BBR0VTKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50
ZXJmYWNlLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywK
Pj4gKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAg
UFVMT05HICAgICAgICAgICAgICAgICAgSGFuZGxlcwo+PiArICAgICk7Cj4+ICsKPj4gIC8vIHs3
NjM2NzlDNS1FNUMyLTRBNkQtOEI4OC02QkIwMkVDNDJEOEV9Cj4+ICBERUZJTkVfR1VJRChHVUlE
X1hFTkJVU19HTlRUQUJfSU5URVJGQUNFLAo+PiAgMHg3NjM2NzljNSwgMHhlNWMyLCAweDRhNmQs
IDB4OGIsIDB4ODgsIDB4NmIsIDB4YjAsIDB4MmUsIDB4YzQsIDB4MmQsIDB4OGUpOwo+PiBAQCAt
MTgyLDcgKzIyMywyNCBAQCBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YxIHsKPj4g
ICAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAgICAgICBHbnR0YWJEZXN0cm95Q2Fj
aGU7Cj4+ICB9Owo+Pgo+PiAtdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNF
X1YxCj4+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRUQUJfSU5URVJGQUNF
Owo+PiArLyohIFxzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyCj4+ICsgICAgXGJy
aWVmIEdOVFRBQiBpbnRlcmZhY2UgdmVyc2lvbiAyIChhZGRlZCBtYXAvdW5tYXAgZm9yZWlnbiBw
YWdlcykKPj4gKyAgICBcaW5ncm91cCBpbnRlcmZhY2VzCj4+ICsgKi8KPj4gK3N0cnVjdCBfWEVO
QlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgewo+PiArICAgIElOVEVSRkFDRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludGVyZmFjZTsKPj4gKyAgICBYRU5CVVNfR05UVEFCX0FDUVVJUkUgICAg
ICAgICAgICAgICBHbnR0YWJBY3F1aXJlOwo+PiArICAgIFhFTkJVU19HTlRUQUJfUkVMRUFTRSAg
ICAgICAgICAgICAgIEdudHRhYlJlbGVhc2U7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9DUkVBVEVf
Q0FDSEUgICAgICAgICAgR250dGFiQ3JlYXRlQ2FjaGU7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9Q
RVJNSVRfRk9SRUlHTl9BQ0NFU1MKPj4gR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzczsKPj4gKyAg
ICBYRU5CVVNfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUwo+PiBHbnR0YWJSZXZva2VGb3Jl
aWduQWNjZXNzOwo+PiArICAgIFhFTkJVU19HTlRUQUJfR0VUX1JFRkVSRU5DRSAgICAgICAgIEdu
dHRhYkdldFJlZmVyZW5jZTsKPj4gKyAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAg
ICAgICBHbnR0YWJEZXN0cm95Q2FjaGU7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9NQVBfRk9SRUlH
Tl9QQUdFUyAgICAgR250dGFiTWFwRm9yZWlnblBhZ2VzOwo+PiArICAgIFhFTkJVU19HTlRUQUJf
VU5NQVBfRk9SRUlHTl9QQUdFUwo+PiBHbnR0YWJVbm1hcEZvcmVpZ25QYWdlczsKPj4gK307Cj4+
ICsKPj4gK3R5cGVkZWYgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMgo+PiBYRU5C
VVNfR05UVEFCX0lOVEVSRkFDRSwgKlBYRU5CVVNfR05UVEFCX0lOVEVSRkFDRTsKPj4KPj4gIC8q
ISBcZGVmIFhFTkJVU19HTlRUQUIKPj4gICAgICBcYnJpZWYgTWFjcm8gYXQgYXNzaXN0IGluIG1l
dGhvZCBpbnZvY2F0aW9uCj4+IEBAIC0xOTMsNyArMjUxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1hF
TkJVU19HTlRUQUJfSU5URVJGQUNFX1YxCj4+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhF
TkJVU19HTlQKPj4gICNlbmRpZiAgLy8gX1dJTkRMTAo+Pgo+PiAgI2RlZmluZSBYRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAxCj4+IC0jZGVmaW5lIFhFTkJVU19HTlRUQUJfSU5U
RVJGQUNFX1ZFUlNJT05fTUFYIDEKPj4gKyNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0Vf
VkVSU0lPTl9NQVggMgo+Pgo+PiAgI2VuZGlmICAvLyBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0Vf
SAo+Pgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4uaCBiL2luY2x1ZGUveGVuLmgKPj4gaW5k
ZXggNjAwNzU4Mi4uMjNjN2FjMCAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS94ZW4uaAo+PiArKysg
Yi9pbmNsdWRlL3hlbi5oCj4+IEBAIC0yNTgsNiArMjU4LDI1IEBAIEdyYW50VGFibGVDb3B5KAo+
PiAgICAgIElOICBVTE9ORyAgICAgICAgICAgICAgIENvdW50Cj4+ICAgICAgKTsKPj4KPj4gK19f
Y2hlY2tSZXR1cm4KPj4gK1hFTl9BUEkKPj4gK05UU1RBVFVTCj4+ICtHcmFudFRhYmxlTWFwRm9y
ZWlnblBhZ2UoCj4+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4g
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgR3JhbnRSZWYsCj4+ICsgICAgSU4gIFBI
WVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MsCj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAg
ICAgICAgICAgIFJlYWRPbmx5LAo+PiArICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAgICAgICAq
SGFuZGxlCj4+ICsgICAgKTsKPj4gKwo+PiArX19jaGVja1JldHVybgo+PiArWEVOX0FQSQo+PiAr
TlRTVEFUVVMKPj4gK0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAo+PiArICAgIElOICBVTE9O
RyAgICAgICAgICAgICAgICAgICBIYW5kbGUsCj4+ICsgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1Mg
ICAgICAgIEFkZHJlc3MKPj4gKyAgICApOwo+PiArCj4+ICAvLyBTQ0hFRAo+Pgo+PiAgX19jaGVj
a1JldHVybgo+PiBkaWZmIC0tZ2l0IGEvc3JjL3hlbi9ncmFudF90YWJsZS5jIGIvc3JjL3hlbi9n
cmFudF90YWJsZS5jCj4+IGluZGV4IDZmYWNiM2YuLjY0NTAwNjIgMTAwNjQ0Cj4+IC0tLSBhL3Ny
Yy94ZW4vZ3JhbnRfdGFibGUuYwo+PiArKysgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMKPj4gQEAg
LTEzMSwzICsxMzEsODggQEAgZmFpbDE6Cj4+Cj4+ICAgICAgcmV0dXJuIHN0YXR1czsKPj4gIH0K
Pj4gKwo+PiArX19jaGVja1JldHVybgo+PiArWEVOX0FQSQo+PiArTlRTVEFUVVMKPj4gK0dyYW50
VGFibGVNYXBGb3JlaWduUGFnZSgKPj4gKyAgICBJTiAgVVNIT1JUICAgICAgICAgICAgICAgICAg
RG9tYWluLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJlZiwKPj4g
KyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksCj4+ICsgICAgT1VUIFVMT05HICAgICAgICAg
ICAgICAgICAgICpIYW5kbGUKPj4gKyAgICApCj4+ICt7Cj4+ICsgICAgc3RydWN0IGdudHRhYl9t
YXBfZ3JhbnRfcmVmIG9wOwo+PiArICAgIExPTkdfUFRSIHJjOwo+PiArICAgIE5UU1RBVFVTIHN0
YXR1czsKPj4gKwo+PiArICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsKPj4gKyAg
ICBvcC5kb20gPSBEb21haW47Cj4+ICsgICAgb3AucmVmID0gR3JhbnRSZWY7Cj4+ICsgICAgb3Au
ZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7Cj4+ICsgICAgaWYgKFJlYWRPbmx5KQo+PiArICAgICAg
ICBvcC5mbGFncyB8PSBHTlRNQVBfcmVhZG9ubHk7Cj4+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRk
cmVzcy5RdWFkUGFydDsKPj4gKwo+PiArICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX21h
cF9ncmFudF9yZWYsICZvcCwgMSk7Cj4+ICsKPj4gKyAgICBpZiAocmMgPCAwKSB7Cj4+ICsgICAg
ICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7Cj4+ICsgICAgICAgIGdvdG8gZmFpbDE7
Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7Cj4+
ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7Cj4+ICsgICAgICAgIGdvdG8g
ZmFpbDI7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgKkhhbmRsZSA9IG9wLmhhbmRsZTsKPj4gKwo+
PiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKPj4gKwo+PiArZmFpbDI6Cj4+ICsgICAgRXJy
b3IoImZhaWwyOiBvcC5zdGF0dXMgPSAlZFxuIiwgb3Auc3RhdHVzKTsKPiAKPiBJbiBnZW5lcmFs
IEkndmUgdHJpZWQgdG8ga2VlcCAnRXJyb3InIG1lc3NhZ2VzIG90aGVyIHRoYW4gJ2ZhaWwxOicg
IHBsYWluLiBSYXRoZXIgdGhhbiBqdXN0IHNldHRpbmcgc3RhdHVzIHRvIHVuc3VjY2Vzc2Z1bCBh
bmQgbG9nZ2luZyB0aGUgcmF3IGdyYW50IHN0YXR1cyBoZXJlIGl0IHdvdWxkIGJlIG5pY2VyIHRv
IGhhdmUgYSBHTlRTVF9UT19TVEFUVVMoKSBtYWNybyB0byBzZXQgc3RhdHVzIHRvIHNvbWV0aGlu
ZyBtZWFuaW5nZnVsIGFuZCB0aGVuIGp1c3QgbG9nIHRoYXQgaW4gdGhlICdmYWlsMTonIGJlbG93
LgpOb3RlZC4KPiAKPj4gK2ZhaWwxOgo+PiArICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0
YXR1cyk7Cj4+ICsKPj4gKyAgICByZXR1cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+ICtfX2NoZWNr
UmV0dXJuCj4+ICtYRU5fQVBJCj4+ICtOVFNUQVRVUwo+PiArR3JhbnRUYWJsZVVubWFwRm9yZWln
blBhZ2UoCj4+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgICAgIEhhbmRsZSwKPj4gKyAg
ICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcwo+PiArICAgICkKPj4gK3sKPj4g
KyAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiBvcDsKPj4gKyAgICBMT05HX1BUUiBy
YzsKPj4gKyAgICBOVFNUQVRVUyBzdGF0dXM7Cj4+ICsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KCZv
cCwgc2l6ZW9mKG9wKSk7Cj4+ICsgICAgb3AuaGFuZGxlID0gSGFuZGxlOwo+PiArICAgIG9wLmhv
c3RfYWRkciA9IEFkZHJlc3MuUXVhZFBhcnQ7Cj4+ICsKPj4gKyAgICByYyA9IEdyYW50VGFibGVP
cChHTlRUQUJPUF91bm1hcF9ncmFudF9yZWYsICZvcCwgMSk7Cj4+ICsKPj4gKyAgICBpZiAocmMg
PCAwKSB7Cj4+ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7Cj4+ICsgICAg
ICAgIGdvdG8gZmFpbDE7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBH
TlRTVF9va2F5KSB7Cj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7Cj4+
ICsgICAgICAgIGdvdG8gZmFpbDI7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIFNUQVRV
U19TVUNDRVNTOwo+PiArCj4+ICtmYWlsMjoKPj4gKyAgICBFcnJvcigib3Auc3RhdHVzID0gJWRc
biIsIG9wLnN0YXR1cyk7Cj4gCj4gU2FtZSBoZXJlLgo+IAo+PiArZmFpbDE6Cj4+ICsgICAgRXJy
b3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsKPj4gKwo+PiArICAgIHJldHVybiBzdGF0dXM7
Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9zcmMveGVuYnVzL2dudHRhYi5jIGIvc3JjL3hlbmJ1cy9n
bnR0YWIuYwo+PiBpbmRleCAxNjVlMzhmLi4yNGQ0NWFmIDEwMDY0NAo+PiAtLS0gYS9zcmMveGVu
YnVzL2dudHRhYi5jCj4+ICsrKyBiL3NyYy94ZW5idXMvZ250dGFiLmMKPj4gQEAgLTUzNCw2ICs1
MzQsOTAgQEAgR250dGFiR2V0UmVmZXJlbmNlKAo+PiAgICAgIHJldHVybiAoVUxPTkcpRW50cnkt
PlJlZmVyZW5jZTsKPj4gIH0KPj4KPj4gK3N0YXRpYyBOVFNUQVRVUwo+PiArR250dGFiTWFwRm9y
ZWlnblBhZ2VzKAo+PiArICAgIElOICBQSU5URVJGQUNFICAgICAgICAgICAgICBJbnRlcmZhY2Us
Cj4+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4gKyAgICBJTiAg
VUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsCj4+ICsgICAgSU4gIFBVTE9ORyAg
ICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAgICAg
ICAgICAgIFJlYWRPbmx5LAo+PiArICAgIE9VVCBQSFlTSUNBTF9BRERSRVNTICAgICAgICAqQWRk
cmVzcywKPj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZXMKPj4gKyAg
ICApCj4+ICt7Cj4+ICsgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKPj4g
KyAgICBQWEVOQlVTX0dOVFRBQl9DT05URVhUICAgICAgQ29udGV4dCA9IEludGVyZmFjZS0+Q29u
dGV4dDsKPj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgUGFnZUluZGV4Owo+PiAr
ICAgIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICBQYWdlQWRkcmVzczsKPj4gKwo+PiArICAg
IHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFjZShDb250ZXh0LT5GZG8sIE51bWJlclBhZ2VzICog
UEFHRV9TSVpFLAo+PiBBZGRyZXNzKTsKPj4gKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkK
Pj4gKyAgICAgICAgZ290byBmYWlsMTsKPj4gKwo+PiArICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
ID0gQWRkcmVzcy0+UXVhZFBhcnQ7Cj4+ICsKPj4gKyAgICBmb3IgKFBhZ2VJbmRleCA9IDA7IFBh
Z2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgrKykgewo+PiArICAgICAgICBzdGF0dXMg
PSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLAo+PiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdlSW5kZXhdLAo+PiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJlc3MsCj4+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25seSwKPj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSGFuZGxlc1tQYWdlSW5kZXhd
KSk7Cj4+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQo+PiArICAgICAgICAgICAg
Z290byBmYWlsMjsKPj4gKwo+PiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdF
X1NJWkU7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwo+PiAr
Cj4+ICtmYWlsMjoKPj4gKyAgICBFcnJvcigiZmFpbDI6IFBhZ2VJbmRleCAlbHUsIFBhZ2VBZGRy
ZXNzICVwLCBIYW5kbGUgJWx1XG4iLCBQYWdlSW5kZXgsCj4+IFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
LCBIYW5kbGVzW1BhZ2VJbmRleF0pOwo+PiArCj4+ICsgICAgd2hpbGUgKFBhZ2VJbmRleCA+IDAp
IHsKPj4gKyAgICAgICAgLS1QYWdlSW5kZXg7Cj4+ICsgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQ
YXJ0IC09IFBBR0VfU0laRTsKPj4gKwo+PiBBU1NFUlQoTlRfU1VDQ0VTUyhHcmFudFRhYmxlVW5t
YXBGb3JlaWduUGFnZShIYW5kbGVzW1BhZ2VJbmRleF0sCj4+IFBhZ2VBZGRyZXNzKSkpOwo+PiAr
ICAgIH0KPj4gKwo+PiArICAgIEZkb0ZyZWVJb1NwYWNlKENvbnRleHQtPkZkbywgKkFkZHJlc3Ms
IE51bWJlclBhZ2VzICogUEFHRV9TSVpFKTsKPj4gKwo+PiArZmFpbDE6Cj4+ICsgICAgRXJyb3Io
ImZhaWwxOiAoJTA4eClcbiIsIHN0YXR1cyk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30K
Pj4gKwo+PiArc3RhdGljIE5UU1RBVFVTCj4+ICtHbnR0YWJVbm1hcEZvcmVpZ25QYWdlcygKPj4g
KyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNlLAo+PiArICAgIElOICBV
TE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywKPj4gKyAgICBJTiAgUEhZU0lDQUxf
QUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAgUFVMT05HICAgICAgICAgICAgICAg
ICAgSGFuZGxlcwo+PiArICAgICkKPj4gK3sKPj4gKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzOwo+PiArICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0
ID0gSW50ZXJmYWNlLT5Db250ZXh0Owo+PiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAg
ICBQYWdlSW5kZXg7Cj4+ICsgICAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRy
ZXNzOwo+PiArCj4+ICsgICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgPSBBZGRyZXNzLlF1YWRQYXJ0
Owo+PiArCj4+ICsgICAgZm9yIChQYWdlSW5kZXggPSAwOyBQYWdlSW5kZXggPCBOdW1iZXJQYWdl
czsgUGFnZUluZGV4KyspIHsKPj4gKyAgICAgICAgc3RhdHVzID0gR3JhbnRUYWJsZVVubWFwRm9y
ZWlnblBhZ2UoSGFuZGxlc1tQYWdlSW5kZXhdLAo+PiBQYWdlQWRkcmVzcyk7Cj4+ICsgICAgICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQo+PiArICAgICAgICAgICAgZ290byBmYWlsMTsKPj4g
Kwo+PiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdFX1NJWkU7Cj4+ICsgICAg
fQo+PiArCj4+ICsgICAgRmRvRnJlZUlvU3BhY2UoQ29udGV4dC0+RmRvLCBBZGRyZXNzLCBOdW1i
ZXJQYWdlcyAqIFBBR0VfU0laRSk7Cj4+ICsgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwo+PiAr
Cj4+ICtmYWlsMToKPj4gKyAgICBFcnJvcigiZmFpbDE6ICglMDh4KSwgbGVha2luZyBtZW1vcnkg
YXQgJXAsIHNpemUgMHglbHguIFBhZ2VJbmRleCA9ICVsdSwKPj4gUGFnZUFkZHJlc3MgPSAlcCwg
SGFuZGxlID0gJWx1XG4iLAo+PiArICAgICAgICAgIHN0YXR1cywgQWRkcmVzcy5RdWFkUGFydCwg
TnVtYmVyUGFnZXMgKiBQQUdFX1NJWkUsIFBhZ2VJbmRleCwKPj4gUGFnZUFkZHJlc3MuUXVhZFBh
cnQsIEhhbmRsZXNbUGFnZUluZGV4XSk7Cj4gCj4gSG1tLiBXaGF0IGRvIHdlIHdhbnQgdG8gZG8g
b24gYW4gdW5tYXAgZmFpbHVyZT8gSSBzdXNwZWN0IHN1Y2ggYSBmYWlsdXJlIHByb2JhYmx5IG1l
YW5zIHNvbWV0aGluZyBoYXMgZ29uZSBwcmV0dHkgZGlzYXN0cm91c2x5IHdyb25nIHNvbWV3aGVy
ZS4gV2Ugc2hvdWxkIHByb2JhYmx5IGJ1Z2NoZWNrIGFuZCBsZXQgWGVuIGNsZWFuIHVwLCBvdGhl
cndpc2Ugd2UncmUgcG90ZW50aWFsbHkgcHJldmVudGluZyBhbm90aGVyIGRvbWFpbiBmcm9tIGR5
aW5nLgo+IApZZWFoLCBmYWlsdXJlcyB3aXRoIG1hcHBpbmcvdW5tYXBwaW5nIHNob3VsZCBwcm9i
YWJseSBiZSBmYXRhbC4gSSd2ZSBuZXZlciBlbmNvdW50ZXJlZCBhbnkgc28gaXQncyBwcm9iYWJs
eSBzYWZlciB0byBqdXN0IGJ1Z2NoZWNrLgoKPiAgIFBhdWwKPiAKPj4gKyAgICByZXR1cm4gc3Rh
dHVzOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgVk9JRAo+PiAgR250dGFiU3VzcGVuZENhbGxiYWNr
RWFybHkoCj4+ICAgICAgSU4gIFBWT0lEICAgICAgICAgICAgICAgQXJndW1lbnQKPj4gQEAgLTc4
OSw2ICs4NzMsMTkgQEAgc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjEK
Pj4gR250dGFiSW50ZXJmYWNlVmVyc2lvbjEgPSB7Cj4+ICAgICAgR250dGFiRGVzdHJveUNhY2hl
Cj4+ICB9Owo+Pgo+PiArc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIg
ICBHbnR0YWJJbnRlcmZhY2VWZXJzaW9uMiA9Cj4+IHsKPj4gKyAgICB7IHNpemVvZihzdHJ1Y3Qg
X1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyKSwgMiwgTlVMTCwgTlVMTCwgTlVMTAo+PiB9LAo+
PiArICAgIEdudHRhYkFjcXVpcmUsCj4+ICsgICAgR250dGFiUmVsZWFzZSwKPj4gKyAgICBHbnR0
YWJDcmVhdGVDYWNoZSwKPj4gKyAgICBHbnR0YWJQZXJtaXRGb3JlaWduQWNjZXNzLAo+PiArICAg
IEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MsCj4+ICsgICAgR250dGFiR2V0UmVmZXJlbmNlLAo+
PiArICAgIEdudHRhYkRlc3Ryb3lDYWNoZSwKPj4gKyAgICBHbnR0YWJNYXBGb3JlaWduUGFnZXMs
Cj4+ICsgICAgR250dGFiVW5tYXBGb3JlaWduUGFnZXMKPj4gK307Cj4+ICsKPj4gIE5UU1RBVFVT
Cj4+ICBHbnR0YWJJbml0aWFsaXplKAo+PiAgICAgIElOICBQWEVOQlVTX0ZETyAgICAgICAgICAg
ICBGZG8sCj4+IEBAIC04NzgsNiArOTc1LDIzIEBAIEdudHRhYkdldEludGVyZmFjZSgKPj4gICAg
ICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7Cj4+ICAgICAgICAgIGJyZWFrOwo+PiAgICAg
IH0KPj4gKyAgICBjYXNlIDI6IHsKPj4gKyAgICAgICAgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lO
VEVSRkFDRV9WMiAgKkdudHRhYkludGVyZmFjZTsKPj4gKwo+PiArICAgICAgICBHbnR0YWJJbnRl
cmZhY2UgPSAoc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMgo+PiAqKUludGVyZmFj
ZTsKPj4gKwo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfQlVGRkVSX09WRVJGTE9XOwo+PiAr
ICAgICAgICBpZiAoU2l6ZSA8IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNF
X1YyKSkKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICpHbnR0YWJJbnRl
cmZhY2UgPSBHbnR0YWJJbnRlcmZhY2VWZXJzaW9uMjsKPj4gKwo+PiArICAgICAgICBBU1NFUlQz
VShJbnRlcmZhY2UtPlZlcnNpb24sID09LCBWZXJzaW9uKTsKPj4gKyAgICAgICAgSW50ZXJmYWNl
LT5Db250ZXh0ID0gQ29udGV4dDsKPj4gKwo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VD
Q0VTUzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgfQo+PiAgICAgIGRlZmF1bHQ6Cj4+ICAg
ICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT1RfU1VQUE9SVEVEOwo+PiAgICAgICAgICBicmVhazsK
Pj4KClRoYW5rcyBmb3IgdGhlIGlucHV0LCBJJ2xsIHNlbmQgYSByZXZpc2VkIHZlcnNpb24gaW4g
YSBmZXcgZGF5cy4KCi0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3Mg
ZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2lu
LXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:39:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:39:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqHZ-0002dB-NR; Fri, 04 Sep 2015 12:39:53 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZXqHX-0002cm-Fe
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:39:51 +0000
Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id
	DC/8B-24856-61199E55; Fri, 04 Sep 2015 12:39:50 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1441370388!32818724!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4410 invoked from network); 4 Sep 2015 12:39:49 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-2.tower-206.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 4 Sep 2015 12:39:49 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id CB25120463
	for <win-pv-devel@lists.xenproject.org>;
	Fri,  4 Sep 2015 08:39:48 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 04 Sep 2015 08:39:48 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=Mt4o8qK0MSSmjnNi
	b+Zuv87Glsc=; b=qoeY82hFu5apsppujyt67quu6mZXvOmf3gVzOuPf/3qR8Xng
	cmm+ENIPjM+Ca1Gry/dLd4Ix9G8+iNlA8wuFsdri6Jg4s1POBpRfDtuCKVJbeb3w
	AePswPvqwamyqOGSNrHJdnpzgRFZguGtQL+YtCHkYeFMkoI2ZOIxj/T7Q30=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=Mt4o8qK0MSSmjnN
	ib+Zuv87Glsc=; b=mnUb+D4tmJhL96spRaMuwx4SGuQOcfYMkIrOeG6dLrOokKZ
	l7OR4xVZCZH7PZCfNKpbb+JXYRl2RdvE7E3rJAYhwHzm+uFpW4jmm3NB+SVZLecb
	zFI2RDGiRwyrCt9UXecRBqa4BW7wS3XsC8djRJar4Lx6qV3Zi7zkXuxmhhB4=
X-Sasl-enc: O8UPQ/CO/XOUlNJC3ijlRrYljbfypMAVXwrzvJ8HtUR6 1441370388
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 01C92680113;
	Fri,  4 Sep 2015 08:39:47 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55E99119.9030809@invisiblethingslab.com>
Date: Fri, 4 Sep 2015 14:39:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
Content-Length: 19303
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxMDo1OCwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMjUgQXVndXN0IDIwMTUg
MTc6MTYKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJqZWN0
OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMS8yXSBBZGQgZm9yZWlnbiBwYWdlIG1hcHBpbmcgZnVu
Y3Rpb25zIHRvCj4+IHRoZSBHTlRUQUIgaW50ZXJmYWNlCj4+Cj4+IEdOVFRBQiBpbnRlcmZhY2Ug
bm93IGluY2x1ZGVzIGZ1bmN0aW9ucyB0byBtYXAgYW5kIHVubWFwIG1lbW9yeSBwYWdlcwo+PiBn
cmFudGVkIGJ5IGEgZm9yZWlnbiBkb21haW4uIFRoZSBwYWdlKHMpIGFyZSBtYXBwZWQgdW5kZXIg
YW4gYWRkcmVzcwo+PiBhbGxvY2F0ZWQgZnJvbSB0aGUgUENJIEJBUiBzcGFjZS4KPj4KPj4gU2ln
bmVkLW9mZi1ieTogUmFmYcWCIFdvamR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb20+
Cj4+IC0tLQo+PiAgaW5jbHVkZS9nbnR0YWJfaW50ZXJmYWNlLmggfCAgNjIgKysrKysrKysrKysr
KysrKysrKysrKystCj4+ICBpbmNsdWRlL3hlbi5oICAgICAgICAgICAgICB8ICAxOSArKysrKysr
Kwo+PiAgc3JjL3hlbi9ncmFudF90YWJsZS5jICAgICAgfCAgODUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCj4+ICBzcmMveGVuYnVzL2dudHRhYi5jICAgICAgICB8IDExNAo+PiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDQgZmlsZXMg
Y2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1n
aXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvZ250dGFiX2ludGVyZmFj
ZS5oCj4+IGluZGV4IGQyOTQ0MGEuLjAwMTY4ODggMTAwNjQ0Cj4+IC0tLSBhL2luY2x1ZGUvZ250
dGFiX2ludGVyZmFjZS5oCj4+ICsrKyBiL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCj4+IEBA
IC0xNjMsNiArMTYzLDQ3IEBAIHR5cGVkZWYgVk9JRAo+PiAgICAgIElOICBQWEVOQlVTX0dOVFRB
Ql9DQUNIRSAgICBDYWNoZQo+PiAgICAgICk7Cj4+Cj4+ICsvKiEgXHR5cGVkZWYgWEVOQlVTX0dO
VFRBQl9NQVBfRk9SRUlHTl9QQUdFUwo+PiArICAgIFxicmllZiBNYXAgZm9yZWlnbiBtZW1vcnkg
cGFnZXMgaW50byB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UKPj4gKwo+PiArICAgIFxwYXJhbSBJ
bnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXIKPj4gKyAgICBccGFyYW0gRG9tYWluIFRoZSBk
b21pZCBvZiB0aGUgZm9yZWlnbiBkb21haW4gdGhhdCBncmFudGVkIHRoZSBwYWdlcwo+PiArICAg
IFxwYXJhbSBOdW1iZXJQYWdlcyBOdW1iZXIgb2YgcGFnZXMgdG8gbWFwCj4+ICsgICAgXHBhcmFt
IFJlZmVyZW5jZXMgQXJyYXkgb2YgZ3JhbnQgcmVmZXJlbmNlIG51bWJlcnMgc2hhcmVkIGJ5IHRo
ZQo+PiBmb3JlaWduIGRvbWFpbgo+PiArICAgIFxwYXJhbSBSZWFkT25seSBJZiBUUlVFLCBwYWdl
cyBhcmUgbWFwcGVkIHdpdGggcmVhZC1vbmx5IGFjY2Vzcwo+PiArICAgIFxwYXJhbSBBZGRyZXNz
IFRoZSBwaHlzaWNhbCBhZGRyZXNzIHRoYXQgdGhlIGZvcmVpZ24gcGFnZXMgYXJlIG1hcHBlZAo+
PiB1bmRlcgo+PiArICAgIChhbGxvY2F0ZWQgZnJvbSB0aGUgUENJIElPIHNwYWNlKQo+IAo+IFRo
ZXkgbmVlZCBub3QgYmUgLSB3ZSBjb3VsZCBkZWNyZWFzZV9yZXNlcnZhdGlvbiBvdXQgc29tZSBS
QU0gLSBzbyBJJ2Qgc2VlIHRoaXMgYXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIHJhdGhlciB0
aGFuIHNvbWV0aGluZyB0byBiZSBkb2N1bWVudGVkIGluIHRoZSBpbnRlcmZhY2UuCj4gClRydWUu
Cgo+PiArICAgIFxwYXJhbSBIYW5kbGVzIEFuIGFycmF5IG9mIHRyYWNraW5nIG51bWJlcnMgdGhh
dCByZXByZXNlbnQgdGhlIG1hcHBpbmcKPj4gKyAgICBvZiBlYWNoIGluZGl2aWR1YWwgcGFnZQo+
PiArICovCj4gCj4gSXQncyBraW5kIG9mIHVnbHkgdG8gZXhwb3NlIFhlbidzIGdyYW50IG1hcHBp
bmcgaGFuZGxlcyBvdXQgdGhyb3VnaCB0aGlzIGludGVyZmFjZS4gQ291bGQgd2UgZG8gYmV0dGVy
PyBJIHRoaW5rIHdlIGNvdWxkOiBIb3cgYWJvdXQgdXNpbmcgYSBoYXNoIHRhYmxlIG9mIGJhc2Ug
YWRkcmVzc2VzIHRvIGdyYW50IG1hcCBoYW5kbGVzPyBBbHNvLCB0aGF0IG1lYW5zIHRoZSB1bm1h
cC1wYWdlcyBmdW5jdGlvbiBvbmx5IG5lZWQgdGFrZSB0aGUgYmFzZSBhZGRyZXNzOyBubyBuZWVk
IGZvciBudW1iZXIgb2YgcGFnZXMgb3IgaGFuZGxlIGFycmF5LiBUaGF0IG1ha2VzIHRoZSBmdW5j
dGlvbnMgbG9vayBmb3IgbGlrZSBhIG1hbGxvYygpL2ZyZWUoKSBwYWlyIHdoaWNoIEkgdGhpbmsg
aXMgbmljZXIuCj4gCkFncmVlZC4gSW4gbXkgY3VycmVudCBjb2RlIHhlbmlmYWNlIGRvZXMgbW9z
dCBvZiB0aGF0IGVuY2Fwc3VsYXRpb24gYnV0IHlvdXIgYXBwcm9hY2ggbWFrZXMgbW9yZSBzZW5z
ZS4KPj4gKwo+PiArdHlwZWRlZiBOVFNUQVRVUwo+PiArKCpYRU5CVVNfR05UVEFCX01BUF9GT1JF
SUdOX1BBR0VTKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNl
LAo+PiArICAgIElOICBVU0hPUlQgICAgICAgICAgICAgICAgICBEb21haW4sCj4+ICsgICAgSU4g
IFVMT05HICAgICAgICAgICAgICAgICAgIE51bWJlclBhZ2VzLAo+PiArICAgIElOICBQVUxPTkcg
ICAgICAgICAgICAgICAgICBSZWZlcmVuY2VzLAo+PiArICAgIElOICBCT09MRUFOICAgICAgICAg
ICAgICAgICBSZWFkT25seSwKPj4gKyAgICBPVVQgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgKkFk
ZHJlc3MsCj4+ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAgICpIYW5kbGVzCj4+ICsg
ICAgKTsKPj4gKwo+PiArLyohIFx0eXBlZGVmIFhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUwo+PiArICAgIFxicmllZiBVbm1hcCBmb3JlaWduIG1lbW9yeSBwYWdlcyBmcm9tIHRoZSBz
eXN0ZW0gYWRkcmVzcyBzcGFjZQo+PiArCj4+ICsgICAgXHBhcmFtIEludGVyZmFjZSBUaGUgaW50
ZXJmYWNlIGhlYWRlcgo+PiArICAgIFxwYXJhbSBOdW1iZXJQYWdlcyBOdW1iZXIgb2YgcGFnZXMg
dG8gdW5tYXAKPj4gKyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0aGF0
IHRoZSBmb3JlaWduIHBhZ2VzIGFyZSBtYXBwZWQKPj4gdW5kZXIKPj4gKyAgICBccGFyYW0gSGFu
ZGxlcyBBbiBhcnJheSBvZiB0cmFja2luZyBudW1iZXJzIHRoYXQgcmVwcmVzZW50IHRoZSBtYXBw
aW5nCj4+ICsgKi8KPj4gK3R5cGVkZWYgTlRTVEFUVVMKPj4gKygqWEVOQlVTX0dOVFRBQl9VTk1B
UF9GT1JFSUdOX1BBR0VTKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50
ZXJmYWNlLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywK
Pj4gKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAg
UFVMT05HICAgICAgICAgICAgICAgICAgSGFuZGxlcwo+PiArICAgICk7Cj4+ICsKPj4gIC8vIHs3
NjM2NzlDNS1FNUMyLTRBNkQtOEI4OC02QkIwMkVDNDJEOEV9Cj4+ICBERUZJTkVfR1VJRChHVUlE
X1hFTkJVU19HTlRUQUJfSU5URVJGQUNFLAo+PiAgMHg3NjM2NzljNSwgMHhlNWMyLCAweDRhNmQs
IDB4OGIsIDB4ODgsIDB4NmIsIDB4YjAsIDB4MmUsIDB4YzQsIDB4MmQsIDB4OGUpOwo+PiBAQCAt
MTgyLDcgKzIyMywyNCBAQCBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YxIHsKPj4g
ICAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAgICAgICBHbnR0YWJEZXN0cm95Q2Fj
aGU7Cj4+ICB9Owo+Pgo+PiAtdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNF
X1YxCj4+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRUQUJfSU5URVJGQUNF
Owo+PiArLyohIFxzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyCj4+ICsgICAgXGJy
aWVmIEdOVFRBQiBpbnRlcmZhY2UgdmVyc2lvbiAyIChhZGRlZCBtYXAvdW5tYXAgZm9yZWlnbiBw
YWdlcykKPj4gKyAgICBcaW5ncm91cCBpbnRlcmZhY2VzCj4+ICsgKi8KPj4gK3N0cnVjdCBfWEVO
QlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgewo+PiArICAgIElOVEVSRkFDRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludGVyZmFjZTsKPj4gKyAgICBYRU5CVVNfR05UVEFCX0FDUVVJUkUgICAg
ICAgICAgICAgICBHbnR0YWJBY3F1aXJlOwo+PiArICAgIFhFTkJVU19HTlRUQUJfUkVMRUFTRSAg
ICAgICAgICAgICAgIEdudHRhYlJlbGVhc2U7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9DUkVBVEVf
Q0FDSEUgICAgICAgICAgR250dGFiQ3JlYXRlQ2FjaGU7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9Q
RVJNSVRfRk9SRUlHTl9BQ0NFU1MKPj4gR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzczsKPj4gKyAg
ICBYRU5CVVNfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUwo+PiBHbnR0YWJSZXZva2VGb3Jl
aWduQWNjZXNzOwo+PiArICAgIFhFTkJVU19HTlRUQUJfR0VUX1JFRkVSRU5DRSAgICAgICAgIEdu
dHRhYkdldFJlZmVyZW5jZTsKPj4gKyAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAg
ICAgICBHbnR0YWJEZXN0cm95Q2FjaGU7Cj4+ICsgICAgWEVOQlVTX0dOVFRBQl9NQVBfRk9SRUlH
Tl9QQUdFUyAgICAgR250dGFiTWFwRm9yZWlnblBhZ2VzOwo+PiArICAgIFhFTkJVU19HTlRUQUJf
VU5NQVBfRk9SRUlHTl9QQUdFUwo+PiBHbnR0YWJVbm1hcEZvcmVpZ25QYWdlczsKPj4gK307Cj4+
ICsKPj4gK3R5cGVkZWYgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMgo+PiBYRU5C
VVNfR05UVEFCX0lOVEVSRkFDRSwgKlBYRU5CVVNfR05UVEFCX0lOVEVSRkFDRTsKPj4KPj4gIC8q
ISBcZGVmIFhFTkJVU19HTlRUQUIKPj4gICAgICBcYnJpZWYgTWFjcm8gYXQgYXNzaXN0IGluIG1l
dGhvZCBpbnZvY2F0aW9uCj4+IEBAIC0xOTMsNyArMjUxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1hF
TkJVU19HTlRUQUJfSU5URVJGQUNFX1YxCj4+IFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhF
TkJVU19HTlQKPj4gICNlbmRpZiAgLy8gX1dJTkRMTAo+Pgo+PiAgI2RlZmluZSBYRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAxCj4+IC0jZGVmaW5lIFhFTkJVU19HTlRUQUJfSU5U
RVJGQUNFX1ZFUlNJT05fTUFYIDEKPj4gKyNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0Vf
VkVSU0lPTl9NQVggMgo+Pgo+PiAgI2VuZGlmICAvLyBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0Vf
SAo+Pgo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4uaCBiL2luY2x1ZGUveGVuLmgKPj4gaW5k
ZXggNjAwNzU4Mi4uMjNjN2FjMCAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS94ZW4uaAo+PiArKysg
Yi9pbmNsdWRlL3hlbi5oCj4+IEBAIC0yNTgsNiArMjU4LDI1IEBAIEdyYW50VGFibGVDb3B5KAo+
PiAgICAgIElOICBVTE9ORyAgICAgICAgICAgICAgIENvdW50Cj4+ICAgICAgKTsKPj4KPj4gK19f
Y2hlY2tSZXR1cm4KPj4gK1hFTl9BUEkKPj4gK05UU1RBVFVTCj4+ICtHcmFudFRhYmxlTWFwRm9y
ZWlnblBhZ2UoCj4+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4g
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgR3JhbnRSZWYsCj4+ICsgICAgSU4gIFBI
WVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MsCj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAg
ICAgICAgICAgIFJlYWRPbmx5LAo+PiArICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAgICAgICAq
SGFuZGxlCj4+ICsgICAgKTsKPj4gKwo+PiArX19jaGVja1JldHVybgo+PiArWEVOX0FQSQo+PiAr
TlRTVEFUVVMKPj4gK0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAo+PiArICAgIElOICBVTE9O
RyAgICAgICAgICAgICAgICAgICBIYW5kbGUsCj4+ICsgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1Mg
ICAgICAgIEFkZHJlc3MKPj4gKyAgICApOwo+PiArCj4+ICAvLyBTQ0hFRAo+Pgo+PiAgX19jaGVj
a1JldHVybgo+PiBkaWZmIC0tZ2l0IGEvc3JjL3hlbi9ncmFudF90YWJsZS5jIGIvc3JjL3hlbi9n
cmFudF90YWJsZS5jCj4+IGluZGV4IDZmYWNiM2YuLjY0NTAwNjIgMTAwNjQ0Cj4+IC0tLSBhL3Ny
Yy94ZW4vZ3JhbnRfdGFibGUuYwo+PiArKysgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMKPj4gQEAg
LTEzMSwzICsxMzEsODggQEAgZmFpbDE6Cj4+Cj4+ICAgICAgcmV0dXJuIHN0YXR1czsKPj4gIH0K
Pj4gKwo+PiArX19jaGVja1JldHVybgo+PiArWEVOX0FQSQo+PiArTlRTVEFUVVMKPj4gK0dyYW50
VGFibGVNYXBGb3JlaWduUGFnZSgKPj4gKyAgICBJTiAgVVNIT1JUICAgICAgICAgICAgICAgICAg
RG9tYWluLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJlZiwKPj4g
KyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksCj4+ICsgICAgT1VUIFVMT05HICAgICAgICAg
ICAgICAgICAgICpIYW5kbGUKPj4gKyAgICApCj4+ICt7Cj4+ICsgICAgc3RydWN0IGdudHRhYl9t
YXBfZ3JhbnRfcmVmIG9wOwo+PiArICAgIExPTkdfUFRSIHJjOwo+PiArICAgIE5UU1RBVFVTIHN0
YXR1czsKPj4gKwo+PiArICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsKPj4gKyAg
ICBvcC5kb20gPSBEb21haW47Cj4+ICsgICAgb3AucmVmID0gR3JhbnRSZWY7Cj4+ICsgICAgb3Au
ZmxhZ3MgPSBHTlRNQVBfaG9zdF9tYXA7Cj4+ICsgICAgaWYgKFJlYWRPbmx5KQo+PiArICAgICAg
ICBvcC5mbGFncyB8PSBHTlRNQVBfcmVhZG9ubHk7Cj4+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRk
cmVzcy5RdWFkUGFydDsKPj4gKwo+PiArICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX21h
cF9ncmFudF9yZWYsICZvcCwgMSk7Cj4+ICsKPj4gKyAgICBpZiAocmMgPCAwKSB7Cj4+ICsgICAg
ICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7Cj4+ICsgICAgICAgIGdvdG8gZmFpbDE7
Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7Cj4+
ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7Cj4+ICsgICAgICAgIGdvdG8g
ZmFpbDI7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgKkhhbmRsZSA9IG9wLmhhbmRsZTsKPj4gKwo+
PiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKPj4gKwo+PiArZmFpbDI6Cj4+ICsgICAgRXJy
b3IoImZhaWwyOiBvcC5zdGF0dXMgPSAlZFxuIiwgb3Auc3RhdHVzKTsKPiAKPiBJbiBnZW5lcmFs
IEkndmUgdHJpZWQgdG8ga2VlcCAnRXJyb3InIG1lc3NhZ2VzIG90aGVyIHRoYW4gJ2ZhaWwxOicg
IHBsYWluLiBSYXRoZXIgdGhhbiBqdXN0IHNldHRpbmcgc3RhdHVzIHRvIHVuc3VjY2Vzc2Z1bCBh
bmQgbG9nZ2luZyB0aGUgcmF3IGdyYW50IHN0YXR1cyBoZXJlIGl0IHdvdWxkIGJlIG5pY2VyIHRv
IGhhdmUgYSBHTlRTVF9UT19TVEFUVVMoKSBtYWNybyB0byBzZXQgc3RhdHVzIHRvIHNvbWV0aGlu
ZyBtZWFuaW5nZnVsIGFuZCB0aGVuIGp1c3QgbG9nIHRoYXQgaW4gdGhlICdmYWlsMTonIGJlbG93
LgpOb3RlZC4KPiAKPj4gK2ZhaWwxOgo+PiArICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0
YXR1cyk7Cj4+ICsKPj4gKyAgICByZXR1cm4gc3RhdHVzOwo+PiArfQo+PiArCj4+ICtfX2NoZWNr
UmV0dXJuCj4+ICtYRU5fQVBJCj4+ICtOVFNUQVRVUwo+PiArR3JhbnRUYWJsZVVubWFwRm9yZWln
blBhZ2UoCj4+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAgICAgICAgIEhhbmRsZSwKPj4gKyAg
ICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcwo+PiArICAgICkKPj4gK3sKPj4g
KyAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiBvcDsKPj4gKyAgICBMT05HX1BUUiBy
YzsKPj4gKyAgICBOVFNUQVRVUyBzdGF0dXM7Cj4+ICsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KCZv
cCwgc2l6ZW9mKG9wKSk7Cj4+ICsgICAgb3AuaGFuZGxlID0gSGFuZGxlOwo+PiArICAgIG9wLmhv
c3RfYWRkciA9IEFkZHJlc3MuUXVhZFBhcnQ7Cj4+ICsKPj4gKyAgICByYyA9IEdyYW50VGFibGVP
cChHTlRUQUJPUF91bm1hcF9ncmFudF9yZWYsICZvcCwgMSk7Cj4+ICsKPj4gKyAgICBpZiAocmMg
PCAwKSB7Cj4+ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7Cj4+ICsgICAg
ICAgIGdvdG8gZmFpbDE7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBH
TlRTVF9va2F5KSB7Cj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19VTlNVQ0NFU1NGVUw7Cj4+
ICsgICAgICAgIGdvdG8gZmFpbDI7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIFNUQVRV
U19TVUNDRVNTOwo+PiArCj4+ICtmYWlsMjoKPj4gKyAgICBFcnJvcigib3Auc3RhdHVzID0gJWRc
biIsIG9wLnN0YXR1cyk7Cj4gCj4gU2FtZSBoZXJlLgo+IAo+PiArZmFpbDE6Cj4+ICsgICAgRXJy
b3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsKPj4gKwo+PiArICAgIHJldHVybiBzdGF0dXM7
Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9zcmMveGVuYnVzL2dudHRhYi5jIGIvc3JjL3hlbmJ1cy9n
bnR0YWIuYwo+PiBpbmRleCAxNjVlMzhmLi4yNGQ0NWFmIDEwMDY0NAo+PiAtLS0gYS9zcmMveGVu
YnVzL2dudHRhYi5jCj4+ICsrKyBiL3NyYy94ZW5idXMvZ250dGFiLmMKPj4gQEAgLTUzNCw2ICs1
MzQsOTAgQEAgR250dGFiR2V0UmVmZXJlbmNlKAo+PiAgICAgIHJldHVybiAoVUxPTkcpRW50cnkt
PlJlZmVyZW5jZTsKPj4gIH0KPj4KPj4gK3N0YXRpYyBOVFNUQVRVUwo+PiArR250dGFiTWFwRm9y
ZWlnblBhZ2VzKAo+PiArICAgIElOICBQSU5URVJGQUNFICAgICAgICAgICAgICBJbnRlcmZhY2Us
Cj4+ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4gKyAgICBJTiAg
VUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsCj4+ICsgICAgSU4gIFBVTE9ORyAg
ICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAgICAg
ICAgICAgIFJlYWRPbmx5LAo+PiArICAgIE9VVCBQSFlTSUNBTF9BRERSRVNTICAgICAgICAqQWRk
cmVzcywKPj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZXMKPj4gKyAg
ICApCj4+ICt7Cj4+ICsgICAgTlRTVEFUVVMgICAgICAgICAgICAgICAgICAgIHN0YXR1czsKPj4g
KyAgICBQWEVOQlVTX0dOVFRBQl9DT05URVhUICAgICAgQ29udGV4dCA9IEludGVyZmFjZS0+Q29u
dGV4dDsKPj4gKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgUGFnZUluZGV4Owo+PiAr
ICAgIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgICAgICBQYWdlQWRkcmVzczsKPj4gKwo+PiArICAg
IHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFjZShDb250ZXh0LT5GZG8sIE51bWJlclBhZ2VzICog
UEFHRV9TSVpFLAo+PiBBZGRyZXNzKTsKPj4gKyAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkK
Pj4gKyAgICAgICAgZ290byBmYWlsMTsKPj4gKwo+PiArICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
ID0gQWRkcmVzcy0+UXVhZFBhcnQ7Cj4+ICsKPj4gKyAgICBmb3IgKFBhZ2VJbmRleCA9IDA7IFBh
Z2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgrKykgewo+PiArICAgICAgICBzdGF0dXMg
PSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLAo+PiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdlSW5kZXhdLAo+PiArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFkZHJlc3MsCj4+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25seSwKPj4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoSGFuZGxlc1tQYWdlSW5kZXhd
KSk7Cj4+ICsgICAgICAgIGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQo+PiArICAgICAgICAgICAg
Z290byBmYWlsMjsKPj4gKwo+PiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdF
X1NJWkU7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwo+PiAr
Cj4+ICtmYWlsMjoKPj4gKyAgICBFcnJvcigiZmFpbDI6IFBhZ2VJbmRleCAlbHUsIFBhZ2VBZGRy
ZXNzICVwLCBIYW5kbGUgJWx1XG4iLCBQYWdlSW5kZXgsCj4+IFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
LCBIYW5kbGVzW1BhZ2VJbmRleF0pOwo+PiArCj4+ICsgICAgd2hpbGUgKFBhZ2VJbmRleCA+IDAp
IHsKPj4gKyAgICAgICAgLS1QYWdlSW5kZXg7Cj4+ICsgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQ
YXJ0IC09IFBBR0VfU0laRTsKPj4gKwo+PiBBU1NFUlQoTlRfU1VDQ0VTUyhHcmFudFRhYmxlVW5t
YXBGb3JlaWduUGFnZShIYW5kbGVzW1BhZ2VJbmRleF0sCj4+IFBhZ2VBZGRyZXNzKSkpOwo+PiAr
ICAgIH0KPj4gKwo+PiArICAgIEZkb0ZyZWVJb1NwYWNlKENvbnRleHQtPkZkbywgKkFkZHJlc3Ms
IE51bWJlclBhZ2VzICogUEFHRV9TSVpFKTsKPj4gKwo+PiArZmFpbDE6Cj4+ICsgICAgRXJyb3Io
ImZhaWwxOiAoJTA4eClcbiIsIHN0YXR1cyk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30K
Pj4gKwo+PiArc3RhdGljIE5UU1RBVFVTCj4+ICtHbnR0YWJVbm1hcEZvcmVpZ25QYWdlcygKPj4g
KyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAgICAgSW50ZXJmYWNlLAo+PiArICAgIElOICBV
TE9ORyAgICAgICAgICAgICAgICAgICBOdW1iZXJQYWdlcywKPj4gKyAgICBJTiAgUEhZU0lDQUxf
QUREUkVTUyAgICAgICAgQWRkcmVzcywKPj4gKyAgICBJTiAgUFVMT05HICAgICAgICAgICAgICAg
ICAgSGFuZGxlcwo+PiArICAgICkKPj4gK3sKPj4gKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAg
ICAgICAgc3RhdHVzOwo+PiArICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0
ID0gSW50ZXJmYWNlLT5Db250ZXh0Owo+PiArICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAg
ICBQYWdlSW5kZXg7Cj4+ICsgICAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRy
ZXNzOwo+PiArCj4+ICsgICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgPSBBZGRyZXNzLlF1YWRQYXJ0
Owo+PiArCj4+ICsgICAgZm9yIChQYWdlSW5kZXggPSAwOyBQYWdlSW5kZXggPCBOdW1iZXJQYWdl
czsgUGFnZUluZGV4KyspIHsKPj4gKyAgICAgICAgc3RhdHVzID0gR3JhbnRUYWJsZVVubWFwRm9y
ZWlnblBhZ2UoSGFuZGxlc1tQYWdlSW5kZXhdLAo+PiBQYWdlQWRkcmVzcyk7Cj4+ICsgICAgICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQo+PiArICAgICAgICAgICAgZ290byBmYWlsMTsKPj4g
Kwo+PiArICAgICAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCArPSBQQUdFX1NJWkU7Cj4+ICsgICAg
fQo+PiArCj4+ICsgICAgRmRvRnJlZUlvU3BhY2UoQ29udGV4dC0+RmRvLCBBZGRyZXNzLCBOdW1i
ZXJQYWdlcyAqIFBBR0VfU0laRSk7Cj4+ICsgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwo+PiAr
Cj4+ICtmYWlsMToKPj4gKyAgICBFcnJvcigiZmFpbDE6ICglMDh4KSwgbGVha2luZyBtZW1vcnkg
YXQgJXAsIHNpemUgMHglbHguIFBhZ2VJbmRleCA9ICVsdSwKPj4gUGFnZUFkZHJlc3MgPSAlcCwg
SGFuZGxlID0gJWx1XG4iLAo+PiArICAgICAgICAgIHN0YXR1cywgQWRkcmVzcy5RdWFkUGFydCwg
TnVtYmVyUGFnZXMgKiBQQUdFX1NJWkUsIFBhZ2VJbmRleCwKPj4gUGFnZUFkZHJlc3MuUXVhZFBh
cnQsIEhhbmRsZXNbUGFnZUluZGV4XSk7Cj4gCj4gSG1tLiBXaGF0IGRvIHdlIHdhbnQgdG8gZG8g
b24gYW4gdW5tYXAgZmFpbHVyZT8gSSBzdXNwZWN0IHN1Y2ggYSBmYWlsdXJlIHByb2JhYmx5IG1l
YW5zIHNvbWV0aGluZyBoYXMgZ29uZSBwcmV0dHkgZGlzYXN0cm91c2x5IHdyb25nIHNvbWV3aGVy
ZS4gV2Ugc2hvdWxkIHByb2JhYmx5IGJ1Z2NoZWNrIGFuZCBsZXQgWGVuIGNsZWFuIHVwLCBvdGhl
cndpc2Ugd2UncmUgcG90ZW50aWFsbHkgcHJldmVudGluZyBhbm90aGVyIGRvbWFpbiBmcm9tIGR5
aW5nLgo+IApZZWFoLCBmYWlsdXJlcyB3aXRoIG1hcHBpbmcvdW5tYXBwaW5nIHNob3VsZCBwcm9i
YWJseSBiZSBmYXRhbC4gSSd2ZSBuZXZlciBlbmNvdW50ZXJlZCBhbnkgc28gaXQncyBwcm9iYWJs
eSBzYWZlciB0byBqdXN0IGJ1Z2NoZWNrLgoKPiAgIFBhdWwKPiAKPj4gKyAgICByZXR1cm4gc3Rh
dHVzOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgVk9JRAo+PiAgR250dGFiU3VzcGVuZENhbGxiYWNr
RWFybHkoCj4+ICAgICAgSU4gIFBWT0lEICAgICAgICAgICAgICAgQXJndW1lbnQKPj4gQEAgLTc4
OSw2ICs4NzMsMTkgQEAgc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjEK
Pj4gR250dGFiSW50ZXJmYWNlVmVyc2lvbjEgPSB7Cj4+ICAgICAgR250dGFiRGVzdHJveUNhY2hl
Cj4+ICB9Owo+Pgo+PiArc3RhdGljIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIg
ICBHbnR0YWJJbnRlcmZhY2VWZXJzaW9uMiA9Cj4+IHsKPj4gKyAgICB7IHNpemVvZihzdHJ1Y3Qg
X1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyKSwgMiwgTlVMTCwgTlVMTCwgTlVMTAo+PiB9LAo+
PiArICAgIEdudHRhYkFjcXVpcmUsCj4+ICsgICAgR250dGFiUmVsZWFzZSwKPj4gKyAgICBHbnR0
YWJDcmVhdGVDYWNoZSwKPj4gKyAgICBHbnR0YWJQZXJtaXRGb3JlaWduQWNjZXNzLAo+PiArICAg
IEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MsCj4+ICsgICAgR250dGFiR2V0UmVmZXJlbmNlLAo+
PiArICAgIEdudHRhYkRlc3Ryb3lDYWNoZSwKPj4gKyAgICBHbnR0YWJNYXBGb3JlaWduUGFnZXMs
Cj4+ICsgICAgR250dGFiVW5tYXBGb3JlaWduUGFnZXMKPj4gK307Cj4+ICsKPj4gIE5UU1RBVFVT
Cj4+ICBHbnR0YWJJbml0aWFsaXplKAo+PiAgICAgIElOICBQWEVOQlVTX0ZETyAgICAgICAgICAg
ICBGZG8sCj4+IEBAIC04NzgsNiArOTc1LDIzIEBAIEdudHRhYkdldEludGVyZmFjZSgKPj4gICAg
ICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7Cj4+ICAgICAgICAgIGJyZWFrOwo+PiAgICAg
IH0KPj4gKyAgICBjYXNlIDI6IHsKPj4gKyAgICAgICAgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lO
VEVSRkFDRV9WMiAgKkdudHRhYkludGVyZmFjZTsKPj4gKwo+PiArICAgICAgICBHbnR0YWJJbnRl
cmZhY2UgPSAoc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMgo+PiAqKUludGVyZmFj
ZTsKPj4gKwo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfQlVGRkVSX09WRVJGTE9XOwo+PiAr
ICAgICAgICBpZiAoU2l6ZSA8IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNF
X1YyKSkKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICpHbnR0YWJJbnRl
cmZhY2UgPSBHbnR0YWJJbnRlcmZhY2VWZXJzaW9uMjsKPj4gKwo+PiArICAgICAgICBBU1NFUlQz
VShJbnRlcmZhY2UtPlZlcnNpb24sID09LCBWZXJzaW9uKTsKPj4gKyAgICAgICAgSW50ZXJmYWNl
LT5Db250ZXh0ID0gQ29udGV4dDsKPj4gKwo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VD
Q0VTUzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgfQo+PiAgICAgIGRlZmF1bHQ6Cj4+ICAg
ICAgICAgIHN0YXR1cyA9IFNUQVRVU19OT1RfU1VQUE9SVEVEOwo+PiAgICAgICAgICBicmVhazsK
Pj4KClRoYW5rcyBmb3IgdGhlIGlucHV0LCBJJ2xsIHNlbmQgYSByZXZpc2VkIHZlcnNpb24gaW4g
YSBmZXcgZGF5cy4KCi0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3Mg
ZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2lu
LXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:45:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:45:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqND-0003Dz-6h; Fri, 04 Sep 2015 12:45:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZXqNB-0003Du-F0
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:45:41 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	63/DC-28221-47299E55; Fri, 04 Sep 2015 12:45:40 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1441370738!46801688!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19015 invoked from network); 4 Sep 2015 12:45:39 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-10.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 4 Sep 2015 12:45:39 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 48F4920367
	for <win-pv-devel@lists.xenproject.org>;
	Fri,  4 Sep 2015 08:45:38 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 04 Sep 2015 08:45:38 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=a4DFKw7P3WuBc7zx
	bq5PgH1swn0=; b=YEKVB68k8RvvJDcJTohMzcDb7KpXS9X5hMrLKvtA08C96CVg
	WKqCOigzpnz7813XojHAD5mWQThBUBimxjso4N9bfprzUNCiqpb+NujeoNj7R3dU
	LiAyiaEp4TFejoSh5zxxydeVivA4iEOM9u2CcIkQimAjlGWaUkHc4/5rRnA=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=a4DFKw7P3WuBc7z
	xbq5PgH1swn0=; b=U7ijmlZuD46DHSgr+ZH9XROqFEbBDEsvzTHv18SFUWZa/tO
	52d2BP5JrE2le5EBdfh9fv0ny7dzwclyPrp5z/GtsxlRpcmKCVlZyU3ji+GAtLA6
	jOHcCrFmpYFY1Lees6YsFcrxZ/plu8zoVtgvrLBTV3ByrAys/XIDytEa7JqA=
X-Sasl-enc: Rz7N0460Bs0G9haSXlsjqNRnBPk4lNaEL6vG2yULuxet 1441370736
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 54D6C6801E0;
	Fri,  4 Sep 2015 08:45:36 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94DA.6010003@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55E99275.2060303@invisiblethingslab.com>
Date: Fri, 4 Sep 2015 14:45:41 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
Content-Length: 21289
Subject: Re: [win-pv-devel] [PATCH 2/2] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxMToyNSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMjUgQXVndXN0IDIwMTUg
MTc6MTYKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJqZWN0
OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgc3VwcG9ydCBmb3IgY2hhbmdpbmcga2V5
Cj4+IHBlcm1pc3Npb25zIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UKPj4KPj4gU1RPUkUgaW50ZXJm
YWNlIG5vdyBpbmNsdWRlcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSBrZXkgcGVybWlzc2lvbnMuIFRo
aXMKPj4gYWxsb3dzIGdyYW50aW5nIGtleSBhY2Nlc3MgdG8gb3RoZXIsIG5vbi1wcml2aWxlZ2Vk
IGRvbWFpbnMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFJhZmHFgiBXb2pkecWCYSA8b21lZ0BpbnZp
c2libGV0aGluZ3NsYWIuY29tPgo+PiAtLS0KPj4gIGluY2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgg
fCAgNjggKysrKysrKysrKysrLQo+PiAgc3JjL3hlbmJ1cy9zdG9yZS5jICAgICAgICB8IDI1NAo+
PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4+ICAyIGZp
bGVzIGNoYW5nZWQsIDMxNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm
IC0tZ2l0IGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvc3RvcmVfaW50ZXJm
YWNlLmgKPj4gaW5kZXggNWJjYmJhMy4uYTM0YjgxNiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9z
dG9yZV9pbnRlcmZhY2UuaAo+PiArKysgYi9pbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oCj4+IEBA
IC01MCw2ICs1MCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX1RSQU5TQUNUSU9O
Cj4+IFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiwgKlBYRU5CVVNfUwo+PiAgKi8KPj4gIHR5cGVk
ZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0ggICAgICAgICAgWEVOQlVTX1NUT1JFX1dBVENI
LAo+PiAqUFhFTkJVU19TVE9SRV9XQVRDSDsKPj4KPj4gKy8qISBcdHlwZWRlZiBYRU5CVVNfU1RP
UkVfUEVSTUlTU0lPTl9NQVNLCj4+ICsgICAgXGJyaWVmIEJpdG1hc2sgb2YgWGVuU3RvcmUga2V5
IHBlcm1pc3Npb25zCj4+ICsgKi8KPj4gK3R5cGVkZWYgZW51bSBfWEVOQlVTX1NUT1JFX1BFUk1J
U1NJT05fTUFTSyB7Cj4+ICsgICAgWFNfUEVSTV9OT05FID0gMCwKPj4gKyAgICBYU19QRVJNX1JF
QUQgPSAxLAo+PiArICAgIFhTX1BFUk1fV1JJVEUgPSAyLAo+PiArfSBYRU5CVVNfU1RPUkVfUEVS
TUlTU0lPTl9NQVNLOwo+IAo+IFRoZXNlIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgaW4geHNfd2ly
ZS5oIHNvIEkgdGhpbmsgdGhleSBuZWVkIGEgWEVOQlVTX1NUT1JFXyBwcmVmaXggcmF0aGVyIHRo
YW4gWFNfLgo+IApBbHJpZ2h0LiBJIHRob3VnaHQgSSBzYXcgdGhlbSBpbiB0aGVyZSBidXQgbWF5
YmUgdGhhdCB3YXMgaW4gTGludXggbGlieGMgaW1wbGVtZW50YXRpb24uCgo+PiArCj4+ICsvKiEg
XHR5cGVkZWYgWEVOQlVTX1NUT1JFX1BFUk1JU1NJT04KPj4gKyAgICBcYnJpZWYgWGVuU3RvcmUg
a2V5IHBlcm1pc3Npb25zIGVudHJ5IGZvciBhIHNpbmdsZSBkb21haW4KPj4gKyAqLwo+PiArdHlw
ZWRlZiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9QRVJNSVNTSU9OIHsKPj4gKyAgICBVU0hPUlQgRG9t
YWluOwo+PiArICAgIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sgTWFzazsKPj4gK30gWEVO
QlVTX1NUT1JFX1BFUk1JU1NJT04sICpQWEVOQlVTX1NUT1JFX1BFUk1JU1NJT047Cj4+ICsKPj4g
IC8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfQUNRVUlSRQo+PiAgICAgIFxicmllZiBBY3F1aXJl
IGEgcmVmZXJlbmNlIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UKPj4KPj4gQEAgLTI0NywxMCArMjY0
LDM2IEBAIHR5cGVkZWYgVk9JRAo+PiAgICAgIElOICBQSU5URVJGQUNFICBJbnRlcmZhY2UKPj4g
ICAgICApOwo+Pgo+PiArLyohIFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OU19TRVQK
Pj4gKyAgICBcYnJpZWYgU2V0IHBlcm1pc3Npb25zIGZvciBhIFhlblN0b3JlIGtleQo+PiArCj4+
ICsgICAgXHBhcmFtIEludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGhlYWRlcgo+PiArICAgIFxwYXJh
bSBUcmFuc2FjdGlvbiBUaGUgdHJhbnNhY3Rpb24gaGFuZGxlIChOVUxMIGlmIHRoaXMgaXMgbm90
Cj4+ICsgICAgcGFydCBvZiBhIHRyYW5zYWN0aW9uKQo+PiArICAgIFxwYXJhbSBQcmVmaXggQW4g
b3B0aW9uYWwgcHJlZml4IGZvciB0aGUgXGEgTm9kZQo+PiArICAgIFxwYXJhbSBOb2RlIFRoZSBj
b25jYXRlbmF0aW9uIG9mIHRoZSBcYSBQcmVmaXggYW5kIHRoaXMgdmFsdWUgc3BlY2lmaWVzCj4+
ICsgICAgdGhlIFhlblN0b3JlIGtleSB0byBzZXQgcGVybWlzc2lvbnMgb2YKPj4gKyAgICBccGFy
YW0gUGVybWlzc2lvbnMgQW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0Cj4+ICsgICAgXHBh
cmFtIE51bWJlclBlcm1pc3Npb25zIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgXGEgUGVybWlz
c2lvbnMKPj4gYXJyYXkKPj4gKyAqLwo+PiArdHlwZWRlZiBOVFNUQVRVUwo+PiArKCpYRU5CVVNf
U1RPUkVfUEVSTUlTU0lPTlNfU0VUKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAg
ICAgICAgIEludGVyZmFjZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAg
IFRyYW5zYWN0aW9uIE9QVElPTkFMLAo+PiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgUHJlZml4IE9QVElPTkFMLAo+PiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1p
c3Npb25zLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVy
bWlzc2lvbnMKPj4gKyAgICApOwo+PiArCj4+ICAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEt
MkYxRTNBRDIxNEQ3fQo+PiAgREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNF
LAo+PiAgMHg4NjgyNGMzYiwgMHhkMzRlLCAweDQ3NTMsIDB4YjIsIDB4ODEsIDB4MmYsIDB4MWUs
IDB4M2EsIDB4ZDIsIDB4MTQsIDB4ZDcpOwo+Pgo+PiArLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9S
RV9JTlRFUkZBQ0VfVjEKPj4gKyAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQo+
PiArICAgIFxpbmdyb3VwIGludGVyZmFjZXMKPj4gKyAqLwo+PiAgc3RydWN0IF9YRU5CVVNfU1RP
UkVfSU5URVJGQUNFX1YxIHsKPj4gICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAg
IEludGVyZmFjZTsKPj4gICAgICBYRU5CVVNfU1RPUkVfQUNRVUlSRSAgICAgICAgICAgIFN0b3Jl
QWNxdWlyZTsKPj4gQEAgLTI2NywxMSArMzEwLDI4IEBAIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lO
VEVSRkFDRV9WMSB7Cj4+ICAgICAgWEVOQlVTX1NUT1JFX1BPTEwgICAgICAgICAgICAgICBTdG9y
ZVBvbGw7Cj4+ICB9Owo+Pgo+PiAtLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0Vf
VjEKPj4gLSAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQo+PiArLyohIFxzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIKPj4gKyAgICBcYnJpZWYgU1RPUkUgaW50ZXJm
YWNlIHZlcnNpb24gMgo+PiAgICAgIFxpbmdyb3VwIGludGVyZmFjZXMKPj4gICovCj4+IC10eXBl
ZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMQo+PiBYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFLCAqUFhFTkJVU19TVE9SRV9JTlRFUkZBQ0U7Cj4+ICtzdHJ1Y3QgX1hFTkJVU19TVE9S
RV9JTlRFUkZBQ0VfVjIgewo+PiArICAgIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAg
SW50ZXJmYWNlOwo+PiArICAgIFhFTkJVU19TVE9SRV9BQ1FVSVJFICAgICAgICAgICAgU3RvcmVB
Y3F1aXJlOwo+PiArICAgIFhFTkJVU19TVE9SRV9SRUxFQVNFICAgICAgICAgICAgU3RvcmVSZWxl
YXNlOwo+PiArICAgIFhFTkJVU19TVE9SRV9GUkVFICAgICAgICAgICAgICAgU3RvcmVGcmVlOwo+
PiArICAgIFhFTkJVU19TVE9SRV9SRUFEICAgICAgICAgICAgICAgU3RvcmVSZWFkOwo+PiArICAg
IFhFTkJVU19TVE9SRV9QUklOVEYgICAgICAgICAgICAgU3RvcmVQcmludGY7Cj4+ICsgICAgWEVO
QlVTX1NUT1JFX1JFTU9WRSAgICAgICAgICAgICBTdG9yZVJlbW92ZTsKPj4gKyAgICBYRU5CVVNf
U1RPUkVfRElSRUNUT1JZICAgICAgICAgIFN0b3JlRGlyZWN0b3J5Owo+PiArICAgIFhFTkJVU19T
VE9SRV9UUkFOU0FDVElPTl9TVEFSVCAgU3RvcmVUcmFuc2FjdGlvblN0YXJ0Owo+PiArICAgIFhF
TkJVU19TVE9SRV9UUkFOU0FDVElPTl9FTkQgICAgU3RvcmVUcmFuc2FjdGlvbkVuZDsKPj4gKyAg
ICBYRU5CVVNfU1RPUkVfV0FUQ0hfQUREICAgICAgICAgIFN0b3JlV2F0Y2hBZGQ7Cj4+ICsgICAg
WEVOQlVTX1NUT1JFX1dBVENIX1JFTU9WRSAgICAgICBTdG9yZVdhdGNoUmVtb3ZlOwo+PiArICAg
IFhFTkJVU19TVE9SRV9QT0xMICAgICAgICAgICAgICAgU3RvcmVQb2xsOwo+PiArICAgIFhFTkJV
U19TVE9SRV9QRVJNSVNTSU9OU19TRVQgICAgU3RvcmVQZXJtaXNzaW9uc1NldDsKPj4gK307Cj4+
ICsKPj4gK3R5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyCj4+IFhFTkJV
U19TVE9SRV9JTlRFUkZBQ0UsICpQWEVOQlVTX1NUT1JFX0lOVEVSRkFDRTsKPj4KPj4gIC8qISBc
ZGVmIFhFTkJVU19TVE9SRQo+PiAgICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9k
IGludm9jYXRpb24KPj4gQEAgLTI4Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X1NUT1JFX0lOVEVSRkFDRV9WMQo+PiBYRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19T
VE9SRQo+PiAgI2VuZGlmICAvLyBfV0lORExMCj4+Cj4+ICAjZGVmaW5lIFhFTkJVU19TVE9SRV9J
TlRFUkZBQ0VfVkVSU0lPTl9NSU4gIDEKPj4gLSNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFD
RV9WRVJTSU9OX01BWCAgMQo+PiArI2RlZmluZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZFUlNJ
T05fTUFYICAyCj4+Cj4+ICAjZW5kaWYgIC8vIF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX0gKPj4K
Pj4gZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5idXMvc3RvcmUuYwo+
PiBpbmRleCAxNmNhMzdiLi4yNjQyYmIzIDEwMDY0NAo+PiAtLS0gYS9zcmMveGVuYnVzL3N0b3Jl
LmMKPj4gKysrIGIvc3JjL3hlbmJ1cy9zdG9yZS5jCj4+IEBAIC0yMzYsNiArMjM2LDczIEBAIGZh
aWwxOgo+PiAgICAgIHJldHVybiBzdGF0dXM7Cj4+ICB9Cj4+Cj4+ICsvLyBwcmVwYXJlIGEgcmVx
dWVzdCB3aXRoIGtub3duIG51bWJlciBvZiBlbGVtZW50cwo+PiArc3RhdGljIE5UU1RBVFVTCj4+
ICtTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQoCj4+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfQ09O
VEVYVCAgICAgICBDb250ZXh0LAo+PiArICAgIE9VVCBQWEVOQlVTX1NUT1JFX1JFUVVFU1QgICAg
ICAgUmVxdWVzdCwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAgIFRyYW5z
YWN0aW9uIE9QVElPTkFMLAo+PiArICAgIElOICBlbnVtIHhzZF9zb2NrbXNnX3R5cGUgICAgICAg
VHlwZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9TRUdNRU5UICAgICAgIFNlZ21lbnRzLAo+
PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyU2VnbWVudHMKPj4g
KyAgICApCj4+ICt7Cj4+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBJZDsK
Pj4gKyAgICBLSVJRTCAgICAgICAgICAgICAgICAgICAgICAgICAgIElycWw7Cj4+ICsgICAgTlRT
VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Cj4+ICsgICAgVUxPTkcgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmRleDsKPj4gKwo+PiArICAgIEFTU0VSVChJc1plcm9NZW1v
cnkoUmVxdWVzdCwgc2l6ZW9mIChYRU5CVVNfU1RPUkVfUkVRVUVTVCkpKTsKPj4gKwo+PiArICAg
IHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKPj4gKyAgICBpZiAoTnVtYmVyU2Vn
bWVudHMgPiBYRU5CVVNfU1RPUkVfUkVRVUVTVF9TRUdNRU5UX0NPVU5UIC0gMSkKPj4gLy8gbmVl
ZCBvbmUgZm9yIHRoZSBoZWFkZXIKPj4gKyAgICAgICAgZ290byBmYWlsMTsKPj4gKwo+PiArICAg
IGlmIChUcmFuc2FjdGlvbiAhPSBOVUxMKSB7Cj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19V
TlNVQ0NFU1NGVUw7Cj4+ICsgICAgICAgIGlmICghVHJhbnNhY3Rpb24tPkFjdGl2ZSkKPj4gKyAg
ICAgICAgICAgIGdvdG8gZmFpbDI7Cj4+ICsKPj4gKyAgICAgICAgSWQgPSBUcmFuc2FjdGlvbi0+
SWQ7Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgSWQgPSAwOwo+PiArICAgIH0KPj4gKwo+
PiArICAgIFJlcXVlc3QtPkhlYWRlci50eXBlID0gVHlwZTsKPj4gKyAgICBSZXF1ZXN0LT5IZWFk
ZXIudHhfaWQgPSBJZDsKPj4gKyAgICBSZXF1ZXN0LT5IZWFkZXIubGVuID0gMDsKPj4gKwo+PiAr
ICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZDb250ZXh0LT5Mb2NrLCAmSXJxbCk7Cj4+ICsgICAgUmVx
dWVzdC0+SGVhZGVyLnJlcV9pZCA9IENvbnRleHQtPlJlcXVlc3RJZCsrOwo+PiArICAgIEtlUmVs
ZWFzZVNwaW5Mb2NrKCZDb250ZXh0LT5Mb2NrLCBJcnFsKTsKPj4gKwo+PiArICAgIC8vIGhlYWRl
ciBpcyB0aGUgZmlyc3QsIHRoZW4gdGhlIGFjdHVhbCBkYXRhCj4+ICsgICAgUmVxdWVzdC0+Q291
bnQgPSBOdW1iZXJTZWdtZW50cyArIDE7Cj4+ICsKPj4gKyAgICBSZXF1ZXN0LT5TZWdtZW50WzBd
LkRhdGEgPSAoUENIQVIpJlJlcXVlc3QtPkhlYWRlcjsKPj4gKyAgICBSZXF1ZXN0LT5TZWdtZW50
WzBdLk9mZnNldCA9IDA7Cj4+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5MZW5ndGggPSBzaXpl
b2Yoc3RydWN0IHhzZF9zb2NrbXNnKTsKPj4gKwo+IAo+IEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQg
dGhpcyBuZXcgZnVuY3Rpb24uIFNlZSBiZWxvdy4uLgo+IAo+PiArICAgIGZvciAoSW5kZXggPSAw
OyBJbmRleCA8IE51bWJlclNlZ21lbnRzOyBJbmRleCsrKSB7Cj4+ICsgICAgICAgIFJlcXVlc3Qt
PlNlZ21lbnRbSW5kZXgrMV0uRGF0YSA9IFNlZ21lbnRzW0luZGV4XS5EYXRhOwo+PiArICAgICAg
ICBSZXF1ZXN0LT5TZWdtZW50W0luZGV4KzFdLk9mZnNldCA9IDA7Cj4+ICsgICAgICAgIFJlcXVl
c3QtPlNlZ21lbnRbSW5kZXgrMV0uTGVuZ3RoID0gU2VnbWVudHNbSW5kZXhdLkxlbmd0aDsKPj4g
Kwo+PiArICAgICAgICBSZXF1ZXN0LT5IZWFkZXIubGVuICs9IFNlZ21lbnRzW0luZGV4XS5MZW5n
dGg7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgUmVxdWVzdC0+U3RhdGUgPSBYRU5CVVNfU1RPUkVf
UkVRVUVTVF9QUkVQQVJFRDsKPj4gKwo+PiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKPj4g
Kwo+PiArZmFpbDI6Cj4+ICsgICAgRXJyb3IoImZhaWwyXG4iKTsKPj4gKwo+PiArZmFpbDE6Cj4+
ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsKPj4gKyAgICByZXR1cm4gc3Rh
dHVzOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgVUxPTkcKPj4gIFN0b3JlQ29weVRvUmluZygKPj4g
ICAgICBJTiAgUFhFTkJVU19TVE9SRV9DT05URVhUICAgICAgICAgICBDb250ZXh0LAo+PiBAQCAt
NDM5LDcgKzUwNiw2IEBAIFN0b3JlSWdub3JlSGVhZGVyVHlwZSgKPj4gICAgICBjYXNlIFhTX1JF
TEVBU0U6Cj4+ICAgICAgY2FzZSBYU19HRVRfRE9NQUlOX1BBVEg6Cj4+ICAgICAgY2FzZSBYU19N
S0RJUjoKPj4gLSAgICBjYXNlIFhTX1NFVF9QRVJNUzoKPj4gICAgICBjYXNlIFhTX0lTX0RPTUFJ
Tl9JTlRST0RVQ0VEOgo+PiAgICAgIGNhc2UgWFNfUkVTVU1FOgo+PiAgICAgIGNhc2UgWFNfU0VU
X1RBUkdFVDoKPj4gQEAgLTQ2Nyw2ICs1MzMsNyBAQCBTdG9yZVZlcmlmeUhlYWRlcigKPj4gICAg
ICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1RSQU5TQUNUSU9OX0VORCAmJgo+PiAgICAgICAgICBI
ZWFkZXItPnR5cGUgIT0gWFNfV1JJVEUgJiYKPj4gICAgICAgICAgSGVhZGVyLT50eXBlICE9IFhT
X1JNICYmCj4+ICsgICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19TRVRfUEVSTVMgJiYKPj4gICAg
ICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1dBVENIX0VWRU5UICYmCj4+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19FUlJPUiAmJgo+PiAgICAgICAgICAhU3RvcmVJZ25vcmVIZWFkZXJUeXBl
KEhlYWRlci0+dHlwZSkpIHsKPj4gQEAgLTE3ODgsNiArMTg1NSwxNTcgQEAgU3RvcmVQb2xsKAo+
PiAgICAgIEtlUmVsZWFzZVNwaW5Mb2NrRnJvbURwY0xldmVsKCZDb250ZXh0LT5Mb2NrKTsKPj4g
IH0KPj4KPj4gK3N0YXRpYyBOVFNUQVRVUwo+PiArU3RvcmVQZXJtaXNzaW9uVG9TdHJpbmcoCj4+
ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNzaW9uLAo+PiArICAgIElO
ICBVTE9ORyBCdWZmZXJTaXplLAo+PiArICAgIE9VVCBQQ0hBUiBCdWZmZXIKPj4gKyAgICApCj4+
ICt7Cj4+ICsgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwo+
PiArCj4+ICsgICAgQVNTRVJUKEJ1ZmZlclNpemUgPiAxKTsKPj4gKwo+PiArICAgIHN3aXRjaCAo
UGVybWlzc2lvbi0+TWFzaykgewo+PiArICAgIGNhc2UgWFNfUEVSTV9XUklURToKPj4gKyAgICAg
ICAgKkJ1ZmZlciA9ICd3JzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgY2FzZSBYU19QRVJN
X1JFQUQ6Cj4+ICsgICAgICAgICpCdWZmZXIgPSAncic7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiAr
ICAgIGNhc2UgWFNfUEVSTV9SRUFEIHwgWFNfUEVSTV9XUklURToKPj4gKyAgICAgICAgKkJ1ZmZl
ciA9ICdiJzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgY2FzZSBYU19QRVJNX05PTkU6Cj4+
ICsgICAgICAgICpCdWZmZXIgPSAnbic7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArICAgIGRlZmF1
bHQ6Cj4+ICsgICAgICAgIGdvdG8gZmFpbDE7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJu
IFJ0bFN0cmluZ0NiUHJpbnRmQShCdWZmZXIgKyAxLCBCdWZmZXJTaXplIC0gMSwgIiV1IiwgUGVy
bWlzc2lvbi0KPj4+IERvbWFpbik7Cj4+ICsKPj4gK2ZhaWwxOgo+PiArICAgIEVycm9yKCJmYWls
MSAoJTA4eClcbiIsIHN0YXR1cyk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+
PiArc3RhdGljIE5UU1RBVFVTCj4+ICtTdG9yZVBlcm1pc3Npb25zU2V0KAo+PiArICAgIElOICBQ
SU5URVJGQUNFICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLAo+PiArICAgIElOICBQWEVOQlVT
X1NUT1JFX1RSQU5TQUNUSU9OICAgVHJhbnNhY3Rpb24gT1BUSU9OQUwsCj4+ICsgICAgSU4gIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICBQcmVmaXggT1BUSU9OQUwsCj4+ICsgICAgSU4gIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICBOb2RlLAo+PiArICAgIElOICBQWEVOQlVTX1NUT1JF
X1BFUk1JU1NJT04gICAgUGVybWlzc2lvbnMsCj4+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAg
ICAgICAgICAgICBOdW1iZXJQZXJtaXNzaW9ucwo+PiArICAgICkKPj4gK3sKPj4gKyAgICBQWEVO
QlVTX1NUT1JFX0NPTlRFWFQgICAgICAgICAgIENvbnRleHQgPSBJbnRlcmZhY2UtPkNvbnRleHQ7
Cj4+ICsgICAgWEVOQlVTX1NUT1JFX1JFUVVFU1QgICAgICAgICAgICBSZXF1ZXN0Owo+PiArICAg
IFBYRU5CVVNfU1RPUkVfUkVTUE9OU0UgICAgICAgICAgUmVzcG9uc2U7Cj4+ICsgICAgTlRTVEFU
VVMgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Cj4+ICsgICAgWEVOQlVTX1NUT1JFX1NF
R01FTlQKPj4gU2VnbWVudHNbWEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVF07Cj4+
ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwgQnVmZmVyU2l6ZTsK
Pj4gKyAgICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggPSBOVUxMOwo+PiAr
Cj4+ICsgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwo+PiArICAgIGlmIChO
dW1iZXJQZXJtaXNzaW9ucyA+IFhFTkJVU19TVE9SRV9SRVFVRVNUX1NFR01FTlRfQ09VTlQgLQo+
PiAyKSAvLyAxIGZvciBwYXRoLCAxIGZvciBoZWFkZXIgaW4gU3RvcmVQcmVwYXJlUmVxdWVzdEZp
eGVkCj4+ICsgICAgICAgIGdvdG8gZmFpbDE7Cj4+ICsKPj4gKyAgICBpZiAoUHJlZml4ICE9IE5V
TEwpIHsKPj4gKyAgICAgICAgLy8gd2UncmUgY29uY2F0ZW5hdGluZyBpdCBoZXJlIGluc3RlYWQg
b2YgcGFzc2luZyB0bwo+PiBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQgdG8gcmVkdWNlIHRoZSBu
dW1iZXIgb2Ygc2VnbWVudHMgdXNlZAo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVN
T1JZOwo+PiArICAgICAgICBQYXRoID0gX19TdG9yZUFsbG9jYXRlKFhFTlNUT1JFX0FCU19QQVRI
X01BWCk7Cj4+ICsgICAgICAgIGlmIChQYXRoID09IE5VTEwpCj4+ICsgICAgICAgICAgICBnb3Rv
IGZhaWwyOwo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NiUHJpbnRmQShQYXRo
LCBYRU5TVE9SRV9BQlNfUEFUSF9NQVgsCj4+ICIlcy8lcyIsIFByZWZpeCwgTm9kZSk7Cj4+ICsg
ICAgICAgIEFTU0VSVChOVF9TVUNDRVNTKHN0YXR1cykpOwo+PiArICAgICAgICBOb2RlID0gUGF0
aDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2Yo
WEVOQlVTX1NUT1JFX1JFUVVFU1QpKTsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KFNlZ21lbnRzLCBz
aXplb2YoU2VnbWVudHMpKTsKPj4gKwo+PiArICAgIFNlZ21lbnRzWzBdLkRhdGEgPSBOb2RlOyAv
LyBwYXRoCj4+ICsgICAgU2VnbWVudHNbMF0uT2Zmc2V0ID0gMDsKPj4gKyAgICBTZWdtZW50c1sw
XS5MZW5ndGggPSAoVUxPTkcpc3RybGVuKE5vZGUpICsgMTsgLy8gemVybyB0ZXJtaW5hdG9yCj4+
IHJlcXVpcmVkCj4+ICsKPj4gKyAgICBCdWZmZXJTaXplID0gMTY7Cj4+ICsgICAgZm9yIChJbmRl
eCA9IDA7IEluZGV4IDwgTnVtYmVyUGVybWlzc2lvbnM7IEluZGV4KyspIHsKPj4gKyAgICAgICAg
U2VnbWVudHNbSW5kZXggKyAxXS5EYXRhID0gX19TdG9yZUFsbG9jYXRlKEJ1ZmZlclNpemUpOwo+
PiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAxXS5EYXRhID09IE5VTEwpCj4+ICsgICAg
ICAgICAgICBnb3RvIGZhaWwzOwo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFN0b3JlUGVybWlz
c2lvblRvU3RyaW5nKCZQZXJtaXNzaW9uc1tJbmRleF0sIEJ1ZmZlclNpemUsCj4+IFNlZ21lbnRz
W0luZGV4KzFdLkRhdGEpOwo+PiArICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKPj4g
KyAgICAgICAgICAgIGdvdG8gZmFpbDQ7Cj4+ICsKPj4gKyAgICAgICAgU2VnbWVudHNbSW5kZXgg
KyAxXS5MZW5ndGggPSAoVUxPTkcpc3RybGVuKFNlZ21lbnRzW0luZGV4ICsKPj4gMV0uRGF0YSkg
KyAxOyAvLyB6ZXJvIHRlcm1pbmF0b3IgcmVxdWlyZWQKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBz
dGF0dXMgPSBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQoQ29udGV4dCwKPj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsCj4+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAo+PiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYU19TRVRfUEVSTVMsCj4+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlZ21lbnRzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOdW1iZXJQZXJtaXNzaW9ucyArIDEpOwo+PiArCj4gCj4gU2VnbWVudHMg
YXJlIG9ubHkgYSBjb2RpbmcgY29udmVuaWVuY2UuLi4gT24gdGhlICd3aXJlJyB0aGV5IGFyZSBq
dXN0IGNvbmNhdGVuYXRlZC4gU28gSSB0aGluayBhbGwgeW91IG5lZWQgdG8gaXMgcHJlcGFyZSBj
aGFyYWN0ZXIgYnVmZmVyIHdpdGggYSBOVUwgc2VwYXJhdGVkIGxpc3Qgb2YgPHBlcm0+PGRvbWlk
PiBzdHJpbmdzIGFuZCB0aGVuIHBhc3MgdGhhdCBhcyBhbiBhcmcgdG8gdGhlIG5vcm1hbCBlbGxp
cHNpcyBTdG9yZVByZXBhcmVSZXF1ZXN0KCkuIE5vIG5lZWQgZm9yIHRoZSBleHRyYSBjb21wbGV4
aXR5IG9mIGEgbmV3IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCgpLgoKVGhhdCBtYWtlcyBzZW5z
ZSwgd2hlbiBJIHdhcyB3cml0aW5nIHRoaXMgSSBqdXN0IGRlZmVycmVkIHRvIGhvdyBvdGhlciBz
dG9yZSBjYWxscyB3b3JrLgo+IAo+ICAgUGF1bAo+IAo+PiArICAgIGlmICghTlRfU1VDQ0VTUyhz
dGF0dXMpKQo+PiArICAgICAgICBnb3RvIGZhaWw1Owo+PiArCj4+ICsgICAgUmVzcG9uc2UgPSBT
dG9yZVN1Ym1pdFJlcXVlc3QoQ29udGV4dCwgJlJlcXVlc3QpOwo+PiArCj4+ICsgICAgc3RhdHVz
ID0gU1RBVFVTX05PX01FTU9SWTsKPj4gKyAgICBpZiAoUmVzcG9uc2UgPT0gTlVMTCkKPj4gKyAg
ICAgICAgZ290byBmYWlsNjsKPj4gKwo+PiArICAgIHN0YXR1cyA9IFN0b3JlQ2hlY2tSZXNwb25z
ZShSZXNwb25zZSk7Cj4+ICsgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCj4+ICsgICAgICAg
IGdvdG8gZmFpbDc7Cj4+ICsKPj4gKyAgICBTdG9yZUZyZWVSZXNwb25zZShSZXNwb25zZSk7Cj4+
ICsgICAgQVNTRVJUKElzWmVyb01lbW9yeSgmUmVxdWVzdCwgc2l6ZW9mKFhFTkJVU19TVE9SRV9S
RVFVRVNUKSkpOwo+PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlclBlcm1pc3Np
b25zOyBJbmRleCsrKQo+PiArICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRleCArIDFd
LkRhdGEpOwo+PiArCj4+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkKPj4gKyAgICAgICAgX19TdG9y
ZUZyZWUoUGF0aCk7Cj4+ICsKPj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cj4+ICsKPj4g
K2ZhaWw3Ogo+PiArICAgIEVycm9yKCJmYWlsN1xuIik7Cj4+ICsgICAgU3RvcmVGcmVlUmVzcG9u
c2UoUmVzcG9uc2UpOwo+PiArCj4+ICtmYWlsNjoKPj4gKyAgICBFcnJvcigiZmFpbDZcbiIpOwo+
PiArCj4+ICtmYWlsNToKPj4gKyAgICBFcnJvcigiZmFpbDVcbiIpOwo+PiArCj4+ICtmYWlsNDoK
Pj4gKyAgICBFcnJvcigiZmFpbDRcbiIpOwo+PiArCj4+ICtmYWlsMzoKPj4gKyAgICBFcnJvcigi
ZmFpbDNcbiIpOwo+PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlclBlcm1pc3Np
b25zOyBJbmRleCsrKQo+PiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAxXS5EYXRhICE9
IE5VTEwpCj4+ICsgICAgICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRleCArIDFdLkRh
dGEpOwo+PiArCj4+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkKPj4gKyAgICAgICAgX19TdG9yZUZy
ZWUoUGF0aCk7Cj4+ICsKPj4gK2ZhaWwyOgo+PiArICAgIEVycm9yKCJmYWlsMlxuIik7Cj4+ICsK
Pj4gKwo+PiArZmFpbDE6Cj4+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsK
Pj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2YoWEVOQlVTX1NUT1JF
X1JFUVVFU1QpKSk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+PiAgc3RhdGlj
Cj4+ICBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpCj4+ICBfSVJRTF9yZXF1aXJl
c18oSElHSF9MRVZFTCkKPj4gQEAgLTIyODUsNiArMjUwMywyMyBAQCBzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxCj4+IFN0b3JlSW50ZXJmYWNlVmVyc2lvbjEgPSB7Cj4+
ICAgICAgU3RvcmVQb2xsCj4+ICB9Owo+Pgo+PiArc3RhdGljIHN0cnVjdCBfWEVOQlVTX1NUT1JF
X0lOVEVSRkFDRV9WMiBTdG9yZUludGVyZmFjZVZlcnNpb24yID0gewo+PiArICAgIHsgc2l6ZW9m
KHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMiksIDIsIE5VTEwsIE5VTEwsIE5VTEwg
fSwKPj4gKyAgICBTdG9yZUFjcXVpcmUsCj4+ICsgICAgU3RvcmVSZWxlYXNlLAo+PiArICAgIFN0
b3JlRnJlZSwKPj4gKyAgICBTdG9yZVJlYWQsCj4+ICsgICAgU3RvcmVQcmludGYsCj4+ICsgICAg
U3RvcmVSZW1vdmUsCj4+ICsgICAgU3RvcmVEaXJlY3RvcnksCj4+ICsgICAgU3RvcmVUcmFuc2Fj
dGlvblN0YXJ0LAo+PiArICAgIFN0b3JlVHJhbnNhY3Rpb25FbmQsCj4+ICsgICAgU3RvcmVXYXRj
aEFkZCwKPj4gKyAgICBTdG9yZVdhdGNoUmVtb3ZlLAo+PiArICAgIFN0b3JlUG9sbCwKPj4gKyAg
ICBTdG9yZVBlcm1pc3Npb25zU2V0LAo+PiArfTsKPj4gKwo+PiAgTlRTVEFUVVMKPj4gIFN0b3Jl
SW5pdGlhbGl6ZSgKPj4gICAgICBJTiAgUFhFTkJVU19GRE8gICAgICAgICAgICAgRmRvLAo+PiBA
QCAtMjM4NCw2ICsyNjE5LDIzIEBAIFN0b3JlR2V0SW50ZXJmYWNlKAo+PiAgICAgICAgICBzdGF0
dXMgPSBTVEFUVVNfU1VDQ0VTUzsKPj4gICAgICAgICAgYnJlYWs7Cj4+ICAgICAgfQo+PiArICAg
IGNhc2UgMjogewo+PiArICAgICAgICBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIg
ICpTdG9yZUludGVyZmFjZTsKPj4gKwo+PiArICAgICAgICBTdG9yZUludGVyZmFjZSA9IChzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIgKilJbnRlcmZhY2U7Cj4+ICsKPj4gKyAgICAg
ICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9PVkVSRkxPVzsKPj4gKyAgICAgICAgaWYgKFNpemUg
PCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyKSkKPj4gKyAgICAgICAg
ICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICpTdG9yZUludGVyZmFjZSA9IFN0b3JlSW50ZXJm
YWNlVmVyc2lvbjI7Cj4+ICsKPj4gKyAgICAgICAgQVNTRVJUM1UoSW50ZXJmYWNlLT5WZXJzaW9u
LCA9PSAsIFZlcnNpb24pOwo+PiArICAgICAgICBJbnRlcmZhY2UtPkNvbnRleHQgPSBDb250ZXh0
Owo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwo+PiArICAgICAgICBi
cmVhazsKPj4gKyAgICB9Cj4+ICAgICAgZGVmYXVsdDoKPj4gICAgICAgICAgc3RhdHVzID0gU1RB
VFVTX05PVF9TVVBQT1JURUQ7Cj4+ICAgICAgICAgIGJyZWFrOwo+Pgo+PiBfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiB3aW4tcHYtZGV2ZWwgbWFpbGlu
ZyBsaXN0Cj4+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBodHRwOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbAoK
Ci0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0
dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:45:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:45:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqND-0003Dz-6h; Fri, 04 Sep 2015 12:45:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZXqNB-0003Du-F0
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:45:41 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	63/DC-28221-47299E55; Fri, 04 Sep 2015 12:45:40 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-27.messagelabs.com!1441370738!46801688!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19015 invoked from network); 4 Sep 2015 12:45:39 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-10.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 4 Sep 2015 12:45:39 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 48F4920367
	for <win-pv-devel@lists.xenproject.org>;
	Fri,  4 Sep 2015 08:45:38 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 04 Sep 2015 08:45:38 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=a4DFKw7P3WuBc7zx
	bq5PgH1swn0=; b=YEKVB68k8RvvJDcJTohMzcDb7KpXS9X5hMrLKvtA08C96CVg
	WKqCOigzpnz7813XojHAD5mWQThBUBimxjso4N9bfprzUNCiqpb+NujeoNj7R3dU
	LiAyiaEp4TFejoSh5zxxydeVivA4iEOM9u2CcIkQimAjlGWaUkHc4/5rRnA=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=a4DFKw7P3WuBc7z
	xbq5PgH1swn0=; b=U7ijmlZuD46DHSgr+ZH9XROqFEbBDEsvzTHv18SFUWZa/tO
	52d2BP5JrE2le5EBdfh9fv0ny7dzwclyPrp5z/GtsxlRpcmKCVlZyU3ji+GAtLA6
	jOHcCrFmpYFY1Lees6YsFcrxZ/plu8zoVtgvrLBTV3ByrAys/XIDytEa7JqA=
X-Sasl-enc: Rz7N0460Bs0G9haSXlsjqNRnBPk4lNaEL6vG2yULuxet 1441370736
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 54D6C6801E0;
	Fri,  4 Sep 2015 08:45:36 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94DA.6010003@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55E99275.2060303@invisiblethingslab.com>
Date: Fri, 4 Sep 2015 14:45:41 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B286A@AMSPEX01CL01.citrite.net>
Content-Length: 21289
Subject: Re: [win-pv-devel] [PATCH 2/2] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxMToyNSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMjUgQXVndXN0IDIwMTUg
MTc6MTYKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJqZWN0
OiBbd2luLXB2LWRldmVsXSBbUEFUQ0ggMi8yXSBBZGQgc3VwcG9ydCBmb3IgY2hhbmdpbmcga2V5
Cj4+IHBlcm1pc3Npb25zIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UKPj4KPj4gU1RPUkUgaW50ZXJm
YWNlIG5vdyBpbmNsdWRlcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSBrZXkgcGVybWlzc2lvbnMuIFRo
aXMKPj4gYWxsb3dzIGdyYW50aW5nIGtleSBhY2Nlc3MgdG8gb3RoZXIsIG5vbi1wcml2aWxlZ2Vk
IGRvbWFpbnMuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFJhZmHFgiBXb2pkecWCYSA8b21lZ0BpbnZp
c2libGV0aGluZ3NsYWIuY29tPgo+PiAtLS0KPj4gIGluY2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgg
fCAgNjggKysrKysrKysrKysrLQo+PiAgc3JjL3hlbmJ1cy9zdG9yZS5jICAgICAgICB8IDI1NAo+
PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4+ICAyIGZp
bGVzIGNoYW5nZWQsIDMxNyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm
IC0tZ2l0IGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvc3RvcmVfaW50ZXJm
YWNlLmgKPj4gaW5kZXggNWJjYmJhMy4uYTM0YjgxNiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9z
dG9yZV9pbnRlcmZhY2UuaAo+PiArKysgYi9pbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oCj4+IEBA
IC01MCw2ICs1MCwyMyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX1RSQU5TQUNUSU9O
Cj4+IFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiwgKlBYRU5CVVNfUwo+PiAgKi8KPj4gIHR5cGVk
ZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0ggICAgICAgICAgWEVOQlVTX1NUT1JFX1dBVENI
LAo+PiAqUFhFTkJVU19TVE9SRV9XQVRDSDsKPj4KPj4gKy8qISBcdHlwZWRlZiBYRU5CVVNfU1RP
UkVfUEVSTUlTU0lPTl9NQVNLCj4+ICsgICAgXGJyaWVmIEJpdG1hc2sgb2YgWGVuU3RvcmUga2V5
IHBlcm1pc3Npb25zCj4+ICsgKi8KPj4gK3R5cGVkZWYgZW51bSBfWEVOQlVTX1NUT1JFX1BFUk1J
U1NJT05fTUFTSyB7Cj4+ICsgICAgWFNfUEVSTV9OT05FID0gMCwKPj4gKyAgICBYU19QRVJNX1JF
QUQgPSAxLAo+PiArICAgIFhTX1BFUk1fV1JJVEUgPSAyLAo+PiArfSBYRU5CVVNfU1RPUkVfUEVS
TUlTU0lPTl9NQVNLOwo+IAo+IFRoZXNlIHZhbHVlcyBhcmUgbm90IGRlZmluZWQgaW4geHNfd2ly
ZS5oIHNvIEkgdGhpbmsgdGhleSBuZWVkIGEgWEVOQlVTX1NUT1JFXyBwcmVmaXggcmF0aGVyIHRo
YW4gWFNfLgo+IApBbHJpZ2h0LiBJIHRob3VnaHQgSSBzYXcgdGhlbSBpbiB0aGVyZSBidXQgbWF5
YmUgdGhhdCB3YXMgaW4gTGludXggbGlieGMgaW1wbGVtZW50YXRpb24uCgo+PiArCj4+ICsvKiEg
XHR5cGVkZWYgWEVOQlVTX1NUT1JFX1BFUk1JU1NJT04KPj4gKyAgICBcYnJpZWYgWGVuU3RvcmUg
a2V5IHBlcm1pc3Npb25zIGVudHJ5IGZvciBhIHNpbmdsZSBkb21haW4KPj4gKyAqLwo+PiArdHlw
ZWRlZiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9QRVJNSVNTSU9OIHsKPj4gKyAgICBVU0hPUlQgRG9t
YWluOwo+PiArICAgIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sgTWFzazsKPj4gK30gWEVO
QlVTX1NUT1JFX1BFUk1JU1NJT04sICpQWEVOQlVTX1NUT1JFX1BFUk1JU1NJT047Cj4+ICsKPj4g
IC8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfQUNRVUlSRQo+PiAgICAgIFxicmllZiBBY3F1aXJl
IGEgcmVmZXJlbmNlIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UKPj4KPj4gQEAgLTI0NywxMCArMjY0
LDM2IEBAIHR5cGVkZWYgVk9JRAo+PiAgICAgIElOICBQSU5URVJGQUNFICBJbnRlcmZhY2UKPj4g
ICAgICApOwo+Pgo+PiArLyohIFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OU19TRVQK
Pj4gKyAgICBcYnJpZWYgU2V0IHBlcm1pc3Npb25zIGZvciBhIFhlblN0b3JlIGtleQo+PiArCj4+
ICsgICAgXHBhcmFtIEludGVyZmFjZSBUaGUgaW50ZXJmYWNlIGhlYWRlcgo+PiArICAgIFxwYXJh
bSBUcmFuc2FjdGlvbiBUaGUgdHJhbnNhY3Rpb24gaGFuZGxlIChOVUxMIGlmIHRoaXMgaXMgbm90
Cj4+ICsgICAgcGFydCBvZiBhIHRyYW5zYWN0aW9uKQo+PiArICAgIFxwYXJhbSBQcmVmaXggQW4g
b3B0aW9uYWwgcHJlZml4IGZvciB0aGUgXGEgTm9kZQo+PiArICAgIFxwYXJhbSBOb2RlIFRoZSBj
b25jYXRlbmF0aW9uIG9mIHRoZSBcYSBQcmVmaXggYW5kIHRoaXMgdmFsdWUgc3BlY2lmaWVzCj4+
ICsgICAgdGhlIFhlblN0b3JlIGtleSB0byBzZXQgcGVybWlzc2lvbnMgb2YKPj4gKyAgICBccGFy
YW0gUGVybWlzc2lvbnMgQW4gYXJyYXkgb2YgcGVybWlzc2lvbnMgdG8gc2V0Cj4+ICsgICAgXHBh
cmFtIE51bWJlclBlcm1pc3Npb25zIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgXGEgUGVybWlz
c2lvbnMKPj4gYXJyYXkKPj4gKyAqLwo+PiArdHlwZWRlZiBOVFNUQVRVUwo+PiArKCpYRU5CVVNf
U1RPUkVfUEVSTUlTU0lPTlNfU0VUKSgKPj4gKyAgICBJTiAgUElOVEVSRkFDRSAgICAgICAgICAg
ICAgICAgIEludGVyZmFjZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAg
IFRyYW5zYWN0aW9uIE9QVElPTkFMLAo+PiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgUHJlZml4IE9QVElPTkFMLAo+PiArICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgTm9kZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1p
c3Npb25zLAo+PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVy
bWlzc2lvbnMKPj4gKyAgICApOwo+PiArCj4+ICAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEt
MkYxRTNBRDIxNEQ3fQo+PiAgREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNF
LAo+PiAgMHg4NjgyNGMzYiwgMHhkMzRlLCAweDQ3NTMsIDB4YjIsIDB4ODEsIDB4MmYsIDB4MWUs
IDB4M2EsIDB4ZDIsIDB4MTQsIDB4ZDcpOwo+Pgo+PiArLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9S
RV9JTlRFUkZBQ0VfVjEKPj4gKyAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQo+
PiArICAgIFxpbmdyb3VwIGludGVyZmFjZXMKPj4gKyAqLwo+PiAgc3RydWN0IF9YRU5CVVNfU1RP
UkVfSU5URVJGQUNFX1YxIHsKPj4gICAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAg
IEludGVyZmFjZTsKPj4gICAgICBYRU5CVVNfU1RPUkVfQUNRVUlSRSAgICAgICAgICAgIFN0b3Jl
QWNxdWlyZTsKPj4gQEAgLTI2NywxMSArMzEwLDI4IEBAIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lO
VEVSRkFDRV9WMSB7Cj4+ICAgICAgWEVOQlVTX1NUT1JFX1BPTEwgICAgICAgICAgICAgICBTdG9y
ZVBvbGw7Cj4+ICB9Owo+Pgo+PiAtLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0Vf
VjEKPj4gLSAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQo+PiArLyohIFxzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIKPj4gKyAgICBcYnJpZWYgU1RPUkUgaW50ZXJm
YWNlIHZlcnNpb24gMgo+PiAgICAgIFxpbmdyb3VwIGludGVyZmFjZXMKPj4gICovCj4+IC10eXBl
ZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMQo+PiBYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFLCAqUFhFTkJVU19TVE9SRV9JTlRFUkZBQ0U7Cj4+ICtzdHJ1Y3QgX1hFTkJVU19TVE9S
RV9JTlRFUkZBQ0VfVjIgewo+PiArICAgIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAg
SW50ZXJmYWNlOwo+PiArICAgIFhFTkJVU19TVE9SRV9BQ1FVSVJFICAgICAgICAgICAgU3RvcmVB
Y3F1aXJlOwo+PiArICAgIFhFTkJVU19TVE9SRV9SRUxFQVNFICAgICAgICAgICAgU3RvcmVSZWxl
YXNlOwo+PiArICAgIFhFTkJVU19TVE9SRV9GUkVFICAgICAgICAgICAgICAgU3RvcmVGcmVlOwo+
PiArICAgIFhFTkJVU19TVE9SRV9SRUFEICAgICAgICAgICAgICAgU3RvcmVSZWFkOwo+PiArICAg
IFhFTkJVU19TVE9SRV9QUklOVEYgICAgICAgICAgICAgU3RvcmVQcmludGY7Cj4+ICsgICAgWEVO
QlVTX1NUT1JFX1JFTU9WRSAgICAgICAgICAgICBTdG9yZVJlbW92ZTsKPj4gKyAgICBYRU5CVVNf
U1RPUkVfRElSRUNUT1JZICAgICAgICAgIFN0b3JlRGlyZWN0b3J5Owo+PiArICAgIFhFTkJVU19T
VE9SRV9UUkFOU0FDVElPTl9TVEFSVCAgU3RvcmVUcmFuc2FjdGlvblN0YXJ0Owo+PiArICAgIFhF
TkJVU19TVE9SRV9UUkFOU0FDVElPTl9FTkQgICAgU3RvcmVUcmFuc2FjdGlvbkVuZDsKPj4gKyAg
ICBYRU5CVVNfU1RPUkVfV0FUQ0hfQUREICAgICAgICAgIFN0b3JlV2F0Y2hBZGQ7Cj4+ICsgICAg
WEVOQlVTX1NUT1JFX1dBVENIX1JFTU9WRSAgICAgICBTdG9yZVdhdGNoUmVtb3ZlOwo+PiArICAg
IFhFTkJVU19TVE9SRV9QT0xMICAgICAgICAgICAgICAgU3RvcmVQb2xsOwo+PiArICAgIFhFTkJV
U19TVE9SRV9QRVJNSVNTSU9OU19TRVQgICAgU3RvcmVQZXJtaXNzaW9uc1NldDsKPj4gK307Cj4+
ICsKPj4gK3R5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyCj4+IFhFTkJV
U19TVE9SRV9JTlRFUkZBQ0UsICpQWEVOQlVTX1NUT1JFX0lOVEVSRkFDRTsKPj4KPj4gIC8qISBc
ZGVmIFhFTkJVU19TVE9SRQo+PiAgICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9k
IGludm9jYXRpb24KPj4gQEAgLTI4Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVT
X1NUT1JFX0lOVEVSRkFDRV9WMQo+PiBYRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19T
VE9SRQo+PiAgI2VuZGlmICAvLyBfV0lORExMCj4+Cj4+ICAjZGVmaW5lIFhFTkJVU19TVE9SRV9J
TlRFUkZBQ0VfVkVSU0lPTl9NSU4gIDEKPj4gLSNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFD
RV9WRVJTSU9OX01BWCAgMQo+PiArI2RlZmluZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZFUlNJ
T05fTUFYICAyCj4+Cj4+ICAjZW5kaWYgIC8vIF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX0gKPj4K
Pj4gZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5idXMvc3RvcmUuYwo+
PiBpbmRleCAxNmNhMzdiLi4yNjQyYmIzIDEwMDY0NAo+PiAtLS0gYS9zcmMveGVuYnVzL3N0b3Jl
LmMKPj4gKysrIGIvc3JjL3hlbmJ1cy9zdG9yZS5jCj4+IEBAIC0yMzYsNiArMjM2LDczIEBAIGZh
aWwxOgo+PiAgICAgIHJldHVybiBzdGF0dXM7Cj4+ICB9Cj4+Cj4+ICsvLyBwcmVwYXJlIGEgcmVx
dWVzdCB3aXRoIGtub3duIG51bWJlciBvZiBlbGVtZW50cwo+PiArc3RhdGljIE5UU1RBVFVTCj4+
ICtTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQoCj4+ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfQ09O
VEVYVCAgICAgICBDb250ZXh0LAo+PiArICAgIE9VVCBQWEVOQlVTX1NUT1JFX1JFUVVFU1QgICAg
ICAgUmVxdWVzdCwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElPTiAgIFRyYW5z
YWN0aW9uIE9QVElPTkFMLAo+PiArICAgIElOICBlbnVtIHhzZF9zb2NrbXNnX3R5cGUgICAgICAg
VHlwZSwKPj4gKyAgICBJTiAgUFhFTkJVU19TVE9SRV9TRUdNRU5UICAgICAgIFNlZ21lbnRzLAo+
PiArICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyU2VnbWVudHMKPj4g
KyAgICApCj4+ICt7Cj4+ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBJZDsK
Pj4gKyAgICBLSVJRTCAgICAgICAgICAgICAgICAgICAgICAgICAgIElycWw7Cj4+ICsgICAgTlRT
VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Cj4+ICsgICAgVUxPTkcgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJbmRleDsKPj4gKwo+PiArICAgIEFTU0VSVChJc1plcm9NZW1v
cnkoUmVxdWVzdCwgc2l6ZW9mIChYRU5CVVNfU1RPUkVfUkVRVUVTVCkpKTsKPj4gKwo+PiArICAg
IHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BBUkFNRVRFUjsKPj4gKyAgICBpZiAoTnVtYmVyU2Vn
bWVudHMgPiBYRU5CVVNfU1RPUkVfUkVRVUVTVF9TRUdNRU5UX0NPVU5UIC0gMSkKPj4gLy8gbmVl
ZCBvbmUgZm9yIHRoZSBoZWFkZXIKPj4gKyAgICAgICAgZ290byBmYWlsMTsKPj4gKwo+PiArICAg
IGlmIChUcmFuc2FjdGlvbiAhPSBOVUxMKSB7Cj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19V
TlNVQ0NFU1NGVUw7Cj4+ICsgICAgICAgIGlmICghVHJhbnNhY3Rpb24tPkFjdGl2ZSkKPj4gKyAg
ICAgICAgICAgIGdvdG8gZmFpbDI7Cj4+ICsKPj4gKyAgICAgICAgSWQgPSBUcmFuc2FjdGlvbi0+
SWQ7Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgSWQgPSAwOwo+PiArICAgIH0KPj4gKwo+
PiArICAgIFJlcXVlc3QtPkhlYWRlci50eXBlID0gVHlwZTsKPj4gKyAgICBSZXF1ZXN0LT5IZWFk
ZXIudHhfaWQgPSBJZDsKPj4gKyAgICBSZXF1ZXN0LT5IZWFkZXIubGVuID0gMDsKPj4gKwo+PiAr
ICAgIEtlQWNxdWlyZVNwaW5Mb2NrKCZDb250ZXh0LT5Mb2NrLCAmSXJxbCk7Cj4+ICsgICAgUmVx
dWVzdC0+SGVhZGVyLnJlcV9pZCA9IENvbnRleHQtPlJlcXVlc3RJZCsrOwo+PiArICAgIEtlUmVs
ZWFzZVNwaW5Mb2NrKCZDb250ZXh0LT5Mb2NrLCBJcnFsKTsKPj4gKwo+PiArICAgIC8vIGhlYWRl
ciBpcyB0aGUgZmlyc3QsIHRoZW4gdGhlIGFjdHVhbCBkYXRhCj4+ICsgICAgUmVxdWVzdC0+Q291
bnQgPSBOdW1iZXJTZWdtZW50cyArIDE7Cj4+ICsKPj4gKyAgICBSZXF1ZXN0LT5TZWdtZW50WzBd
LkRhdGEgPSAoUENIQVIpJlJlcXVlc3QtPkhlYWRlcjsKPj4gKyAgICBSZXF1ZXN0LT5TZWdtZW50
WzBdLk9mZnNldCA9IDA7Cj4+ICsgICAgUmVxdWVzdC0+U2VnbWVudFswXS5MZW5ndGggPSBzaXpl
b2Yoc3RydWN0IHhzZF9zb2NrbXNnKTsKPj4gKwo+IAo+IEkgZG9uJ3QgdGhpbmsgeW91IG5lZWQg
dGhpcyBuZXcgZnVuY3Rpb24uIFNlZSBiZWxvdy4uLgo+IAo+PiArICAgIGZvciAoSW5kZXggPSAw
OyBJbmRleCA8IE51bWJlclNlZ21lbnRzOyBJbmRleCsrKSB7Cj4+ICsgICAgICAgIFJlcXVlc3Qt
PlNlZ21lbnRbSW5kZXgrMV0uRGF0YSA9IFNlZ21lbnRzW0luZGV4XS5EYXRhOwo+PiArICAgICAg
ICBSZXF1ZXN0LT5TZWdtZW50W0luZGV4KzFdLk9mZnNldCA9IDA7Cj4+ICsgICAgICAgIFJlcXVl
c3QtPlNlZ21lbnRbSW5kZXgrMV0uTGVuZ3RoID0gU2VnbWVudHNbSW5kZXhdLkxlbmd0aDsKPj4g
Kwo+PiArICAgICAgICBSZXF1ZXN0LT5IZWFkZXIubGVuICs9IFNlZ21lbnRzW0luZGV4XS5MZW5n
dGg7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgUmVxdWVzdC0+U3RhdGUgPSBYRU5CVVNfU1RPUkVf
UkVRVUVTVF9QUkVQQVJFRDsKPj4gKwo+PiArICAgIHJldHVybiBTVEFUVVNfU1VDQ0VTUzsKPj4g
Kwo+PiArZmFpbDI6Cj4+ICsgICAgRXJyb3IoImZhaWwyXG4iKTsKPj4gKwo+PiArZmFpbDE6Cj4+
ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsKPj4gKyAgICByZXR1cm4gc3Rh
dHVzOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgVUxPTkcKPj4gIFN0b3JlQ29weVRvUmluZygKPj4g
ICAgICBJTiAgUFhFTkJVU19TVE9SRV9DT05URVhUICAgICAgICAgICBDb250ZXh0LAo+PiBAQCAt
NDM5LDcgKzUwNiw2IEBAIFN0b3JlSWdub3JlSGVhZGVyVHlwZSgKPj4gICAgICBjYXNlIFhTX1JF
TEVBU0U6Cj4+ICAgICAgY2FzZSBYU19HRVRfRE9NQUlOX1BBVEg6Cj4+ICAgICAgY2FzZSBYU19N
S0RJUjoKPj4gLSAgICBjYXNlIFhTX1NFVF9QRVJNUzoKPj4gICAgICBjYXNlIFhTX0lTX0RPTUFJ
Tl9JTlRST0RVQ0VEOgo+PiAgICAgIGNhc2UgWFNfUkVTVU1FOgo+PiAgICAgIGNhc2UgWFNfU0VU
X1RBUkdFVDoKPj4gQEAgLTQ2Nyw2ICs1MzMsNyBAQCBTdG9yZVZlcmlmeUhlYWRlcigKPj4gICAg
ICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1RSQU5TQUNUSU9OX0VORCAmJgo+PiAgICAgICAgICBI
ZWFkZXItPnR5cGUgIT0gWFNfV1JJVEUgJiYKPj4gICAgICAgICAgSGVhZGVyLT50eXBlICE9IFhT
X1JNICYmCj4+ICsgICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19TRVRfUEVSTVMgJiYKPj4gICAg
ICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1dBVENIX0VWRU5UICYmCj4+ICAgICAgICAgIEhlYWRl
ci0+dHlwZSAhPSBYU19FUlJPUiAmJgo+PiAgICAgICAgICAhU3RvcmVJZ25vcmVIZWFkZXJUeXBl
KEhlYWRlci0+dHlwZSkpIHsKPj4gQEAgLTE3ODgsNiArMTg1NSwxNTcgQEAgU3RvcmVQb2xsKAo+
PiAgICAgIEtlUmVsZWFzZVNwaW5Mb2NrRnJvbURwY0xldmVsKCZDb250ZXh0LT5Mb2NrKTsKPj4g
IH0KPj4KPj4gK3N0YXRpYyBOVFNUQVRVUwo+PiArU3RvcmVQZXJtaXNzaW9uVG9TdHJpbmcoCj4+
ICsgICAgSU4gIFBYRU5CVVNfU1RPUkVfUEVSTUlTU0lPTiBQZXJtaXNzaW9uLAo+PiArICAgIElO
ICBVTE9ORyBCdWZmZXJTaXplLAo+PiArICAgIE9VVCBQQ0hBUiBCdWZmZXIKPj4gKyAgICApCj4+
ICt7Cj4+ICsgICAgTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwo+
PiArCj4+ICsgICAgQVNTRVJUKEJ1ZmZlclNpemUgPiAxKTsKPj4gKwo+PiArICAgIHN3aXRjaCAo
UGVybWlzc2lvbi0+TWFzaykgewo+PiArICAgIGNhc2UgWFNfUEVSTV9XUklURToKPj4gKyAgICAg
ICAgKkJ1ZmZlciA9ICd3JzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgY2FzZSBYU19QRVJN
X1JFQUQ6Cj4+ICsgICAgICAgICpCdWZmZXIgPSAncic7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiAr
ICAgIGNhc2UgWFNfUEVSTV9SRUFEIHwgWFNfUEVSTV9XUklURToKPj4gKyAgICAgICAgKkJ1ZmZl
ciA9ICdiJzsKPj4gKyAgICAgICAgYnJlYWs7Cj4+ICsgICAgY2FzZSBYU19QRVJNX05PTkU6Cj4+
ICsgICAgICAgICpCdWZmZXIgPSAnbic7Cj4+ICsgICAgICAgIGJyZWFrOwo+PiArICAgIGRlZmF1
bHQ6Cj4+ICsgICAgICAgIGdvdG8gZmFpbDE7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJu
IFJ0bFN0cmluZ0NiUHJpbnRmQShCdWZmZXIgKyAxLCBCdWZmZXJTaXplIC0gMSwgIiV1IiwgUGVy
bWlzc2lvbi0KPj4+IERvbWFpbik7Cj4+ICsKPj4gK2ZhaWwxOgo+PiArICAgIEVycm9yKCJmYWls
MSAoJTA4eClcbiIsIHN0YXR1cyk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+
PiArc3RhdGljIE5UU1RBVFVTCj4+ICtTdG9yZVBlcm1pc3Npb25zU2V0KAo+PiArICAgIElOICBQ
SU5URVJGQUNFICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlLAo+PiArICAgIElOICBQWEVOQlVT
X1NUT1JFX1RSQU5TQUNUSU9OICAgVHJhbnNhY3Rpb24gT1BUSU9OQUwsCj4+ICsgICAgSU4gIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICBQcmVmaXggT1BUSU9OQUwsCj4+ICsgICAgSU4gIFBD
SEFSICAgICAgICAgICAgICAgICAgICAgICBOb2RlLAo+PiArICAgIElOICBQWEVOQlVTX1NUT1JF
X1BFUk1JU1NJT04gICAgUGVybWlzc2lvbnMsCj4+ICsgICAgSU4gIFVMT05HICAgICAgICAgICAg
ICAgICAgICAgICBOdW1iZXJQZXJtaXNzaW9ucwo+PiArICAgICkKPj4gK3sKPj4gKyAgICBQWEVO
QlVTX1NUT1JFX0NPTlRFWFQgICAgICAgICAgIENvbnRleHQgPSBJbnRlcmZhY2UtPkNvbnRleHQ7
Cj4+ICsgICAgWEVOQlVTX1NUT1JFX1JFUVVFU1QgICAgICAgICAgICBSZXF1ZXN0Owo+PiArICAg
IFBYRU5CVVNfU1RPUkVfUkVTUE9OU0UgICAgICAgICAgUmVzcG9uc2U7Cj4+ICsgICAgTlRTVEFU
VVMgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Cj4+ICsgICAgWEVOQlVTX1NUT1JFX1NF
R01FTlQKPj4gU2VnbWVudHNbWEVOQlVTX1NUT1JFX1JFUVVFU1RfU0VHTUVOVF9DT1VOVF07Cj4+
ICsgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleCwgQnVmZmVyU2l6ZTsK
Pj4gKyAgICBQQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggPSBOVUxMOwo+PiAr
Cj4+ICsgICAgc3RhdHVzID0gU1RBVFVTX0lOVkFMSURfUEFSQU1FVEVSOwo+PiArICAgIGlmIChO
dW1iZXJQZXJtaXNzaW9ucyA+IFhFTkJVU19TVE9SRV9SRVFVRVNUX1NFR01FTlRfQ09VTlQgLQo+
PiAyKSAvLyAxIGZvciBwYXRoLCAxIGZvciBoZWFkZXIgaW4gU3RvcmVQcmVwYXJlUmVxdWVzdEZp
eGVkCj4+ICsgICAgICAgIGdvdG8gZmFpbDE7Cj4+ICsKPj4gKyAgICBpZiAoUHJlZml4ICE9IE5V
TEwpIHsKPj4gKyAgICAgICAgLy8gd2UncmUgY29uY2F0ZW5hdGluZyBpdCBoZXJlIGluc3RlYWQg
b2YgcGFzc2luZyB0bwo+PiBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQgdG8gcmVkdWNlIHRoZSBu
dW1iZXIgb2Ygc2VnbWVudHMgdXNlZAo+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfTk9fTUVN
T1JZOwo+PiArICAgICAgICBQYXRoID0gX19TdG9yZUFsbG9jYXRlKFhFTlNUT1JFX0FCU19QQVRI
X01BWCk7Cj4+ICsgICAgICAgIGlmIChQYXRoID09IE5VTEwpCj4+ICsgICAgICAgICAgICBnb3Rv
IGZhaWwyOwo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFJ0bFN0cmluZ0NiUHJpbnRmQShQYXRo
LCBYRU5TVE9SRV9BQlNfUEFUSF9NQVgsCj4+ICIlcy8lcyIsIFByZWZpeCwgTm9kZSk7Cj4+ICsg
ICAgICAgIEFTU0VSVChOVF9TVUNDRVNTKHN0YXR1cykpOwo+PiArICAgICAgICBOb2RlID0gUGF0
aDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2Yo
WEVOQlVTX1NUT1JFX1JFUVVFU1QpKTsKPj4gKyAgICBSdGxaZXJvTWVtb3J5KFNlZ21lbnRzLCBz
aXplb2YoU2VnbWVudHMpKTsKPj4gKwo+PiArICAgIFNlZ21lbnRzWzBdLkRhdGEgPSBOb2RlOyAv
LyBwYXRoCj4+ICsgICAgU2VnbWVudHNbMF0uT2Zmc2V0ID0gMDsKPj4gKyAgICBTZWdtZW50c1sw
XS5MZW5ndGggPSAoVUxPTkcpc3RybGVuKE5vZGUpICsgMTsgLy8gemVybyB0ZXJtaW5hdG9yCj4+
IHJlcXVpcmVkCj4+ICsKPj4gKyAgICBCdWZmZXJTaXplID0gMTY7Cj4+ICsgICAgZm9yIChJbmRl
eCA9IDA7IEluZGV4IDwgTnVtYmVyUGVybWlzc2lvbnM7IEluZGV4KyspIHsKPj4gKyAgICAgICAg
U2VnbWVudHNbSW5kZXggKyAxXS5EYXRhID0gX19TdG9yZUFsbG9jYXRlKEJ1ZmZlclNpemUpOwo+
PiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAxXS5EYXRhID09IE5VTEwpCj4+ICsgICAg
ICAgICAgICBnb3RvIGZhaWwzOwo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFN0b3JlUGVybWlz
c2lvblRvU3RyaW5nKCZQZXJtaXNzaW9uc1tJbmRleF0sIEJ1ZmZlclNpemUsCj4+IFNlZ21lbnRz
W0luZGV4KzFdLkRhdGEpOwo+PiArICAgICAgICBpZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKPj4g
KyAgICAgICAgICAgIGdvdG8gZmFpbDQ7Cj4+ICsKPj4gKyAgICAgICAgU2VnbWVudHNbSW5kZXgg
KyAxXS5MZW5ndGggPSAoVUxPTkcpc3RybGVuKFNlZ21lbnRzW0luZGV4ICsKPj4gMV0uRGF0YSkg
KyAxOyAvLyB6ZXJvIHRlcm1pbmF0b3IgcmVxdWlyZWQKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBz
dGF0dXMgPSBTdG9yZVByZXBhcmVSZXF1ZXN0Rml4ZWQoQ29udGV4dCwKPj4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVlc3QsCj4+ICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uLAo+PiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBYU19TRVRfUEVSTVMsCj4+ICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNlZ21lbnRzLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOdW1iZXJQZXJtaXNzaW9ucyArIDEpOwo+PiArCj4gCj4gU2VnbWVudHMg
YXJlIG9ubHkgYSBjb2RpbmcgY29udmVuaWVuY2UuLi4gT24gdGhlICd3aXJlJyB0aGV5IGFyZSBq
dXN0IGNvbmNhdGVuYXRlZC4gU28gSSB0aGluayBhbGwgeW91IG5lZWQgdG8gaXMgcHJlcGFyZSBj
aGFyYWN0ZXIgYnVmZmVyIHdpdGggYSBOVUwgc2VwYXJhdGVkIGxpc3Qgb2YgPHBlcm0+PGRvbWlk
PiBzdHJpbmdzIGFuZCB0aGVuIHBhc3MgdGhhdCBhcyBhbiBhcmcgdG8gdGhlIG5vcm1hbCBlbGxp
cHNpcyBTdG9yZVByZXBhcmVSZXF1ZXN0KCkuIE5vIG5lZWQgZm9yIHRoZSBleHRyYSBjb21wbGV4
aXR5IG9mIGEgbmV3IFN0b3JlUHJlcGFyZVJlcXVlc3RGaXhlZCgpLgoKVGhhdCBtYWtlcyBzZW5z
ZSwgd2hlbiBJIHdhcyB3cml0aW5nIHRoaXMgSSBqdXN0IGRlZmVycmVkIHRvIGhvdyBvdGhlciBz
dG9yZSBjYWxscyB3b3JrLgo+IAo+ICAgUGF1bAo+IAo+PiArICAgIGlmICghTlRfU1VDQ0VTUyhz
dGF0dXMpKQo+PiArICAgICAgICBnb3RvIGZhaWw1Owo+PiArCj4+ICsgICAgUmVzcG9uc2UgPSBT
dG9yZVN1Ym1pdFJlcXVlc3QoQ29udGV4dCwgJlJlcXVlc3QpOwo+PiArCj4+ICsgICAgc3RhdHVz
ID0gU1RBVFVTX05PX01FTU9SWTsKPj4gKyAgICBpZiAoUmVzcG9uc2UgPT0gTlVMTCkKPj4gKyAg
ICAgICAgZ290byBmYWlsNjsKPj4gKwo+PiArICAgIHN0YXR1cyA9IFN0b3JlQ2hlY2tSZXNwb25z
ZShSZXNwb25zZSk7Cj4+ICsgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCj4+ICsgICAgICAg
IGdvdG8gZmFpbDc7Cj4+ICsKPj4gKyAgICBTdG9yZUZyZWVSZXNwb25zZShSZXNwb25zZSk7Cj4+
ICsgICAgQVNTRVJUKElzWmVyb01lbW9yeSgmUmVxdWVzdCwgc2l6ZW9mKFhFTkJVU19TVE9SRV9S
RVFVRVNUKSkpOwo+PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlclBlcm1pc3Np
b25zOyBJbmRleCsrKQo+PiArICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRleCArIDFd
LkRhdGEpOwo+PiArCj4+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkKPj4gKyAgICAgICAgX19TdG9y
ZUZyZWUoUGF0aCk7Cj4+ICsKPj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cj4+ICsKPj4g
K2ZhaWw3Ogo+PiArICAgIEVycm9yKCJmYWlsN1xuIik7Cj4+ICsgICAgU3RvcmVGcmVlUmVzcG9u
c2UoUmVzcG9uc2UpOwo+PiArCj4+ICtmYWlsNjoKPj4gKyAgICBFcnJvcigiZmFpbDZcbiIpOwo+
PiArCj4+ICtmYWlsNToKPj4gKyAgICBFcnJvcigiZmFpbDVcbiIpOwo+PiArCj4+ICtmYWlsNDoK
Pj4gKyAgICBFcnJvcigiZmFpbDRcbiIpOwo+PiArCj4+ICtmYWlsMzoKPj4gKyAgICBFcnJvcigi
ZmFpbDNcbiIpOwo+PiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IE51bWJlclBlcm1pc3Np
b25zOyBJbmRleCsrKQo+PiArICAgICAgICBpZiAoU2VnbWVudHNbSW5kZXggKyAxXS5EYXRhICE9
IE5VTEwpCj4+ICsgICAgICAgICAgICBfX1N0b3JlRnJlZShTZWdtZW50c1tJbmRleCArIDFdLkRh
dGEpOwo+PiArCj4+ICsgICAgaWYgKFBhdGggIT0gTlVMTCkKPj4gKyAgICAgICAgX19TdG9yZUZy
ZWUoUGF0aCk7Cj4+ICsKPj4gK2ZhaWwyOgo+PiArICAgIEVycm9yKCJmYWlsMlxuIik7Cj4+ICsK
Pj4gKwo+PiArZmFpbDE6Cj4+ICsgICAgRXJyb3IoImZhaWwxICglMDh4KVxuIiwgc3RhdHVzKTsK
Pj4gKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2YoWEVOQlVTX1NUT1JF
X1JFUVVFU1QpKSk7Cj4+ICsgICAgcmV0dXJuIHN0YXR1czsKPj4gK30KPj4gKwo+PiAgc3RhdGlj
Cj4+ICBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpCj4+ICBfSVJRTF9yZXF1aXJl
c18oSElHSF9MRVZFTCkKPj4gQEAgLTIyODUsNiArMjUwMywyMyBAQCBzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxCj4+IFN0b3JlSW50ZXJmYWNlVmVyc2lvbjEgPSB7Cj4+
ICAgICAgU3RvcmVQb2xsCj4+ICB9Owo+Pgo+PiArc3RhdGljIHN0cnVjdCBfWEVOQlVTX1NUT1JF
X0lOVEVSRkFDRV9WMiBTdG9yZUludGVyZmFjZVZlcnNpb24yID0gewo+PiArICAgIHsgc2l6ZW9m
KHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMiksIDIsIE5VTEwsIE5VTEwsIE5VTEwg
fSwKPj4gKyAgICBTdG9yZUFjcXVpcmUsCj4+ICsgICAgU3RvcmVSZWxlYXNlLAo+PiArICAgIFN0
b3JlRnJlZSwKPj4gKyAgICBTdG9yZVJlYWQsCj4+ICsgICAgU3RvcmVQcmludGYsCj4+ICsgICAg
U3RvcmVSZW1vdmUsCj4+ICsgICAgU3RvcmVEaXJlY3RvcnksCj4+ICsgICAgU3RvcmVUcmFuc2Fj
dGlvblN0YXJ0LAo+PiArICAgIFN0b3JlVHJhbnNhY3Rpb25FbmQsCj4+ICsgICAgU3RvcmVXYXRj
aEFkZCwKPj4gKyAgICBTdG9yZVdhdGNoUmVtb3ZlLAo+PiArICAgIFN0b3JlUG9sbCwKPj4gKyAg
ICBTdG9yZVBlcm1pc3Npb25zU2V0LAo+PiArfTsKPj4gKwo+PiAgTlRTVEFUVVMKPj4gIFN0b3Jl
SW5pdGlhbGl6ZSgKPj4gICAgICBJTiAgUFhFTkJVU19GRE8gICAgICAgICAgICAgRmRvLAo+PiBA
QCAtMjM4NCw2ICsyNjE5LDIzIEBAIFN0b3JlR2V0SW50ZXJmYWNlKAo+PiAgICAgICAgICBzdGF0
dXMgPSBTVEFUVVNfU1VDQ0VTUzsKPj4gICAgICAgICAgYnJlYWs7Cj4+ICAgICAgfQo+PiArICAg
IGNhc2UgMjogewo+PiArICAgICAgICBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIg
ICpTdG9yZUludGVyZmFjZTsKPj4gKwo+PiArICAgICAgICBTdG9yZUludGVyZmFjZSA9IChzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjIgKilJbnRlcmZhY2U7Cj4+ICsKPj4gKyAgICAg
ICAgc3RhdHVzID0gU1RBVFVTX0JVRkZFUl9PVkVSRkxPVzsKPj4gKyAgICAgICAgaWYgKFNpemUg
PCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyKSkKPj4gKyAgICAgICAg
ICAgIGJyZWFrOwo+PiArCj4+ICsgICAgICAgICpTdG9yZUludGVyZmFjZSA9IFN0b3JlSW50ZXJm
YWNlVmVyc2lvbjI7Cj4+ICsKPj4gKyAgICAgICAgQVNTRVJUM1UoSW50ZXJmYWNlLT5WZXJzaW9u
LCA9PSAsIFZlcnNpb24pOwo+PiArICAgICAgICBJbnRlcmZhY2UtPkNvbnRleHQgPSBDb250ZXh0
Owo+PiArCj4+ICsgICAgICAgIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwo+PiArICAgICAgICBi
cmVhazsKPj4gKyAgICB9Cj4+ICAgICAgZGVmYXVsdDoKPj4gICAgICAgICAgc3RhdHVzID0gU1RB
VFVTX05PVF9TVVBQT1JURUQ7Cj4+ICAgICAgICAgIGJyZWFrOwo+Pgo+PiBfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiB3aW4tcHYtZGV2ZWwgbWFpbGlu
ZyBsaXN0Cj4+IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBodHRwOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbAoK
Ci0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0
dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:54:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:54:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqVl-0005vM-Fl; Fri, 04 Sep 2015 12:54:33 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXqVk-0005v3-7e
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:54:32 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	ED/23-02324-78499E55; Fri, 04 Sep 2015 12:54:31 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441371270!25240063!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17126 invoked from network); 4 Sep 2015 12:54:30 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 12:54:30 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2461639"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwD///oSgIAAPsRA
Date: Fri, 4 Sep 2015 12:54:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2EB1@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<55E97BA3.7030804@m2r.biz>
In-Reply-To: <55E97BA3.7030804@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNCBTZXB0ZW1iZXIgMjAxNSAxMjow
OA0KPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDQvMDkvMjAx
NSAxMTozMCwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVsLQ0KPiA+PiBib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnXSBPbiBCZWhhbGYgT2YgUGF1bCBEdXJyYW50DQo+ID4+IFNlbnQ6IDAyIFNlcHRlbWJl
ciAyMDE1IDEwOjAwDQo+ID4+IFRvOiBGYWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pg0KPiA+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+IEZyb206IEZh
YmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25pQG0yci5iaXpdDQo+ID4+PiBTZW50OiAw
MiBTZXB0ZW1iZXIgMjAxNSAwOTo1NA0KPiA+Pj4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdv
amR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4+IENjOiBTdGVm
YW5vIFN0YWJlbGxpbmkNCj4gPj4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVt
cyB3aXRoIHhlbnZiZA0KPiA+Pj4NCj4gPj4+IElsIDAxLzA5LzIwMTUgMTY6NDEsIFBhdWwgRHVy
cmFudCBoYSBzY3JpdHRvOg0KPiA+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+
Pj4+PiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWlsdG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0K
PiA+Pj4+PiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNA0KPiA+Pj4+PiBUbzogUmFmYcWCIFdv
amR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0K
PiA+Pj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gPj4+Pj4NCj4gPj4+Pj4gSWwgMjEvMDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBz
Y3JpdHRvOg0KPiA+Pj4+Pj4gSWwgMjEvMDgvMjAxNSAwMDowMywgUmFmYcWCIFdvamR5xYJhIGhh
IHNjcml0dG86DQo+ID4+Pj4+Pj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdy
b3RlOg0KPiA+Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPj4+
Pj4+Pj4+IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86
d2luLXB2LQ0KPiBkZXZlbC0NCj4gPj4+Pj4+Pj4+IGJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5v
cmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNlbnQ6DQo+IDE4DQo+ID4+Pj4+Pj4+PiBB
dWd1c3QgMjAxNSAxNDozMyBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
IFN1YmplY3Q6DQo+ID4+Pj4+Pj4+PiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IEhpLA0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+
IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50IHB2ZHJpdmVycyBjb2RlIGluIHByZXBhcmF0
aW9uIGZvcg0KPiA+Pj4+Pj4+Pj4gY3JlYXRpbmcgdXBzdHJlYW0gcGF0Y2hlcyBmb3IgbXkgeGVu
aWZhY2UgYWRkaXRpb25zIGFuZCBJDQo+IG5vdGljZWQNCj4gPj4+Pj4+Pj4+IHRoYW4geGVudmJk
IHNlZW1zIHRvIGJlIHZlcnkgdW5zdGFibGUgZm9yIG1lLiBJJ20gbm90IHN1cmUgaWYNCj4gaXQn
cw0KPiA+Pj4+Pj4+Pj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2RlIGJl
Y2F1c2UgaXQgc2VlbWVkIHRvDQo+IG9ubHkNCj4gPj4+Pj4+Pj4+IG1hbmlmZXN0IHdoZW4gdGhl
IGZ1bGwgc3VpdGUgb2Ygb3VyIGd1ZXN0IHRvb2xzIHdhcyBpbnN0YWxsZWQNCj4gYWxvbmcNCj4g
Pj4+Pj4+Pj4+IHdpdGggeGVudmJkLiBJbiBzaG9ydCwgbW9zdCBvZiB0aGUgdGltZSB0aGUgc3lz
dGVtIGNyYXNoZWQgd2l0aA0KPiA+Pj4+Pj4+Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGlu
IHNlZW1pbmdseSByYW5kb20gcHJvY2Vzc2VzDQo+IHNob3J0bHkNCj4gPj4+Pj4+Pj4+IGFmdGVy
IHN0YXJ0LiBEcml2ZXIgVmVyaWZpZXIgZGlkbid0IHNlZW0gdG8gY2F0Y2ggYW55dGhpbmcuIFlv
dSBjYW4NCj4gPj4+Pj4+Pj4+IHNlZSBhIGxvZyBmcm9tIG9uZSBzdWNoIGNyYXNoIGluIHRoZSBh
dHRhY2htZW50IGNyYXNoMS50eHQuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gVG9kYXkgSSB0
cmllZCB0byBwZXJmb3JtIHNvbWUgbW9yZSB0ZXN0cyBidXQgdGhpcyB0aW1lIHdpdGhvdXQNCj4g
b3VyDQo+ID4+Pj4+Pj4+PiBndWVzdCB0b29scyAob25seSBwdmRyaXZlcnMgYW5kIG91ciBzaGFy
ZWQgbGlicmFyaWVzIHdlcmUNCj4gPj4+Pj4+Pj4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNl
IG5vdyBEcml2ZXIgVmVyaWZpZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+Pj4+Pj4+Pj4gc3lzdGVt
IGV2ZXJ5IHRpbWUgaW4geGVudmJkIChzZWUgY3Jhc2gyLnR4dCkuIEkgZG9uJ3Qga25vdyB3aHkN
Cj4gaXQNCj4gPj4+Pj4+Pj4+IGRpZG4ndCBjYXRjaCB0aGF0IHByZXZpb3VzbHkuLi4gSWYgYWRk
aW5nIHNvbWUgdGltZW91dCB0byB0aGUNCj4gPj4+Pj4+Pj4+IG9mZmVuZGluZyB3YWl0IGRvZXNu
J3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0cnkgdGhhdCB0byBzZWUgaWYgSSBjYW4NCj4gPj4+Pj4+
Pj4+IHJlcHJvZHVjZSB0aGUgcHJldmlvdXMgbWVtb3J5IGNvcnJ1cHRpb25zLg0KPiA+Pj4+Pj4+
Pj4NCj4gPj4+Pj4+Pj4gVGhvc2UgY3Jhc2hlcyBkbyBsb29rIG9kZC4gSSdtIG9uIFBUTyBmb3Ig
dGhlIG5leHQgd2VlayBidXQgSSdsbA0KPiA+PiBoYXZlDQo+ID4+Pj4+Pj4+IGEgbG9vayB3aGVu
IEkgZ2V0IGJhY2sgdG8gdGhlIG9mZmljZS4gSSBkaWQgcnVuIHZlcmlmaWVyIG9uIGFsbCB0aGUN
Cj4gPj4+Pj4+Pj4gZHJpdmVycyBhIHdlZWsgb3Igc28gYmFjayAod2hpbGUgcnVubmluZyB2YmQg
cGx1Zy91bnBsdWcgdGVzdHMpDQo+IGJ1dA0KPiA+Pj4+Pj4+PiB0aGVyZSBoYXZlIGJlZW4gYSBj
b3VwbGUgb2YgY2hhbmdlcyBzaW5jZSB0aGVuLg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+PiBQYXVs
DQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21lIG1vcmUg
bG9ncy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcNCj4gPj4+IHN5c3RlbQ0KPiA+Pj4+Pj4+IHNo
dXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVw
dGVkDQo+ID4+Pj4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYgc2VlbWVkIHRv
IGluZGljYXRlIHRoYXQpLiBJIHRoaW5rDQo+ID4+IGV2ZXJ5DQo+ID4+Pj4+Pj4gdGltZSB0aGVy
ZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0DQo+IGZhbWls
aWFyDQo+ID4+PiB3aXRoDQo+ID4+Pj4+Pj4gWGVuIFBWIGRldmljZSBpbnRlcmZhY2VzIHNvIG5v
dCBzdXJlIHdoYXQgdGhhdCBtZWFucy4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IEluIHRoZSBtZWFu
dGltZSBJJ3ZlIHJ1biBtb3JlIHRlc3RzIG9uIG15IG1vZGlmaWVkIHhlbmlmYWNlDQo+IGRyaXZl
cg0KPiA+PiB0bw0KPiA+Pj4+Pj4+IG1ha2Ugc3VyZSBpdCdzIG5vdCBjb250cmlidXRpbmcgdG8g
dGhlc2UgaXNzdWVzIGJ1dCBldmVyeXRoaW5nDQo+ID4+IHNlZW1lZA0KPiA+Pj4gdG8NCj4gPj4+
Pj4+PiBiZSBmaW5lIHRoZXJlLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+IEkgYWxz
byBoYWQgYSBkaXNrIGNvcnJ1cHRpb24gb24gd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycw0KPiA+Pj4+Pj4gYnVpbGQgb2YgMTEgYXVndXN0IGJ1dCBJJ20gbm90IHN1cmUgdGhh
dCBpcyByZWxhdGVkIHRvIHdpbnB2IGRyaXZlcnMsDQo+ID4+Pj4+PiBvbiBzYW1lIGRvbVUgSSBz
dGFydGVkIHRlc3RpbmcgYWxzbyBzbmFwc2hvdCB3aXRoIHFjb3cyIGRpc2sNCj4gb3ZlcmxheS4N
Cj4gPj4+Pj4+IEZvciB0aGlzIGNhc2UgSSBkb24ndCBoYXZlIHVzZWZ1bCBpbmZvcm1hdGlvbiBi
ZWNhdXNlIGRvbid0IHRyeSB0bw0KPiA+Pj4+Pj4gYm9vdCB3aW5kb3dzIGF0IGFsbCBidXQgaWYg
cmVoYXBwZW4gSSdsbCB0cnkgdG8gdGFrZSBvdGhlciB1c2VmdWwNCj4gPj4+Pj4+IGluZm9ybWF0
aW9uLg0KPiA+Pj4+PiBIYXBwZW4gYW5vdGhlciB0aW1lIGJ1dCBhbHNvIHRoaXMgSSB3YXMgdW5h
YmxlIHRvIHVuZGVyc3RhbmQgd2hhdCBpcw0KPiA+Pj4+PiBleGFjdGx5IHRoZSBjYXVzZS4NCj4g
Pj4+Pj4gT24gd2luZG93cyByZWJvb3QgYWxsIHNlZW1zIHdhcyBvayBhbmQgZGlkIGEgY2xlYW4g
c2h1dGRvd24gYnV0IG9uDQo+ID4+Pj4+IHJlYm9vdCBzZWFiaW9zIGRvbid0IGZvdW5kIGJvb3Rh
YmxlIGRpc2sgYW5kIHFlbXUgbG9nIGRvbid0IHNob3cNCj4gPj4gdXNlZnVsDQo+ID4+Pj4+IGlu
Zm9ybWF0aW9ucy4NCj4gPj4+Pj4gcWVtdS1pbWcgY2hlY2sgc2hvdyBlcnJvcnM6DQo+ID4+Pj4+
PiAvdXNyL2xpYi94ZW4vYmluL3FlbXUtaW1nIGNoZWNrIFcxMC5kaXNrMS5jb3ctc24xDQo+ID4+
Pj4+PiBFUlJPUiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4+Pj4+PiBM
ZWFrZWQgY2x1c3RlciAxMDc3IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+Pj4+IEVSUk9S
IGNsdXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4+Pj4+PiBMZWFrZWQgY2x1
c3RlciAyNzAzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+Pj4+IExlYWtlZCBjbHVzdGVy
IDUyMTIgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+Pj4+Pj4gTGVha2VkIGNsdXN0ZXIgMTMz
NzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IDIgZXJyb3JzIHdl
cmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+Pj4+Pj4gRGF0YSBtYXkgYmUgY29ycnVwdGVkLCBv
ciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQNCj4gaXQuDQo+ID4+Pj4+
Pg0KPiA+Pj4+Pj4gNCBsZWFrZWQgY2x1c3RlcnMgd2VyZSBmb3VuZCBvbiB0aGUgaW1hZ2UuDQo+
ID4+Pj4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sgc3BhY2UsIGJ1dCBubyBoYXJtIHRvIGRh
dGEuDQo+ID4+Pj4+PiAyNzg1My84MTkyMDAgPSAzLjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFn
bWVudGVkLCAwLjAwJQ0KPiA+PiBjb21wcmVzc2VkDQo+ID4+Pj4+PiBjbHVzdGVycw0KPiA+Pj4+
Pj4gSW1hZ2UgZW5kIG9mZnNldDogMTg1MDczNjY0MA0KPiA+Pj4+PiBJIGNyZWF0ZWQgaXQgd2l0
aDoNCj4gPj4+Pj4gL3Vzci9saWIveGVuL2Jpbi9xZW11LWltZyBjcmVhdGUgLW8NCj4gPj4+Pj4g
YmFja2luZ19maWxlPVcxMC5kaXNrMS54bSxiYWNraW5nX2ZtdD1yYXcgLWYgcWNvdzINCj4gVzEw
LmRpc2sxLmNvdy0NCj4gPj4+IHNuMQ0KPiA+Pj4+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBj
b25maWd1cmF0aW9uOg0KPiA+Pj4+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gPj4+Pj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBx
ZW11IDIuNC4wDQo+ID4+Pj4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPj4+Pj4NCj4gPj4+Pj4gSG93IEkgY2FuIGtu
b3cgZm9yIHN1cmUgaWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2JsZW0gYW5k
DQo+ID4+Pj4+IHRha2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPj4+Pj4NCj4g
Pj4+Pj4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4N
Cj4gPj4+PiBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0
aW9uIHNvbWV3aGVyZS4gSQ0KPiByZWNhbGwNCj4gPj4+IHNlZWluZyBvdGhlciBwcm9ibGVtcyBv
ZiB0aGlzIGlsayB3aGVuIHNvbWVvbmUgd2FzIG1lc3NpbmcgYXJvdW5kDQo+IHdpdGgNCj4gPj4+
IE9fRElSRUNUIGZvciBvcGVuaW5nIGltYWdlcy4gSSB3b25kZXIgaWYgd2UgYXJlIG1pc3Npbmcg
YSBmbHVzaA0KPiBvcGVyYXRpb24NCj4gPj4+IG9uIHNodXRkb3duLg0KPiA+Pj4+ICAgICBQYXVs
DQo+ID4+Pj4NCj4gPj4+IFRoYW5rcyBmb3IgcmVwbHkuDQo+ID4+PiBJIGRpZCBhIGZhc3Qgc2Vh
cmNoIGJ1dCBJIG5vdCBmb3VuZCBPX0RJUkVDVCBncmVwcGluZyBpbiBsaWJ4bCwgSSBmb3VuZA0K
PiA+Pj4gaXQgb25seSBpbiBxZW11IGNvZGUuDQo+ID4+PiBBZnRlciBJIHRyaWVkIHdpdGggcGF0
Y2ggdGhhdCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+ID4+Pg0KPiA+Pg0K
PiBodHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0ZGlmZjtoPTQ1NGFlNzM0
ZjFkOWY1OTEzNDVmYTc4DQo+ID4+PiAzNzY0MzVhOGU3NGJiNGVkZA0KPiA+Pj4gQ2hlY2tpbmcg
aW4gbGlieGwgc2VlbXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgZnJvbSBzb21lIG9sZCB4ZW4g
cG9zdA0KPiA+Pj4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1zLg0KPiA+Pj4g
SSBzaG91bGQgdHJ5IGl0IGVuYWJsZSBkaXJlY3QtaW8tc2FmZSBpbiBkb21VcyBxY293MiBkaXNr
cz8NCj4gPj4+IEFkZGVkIGFsc28gU3RlZmFubyBTdGFiZWxsaW5pIGFzIGNjLg0KPiA+Pj4gQFN0
ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1cyBhbmQgcmVz
dWx0IG9mDQo+ID4+PiBkaXJlY3QtaW8tc2FmZT8NCj4gPj4+IFNvcnJ5IGlzIHRoZSBxdWVzdGlv
biBhcmUgc3R1cGlkIGJ5IG9yIG15IGVuZ2xpc2ggaXMgdG9vIGJhZCBvciBtYW55DQo+ID4+PiBw
b3N0IG9mIGxhdGVzdCB5ZWFycyBhcmUgY29uZnVzZWQgYW5kIGluIHNhbWUgY2FzZXMgc2VlbXMg
YWxzbw0KPiA+Pj4gY29udHJhZGljdG9yeSBhYm91dCBzdGFiaWxpdHkvaW50ZWdyaXR5L3BlcmZv
cm1hbmNlIHVzaW5nIGl0IG9yIG5vdC4NCj4gPj4+IEluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2gg
d2l0aCBzb21lIGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseQ0KPiA+Pj4gd2hh
dCB2ZXJzaW9ucyBhbmQvb3Igd2l0aCB3aGljaCBwYXRjaGVzLg0KPiA+Pj4NCj4gPj4+IEBQYXVs
IER1cnJhbnQ6IGhhdmUgeW91IHNlZSBteSBvdGhlciBtYWlsIHdoZW4gSSB3cm90ZSB0aGF0IGJh
c2VkIG9uDQo+IG15DQo+ID4+PiBsYXRlc3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2
IGZpbGUgd2luZG93cyBkb21VcyB3aXRoIG5ldyBwdg0KPiA+Pj4gZHJpdmVyIGRvbid0IGJvb3Qg
YW5kIGZvciBzdGlsbCBib290IGl0IGNvcnJlY3RseSBJIG11c3QgcmVhZGQgdWRldg0KPiA+Pj4g
ZmlsZSwgY2FuIHRoaXMgY2F1c2UgdW5leHBlY3RlZCBjYXNlIHJlbGF0ZWQgdG8gdGhpcyBwcm9i
bGVtIG9yIGlzDQo+ID4+PiBkaWZmZXJlbnQ/DQo+ID4+PiBodHRwOi8vbGlzdHMueGVuLm9yZy9h
cmNoaXZlcy9odG1sL3dpbi1wdi1kZXZlbC8yMDE1LQ0KPiAwOC9tc2cwMDAzMy5odG1sDQo+ID4+
Pg0KPiA+PiBJJ20gbm90IHN1cmUgd2h5IHVkZXYgd291bGQgYmUgYW4gaXNzdWUgaGVyZS4gVGhl
IHByb2JsZW0geW91IGhhdmUNCj4gPj4gYXBwZWFycyB0byBiZSBRRU1VIGlnbm9yaW5nIHRoZSBy
ZXF1ZXN0IHRvIHVucGx1ZyBlbXVsYXRlZCBkaXNrcy4gSSd2ZQ0KPiBub3QNCj4gPj4gc2VlbiB0
aGlzIGJlaGF2aW91ciBvbiBteSB0ZXN0IGJveCBzbyBJJ2xsIG5lZWQgdG8gZGlnIHNvbWUgbW9y
ZS4NCj4gPj4NCj4gPiBJIG5vdGljZSB5b3UgaGF2ZSA2IElERSBjaGFubmVscz8gQXJlIHlvdSB1
c2luZyBBSENJIGJ5IGFueSBjaGFuY2U/IElmIHlvdQ0KPiBhcmUgdGhlbiBpdCBsb29rcyBsaWtl
IFFFTVUgaXMgbm90IGhvbm91cmluZyB0aGUgdW5wbHVnIHJlcXVlc3QuLi4gdGhhdCB3b3VsZA0K
PiBiZSB3aGVyZSB0aGUgYnVnIGlzLiBJJ2xsIHRyeSB0byByZXBybyBteXNlbGYuDQo+ID4NCj4g
PiAgICBQYXVsDQo+IA0KPiBJZiBJIHJlbWVtYmVyIGdvb2QgSSBhbHJlYWR5IHRyaWVkIGFsc28g
d2l0aCBpZGUgYWJvdXQgYm90aCBwcm9ibGVtcw0KPiAodWRldiBhbmQgcWNvdykgd2l0aCBzYW1l
IHJlc3VsdC4NCj4gSSdtIGFsc28gYWxyZWFkeSB1c2luZyBtYWlubHkgYWhjaSBvbiB3aW5kb3dz
IGRvbVVzICh3aXRoIG5ldyBwdikgaW4NCj4gdGVzdCBzeXN0ZW0gZm9yIHNvbWUgbW9udGhzLg0K
PiBCdXQgaWYgbmVlZGVkIHRlbGwgbWUgYW5kIEknbGwgZG8gbW9yZSB0ZXN0cy4NCj4gQWJvdXQg
eW91ciByZWNlbnQgcGF0Y2hlcyBzZWVtcyBmaXggcmVsYXRlZCB0byB1bnBsdWcgb3IgSSdtIHdy
b25nPyBJJ2xsDQo+IHJldHJ5IHdpdGggdGhlbSB0aGlzIGFmdGVybm9vbiB3aXRob3V0IHVkZXYg
ZmlsZSBpZiBuZXcgcHYgdGVzdCBidWlsZA0KPiB3aWxsIGJlIHJlYWR5Lg0KDQpNeSByZWNlbnQg
Y2hhbmdlcyB0byB4ZW52YmQgd2VyZSB0byBkbyB3aXRoIHdoZW4gdW5wbHVnIHNob3VsZCBiZSBy
ZXF1ZXN0ZWQgYW5kIGFsc28gY2xlYW5pbmcgdXAgb24gZHJpdmVyIHJlbW92YWwuIEkgZG9uJ3Qg
dGhpbmsgZWl0aGVyIG9mIHRoZW0gYWZmZWN0IHlvdXIgY2FzZTsgSSB0aGluayB5b3UncmUgZXhw
ZXJpZW5jaW5nIGEgcHJvYmxlbSB3aXRoIFFFTVUuDQoNCiAgUGF1bA0KDQo+IA0KPiBUaGFua3Mg
Zm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLg0KDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGlu
ZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 12:54:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 12:54:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqVl-0005vM-Fl; Fri, 04 Sep 2015 12:54:33 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXqVk-0005v3-7e
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:54:32 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	ED/23-02324-78499E55; Fri, 04 Sep 2015 12:54:31 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441371270!25240063!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17126 invoked from network); 4 Sep 2015 12:54:30 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 12:54:30 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2461639"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwD///oSgIAAPsRA
Date: Fri, 4 Sep 2015 12:54:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2EB1@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<55E97BA3.7030804@m2r.biz>
In-Reply-To: <55E97BA3.7030804@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNCBTZXB0ZW1iZXIgMjAxNSAxMjow
OA0KPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBDYzogU3RlZmFubyBTdGFiZWxsaW5pDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDQvMDkvMjAx
NSAxMTozMCwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVsLQ0KPiA+PiBib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnXSBPbiBCZWhhbGYgT2YgUGF1bCBEdXJyYW50DQo+ID4+IFNlbnQ6IDAyIFNlcHRlbWJl
ciAyMDE1IDEwOjAwDQo+ID4+IFRvOiBGYWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pg0KPiA+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+IEZyb206IEZh
YmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25pQG0yci5iaXpdDQo+ID4+PiBTZW50OiAw
MiBTZXB0ZW1iZXIgMjAxNSAwOTo1NA0KPiA+Pj4gVG86IFBhdWwgRHVycmFudDsgUmFmYcWCIFdv
amR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4+IENjOiBTdGVm
YW5vIFN0YWJlbGxpbmkNCj4gPj4+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVt
cyB3aXRoIHhlbnZiZA0KPiA+Pj4NCj4gPj4+IElsIDAxLzA5LzIwMTUgMTY6NDEsIFBhdWwgRHVy
cmFudCBoYSBzY3JpdHRvOg0KPiA+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+
Pj4+PiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWlsdG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0K
PiA+Pj4+PiBTZW50OiAyMSBBdWd1c3QgMjAxNSAxNDoxNA0KPiA+Pj4+PiBUbzogUmFmYcWCIFdv
amR5xYJhOyBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0K
PiA+Pj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQN
Cj4gPj4+Pj4NCj4gPj4+Pj4gSWwgMjEvMDgvMjAxNSAxMDoxMiwgRmFiaW8gRmFudG9uaSBoYSBz
Y3JpdHRvOg0KPiA+Pj4+Pj4gSWwgMjEvMDgvMjAxNSAwMDowMywgUmFmYcWCIFdvamR5xYJhIGhh
IHNjcml0dG86DQo+ID4+Pj4+Pj4gT24gMjAxNS0wOC0xOSAyMzoyNSwgUGF1bCBEdXJyYW50IHdy
b3RlOg0KPiA+Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0gRnJvbToNCj4gPj4+
Pj4+Pj4+IHdpbi1wdi1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86
d2luLXB2LQ0KPiBkZXZlbC0NCj4gPj4+Pj4+Pj4+IGJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5v
cmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhIFNlbnQ6DQo+IDE4DQo+ID4+Pj4+Pj4+PiBB
dWd1c3QgMjAxNSAxNDozMyBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
IFN1YmplY3Q6DQo+ID4+Pj4+Pj4+PiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZi
ZA0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IEhpLA0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+
IEkndmUgYmVlbiB0ZXN0aW5nIHRoZSBjdXJyZW50IHB2ZHJpdmVycyBjb2RlIGluIHByZXBhcmF0
aW9uIGZvcg0KPiA+Pj4+Pj4+Pj4gY3JlYXRpbmcgdXBzdHJlYW0gcGF0Y2hlcyBmb3IgbXkgeGVu
aWZhY2UgYWRkaXRpb25zIGFuZCBJDQo+IG5vdGljZWQNCj4gPj4+Pj4+Pj4+IHRoYW4geGVudmJk
IHNlZW1zIHRvIGJlIHZlcnkgdW5zdGFibGUgZm9yIG1lLiBJJ20gbm90IHN1cmUgaWYNCj4gaXQn
cw0KPiA+Pj4+Pj4+Pj4gYSBwcm9ibGVtIHdpdGggeGVudmJkIGl0c2VsZiBvciBteSBjb2RlIGJl
Y2F1c2UgaXQgc2VlbWVkIHRvDQo+IG9ubHkNCj4gPj4+Pj4+Pj4+IG1hbmlmZXN0IHdoZW4gdGhl
IGZ1bGwgc3VpdGUgb2Ygb3VyIGd1ZXN0IHRvb2xzIHdhcyBpbnN0YWxsZWQNCj4gYWxvbmcNCj4g
Pj4+Pj4+Pj4+IHdpdGggeGVudmJkLiBJbiBzaG9ydCwgbW9zdCBvZiB0aGUgdGltZSB0aGUgc3lz
dGVtIGNyYXNoZWQgd2l0aA0KPiA+Pj4+Pj4+Pj4ga2VybmVsIG1lbW9yeSBjb3JydXB0aW9uIGlu
IHNlZW1pbmdseSByYW5kb20gcHJvY2Vzc2VzDQo+IHNob3J0bHkNCj4gPj4+Pj4+Pj4+IGFmdGVy
IHN0YXJ0LiBEcml2ZXIgVmVyaWZpZXIgZGlkbid0IHNlZW0gdG8gY2F0Y2ggYW55dGhpbmcuIFlv
dSBjYW4NCj4gPj4+Pj4+Pj4+IHNlZSBhIGxvZyBmcm9tIG9uZSBzdWNoIGNyYXNoIGluIHRoZSBh
dHRhY2htZW50IGNyYXNoMS50eHQuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gVG9kYXkgSSB0
cmllZCB0byBwZXJmb3JtIHNvbWUgbW9yZSB0ZXN0cyBidXQgdGhpcyB0aW1lIHdpdGhvdXQNCj4g
b3VyDQo+ID4+Pj4+Pj4+PiBndWVzdCB0b29scyAob25seSBwdmRyaXZlcnMgYW5kIG91ciBzaGFy
ZWQgbGlicmFyaWVzIHdlcmUNCj4gPj4+Pj4+Pj4+IGluc3RhbGxlZCkuIFRvIG15IHN1cnByaXNl
IG5vdyBEcml2ZXIgVmVyaWZpZXIgd2FzIGNyYXNoaW5nIHRoZQ0KPiA+Pj4+Pj4+Pj4gc3lzdGVt
IGV2ZXJ5IHRpbWUgaW4geGVudmJkIChzZWUgY3Jhc2gyLnR4dCkuIEkgZG9uJ3Qga25vdyB3aHkN
Cj4gaXQNCj4gPj4+Pj4+Pj4+IGRpZG4ndCBjYXRjaCB0aGF0IHByZXZpb3VzbHkuLi4gSWYgYWRk
aW5nIHNvbWUgdGltZW91dCB0byB0aGUNCj4gPj4+Pj4+Pj4+IG9mZmVuZGluZyB3YWl0IGRvZXNu
J3QgYnJlYWsgYW55dGhpbmcgSSdsbCB0cnkgdGhhdCB0byBzZWUgaWYgSSBjYW4NCj4gPj4+Pj4+
Pj4+IHJlcHJvZHVjZSB0aGUgcHJldmlvdXMgbWVtb3J5IGNvcnJ1cHRpb25zLg0KPiA+Pj4+Pj4+
Pj4NCj4gPj4+Pj4+Pj4gVGhvc2UgY3Jhc2hlcyBkbyBsb29rIG9kZC4gSSdtIG9uIFBUTyBmb3Ig
dGhlIG5leHQgd2VlayBidXQgSSdsbA0KPiA+PiBoYXZlDQo+ID4+Pj4+Pj4+IGEgbG9vayB3aGVu
IEkgZ2V0IGJhY2sgdG8gdGhlIG9mZmljZS4gSSBkaWQgcnVuIHZlcmlmaWVyIG9uIGFsbCB0aGUN
Cj4gPj4+Pj4+Pj4gZHJpdmVycyBhIHdlZWsgb3Igc28gYmFjayAod2hpbGUgcnVubmluZyB2YmQg
cGx1Zy91bnBsdWcgdGVzdHMpDQo+IGJ1dA0KPiA+Pj4+Pj4+PiB0aGVyZSBoYXZlIGJlZW4gYSBj
b3VwbGUgb2YgY2hhbmdlcyBzaW5jZSB0aGVuLg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+PiBQYXVs
DQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4gTm8gcHJvYmxlbS4gSSBhdHRhY2hlZCBzb21lIG1vcmUg
bG9ncy4gVGhlIGxhc3Qgb25lIHdhcyBkdXJpbmcNCj4gPj4+IHN5c3RlbQ0KPiA+Pj4+Pj4+IHNo
dXRkb3duLCBhZnRlciB0aGF0IHRoZSBPUyBmYWlsZWQgdG8gYm9vdCAocHJvYmFibHkgY29ycnVw
dGVkDQo+ID4+Pj4+Pj4gZmlsZXN5c3RlbSBzaW5jZSB0aGUgQlNPRCBpdHNlbGYgc2VlbWVkIHRv
IGluZGljYXRlIHRoYXQpLiBJIHRoaW5rDQo+ID4+IGV2ZXJ5DQo+ID4+Pj4+Pj4gdGltZSB0aGVy
ZSBpcyBhIEJMS0lGX1JTUF9FUlJPUiBzb21ld2hlcmUgYnV0IEknbSBub3QgeWV0DQo+IGZhbWls
aWFyDQo+ID4+PiB3aXRoDQo+ID4+Pj4+Pj4gWGVuIFBWIGRldmljZSBpbnRlcmZhY2VzIHNvIG5v
dCBzdXJlIHdoYXQgdGhhdCBtZWFucy4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IEluIHRoZSBtZWFu
dGltZSBJJ3ZlIHJ1biBtb3JlIHRlc3RzIG9uIG15IG1vZGlmaWVkIHhlbmlmYWNlDQo+IGRyaXZl
cg0KPiA+PiB0bw0KPiA+Pj4+Pj4+IG1ha2Ugc3VyZSBpdCdzIG5vdCBjb250cmlidXRpbmcgdG8g
dGhlc2UgaXNzdWVzIGJ1dCBldmVyeXRoaW5nDQo+ID4+IHNlZW1lZA0KPiA+Pj4gdG8NCj4gPj4+
Pj4+PiBiZSBmaW5lIHRoZXJlLg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+IEkgYWxz
byBoYWQgYSBkaXNrIGNvcnJ1cHRpb24gb24gd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycw0KPiA+Pj4+Pj4gYnVpbGQgb2YgMTEgYXVndXN0IGJ1dCBJJ20gbm90IHN1cmUgdGhh
dCBpcyByZWxhdGVkIHRvIHdpbnB2IGRyaXZlcnMsDQo+ID4+Pj4+PiBvbiBzYW1lIGRvbVUgSSBz
dGFydGVkIHRlc3RpbmcgYWxzbyBzbmFwc2hvdCB3aXRoIHFjb3cyIGRpc2sNCj4gb3ZlcmxheS4N
Cj4gPj4+Pj4+IEZvciB0aGlzIGNhc2UgSSBkb24ndCBoYXZlIHVzZWZ1bCBpbmZvcm1hdGlvbiBi
ZWNhdXNlIGRvbid0IHRyeSB0bw0KPiA+Pj4+Pj4gYm9vdCB3aW5kb3dzIGF0IGFsbCBidXQgaWYg
cmVoYXBwZW4gSSdsbCB0cnkgdG8gdGFrZSBvdGhlciB1c2VmdWwNCj4gPj4+Pj4+IGluZm9ybWF0
aW9uLg0KPiA+Pj4+PiBIYXBwZW4gYW5vdGhlciB0aW1lIGJ1dCBhbHNvIHRoaXMgSSB3YXMgdW5h
YmxlIHRvIHVuZGVyc3RhbmQgd2hhdCBpcw0KPiA+Pj4+PiBleGFjdGx5IHRoZSBjYXVzZS4NCj4g
Pj4+Pj4gT24gd2luZG93cyByZWJvb3QgYWxsIHNlZW1zIHdhcyBvayBhbmQgZGlkIGEgY2xlYW4g
c2h1dGRvd24gYnV0IG9uDQo+ID4+Pj4+IHJlYm9vdCBzZWFiaW9zIGRvbid0IGZvdW5kIGJvb3Rh
YmxlIGRpc2sgYW5kIHFlbXUgbG9nIGRvbid0IHNob3cNCj4gPj4gdXNlZnVsDQo+ID4+Pj4+IGlu
Zm9ybWF0aW9ucy4NCj4gPj4+Pj4gcWVtdS1pbWcgY2hlY2sgc2hvdyBlcnJvcnM6DQo+ID4+Pj4+
PiAvdXNyL2xpYi94ZW4vYmluL3FlbXUtaW1nIGNoZWNrIFcxMC5kaXNrMS5jb3ctc24xDQo+ID4+
Pj4+PiBFUlJPUiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4+Pj4+PiBM
ZWFrZWQgY2x1c3RlciAxMDc3IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+Pj4+IEVSUk9S
IGNsdXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4+Pj4+PiBMZWFrZWQgY2x1
c3RlciAyNzAzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPj4+Pj4+IExlYWtlZCBjbHVzdGVy
IDUyMTIgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+Pj4+Pj4gTGVha2VkIGNsdXN0ZXIgMTMz
NzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IDIgZXJyb3JzIHdl
cmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+Pj4+Pj4gRGF0YSBtYXkgYmUgY29ycnVwdGVkLCBv
ciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQNCj4gaXQuDQo+ID4+Pj4+
Pg0KPiA+Pj4+Pj4gNCBsZWFrZWQgY2x1c3RlcnMgd2VyZSBmb3VuZCBvbiB0aGUgaW1hZ2UuDQo+
ID4+Pj4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sgc3BhY2UsIGJ1dCBubyBoYXJtIHRvIGRh
dGEuDQo+ID4+Pj4+PiAyNzg1My84MTkyMDAgPSAzLjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFn
bWVudGVkLCAwLjAwJQ0KPiA+PiBjb21wcmVzc2VkDQo+ID4+Pj4+PiBjbHVzdGVycw0KPiA+Pj4+
Pj4gSW1hZ2UgZW5kIG9mZnNldDogMTg1MDczNjY0MA0KPiA+Pj4+PiBJIGNyZWF0ZWQgaXQgd2l0
aDoNCj4gPj4+Pj4gL3Vzci9saWIveGVuL2Jpbi9xZW11LWltZyBjcmVhdGUgLW8NCj4gPj4+Pj4g
YmFja2luZ19maWxlPVcxMC5kaXNrMS54bSxiYWNraW5nX2ZtdD1yYXcgLWYgcWNvdzINCj4gVzEw
LmRpc2sxLmNvdy0NCj4gPj4+IHNuMQ0KPiA+Pj4+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBj
b25maWd1cmF0aW9uOg0KPiA+Pj4+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEs
cWNvdzIsaGRhLHJ3JywuLi4NCj4gPj4+Pj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBx
ZW11IDIuNC4wDQo+ID4+Pj4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPj4+Pj4NCj4gPj4+Pj4gSG93IEkgY2FuIGtu
b3cgZm9yIHN1cmUgaWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2JsZW0gYW5k
DQo+ID4+Pj4+IHRha2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8NCj4gPj4+Pj4NCj4g
Pj4+Pj4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4N
Cj4gPj4+PiBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBhIGxhY2sgb2Ygc3luY2hyb25pemF0
aW9uIHNvbWV3aGVyZS4gSQ0KPiByZWNhbGwNCj4gPj4+IHNlZWluZyBvdGhlciBwcm9ibGVtcyBv
ZiB0aGlzIGlsayB3aGVuIHNvbWVvbmUgd2FzIG1lc3NpbmcgYXJvdW5kDQo+IHdpdGgNCj4gPj4+
IE9fRElSRUNUIGZvciBvcGVuaW5nIGltYWdlcy4gSSB3b25kZXIgaWYgd2UgYXJlIG1pc3Npbmcg
YSBmbHVzaA0KPiBvcGVyYXRpb24NCj4gPj4+IG9uIHNodXRkb3duLg0KPiA+Pj4+ICAgICBQYXVs
DQo+ID4+Pj4NCj4gPj4+IFRoYW5rcyBmb3IgcmVwbHkuDQo+ID4+PiBJIGRpZCBhIGZhc3Qgc2Vh
cmNoIGJ1dCBJIG5vdCBmb3VuZCBPX0RJUkVDVCBncmVwcGluZyBpbiBsaWJ4bCwgSSBmb3VuZA0K
PiA+Pj4gaXQgb25seSBpbiBxZW11IGNvZGUuDQo+ID4+PiBBZnRlciBJIHRyaWVkIHdpdGggcGF0
Y2ggdGhhdCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+ID4+Pg0KPiA+Pg0K
PiBodHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0ZGlmZjtoPTQ1NGFlNzM0
ZjFkOWY1OTEzNDVmYTc4DQo+ID4+PiAzNzY0MzVhOGU3NGJiNGVkZA0KPiA+Pj4gQ2hlY2tpbmcg
aW4gbGlieGwgc2VlbXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBhbmQgZnJvbSBzb21lIG9sZCB4ZW4g
cG9zdA0KPiA+Pj4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1zLg0KPiA+Pj4g
SSBzaG91bGQgdHJ5IGl0IGVuYWJsZSBkaXJlY3QtaW8tc2FmZSBpbiBkb21VcyBxY293MiBkaXNr
cz8NCj4gPj4+IEFkZGVkIGFsc28gU3RlZmFubyBTdGFiZWxsaW5pIGFzIGNjLg0KPiA+Pj4gQFN0
ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1cyBhbmQgcmVz
dWx0IG9mDQo+ID4+PiBkaXJlY3QtaW8tc2FmZT8NCj4gPj4+IFNvcnJ5IGlzIHRoZSBxdWVzdGlv
biBhcmUgc3R1cGlkIGJ5IG9yIG15IGVuZ2xpc2ggaXMgdG9vIGJhZCBvciBtYW55DQo+ID4+PiBw
b3N0IG9mIGxhdGVzdCB5ZWFycyBhcmUgY29uZnVzZWQgYW5kIGluIHNhbWUgY2FzZXMgc2VlbXMg
YWxzbw0KPiA+Pj4gY29udHJhZGljdG9yeSBhYm91dCBzdGFiaWxpdHkvaW50ZWdyaXR5L3BlcmZv
cm1hbmNlIHVzaW5nIGl0IG9yIG5vdC4NCj4gPj4+IEluIHBhcnRpY3VsYXIgc2VlbXMgY3Jhc2gg
d2l0aCBzb21lIGtlcm5lbHMgYnV0IEkgbm90IHVuZGVyc3RhbmQgZXhhY3RseQ0KPiA+Pj4gd2hh
dCB2ZXJzaW9ucyBhbmQvb3Igd2l0aCB3aGljaCBwYXRjaGVzLg0KPiA+Pj4NCj4gPj4+IEBQYXVs
IER1cnJhbnQ6IGhhdmUgeW91IHNlZSBteSBvdGhlciBtYWlsIHdoZW4gSSB3cm90ZSB0aGF0IGJh
c2VkIG9uDQo+IG15DQo+ID4+PiBsYXRlc3QgdGVzdCB3aXRoIHhlbiA0LjYgd2l0aG91dCB1ZGV2
IGZpbGUgd2luZG93cyBkb21VcyB3aXRoIG5ldyBwdg0KPiA+Pj4gZHJpdmVyIGRvbid0IGJvb3Qg
YW5kIGZvciBzdGlsbCBib290IGl0IGNvcnJlY3RseSBJIG11c3QgcmVhZGQgdWRldg0KPiA+Pj4g
ZmlsZSwgY2FuIHRoaXMgY2F1c2UgdW5leHBlY3RlZCBjYXNlIHJlbGF0ZWQgdG8gdGhpcyBwcm9i
bGVtIG9yIGlzDQo+ID4+PiBkaWZmZXJlbnQ/DQo+ID4+PiBodHRwOi8vbGlzdHMueGVuLm9yZy9h
cmNoaXZlcy9odG1sL3dpbi1wdi1kZXZlbC8yMDE1LQ0KPiAwOC9tc2cwMDAzMy5odG1sDQo+ID4+
Pg0KPiA+PiBJJ20gbm90IHN1cmUgd2h5IHVkZXYgd291bGQgYmUgYW4gaXNzdWUgaGVyZS4gVGhl
IHByb2JsZW0geW91IGhhdmUNCj4gPj4gYXBwZWFycyB0byBiZSBRRU1VIGlnbm9yaW5nIHRoZSBy
ZXF1ZXN0IHRvIHVucGx1ZyBlbXVsYXRlZCBkaXNrcy4gSSd2ZQ0KPiBub3QNCj4gPj4gc2VlbiB0
aGlzIGJlaGF2aW91ciBvbiBteSB0ZXN0IGJveCBzbyBJJ2xsIG5lZWQgdG8gZGlnIHNvbWUgbW9y
ZS4NCj4gPj4NCj4gPiBJIG5vdGljZSB5b3UgaGF2ZSA2IElERSBjaGFubmVscz8gQXJlIHlvdSB1
c2luZyBBSENJIGJ5IGFueSBjaGFuY2U/IElmIHlvdQ0KPiBhcmUgdGhlbiBpdCBsb29rcyBsaWtl
IFFFTVUgaXMgbm90IGhvbm91cmluZyB0aGUgdW5wbHVnIHJlcXVlc3QuLi4gdGhhdCB3b3VsZA0K
PiBiZSB3aGVyZSB0aGUgYnVnIGlzLiBJJ2xsIHRyeSB0byByZXBybyBteXNlbGYuDQo+ID4NCj4g
PiAgICBQYXVsDQo+IA0KPiBJZiBJIHJlbWVtYmVyIGdvb2QgSSBhbHJlYWR5IHRyaWVkIGFsc28g
d2l0aCBpZGUgYWJvdXQgYm90aCBwcm9ibGVtcw0KPiAodWRldiBhbmQgcWNvdykgd2l0aCBzYW1l
IHJlc3VsdC4NCj4gSSdtIGFsc28gYWxyZWFkeSB1c2luZyBtYWlubHkgYWhjaSBvbiB3aW5kb3dz
IGRvbVVzICh3aXRoIG5ldyBwdikgaW4NCj4gdGVzdCBzeXN0ZW0gZm9yIHNvbWUgbW9udGhzLg0K
PiBCdXQgaWYgbmVlZGVkIHRlbGwgbWUgYW5kIEknbGwgZG8gbW9yZSB0ZXN0cy4NCj4gQWJvdXQg
eW91ciByZWNlbnQgcGF0Y2hlcyBzZWVtcyBmaXggcmVsYXRlZCB0byB1bnBsdWcgb3IgSSdtIHdy
b25nPyBJJ2xsDQo+IHJldHJ5IHdpdGggdGhlbSB0aGlzIGFmdGVybm9vbiB3aXRob3V0IHVkZXYg
ZmlsZSBpZiBuZXcgcHYgdGVzdCBidWlsZA0KPiB3aWxsIGJlIHJlYWR5Lg0KDQpNeSByZWNlbnQg
Y2hhbmdlcyB0byB4ZW52YmQgd2VyZSB0byBkbyB3aXRoIHdoZW4gdW5wbHVnIHNob3VsZCBiZSBy
ZXF1ZXN0ZWQgYW5kIGFsc28gY2xlYW5pbmcgdXAgb24gZHJpdmVyIHJlbW92YWwuIEkgZG9uJ3Qg
dGhpbmsgZWl0aGVyIG9mIHRoZW0gYWZmZWN0IHlvdXIgY2FzZTsgSSB0aGluayB5b3UncmUgZXhw
ZXJpZW5jaW5nIGEgcHJvYmxlbSB3aXRoIFFFTVUuDQoNCiAgUGF1bA0KDQo+IA0KPiBUaGFua3Mg
Zm9yIGFueSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLg0KDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGlu
ZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 13:08:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 13:08:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqjI-0007TO-30; Fri, 04 Sep 2015 13:08:32 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXqjG-0007TJ-Te
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 13:08:31 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	67/23-26043-EC799E55; Fri, 04 Sep 2015 13:08:30 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441372109!46885338!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21952 invoked from network); 4 Sep 2015 13:08:29 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 13:08:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2462102"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: Initial driver release
Thread-Index: AdDnETafFqo2Oq6wTsGCqGU3PShmog==
Date: Fri, 4 Sep 2015 13:08:28 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

  We've been working hard here in Citrix to test all the (now) 8.1 drivers and I think we're getting close to having all our tests and the latest Microsoft logo tests pass. Hence I think it's probably time to create a 8.1-staging branch for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then bump the versions in the master branches to 8.2.

  Cheers,

    Paul 

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 13:08:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 13:08:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXqjI-0007TO-30; Fri, 04 Sep 2015 13:08:32 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXqjG-0007TJ-Te
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 13:08:31 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	67/23-26043-EC799E55; Fri, 04 Sep 2015 13:08:30 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441372109!46885338!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21952 invoked from network); 4 Sep 2015 13:08:29 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 13:08:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2462102"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: Initial driver release
Thread-Index: AdDnETafFqo2Oq6wTsGCqGU3PShmog==
Date: Fri, 4 Sep 2015 13:08:28 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

  We've been working hard here in Citrix to test all the (now) 8.1 drivers and I think we're getting close to having all our tests and the latest Microsoft logo tests pass. Hence I think it's probably time to create a 8.1-staging branch for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then bump the versions in the master branches to 8.2.

  Cheers,

    Paul 

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:12:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:12:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXrjE-00013N-VJ; Fri, 04 Sep 2015 14:12:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXrjE-00011y-71
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:12:32 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	6C/FB-32615-FC6A9E55; Fri, 04 Sep 2015 14:12:31 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441375950!25264938!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20591 invoked from network); 4 Sep 2015 14:12:31 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:12:31 -0000
Received: by wiclk2 with SMTP id lk2so19430232wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DngTp2NtlRURriePzKCFxDulm+1mPdmey4bnQUfoHpQ=;
	b=DFgFuT7wbvYIQN+vRhso7Y7zaWuMatXemdwdQPH0H4HF396DrTBhIvLND0T0maCWqH
	gF9UFLSBbHpIU0rpw+rLF+YgrANZn/92rlIAKK3iUF3plmkhOFrd5c/1rfsRNP3AOXLr
	RZAmfELstuhLVeKwnt7LhCa9wFh+TzO6sytMrXk//eABXhXPw0FbQXMEfjYmCQVyOsZj
	kbMd6fVpLSOuk4jcc+beLs4kRJ19zY+7aBEqXerce26YfQGsMmIjaz9XHCWyEuNWgp06
	FTUfc1WmcQBFWQb1ivYK7idrpBTRgUZOPCPE3llNGdQt7zu03pQtqruITswjVFuKOhou
	e6Ow==
X-Gm-Message-State: ALoCoQkpyYgVw+pI95taNpYHL44wyvs22MleUAyvsaBNk+R6izOF6AfRdqeEPOHWyaeAgWil4do+
X-Received: by 10.194.134.98 with SMTP id pj2mr8078820wjb.30.1441375950702;
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lu5sm4340699wjb.9.2015.09.04.07.12.29
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E9A6D8.4000409@m2r.biz>
Date: Fri, 4 Sep 2015 16:12:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 04/09/2015 15:08, Paul Durrant ha scritto:
> Hi,
>
>    We've been working hard here in Citrix to test all the (now) 8.1 drivers and I think we're getting close to having all our tests and the latest Microsoft logo tests pass. Hence I think it's probably time to create a 8.1-staging branch for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then bump the versions in the master branches to 8.2.
>
>    Cheers,
>
>      Paul
>
>
Big thanks for all your work.
About signed drivers with xen project, are there any news? at least 
build each component rc and stable builds with a certificate to avoid 
windows 10 problem in case of automatic boot repair and major update 
(seems only when windows build number increase) where after windows is 
unable to boot (seems that disable testsigning) on domUs where new pv 
drivers unsigned are installed, W10 (on same dom0 and with same xl 
parameters) with gplpv signed are still working instead.
If I remember good this is blue screen of first case (after tried 
windows auto boot repair) and the second is same: 
http://lists.xen.org/archives/html/win-pv-devel/2015-08/pngS7ZYFAuB3k.png

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:12:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:12:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXrjE-00013N-VJ; Fri, 04 Sep 2015 14:12:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXrjE-00011y-71
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:12:32 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	6C/FB-32615-FC6A9E55; Fri, 04 Sep 2015 14:12:31 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441375950!25264938!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20591 invoked from network); 4 Sep 2015 14:12:31 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:12:31 -0000
Received: by wiclk2 with SMTP id lk2so19430232wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=DngTp2NtlRURriePzKCFxDulm+1mPdmey4bnQUfoHpQ=;
	b=DFgFuT7wbvYIQN+vRhso7Y7zaWuMatXemdwdQPH0H4HF396DrTBhIvLND0T0maCWqH
	gF9UFLSBbHpIU0rpw+rLF+YgrANZn/92rlIAKK3iUF3plmkhOFrd5c/1rfsRNP3AOXLr
	RZAmfELstuhLVeKwnt7LhCa9wFh+TzO6sytMrXk//eABXhXPw0FbQXMEfjYmCQVyOsZj
	kbMd6fVpLSOuk4jcc+beLs4kRJ19zY+7aBEqXerce26YfQGsMmIjaz9XHCWyEuNWgp06
	FTUfc1WmcQBFWQb1ivYK7idrpBTRgUZOPCPE3llNGdQt7zu03pQtqruITswjVFuKOhou
	e6Ow==
X-Gm-Message-State: ALoCoQkpyYgVw+pI95taNpYHL44wyvs22MleUAyvsaBNk+R6izOF6AfRdqeEPOHWyaeAgWil4do+
X-Received: by 10.194.134.98 with SMTP id pj2mr8078820wjb.30.1441375950702;
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lu5sm4340699wjb.9.2015.09.04.07.12.29
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 07:12:30 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E9A6D8.4000409@m2r.biz>
Date: Fri, 4 Sep 2015 16:12:40 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 04/09/2015 15:08, Paul Durrant ha scritto:
> Hi,
>
>    We've been working hard here in Citrix to test all the (now) 8.1 drivers and I think we're getting close to having all our tests and the latest Microsoft logo tests pass. Hence I think it's probably time to create a 8.1-staging branch for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then bump the versions in the master branches to 8.2.
>
>    Cheers,
>
>      Paul
>
>
Big thanks for all your work.
About signed drivers with xen project, are there any news? at least 
build each component rc and stable builds with a certificate to avoid 
windows 10 problem in case of automatic boot repair and major update 
(seems only when windows build number increase) where after windows is 
unable to boot (seems that disable testsigning) on domUs where new pv 
drivers unsigned are installed, W10 (on same dom0 and with same xl 
parameters) with gplpv signed are still working instead.
If I remember good this is blue screen of first case (after tried 
windows auto boot repair) and the second is same: 
http://lists.xen.org/archives/html/win-pv-devel/2015-08/pngS7ZYFAuB3k.png

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:21:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:21:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXrs9-0002HF-Vy; Fri, 04 Sep 2015 14:21:45 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXrs8-0002H0-RE
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:21:44 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	90/0D-00475-8F8A9E55; Fri, 04 Sep 2015 14:21:44 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-27.messagelabs.com!1441376503!46903010!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4539 invoked from network); 4 Sep 2015 14:21:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:21:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2464436"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Initial driver release
Thread-Index: AdDnETafFqo2Oq6wTsGCqGU3PShmov//848A///dQuA=
Date: Fri, 4 Sep 2015 14:21:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
	<55E9A6D8.4000409@m2r.biz>
In-Reply-To: <55E9A6D8.4000409@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 04 September 2015 15:13
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Initial driver release
> 
> Il 04/09/2015 15:08, Paul Durrant ha scritto:
> > Hi,
> >
> >    We've been working hard here in Citrix to test all the (now) 8.1 drivers
> and I think we're getting close to having all our tests and the latest Microsoft
> logo tests pass. Hence I think it's probably time to create a 8.1-staging branch
> for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then
> bump the versions in the master branches to 8.2.
> >
> >    Cheers,
> >
> >      Paul
> >
> >
> Big thanks for all your work.
> About signed drivers with xen project, are there any news? at least
> build each component rc and stable builds with a certificate to avoid
> windows 10 problem in case of automatic boot repair and major update
> (seems only when windows build number increase) where after windows is
> unable to boot (seems that disable testsigning) on domUs where new pv
> drivers unsigned are installed, W10 (on same dom0 and with same xl
> parameters) with gplpv signed are still working instead.
> If I remember good this is blue screen of first case (after tried
> windows auto boot repair) and the second is same:
> http://lists.xen.org/archives/html/win-pv-devel/2015-
> 08/pngS7ZYFAuB3k.png
> 

Windows 10's behaviour does seem to be annoying. I think getting an EV cert and signing release builds is probably feasible but there's no way we can sign every development build via the Microsoft portal so to some extent everyone is going to have to live with the problem by turning test-signing on and re-enabling after any such update (assuming you can still hit F8 and disable signature verification to allow the VM to boot).

  Paul

> Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:21:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:21:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXrs9-0002HF-Vy; Fri, 04 Sep 2015 14:21:45 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXrs8-0002H0-RE
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:21:44 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	90/0D-00475-8F8A9E55; Fri, 04 Sep 2015 14:21:44 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-27.messagelabs.com!1441376503!46903010!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4539 invoked from network); 4 Sep 2015 14:21:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:21:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,469,1437436800"; 
   d="scan'208";a="2464436"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Initial driver release
Thread-Index: AdDnETafFqo2Oq6wTsGCqGU3PShmov//848A///dQuA=
Date: Fri, 4 Sep 2015 14:21:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
	<55E9A6D8.4000409@m2r.biz>
In-Reply-To: <55E9A6D8.4000409@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> Sent: 04 September 2015 15:13
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] Initial driver release
> 
> Il 04/09/2015 15:08, Paul Durrant ha scritto:
> > Hi,
> >
> >    We've been working hard here in Citrix to test all the (now) 8.1 drivers
> and I think we're getting close to having all our tests and the latest Microsoft
> logo tests pass. Hence I think it's probably time to create a 8.1-staging branch
> for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then
> bump the versions in the master branches to 8.2.
> >
> >    Cheers,
> >
> >      Paul
> >
> >
> Big thanks for all your work.
> About signed drivers with xen project, are there any news? at least
> build each component rc and stable builds with a certificate to avoid
> windows 10 problem in case of automatic boot repair and major update
> (seems only when windows build number increase) where after windows is
> unable to boot (seems that disable testsigning) on domUs where new pv
> drivers unsigned are installed, W10 (on same dom0 and with same xl
> parameters) with gplpv signed are still working instead.
> If I remember good this is blue screen of first case (after tried
> windows auto boot repair) and the second is same:
> http://lists.xen.org/archives/html/win-pv-devel/2015-
> 08/pngS7ZYFAuB3k.png
> 

Windows 10's behaviour does seem to be annoying. I think getting an EV cert and signing release builds is probably feasible but there's no way we can sign every development build via the Microsoft portal so to some extent everyone is going to have to live with the problem by turning test-signing on and re-enabling after any such update (assuming you can still hit F8 and disable signature verification to allow the VM to boot).

  Paul

> Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:47:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:47:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXsGp-0006Z5-Jn; Fri, 04 Sep 2015 14:47:15 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXsGo-0006Ys-TC
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:47:15 +0000
Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id
	12/7E-31450-2FEA9E55; Fri, 04 Sep 2015 14:47:14 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-206.messagelabs.com!1441378033!27580159!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17377 invoked from network); 4 Sep 2015 14:47:13 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:47:13 -0000
Received: by wicfx3 with SMTP id fx3so25155025wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 07:47:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=3Z1eA6/JNmdl6lTlaSRzAUcNr3dHoFuqYa5jtJJZioU=;
	b=GdFWwjJbjI3BlI5bzhEvtIuyPTc/glIb9Hp8AaZpTbTNsDYda4CRCCSB7PjNDsbAZb
	kYdguDPbBNoLyHzwOSVOSHXpT6nR0X7gGv96mVDmIQkOjxZr7FG405SuEXtbiSGeOllV
	fFiC/CeVFEj9mAP5VgPrlhri/j3AI03hFgbG1SreIKoxHknBO4q7B9kMsqYp15s+BoX9
	w9TX9h7TdB95ePtRVHrxGFcEPXdkvuDwsk98tJSFRP9CrOi0Ul1xaX8xxUgLC6R9PCNz
	IYDwKh5xJzOY2mTgqJuuM7dTwKmcZASu8ZlSSBRUCdB1ojSG9/MkEJ6oJEQJuJTzR8B2
	nroQ==
X-Gm-Message-State: ALoCoQlvk811e0lAEEEvMa5O4HcJZw04TGD1VwRXk9pQZ3mtYyewGqF3pyUSuwy9HKyrnB8B0DLj
X-Received: by 10.195.11.202 with SMTP id ek10mr8108758wjd.12.1441378032994;
	Fri, 04 Sep 2015 07:47:12 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lz10sm4451160wjb.48.2015.09.04.07.47.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 07:47:11 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
	<55E9A6D8.4000409@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E9AEFA.3070508@m2r.biz>
Date: Fri, 4 Sep 2015 16:47:22 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 04/09/2015 16:21, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 04 September 2015 15:13
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Initial driver release
>>
>> Il 04/09/2015 15:08, Paul Durrant ha scritto:
>>> Hi,
>>>
>>>     We've been working hard here in Citrix to test all the (now) 8.1 drivers
>> and I think we're getting close to having all our tests and the latest Microsoft
>> logo tests pass. Hence I think it's probably time to create a 8.1-staging branch
>> for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then
>> bump the versions in the master branches to 8.2.
>>>     Cheers,
>>>
>>>       Paul
>>>
>>>
>> Big thanks for all your work.
>> About signed drivers with xen project, are there any news? at least
>> build each component rc and stable builds with a certificate to avoid
>> windows 10 problem in case of automatic boot repair and major update
>> (seems only when windows build number increase) where after windows is
>> unable to boot (seems that disable testsigning) on domUs where new pv
>> drivers unsigned are installed, W10 (on same dom0 and with same xl
>> parameters) with gplpv signed are still working instead.
>> If I remember good this is blue screen of first case (after tried
>> windows auto boot repair) and the second is same:
>> http://lists.xen.org/archives/html/win-pv-devel/2015-
>> 08/pngS7ZYFAuB3k.png
>>
> Windows 10's behaviour does seem to be annoying. I think getting an EV cert and signing release builds is probably feasible but there's no way we can sign every development build via the Microsoft portal so to some extent everyone is going to have to live with the problem by turning test-signing on and re-enabling after any such update (assuming you can still hit F8 and disable signature verification to allow the VM to boot).
>
>    Paul

I already tried F8 (before windows load and also on blue screen) and 
enter on blue screen in many way but I not found working "repair" 
solution for now. I suppose that there a windows bug about. I not tried 
latest insider build for now (I'll try probably next week).
In any case now that windows (10) is a "rolling-release" with automatic 
update "mandatory" (only delayable) is a big problem.
Any workaround for devel builds (still unsigned) on testing systems it 
is appreciated but signing of stable release for production windows 10 
domUs seems needed or will be a "bloodbath" each time that W10 
automatically disabled testsigning :(

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 14:47:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 14:47:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXsGp-0006Z5-Jn; Fri, 04 Sep 2015 14:47:15 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXsGo-0006Ys-TC
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 14:47:15 +0000
Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id
	12/7E-31450-2FEA9E55; Fri, 04 Sep 2015 14:47:14 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-206.messagelabs.com!1441378033!27580159!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17377 invoked from network); 4 Sep 2015 14:47:13 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 14:47:13 -0000
Received: by wicfx3 with SMTP id fx3so25155025wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 07:47:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=3Z1eA6/JNmdl6lTlaSRzAUcNr3dHoFuqYa5jtJJZioU=;
	b=GdFWwjJbjI3BlI5bzhEvtIuyPTc/glIb9Hp8AaZpTbTNsDYda4CRCCSB7PjNDsbAZb
	kYdguDPbBNoLyHzwOSVOSHXpT6nR0X7gGv96mVDmIQkOjxZr7FG405SuEXtbiSGeOllV
	fFiC/CeVFEj9mAP5VgPrlhri/j3AI03hFgbG1SreIKoxHknBO4q7B9kMsqYp15s+BoX9
	w9TX9h7TdB95ePtRVHrxGFcEPXdkvuDwsk98tJSFRP9CrOi0Ul1xaX8xxUgLC6R9PCNz
	IYDwKh5xJzOY2mTgqJuuM7dTwKmcZASu8ZlSSBRUCdB1ojSG9/MkEJ6oJEQJuJTzR8B2
	nroQ==
X-Gm-Message-State: ALoCoQlvk811e0lAEEEvMa5O4HcJZw04TGD1VwRXk9pQZ3mtYyewGqF3pyUSuwy9HKyrnB8B0DLj
X-Received: by 10.195.11.202 with SMTP id ek10mr8108758wjd.12.1441378032994;
	Fri, 04 Sep 2015 07:47:12 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lz10sm4451160wjb.48.2015.09.04.07.47.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Fri, 04 Sep 2015 07:47:11 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B2F6C@AMSPEX01CL01.citrite.net>
	<55E9A6D8.4000409@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55E9AEFA.3070508@m2r.biz>
Date: Fri, 4 Sep 2015 16:47:22 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B323A@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] Initial driver release
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 04/09/2015 16:21, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 04 September 2015 15:13
>> To: Paul Durrant; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Initial driver release
>>
>> Il 04/09/2015 15:08, Paul Durrant ha scritto:
>>> Hi,
>>>
>>>     We've been working hard here in Citrix to test all the (now) 8.1 drivers
>> and I think we're getting close to having all our tests and the latest Microsoft
>> logo tests pass. Hence I think it's probably time to create a 8.1-staging branch
>> for each of the drivers and tag an 8.1.0-rc1 for each of the drivers. I'll then
>> bump the versions in the master branches to 8.2.
>>>     Cheers,
>>>
>>>       Paul
>>>
>>>
>> Big thanks for all your work.
>> About signed drivers with xen project, are there any news? at least
>> build each component rc and stable builds with a certificate to avoid
>> windows 10 problem in case of automatic boot repair and major update
>> (seems only when windows build number increase) where after windows is
>> unable to boot (seems that disable testsigning) on domUs where new pv
>> drivers unsigned are installed, W10 (on same dom0 and with same xl
>> parameters) with gplpv signed are still working instead.
>> If I remember good this is blue screen of first case (after tried
>> windows auto boot repair) and the second is same:
>> http://lists.xen.org/archives/html/win-pv-devel/2015-
>> 08/pngS7ZYFAuB3k.png
>>
> Windows 10's behaviour does seem to be annoying. I think getting an EV cert and signing release builds is probably feasible but there's no way we can sign every development build via the Microsoft portal so to some extent everyone is going to have to live with the problem by turning test-signing on and re-enabling after any such update (assuming you can still hit F8 and disable signature verification to allow the VM to boot).
>
>    Paul

I already tried F8 (before windows load and also on blue screen) and 
enter on blue screen in many way but I not found working "repair" 
solution for now. I suppose that there a windows bug about. I not tried 
latest insider build for now (I'll try probably next week).
In any case now that windows (10) is a "rolling-release" with automatic 
update "mandatory" (only delayable) is a big problem.
Any workaround for devel builds (still unsigned) on testing systems it 
is appreciated but signing of stable release for production windows 10 
domUs seems needed or will be a "bloodbath" each time that W10 
automatically disabled testsigning :(

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 16:30:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 16:30:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXtt2-0004Ex-J9; Fri, 04 Sep 2015 16:30:48 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXtt1-0004Ed-21
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:30:47 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	66/C3-06179-637C9E55; Fri, 04 Sep 2015 16:30:46 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1441384245!32867326!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10056 invoked from network); 4 Sep 2015 16:30:45 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:30:45 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; 
   d="scan'208";a="2467739"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg
Date: Fri, 4 Sep 2015 16:30:43 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
In-Reply-To: <alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTdGVmYW5vIFN0YWJlbGxpbmkg
W21haWx0bzpzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbV0NCj4gU2VudDogMDQgU2Vw
dGVtYmVyIDIwMTUgMTc6MjUNCj4gVG86IFBhdWwgRHVycmFudA0KPiBDYzogRmFiaW8gRmFudG9u
aTsgUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFN0
ZWZhbm8NCj4gU3RhYmVsbGluaQ0KPiBTdWJqZWN0OiBSRTogW3dpbi1wdi1kZXZlbF0gUHJvYmxl
bXMgd2l0aCB4ZW52YmQNCj4gDQo+IE9uIEZyaSwgNCBTZXAgMjAxNSwgUGF1bCBEdXJyYW50IHdy
b3RlOg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IHdpbi1w
di1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVs
LQ0KPiA+ID4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwg
RHVycmFudA0KPiA+ID4gU2VudDogMDIgU2VwdGVtYmVyIDIwMTUgMTA6MDANCj4gPiA+IFRvOiBG
YWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiA+ID4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaQ0KPiA+ID4gU3ViamVjdDogUmU6
IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkDQo+ID4gPg0KPiA+ID4gPiAtLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiA+ID4gPiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAx
NSAwOTo1NA0KPiA+ID4gPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+ID4gPiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhl
bnZiZA0KPiA+ID4gPg0KPiA+ID4gPiBJbCAwMS8wOS8yMDE1IDE2OjQxLCBQYXVsIER1cnJhbnQg
aGEgc2NyaXR0bzoNCj4gPiA+ID4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+
ID4gPj4gRnJvbTogRmFiaW8gRmFudG9uaSBbbWFpbHRvOmZhYmlvLmZhbnRvbmlAbTJyLmJpel0N
Cj4gPiA+ID4gPj4gU2VudDogMjEgQXVndXN0IDIwMTUgMTQ6MTQNCj4gPiA+ID4gPj4gVG86IFJh
ZmHFgiBXb2pkecWCYTsgUGF1bCBEdXJyYW50OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcNCj4gPiA+ID4gPj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdp
dGggeGVudmJkDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IElsIDIxLzA4LzIwMTUgMTA6MTIsIEZh
YmlvIEZhbnRvbmkgaGEgc2NyaXR0bzoNCj4gPiA+ID4gPj4+IElsIDIxLzA4LzIwMTUgMDA6MDMs
IFJhZmHFgiBXb2pkecWCYSBoYSBzY3JpdHRvOg0KPiA+ID4gPiA+Pj4+IE9uIDIwMTUtMDgtMTkg
MjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPiA+ID4gPj4+Pj4+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tIEZyb206DQo+ID4gPiA+ID4+Pj4+PiB3aW4tcHYtZGV2ZWwtYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi0NCj4gZGV2ZWwtDQo+ID4gPiA+ID4+
Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29q
ZHlsYQ0KPiBTZW50OiAxOA0KPiA+ID4gPiA+Pj4+Pj4gQXVndXN0IDIwMTUgMTQ6MzMgVG86IHdp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBTdWJqZWN0Og0KPiA+ID4gPiA+Pj4+
Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQNCj4gPiA+ID4gPj4+Pj4+DQo+
ID4gPiA+ID4+Pj4+PiBIaSwNCj4gPiA+ID4gPj4+Pj4+DQo+ID4gPiA+ID4+Pj4+PiBJJ3ZlIGJl
ZW4gdGVzdGluZyB0aGUgY3VycmVudCBwdmRyaXZlcnMgY29kZSBpbiBwcmVwYXJhdGlvbiBmb3IN
Cj4gPiA+ID4gPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFtIHBhdGNoZXMgZm9yIG15IHhlbmlmYWNl
IGFkZGl0aW9ucyBhbmQgSQ0KPiBub3RpY2VkDQo+ID4gPiA+ID4+Pj4+PiB0aGFuIHhlbnZiZCBz
ZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmDQo+IGl0J3MN
Cj4gPiA+ID4gPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBi
ZWNhdXNlIGl0IHNlZW1lZCB0bw0KPiBvbmx5DQo+ID4gPiA+ID4+Pj4+PiBtYW5pZmVzdCB3aGVu
IHRoZSBmdWxsIHN1aXRlIG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkDQo+IGFsb25n
DQo+ID4gPiA+ID4+Pj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUg
dGhlIHN5c3RlbSBjcmFzaGVkDQo+IHdpdGgNCj4gPiA+ID4gPj4+Pj4+IGtlcm5lbCBtZW1vcnkg
Y29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHByb2Nlc3Nlcw0KPiBzaG9ydGx5DQo+ID4g
PiA+ID4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRpZG4ndCBzZWVtIHRvIGNh
dGNoIGFueXRoaW5nLiBZb3UNCj4gY2FuDQo+ID4gPiA+ID4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBv
bmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+ID4gPiA+Pj4+
Pj4NCj4gPiA+ID4gPj4+Pj4+IFRvZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVz
dHMgYnV0IHRoaXMgdGltZSB3aXRob3V0DQo+IG91cg0KPiA+ID4gPiA+Pj4+Pj4gZ3Vlc3QgdG9v
bHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4gPiA+
ID4+Pj4+PiBpbnN0YWxsZWQpLiBUbyBteSBzdXJwcmlzZSBub3cgRHJpdmVyIFZlcmlmaWVyIHdh
cyBjcmFzaGluZyB0aGUNCj4gPiA+ID4gPj4+Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGluIHhlbnZi
ZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0IGtub3cgd2h5DQo+IGl0DQo+ID4gPiA+ID4+Pj4+
PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQg
dG8gdGhlDQo+ID4gPiA+ID4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vzbid0IGJyZWFrIGFueXRo
aW5nIEknbGwgdHJ5IHRoYXQgdG8gc2VlIGlmIEkgY2FuDQo+ID4gPiA+ID4+Pj4+PiByZXByb2R1
Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBjb3JydXB0aW9ucy4NCj4gPiA+ID4gPj4+Pj4+DQo+ID4g
PiA+ID4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBvbiBQVE8gZm9yIHRoZSBu
ZXh0IHdlZWsgYnV0IEknbGwNCj4gPiA+IGhhdmUNCj4gPiA+ID4gPj4+Pj4gYSBsb29rIHdoZW4g
SSBnZXQgYmFjayB0byB0aGUgb2ZmaWNlLiBJIGRpZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQ0K
PiA+ID4gPiA+Pj4+PiBkcml2ZXJzIGEgd2VlayBvciBzbyBiYWNrICh3aGlsZSBydW5uaW5nIHZi
ZCBwbHVnL3VucGx1ZyB0ZXN0cykNCj4gYnV0DQo+ID4gPiA+ID4+Pj4+IHRoZXJlIGhhdmUgYmVl
biBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+
ID4+Pj4+IFBhdWwNCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+PiBObyBwcm9ibGVtLiBJIGF0
dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZw0KPiA+ID4gPiBz
eXN0ZW0NCj4gPiA+ID4gPj4+PiBzaHV0ZG93biwgYWZ0ZXIgdGhhdCB0aGUgT1MgZmFpbGVkIHRv
IGJvb3QgKHByb2JhYmx5IGNvcnJ1cHRlZA0KPiA+ID4gPiA+Pj4+IGZpbGVzeXN0ZW0gc2luY2Ug
dGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluaw0KPiA+ID4g
ZXZlcnkNCj4gPiA+ID4gPj4+PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3
aGVyZSBidXQgSSdtIG5vdCB5ZXQNCj4gZmFtaWxpYXINCj4gPiA+ID4gd2l0aA0KPiA+ID4gPiA+
Pj4+IFhlbiBQViBkZXZpY2UgaW50ZXJmYWNlcyBzbyBub3Qgc3VyZSB3aGF0IHRoYXQgbWVhbnMu
DQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+PiBJbiB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9y
ZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFjZQ0KPiBkcml2ZXINCj4gPiA+IHRvDQo+ID4g
PiA+ID4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMg
YnV0IGV2ZXJ5dGhpbmcNCj4gPiA+IHNlZW1lZA0KPiA+ID4gPiB0bw0KPiA+ID4gPiA+Pj4+IGJl
IGZpbmUgdGhlcmUuDQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+Pg0KPiA+ID4gPiA+Pj4gSSBh
bHNvIGhhZCBhIGRpc2sgY29ycnVwdGlvbiBvbiB3aW5kb3dzIDEwIHBybyA2NCBiaXQgd2l0aCBw
diBkcml2ZXJzDQo+ID4gPiA+ID4+PiBidWlsZCBvZiAxMSBhdWd1c3QgYnV0IEknbSBub3Qgc3Vy
ZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywNCj4gPiA+ID4gPj4+IG9uIHNhbWUg
ZG9tVSBJIHN0YXJ0ZWQgdGVzdGluZyBhbHNvIHNuYXBzaG90IHdpdGggcWNvdzIgZGlzaw0KPiBv
dmVybGF5Lg0KPiA+ID4gPiA+Pj4gRm9yIHRoaXMgY2FzZSBJIGRvbid0IGhhdmUgdXNlZnVsIGlu
Zm9ybWF0aW9uIGJlY2F1c2UgZG9uJ3QgdHJ5IHRvDQo+ID4gPiA+ID4+PiBib290IHdpbmRvd3Mg
YXQgYWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bA0KPiA+
ID4gPiA+Pj4gaW5mb3JtYXRpb24uDQo+ID4gPiA+ID4+IEhhcHBlbiBhbm90aGVyIHRpbWUgYnV0
IGFsc28gdGhpcyBJIHdhcyB1bmFibGUgdG8gdW5kZXJzdGFuZCB3aGF0DQo+IGlzDQo+ID4gPiA+
ID4+IGV4YWN0bHkgdGhlIGNhdXNlLg0KPiA+ID4gPiA+PiBPbiB3aW5kb3dzIHJlYm9vdCBhbGwg
c2VlbXMgd2FzIG9rIGFuZCBkaWQgYSBjbGVhbiBzaHV0ZG93biBidXQNCj4gb24NCj4gPiA+ID4g
Pj4gcmVib290IHNlYWJpb3MgZG9uJ3QgZm91bmQgYm9vdGFibGUgZGlzayBhbmQgcWVtdSBsb2cg
ZG9uJ3Qgc2hvdw0KPiA+ID4gdXNlZnVsDQo+ID4gPiA+ID4+IGluZm9ybWF0aW9ucy4NCj4gPiA+
ID4gPj4gcWVtdS1pbWcgY2hlY2sgc2hvdyBlcnJvcnM6DQo+ID4gPiA+ID4+PiAvdXNyL2xpYi94
ZW4vYmluL3FlbXUtaW1nIGNoZWNrIFcxMC5kaXNrMS5jb3ctc24xDQo+ID4gPiA+ID4+PiBFUlJP
UiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4gPiA+ID4+PiBMZWFrZWQg
Y2x1c3RlciAxMDc3IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+ID4gPj4+IEVSUk9SIGNs
dXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4gPiA+ID4+PiBMZWFrZWQgY2x1
c3RlciAyNzAzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+ID4gPj4+IExlYWtlZCBjbHVz
dGVyIDUyMTIgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4gPiA+Pj4gTGVha2VkIGNsdXN0
ZXIgMTMzNzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+
IDIgZXJyb3JzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+ID4gPiA+Pj4gRGF0YSBtYXkg
YmUgY29ycnVwdGVkLCBvciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQN
Cj4gaXQuDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gNCBsZWFrZWQgY2x1c3RlcnMgd2VyZSBm
b3VuZCBvbiB0aGUgaW1hZ2UuDQo+ID4gPiA+ID4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sg
c3BhY2UsIGJ1dCBubyBoYXJtIHRvIGRhdGEuDQo+ID4gPiA+ID4+PiAyNzg1My84MTkyMDAgPSAz
LjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFnbWVudGVkLCAwLjAwJQ0KPiA+ID4gY29tcHJlc3Nl
ZA0KPiA+ID4gPiA+Pj4gY2x1c3RlcnMNCj4gPiA+ID4gPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4
NTA3MzY2NDANCj4gPiA+ID4gPj4gSSBjcmVhdGVkIGl0IHdpdGg6DQo+ID4gPiA+ID4+IC91c3Iv
bGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vDQo+ID4gPiA+ID4+IGJhY2tpbmdfZmlsZT1X
MTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1mIHFjb3cyDQo+IFcxMC5kaXNrMS5jb3ctDQo+
ID4gPiA+IHNuMQ0KPiA+ID4gPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBjb25maWd1cmF0
aW9uOg0KPiA+ID4gPiA+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEscWNvdzIs
aGRhLHJ3JywuLi4NCj4gPiA+ID4gPj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11
IDIuNC4wDQo+ID4gPiA+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gSG93IEkg
Y2FuIGtub3cgZm9yIHN1cmUgaWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2Js
ZW0NCj4gYW5kDQo+ID4gPiA+ID4+IHRha2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8N
Cj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNvcnJ5IGZv
ciBteSBiYWQgZW5nbGlzaC4NCj4gPiA+ID4gPiBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBh
IGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSQ0KPiByZWNhbGwNCj4gPiA+ID4g
c2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2lu
ZyBhcm91bmQNCj4gd2l0aA0KPiA+ID4gPiBPX0RJUkVDVCBmb3Igb3BlbmluZyBpbWFnZXMuIEkg
d29uZGVyIGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2gNCj4gb3BlcmF0aW9uDQo+ID4gPiA+IG9u
IHNodXRkb3duLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgUGF1bA0KPiA+ID4gPiA+DQo+ID4g
PiA+IFRoYW5rcyBmb3IgcmVwbHkuDQo+ID4gPiA+IEkgZGlkIGEgZmFzdCBzZWFyY2ggYnV0IEkg
bm90IGZvdW5kIE9fRElSRUNUIGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5kDQo+ID4gPiA+IGl0
IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiA+ID4gPiBBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhh
dCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+ID4gPiA+DQo+ID4gPg0KPiBo
dHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0ZGlmZjtoPTQ1NGFlNzM0ZjFk
OWY1OTEzNDVmYTc4DQo+ID4gPiA+IDM3NjQzNWE4ZTc0YmI0ZWRkDQo+ID4gPiA+IENoZWNraW5n
IGluIGxpYnhsIHNlZW1zIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGZyb20gc29tZSBvbGQgeGVu
IHBvc3QNCj4gPiA+ID4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1zLg0KPiA+
ID4gPiBJIHNob3VsZCB0cnkgaXQgZW5hYmxlIGRpcmVjdC1pby1zYWZlIGluIGRvbVVzIHFjb3cy
IGRpc2tzPw0KPiA+ID4gPiBBZGRlZCBhbHNvIFN0ZWZhbm8gU3RhYmVsbGluaSBhcyBjYy4NCj4g
PiA+ID4gQFN0ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1
cyBhbmQgcmVzdWx0IG9mDQo+ID4gPiA+IGRpcmVjdC1pby1zYWZlPw0KPiANCj4gT19ESVJFQ1Qg
c2hvdWxkIGJlIGVudGlyZWx5IHNhZmUgdG8gdXNlLCBhdCBsZWFzdCBvbiBpZGUgYW5kIHFkaXNr
LiBJDQo+IGhhdmVuJ3QgZG9uZSB0aGUgYW5hbHlzaXMgb24gYWhjaSBlbXVsYXRpb24gaW4gcWVt
dSB0byBrbm93IHdoZXRoZXIgdGhhdA0KPiB3b3VsZCBiZSB0cnVlIGZvciBhaGNpIGRpc2tzLCBi
dXQgdGhhdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHVucGx1ZyBpcw0KPiBub3QgaW1wbGVtZW50
ZWQgZm9yIGFoY2kgZGlza3MuDQo+IA0KPiANCj4gPiA+ID4gU29ycnkgaXMgdGhlIHF1ZXN0aW9u
IGFyZSBzdHVwaWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkNCj4gPiA+ID4g
cG9zdCBvZiBsYXRlc3QgeWVhcnMgYXJlIGNvbmZ1c2VkIGFuZCBpbiBzYW1lIGNhc2VzIHNlZW1z
IGFsc28NCj4gPiA+ID4gY29udHJhZGljdG9yeSBhYm91dCBzdGFiaWxpdHkvaW50ZWdyaXR5L3Bl
cmZvcm1hbmNlIHVzaW5nIGl0IG9yIG5vdC4NCj4gPiA+ID4gSW4gcGFydGljdWxhciBzZWVtcyBj
cmFzaCB3aXRoIHNvbWUga2VybmVscyBidXQgSSBub3QgdW5kZXJzdGFuZA0KPiBleGFjdGx5DQo+
ID4gPiA+IHdoYXQgdmVyc2lvbnMgYW5kL29yIHdpdGggd2hpY2ggcGF0Y2hlcy4NCj4gPiA+ID4N
Cj4gPiA+ID4gQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90aGVyIG1haWwgd2hlbiBJ
IHdyb3RlIHRoYXQgYmFzZWQgb24NCj4gbXkNCj4gPiA+ID4gbGF0ZXN0IHRlc3Qgd2l0aCB4ZW4g
NC42IHdpdGhvdXQgdWRldiBmaWxlIHdpbmRvd3MgZG9tVXMgd2l0aCBuZXcgcHYNCj4gPiA+ID4g
ZHJpdmVyIGRvbid0IGJvb3QgYW5kIGZvciBzdGlsbCBib290IGl0IGNvcnJlY3RseSBJIG11c3Qg
cmVhZGQgdWRldg0KPiA+ID4gPiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2Ug
cmVsYXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMNCj4gPiA+ID4gZGlmZmVyZW50Pw0KPiA+ID4g
PiBodHRwOi8vbGlzdHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3dpbi1wdi1kZXZlbC8yMDE1LQ0K
PiAwOC9tc2cwMDAzMy5odG1sDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gSSdtIG5vdCBzdXJlIHdo
eSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhlcmUuIFRoZSBwcm9ibGVtIHlvdSBoYXZlDQo+ID4g
PiBhcHBlYXJzIHRvIGJlIFFFTVUgaWdub3JpbmcgdGhlIHJlcXVlc3QgdG8gdW5wbHVnIGVtdWxh
dGVkIGRpc2tzLiBJJ3ZlDQo+IG5vdA0KPiA+ID4gc2VlbiB0aGlzIGJlaGF2aW91ciBvbiBteSB0
ZXN0IGJveCBzbyBJJ2xsIG5lZWQgdG8gZGlnIHNvbWUgbW9yZS4NCj4gPiA+DQo+ID4NCj4gPiBJ
IG5vdGljZSB5b3UgaGF2ZSA2IElERSBjaGFubmVscz8gQXJlIHlvdSB1c2luZyBBSENJIGJ5IGFu
eSBjaGFuY2U/IElmIHlvdQ0KPiBhcmUgdGhlbiBpdCBsb29rcyBsaWtlIFFFTVUgaXMgbm90IGhv
bm91cmluZyB0aGUgdW5wbHVnIHJlcXVlc3QuLi4gdGhhdCB3b3VsZA0KPiBiZSB3aGVyZSB0aGUg
YnVnIGlzLiBJJ2xsIHRyeSB0byByZXBybyBteXNlbGYuDQo+IA0KPiBVbnBsdWcgb24gYWhjaSBp
cyBhY3R1YWxseSB1bmltcGxlbWVudGVkLCBzZWUgaHcvaTM4Ni94ZW4veGVuX3BsYXRmb3JtLmM6
DQo+IA0KPiBzdGF0aWMgdm9pZCB1bnBsdWdfZGlza3MoUENJQnVzICpiLCBQQ0lEZXZpY2UgKmQs
IHZvaWQgKm8pDQo+IHsNCj4gICAgIC8qIFdlIGhhdmUgdG8gaWdub3JlIHBhc3N0aHJvdWdoIGRl
dmljZXMgKi8NCj4gICAgIGlmIChwY2lfZ2V0X3dvcmQoZC0+Y29uZmlnICsgUENJX0NMQVNTX0RF
VklDRSkgPT0NCj4gICAgICAgICAgICAgUENJX0NMQVNTX1NUT1JBR0VfSURFDQo+ICAgICAgICAg
ICAgICYmIHN0cmNtcChkLT5uYW1lLCAieGVuLXBjaS1wYXNzdGhyb3VnaCIpICE9IDApIHsNCj4g
ICAgICAgICBwY2lfcGlpeDNfeGVuX2lkZV91bnBsdWcoREVWSUNFKGQpKTsNCj4gICAgIH0NCj4g
fQ0KPiANCj4gdGhlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBvbmx5IHVucGx1Z3MgSURFIGRpc2tz
Lg0KPiBJIGFtIG5vdCBzdXJlIHdoYXQgdG8gZG8gYWJvdXQgYWhjaSB1bnBsdWcsIGdpdmVuIHRo
YXQgd2UgZG9uJ3QNCj4gaW1wbGVtZW50IHNjc2kgZGlzayB1bnBsdWcgZWl0aGVyLiBBZnRlciBh
bGwsIGlmIHRoZSBnb2FsIGlzIHRvIHVucGx1Zw0KPiB0aGUgZGlzaywgd2h5IGNob29zZSBhIGZh
c3RlciBlbXVsYXRlZCBwcm90b2NvbD8NCg0KSSB0aGluayB3ZSBzaG91bGQgdW5wbHVnIHRoZSBk
aXNrIHJlZ2FyZGxlc3Mgb2YgdHlwZSwgaWYgd2Ugc3VwcG9ydCBjb25maWd1cmluZyBkaXNrcyBv
ZiB0aGF0IHR5cGUgdGhyb3VnaCBsaWJ4bC4gVGhlIHJlYXNvbiwgaW4gdGhpcyBjYXNlIEFGQUlV
LCBmb3Igd2FudGluZyBhaGNpIGlzIHRvIHNwZWVkIHVwIFdpbmRvd3MgYm9vdCB3aGVyZSBpbml0
aWFsIGRyaXZlciBsb2FkIGlzIHN0aWxsIGRvbmUgdGhyb3VnaCBpbnQxMyBhbmQgaGVuY2UgZW11
bGF0ZWQgZGlzay4NCg0KICBQYXVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWls
bWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 16:30:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 16:30:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXtt2-0004Ex-J9; Fri, 04 Sep 2015 16:30:48 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=682fe5db8=Paul.Durrant@citrix.com>)
	id 1ZXtt1-0004Ed-21
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:30:47 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	66/C3-06179-637C9E55; Fri, 04 Sep 2015 16:30:46 +0000
X-Env-Sender: prvs=682fe5db8=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1441384245!32867326!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10056 invoked from network); 4 Sep 2015 16:30:45 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:30:45 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; 
   d="scan'208";a="2467739"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg
Date: Fri, 4 Sep 2015 16:30:43 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
In-Reply-To: <alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTdGVmYW5vIFN0YWJlbGxpbmkg
W21haWx0bzpzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbV0NCj4gU2VudDogMDQgU2Vw
dGVtYmVyIDIwMTUgMTc6MjUNCj4gVG86IFBhdWwgRHVycmFudA0KPiBDYzogRmFiaW8gRmFudG9u
aTsgUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFN0
ZWZhbm8NCj4gU3RhYmVsbGluaQ0KPiBTdWJqZWN0OiBSRTogW3dpbi1wdi1kZXZlbF0gUHJvYmxl
bXMgd2l0aCB4ZW52YmQNCj4gDQo+IE9uIEZyaSwgNCBTZXAgMjAxNSwgUGF1bCBEdXJyYW50IHdy
b3RlOg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+IEZyb206IHdpbi1w
di1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIFttYWlsdG86d2luLXB2LWRldmVs
LQ0KPiA+ID4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwg
RHVycmFudA0KPiA+ID4gU2VudDogMDIgU2VwdGVtYmVyIDIwMTUgMTA6MDANCj4gPiA+IFRvOiBG
YWJpbyBGYW50b25pOyBSYWZhxYIgV29qZHnFgmE7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiA+ID4gQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaQ0KPiA+ID4gU3ViamVjdDogUmU6
IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkDQo+ID4gPg0KPiA+ID4gPiAtLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiA+ID4gPiBTZW50OiAwMiBTZXB0ZW1iZXIgMjAx
NSAwOTo1NA0KPiA+ID4gPiBUbzogUGF1bCBEdXJyYW50OyBSYWZhxYIgV29qZHnFgmE7IHdpbi1w
di1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+ID4gPiBDYzogU3RlZmFubyBTdGFiZWxs
aW5pDQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhl
bnZiZA0KPiA+ID4gPg0KPiA+ID4gPiBJbCAwMS8wOS8yMDE1IDE2OjQxLCBQYXVsIER1cnJhbnQg
aGEgc2NyaXR0bzoNCj4gPiA+ID4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+
ID4gPj4gRnJvbTogRmFiaW8gRmFudG9uaSBbbWFpbHRvOmZhYmlvLmZhbnRvbmlAbTJyLmJpel0N
Cj4gPiA+ID4gPj4gU2VudDogMjEgQXVndXN0IDIwMTUgMTQ6MTQNCj4gPiA+ID4gPj4gVG86IFJh
ZmHFgiBXb2pkecWCYTsgUGF1bCBEdXJyYW50OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcNCj4gPiA+ID4gPj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdp
dGggeGVudmJkDQo+ID4gPiA+ID4+DQo+ID4gPiA+ID4+IElsIDIxLzA4LzIwMTUgMTA6MTIsIEZh
YmlvIEZhbnRvbmkgaGEgc2NyaXR0bzoNCj4gPiA+ID4gPj4+IElsIDIxLzA4LzIwMTUgMDA6MDMs
IFJhZmHFgiBXb2pkecWCYSBoYSBzY3JpdHRvOg0KPiA+ID4gPiA+Pj4+IE9uIDIwMTUtMDgtMTkg
MjM6MjUsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPiA+ID4gPj4+Pj4+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tIEZyb206DQo+ID4gPiA+ID4+Pj4+PiB3aW4tcHYtZGV2ZWwtYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi0NCj4gZGV2ZWwtDQo+ID4gPiA+ID4+
Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29q
ZHlsYQ0KPiBTZW50OiAxOA0KPiA+ID4gPiA+Pj4+Pj4gQXVndXN0IDIwMTUgMTQ6MzMgVG86IHdp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBTdWJqZWN0Og0KPiA+ID4gPiA+Pj4+
Pj4gW3dpbi1wdi1kZXZlbF0gUHJvYmxlbXMgd2l0aCB4ZW52YmQNCj4gPiA+ID4gPj4+Pj4+DQo+
ID4gPiA+ID4+Pj4+PiBIaSwNCj4gPiA+ID4gPj4+Pj4+DQo+ID4gPiA+ID4+Pj4+PiBJJ3ZlIGJl
ZW4gdGVzdGluZyB0aGUgY3VycmVudCBwdmRyaXZlcnMgY29kZSBpbiBwcmVwYXJhdGlvbiBmb3IN
Cj4gPiA+ID4gPj4+Pj4+IGNyZWF0aW5nIHVwc3RyZWFtIHBhdGNoZXMgZm9yIG15IHhlbmlmYWNl
IGFkZGl0aW9ucyBhbmQgSQ0KPiBub3RpY2VkDQo+ID4gPiA+ID4+Pj4+PiB0aGFuIHhlbnZiZCBz
ZWVtcyB0byBiZSB2ZXJ5IHVuc3RhYmxlIGZvciBtZS4gSSdtIG5vdCBzdXJlIGlmDQo+IGl0J3MN
Cj4gPiA+ID4gPj4+Pj4+IGEgcHJvYmxlbSB3aXRoIHhlbnZiZCBpdHNlbGYgb3IgbXkgY29kZSBi
ZWNhdXNlIGl0IHNlZW1lZCB0bw0KPiBvbmx5DQo+ID4gPiA+ID4+Pj4+PiBtYW5pZmVzdCB3aGVu
IHRoZSBmdWxsIHN1aXRlIG9mIG91ciBndWVzdCB0b29scyB3YXMgaW5zdGFsbGVkDQo+IGFsb25n
DQo+ID4gPiA+ID4+Pj4+PiB3aXRoIHhlbnZiZC4gSW4gc2hvcnQsIG1vc3Qgb2YgdGhlIHRpbWUg
dGhlIHN5c3RlbSBjcmFzaGVkDQo+IHdpdGgNCj4gPiA+ID4gPj4+Pj4+IGtlcm5lbCBtZW1vcnkg
Y29ycnVwdGlvbiBpbiBzZWVtaW5nbHkgcmFuZG9tIHByb2Nlc3Nlcw0KPiBzaG9ydGx5DQo+ID4g
PiA+ID4+Pj4+PiBhZnRlciBzdGFydC4gRHJpdmVyIFZlcmlmaWVyIGRpZG4ndCBzZWVtIHRvIGNh
dGNoIGFueXRoaW5nLiBZb3UNCj4gY2FuDQo+ID4gPiA+ID4+Pj4+PiBzZWUgYSBsb2cgZnJvbSBv
bmUgc3VjaCBjcmFzaCBpbiB0aGUgYXR0YWNobWVudCBjcmFzaDEudHh0Lg0KPiA+ID4gPiA+Pj4+
Pj4NCj4gPiA+ID4gPj4+Pj4+IFRvZGF5IEkgdHJpZWQgdG8gcGVyZm9ybSBzb21lIG1vcmUgdGVz
dHMgYnV0IHRoaXMgdGltZSB3aXRob3V0DQo+IG91cg0KPiA+ID4gPiA+Pj4+Pj4gZ3Vlc3QgdG9v
bHMgKG9ubHkgcHZkcml2ZXJzIGFuZCBvdXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlDQo+ID4gPiA+
ID4+Pj4+PiBpbnN0YWxsZWQpLiBUbyBteSBzdXJwcmlzZSBub3cgRHJpdmVyIFZlcmlmaWVyIHdh
cyBjcmFzaGluZyB0aGUNCj4gPiA+ID4gPj4+Pj4+IHN5c3RlbSBldmVyeSB0aW1lIGluIHhlbnZi
ZCAoc2VlIGNyYXNoMi50eHQpLiBJIGRvbid0IGtub3cgd2h5DQo+IGl0DQo+ID4gPiA+ID4+Pj4+
PiBkaWRuJ3QgY2F0Y2ggdGhhdCBwcmV2aW91c2x5Li4uIElmIGFkZGluZyBzb21lIHRpbWVvdXQg
dG8gdGhlDQo+ID4gPiA+ID4+Pj4+PiBvZmZlbmRpbmcgd2FpdCBkb2Vzbid0IGJyZWFrIGFueXRo
aW5nIEknbGwgdHJ5IHRoYXQgdG8gc2VlIGlmIEkgY2FuDQo+ID4gPiA+ID4+Pj4+PiByZXByb2R1
Y2UgdGhlIHByZXZpb3VzIG1lbW9yeSBjb3JydXB0aW9ucy4NCj4gPiA+ID4gPj4+Pj4+DQo+ID4g
PiA+ID4+Pj4+IFRob3NlIGNyYXNoZXMgZG8gbG9vayBvZGQuIEknbSBvbiBQVE8gZm9yIHRoZSBu
ZXh0IHdlZWsgYnV0IEknbGwNCj4gPiA+IGhhdmUNCj4gPiA+ID4gPj4+Pj4gYSBsb29rIHdoZW4g
SSBnZXQgYmFjayB0byB0aGUgb2ZmaWNlLiBJIGRpZCBydW4gdmVyaWZpZXIgb24gYWxsIHRoZQ0K
PiA+ID4gPiA+Pj4+PiBkcml2ZXJzIGEgd2VlayBvciBzbyBiYWNrICh3aGlsZSBydW5uaW5nIHZi
ZCBwbHVnL3VucGx1ZyB0ZXN0cykNCj4gYnV0DQo+ID4gPiA+ID4+Pj4+IHRoZXJlIGhhdmUgYmVl
biBhIGNvdXBsZSBvZiBjaGFuZ2VzIHNpbmNlIHRoZW4uDQo+ID4gPiA+ID4+Pj4+DQo+ID4gPiA+
ID4+Pj4+IFBhdWwNCj4gPiA+ID4gPj4+Pj4NCj4gPiA+ID4gPj4+PiBObyBwcm9ibGVtLiBJIGF0
dGFjaGVkIHNvbWUgbW9yZSBsb2dzLiBUaGUgbGFzdCBvbmUgd2FzIGR1cmluZw0KPiA+ID4gPiBz
eXN0ZW0NCj4gPiA+ID4gPj4+PiBzaHV0ZG93biwgYWZ0ZXIgdGhhdCB0aGUgT1MgZmFpbGVkIHRv
IGJvb3QgKHByb2JhYmx5IGNvcnJ1cHRlZA0KPiA+ID4gPiA+Pj4+IGZpbGVzeXN0ZW0gc2luY2Ug
dGhlIEJTT0QgaXRzZWxmIHNlZW1lZCB0byBpbmRpY2F0ZSB0aGF0KS4gSSB0aGluaw0KPiA+ID4g
ZXZlcnkNCj4gPiA+ID4gPj4+PiB0aW1lIHRoZXJlIGlzIGEgQkxLSUZfUlNQX0VSUk9SIHNvbWV3
aGVyZSBidXQgSSdtIG5vdCB5ZXQNCj4gZmFtaWxpYXINCj4gPiA+ID4gd2l0aA0KPiA+ID4gPiA+
Pj4+IFhlbiBQViBkZXZpY2UgaW50ZXJmYWNlcyBzbyBub3Qgc3VyZSB3aGF0IHRoYXQgbWVhbnMu
DQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+PiBJbiB0aGUgbWVhbnRpbWUgSSd2ZSBydW4gbW9y
ZSB0ZXN0cyBvbiBteSBtb2RpZmllZCB4ZW5pZmFjZQ0KPiBkcml2ZXINCj4gPiA+IHRvDQo+ID4g
PiA+ID4+Pj4gbWFrZSBzdXJlIGl0J3Mgbm90IGNvbnRyaWJ1dGluZyB0byB0aGVzZSBpc3N1ZXMg
YnV0IGV2ZXJ5dGhpbmcNCj4gPiA+IHNlZW1lZA0KPiA+ID4gPiB0bw0KPiA+ID4gPiA+Pj4+IGJl
IGZpbmUgdGhlcmUuDQo+ID4gPiA+ID4+Pj4NCj4gPiA+ID4gPj4+Pg0KPiA+ID4gPiA+Pj4gSSBh
bHNvIGhhZCBhIGRpc2sgY29ycnVwdGlvbiBvbiB3aW5kb3dzIDEwIHBybyA2NCBiaXQgd2l0aCBw
diBkcml2ZXJzDQo+ID4gPiA+ID4+PiBidWlsZCBvZiAxMSBhdWd1c3QgYnV0IEknbSBub3Qgc3Vy
ZSB0aGF0IGlzIHJlbGF0ZWQgdG8gd2lucHYgZHJpdmVycywNCj4gPiA+ID4gPj4+IG9uIHNhbWUg
ZG9tVSBJIHN0YXJ0ZWQgdGVzdGluZyBhbHNvIHNuYXBzaG90IHdpdGggcWNvdzIgZGlzaw0KPiBv
dmVybGF5Lg0KPiA+ID4gPiA+Pj4gRm9yIHRoaXMgY2FzZSBJIGRvbid0IGhhdmUgdXNlZnVsIGlu
Zm9ybWF0aW9uIGJlY2F1c2UgZG9uJ3QgdHJ5IHRvDQo+ID4gPiA+ID4+PiBib290IHdpbmRvd3Mg
YXQgYWxsIGJ1dCBpZiByZWhhcHBlbiBJJ2xsIHRyeSB0byB0YWtlIG90aGVyIHVzZWZ1bA0KPiA+
ID4gPiA+Pj4gaW5mb3JtYXRpb24uDQo+ID4gPiA+ID4+IEhhcHBlbiBhbm90aGVyIHRpbWUgYnV0
IGFsc28gdGhpcyBJIHdhcyB1bmFibGUgdG8gdW5kZXJzdGFuZCB3aGF0DQo+IGlzDQo+ID4gPiA+
ID4+IGV4YWN0bHkgdGhlIGNhdXNlLg0KPiA+ID4gPiA+PiBPbiB3aW5kb3dzIHJlYm9vdCBhbGwg
c2VlbXMgd2FzIG9rIGFuZCBkaWQgYSBjbGVhbiBzaHV0ZG93biBidXQNCj4gb24NCj4gPiA+ID4g
Pj4gcmVib290IHNlYWJpb3MgZG9uJ3QgZm91bmQgYm9vdGFibGUgZGlzayBhbmQgcWVtdSBsb2cg
ZG9uJ3Qgc2hvdw0KPiA+ID4gdXNlZnVsDQo+ID4gPiA+ID4+IGluZm9ybWF0aW9ucy4NCj4gPiA+
ID4gPj4gcWVtdS1pbWcgY2hlY2sgc2hvdyBlcnJvcnM6DQo+ID4gPiA+ID4+PiAvdXNyL2xpYi94
ZW4vYmluL3FlbXUtaW1nIGNoZWNrIFcxMC5kaXNrMS5jb3ctc24xDQo+ID4gPiA+ID4+PiBFUlJP
UiBjbHVzdGVyIDE0MyByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4gPiA+ID4+PiBMZWFrZWQg
Y2x1c3RlciAxMDc3IHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+ID4gPj4+IEVSUk9SIGNs
dXN0ZXIgMTIyMSByZWZjb3VudD0xIHJlZmVyZW5jZT0yDQo+ID4gPiA+ID4+PiBMZWFrZWQgY2x1
c3RlciAyNzAzIHJlZmNvdW50PTEgcmVmZXJlbmNlPTANCj4gPiA+ID4gPj4+IExlYWtlZCBjbHVz
dGVyIDUyMTIgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4gPiA+Pj4gTGVha2VkIGNsdXN0
ZXIgMTMzNzUgcmVmY291bnQ9MSByZWZlcmVuY2U9MA0KPiA+ID4gPiA+Pj4NCj4gPiA+ID4gPj4+
IDIgZXJyb3JzIHdlcmUgZm91bmQgb24gdGhlIGltYWdlLg0KPiA+ID4gPiA+Pj4gRGF0YSBtYXkg
YmUgY29ycnVwdGVkLCBvciBmdXJ0aGVyIHdyaXRlcyB0byB0aGUgaW1hZ2UgbWF5IGNvcnJ1cHQN
Cj4gaXQuDQo+ID4gPiA+ID4+Pg0KPiA+ID4gPiA+Pj4gNCBsZWFrZWQgY2x1c3RlcnMgd2VyZSBm
b3VuZCBvbiB0aGUgaW1hZ2UuDQo+ID4gPiA+ID4+PiBUaGlzIG1lYW5zIHdhc3RlIG9mIGRpc2sg
c3BhY2UsIGJ1dCBubyBoYXJtIHRvIGRhdGEuDQo+ID4gPiA+ID4+PiAyNzg1My84MTkyMDAgPSAz
LjQwJSBhbGxvY2F0ZWQsIDIyLjY1JSBmcmFnbWVudGVkLCAwLjAwJQ0KPiA+ID4gY29tcHJlc3Nl
ZA0KPiA+ID4gPiA+Pj4gY2x1c3RlcnMNCj4gPiA+ID4gPj4+IEltYWdlIGVuZCBvZmZzZXQ6IDE4
NTA3MzY2NDANCj4gPiA+ID4gPj4gSSBjcmVhdGVkIGl0IHdpdGg6DQo+ID4gPiA+ID4+IC91c3Iv
bGliL3hlbi9iaW4vcWVtdS1pbWcgY3JlYXRlIC1vDQo+ID4gPiA+ID4+IGJhY2tpbmdfZmlsZT1X
MTAuZGlzazEueG0sYmFja2luZ19mbXQ9cmF3IC1mIHFjb3cyDQo+IFcxMC5kaXNrMS5jb3ctDQo+
ID4gPiA+IHNuMQ0KPiA+ID4gPiA+PiBhbmQgY2hhbmdlZCB0aGUgeGwgZG9tVSBjb25maWd1cmF0
aW9uOg0KPiA+ID4gPiA+PiBkaXNrPVsnL21udC92bTIvVzEwLmRpc2sxLmNvdy1zbjEscWNvdzIs
aGRhLHJ3JywuLi4NCj4gPiA+ID4gPj4gRG9tMCBpcyB3aXRoIHhlbiA0LjYtcmMxIGFuZCBxZW11
IDIuNC4wDQo+ID4gPiA+ID4+IERvbVUgaXMgd2luZG93cyAxMCBwcm8gNjQgYml0IHdpdGggcHYg
ZHJpdmVycyBidWlsZCBvZiAxMSBhdWd1c3QNCj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gSG93IEkg
Y2FuIGtub3cgZm9yIHN1cmUgaWYgaXQgaXMgYSB3aW5wdiBvciBxZW11IG9yIG90aGVyIHByb2Js
ZW0NCj4gYW5kDQo+ID4gPiA+ID4+IHRha2UgdXNlZnVsIGluZm9ybWF0aW9uIHRvIHJlcG9ydD8N
Cj4gPiA+ID4gPj4NCj4gPiA+ID4gPj4gVGhhbmtzIGZvciBhbnkgcmVwbHkgYW5kIHNvcnJ5IGZv
ciBteSBiYWQgZW5nbGlzaC4NCj4gPiA+ID4gPiBUaGlzIHNvdW5kcyB2ZXJ5IG11Y2ggbGlrZSBh
IGxhY2sgb2Ygc3luY2hyb25pemF0aW9uIHNvbWV3aGVyZS4gSQ0KPiByZWNhbGwNCj4gPiA+ID4g
c2VlaW5nIG90aGVyIHByb2JsZW1zIG9mIHRoaXMgaWxrIHdoZW4gc29tZW9uZSB3YXMgbWVzc2lu
ZyBhcm91bmQNCj4gd2l0aA0KPiA+ID4gPiBPX0RJUkVDVCBmb3Igb3BlbmluZyBpbWFnZXMuIEkg
d29uZGVyIGlmIHdlIGFyZSBtaXNzaW5nIGEgZmx1c2gNCj4gb3BlcmF0aW9uDQo+ID4gPiA+IG9u
IHNodXRkb3duLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgUGF1bA0KPiA+ID4gPiA+DQo+ID4g
PiA+IFRoYW5rcyBmb3IgcmVwbHkuDQo+ID4gPiA+IEkgZGlkIGEgZmFzdCBzZWFyY2ggYnV0IEkg
bm90IGZvdW5kIE9fRElSRUNUIGdyZXBwaW5nIGluIGxpYnhsLCBJIGZvdW5kDQo+ID4gPiA+IGl0
IG9ubHkgaW4gcWVtdSBjb2RlLg0KPiA+ID4gPiBBZnRlciBJIHRyaWVkIHdpdGggcGF0Y2ggdGhh
dCBzZWVtcyBhZGRlZCBzZXR0aW5nIG9mIGl0IGZvciB4ZW46DQo+ID4gPiA+DQo+ID4gPg0KPiBo
dHRwOi8vZ2l0LnFlbXUub3JnLz9wPXFlbXUuZ2l0O2E9Y29tbWl0ZGlmZjtoPTQ1NGFlNzM0ZjFk
OWY1OTEzNDVmYTc4DQo+ID4gPiA+IDM3NjQzNWE4ZTc0YmI0ZWRkDQo+ID4gPiA+IENoZWNraW5n
IGluIGxpYnhsIHNlZW1zIGRpc2FibGVkIGJ5IGRlZmF1bHQgYW5kIGZyb20gc29tZSBvbGQgeGVu
IHBvc3QNCj4gPiA+ID4gc2VlbXMgdGhhdCBPX0RJUkVDVCBjcmVhdGVzIHByb2JsZW1zLg0KPiA+
ID4gPiBJIHNob3VsZCB0cnkgaXQgZW5hYmxlIGRpcmVjdC1pby1zYWZlIGluIGRvbVVzIHFjb3cy
IGRpc2tzPw0KPiA+ID4gPiBBZGRlZCBhbHNvIFN0ZWZhbm8gU3RhYmVsbGluaSBhcyBjYy4NCj4g
PiA+ID4gQFN0ZWZhbm8gU3RhYmVsbGluaTogV2hhdCBpcyB0aGUgY3VycmVudCBrbm93IHN0YXR1
cyBhbmQgcmVzdWx0IG9mDQo+ID4gPiA+IGRpcmVjdC1pby1zYWZlPw0KPiANCj4gT19ESVJFQ1Qg
c2hvdWxkIGJlIGVudGlyZWx5IHNhZmUgdG8gdXNlLCBhdCBsZWFzdCBvbiBpZGUgYW5kIHFkaXNr
LiBJDQo+IGhhdmVuJ3QgZG9uZSB0aGUgYW5hbHlzaXMgb24gYWhjaSBlbXVsYXRpb24gaW4gcWVt
dSB0byBrbm93IHdoZXRoZXIgdGhhdA0KPiB3b3VsZCBiZSB0cnVlIGZvciBhaGNpIGRpc2tzLCBi
dXQgdGhhdCBkb2Vzbid0IG1hdHRlciBiZWNhdXNlIHVucGx1ZyBpcw0KPiBub3QgaW1wbGVtZW50
ZWQgZm9yIGFoY2kgZGlza3MuDQo+IA0KPiANCj4gPiA+ID4gU29ycnkgaXMgdGhlIHF1ZXN0aW9u
IGFyZSBzdHVwaWQgYnkgb3IgbXkgZW5nbGlzaCBpcyB0b28gYmFkIG9yIG1hbnkNCj4gPiA+ID4g
cG9zdCBvZiBsYXRlc3QgeWVhcnMgYXJlIGNvbmZ1c2VkIGFuZCBpbiBzYW1lIGNhc2VzIHNlZW1z
IGFsc28NCj4gPiA+ID4gY29udHJhZGljdG9yeSBhYm91dCBzdGFiaWxpdHkvaW50ZWdyaXR5L3Bl
cmZvcm1hbmNlIHVzaW5nIGl0IG9yIG5vdC4NCj4gPiA+ID4gSW4gcGFydGljdWxhciBzZWVtcyBj
cmFzaCB3aXRoIHNvbWUga2VybmVscyBidXQgSSBub3QgdW5kZXJzdGFuZA0KPiBleGFjdGx5DQo+
ID4gPiA+IHdoYXQgdmVyc2lvbnMgYW5kL29yIHdpdGggd2hpY2ggcGF0Y2hlcy4NCj4gPiA+ID4N
Cj4gPiA+ID4gQFBhdWwgRHVycmFudDogaGF2ZSB5b3Ugc2VlIG15IG90aGVyIG1haWwgd2hlbiBJ
IHdyb3RlIHRoYXQgYmFzZWQgb24NCj4gbXkNCj4gPiA+ID4gbGF0ZXN0IHRlc3Qgd2l0aCB4ZW4g
NC42IHdpdGhvdXQgdWRldiBmaWxlIHdpbmRvd3MgZG9tVXMgd2l0aCBuZXcgcHYNCj4gPiA+ID4g
ZHJpdmVyIGRvbid0IGJvb3QgYW5kIGZvciBzdGlsbCBib290IGl0IGNvcnJlY3RseSBJIG11c3Qg
cmVhZGQgdWRldg0KPiA+ID4gPiBmaWxlLCBjYW4gdGhpcyBjYXVzZSB1bmV4cGVjdGVkIGNhc2Ug
cmVsYXRlZCB0byB0aGlzIHByb2JsZW0gb3IgaXMNCj4gPiA+ID4gZGlmZmVyZW50Pw0KPiA+ID4g
PiBodHRwOi8vbGlzdHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3dpbi1wdi1kZXZlbC8yMDE1LQ0K
PiAwOC9tc2cwMDAzMy5odG1sDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gSSdtIG5vdCBzdXJlIHdo
eSB1ZGV2IHdvdWxkIGJlIGFuIGlzc3VlIGhlcmUuIFRoZSBwcm9ibGVtIHlvdSBoYXZlDQo+ID4g
PiBhcHBlYXJzIHRvIGJlIFFFTVUgaWdub3JpbmcgdGhlIHJlcXVlc3QgdG8gdW5wbHVnIGVtdWxh
dGVkIGRpc2tzLiBJJ3ZlDQo+IG5vdA0KPiA+ID4gc2VlbiB0aGlzIGJlaGF2aW91ciBvbiBteSB0
ZXN0IGJveCBzbyBJJ2xsIG5lZWQgdG8gZGlnIHNvbWUgbW9yZS4NCj4gPiA+DQo+ID4NCj4gPiBJ
IG5vdGljZSB5b3UgaGF2ZSA2IElERSBjaGFubmVscz8gQXJlIHlvdSB1c2luZyBBSENJIGJ5IGFu
eSBjaGFuY2U/IElmIHlvdQ0KPiBhcmUgdGhlbiBpdCBsb29rcyBsaWtlIFFFTVUgaXMgbm90IGhv
bm91cmluZyB0aGUgdW5wbHVnIHJlcXVlc3QuLi4gdGhhdCB3b3VsZA0KPiBiZSB3aGVyZSB0aGUg
YnVnIGlzLiBJJ2xsIHRyeSB0byByZXBybyBteXNlbGYuDQo+IA0KPiBVbnBsdWcgb24gYWhjaSBp
cyBhY3R1YWxseSB1bmltcGxlbWVudGVkLCBzZWUgaHcvaTM4Ni94ZW4veGVuX3BsYXRmb3JtLmM6
DQo+IA0KPiBzdGF0aWMgdm9pZCB1bnBsdWdfZGlza3MoUENJQnVzICpiLCBQQ0lEZXZpY2UgKmQs
IHZvaWQgKm8pDQo+IHsNCj4gICAgIC8qIFdlIGhhdmUgdG8gaWdub3JlIHBhc3N0aHJvdWdoIGRl
dmljZXMgKi8NCj4gICAgIGlmIChwY2lfZ2V0X3dvcmQoZC0+Y29uZmlnICsgUENJX0NMQVNTX0RF
VklDRSkgPT0NCj4gICAgICAgICAgICAgUENJX0NMQVNTX1NUT1JBR0VfSURFDQo+ICAgICAgICAg
ICAgICYmIHN0cmNtcChkLT5uYW1lLCAieGVuLXBjaS1wYXNzdGhyb3VnaCIpICE9IDApIHsNCj4g
ICAgICAgICBwY2lfcGlpeDNfeGVuX2lkZV91bnBsdWcoREVWSUNFKGQpKTsNCj4gICAgIH0NCj4g
fQ0KPiANCj4gdGhlIGZ1bmN0aW9uIHNwZWNpZmljYWxseSBvbmx5IHVucGx1Z3MgSURFIGRpc2tz
Lg0KPiBJIGFtIG5vdCBzdXJlIHdoYXQgdG8gZG8gYWJvdXQgYWhjaSB1bnBsdWcsIGdpdmVuIHRo
YXQgd2UgZG9uJ3QNCj4gaW1wbGVtZW50IHNjc2kgZGlzayB1bnBsdWcgZWl0aGVyLiBBZnRlciBh
bGwsIGlmIHRoZSBnb2FsIGlzIHRvIHVucGx1Zw0KPiB0aGUgZGlzaywgd2h5IGNob29zZSBhIGZh
c3RlciBlbXVsYXRlZCBwcm90b2NvbD8NCg0KSSB0aGluayB3ZSBzaG91bGQgdW5wbHVnIHRoZSBk
aXNrIHJlZ2FyZGxlc3Mgb2YgdHlwZSwgaWYgd2Ugc3VwcG9ydCBjb25maWd1cmluZyBkaXNrcyBv
ZiB0aGF0IHR5cGUgdGhyb3VnaCBsaWJ4bC4gVGhlIHJlYXNvbiwgaW4gdGhpcyBjYXNlIEFGQUlV
LCBmb3Igd2FudGluZyBhaGNpIGlzIHRvIHNwZWVkIHVwIFdpbmRvd3MgYm9vdCB3aGVyZSBpbml0
aWFsIGRyaXZlciBsb2FkIGlzIHN0aWxsIGRvbmUgdGhyb3VnaCBpbnQxMyBhbmQgaGVuY2UgZW11
bGF0ZWQgZGlzay4NCg0KICBQYXVsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWls
bWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 17:54:08 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 17:54:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXvBe-0005Zg-U7; Fri, 04 Sep 2015 17:54:06 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXvBd-0005Zb-1K
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 17:54:05 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	81/35-01753-CBAD9E55; Fri, 04 Sep 2015 17:54:04 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441389241!41401461!1
X-Originating-IP: [209.85.214.196]
X-SpamReason: No, hits=2.1 required=7.0 tests=BIZ_TLD,HTML_30_40,
	HTML_MESSAGE,RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26484 invoked from network); 4 Sep 2015 17:54:02 -0000
Received: from mail-ob0-f196.google.com (HELO mail-ob0-f196.google.com)
	(209.85.214.196)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 17:54:02 -0000
Received: by obcgo12 with SMTP id go12so2150749obc.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 10:54:01 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:mime-version:in-reply-to:references:date
	:message-id:subject:from:to:cc:content-type;
	bh=R397kd9VaPRvOh7SpFEyteVAh2ARriYiAAgc74abmzw=;
	b=R72o+ItaJfg7wpPIZkzv9EqrpS2OUx3oIPAjav6aTdkIYS4cdMnIhGQAG7nyrI0wTK
	VaeMIRNtB1/OP1zzoqmWsIebfp/VtmOfAVr5AuQ34NIV8HlreO2fa2FHEo0FMt5UoHD3
	/2beOsdTwzIN9tXlgIVWquwYDckDJWLMWYte3rSYOgXv7OezGvxLsvPMTr5k23ZMiHHe
	8zbln82WvNLUeiQAYOwYOvEuA43l2BeSUyYjA/OJpUtmBD6LFWBskPTYAvFZ2LIZNWxF
	QIkXn8F2djHSg/d6jtWO5e/J1DpZ+9VkzrgJzrLslipB1MlBzsS2PLTz8prciUbFJZcR
	YsYw==
X-Gm-Message-State: ALoCoQmrzwltGLfTfAh7ximr4lUwQBZIXBvlf6Xg9CMM4CSP4jhEtHv+x1zyRp9bmfvytgqevY8z
MIME-Version: 1.0
X-Received: by 10.60.69.39 with SMTP id b7mr4357185oeu.51.1441389240969; Fri,
	04 Sep 2015 10:54:00 -0700 (PDT)
Received: by 10.202.129.147 with HTTP; Fri, 4 Sep 2015 10:54:00 -0700 (PDT)
X-Originating-IP: [95.233.12.243]
In-Reply-To: <alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>
	<55D6DD80.8080806@m2r.biz> <55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
Date: Fri, 4 Sep 2015 19:54:00 +0200
Message-ID: <CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6796969339337913127=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6796969339337913127==
Content-Type: multipart/alternative; boundary=001a11330e68b114a1051eef95bd

--001a11330e68b114a1051eef95bd
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

2015-09-04 18:31 GMT+02:00 Stefano Stabellini <
stefano.stabellini@eu.citrix.com>:

> On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > -----Original Message-----
> > > From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com]
> > > Sent: 04 September 2015 17:25
> > > To: Paul Durrant
> > > Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenpro=
ject.org;
> Stefano
> > > Stabellini
> > > Subject: RE: [win-pv-devel] Problems with xenvbd
> > >
> > > On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > > > -----Original Message-----
> > > > > From: win-pv-devel-bounces@lists.xenproject.org [mailto:
> win-pv-devel-
> > > > > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > > > > Sent: 02 September 2015 10:00
> > > > > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a;
> win-pv-devel@lists.xenproject.org
> > > > > Cc: Stefano Stabellini
> > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > > Sent: 02 September 2015 09:54
> > > > > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a;
> win-pv-devel@lists.xenproject.org
> > > > > > Cc: Stefano Stabellini
> > > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > >
> > > > > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > > > > >> -----Original Message-----
> > > > > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > > >> Sent: 21 August 2015 14:14
> > > > > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant;
> win-pv-devel@lists.xenproject.org
> > > > > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > > >>
> > > > > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > > > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > > > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > > > > >>>>>> -----Original Message----- From:
> > > > > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv=
-
> > > devel-
> > > > > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> > > Sent: 18
> > > > > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org
> > > Subject:
> > > > > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > > > > >>>>>>
> > > > > > >>>>>> Hi,
> > > > > > >>>>>>
> > > > > > >>>>>> I've been testing the current pvdrivers code in
> preparation for
> > > > > > >>>>>> creating upstream patches for my xeniface additions and =
I
> > > noticed
> > > > > > >>>>>> than xenvbd seems to be very unstable for me. I'm not
> sure if
> > > it's
> > > > > > >>>>>> a problem with xenvbd itself or my code because it seeme=
d
> to
> > > only
> > > > > > >>>>>> manifest when the full suite of our guest tools was
> installed
> > > along
> > > > > > >>>>>> with xenvbd. In short, most of the time the system crash=
ed
> > > with
> > > > > > >>>>>> kernel memory corruption in seemingly random processes
> > > shortly
> > > > > > >>>>>> after start. Driver Verifier didn't seem to catch
> anything. You
> > > can
> > > > > > >>>>>> see a log from one such crash in the attachment
> crash1.txt.
> > > > > > >>>>>>
> > > > > > >>>>>> Today I tried to perform some more tests but this time
> without
> > > our
> > > > > > >>>>>> guest tools (only pvdrivers and our shared libraries wer=
e
> > > > > > >>>>>> installed). To my surprise now Driver Verifier was
> crashing the
> > > > > > >>>>>> system every time in xenvbd (see crash2.txt). I don't
> know why
> > > it
> > > > > > >>>>>> didn't catch that previously... If adding some timeout t=
o
> the
> > > > > > >>>>>> offending wait doesn't break anything I'll try that to
> see if I can
> > > > > > >>>>>> reproduce the previous memory corruptions.
> > > > > > >>>>>>
> > > > > > >>>>> Those crashes do look odd. I'm on PTO for the next week
> but I'll
> > > > > have
> > > > > > >>>>> a look when I get back to the office. I did run verifier
> on all the
> > > > > > >>>>> drivers a week or so back (while running vbd plug/unplug
> tests)
> > > but
> > > > > > >>>>> there have been a couple of changes since then.
> > > > > > >>>>>
> > > > > > >>>>> Paul
> > > > > > >>>>>
> > > > > > >>>> No problem. I attached some more logs. The last one was
> during
> > > > > > system
> > > > > > >>>> shutdown, after that the OS failed to boot (probably
> corrupted
> > > > > > >>>> filesystem since the BSOD itself seemed to indicate that).
> I think
> > > > > every
> > > > > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet
> > > familiar
> > > > > > with
> > > > > > >>>> Xen PV device interfaces so not sure what that means.
> > > > > > >>>>
> > > > > > >>>> In the meantime I've run more tests on my modified xenifac=
e
> > > driver
> > > > > to
> > > > > > >>>> make sure it's not contributing to these issues but
> everything
> > > > > seemed
> > > > > > to
> > > > > > >>>> be fine there.
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>> I also had a disk corruption on windows 10 pro 64 bit with
> pv drivers
> > > > > > >>> build of 11 august but I'm not sure that is related to winp=
v
> drivers,
> > > > > > >>> on same domU I started testing also snapshot with qcow2 dis=
k
> > > overlay.
> > > > > > >>> For this case I don't have useful information because don't
> try to
> > > > > > >>> boot windows at all but if rehappen I'll try to take other
> useful
> > > > > > >>> information.
> > > > > > >> Happen another time but also this I was unable to understand
> what
> > > is
> > > > > > >> exactly the cause.
> > > > > > >> On windows reboot all seems was ok and did a clean shutdown
> but
> > > on
> > > > > > >> reboot seabios don't found bootable disk and qemu log don't
> show
> > > > > useful
> > > > > > >> informations.
> > > > > > >> qemu-img check show errors:
> > > > > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > > > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > > > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > > > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > > > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > > > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > > > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > > > > >>>
> > > > > > >>> 2 errors were found on the image.
> > > > > > >>> Data may be corrupted, or further writes to the image may
> corrupt
> > > it.
> > > > > > >>>
> > > > > > >>> 4 leaked clusters were found on the image.
> > > > > > >>> This means waste of disk space, but no harm to data.
> > > > > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > > > > compressed
> > > > > > >>> clusters
> > > > > > >>> Image end offset: 1850736640
> > > > > > >> I created it with:
> > > > > > >> /usr/lib/xen/bin/qemu-img create -o
> > > > > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2
> > > W10.disk1.cow-
> > > > > > sn1
> > > > > > >> and changed the xl domU configuration:
> > > > > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > > > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > > > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11
> august
> > > > > > >>
> > > > > > >> How I can know for sure if it is a winpv or qemu or other
> problem
> > > and
> > > > > > >> take useful information to report?
> > > > > > >>
> > > > > > >> Thanks for any reply and sorry for my bad english.
> > > > > > > This sounds very much like a lack of synchronization
> somewhere. I
> > > recall
> > > > > > seeing other problems of this ilk when someone was messing arou=
nd
> > > with
> > > > > > O_DIRECT for opening images. I wonder if we are missing a flush
> > > operation
> > > > > > on shutdown.
> > > > > > >
> > > > > > >    Paul
> > > > > > >
> > > > > > Thanks for reply.
> > > > > > I did a fast search but I not found O_DIRECT grepping in libxl,
> I found
> > > > > > it only in qemu code.
> > > > > > After I tried with patch that seems added setting of it for xen=
:
> > > > > >
> > > > >
> > > http://git.qemu.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591=
345fa78
> > > > > > 376435a8e74bb4edd
> > > > > > Checking in libxl seems disabled by default and from some old
> xen post
> > > > > > seems that O_DIRECT creates problems.
> > > > > > I should try it enable direct-io-safe in domUs qcow2 disks?
> > > > > > Added also Stefano Stabellini as cc.
> > > > > > @Stefano Stabellini: What is the current know status and result
> of
> > > > > > direct-io-safe?
> > >
> > > O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
> > > haven't done the analysis on ahci emulation in qemu to know whether
> that
> > > would be true for ahci disks, but that doesn't matter because unplug =
is
> > > not implemented for ahci disks.
> > >
> > >
> > > > > > Sorry is the question are stupid by or my english is too bad or
> many
> > > > > > post of latest years are confused and in same cases seems also
> > > > > > contradictory about stability/integrity/performance using it or
> not.
> > > > > > In particular seems crash with some kernels but I not understan=
d
> > > exactly
> > > > > > what versions and/or with which patches.
> > > > > >
> > > > > > @Paul Durrant: have you see my other mail when I wrote that
> based on
> > > my
> > > > > > latest test with xen 4.6 without udev file windows domUs with
> new pv
> > > > > > driver don't boot and for still boot it correctly I must readd
> udev
> > > > > > file, can this cause unexpected case related to this problem or
> is
> > > > > > different?
> > > > > > http://lists.xen.org/archives/html/win-pv-devel/2015-
> > > 08/msg00033.html
> > > > > >
> > > > >
> > > > > I'm not sure why udev would be an issue here. The problem you hav=
e
> > > > > appears to be QEMU ignoring the request to unplug emulated disks.
> I've
> > > not
> > > > > seen this behaviour on my test box so I'll need to dig some more.
> > > > >
> > > >
> > > > I notice you have 6 IDE channels? Are you using AHCI by any chance?
> If you
> > > are then it looks like QEMU is not honouring the unplug request...
> that would
> > > be where the bug is. I'll try to repro myself.
> > >
> > > Unplug on ahci is actually unimplemented, see
> hw/i386/xen/xen_platform.c:
> > >
> > > static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
> > > {
> > >     /* We have to ignore passthrough devices */
> > >     if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
> > >             PCI_CLASS_STORAGE_IDE
> > >             && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
> > >         pci_piix3_xen_ide_unplug(DEVICE(d));
> > >     }
> > > }
> > >
> > > the function specifically only unplugs IDE disks.
> > > I am not sure what to do about ahci unplug, given that we don't
> > > implement scsi disk unplug either. After all, if the goal is to unplu=
g
> > > the disk, why choose a faster emulated protocol?
> >
> > I think we should unplug the disk regardless of type, if we support
> configuring disks of that type through libxl. The reason, in this case
> AFAIU, for wanting ahci is to speed up Windows boot where initial driver
> load is still done through int13 and hence emulated disk.
>
> I would be happy to take a patch which makes QEMU unplug all kinds of
> disks, as long as is able to skip passed though devices (see comment in
> the code).


Faster boot not only on windows domUs but also on linux hvm domUs, for
example if I remember good on fedora 21 with lxde with ahci take only 20%
of total ide test time.
I tested ahci for months and seems strange I not saw unplug not working, on
previous mail log where boot correctly can you take a look if unplug it
correctly? (should be with ahci if I'm not wrong)
In any case any possible improvement/bugfix is appreciated.
About direct-io-safe I tried today with qcow2 disk and dom0 insta-reboot on
windows boot, dom0 kernel is 3.2 from official wheezy repository, nothing
useful in dom0 and domU logs, I had not time to retry with full dom0 and
serial on lan on dom0 but is needed I'll do when possible.

--001a11330e68b114a1051eef95bd
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">2015-09-04 18:31 GMT+02:00 Stefano Stabellini <span dir=3D"ltr">&lt;<a =
href=3D"mailto:stefano.stabellini@eu.citrix.com" target=3D"_blank">stefano.=
stabellini@eu.citrix.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<div class=3D"HOEnZb"><div class=3D"h5">On Fri, 4 Sep 2015, Paul Durrant wr=
ote:<br>
&gt; &gt; -----Original Message-----<br>
&gt; &gt; From: Stefano Stabellini [mailto:<a href=3D"mailto:stefano.stabel=
lini@eu.citrix.com">stefano.stabellini@eu.citrix.com</a>]<br>
&gt; &gt; Sent: 04 September 2015 17:25<br>
&gt; &gt; To: Paul Durrant<br>
&gt; &gt; Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; <a href=3D"mailto:win=
-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a>; Stef=
ano<br>
&gt; &gt; Stabellini<br>
&gt; &gt; Subject: RE: [win-pv-devel] Problems with xenvbd<br>
&gt; &gt;<br>
&gt; &gt; On Fri, 4 Sep 2015, Paul Durrant wrote:<br>
&gt; &gt; &gt; &gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; From: <a href=3D"mailto:win-pv-devel-bounces@lists.xenp=
roject.org">win-pv-devel-bounces@lists.xenproject.org</a> [mailto:<a href=
=3D"mailto:win-pv-devel-">win-pv-devel-</a><br>
&gt; &gt; &gt; &gt; <a href=3D"mailto:bounces@lists.xenproject.org">bounces=
@lists.xenproject.org</a>] On Behalf Of Paul Durrant<br>
&gt; &gt; &gt; &gt; Sent: 02 September 2015 10:00<br>
&gt; &gt; &gt; &gt; To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; <a href=3D"=
mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org=
</a><br>
&gt; &gt; &gt; &gt; Cc: Stefano Stabellini<br>
&gt; &gt; &gt; &gt; Subject: Re: [win-pv-devel] Problems with xenvbd<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; &gt; From: Fabio Fantoni [mailto:<a href=3D"mailto:fabi=
o.fantoni@m2r.biz">fabio.fantoni@m2r.biz</a>]<br>
&gt; &gt; &gt; &gt; &gt; Sent: 02 September 2015 09:54<br>
&gt; &gt; &gt; &gt; &gt; To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; <a href=
=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject=
.org</a><br>
&gt; &gt; &gt; &gt; &gt; Cc: Stefano Stabellini<br>
&gt; &gt; &gt; &gt; &gt; Subject: Re: [win-pv-devel] Problems with xenvbd<b=
r>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Il 01/09/2015 16:41, Paul Durrant ha scritto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; From: Fabio Fantoni [mailto:<a href=3D"ma=
ilto:fabio.fantoni@m2r.biz">fabio.fantoni@m2r.biz</a>]<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Sent: 21 August 2015 14:14<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant=
; <a href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.x=
enproject.org</a><br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Subject: Re: [win-pv-devel] Problems with=
 xenvbd<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Il 21/08/2015 10:12, Fabio Fantoni ha scr=
itto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=
=C5=82a ha scritto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; On 2015-08-19 23:25, Paul Durrant=
 wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; -----Original Message----=
- From:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href=3D"mailto:win-pv-=
devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.o=
rg</a> [mailto:<a href=3D"mailto:win-pv-">win-pv-</a><br>
&gt; &gt; devel-<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href=3D"mailto:bounces=
@lists.xenproject.org">bounces@lists.xenproject.org</a>] On Behalf Of Rafal=
 Wojdyla<br>
&gt; &gt; Sent: 18<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; August 2015 14:33 To: <a =
href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenpro=
ject.org</a><br>
&gt; &gt; Subject:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; [win-pv-devel] Problems w=
ith xenvbd<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; Hi,<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; I&#39;ve been testing the=
 current pvdrivers code in preparation for<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; creating upstream patches=
 for my xeniface additions and I<br>
&gt; &gt; noticed<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; than xenvbd seems to be v=
ery unstable for me. I&#39;m not sure if<br>
&gt; &gt; it&#39;s<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; a problem with xenvbd its=
elf or my code because it seemed to<br>
&gt; &gt; only<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; manifest when the full su=
ite of our guest tools was installed<br>
&gt; &gt; along<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; with xenvbd. In short, mo=
st of the time the system crashed<br>
&gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; kernel memory corruption =
in seemingly random processes<br>
&gt; &gt; shortly<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; after start. Driver Verif=
ier didn&#39;t seem to catch anything. You<br>
&gt; &gt; can<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; see a log from one such c=
rash in the attachment crash1.txt.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; Today I tried to perform =
some more tests but this time without<br>
&gt; &gt; our<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; guest tools (only pvdrive=
rs and our shared libraries were<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; installed). To my surpris=
e now Driver Verifier was crashing the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; system every time in xenv=
bd (see crash2.txt). I don&#39;t know why<br>
&gt; &gt; it<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; didn&#39;t catch that pre=
viously... If adding some timeout to the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; offending wait doesn&#39;=
t break anything I&#39;ll try that to see if I can<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; reproduce the previous me=
mory corruptions.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; Those crashes do look odd. I&=
#39;m on PTO for the next week but I&#39;ll<br>
&gt; &gt; &gt; &gt; have<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; a look when I get back to the=
 office. I did run verifier on all the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; drivers a week or so back (wh=
ile running vbd plug/unplug tests)<br>
&gt; &gt; but<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; there have been a couple of c=
hanges since then.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; Paul<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; No problem. I attached some more =
logs. The last one was during<br>
&gt; &gt; &gt; &gt; &gt; system<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; shutdown, after that the OS faile=
d to boot (probably corrupted<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; filesystem since the BSOD itself =
seemed to indicate that). I think<br>
&gt; &gt; &gt; &gt; every<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; time there is a BLKIF_RSP_ERROR s=
omewhere but I&#39;m not yet<br>
&gt; &gt; familiar<br>
&gt; &gt; &gt; &gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; Xen PV device interfaces so not s=
ure what that means.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; In the meantime I&#39;ve run more=
 tests on my modified xeniface<br>
&gt; &gt; driver<br>
&gt; &gt; &gt; &gt; to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; make sure it&#39;s not contributi=
ng to these issues but everything<br>
&gt; &gt; &gt; &gt; seemed<br>
&gt; &gt; &gt; &gt; &gt; to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; be fine there.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; I also had a disk corruption on windo=
ws 10 pro 64 bit with pv drivers<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; build of 11 august but I&#39;m not su=
re that is related to winpv drivers,<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; on same domU I started testing also s=
napshot with qcow2 disk<br>
&gt; &gt; overlay.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; For this case I don&#39;t have useful=
 information because don&#39;t try to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; boot windows at all but if rehappen I=
&#39;ll try to take other useful<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; information.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Happen another time but also this I was u=
nable to understand what<br>
&gt; &gt; is<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; exactly the cause.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; On windows reboot all seems was ok and di=
d a clean shutdown but<br>
&gt; &gt; on<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; reboot seabios don&#39;t found bootable d=
isk and qemu log don&#39;t show<br>
&gt; &gt; &gt; &gt; useful<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; informations.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; qemu-img check show errors:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; /usr/lib/xen/bin/qemu-img check W10.d=
isk1.cow-sn1<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; ERROR cluster 143 refcount=3D1 refere=
nce=3D2<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 1077 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; ERROR cluster 1221 refcount=3D1 refer=
ence=3D2<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 2703 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 5212 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 13375 refcount=3D1 ref=
erence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 2 errors were found on the image.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Data may be corrupted, or further wri=
tes to the image may corrupt<br>
&gt; &gt; it.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 4 leaked clusters were found on the i=
mage.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; This means waste of disk space, but n=
o harm to data.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 27853/819200 =3D 3.40% allocated, 22.=
65% fragmented, 0.00%<br>
&gt; &gt; &gt; &gt; compressed<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; clusters<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Image end offset: 1850736640<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; I created it with:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; /usr/lib/xen/bin/qemu-img create -o<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; backing_file=3DW10.disk1.xm,backing_fmt=
=3Draw -f qcow2<br>
&gt; &gt; W10.disk1.cow-<br>
&gt; &gt; &gt; &gt; &gt; sn1<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; and changed the xl domU configuration:<br=
>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; disk=3D[&#39;/mnt/vm2/W10.disk1.cow-sn1,q=
cow2,hda,rw&#39;,...<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Dom0 is with xen 4.6-rc1 and qemu 2.4.0<b=
r>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; DomU is windows 10 pro 64 bit with pv dri=
vers build of 11 august<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; How I can know for sure if it is a winpv =
or qemu or other problem<br>
&gt; &gt; and<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; take useful information to report?<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Thanks for any reply and sorry for my bad=
 english.<br>
&gt; &gt; &gt; &gt; &gt; &gt; This sounds very much like a lack of synchron=
ization somewhere. I<br>
&gt; &gt; recall<br>
&gt; &gt; &gt; &gt; &gt; seeing other problems of this ilk when someone was=
 messing around<br>
&gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; O_DIRECT for opening images. I wonder if we are mi=
ssing a flush<br>
&gt; &gt; operation<br>
&gt; &gt; &gt; &gt; &gt; on shutdown.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;=C2=A0 =C2=A0 Paul<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Thanks for reply.<br>
&gt; &gt; &gt; &gt; &gt; I did a fast search but I not found O_DIRECT grepp=
ing in libxl, I found<br>
&gt; &gt; &gt; &gt; &gt; it only in qemu code.<br>
&gt; &gt; &gt; &gt; &gt; After I tried with patch that seems added setting =
of it for xen:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href=3D"http://git.qemu.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D4=
54ae734f1d9f591345fa78" rel=3D"noreferrer" target=3D"_blank">http://git.qem=
u.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78</a><br>
&gt; &gt; &gt; &gt; &gt; 376435a8e74bb4edd<br>
&gt; &gt; &gt; &gt; &gt; Checking in libxl seems disabled by default and fr=
om some old xen post<br>
&gt; &gt; &gt; &gt; &gt; seems that O_DIRECT creates problems.<br>
&gt; &gt; &gt; &gt; &gt; I should try it enable direct-io-safe in domUs qco=
w2 disks?<br>
&gt; &gt; &gt; &gt; &gt; Added also Stefano Stabellini as cc.<br>
&gt; &gt; &gt; &gt; &gt; @Stefano Stabellini: What is the current know stat=
us and result of<br>
&gt; &gt; &gt; &gt; &gt; direct-io-safe?<br>
&gt; &gt;<br>
&gt; &gt; O_DIRECT should be entirely safe to use, at least on ide and qdis=
k. I<br>
&gt; &gt; haven&#39;t done the analysis on ahci emulation in qemu to know w=
hether that<br>
&gt; &gt; would be true for ahci disks, but that doesn&#39;t matter because=
 unplug is<br>
&gt; &gt; not implemented for ahci disks.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Sorry is the question are stupid by or my english =
is too bad or many<br>
&gt; &gt; &gt; &gt; &gt; post of latest years are confused and in same case=
s seems also<br>
&gt; &gt; &gt; &gt; &gt; contradictory about stability/integrity/performanc=
e using it or not.<br>
&gt; &gt; &gt; &gt; &gt; In particular seems crash with some kernels but I =
not understand<br>
&gt; &gt; exactly<br>
&gt; &gt; &gt; &gt; &gt; what versions and/or with which patches.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; @Paul Durrant: have you see my other mail when I w=
rote that based on<br>
&gt; &gt; my<br>
&gt; &gt; &gt; &gt; &gt; latest test with xen 4.6 without udev file windows=
 domUs with new pv<br>
&gt; &gt; &gt; &gt; &gt; driver don&#39;t boot and for still boot it correc=
tly I must readd udev<br>
&gt; &gt; &gt; &gt; &gt; file, can this cause unexpected case related to th=
is problem or is<br>
&gt; &gt; &gt; &gt; &gt; different?<br>
&gt; &gt; &gt; &gt; &gt; <a href=3D"http://lists.xen.org/archives/html/win-=
pv-devel/2015-" rel=3D"noreferrer" target=3D"_blank">http://lists.xen.org/a=
rchives/html/win-pv-devel/2015-</a><br>
&gt; &gt; 08/msg00033.html<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I&#39;m not sure why udev would be an issue here. The p=
roblem you have<br>
&gt; &gt; &gt; &gt; appears to be QEMU ignoring the request to unplug emula=
ted disks. I&#39;ve<br>
&gt; &gt; not<br>
&gt; &gt; &gt; &gt; seen this behaviour on my test box so I&#39;ll need to =
dig some more.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I notice you have 6 IDE channels? Are you using AHCI by any =
chance? If you<br>
&gt; &gt; are then it looks like QEMU is not honouring the unplug request..=
. that would<br>
&gt; &gt; be where the bug is. I&#39;ll try to repro myself.<br>
&gt; &gt;<br>
&gt; &gt; Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_pla=
tform.c:<br>
&gt; &gt;<br>
&gt; &gt; static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)<br>
&gt; &gt; {<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0/* We have to ignore passthrough devices */<br=
>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0if (pci_get_word(d-&gt;config + PCI_CLASS_DEVI=
CE) =3D=3D<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0PCI_CLASS_STORAGE_=
IDE<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&amp;&amp; strcmp(=
d-&gt;name, &quot;xen-pci-passthrough&quot;) !=3D 0) {<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pci_piix3_xen_ide_unplug(DEVICE(=
d));<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0}<br>
&gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt; the function specifically only unplugs IDE disks.<br>
&gt; &gt; I am not sure what to do about ahci unplug, given that we don&#39=
;t<br>
&gt; &gt; implement scsi disk unplug either. After all, if the goal is to u=
nplug<br>
&gt; &gt; the disk, why choose a faster emulated protocol?<br>
&gt;<br>
&gt; I think we should unplug the disk regardless of type, if we support co=
nfiguring disks of that type through libxl. The reason, in this case AFAIU,=
 for wanting ahci is to speed up Windows boot where initial driver load is =
still done through int13 and hence emulated disk.<br>
<br>
</div></div>I would be happy to take a patch which makes QEMU unplug all ki=
nds of<br>
disks, as long as is able to skip passed though devices (see comment in<br>
the code).</blockquote></div><br></div><div class=3D"gmail_extra">Faster bo=
ot not only on windows domUs but also on linux hvm domUs, for example if I =
remember good on fedora 21 with lxde with ahci take only 20% of total ide t=
est time.<br></div><div class=3D"gmail_extra">I tested ahci for months and =
seems strange I not saw unplug not working, on previous mail log where boot=
 correctly can you take a look if unplug it correctly? (should be with ahci=
 if I&#39;m not wrong)<br></div><div class=3D"gmail_extra">In any case any =
possible improvement/bugfix is appreciated.<br></div><div class=3D"gmail_ex=
tra">About direct-io-safe I tried today with qcow2 disk and dom0 insta-rebo=
ot on windows boot, dom0 kernel is 3.2 from official wheezy repository, not=
hing useful in dom0 and domU logs, I had not time to retry with full dom0 a=
nd serial on lan on dom0 but is needed I&#39;ll do when possible.<br></div>=
</div>

--001a11330e68b114a1051eef95bd--


--===============6796969339337913127==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6796969339337913127==--


From win-pv-devel-bounces@lists.xenproject.org Fri Sep 04 17:54:08 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 04 Sep 2015 17:54:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZXvBe-0005Zg-U7; Fri, 04 Sep 2015 17:54:06 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZXvBd-0005Zb-1K
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 17:54:05 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	81/35-01753-CBAD9E55; Fri, 04 Sep 2015 17:54:04 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441389241!41401461!1
X-Originating-IP: [209.85.214.196]
X-SpamReason: No, hits=2.1 required=7.0 tests=BIZ_TLD,HTML_30_40,
	HTML_MESSAGE,RCVD_BY_IP
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 26484 invoked from network); 4 Sep 2015 17:54:02 -0000
Received: from mail-ob0-f196.google.com (HELO mail-ob0-f196.google.com)
	(209.85.214.196)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 17:54:02 -0000
Received: by obcgo12 with SMTP id go12so2150749obc.1
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 04 Sep 2015 10:54:01 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:mime-version:in-reply-to:references:date
	:message-id:subject:from:to:cc:content-type;
	bh=R397kd9VaPRvOh7SpFEyteVAh2ARriYiAAgc74abmzw=;
	b=R72o+ItaJfg7wpPIZkzv9EqrpS2OUx3oIPAjav6aTdkIYS4cdMnIhGQAG7nyrI0wTK
	VaeMIRNtB1/OP1zzoqmWsIebfp/VtmOfAVr5AuQ34NIV8HlreO2fa2FHEo0FMt5UoHD3
	/2beOsdTwzIN9tXlgIVWquwYDckDJWLMWYte3rSYOgXv7OezGvxLsvPMTr5k23ZMiHHe
	8zbln82WvNLUeiQAYOwYOvEuA43l2BeSUyYjA/OJpUtmBD6LFWBskPTYAvFZ2LIZNWxF
	QIkXn8F2djHSg/d6jtWO5e/J1DpZ+9VkzrgJzrLslipB1MlBzsS2PLTz8prciUbFJZcR
	YsYw==
X-Gm-Message-State: ALoCoQmrzwltGLfTfAh7ximr4lUwQBZIXBvlf6Xg9CMM4CSP4jhEtHv+x1zyRp9bmfvytgqevY8z
MIME-Version: 1.0
X-Received: by 10.60.69.39 with SMTP id b7mr4357185oeu.51.1441389240969; Fri,
	04 Sep 2015 10:54:00 -0700 (PDT)
Received: by 10.202.129.147 with HTTP; Fri, 4 Sep 2015 10:54:00 -0700 (PDT)
X-Originating-IP: [95.233.12.243]
In-Reply-To: <alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>
	<55D6DD80.8080806@m2r.biz> <55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
Date: Fri, 4 Sep 2015 19:54:00 +0200
Message-ID: <CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
To: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6796969339337913127=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6796969339337913127==
Content-Type: multipart/alternative; boundary=001a11330e68b114a1051eef95bd

--001a11330e68b114a1051eef95bd
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

2015-09-04 18:31 GMT+02:00 Stefano Stabellini <
stefano.stabellini@eu.citrix.com>:

> On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > -----Original Message-----
> > > From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com]
> > > Sent: 04 September 2015 17:25
> > > To: Paul Durrant
> > > Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenpro=
ject.org;
> Stefano
> > > Stabellini
> > > Subject: RE: [win-pv-devel] Problems with xenvbd
> > >
> > > On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > > > -----Original Message-----
> > > > > From: win-pv-devel-bounces@lists.xenproject.org [mailto:
> win-pv-devel-
> > > > > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > > > > Sent: 02 September 2015 10:00
> > > > > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a;
> win-pv-devel@lists.xenproject.org
> > > > > Cc: Stefano Stabellini
> > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > > Sent: 02 September 2015 09:54
> > > > > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a;
> win-pv-devel@lists.xenproject.org
> > > > > > Cc: Stefano Stabellini
> > > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > >
> > > > > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > > > > >> -----Original Message-----
> > > > > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > > >> Sent: 21 August 2015 14:14
> > > > > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant;
> win-pv-devel@lists.xenproject.org
> > > > > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > > >>
> > > > > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > > > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > > > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > > > > >>>>>> -----Original Message----- From:
> > > > > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv=
-
> > > devel-
> > > > > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> > > Sent: 18
> > > > > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org
> > > Subject:
> > > > > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > > > > >>>>>>
> > > > > > >>>>>> Hi,
> > > > > > >>>>>>
> > > > > > >>>>>> I've been testing the current pvdrivers code in
> preparation for
> > > > > > >>>>>> creating upstream patches for my xeniface additions and =
I
> > > noticed
> > > > > > >>>>>> than xenvbd seems to be very unstable for me. I'm not
> sure if
> > > it's
> > > > > > >>>>>> a problem with xenvbd itself or my code because it seeme=
d
> to
> > > only
> > > > > > >>>>>> manifest when the full suite of our guest tools was
> installed
> > > along
> > > > > > >>>>>> with xenvbd. In short, most of the time the system crash=
ed
> > > with
> > > > > > >>>>>> kernel memory corruption in seemingly random processes
> > > shortly
> > > > > > >>>>>> after start. Driver Verifier didn't seem to catch
> anything. You
> > > can
> > > > > > >>>>>> see a log from one such crash in the attachment
> crash1.txt.
> > > > > > >>>>>>
> > > > > > >>>>>> Today I tried to perform some more tests but this time
> without
> > > our
> > > > > > >>>>>> guest tools (only pvdrivers and our shared libraries wer=
e
> > > > > > >>>>>> installed). To my surprise now Driver Verifier was
> crashing the
> > > > > > >>>>>> system every time in xenvbd (see crash2.txt). I don't
> know why
> > > it
> > > > > > >>>>>> didn't catch that previously... If adding some timeout t=
o
> the
> > > > > > >>>>>> offending wait doesn't break anything I'll try that to
> see if I can
> > > > > > >>>>>> reproduce the previous memory corruptions.
> > > > > > >>>>>>
> > > > > > >>>>> Those crashes do look odd. I'm on PTO for the next week
> but I'll
> > > > > have
> > > > > > >>>>> a look when I get back to the office. I did run verifier
> on all the
> > > > > > >>>>> drivers a week or so back (while running vbd plug/unplug
> tests)
> > > but
> > > > > > >>>>> there have been a couple of changes since then.
> > > > > > >>>>>
> > > > > > >>>>> Paul
> > > > > > >>>>>
> > > > > > >>>> No problem. I attached some more logs. The last one was
> during
> > > > > > system
> > > > > > >>>> shutdown, after that the OS failed to boot (probably
> corrupted
> > > > > > >>>> filesystem since the BSOD itself seemed to indicate that).
> I think
> > > > > every
> > > > > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet
> > > familiar
> > > > > > with
> > > > > > >>>> Xen PV device interfaces so not sure what that means.
> > > > > > >>>>
> > > > > > >>>> In the meantime I've run more tests on my modified xenifac=
e
> > > driver
> > > > > to
> > > > > > >>>> make sure it's not contributing to these issues but
> everything
> > > > > seemed
> > > > > > to
> > > > > > >>>> be fine there.
> > > > > > >>>>
> > > > > > >>>>
> > > > > > >>> I also had a disk corruption on windows 10 pro 64 bit with
> pv drivers
> > > > > > >>> build of 11 august but I'm not sure that is related to winp=
v
> drivers,
> > > > > > >>> on same domU I started testing also snapshot with qcow2 dis=
k
> > > overlay.
> > > > > > >>> For this case I don't have useful information because don't
> try to
> > > > > > >>> boot windows at all but if rehappen I'll try to take other
> useful
> > > > > > >>> information.
> > > > > > >> Happen another time but also this I was unable to understand
> what
> > > is
> > > > > > >> exactly the cause.
> > > > > > >> On windows reboot all seems was ok and did a clean shutdown
> but
> > > on
> > > > > > >> reboot seabios don't found bootable disk and qemu log don't
> show
> > > > > useful
> > > > > > >> informations.
> > > > > > >> qemu-img check show errors:
> > > > > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > > > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > > > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > > > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > > > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > > > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > > > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > > > > >>>
> > > > > > >>> 2 errors were found on the image.
> > > > > > >>> Data may be corrupted, or further writes to the image may
> corrupt
> > > it.
> > > > > > >>>
> > > > > > >>> 4 leaked clusters were found on the image.
> > > > > > >>> This means waste of disk space, but no harm to data.
> > > > > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > > > > compressed
> > > > > > >>> clusters
> > > > > > >>> Image end offset: 1850736640
> > > > > > >> I created it with:
> > > > > > >> /usr/lib/xen/bin/qemu-img create -o
> > > > > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2
> > > W10.disk1.cow-
> > > > > > sn1
> > > > > > >> and changed the xl domU configuration:
> > > > > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > > > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > > > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11
> august
> > > > > > >>
> > > > > > >> How I can know for sure if it is a winpv or qemu or other
> problem
> > > and
> > > > > > >> take useful information to report?
> > > > > > >>
> > > > > > >> Thanks for any reply and sorry for my bad english.
> > > > > > > This sounds very much like a lack of synchronization
> somewhere. I
> > > recall
> > > > > > seeing other problems of this ilk when someone was messing arou=
nd
> > > with
> > > > > > O_DIRECT for opening images. I wonder if we are missing a flush
> > > operation
> > > > > > on shutdown.
> > > > > > >
> > > > > > >    Paul
> > > > > > >
> > > > > > Thanks for reply.
> > > > > > I did a fast search but I not found O_DIRECT grepping in libxl,
> I found
> > > > > > it only in qemu code.
> > > > > > After I tried with patch that seems added setting of it for xen=
:
> > > > > >
> > > > >
> > > http://git.qemu.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591=
345fa78
> > > > > > 376435a8e74bb4edd
> > > > > > Checking in libxl seems disabled by default and from some old
> xen post
> > > > > > seems that O_DIRECT creates problems.
> > > > > > I should try it enable direct-io-safe in domUs qcow2 disks?
> > > > > > Added also Stefano Stabellini as cc.
> > > > > > @Stefano Stabellini: What is the current know status and result
> of
> > > > > > direct-io-safe?
> > >
> > > O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
> > > haven't done the analysis on ahci emulation in qemu to know whether
> that
> > > would be true for ahci disks, but that doesn't matter because unplug =
is
> > > not implemented for ahci disks.
> > >
> > >
> > > > > > Sorry is the question are stupid by or my english is too bad or
> many
> > > > > > post of latest years are confused and in same cases seems also
> > > > > > contradictory about stability/integrity/performance using it or
> not.
> > > > > > In particular seems crash with some kernels but I not understan=
d
> > > exactly
> > > > > > what versions and/or with which patches.
> > > > > >
> > > > > > @Paul Durrant: have you see my other mail when I wrote that
> based on
> > > my
> > > > > > latest test with xen 4.6 without udev file windows domUs with
> new pv
> > > > > > driver don't boot and for still boot it correctly I must readd
> udev
> > > > > > file, can this cause unexpected case related to this problem or
> is
> > > > > > different?
> > > > > > http://lists.xen.org/archives/html/win-pv-devel/2015-
> > > 08/msg00033.html
> > > > > >
> > > > >
> > > > > I'm not sure why udev would be an issue here. The problem you hav=
e
> > > > > appears to be QEMU ignoring the request to unplug emulated disks.
> I've
> > > not
> > > > > seen this behaviour on my test box so I'll need to dig some more.
> > > > >
> > > >
> > > > I notice you have 6 IDE channels? Are you using AHCI by any chance?
> If you
> > > are then it looks like QEMU is not honouring the unplug request...
> that would
> > > be where the bug is. I'll try to repro myself.
> > >
> > > Unplug on ahci is actually unimplemented, see
> hw/i386/xen/xen_platform.c:
> > >
> > > static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
> > > {
> > >     /* We have to ignore passthrough devices */
> > >     if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
> > >             PCI_CLASS_STORAGE_IDE
> > >             && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
> > >         pci_piix3_xen_ide_unplug(DEVICE(d));
> > >     }
> > > }
> > >
> > > the function specifically only unplugs IDE disks.
> > > I am not sure what to do about ahci unplug, given that we don't
> > > implement scsi disk unplug either. After all, if the goal is to unplu=
g
> > > the disk, why choose a faster emulated protocol?
> >
> > I think we should unplug the disk regardless of type, if we support
> configuring disks of that type through libxl. The reason, in this case
> AFAIU, for wanting ahci is to speed up Windows boot where initial driver
> load is still done through int13 and hence emulated disk.
>
> I would be happy to take a patch which makes QEMU unplug all kinds of
> disks, as long as is able to skip passed though devices (see comment in
> the code).


Faster boot not only on windows domUs but also on linux hvm domUs, for
example if I remember good on fedora 21 with lxde with ahci take only 20%
of total ide test time.
I tested ahci for months and seems strange I not saw unplug not working, on
previous mail log where boot correctly can you take a look if unplug it
correctly? (should be with ahci if I'm not wrong)
In any case any possible improvement/bugfix is appreciated.
About direct-io-safe I tried today with qcow2 disk and dom0 insta-reboot on
windows boot, dom0 kernel is 3.2 from official wheezy repository, nothing
useful in dom0 and domU logs, I had not time to retry with full dom0 and
serial on lan on dom0 but is needed I'll do when possible.

--001a11330e68b114a1051eef95bd
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><br><div class=3D"gmail_extra"><br><div class=3D"gmail_quo=
te">2015-09-04 18:31 GMT+02:00 Stefano Stabellini <span dir=3D"ltr">&lt;<a =
href=3D"mailto:stefano.stabellini@eu.citrix.com" target=3D"_blank">stefano.=
stabellini@eu.citrix.com</a>&gt;</span>:<br><blockquote class=3D"gmail_quot=
e" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">=
<div class=3D"HOEnZb"><div class=3D"h5">On Fri, 4 Sep 2015, Paul Durrant wr=
ote:<br>
&gt; &gt; -----Original Message-----<br>
&gt; &gt; From: Stefano Stabellini [mailto:<a href=3D"mailto:stefano.stabel=
lini@eu.citrix.com">stefano.stabellini@eu.citrix.com</a>]<br>
&gt; &gt; Sent: 04 September 2015 17:25<br>
&gt; &gt; To: Paul Durrant<br>
&gt; &gt; Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; <a href=3D"mailto:win=
-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a>; Stef=
ano<br>
&gt; &gt; Stabellini<br>
&gt; &gt; Subject: RE: [win-pv-devel] Problems with xenvbd<br>
&gt; &gt;<br>
&gt; &gt; On Fri, 4 Sep 2015, Paul Durrant wrote:<br>
&gt; &gt; &gt; &gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; From: <a href=3D"mailto:win-pv-devel-bounces@lists.xenp=
roject.org">win-pv-devel-bounces@lists.xenproject.org</a> [mailto:<a href=
=3D"mailto:win-pv-devel-">win-pv-devel-</a><br>
&gt; &gt; &gt; &gt; <a href=3D"mailto:bounces@lists.xenproject.org">bounces=
@lists.xenproject.org</a>] On Behalf Of Paul Durrant<br>
&gt; &gt; &gt; &gt; Sent: 02 September 2015 10:00<br>
&gt; &gt; &gt; &gt; To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; <a href=3D"=
mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org=
</a><br>
&gt; &gt; &gt; &gt; Cc: Stefano Stabellini<br>
&gt; &gt; &gt; &gt; Subject: Re: [win-pv-devel] Problems with xenvbd<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; &gt; From: Fabio Fantoni [mailto:<a href=3D"mailto:fabi=
o.fantoni@m2r.biz">fabio.fantoni@m2r.biz</a>]<br>
&gt; &gt; &gt; &gt; &gt; Sent: 02 September 2015 09:54<br>
&gt; &gt; &gt; &gt; &gt; To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; <a href=
=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject=
.org</a><br>
&gt; &gt; &gt; &gt; &gt; Cc: Stefano Stabellini<br>
&gt; &gt; &gt; &gt; &gt; Subject: Re: [win-pv-devel] Problems with xenvbd<b=
r>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Il 01/09/2015 16:41, Paul Durrant ha scritto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; -----Original Message-----<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; From: Fabio Fantoni [mailto:<a href=3D"ma=
ilto:fabio.fantoni@m2r.biz">fabio.fantoni@m2r.biz</a>]<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Sent: 21 August 2015 14:14<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant=
; <a href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.x=
enproject.org</a><br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Subject: Re: [win-pv-devel] Problems with=
 xenvbd<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Il 21/08/2015 10:12, Fabio Fantoni ha scr=
itto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=
=C5=82a ha scritto:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; On 2015-08-19 23:25, Paul Durrant=
 wrote:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; -----Original Message----=
- From:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href=3D"mailto:win-pv-=
devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.o=
rg</a> [mailto:<a href=3D"mailto:win-pv-">win-pv-</a><br>
&gt; &gt; devel-<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; <a href=3D"mailto:bounces=
@lists.xenproject.org">bounces@lists.xenproject.org</a>] On Behalf Of Rafal=
 Wojdyla<br>
&gt; &gt; Sent: 18<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; August 2015 14:33 To: <a =
href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenpro=
ject.org</a><br>
&gt; &gt; Subject:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; [win-pv-devel] Problems w=
ith xenvbd<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; Hi,<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; I&#39;ve been testing the=
 current pvdrivers code in preparation for<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; creating upstream patches=
 for my xeniface additions and I<br>
&gt; &gt; noticed<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; than xenvbd seems to be v=
ery unstable for me. I&#39;m not sure if<br>
&gt; &gt; it&#39;s<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; a problem with xenvbd its=
elf or my code because it seemed to<br>
&gt; &gt; only<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; manifest when the full su=
ite of our guest tools was installed<br>
&gt; &gt; along<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; with xenvbd. In short, mo=
st of the time the system crashed<br>
&gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; kernel memory corruption =
in seemingly random processes<br>
&gt; &gt; shortly<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; after start. Driver Verif=
ier didn&#39;t seem to catch anything. You<br>
&gt; &gt; can<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; see a log from one such c=
rash in the attachment crash1.txt.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; Today I tried to perform =
some more tests but this time without<br>
&gt; &gt; our<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; guest tools (only pvdrive=
rs and our shared libraries were<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; installed). To my surpris=
e now Driver Verifier was crashing the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; system every time in xenv=
bd (see crash2.txt). I don&#39;t know why<br>
&gt; &gt; it<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; didn&#39;t catch that pre=
viously... If adding some timeout to the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; offending wait doesn&#39;=
t break anything I&#39;ll try that to see if I can<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt; reproduce the previous me=
mory corruptions.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; Those crashes do look odd. I&=
#39;m on PTO for the next week but I&#39;ll<br>
&gt; &gt; &gt; &gt; have<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; a look when I get back to the=
 office. I did run verifier on all the<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; drivers a week or so back (wh=
ile running vbd plug/unplug tests)<br>
&gt; &gt; but<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; there have been a couple of c=
hanges since then.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt; Paul<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; No problem. I attached some more =
logs. The last one was during<br>
&gt; &gt; &gt; &gt; &gt; system<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; shutdown, after that the OS faile=
d to boot (probably corrupted<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; filesystem since the BSOD itself =
seemed to indicate that). I think<br>
&gt; &gt; &gt; &gt; every<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; time there is a BLKIF_RSP_ERROR s=
omewhere but I&#39;m not yet<br>
&gt; &gt; familiar<br>
&gt; &gt; &gt; &gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; Xen PV device interfaces so not s=
ure what that means.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; In the meantime I&#39;ve run more=
 tests on my modified xeniface<br>
&gt; &gt; driver<br>
&gt; &gt; &gt; &gt; to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; make sure it&#39;s not contributi=
ng to these issues but everything<br>
&gt; &gt; &gt; &gt; seemed<br>
&gt; &gt; &gt; &gt; &gt; to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt; be fine there.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; I also had a disk corruption on windo=
ws 10 pro 64 bit with pv drivers<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; build of 11 august but I&#39;m not su=
re that is related to winpv drivers,<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; on same domU I started testing also s=
napshot with qcow2 disk<br>
&gt; &gt; overlay.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; For this case I don&#39;t have useful=
 information because don&#39;t try to<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; boot windows at all but if rehappen I=
&#39;ll try to take other useful<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; information.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Happen another time but also this I was u=
nable to understand what<br>
&gt; &gt; is<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; exactly the cause.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; On windows reboot all seems was ok and di=
d a clean shutdown but<br>
&gt; &gt; on<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; reboot seabios don&#39;t found bootable d=
isk and qemu log don&#39;t show<br>
&gt; &gt; &gt; &gt; useful<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; informations.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; qemu-img check show errors:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; /usr/lib/xen/bin/qemu-img check W10.d=
isk1.cow-sn1<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; ERROR cluster 143 refcount=3D1 refere=
nce=3D2<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 1077 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; ERROR cluster 1221 refcount=3D1 refer=
ence=3D2<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 2703 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 5212 refcount=3D1 refe=
rence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Leaked cluster 13375 refcount=3D1 ref=
erence=3D0<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 2 errors were found on the image.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Data may be corrupted, or further wri=
tes to the image may corrupt<br>
&gt; &gt; it.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 4 leaked clusters were found on the i=
mage.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; This means waste of disk space, but n=
o harm to data.<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; 27853/819200 =3D 3.40% allocated, 22.=
65% fragmented, 0.00%<br>
&gt; &gt; &gt; &gt; compressed<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; clusters<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;&gt; Image end offset: 1850736640<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; I created it with:<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; /usr/lib/xen/bin/qemu-img create -o<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; backing_file=3DW10.disk1.xm,backing_fmt=
=3Draw -f qcow2<br>
&gt; &gt; W10.disk1.cow-<br>
&gt; &gt; &gt; &gt; &gt; sn1<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; and changed the xl domU configuration:<br=
>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; disk=3D[&#39;/mnt/vm2/W10.disk1.cow-sn1,q=
cow2,hda,rw&#39;,...<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Dom0 is with xen 4.6-rc1 and qemu 2.4.0<b=
r>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; DomU is windows 10 pro 64 bit with pv dri=
vers build of 11 august<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; How I can know for sure if it is a winpv =
or qemu or other problem<br>
&gt; &gt; and<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; take useful information to report?<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;&gt; Thanks for any reply and sorry for my bad=
 english.<br>
&gt; &gt; &gt; &gt; &gt; &gt; This sounds very much like a lack of synchron=
ization somewhere. I<br>
&gt; &gt; recall<br>
&gt; &gt; &gt; &gt; &gt; seeing other problems of this ilk when someone was=
 messing around<br>
&gt; &gt; with<br>
&gt; &gt; &gt; &gt; &gt; O_DIRECT for opening images. I wonder if we are mi=
ssing a flush<br>
&gt; &gt; operation<br>
&gt; &gt; &gt; &gt; &gt; on shutdown.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;=C2=A0 =C2=A0 Paul<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Thanks for reply.<br>
&gt; &gt; &gt; &gt; &gt; I did a fast search but I not found O_DIRECT grepp=
ing in libxl, I found<br>
&gt; &gt; &gt; &gt; &gt; it only in qemu code.<br>
&gt; &gt; &gt; &gt; &gt; After I tried with patch that seems added setting =
of it for xen:<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; <a href=3D"http://git.qemu.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D4=
54ae734f1d9f591345fa78" rel=3D"noreferrer" target=3D"_blank">http://git.qem=
u.org/?p=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78</a><br>
&gt; &gt; &gt; &gt; &gt; 376435a8e74bb4edd<br>
&gt; &gt; &gt; &gt; &gt; Checking in libxl seems disabled by default and fr=
om some old xen post<br>
&gt; &gt; &gt; &gt; &gt; seems that O_DIRECT creates problems.<br>
&gt; &gt; &gt; &gt; &gt; I should try it enable direct-io-safe in domUs qco=
w2 disks?<br>
&gt; &gt; &gt; &gt; &gt; Added also Stefano Stabellini as cc.<br>
&gt; &gt; &gt; &gt; &gt; @Stefano Stabellini: What is the current know stat=
us and result of<br>
&gt; &gt; &gt; &gt; &gt; direct-io-safe?<br>
&gt; &gt;<br>
&gt; &gt; O_DIRECT should be entirely safe to use, at least on ide and qdis=
k. I<br>
&gt; &gt; haven&#39;t done the analysis on ahci emulation in qemu to know w=
hether that<br>
&gt; &gt; would be true for ahci disks, but that doesn&#39;t matter because=
 unplug is<br>
&gt; &gt; not implemented for ahci disks.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Sorry is the question are stupid by or my english =
is too bad or many<br>
&gt; &gt; &gt; &gt; &gt; post of latest years are confused and in same case=
s seems also<br>
&gt; &gt; &gt; &gt; &gt; contradictory about stability/integrity/performanc=
e using it or not.<br>
&gt; &gt; &gt; &gt; &gt; In particular seems crash with some kernels but I =
not understand<br>
&gt; &gt; exactly<br>
&gt; &gt; &gt; &gt; &gt; what versions and/or with which patches.<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; @Paul Durrant: have you see my other mail when I w=
rote that based on<br>
&gt; &gt; my<br>
&gt; &gt; &gt; &gt; &gt; latest test with xen 4.6 without udev file windows=
 domUs with new pv<br>
&gt; &gt; &gt; &gt; &gt; driver don&#39;t boot and for still boot it correc=
tly I must readd udev<br>
&gt; &gt; &gt; &gt; &gt; file, can this cause unexpected case related to th=
is problem or is<br>
&gt; &gt; &gt; &gt; &gt; different?<br>
&gt; &gt; &gt; &gt; &gt; <a href=3D"http://lists.xen.org/archives/html/win-=
pv-devel/2015-" rel=3D"noreferrer" target=3D"_blank">http://lists.xen.org/a=
rchives/html/win-pv-devel/2015-</a><br>
&gt; &gt; 08/msg00033.html<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I&#39;m not sure why udev would be an issue here. The p=
roblem you have<br>
&gt; &gt; &gt; &gt; appears to be QEMU ignoring the request to unplug emula=
ted disks. I&#39;ve<br>
&gt; &gt; not<br>
&gt; &gt; &gt; &gt; seen this behaviour on my test box so I&#39;ll need to =
dig some more.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I notice you have 6 IDE channels? Are you using AHCI by any =
chance? If you<br>
&gt; &gt; are then it looks like QEMU is not honouring the unplug request..=
. that would<br>
&gt; &gt; be where the bug is. I&#39;ll try to repro myself.<br>
&gt; &gt;<br>
&gt; &gt; Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_pla=
tform.c:<br>
&gt; &gt;<br>
&gt; &gt; static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)<br>
&gt; &gt; {<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0/* We have to ignore passthrough devices */<br=
>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0if (pci_get_word(d-&gt;config + PCI_CLASS_DEVI=
CE) =3D=3D<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0PCI_CLASS_STORAGE_=
IDE<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&amp;&amp; strcmp(=
d-&gt;name, &quot;xen-pci-passthrough&quot;) !=3D 0) {<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0pci_piix3_xen_ide_unplug(DEVICE(=
d));<br>
&gt; &gt;=C2=A0 =C2=A0 =C2=A0}<br>
&gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt; the function specifically only unplugs IDE disks.<br>
&gt; &gt; I am not sure what to do about ahci unplug, given that we don&#39=
;t<br>
&gt; &gt; implement scsi disk unplug either. After all, if the goal is to u=
nplug<br>
&gt; &gt; the disk, why choose a faster emulated protocol?<br>
&gt;<br>
&gt; I think we should unplug the disk regardless of type, if we support co=
nfiguring disks of that type through libxl. The reason, in this case AFAIU,=
 for wanting ahci is to speed up Windows boot where initial driver load is =
still done through int13 and hence emulated disk.<br>
<br>
</div></div>I would be happy to take a patch which makes QEMU unplug all ki=
nds of<br>
disks, as long as is able to skip passed though devices (see comment in<br>
the code).</blockquote></div><br></div><div class=3D"gmail_extra">Faster bo=
ot not only on windows domUs but also on linux hvm domUs, for example if I =
remember good on fedora 21 with lxde with ahci take only 20% of total ide t=
est time.<br></div><div class=3D"gmail_extra">I tested ahci for months and =
seems strange I not saw unplug not working, on previous mail log where boot=
 correctly can you take a look if unplug it correctly? (should be with ahci=
 if I&#39;m not wrong)<br></div><div class=3D"gmail_extra">In any case any =
possible improvement/bugfix is appreciated.<br></div><div class=3D"gmail_ex=
tra">About direct-io-safe I tried today with qcow2 disk and dom0 insta-rebo=
ot on windows boot, dom0 kernel is 3.2 from official wheezy repository, not=
hing useful in dom0 and domU logs, I had not time to retry with full dom0 a=
nd serial on lan on dom0 but is needed I&#39;ll do when possible.<br></div>=
</div>

--001a11330e68b114a1051eef95bd--


--===============6796969339337913127==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6796969339337913127==--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 09:26:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 09:26:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYshH-0004xu-Pi; Mon, 07 Sep 2015 09:26:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYshG-0004xp-FB
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 09:26:42 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	7E/5E-19110-1585DE55; Mon, 07 Sep 2015 09:26:41 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441618001!47355249!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6630 invoked from network); 7 Sep 2015 09:26:41 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 09:26:41 -0000
X-IronPort-AV: E=Sophos;i="5.17,484,1437436800"; 
   d="scan'208";a="2493319"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q
Date: Mon, 7 Sep 2015 09:26:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>	<55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
In-Reply-To: <CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Fabio,

  Can you confirm that you don't see any problem if you use standard IDE emulated disks? I certainly don't.

  Paul
_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 09:26:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 09:26:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYshH-0004xu-Pi; Mon, 07 Sep 2015 09:26:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYshG-0004xp-FB
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 09:26:42 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	7E/5E-19110-1585DE55; Mon, 07 Sep 2015 09:26:41 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441618001!47355249!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6630 invoked from network); 7 Sep 2015 09:26:41 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 09:26:41 -0000
X-IronPort-AV: E=Sophos;i="5.17,484,1437436800"; 
   d="scan'208";a="2493319"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q
Date: Mon, 7 Sep 2015 09:26:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com>	<55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
In-Reply-To: <CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Fabio,

  Can you confirm that you don't see any problem if you use standard IDE emulated disks? I certainly don't.

  Paul
_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:33:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:33:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtjy-0001ej-P6; Mon, 07 Sep 2015 10:33:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZYtjw-0001ee-7Z
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 10:33:33 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	6A/18-03763-BF76DE55; Mon, 07 Sep 2015 10:33:31 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441622010!41942194!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23335 invoked from network); 7 Sep 2015 10:33:30 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 10:33:30 -0000
Received: by wicgb1 with SMTP id gb1so40627528wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 07 Sep 2015 03:33:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=ngD/5pUrSj20KHovhemmDhLVo2Ak1sNeKemg/MVoarQ=;
	b=lPmOZ2PRFKgtQAil1YXlrypEARrfAT3uZ/PnyYxSrKp93t/ixXQMt9HRzjJTP0P0gC
	u7X0lYv21mn3xmJfuXOFe+odLXbmuc5kaXReLNdyLgNaxqTxhTw/P8lwBVq1g2euXoIA
	Negm0j/12iWe6oX1bh6FcgFVqHOzV+3B2JVuM+JtYKBqiPIYbw5kX6wDhXRBGlw83UsA
	oeGSzRbo3lV3aiSFOf/DmBvID5ndjZ9LWevNoevLfpDIruX++oMEioq+uyR/mFze3tbX
	7de15rwEuKPhx/57Tc/7t3fCCHLOuoKYlGcW5hPiZh/TKQmYeROUo1dqEc3BkZ8FKC08
	SfGQ==
X-Gm-Message-State: ALoCoQmnrHOssiSTX/UXfjPbyTUnHGm6lrnZTWYZ/W8lIWvgiW+H1vCgqFjajyScu3N7oVlgyFIO
X-Received: by 10.194.82.37 with SMTP id f5mr37005733wjy.36.1441622009786;
	Mon, 07 Sep 2015 03:33:29 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	mc18sm19404294wic.23.2015.09.07.03.33.20
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 07 Sep 2015 03:33:28 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55ED67EF.20008@m2r.biz>
Date: Mon, 7 Sep 2015 12:33:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------000206070401040004060301"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------000206070401040004060301
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Il 07/09/2015 11:26, Paul Durrant ha scritto:
> Fabio,
>
>    Can you confirm that you don't see any problem if you use standard IDE emulated disks? I certainly don't.
>
>    Paul
WIth ide instead ahci was with same results but about udev problem now 
seems I found the cause, seems the dom0 kernel.
With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy 
repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64 
version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
Initially new pv drivers was with network not working with kernel <3.14 
but after seems was solved (I don't know the exactly commit) but seems 
that xen without udev file a newer kernel is still needed.
With 3.16 kernel I had other problems instead, for example with 
balloning (even if should not be used).
With second test with kernel 3.16 I tried to remove a workaround of 
balloning problem (dom0_mem=2G,max:3G in grub.cfg instead 
dom0_mem=2G,max:2G), I nomore saw kern.log spam but W7 domU crashed at boot.
Another strange things is even if with trace enabled don't show pv 
drivers debug lines with 3.16 kernel (on older tests with 3.16 did if I 
remember good)
In attachment the windows minidump.
I'm going crazy with these too many problems and haven't time to do all 
useful tests :(
Can you advice me about more useful tests for try to found/solve these 
problems?

Thanks for any reply and sorry for my bad english.

--------------000206070401040004060301
Content-Type: application/octet-stream;
 name="090715-21044-01.dmp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="090715-21044-01.dmp"

UEFHRURVNjQPAAAAsR0AAACA9BIAAAAAePLMAgD4//8wV8YCAPj//yB0xAIA+P//ZIYAAAIA
AAA7AAAAUEFHRQUAAMAAAAAAxaeoAgD4//8AbOgBgPj//wAAAAAAAAAAUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0XwAMECAPj//1BBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAIAfAAAQACsAKwBTACsAGACCAgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGToAYD4//87AAAA
AAAAAAUAAMAAAAAAHGO+AgD4//84Y+gBgPj//wAAAAAAAAAAAOChAgD4//8AAAAAAAAAAMWn
qAIA+P//AGzoAYD4//8AAAAAAAAAADhl6AGA+P//UxupAgD4//9oWsoCAPj//0AXqQIA+P//
AAAAAAAAAADAKKkCAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAwAAgAEAAAAAAAAAAAAAAMAoqQIA+P//AAAAAFBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0UEAAAA
UEFHRbAaBAAAAAAA4IvQgFTp0AFQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRYAukQsAAAAA/wwAAFBB
R0UBAAAAEAEAAAAAAABQAEdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0UAAQAAAAAEAPz/AwBIAwAA
AA8AAIAgAADQIAAAuCEAALhuAACgcwAASHgAAAAQAACIiwAAdwAAAHjOAACwJwAAAAAAAP//
//84Y+gBgPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASIgAAEADAAAo9gAA
EAAAAAEAAABQAAAAAAAAAAAAAAAAAAAAAAAAAHh3BQAAAAAAdh4AAAAAAAAAAAAAAAAAAAAA
AAAAAAAA/pcBAAAAAADolwEAAAAAAHD+HQAAAAAABAAAAAAAAAAYABgAAAAAAAAAAAAAAAAA
YwByAGEAcwBoAGQAbQBwAC4AcwB5AHMAAABDAYD4//8A4EMBgPj//xgAGAAAAAAAAAAAAAAA
AABkAHUAbQBwAF8AcABjAGkAaQBkAGUAeAAA4EMBgPj//wCgRAGA+P//GAAYAAAAAAAAAAAA
AAAAAGQAdQBtAHAAXwBtAHMAYQBoAGMAaQAuAACgRAGA+P//AFBFAYD4//8YABgAAAAAAAAA
AAAAAAAAZAB1AG0AcABfAGQAdQBtAHAAZgB2AGUAAFBFAYD4//8AgEYBgPj//4AfAAAAAAAA
YNA+A4D6//8AAAAAAAAAAMD8wQIA+P//AAAAAAAAAACwfegBgPj//wAAAAAAAAAAAAAAAAAA
AAAxAAWAAAAAABMJD/3+BwAAAID0EgAAAAD4BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA8A///wAAAAAABAAAAAAAAAAAAAAAAH8AAJAOBAD4//8AAAAAAAD/D4CQ
DgQA+P//QAAAAIAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAA8AEACAHwAAEAArACsAUwArABgAggIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBk6AGA+P//OwAAAAAAAAAFAADAAAAAABxjvgIA+P//
OGPoAYD4//8AAAAAAAAAAADgoQIA+P//AAAAAAAAAADFp6gCAPj//wBs6AGA+P//AAAAAAAA
AAA4ZegBgPj//1MbqQIA+P//aFrKAgD4//9AF6kCAPj//wAAAAAAAAAAwCipAgD4//8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAU0CAAAAAAAAAAAAAAAAAAAAAAAA
UG9vTAACAAAgnLwCAPj//+CQvAIA+P//4D7BAgD4//+APsECAPj//z4AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTBAAAAAgnLwC
APj//+CQvAIA+P//oCfBAgD4//9AJ8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTCAAAAAgnLwCAPj//+CQvAIA+P//
ACjBAgD4//+gJ8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTDAAAAAgnLwCAPj//+CQvAIA+P//YCjBAgD4//8AKMEC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTEAAAAAgnLwCAPj//+CQvAIA+P//wCjBAgD4//9gKMECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTFAA
AAAgnLwCAPj//+CQvAIA+P//ICnBAgD4///AKMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTGAAAAAgnLwCAPj//+CQ
vAIA+P//gCnBAgD4//8gKcECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTHAAAAAgnLwCAPj//+CQvAIA+P//4CnBAgD4
//+AKcECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTIAAAAAgnLwCAPj//+CQvAIA+P//QCrBAgD4///gKcECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTJAAAAAgnLwCAPj//+CQvAIA+P//oCrBAgD4//9AKsECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTKAAAAAgnLwC
APj//+CQvAIA+P//ACvBAgD4//+gKsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTLAAAAAgnLwCAPj//+CQvAIA+P//
YCvBAgD4//8AK8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTMAAAAAgnLwCAPj//+CQvAIA+P//wCvBAgD4//9gK8EC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTNAAAAAgnLwCAPj//+CQvAIA+P//ICzBAgD4///AK8ECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTOAA
AAAgnLwCAPj//+CQvAIA+P//gCzBAgD4//8gLMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTPAAAAAgnLwCAPj//+CQ
vAIA+P//4CzBAgD4//+ALMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTAABAAAgnLwCAPj//+CQvAIA+P//QC3BAgD4
///gLMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTBABAAAgnLwCAPj//+CQvAIA+P//oC3BAgD4//9ALcECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTCABAAAgnLwCAPj//+CQvAIA+P//AC7BAgD4//+gLcECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTDABAAAgnLwC
APj//+CQvAIA+P//YC7BAgD4//8ALsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTEABAAAgnLwCAPj//+CQvAIA+P//
wC7BAgD4//9gLsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTFABAAAgnLwCAPj//+CQvAIA+P//IC/BAgD4///ALsEC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTGABAAAgnLwCAPj//+CQvAIA+P//gC/BAgD4//8gL8ECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTHAB
AAAgnLwCAPj//+CQvAIA+P//4C/BAgD4//+AL8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTIABAAAgnLwCAPj//+CQ
vAIA+P//QDDBAgD4///gL8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTJABAAAgnLwCAPj//+CQvAIA+P//oDDBAgD4
//9AMMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTKABAAAgnLwCAPj//+CQvAIA+P//ADHBAgD4//+gMMECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTLABAAAgnLwCAPj//+CQvAIA+P//YDHBAgD4//8AMcECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTMABAAAgnLwC
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
AAAAAAAAAAAQs0EDgPr//xCzQQOA+v//4MS2HAAAAAAAAAAAAAAAAKhEwQIA+P//qETBAgD4
//9AJrkc/////wAAAAAAAAAACDErAYD4//8IMSsBgPj//6DnEQwAAAAAAAAAAAAAAADoRMEC
APj//+hEwQIA+P//oIxTB/////8AAAAAAAAAAAhFwQIA+P//CEXBAgD4//9gSsAc/////wAA
AAAAAAAAKEXBAgD4//8oRcECAPj//8Crwhz/////AAAAAAAAAABIRcECAPj//0hFwQIA+P//
IA3FHP////8AAAAAAAAAAPD8dQGA+v//kBY5A4D6//+AbsccAAAAAAAAAAAAAAAAiEXBAgD4
//+IRcECAPj//4Bcvwn/////AAAAAAAAAACoRcECAPj//6hFwQIA+P//M43BCf////8AAAAA
AAAAAMhFwQIA+P//yEXBAgD4//+gks4c/////wAAAAAAAAAA6EXBAgD4///oRcECAPj//wD0
0Bz/////AAAAAAAAAAAIRsECAPj//whGwQIA+P//YFXTHP////8AAAAAAAAAAEANOwOA+v//
QA07A4D6///AttUcAAAAAAAAAAAAAAAASEbBAgD4//9IRsECAPj//4AIzQn/////AAAAAAAA
AABoRsECAPj//2hGwQIA+P//yOrPCf////8AAAAAAAAAAIhGwQIA+P//iEbBAgD4//+AfnIH
/////wAAAAAAAAAAIJchA4D6//8glyEDgPr//6CATTIAAAAAAAAAAAAAAADQbXcBgPr//9Bt
dwGA+v//QA04DAAAAAAAAAAAAAAAAOhGwQIA+P//6EbBAgD4//+QXNkJ/////wAAAAAAAAAA
CEfBAgD4//8IR8ECAPj//8CkVDL/////AAAAAAAAAABwNA4DgPr//3A0DgOA+v//QMKZaggA
AAAAAAAAAAAAAEhHwQIA+P//SEfBAgD4//9AC4AH/////wAAAAAAAAAAaEfBAgD4//9oR8EC
APj//8j14gn/////AAAAAAAAAACIR8ECAPj//4hHwQIA+P//gPXkCf////8AAAAAAAAAAKhH
wQIA+P//qEfBAgD4///g6ocH/////wAAAAAAAAAAyEfBAgD4///IR8ECAPj//0BMigf/////
AAAAAAAAAADoR8ECAPj//+hHwQIA+P//oK2MB/////8AAAAAAAAAAAhIwQIA+P//CEjBAgD4
//8AD48H/////wAAAAAAAAAAkAEiA4D6//+QASIDgPr//0BlXh8AAAAAAAAAAAAAAABwqnMC
gPr//yDJwwIA+P//AN2DJgAAAAAAAAAAAAAAAGhIwQIA+P//aEjBAgD4///g024y/////wAA
AAAAAAAAiEjBAgD4//+ISMECAPj//wDZlwf/////AAAAAAAAAACoSMECAPj//6hIwQIA+P//
4PWaB/////8AAAAAAAAAAMhIwQIA+P//yEjBAgD4///pGP0J/////wAAAAAAAAAA6EjBAgD4
///oSMECAPj//2BZeDL/////AAAAAAAAAAAIScECAPj//whJwQIA+P//wLp6Mv////8AAAAA
AAAAAJjy4AKA+v//mGLgAoD6//8gHH0yAAAAAAAAAAAAAAAASEnBAgD4//9IScECAPj//4B9
fzL/////AAAAAAAAAABoScECAPj//2hJwQIA+P//4N6BMv////8AAAAAAAAAAIAQSgOA+v//
gBBKA4D6///AimwMAAAAAAAAAAAAAAAAqEnBAgD4//+oScECAPj//6ChhjL/////AAAAAAAA
AADIScECAPj//8hJwQIA+P//AAOJMv////8AAAAAAAAAADDMPgOA+v//MMw+A4D6//9gZIsy
AAAAAAAAAAAAAAAACErBAgD4//8ISsECAPj//+vkFAr/////AAAAAAAAAAAoSsECAPj//yhK
wQIA+P//gH5gCv////8AAAAAAAAAAEhKwQIA+P//SErBAgD4//8I3LkH/////wAAAAAAAAAA
MMbJAgD4//8wxskCAPj//2D0SiQAAAAAAAAAAAAAAACISsECAPj//4hKwQIA+P//gBYeCv//
//8AAAAAAAAAAPBGfgGA+v//8EZ+AYD6//8gt08kAAAAAAAAAAAAAAAAwOfJAgD4//8g2cMC
APj//4BYhAwAAAAAAAAAAAAAAADoSsECAPj//+hKwQIA+P//iLslCv////8AAAAAAAAAAAhL
wQIA+P//CEvBAgD4//89dSkK/////wAAAAAAAAAAKEvBAgD4//8oS8ECAPj//2B6Kgr/////
AAAAAAAAAAC4MSsBgPj//2A3TwGA+P//gJOlMgAAAAAAAAAAAAAAAECiWAGA+P//cKFYAYD4
///g9KcyAAAAAAAAAAAAAAAAiEvBAgD4//+IS8ECAPj//0BWqjL/////AAAAAAAAAACoS8EC
APj//6hLwQIA+P//4BbUB/////8AAAAAAAAAABA4TwGA+P//4MfDAgD4//8AefoOAAAAAAAA
AAAAAAAA6EvBAgD4///oS8ECAPj//6iaOAr/////AAAAAAAAAACgpGgDgPj//6CkaAOA+P//
IKyPKwAAAAAAAAAAAAAAAChMwQIA+P//KEzBAgD4//8gPbYy/////wAAAAAAAAAASEzBAgD4
//9ITMECAPj//4CeuDL/////AAAAAAAAAAAwTN0CgPr//zBM3QKA+v//YCqVKwAAAAAAAAAA
AAAAAIhMwQIA+P//iEzBAgD4//9WckQK/////wAAAAAAAAAAqEzBAgD4//+oTMECAPj//yAk
SAr/////AAAAAAAAAADITMECAPj//8hMwQIA+P//ACTCMv////8AAAAAAAAAADD8bgGA+v//
QFFBA4D6//+gqq0MAAAAAAAAAAAAAAAAmJKOAoD6//9AYRwDgPr//4BQrwwAAAAAAAAAAAAA
AAAoTcECAPj//yhNwQIA+P//IEjJMv////8AAAAAAAAAAEhNwQIA+P//SE3BAgD4//+Aqcsy
/////wAAAAAAAAAAQAHsAoD6//9AAewCgPr//+AKzjIAAAAAAAAAAAAAAACITcECAPj//4hN
wQIA+P//QGzQMv////8AAAAAAAAAAKhNwQIA+P//qE3BAgD4//9AiWQd/////wAAAAAAAAAA
QFFDA4D6//+wGEQDgPr//6DqZh0AAAAAAAAAAAAAAAAwfD4DgPr//zB8PgOA+v//AExpHQAA
AAAAAAAAAAAAAAhOwQIA+P//CE7BAgD4///Q4f8H/////wAAAAAAAAAAKE7BAgD4//8oTsEC
APj//yBT3DL/////AAAAAAAAAABQcngBgPr//1ByeAGA+v//gLTeMgAAAAAAAAAAAAAAADCY
/AKA+v//MBxKA4D6//+A0XIdAAAAAAAAAAAAAAAAMPxLA4D6//8w/EsDgPr//0B34zIAAAAA
AAAAAAAAAACoTsECAPj//6hOwQIA+P//gDBtCv////8AAAAAAAAAAMhOwQIA+P//yE7BAgD4
//8AOugy/////wAAAAAAAAAA6E7BAgD4///oTsECAPj//2Cb6jL/////AAAAAAAAAAAIT8EC
APj//whPwQIA+P//wPzsMv////8AAAAAAAAAAChPwQIA+P//KE/BAgD4//8wThUI/////wAA
AAAAAAAASE/BAgD4//9IT8ECAPj//5CvFwj/////AAAAAAAAAABoT8ECAPj//2hPwQIA+P//
0CJ7Cv////8AAAAAAAAAAIhPwQIA+P//iE/BAgD4//8AjH0K/////wAAAAAAAAAAmALeAoD6
//+YAt4CgPr//wAXpREAAAAAAAAAAAAAAADIT8ECAPj//8hPwQIA+P//wEiDCv////8AAAAA
AAAAAOhPwQIA+P//6E/BAgD4//9g8iII/////wAAAAAAAAAACFDBAgD4//8IUMECAPj//wDH
iAr/////AAAAAAAAAAAoUMECAPj//yhQwQIA+P//YCiLCv////8AAAAAAAAAAIBcBQOA+v//
gFwFA4D6//8A9d4rAAAAAAAAAAAAAAAAaFDBAgD4//9oUMECAPj//yDrjwr/////AAAAAAAA
AACIUMECAPj//4hQwQIA+P//gEySCv////8AAAAAAAAAAKhQwQIA+P//qFDBAgD4//+Q8JIK
/////wAAAAAAAAAAUN16AYD6//8QQMICAPj//+DkHmYBAAAAAAAAAAAAAADoUMECAPj//+hQ
wQIA+P//oHCZCv////8AAAAAAAAAAAhRwQIA+P//CFHBAgD4//+wFJoK/////wAAAAAAAAAA
KFHBAgD4//8oUcECAPj//4AQnAr/////AAAAAAAAAABIUcECAPj//0hRwQIA+P//h309CP//
//8AAAAAAAAAAGhRwQIA+P//aFHBAgD4//+IwaEK/////wAAAAAAAAAAiFHBAgD4//+IUcEC
APj//1CIQgj/////AAAAAAAAAACoUcECAPj//6hRwQIA+P//4LinCv////8AAAAAAAAAAMhR
wQIA+P//yFHBAgD4///gUkcI/////wAAAAAAAAAAIPdLA4D6//8g90sDgPr//8AT9AoAAACA
AAAAAAAAAAAIUsECAPj//whSwQIA+P//IDetCv////8AAAAAAAAAAChSwQIA+P//KFLBAgD4
//9gPrEK/////wAAAAAAAAAA2KCWAoD6///YoJYCgPr//+AZ1hEAAAAAAAAAAAAAAABoUsEC
APj//2hSwQIA+P//iMy0Cv////8AAAAAAAAAAIhSwQIA+P//iFLBAgD4//9Q87YK/////wAA
AAAAAAAAqFLBAgD4//+oUsECAPj//6CwuAr/////AAAAAAAAAADIUsECAPj//8hSwQIA+P//
8Ge7Cv////8AAAAAAAAAAOhSwQIA+P//6FLBAgD4//9wF74K/////wAAAAAAAAAACFPBAgD4
//8IU8ECAPj//yA8wQr/////AAAAAAAAAAAoU8ECAPj//yhTwQIA+P//YEnECv////8AAAAA
AAAAAEhTwQIA+P//SFPBAgD4//+Al8QK/////wAAAAAAAAAAcJ/YAoD6//9wn9gCgPr//wCB
GywAAAAAAAAAAAAAAACIU8ECAPj//4hTwQIA+P//ALLKCv////8AAAAAAAAAAKhTwQIA+P//
qFPBAgD4//+gD0Uz/////wAAAAAAAAAAyFPBAgD4///IU8ECAPj//0Aw0Ar/////AAAAAAAA
AADoU8ECAPj//+hTwQIA+P//oJHSCv////8AAAAAAAAAAAhUwQIA+P//CFTBAgD4//8A89QK
/////wAAAAAAAAAAUGw5A4D6//9QbDkDgPr//wBBcqEFAAAAAAAAAAAAAABIVMECAPj//0hU
wQIA+P//gBnZCv////8AAAAAAAAAAGhUwQIA+P//aFTBAgD4//8gF9wK/////wAAAAAAAAAA
iFTBAgD4//+IVMECAPj//zC73Ar/////AAAAAAAAAACoVMECAPj//6hUwQIA+P//sGrfCv//
//8AAAAAAAAAAMhUwQIA+P//yFTBAgD4//8QzOEK/////wAAAAAAAAAA6FTBAgD4///oVMEC
APj//3At5Ar/////AAAAAAAAAAAIVcECAPj//whVwQIA+P//0BHmCv////8AAAAAAAAAAChV
wQIA+P//KFXBAgD4//8goGEz/////wAAAAAAAAAASFXBAgD4//9IVcECAPj//8DA7Ar/////
AAAAAAAAAABoVcECAPj//2hVwQIA+P//8LLtCv////8AAAAAAAAAAIhVwQIA+P//iFXBAgD4
//+AbFEN/////wAAAAAAAAAAqFXBAgD4//+oVcECAPj//7B18gr/////AAAAAAAAAADIVcEC
APj//8hVwQIA+P//0DT1Cv////8AAAAAAAAAAODTyQIA+P//4NPJAgD4//9g6G8zAAAAAAAA
AAAAAAAAYCpKA4D6//9gKkoDgPr//8BJcjMAAAAAAAAAAAAAAAAoVsECAPj//yhWwQIA+P//
IKt0M/////8AAAAAAAAAAEhWwQIA+P//SFbBAgD4//+ADHcz/////wAAAAAAAAAAaFbBAgD4
//9oVsECAPj//+BteTP/////AAAAAAAAAACIVsECAPj//4hWwQIA+P//gJoCC/////8AAAAA
AAAAAKhWwQIA+P//qFbBAgD4//+gMH4z/////wAAAAAAAAAAQKFBA4D6//9AQT8DgPr//wCS
gDMAAAAAAAAAAAAAAADoVsECAPj//+hWwQIA+P//QEsKC/////8AAAAAAAAAAEDHwwIA+P//
QMfDAgD4///gkEJiCAAAAAAAAAAAAAAAKFfBAgD4//8oV8ECAPj///1WDgv/////AAAAAAAA
AADgXsQCAPj//+BexAIA+P//IMFHIAIAAAAAAAAAAAAAAGhXwQIA+P//aFfBAgD4///IIhQL
/////wAAAAAAAAAAiFfBAgD4//+IV8ECAPj//4AiFgv/////AAAAAAAAAACoV8ECAPj//6hX
wQIA+P//4PoZC/////8AAAAAAAAAACDrhQKA+v//IOuFAoD6///AF8rxAgAAAAAAAAAAAAAA
6FfBAgD4///oV8ECAPj//6C9Hgv/////AAAAAAAAAAAIWMECAPj//whYwQIA+P//AB8hC///
//8AAAAAAAAAAKB0OwOA+v//4K6HAoD6//9g5oMNAAAAAAAAAAAAAAAASFjBAgD4//9IWMEC
APj//8BkJQv/////AAAAAAAAAABoWMECAPj//2hYwQIA+P//IEMoC/////8AAAAAAAAAAIhY
wQIA+P//iFjBAgD4//9QNSkL/////wAAAAAAAAAAqFjBAgD4//+oWMECAPj//6DyKgv/////
AAAAAAAAAADIWMECAPj//8hYwQIA+P//QKdsBv////8AAAAAAAAAAOhYwQIA+P//6FjBAgD4
//9wWTAL/////wAAAAAAAAAACFnBAgD4//8IWcECAPj//9C6Mgv/////AAAAAAAAAAAoWcEC
APj//yhZwQIA+P//AKc0C/////8AAAAAAAAAAEhZwQIA+P//SFnBAgD4//+QfTcL/////wAA
AAAAAAAAaFnBAgD4//9oWcECAPj///DeOQv/////AAAAAAAAAACgRUsDgPr//6BFSwOA+v//
wHHEvQAAAAAAAAAAAAAAAKhZwQIA+P//qFnBAgD4///gEEAL/////wAAAAAAAAAAyFnBAgD4
///IWcECAPj//xADQQv/////AAAAAAAAAADoWcECAPj//+hZwQIA+P//cGRDC/////8AAAAA
AAAAAAhawQIA+P//CFrBAgD4//+gbeQI/////wAAAAAAAAAAKFrBAgD4//8oWsECAPj//2CW
SQv/////AAAAAAAAAABIWsECAPj//0hawQIA+P//wJfqCP////8AAAAAAAAAAGhawQIA+P//
aFrBAgD4///w6UwL/////wAAAAAAAAAAiFrBAgD4//+IWsECAPj//4Ba7wj/////AAAAAAAA
AAAgh6oCgPr//yCHqgKA+v//4IGzDQAAAAAAAAAAAAAAAMhawQIA+P//yFrBAgD4//9AiVML
/////wAAAAAAAAAA6FrBAgD4///oWsECAPj//2DLVQv/////AAAAAAAAAAAIW8ECAPj//whb
wQIA+P//oNhYC/////8AAAAAAAAAAChbwQIA+P//KFvBAgD4//89oloL/////wAAAAAAAAAA
SFvBAgD4//9IW8ECAPj//8ACXwv/////AAAAAAAAAABoW8ECAPj//2hbwQIA+P//CG5gC///
//8AAAAAAAAAAIhbwQIA+P//iFvBAgD4//+AZQIJ/////wAAAAAAAAAAqFvBAgD4//+oW8EC
APj//+AmZgv/////AAAAAAAAAADIW8ECAPj//8hbwQIA+P//QIhoC/////8AAAAAAAAAAOhb
wQIA+P//6FvBAgD4//+g6WoL/////wAAAAAAAAAACFzBAgD4//8IXMECAPj//wBLbQv/////
AAAAAAAAAAAoXMECAPj//yhcwQIA+P//MD1uC/////8AAAAAAAAAAEhcwQIA+P//SFzBAgD4
//8AsHEL/////wAAAAAAAAAAaFzBAgD4//9oXMECAPj//yBvdAv/////AAAAAAAAAACIXMEC
APj//4hcwQIA+P//gNB2C/////8AAAAAAAAAAGh92gKA+v//aH3aAoD6//9Abr8ZAAAAAAAA
AAAAAAAAyFzBAgD4///IXMECAPj//xDEGAn/////AAAAAAAAAADoXMECAPj//+hcwQIA+P//
ID98C/////8AAAAAAAAAAAhdwQIA+P//CF3BAgD4//+oOoAL/////wAAAAAAAAAAMJYyA4D6
//9gSkgDgPr//2Ad4w0AAAAAAAAAAAAAAABAuqECgPr//0C6oQKA+v//4FKAPQAAAAAAAAAA
AAAAAGhdwQIA+P//aF3BAgD4///wCoYL/////wAAAAAAAAAAiF3BAgD4//+IXcECAPj//1Bs
iAv/////AAAAAAAAAACoXcECAPj//6hdwQIA+P//sM2KC/////8AAAAAAAAAAKjR3QKA+v//
qKGOAoD6//9g2Ik9AAAAAAAAAAAAAAAA6F3BAgD4///oXcECAPj//3CQjwv/////AAAAAAAA
AAAgcYYCgPr//wBaHAOA+v//0PGRCwAAAAAAAAAAAAAAAKAE8gOA+P//oATyA4D4//9gwpUL
AAAAAAAAAAAAAAAASF7BAgD4//9IXsECAPj//0DuMTv/////AAAAAAAAAACAxCICgPr//4DE
IgKA+v//SK6ZCwAAAAAAAAAAAAAAAIhewQIA+P//iF7BAgD4//8AsTY7/////wAAAAAAAAAA
ANfJAgD4///YLPYDgPj//+BTnQsAAAAAAAAAAAAAAAAw/IQCgPr//zD8hAKA+v//wO2gCwAA
AAAAAAAAAAAAAIBkIwKA+v//gGQjAoD6///IM6MLAAAAAAAAAAAAAAAA4Al7AoD6///gCXsC
gPr//8BYpAsAAAAAAAAAAAAAAACAqZgBgPj//4CpmAGA+P//fe2mCwAAAAAAAAAAAAAAAEhf
wQIA+P//SF/BAgD4///AzkkJ/////wAAAAAAAAAAgAQkAoD6//+ABCQCgPr//0i5rAsAAAAA
AAAAAAAAAABYHBcDgPj//yB1IQOA+v//ALmuCwAAAAAAAAAAAAAAAKDUAQGA+P//oNQBAYD4
//+AaLELAAAAAAAAAAAAAAAAmBLlAoD6//8w/EkDgPr//0DAsgsAAAAAAAAAAAAAAADoX8EC
APj//+hfwQIA+P//oLVVCf////8AAAAAAAAAAAhgwQIA+P//CGDBAgD4//+zeFYJ/////wAA
AAAAAAAAKGDBAgD4//8oYMECAPj//4B1fBD/////AAAAAAAAAABIYMECAPj//0hgwQIA+P//
wNlcCf////8AAAAAAAAAAGhgwQIA+P//aGDBAgD4//+AN2gc/////wAAAAAAAAAAMHkGA4D6
//8gUZQCgPr//+A4CRoAAAAAAAAAAAAAAACoIeUCgPr//6gR3gKA+v//AJjAPQAAAAAAAAAA
AAAAAJDWlwGA+P//EHmYAYD4//9gnMULAAAAAAAAAAAAAAAA6GDBAgD4///oYMECAPj//6DA
aAn/////AAAAAAAAAACAhGwBgPr//4CEbAGA+v//6IXMCwAAAAAAAAAAAAAAAID0FwKA+v//
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
AAAAAPDAwgIA+P//8MDCAgD4//9LREJHQAMAAADgoQIA+P//8KaoAgD4//8AAAAAAAAAAOgB
2AAAAAEAEJ+oAgD4//8AAAAAAAAAADBXxgIA+P//IHTEAgD4//9odMQCAPj//1DEwwIA+P//
MPrMAgD4//948MwCAPj//5TwzAIA+P//oIPJAgD4//8gIskCAPj//5DJyQIA+P//cIDEAgD4
//+IgMQCAPj//wAAAAAAAAAAAAAAAAAAAAAAK80CAPj//3jyzAIA+P//AAAAAAAAAAAAAAAA
AAAAAPj5zAIA+P//xO3EAgD4///48swCAPj//wjxzAIA+P//YPDMAgD4///g8swCAPj//wAA
AAAAAAAAuPDMAgD4//8AAAAAAAAAAAAAAAAAAAAAoPHMAgD4///Q+MwCAPj//wAQAAAAAAAA
kPTMAgD4//+43cQCAPj//8DdxAIA+P//yILDAgD4///IV8YCAPj//5DdxAIA+P//AN7EAgD4
//8AAAAAAAAAAAAlzQIA+P//wCrNAgD4///AK80CAPj//8AizQIA+P//mOTAAgD4///Aq8EC
APj//wCswQIA+P//aMrDAgD4//+AZcICAPj//xDwzAIA+P//APHMAgD4//8A8MwCAPj//3B/
wgIA+P//cI/CAgD4///QAMECAPj//2x/wgIA+P//kF/GAgD4///ASr0CAPj//wAAAAAAAAAA
QPzMAgD4///o8cwCAPj//yhXxgIA+P//SFvEAgD4///c8MwCAPj//9SvwwIA+P//gFvGAgD4
//+w8sQCAPj///DdxAIA+P//yN3EAgD4//887MkCAPj//zjwzAIA+P//AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAB8ALgAOAAoAHAAZAEAAAAA6AQ4A5ACKAAATdohCAD0BfAF
uEsgASQAqAQAAAAAAADYAMECAPj//+AAwQIA+P//4JPJAgD4//+AThgAIACAAQAAAAAAAAAA
AABAABAAGAAAADMAKwAAAAAAQAAjAFMAoMTJAgD4//+gwMkCAPj//wAAAAAAAAAA6NnEAgD4
///k2cQCAPj//3AHvQIA+P//2EsAAAAAAAB4zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgoQIA+P//AAAAAAAAAAAAwF4AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEsVQAAAAAA
6FZjVQAAAADAzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACgAAMA+P//AAAAAAAAAAAAkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMEBAAAAAAAacbnTAAAAAAAzwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABguQAA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJv1AAAAAAAAYYBNTQAAAABIzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwxwCA+P//AAAAAAAAAAAA8AQAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH75BAAAAAAA
N8fnTAAAAACwzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAgzACA+P//AAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGL3AAAAAAAAJ+BbSgAAAAD4zwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgzQCA+P//
AAAAAAAAAAAA4AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGH8BQAAAAAAKHr2VAAAAAA40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0wCA+P//AAAAAAAAAAAAUAcAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVlBwAAAAAA
JdGsUwAAAAB40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACw7QCA+P//AAAAAAAAAAAAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMrJDAAAAAAAQRbFUQAAAADQ0AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ+QCA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAF9qAQAAAAAAcKsQUAAAAAAo0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ACA+P//AAAAAAAAAAAAcAUAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPasBQAAAAAA
lJLnTAAAAAB40QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABw5QCA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAF8FbSgAAAADQ0QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5gCA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA0yAQAAAAAA/sBbSgAAAAAo0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg5gCA+P//AAAAAAAAAAAAMAMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAxAwAAAAAA
j5LnTAAAAAB40gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQ6QCA+P//AAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEvAAAAAAAAA28pbSgAAAADQ0gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg6gCA+P//
AAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAOZEAwAAAAAAO+LEVQAAAAAo0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ+gCA+P//AAAAAAAAAAAAgAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCFAQAAAAAA
8OHEVQAAAAB40wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABQ/ACA+P//AAAAAAAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANM0AQAAAAAAAeLEVQAAAADQ0wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw/QCA+P//
AAAAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAMjfAQAAAAAAwRtkTwAAAAAo1AAAAAAAAAAAAAAAAAAABAAAAJcYCQD4AEYA
AAAAAPgARgAAAAAAYABHAAAAAABgAEcAAAAAAACQ2gCA+P//AMAHAAAAAAAAUAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKfAQAAAAAA
oJLnTAAAAACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAwACA+P//AAAAAAAAAAAAwAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1fBgAAAAAA65LnTAAAAADY1AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA/gCA+P//
AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKkQAQAAAAAAFMFbSgAAAAAw1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxQCA+P//AAAAAAAAAAAAAAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMWcAQAAAAAA
FMFbSgAAAACI1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADg2wCA+P//AAAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALNbAgAAAAAACy/QVAAAAADg1QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA/wCA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAALtlAAAAAAAAE8FbSgAAAAA41gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwDAGA+P//AAAAAAAAAAAAoAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYLAwAAAAAA
tfn+UQAAAACQ1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABQDwGA+P//AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJyAQAAAAAAFqTnTAAAAADo1gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAGA+P//
AAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHoFAwAAAAAAH7nJVQAAAABA1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEgGA+P//AAAAAAAAAAAAQAYAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJW+AwAAAAAA
MkTwUgAAAACY1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADAGAGA+P//AAAAAAAAAAAAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtxAwAAAAAA97jJVQAAAADw1wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHAGA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANVbAQAAAAAAA7nJVQAAAABI2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHQGA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALeSAAAAAAAA
yqOjSwAAAACg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAGA+P//AAAAAAAAAAAAwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1FBQAAAAAAnJLnTAAAAAD42AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABAGA+P//
AAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAERWAQAAAAAAgcRbSgAAAABQ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJQGA+P//AAAAAAAAAAAAkBoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3yGQAAAAAA
ir7hUgAAAACg2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABgGA+P//AAAAAAAAAAAA4AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfpBQAAAAAANJPnTAAAAAD42QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAGA+P//
AAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAJ0AgAAAAAA6lNjVQAAAABQ2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwSAGA+P//AAAAAAAAAAAAIAcAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKugBwAAAAAA
tPfKVAAAAACg2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQTwGA+P//AAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5LAQAAAAAA/8BbSgAAAADw2gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgUAGA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJIvAQAAAAAA0u9OTwAAAABI2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAGA+P//AAAAAAAAAAAAIA8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGLDgAAAAAA
svY0UAAAAACY2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAgbwGA+P//AAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5DBgAAAAAADXaUUgAAAADw2wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgdQGA+P//
AAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGQYAwAAAAAAOFhjVQAAAABI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAGA+P//AAAAAAAAAAAA8B8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVfHQAAAAAA
1Fs/UwAAAACg3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADgdwGA+P//AAAAAAAAAAAAkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALI4BQAAAAAACVs/UwAAAAD43AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwfAGA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACHtAAAAAAAAipvnTAAAAABQ3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUQGA+P//AAAAAAAAAAAAwAQAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO0nBQAAAAAA
yJLnTAAAAACo3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABwfQGA+P//AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOngAAAAAAAAu1gISgAAAAAA3gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAVgGA+P//
AAAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFZzAwAAAAAALpjnTAAAAABY3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwfQGA+P//AAAAAAAAAAAAIAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP1dAQAAAAAA
AcJbSgAAAACo3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQfwGA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTZAAAAAAAAfpLnTAAAAAAA3wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgWQGA+P//
AAAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEEhBAAAAAAAXKYAUQAAAABY3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAXQGA+P//AAAAAAAAAAAAYAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3/AQAAAAAA
HcFbSgAAAACo3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAQAGA+P//AAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4YAwAAAAAAm5LnTAAAAAAA4AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwIQGA+P//
AAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEK3AgAAAAAAmJLnTAAAAABY4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARgGA+P//AAAAAAAAAAAAkAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvpAAAAAAAA
CcFbSgAAAACo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQRwGA+P//AAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOs2AAAAAAAAjcpbSgAAAAD44AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARwGA+P//
AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG8+AQAAAAAAh8VbSgAAAABI4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA3QCA+P//AAAAAAAAAAAAUAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMePAgAAAAAA
i8VbSgAAAACg4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADgXgGA+P//AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6cAQAAAAAAP8VbSgAAAAD44QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQJAGA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKz/AAAAAAAAYs5bSgAAAABQ4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgCwGA+P//AAAAAAAAAAAAkAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANV0AAAAAAAA
Ys5bSgAAAACo4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADwHQGA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2rAAAAAAAAY85bSgAAAAAA4wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAHgGA+P//
AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACZxAAAAAAAAE8FbSgAAAABQ4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgZQOA+P//AAAAAAAAAAAAEAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO2aAQAAAAAA
FMFbSgAAAACg4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADwZgOA+P//AAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8AAgAAAAAAcmphVAAAAADw4wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQaQOA+P//
AAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFViAQAAAAAAPpPnTAAAAABA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgaQOA+P//AAAAAAAAAAAAkAgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLpBwAAAAAA
HCmIUwAAAACQ5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABwcgOA+P//AAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQRBAAAAAAAhpPnTAAAAADo5AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAdgOA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHuxAAAAAAAAtsxbSgAAAABA5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQdwOA+P//AAAAAAAAAAAAYAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8NAgAAAAAA
YqjnTAAAAACY5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACweQOA+P//AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgWAQAAAAAAtsxbSgAAAADw5QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgegOA+P//
AAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAMx8AQAAAAAAdKjnTAAAAABI5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQfAOA+P//AAAAAAAAAAAAQAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWeAQAAAAAA
DKvnTAAAAACg5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAYAOA+P//AAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/XBAAAAAAAl5TnTAAAAAD45gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZQOA+P//
AAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANU+AQAAAAAAXsFbSgAAAABQ5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQfQOA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHT0AAAAAAAA
vsNbSgAAAACo5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABAfgOA+P//AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9fAQAAAAAALsVbSgAAAAAA6AAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQSA+P//AAAAAAAAAAAAsAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaAQAAAAAA
6cxbSgAAAADI7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACwLgSA+P//AAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMtRAgAAAAAAb6jnTAAAAAAg7wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMASA+P//
AAAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEsnAgAAAAAA8cxbSgAAAAB47wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgMgSA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3DAAAAAAAA
qs5bSgAAAADQ7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQMwSA+P//AAAAAAAAAACAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE6TAAAAAAAAkspbSgAAAAAo8AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMwSA+P//
AAAAAAAAAAAAMAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAIhVBAAAAAAA86PnTAAAAAB48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgNwSA+P//AAAAAAAAAAAAIAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFivAQAAAAAA
labnTAAAAADQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACAOASA+P//AAAAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiUAQAAAAAAZKjnTAAAAAAo8QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQOQSA+P//
AAAAAAAAAAAAwAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANqYBQAAAAAAh6bnTAAAAACA8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIASA+P//AAAAAAAAAAAA0AMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMa3AwAAAAAA
ghtOUgAAAADY8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQIwSA+P//AAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9nAgAAAAAA/iROUgAAAAAo8gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwJQSA+P//
AAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJKvAAAAAAAAk8pbSgAAAACA8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQJgSA+P//AAAAAAAAAAAAwAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjwAAAAAAAA
xq3EVQAAAADY8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADA5wOA+P//AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMd4AQAAAAAAvcpbSgAAAAAw8wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg6AOA+P//
AAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFDeAAAAAAAAE8FbSgAAAACQ8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ/wOA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJyAQAAAAAA
FqTnTAAAAADw8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAQwGA+P//AAAAAAAAAAAAMAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOoNAQAAAAAAj8FbSgAAAABQ9AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBg+f//
AAAAAAAAAAAAMDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAP4MAAAAAAA/1ZjVQAAAACY9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwfwOA+P//AAAAAAAAAAAAwAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5BAQAAAAAA
dMVbSgAAAADw9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAWwBg+f//AAAAAAAAAAAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQFAgAAAAAAdMVbSgAAAABA9QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewBg+f//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJaeAAAAAAAAYs5bSgAAAACI9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkgBg+f//AAAAAAAAAAAAcAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAADQ9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAwRAGA+P//AAAAAAAAAAAAMAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPF7AgAAAAAAlcJbSgAAAAAhAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAbgB0AG8AcwBrAHIAbgBsAC4A
ZQB4AGUAAAAcAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwA
aABhAGwALgBkAGwAbAAAAAAAHgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGsAZABjAG8AbQAuAGQAbABsAAAAAAAAAAAALgAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAG0AYwB1AHAAZABhAHQAZQBfAEcAZQBuAHUA
aQBuAGUASQBuAHQAZQBsAC4AZABsAGwAAAAAAAAAAAAeAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAUABTAEgARQBEAC4AZABsAGwAAAAAAAAAAAAdAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAQwBMAEYAUwAuAFMA
WQBTAAAAGwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEMA
SQAuAGQAbABsAAAAAAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAVwBkAGYAMAAxADAAMAAwAC4AcwB5AHMAAAAnAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAFcARABGAEwARABSAC4AUwBZAFMAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABBAEMAUABJAC4AcwB5AHMA
AAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAFcATQBJAEwASQBCAC4AUwBZAFMAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABtAHMAaQBzAGEA
ZAByAHYALgBzAHkAcwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAcABjAGkALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMA
dABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AGQA
cgB2AHIAbwBvAHQALgBzAHkAcwAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkA
cwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AYgB1AHMALgBzAHkAcwAAAAAA
AAAkAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkA
VgBFAFIAUwBcAHgAZQBuAC4AcwB5AHMAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AZgBpAGwAdAAuAHMA
eQBzAAAAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwA
ZAByAGkAdgBlAHIAcwBcAHAAYQByAHQAbQBnAHIALgBzAHkAcwAAAAAAJwAAAFwAUwB5AHMA
dABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AG8A
bABtAGcAcgAuAHMAeQBzAAAAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkA
cwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdgBvAGwAbQBnAHIAeAAuAHMAeQBzAAAA
AAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAGkAbgB0AGUAbABpAGQAZQAuAHMAeQBzAAAAKAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABQAEMASQBJAEQA
RQBYAC4AUwBZAFMAAAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAbQBvAHUAbgB0AG0AZwByAC4AcwB5AHMAAAAmAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAGEAdABhAHAAaQAuAHMAeQBzAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABhAHQAYQBwAG8AcgB0AC4A
UwBZAFMAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAbQBzAGEAaABjAGkALgBzAHkAcwAAAAAAAAAnAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHgA
ZQBuAHYAYgBkAC4AcwB5AHMAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABzAHQAbwByAHAAbwByAHQALgBzAHkA
cwAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAeABlAG4AYwByAHMAaAAuAHMAeQBzAAAAAAAoAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHgAZQBuAGQA
aQBzAGsALgBzAHkAcwAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABhAG0AZAB4AGEAdABhAC4AcwB5AHMAAAAAACcA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUA
cgBzAFwAZgBsAHQAbQBnAHIALgBzAHkAcwAAAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIAcwBcAGYAaQBsAGUAaQBuAGYA
bwAuAHMAeQBzAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAEQAcgBpAHYAZQByAHMAXABOAHQAZgBzAC4AcwB5AHMAAAAmAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIAcwBcAG0AcwByAHAA
YwAuAHMAeQBzAAAAAAAAAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQA
ZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABrAHMAZQBjAGQAZAAuAHMAeQBzAAAAAAAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUA
cgBzAFwAYwBuAGcALgBzAHkAcwAAAAAAJAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABwAGMAdwAuAHMAeQBzAAAAAAAnAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIA
cwBcAEYAcwBfAFIAZQBjAC4AcwB5AHMAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABuAGQAaQBzAC4AcwB5AHMA
AAAmAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAE4ARQBUAEkATwAuAFMAWQBTAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABrAHMAZQBjAHAA
awBnAC4AcwB5AHMAAAAAACYAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdABjAHAAaQBwAC4AcwB5AHMAAAAAAAAAAAApAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAGYAdwBwAGsAYwBsAG4AdAAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AG0AcwB0AG8AcgBmAGwA
LgBzAHkAcwAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABkAHIAaQB2AGUAcgBzAFwAdgBvAGwAcwBuAGEAcAAuAHMAeQBzAAAAAAAmAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIAcwBcAHMA
cABsAGQAcgAuAHMAeQBzAAAAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAByAGQAeQBiAG8AbwBzAHQALgBzAHkA
cwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIA
aQB2AGUAcgBzAFwAbQB1AHAALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABoAHcAcABvAGwAaQBjAHkA
LgBzAHkAcwAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAZgB2AGUAdgBvAGwALgBzAHkAcwAAAAAAAAAlAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIAcwBcAGQA
aQBzAGsALgBzAHkAcwAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAQwBMAEEAUwBTAFAATgBQAC4AUwBZAFMAAAAmAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIA
UwBcAGMAZAByAG8AbQAuAHMAeQBzAAAAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABOAHUAbABsAC4AUwBZAFMA
AAAlAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkA
dgBlAHIAcwBcAEIAZQBlAHAALgBTAFkAUwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABTAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdgBnAGEALgBzAHkAcwAAAAAA
KQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYA
ZQByAHMAXABWAEkARABFAE8AUABSAFQALgBTAFkAUwAAACkAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdwBhAHQAYwBoAGQA
bwBnAC4AcwB5AHMAAAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0A
MwAyAFwARABSAEkAVgBFAFIAUwBcAFIARABQAEMARABEAC4AcwB5AHMAAAAAAAAAKQAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMA
XAByAGQAcABlAG4AYwBkAGQALgBzAHkAcwAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAcgBkAHAAcgBlAGYAbQBwAC4A
cwB5AHMAAAAlAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwA
RAByAGkAdgBlAHIAcwBcAE0AcwBmAHMALgBTAFkAUwAAACUAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUAcgBzAFwATgBwAGYAcwAuAFMA
WQBTAAAAJAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQA
UgBJAFYARQBSAFMAXAB0AGQAeAAuAHMAeQBzAAAAAAAkAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAFQARABJAC4AUwBZAFMA
AAAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIA
aQB2AGUAcgBzAFwAYQBmAGQALgBzAHkAcwAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABuAGUAdABiAHQALgBzAHkA
cwAAAAAAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAdwBmAHAAbAB3AGYALgBzAHkAcwAAAAAAAAAmAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHAA
YQBjAGUAcgAuAHMAeQBzAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABuAGUAdABiAGkAbwBzAC4AcwB5AHMA
AAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAdwBhAG4AYQByAHAALgBzAHkAcwAAAAAAAAAnAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHQAZQByAG0A
ZABkAC4AcwB5AHMAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAByAGQAYgBzAHMALgBzAHkAcwAAAAAAAAAAACkA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUA
cgBzAFwAbgBzAGkAcAByAG8AeAB5AC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAG0AcwBzAG0AYgBpAG8A
cwAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAGQAcgBpAHYAZQByAHMAXABkAGkAcwBjAGEAYwBoAGUALgBzAHkAcwAAACQAAABcAFMA
eQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwA
YwBzAGMALgBzAHkAcwAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQA
ZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAGYAcwBjAC4AcwB5AHMAAAApAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAGIA
bABiAGQAcgBpAHYAZQAuAHMAeQBzAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB0AHUAbgBuAGUAbAAuAHMAeQBzAAAA
AAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAaQA4ADAANAAyAHAAcgB0AC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAG0AbwB1AGMA
bABhAHMAcwAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABrAGIAZABjAGwAYQBzAHMALgBzAHkAcwAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUA
UgBTAFwAZgBkAGMALgBzAHkAcwAAAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB4AGUAbgB2AGkAZgAuAHMAeQBzAAAA
AAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAeABlAG4AaQBmAGEAYwBlAC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAEgARABBAHUA
ZABCAHUAcwAuAHMAeQBzAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB2AGkAbwBzAGUAcgAuAHMAeQBzAAAAAAAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUA
UgBTAFwAcQB4AGwALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABpAG4AdABlAGwAcABwAG0ALgBzAHkA
cwAAAC0AAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAQwBvAG0AcABvAHMAaQB0AGUAQgB1AHMALgBzAHkAcwAAACkAAABcAFMA
eQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwA
QQBnAGkAbABlAFYAcABuAC4AcwB5AHMAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwA
cwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHIAYQBzAGwAMgB0AHAALgBzAHkA
cwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQA
UgBJAFYARQBSAFMAXABuAGQAaQBzAHQAYQBwAGkALgBzAHkAcwAAACgAAABcAFMAeQBzAHQA
ZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAbgBkAGkA
cwB3AGEAbgAuAHMAeQBzAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMA
dABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHIAYQBzAHAAcABwAG8AZQAuAHMAeQBzAAAA
KAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYA
RQBSAFMAXAByAGEAcwBwAHAAdABwAC4AcwB5AHMAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAcgBhAHMAcwBzAHQA
cAAuAHMAeQBzAAAAAAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0A
MwAyAFwARABSAEkAVgBFAFIAUwBcAHIAZABwAGIAdQBzAC4AcwB5AHMAAAAAAAAAJwAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMA
XABzAHcAZQBuAHUAbQAuAHMAeQBzAAAAAAAAACMAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAawBzAC4AcwB5AHMAAAAAAAAA
JgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYA
RQBSAFMAXAB1AG0AYgB1AHMALgBzAHkAcwAAAAAAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUAcgBzAFwATgBEAFAAcgBvAHgA
eQAuAFMAWQBTAAAAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0A
MwAyAFwAZAByAGkAdgBlAHIAcwBcAEgAZABBAHUAZABpAG8ALgBzAHkAcwAAAAAAKAAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMA
XABwAG8AcgB0AGMAbABzAC4AcwB5AHMAAAAAACUAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAZAByAG0AawAuAHMAeQBzAAAA
KAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYA
ZQByAHMAXABrAHMAdABoAHUAbgBrAC4AcwB5AHMAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AbgBlAHQA
LgBzAHkAcwAAAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0A
MwAyAFwARAByAGkAdgBlAHIAcwBcAGMAcgBhAHMAaABkAG0AcAAuAHMAeQBzAAAALQAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMA
XABkAHUAbQBwAF8AZAB1AG0AcABhAHQAYQAuAHMAeQBzAAAALAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAHUAbQBwAF8A
bQBzAGEAaABjAGkALgBzAHkAcwAAAAAALQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAHUAbQBwAF8AZAB1AG0AcABmAHYA
ZQAuAHMAeQBzAAAAHwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAHcAaQBuADMAMgBrAC4AcwB5AHMAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABEAHgAYQBwAGkALgBzAHkA
cwAAAAAAAAAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIA
XABkAHIAaQB2AGUAcgBzAFwAZAB4AGcALgBzAHkAcwAAAAAAHgAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAFQAUwBEAEQARAAuAGQAbABsAAAAAAAAAAAA
HgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAHEAeABsAGQA
ZAAuAGQAbABsAAAAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABsAHUAYQBmAHYALgBzAHkAcwAAAAAAAAAAAIBb
xgIA+P//KPcAAJwAAADo2cQCAPj//8T3AAAEAAAA5NnEAgD4///I9wAABAAAAMBKvQIA+P//
zPcAAAABAAAAoKgCAPj//8z4AAAAEAAAAGDoAYD4///MCAEAABAAAKDEyQIA+P//zBgBAAQA
AACgwMkCAPj//9AYAQBQAAAAfPDMAgD4//8gGQEABAAAAGjwzAIA+P//JBkBAAQAAAAoH0gC
gPr//ygZAQAAIAAAiILDAgD4//8oOQEACAAAAJCCwwIA+P//MDkBAAgAAAAAYL4CAPj//zg5
AQAAEAAAAOChAgD4//84SQEAABAAAAAgqQIA+P//OFkBAAAQAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAAA
BAkAAABgAQAACgAAAEoBAAAAAAAAAAAAAAAAAEAAAMAucGRhdGEAAGQOAAAAcAEAABAAAABU
AQAAAAAAAAAAAAAAAABAAABALnJzcmMAAAAQBAAAAIABAAAGAAAAZAEAAAAAAAAAAAAAAAAA
QAAAQC5yZWxvYwAAAAAAAAAAAABAF6kCAPj//2haygIA+P//UxupAgD4//8AAAAAAAAAAADg
oQIA+P//AAAAAAAAAAAcY74CAPj//8QpqQIA+P//399bSucAAADf31tKEAEAAODfW0o6AQEA
K+BbSosAAAAAAAAAAAAAAAAAAAAAAAAAggIAAAAAAABpHqkCAPj//zsAAAAAAAAABQAAwAAA
AADFp6gCAPj//wBs6AGA+P//AAAAAAAAAAAuRExMAEFQSQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAEFQSS1NUy1XaW4tQ29yZS1Qcm9m
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
bwBsAHUAbQBlADIAXABXAGkAbgBkAG8AdwBzAFwARgBvAG4AdABzAFwAYQByAGkAYQBsAGIA
ZAAuAHQAdABmAAAAAAAAAAIAEcCWACAEQ3KxSAAAAABA8dkCoPj//1wARABlAHYAaQBjAGUA
XABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUAMgBcAFcAaQBuAGQAbwB3AHMAXABTAHkA
cwB0AGUAbQAzADIAXABpAHQALQBJAFQAXABhAHUAZABpAG8AZABnAC4AZQB4AGUALgBtAHUA
aQAAAAAAAgACwJYACgOYBAAAlAQAAFeTs0gAAAAAAQAAAAEAAAAAAMb9/gcAAACwDQAAAAAA
lAQAALKFDQDjZWNVAAAAAAAAxv3+BwAAAAAAAAAAAAAAAAAAAAAAAFwAVwBpAG4AZABvAHcA
cwBcAFMAeQBzAHQAZQBtADMAMgBcAGEAZAB2AGEAcABpADMAMgAuAGQAbABsAAAAAAACAALA
mAAKA5gEAACUBAAATsi2SAAAAAABAAAAAQAAAAAAuPz+BwAAAPAAAAAAAACUBAAAhV4BAJHf
W0oAAAAAAAC4/P4HAAAAAAAAAAAAAAAAAAAAAAAAXABXAGkAbgBkAG8AdwBzAFwAUwB5AHMA
dABlAG0AMwAyAFwAYwByAHkAcAB0AGIAYQBzAGUALgBkAGwAbAAAAAIAAsBQAAoBaAQAABwE
AAAWZrdIAAAAAAIAAAAAAAAAAAAAAEMABgAAgAAAAAAAAACAEScAAAAAYPjZAqD4//8Q9/wC
gPr//1utAwAAAAAAAwACwGgAAQWYBAAAlAQAALeRt0gAAAAAAQAAAAEAAACUBAAAnAQAAAAA
IAKA+P//AKAfAoD4//8AAJ0AAAAAAADgnAAAAAAAAwAAAAAAAACA9Ph2AAAAAADA/f//BwAA
AAAAAAgFAgACAALAnAAKA5gEAACUBAAAeqi3SAAAAAABAAAAAQAAAAAAx/z+BwAAAEABAAAA
AACUBAAAQaYBAG/J50wAAAAAAADH/P4HAAAAAAAAAAAAAAAAAAAAAAAAXABXAGkAbgBkAG8A
dwBzAFwAUwB5AHMAdABlAG0AMwAyAFwAUgBwAGMAUgB0AFIAZQBtAG8AdABlAC4AZABsAGwA
AAAAAAAAAwACwGgAAQWMBAAACAIAAPAnuEgAAAAAAAAAAAAAAAAIAgAAoAQAAABA3gKA+P//
AODdAoD4//8AAKUBAAAAAACApAEAAAAAAwAAAAAAAAAEYhH7/gcAAABg+v//BwAACQAAAAgF
AgACABHAsgElBZA3uEgAAAAAlhiRSAAAAABwBAAAFAQAAIQEAAC0AQAAjAQAAGAEAACgAwAA
aAQAALwBAAAwAAAAuAEAAOwCAADwAgAAlAIAAJgEAACcAgAADQgIDwgICAgODAoNDQ0ICAMA
AAAAIAAARgxEBgrMpQMOAFICCh5dBAwFUszlApZMwRAOAH8CliIvAQpM/wSWIl4CWkxIBJai
jK0zrgwAZ6IAACIAwQAmnqEAKgh1AR6A3wAKTC8JliIDBlpMDwaWItoCWkyQBJYiIB1azHAH
lqJKBVrMPQaWorMCWsyRBJYiMx5aTJ0HlqJWBVpMJwaWIrMCWkyWBJYepQRaHiQBCp7XAO+G
DgBnogAAbqC4Ah4A7ADIWQ4AFgVl1QcADoBdB8lpFAAigJ4ASUcBADKaSQEkDk8hCAAHIAAA
UdkBAEeRCQAHIAAAXaMfAHag5ANZ0gYADgDYACIAswB6zBksDgBMA3rM6g4OAFICUzcJAG4m
AAAOgLEBJ50MAG6mAQC+jCMCeiKnZx5MuAJSInwCHkw/ClKisAQeTLcGV5gAABQlAQBuILoB
UgwXAQAAAAAAAAIAAsBQAAoBaAQAABwEAABX0LhIAAAAAAIAAAAAAAAAAAAAAEMABgAAgAAA
AAAAAAAgCScAAAAAYPjZAqD4//8QTHsBgPr//8CmAAAAAAAAAgARwHwAIAR5PrlIAAAAAEDx
2AKg+P//XABEAGUAdgBpAGMAZQBcAEgAYQByAGQAZABpAHMAawBWAG8AbAB1AG0AZQAyAFwA
VwBpAG4AZABvAHcAcwBcAEYAbwBuAHQAcwBcAGEAcgBpAGEAbABiAGkALgB0AHQAZgAAAAAA
AAACAALAlAAKA5gEAACUBAAAPZu7SAAAAAABAAAAAQAAAAAAsv3+BwAAAJAJAAAAAACUBAAA
JWsJALreW0oAAAAAAACy/f4HAAAAAAAAAAAAAAAAAAAAAAAAXABXAGkAbgBkAG8AdwBzAFwA
UwB5AHMAdABlAG0AMwAyAFwAYwBsAGIAYwBhAHQAcQAuAGQAbABsAAAAAAAAAAMAAsBoAAEF
jAQAAAgCAADW3rxIAAAAAAAAAAAAAAAACAIAAKgEAAAAEBUCgPj//wCwFAKA+P//AABwAQAA
AAAAgG8BAAAAAAMAAAAAAAAAgPT4dgAAAAAAQPr//wcAAAkAAAAIBQIAAwACwGgAAQX4AwAA
4AMAAEaJwEgAAAAAAAAAAAAAAADgAwAAsAQAAACgIQKA+P//AEAhAoD4//8AALoAAAAAAACA
uQAAAAAAAwAAAAAAAACA9Ph2AAAAAADA+v//BwAAAAAAAAgFAgACABHAwgIlBUTpwEgAAAAA
hja4SAAAAAD4AwAAoAQAAOwDAACEBAAAaAQAAFQDAAB0AwAAmAQAAIwEAACgAwAAnAIAALQB
AAC8AQAAXAMAAIAAAACoAwAADQgICAgICQgICAgPDggNCAMAAADwIAAABiJdEgoe2wMOzPkE
RqKYNhKA3VgWHk4BD6IBAGOiAQAaHlsDDkxfAhqeAwIOzEMCGh6gBw5MZAMaHoIGDkzCAhrG
PgFO0DEKKAVOzNE7Wh6WBV5M7wJaHgAGXsyMAloeugNeTN5ohqLYBl5M7AeGDMIDXszMIaIi
NQNe0CIHoppUCIaitwROTG4FhozTAqKiBRBOnjkBJsy+BKKiTwImHhEBTsxpBKIqCiCqDAYB
oiptA6oM9gCimkkihiLZBE6eLgEmzBMFhoxfA6Ii6xYmHk4BTkwKBaKiRgJOHgQBJsywBaIa
TQeGookEJh4wAU5MJgWGjM0CoiJ1Dk6eLwEmTJ8EoqJHAiYeEwFOzAwEoioDFqqMIAGiKkIC
qgzsAKLMWQouAE0DoqI7A04eSAFKTC4DoiKLa1qeCAaiIlgCWh74A6Ki3AFanqcDoiK2AVqe
aAOiKtgJqowPAaKqXgOqjOkAoqKlA0oeOQFOIm0FFp6VA06iTgIWnjIETiKKARYe9gFOogcD
Fh4jA06i+QEWHiwDTiLoARYeKQJOoqIBFh4FAk6idwEWnt4BTsxZAzKAsgBOzNsCoqJVBE4e
IAEmTCkDLgD1BCaicwIWzOUCZqIwAhYe/QA2TMUDZqJoATae7gAWzKsBjw8AAGkmAgB6IHgC
ZkxQAaIiDQJmng4BFp72AF6iLAMWHh0DTiJJAhYeygNOImcBFh7uAU7MqwF6IPcBTsw2AaJM
/AougNQBPqLSApdHAABgIgAAohq1BoaMtgGiIo8UkwoAAPAgAAAWDOcGAAAAAAAAAwACwGgA
AgWMBAAACAIAAMxtwUgAAAAAAAAAAAAAAAAIAgAAjAQAAAAwIQKA+P//AMAgAoD4//8AAIIB
AAAAAABggQEAAAAAAwAAAAAAAAAIfQD7/gcAAACA+v//BwAACQAAAAgFAgADAALAaAABBQQE
AABsAgAALq/BSAAAAAABAAAAAAAAAGwCAAC4BAAAABAiAoD4//8AsCECgPj//wAAGgEAAAAA
AIAZAQAAAAADAAAAAAAAAAioVf3+BwAAADD9//8HAAAAAAAACAUCAAIAEcCAACAEexvCSAAA
AADA6NkCoPj//1wARABlAHYAaQBjAGUAXABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUA
MgBcAFcAaQBuAGQAbwB3AHMAXABTAHkAcwB0AGUAbQAzADIAXABjAHMAYwBzAHYAYwAuAGQA
bABsAAAAAgACwMIACgPABAAAvAQAAGgdw0gAAAAAAAAAAAAAAAAAAHL/AAAAAACwAAAAAAAA
vAQAAFcxAQDBw1tKAAAAAAAAcv8AAAAAAAAAAAAAAAAAAAAAAAAAAFwARABlAHYAaQBjAGUA
XABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUAMgBcAFcAaQBuAGQAbwB3AHMAXABTAHkA
cwB0AGUAbQAzADIAXABzAHYAYwBoAG8AcwB0AC4AZQB4AGUAAAAAAAAAAAACAALAlgAKA8AE
AAC8BAAAaSDDSAAAAAAAAAAAAAAAAAAA93YAAAAAAJAaAAAAAAC8BAAAFW4aAPJmY1UAAAAA
AAD3dgAAAAAAAAAAAAAAAAAAAAAAAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMA
dABlAG0AMwAyAFwAbgB0AGQAbABsAC4AZABsAGwAAAAAAAIAAsCWAAoDwAQAALwEAACQVcNI
AAAAAAAAAAAAAAAAAADVdgAAAAAA8BEAAAAAALwEAAAbRRIA/GZjVQAAAAAAANV2AAAAAAAA
AAAAAAAAAAAAAAAAAABcAFcAaQBuAGQAbwB3AHMAXABTAHkAcwB0AGUAbQAzADIAXABrAGUA
cgBuAGUAbAAzADIALgBkAGwAbAAAAAAAAgACwJoACgPABAAAvAQAAClfw0gAAAAAAAAAAAAA
AAAAANT8/gcAAADABgAAAAAAvAQAAN0/BwD9ZmNVAAAAAAAA1Pz+BwAAAAAAAAAAAAAAAAAA
AAAAAFwAVwBpAG4AZABvAHcAcwBcAFMAeQBzAHQAZQBtADMAMgBcAEsAZQByAG4AZQBsAEIA
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
V9QkAFPEIwBPZCIAS3QhAEc0IABE+AwAP+gLADrYCgA1yAkAMLgIACuoBwAlmAYAH4gFABl4
BAAUaAMABwEnAAEUBoUUUwwBKwAFUAQCAAoBGQaFGVMRASsAClAJAgUKARgGhRhTEAErAAlQ
CAIECgE7BoU7UzMBKwAsUCsCJwoBBAEABGIAAAEpDIUpZCoAInQpABs0KAAUUwwBKwAFUAQC
AAoZUAyFUGQqAEl0KQBCNCgAO1MzASsALFArAicKQDcHAAAAAAAAAAAAAV8kAF/0JgBb5CUA
V9QkAFPEIwBPZCIAS3QhAEc0IABE+AwAP+gLADrYCgA1yAkAMLgIACuoBwAlmAYAH4gFABl4
BAAUaAMABwEnAAFfJABf9CYAW+QlAFfUJABTxCMAT2QiAEt0IQBHNCAARPgMAD/oCwA62AoA
NcgJADC4CAArqAcAJZgGAB+IBQAZeAQAFGgDAAcBOwABBAEABEIAAAGfJACfNC4Al2QwAI90
LwCH9DQAf+QzAHfUMgBvxDEAZ/gTAF7oEgBV2BEATMgQAEO4DwA6qA4AMZgNACiIDAAfeAsA
F2gKAA8BNQABBAEABEIAAAF/HgB/9DQAd+QzAG/UMgBnxDEAX/gTAFboEgBN2BEARMgQADu4
DwAyqA4AKZgNACCIDAAXeAsAD2gKAAcBNQABBAEABEIAAAEEAQAEwgAAAZckAJc0LgCPZDAA
h3QvAH/0NAB35DMAb9QyAGfEMQBf+BMAVugSAE3YEQBEyBAAO7gPADKoDgApmA0AIIgMABd4
CwAPaAoABwE1AAEGAwAGQgJQATAAAAEFAgAFMgFQAQYDAAZiAlABMAAAAQUCAAVSAVABBwQA
BzIDYAJQATABBwQABzIDcAJgAVABBQIABZIBUAEGAwAGggJQATAAAAEJBQAJYgXQA3ACUAEw
AAABBQIABXIBUAEIBAAIUgTgAlABMAEHAwAHYgPQAVAAAAEHBAAHMgNwAlABMAEHAwAHQgPg
AVAAAAEIBAAIcgTQAnABUAEHAwAHggPwAVAAAAEJBAAJkgXgA8ABUAEOCAAOUgrgCNAGwARw
A2ACUAEwARAJABCCDPAK4AjQBsAEcANgAlABMAAAAQcEAAdSA3ACUAEwAQgFAAhiBHADYAJQ
ATAAACEABAAAdAAAAGQDAICSBACEkgQAME0cACEAAABQWwsAoFsLAKDxGwAhAAAAfIYEAMSG
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
AGBQQUdFQkdGWExmAAAAwFIAAGgAAADqSQAAoPQCAPj//wAAAAAgAABgUEFHRVZSRkIANAAA
ADBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAwC5lZGF0YQAAgQoBAABwUwAADAEAAFJKAAAA
AAAAAAAAAAAAAEAAAEBQQUdFREFUQQDdAAAAgFQAAEwAAABeSwAAAAAAAAAAAAAAAABAAADA
UEFHRVZSRkMeKQAAAGBVAAAqAAAAqksAAAAAAAAAAAAAAAAAQAAAQFBBR0VWUkZEUBIAAACQ
VQAAFAAAANRLAAAAAAAAAAAAAAAAAEAAAMBJTklUAAAAAA53BQAAsFUAAHgFAADoSwAAAAAA
AAAAAAAAAAAgAADiLnJzcmMAAABAXwMAADBbAABgAwAAYFEAAAAAAAAAAAAAAAAAQAAAQC5y
ZWxvYwAAhCAAAACQXgAAIgAAAMBUAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVFJHRER1bXBCbG9iEAAAALEdAPAgAAAAiEjIVNEB
Hky+1igsmCQTAwAQAAAAAAAAAAAAAJ1MTVQslNVGv1DfXNlSSlBIEN8CgPr//7gPAADADoQO
SAAAAEhEQXVkQnVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExSHAABAAAAAAAKAGYf
0tFW7ig5dz9gN9IjhX1MUjQAAgAAAAAADgBjTFCffVNJZYVAvXB3dgEASAMh/X8FAAAQK+AC
gPr//wUBAAAAAQAATFIkAAMAAAAcAFQAd/p5j+/a3gVZfKRoubDwnwAAAAABAAAATFIkAAQA
AABQADcAd/p5j+/a3gVZfKRoubDwnwEAAADTAgDATFI4AAUAAAB0AA4Ad/p5j+/a3gVZfKRo
ubDwn0gDIf1/BQAAECvgAoD6//8AMOLcAoD6//8AAABMUjQABgAAAJgADgBjTFCffVNJZYVA
vXB3dgEASAMh/X8FAAAQK+ACgPr//wYBAAAFAQAATFI0AAcAAADQAA4AY0xQn31TSWWFQL1w
d3YBAEgDIf1/BQAAECvgAoD6//8IAQAABgEAAExSJAAIAAAABAEkAGNMUJ99U0llhUC9cHd2
AQBIAyH9fwUAAExSNAAJAAAAOAEVAEVriqCK1uNRSKs26N0yJTlIAyH9fwUAABAr4AKA+v//
AQUAAAAFAABMUjQACgAAAFwBEQCqZGaapaaDMAFvU2JJkMO1SAMh/X8FAAAQK+ACgPr//wIA
AAABAAAATFI0AAsAAACQAQ8A+FJLNRS6fKjM5O7Upp4L5EgDIf1/BQAAECvgAoD6//8WAwAA
AAMAAExSNAAMAAAAxAEPAPhSSzUUunyozOTu1KaeC+RIAyH9fwUAABAr4AKA+v//DwMAABYD
AABMUjQADQAAAPgBDwD4Uks1FLp8qMzk7tSmngvkSAMh/X8FAAAQK+ACgPr//xADAAAPAwAA
TFI0AA4AAAAsAg8A+FJLNRS6fKjM5O7Upp4L5EgDIf1/BQAAECvgAoD6//8RAwAAEAMAAExS
NAAPAAAAYAIPAPhSSzUUunyozOTu1KaeC+RIAyH9fwUAABAr4AKA+v//EgMAABEDAABMUiQA
EAAAAJQCHwD3GObi8t2KFaTU0OfXhtnKSAMh/X8FAABMUjQAEQAAAMgCDAAJ2QuVn04AjF2D
lIEg+6dtSAMh/X8FAAAQK+ACgPr//wIAAAABAAAATFI0ABIAAADsAgwACdkLlZ9OAIxdg5SB
IPunbUgDIf1/BQAAECvgAoD6//8EAAAAAgAAAExSNAATAAAAIAMRAKpkZpqlpoMwAW9TYkmQ
w7VIAyH9fwUAABAr4AKA+v//AwAAAAIAAABMUjQAFAAAAFQDEQCqZGaapaaDMAFvU2JJkMO1
SAMh/X8FAAAQK+ACgPr//wUAAAADAAAATFI0ABUAAACIAw8A+FJLNRS6fKjM5O7Upp4L5EgD
If1/BQAAECvgAoD6//8TAwAAEgMAAExSNAAWAAAAvAMPAPhSSzUUunyozOTu1KaeC+RIAyH9
fwUAABAr4AKA+v//BwMAABMDAABMUjQAFwAAAPADFQBFa4qgitbjUUirNujdMiU5SAMh/X8F
AAAQK+ACgPr//4MFAAABBQAATFI0ABgAAAAkBBUARWuKoIrW41FIqzbo3TIlOUgDIf1/BQAA
ECvgAoD6//8CBQAAgwUAAExSNAAZAAAAWAQVAEVriqCK1uNRSKs26N0yJTlIAyH9fwUAABAr
4AKA+v//BAUAAAIFAABMUjQAGgAAAIwEFQBFa4qgitbjUUirNujdMiU5SAMh/X8FAAAQK+AC
gPr//2UFAAAEBQAATFI0ABsAAADABBEAqmRmmqWmgzABb1NiSZDDtUgDIf1/BQAAECvgAoD6
//8FAAAABQAAAExSNAAcAAAA9AQOAGNMUJ99U0llhUC9cHd2AQBIAyH9fwUAABAr4AKA+v//
CQEAAAgBAABMUjQAHQAAACgFDgBjTFCffVNJZYVAvXB3dgEASAMh/X8FAAAQK+ACgPr//xkB
AAAJAQAATFI4AB4AAABcBQ4Ad/p5j+/a3gVZfKRoubDwn0gDIf1/BQAAECvgAoD6//8UMOLc
AoD6//8AAABMUjgAHwAAAJAFFACm+WnhDObyhDKxetHGnU94SAMh/X8FAAAQK+ACgPr//wAA
AAAw4twCgPr//0xSPAAgAAAAyAUPAHf6eY/v2t4FWXykaLmw8J9IAyH9fwUAABAr4AKA+v//
BwAAAAAw4twCgPr//wAAAExSNAAhAAAAAAYOAGNMUJ99U0llhUC9cHd2AQDYgvn8fwUAAPBU
CwOA+v//BQEAAAABAABMUiwAIgAAADwGLgD2n54G3VrP8pv7PNZb/Hha2IL5/H8FAADwVAsD
gPr//0xSMAAjAAAAcAYWAHf6eY/v2t4FWXykaLmw8J9IAyH9fwUAAAEAAABQ9VIAoPj//0xS
LAAkAAAAnAYUAEKtiSFJjUM8cKUDAZNQDgzYgvn8fwUAAAUAAAC7AADATFI8ACUAAADMBg8A
d/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAIC3cwKA+v//AAAATFI4ACYA
AAD4Bg4Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8AYJz1AoD6//8AAABMUjQA
JwAAADQHDgBjTFCffVNJZYVAvXB3dgEA2IL5/H8FAADwVAsDgPr//wYBAAAFAQAATFI0ACgA
AABsBw4AY0xQn31TSWWFQL1wd3YBANiC+fx/BQAA8FQLA4D6//8IAQAABgEAAExSNAApAAAA
oAcKAOxJor3G/XyMhFNDQQoygUjYgvn8fwUAAPBUCwOA+v//AQUAAAAFAABMUjQAKgAAANQH
DwD4Uks1FLp8qMzk7tSmngvk2IL5/H8FAADwVAsDgPr//xYDAAAAAwAATFI0ACsAAAAICA8A
+FJLNRS6fKjM5O7Upp4L5NiC+fx/BQAA8FQLA4D6//8XAwAAFgMAAExSNAAsAAAAPAgPAPhS
SzUUunyozOTu1KaeC+TYgvn8fwUAAPBUCwOA+v//DwMAABcDAABMUjQALQAAAHAIDwD4Uks1
FLp8qMzk7tSmngvk2IL5/H8FAADwVAsDgPr//xADAAAPAwAATFI0AC4AAACkCA8A+FJLNRS6
fKjM5O7Upp4L5NiC+fx/BQAA8FQLA4D6//8RAwAAEAMAAExSNAAvAAAA2AgPAPhSSzUUunyo
zOTu1KaeC+TYgvn8fwUAAPBUCwOA+v//EgMAABEDAABMUiQAMAAAAAwJHwD3GObi8t2KFaTU
0OfXhtnK2IL5/H8FAABMUjQAMQAAAEAJDwD4Uks1FLp8qMzk7tSmngvk2IL5/H8FAADwVAsD
gPr//xMDAAASAwAATFI0ADIAAABkCQ8A+FJLNRS6fKjM5O7Upp4L5NiC+fx/BQAA8FQLA4D6
//8JAwAAEwMAAExSNAAzAAAAmAkKAOxJor3G/XyMhFNDQQoygUjYgvn8fwUAAPBUCwOA+v//
ZQUAAAEFAABMUjQANAAAAMwJCgDsSaK9xv18jIRTQ0EKMoFI2IL5/H8FAADwVAsDgPr//wIF
AABlBQAATFI0ADUAAAAACg4AY0xQn31TSWWFQL1wd3YBANiC+fx/BQAA8FQLA4D6//8JAQAA
CAEAAExSNAA2AAAANAoOAGNMUJ99U0llhUC9cHd2AQDYgvn8fwUAAPBUCwOA+v//GQEAAAkB
AABMUjgANwAAAGgKDgB3+nmP79reBVl8pGi5sPCf2IL5/H8FAADwVAsDgPr//xRgnPUCgPr/
/wAAAExSOAA4AAAAnAoXAEKtiSFJjUM8cKUDAZNQDgzYgvn8fwUAAPBUCwOA+v//AAAAAGCc
9QKA+v//TFI8ADkAAADUCg8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HAAAA
AGCc9QKA+v//AAAATFI8ADoAAAAMCw8Ad/p5j+/a3gVZfKRoubDwn0gDIf1/BQAAECvgAoD6
//8HAAAAAABGBQOA+v//AAAATFIwADsAAABICxYAd/p5j+/a3gVZfKRoubDwn0gDIf1/BQAA
AQAAAJAcUwCg+P//TFI8ADwAAACECw8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6
//8HAAAAANDnEgOA+v//AAAATFI8AD0AAAC0Cw4AvLSdpf5uyZ+gEH7sJle55khEQXVkaW9E
ZXZpY2VFeHRlbnNpb24A2IL5/H8FAAAATFI8AD4AAADwCw4AvLSdpf5uyZ+gEH7sJle55khE
QXVkaW9EZXZpY2VFeHRlbnNpb24A2IL5/H8FAAAATFI8AD8AAAAsDA8Ad/p5j+/a3gVZfKRo
ubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAABl4gKA+v//AAAATFI8AEAAAABoDA8Ad/p5j+/a
3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAABl4gKA+v//AAAATFI8AEEAAACkDA8A
d/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAABl4gKA+v//AAAATFI8AEIA
AADgDA8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAABl4gKA+v//AAAA
TFI8AEMAAAAcDQ8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAABl4gKA
+v//AAAATFI8AEQAAABYDQ8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6//8HBAAA
AGA4BQOA+v//AAAATFI8AEUAAACUDQ8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA8FQLA4D6
//8HBAAAAABl4gKA+v//AAAATFI8AEYAAADQDQ8Ad/p5j+/a3gVZfKRoubDwn9iC+fx/BQAA
8FQLA4D6//8HBAAAAGA4BQOA+v//AAAATFI8AEcAAAAMDg8Ad/p5j+/a3gVZfKRoubDwn9iC
+fx/BQAA8FQLA4D6//8HBAAAAGA4BQOA+v//AAAATFI8AEgAAABIDg8Ad/p5j+/a3gVZfKRo
ubDwn9iC+fx/BQAA8FQLA4D6//8HBAAAAGA4BQOA+v//AAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAgAAAAjwBcvDoe10SYjYb2iExnWGEBAAAAAAAABwAAAAACBCRZAQAA
ABgAAAECAOgDAIAACAAAAAAAAAQEBv//WGVuADQuNi4wLXJjADA5LzA0LzIwMTUAAAEbAAEB
AgMEAAAAAAAAAAAAAAAAAAAAAAYAAFhlbgBIVk0gZG9tVQA0LjYuMC1yYwAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAAAAMNAAMBAQAAAAMDAwJYZW4AAAQaAQQBAwEC
5QYBAP/7iRcAAAAAZApkCkEBQ1BVIDEASW50ZWwAAAQaAgQBAwEC5QYBAP/7iRcAAAAAZApk
CkEBQ1BVIDIASW50ZWwAAAsFAAsBWGVuAAAQDwAQAQMGAAAeAP7/AQAAABEVABEAEAAAQABA
AIAHCQABAAcAAERJTU0gMAAAEw8AEwAAAAD//x0AABABAAAUEwAUAAAAAP//HQAAEQATAQAA
AAAgCwAgAAAAAAAAAAAAfwQAfwAAAAAAAAAAACAAAACJw3psE0PcR580qIAKD7VsbgIAAAAA
AAACAAAACgAAAH4ATQBIAHoAAAAEAAAABAAAAGQKAAAsAAAAQwBvAG0AcABvAG4AZQBuAHQA
IABJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAADAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAA
QwBvAG4AZgBpAGcAdQByAGEAdABpAG8AbgAgAEQAYQB0AGEAAAAJAAAAEAAAAP//////////
AAAAAAAAAAAWAAAASQBkAGUAbgB0AGkAZgBpAGUAcgAAAAEAAABKAAAASQBuAHQAZQBsADYA
NAAgAEYAYQBtAGkAbAB5ACAANgAgAE0AbwBkAGUAbAAgADMAMAAgAFMAdABlAHAAcABpAG4A
ZwAgADUAAAAoAAAAUAByAG8AYwBlAHMAcwBvAHIATgBhAG0AZQBTAHQAcgBpAG4AZwAAAAEA
AABgAAAASQBuAHQAZQBsACgAUgApACAAWABlAG8AbgAoAFIAKQAgAEMAUABVACAAIAAgACAA
IAAgACAAIAAgACAAIABYADMANAA1ADAAIAAgAEAAIAAyAC4ANgA3AEcASAB6AAAAIgAAAFUA
cABkAGEAdABlACAAUwBpAGcAbgBhAHQAdQByAGUAAAADAAAACAAAAAAAAAAHAAAAHAAAAFUA
cABkAGEAdABlACAAUwB0AGEAdAB1AHMAAAAEAAAABAAAAAcAAAAiAAAAVgBlAG4AZABvAHIA
SQBkAGUAbgB0AGkAZgBpAGUAcgAAAAEAAAAaAAAARwBlAG4AdQBpAG4AZQBJAG4AdABlAGwA
AAAMAAAATQBTAFIAOABCAAAACwAAAAgAAAAAAAAABwAAAAAAIAAAAG/APdCO2MVEuir64DUX
LRmYAwAAAAAAAAAAAAAAAAAAAAAAAAsAAABHZW51bnRlbGluZUkLAAAAR2VudW50ZWxpbmVJ
AAAAAAEAAADlBgEAAAggAgEiuIH/+4sX5QYBAAAIIAABIriB//uLFwAAAAACAAAAAVoDVeSy
8AAAAAAALCHKCQFaA1XksvAAAAAAACwhygkAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAE
AAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
CgAAAAAAAAdEAAAAAAAAAAAAAAAAAAAHRAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAA
AAACAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAXAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQA
AAAAAAAAAAABAAAAiwAAAAAAAAAHAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQAAAIAA
AMABDQAAAAAAAAAAAAAAAAAAAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAgAAAAAAAAAAA
AAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAAAAIECgAAAAAAAAAAAEA
AAAACBAoAAAAAAIAAIBJbnRlbChSKSBYZW9uKFIpSW50ZWwoUikgWGVvbihSKQAAAAADAACA
IENQVSAgICAgICAgICAgWCBDUFUgICAgICAgICAgIFgAAAAABAAAgDM0NTAgIEAgMi42N0dI
egAzNDUwICBAIDIuNjdHSHoAAAAAAAUAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAGAACAAAAAAAAAAABAYAABAAAAAAAAAAAAAAAAQGAAAQAAAAAAAAAABwAAgAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAkMAAAAAAAAAAAAAAAAAAA
JDAAAAAAAAAAAAAAAAAAACAAAADSQDvooLBCSKvqccnjRj3RQAAAAAAAAAAAAAAAQVBJQ2AE
AAACsFhlbgAAAEZBQ1D0AAAABEBYZW4AAABXQUVUKAAAAAFWWGVuAAAASFBFVDgAAAAB0lhl
bgAAACAAAABMSn74ocUvTb/w1d5jpeTDMAIAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAAAAA
AABXZGYwMTAwMAAAAAAAAAAApJwPAAAAAAACAAAAAAAAAAEAAABAvhkCgPr//wEAAAAJAAAA
sB0AAG1zaXNhZHJ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFC3bwGA+v//AQAAAAkA
AACwHQAAdmRydnJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAMCqBAoD6//8BAAAA
BQAAAHAXAABzdG9yZmx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKpAABAmbACgPr//wEA
AAAJAAAAsB0AAGNkcm9tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqpwPAFDs3gKA+v//
AQAAAAcAAABxFwAASERBdWRCdXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA8DbgAoD6
//8BAAAACQAAALAdAABWaXJ0aW9TZXJpYWwAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAXd4C
gPr//wEAAAAJAAAAsB0AAGludGVscHBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAMDT
4gKA+v//AQAAAAkAAACwHQAAQ29tcG9zaXRlQnVzAAAAAAAAAAAAAAAAAAAAAAAAAACiqQAA
QBLkAoD6//8BAAAACQAAALAdAAB1bWJ1cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA=
--------------000206070401040004060301
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------000206070401040004060301--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:33:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:33:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtjy-0001ej-P6; Mon, 07 Sep 2015 10:33:34 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZYtjw-0001ee-7Z
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 10:33:33 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	6A/18-03763-BF76DE55; Mon, 07 Sep 2015 10:33:31 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441622010!41942194!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23335 invoked from network); 7 Sep 2015 10:33:30 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 10:33:30 -0000
Received: by wicgb1 with SMTP id gb1so40627528wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 07 Sep 2015 03:33:29 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=ngD/5pUrSj20KHovhemmDhLVo2Ak1sNeKemg/MVoarQ=;
	b=lPmOZ2PRFKgtQAil1YXlrypEARrfAT3uZ/PnyYxSrKp93t/ixXQMt9HRzjJTP0P0gC
	u7X0lYv21mn3xmJfuXOFe+odLXbmuc5kaXReLNdyLgNaxqTxhTw/P8lwBVq1g2euXoIA
	Negm0j/12iWe6oX1bh6FcgFVqHOzV+3B2JVuM+JtYKBqiPIYbw5kX6wDhXRBGlw83UsA
	oeGSzRbo3lV3aiSFOf/DmBvID5ndjZ9LWevNoevLfpDIruX++oMEioq+uyR/mFze3tbX
	7de15rwEuKPhx/57Tc/7t3fCCHLOuoKYlGcW5hPiZh/TKQmYeROUo1dqEc3BkZ8FKC08
	SfGQ==
X-Gm-Message-State: ALoCoQmnrHOssiSTX/UXfjPbyTUnHGm6lrnZTWYZ/W8lIWvgiW+H1vCgqFjajyScu3N7oVlgyFIO
X-Received: by 10.194.82.37 with SMTP id f5mr37005733wjy.36.1441622009786;
	Mon, 07 Sep 2015 03:33:29 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	mc18sm19404294wic.23.2015.09.07.03.33.20
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 07 Sep 2015 03:33:28 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55ED67EF.20008@m2r.biz>
Date: Mon, 7 Sep 2015 12:33:19 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------000206070401040004060301"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------000206070401040004060301
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Il 07/09/2015 11:26, Paul Durrant ha scritto:
> Fabio,
>
>    Can you confirm that you don't see any problem if you use standard IDE emulated disks? I certainly don't.
>
>    Paul
WIth ide instead ahci was with same results but about udev problem now 
seems I found the cause, seems the dom0 kernel.
With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy 
repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64 
version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
Initially new pv drivers was with network not working with kernel <3.14 
but after seems was solved (I don't know the exactly commit) but seems 
that xen without udev file a newer kernel is still needed.
With 3.16 kernel I had other problems instead, for example with 
balloning (even if should not be used).
With second test with kernel 3.16 I tried to remove a workaround of 
balloning problem (dom0_mem=2G,max:3G in grub.cfg instead 
dom0_mem=2G,max:2G), I nomore saw kern.log spam but W7 domU crashed at boot.
Another strange things is even if with trace enabled don't show pv 
drivers debug lines with 3.16 kernel (on older tests with 3.16 did if I 
remember good)
In attachment the windows minidump.
I'm going crazy with these too many problems and haven't time to do all 
useful tests :(
Can you advice me about more useful tests for try to found/solve these 
problems?

Thanks for any reply and sorry for my bad english.

--------------000206070401040004060301
Content-Type: application/octet-stream;
 name="090715-21044-01.dmp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="090715-21044-01.dmp"

UEFHRURVNjQPAAAAsR0AAACA9BIAAAAAePLMAgD4//8wV8YCAPj//yB0xAIA+P//ZIYAAAIA
AAA7AAAAUEFHRQUAAMAAAAAAxaeoAgD4//8AbOgBgPj//wAAAAAAAAAAUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0XwAMECAPj//1BBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAQAIAfAAAQACsAKwBTACsAGACCAgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGToAYD4//87AAAA
AAAAAAUAAMAAAAAAHGO+AgD4//84Y+gBgPj//wAAAAAAAAAAAOChAgD4//8AAAAAAAAAAMWn
qAIA+P//AGzoAYD4//8AAAAAAAAAADhl6AGA+P//UxupAgD4//9oWsoCAPj//0AXqQIA+P//
AAAAAAAAAADAKKkCAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAwAAgAEAAAAAAAAAAAAAAMAoqQIA+P//AAAAAFBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0UEAAAA
UEFHRbAaBAAAAAAA4IvQgFTp0AFQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRYAukQsAAAAA/wwAAFBB
R0UBAAAAEAEAAAAAAABQAEdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdF
UEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBB
R0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0VQQUdFUEFHRVBBR0UAAQAAAAAEAPz/AwBIAwAA
AA8AAIAgAADQIAAAuCEAALhuAACgcwAASHgAAAAQAACIiwAAdwAAAHjOAACwJwAAAAAAAP//
//84Y+gBgPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASIgAAEADAAAo9gAA
EAAAAAEAAABQAAAAAAAAAAAAAAAAAAAAAAAAAHh3BQAAAAAAdh4AAAAAAAAAAAAAAAAAAAAA
AAAAAAAA/pcBAAAAAADolwEAAAAAAHD+HQAAAAAABAAAAAAAAAAYABgAAAAAAAAAAAAAAAAA
YwByAGEAcwBoAGQAbQBwAC4AcwB5AHMAAABDAYD4//8A4EMBgPj//xgAGAAAAAAAAAAAAAAA
AABkAHUAbQBwAF8AcABjAGkAaQBkAGUAeAAA4EMBgPj//wCgRAGA+P//GAAYAAAAAAAAAAAA
AAAAAGQAdQBtAHAAXwBtAHMAYQBoAGMAaQAuAACgRAGA+P//AFBFAYD4//8YABgAAAAAAAAA
AAAAAAAAZAB1AG0AcABfAGQAdQBtAHAAZgB2AGUAAFBFAYD4//8AgEYBgPj//4AfAAAAAAAA
YNA+A4D6//8AAAAAAAAAAMD8wQIA+P//AAAAAAAAAACwfegBgPj//wAAAAAAAAAAAAAAAAAA
AAAxAAWAAAAAABMJD/3+BwAAAID0EgAAAAD4BgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAA8A///wAAAAAABAAAAAAAAAAAAAAAAH8AAJAOBAD4//8AAAAAAAD/D4CQ
DgQA+P//QAAAAIAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAA8AEACAHwAAEAArACsAUwArABgAggIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBk6AGA+P//OwAAAAAAAAAFAADAAAAAABxjvgIA+P//
OGPoAYD4//8AAAAAAAAAAADgoQIA+P//AAAAAAAAAADFp6gCAPj//wBs6AGA+P//AAAAAAAA
AAA4ZegBgPj//1MbqQIA+P//aFrKAgD4//9AF6kCAPj//wAAAAAAAAAAwCipAgD4//8AAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAU0CAAAAAAAAAAAAAAAAAAAAAAAA
UG9vTAACAAAgnLwCAPj//+CQvAIA+P//4D7BAgD4//+APsECAPj//z4AAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTBAAAAAgnLwC
APj//+CQvAIA+P//oCfBAgD4//9AJ8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTCAAAAAgnLwCAPj//+CQvAIA+P//
ACjBAgD4//+gJ8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTDAAAAAgnLwCAPj//+CQvAIA+P//YCjBAgD4//8AKMEC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTEAAAAAgnLwCAPj//+CQvAIA+P//wCjBAgD4//9gKMECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTFAA
AAAgnLwCAPj//+CQvAIA+P//ICnBAgD4///AKMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTGAAAAAgnLwCAPj//+CQ
vAIA+P//gCnBAgD4//8gKcECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTHAAAAAgnLwCAPj//+CQvAIA+P//4CnBAgD4
//+AKcECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTIAAAAAgnLwCAPj//+CQvAIA+P//QCrBAgD4///gKcECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTJAAAAAgnLwCAPj//+CQvAIA+P//oCrBAgD4//9AKsECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTKAAAAAgnLwC
APj//+CQvAIA+P//ACvBAgD4//+gKsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTLAAAAAgnLwCAPj//+CQvAIA+P//
YCvBAgD4//8AK8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTMAAAAAgnLwCAPj//+CQvAIA+P//wCvBAgD4//9gK8EC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTNAAAAAgnLwCAPj//+CQvAIA+P//ICzBAgD4///AK8ECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTOAA
AAAgnLwCAPj//+CQvAIA+P//gCzBAgD4//8gLMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTPAAAAAgnLwCAPj//+CQ
vAIA+P//4CzBAgD4//+ALMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTAABAAAgnLwCAPj//+CQvAIA+P//QC3BAgD4
///gLMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTBABAAAgnLwCAPj//+CQvAIA+P//oC3BAgD4//9ALcECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTCABAAAgnLwCAPj//+CQvAIA+P//AC7BAgD4//+gLcECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTDABAAAgnLwC
APj//+CQvAIA+P//YC7BAgD4//8ALsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTEABAAAgnLwCAPj//+CQvAIA+P//
wC7BAgD4//9gLsECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAA
AAAAAAAAAAAAAAAAAAABAAAAUG9vTFABAAAgnLwCAPj//+CQvAIA+P//IC/BAgD4///ALsEC
APj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAA
AAABAAAAUG9vTGABAAAgnLwCAPj//+CQvAIA+P//gC/BAgD4//8gL8ECAPj//wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTHAB
AAAgnLwCAPj//+CQvAIA+P//4C/BAgD4//+AL8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTIABAAAgnLwCAPj//+CQ
vAIA+P//QDDBAgD4///gL8ECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTJABAAAgnLwCAPj//+CQvAIA+P//oDDBAgD4
//9AMMECAPj//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAA
AAAAAAAAAAABAAAAUG9vTKABAAAgnLwCAPj//+CQvAIA+P//ADHBAgD4//+gMMECAPj//wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAA
UG9vTLABAAAgnLwCAPj//+CQvAIA+P//YDHBAgD4//8AMcECAPj//wAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAABAAAAQAAAAAAAAAAAAAAAAAAAAABAAAAUG9vTMABAAAgnLwC
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
AAAAAAAAAAAQs0EDgPr//xCzQQOA+v//4MS2HAAAAAAAAAAAAAAAAKhEwQIA+P//qETBAgD4
//9AJrkc/////wAAAAAAAAAACDErAYD4//8IMSsBgPj//6DnEQwAAAAAAAAAAAAAAADoRMEC
APj//+hEwQIA+P//oIxTB/////8AAAAAAAAAAAhFwQIA+P//CEXBAgD4//9gSsAc/////wAA
AAAAAAAAKEXBAgD4//8oRcECAPj//8Crwhz/////AAAAAAAAAABIRcECAPj//0hFwQIA+P//
IA3FHP////8AAAAAAAAAAPD8dQGA+v//kBY5A4D6//+AbsccAAAAAAAAAAAAAAAAiEXBAgD4
//+IRcECAPj//4Bcvwn/////AAAAAAAAAACoRcECAPj//6hFwQIA+P//M43BCf////8AAAAA
AAAAAMhFwQIA+P//yEXBAgD4//+gks4c/////wAAAAAAAAAA6EXBAgD4///oRcECAPj//wD0
0Bz/////AAAAAAAAAAAIRsECAPj//whGwQIA+P//YFXTHP////8AAAAAAAAAAEANOwOA+v//
QA07A4D6///AttUcAAAAAAAAAAAAAAAASEbBAgD4//9IRsECAPj//4AIzQn/////AAAAAAAA
AABoRsECAPj//2hGwQIA+P//yOrPCf////8AAAAAAAAAAIhGwQIA+P//iEbBAgD4//+AfnIH
/////wAAAAAAAAAAIJchA4D6//8glyEDgPr//6CATTIAAAAAAAAAAAAAAADQbXcBgPr//9Bt
dwGA+v//QA04DAAAAAAAAAAAAAAAAOhGwQIA+P//6EbBAgD4//+QXNkJ/////wAAAAAAAAAA
CEfBAgD4//8IR8ECAPj//8CkVDL/////AAAAAAAAAABwNA4DgPr//3A0DgOA+v//QMKZaggA
AAAAAAAAAAAAAEhHwQIA+P//SEfBAgD4//9AC4AH/////wAAAAAAAAAAaEfBAgD4//9oR8EC
APj//8j14gn/////AAAAAAAAAACIR8ECAPj//4hHwQIA+P//gPXkCf////8AAAAAAAAAAKhH
wQIA+P//qEfBAgD4///g6ocH/////wAAAAAAAAAAyEfBAgD4///IR8ECAPj//0BMigf/////
AAAAAAAAAADoR8ECAPj//+hHwQIA+P//oK2MB/////8AAAAAAAAAAAhIwQIA+P//CEjBAgD4
//8AD48H/////wAAAAAAAAAAkAEiA4D6//+QASIDgPr//0BlXh8AAAAAAAAAAAAAAABwqnMC
gPr//yDJwwIA+P//AN2DJgAAAAAAAAAAAAAAAGhIwQIA+P//aEjBAgD4///g024y/////wAA
AAAAAAAAiEjBAgD4//+ISMECAPj//wDZlwf/////AAAAAAAAAACoSMECAPj//6hIwQIA+P//
4PWaB/////8AAAAAAAAAAMhIwQIA+P//yEjBAgD4///pGP0J/////wAAAAAAAAAA6EjBAgD4
///oSMECAPj//2BZeDL/////AAAAAAAAAAAIScECAPj//whJwQIA+P//wLp6Mv////8AAAAA
AAAAAJjy4AKA+v//mGLgAoD6//8gHH0yAAAAAAAAAAAAAAAASEnBAgD4//9IScECAPj//4B9
fzL/////AAAAAAAAAABoScECAPj//2hJwQIA+P//4N6BMv////8AAAAAAAAAAIAQSgOA+v//
gBBKA4D6///AimwMAAAAAAAAAAAAAAAAqEnBAgD4//+oScECAPj//6ChhjL/////AAAAAAAA
AADIScECAPj//8hJwQIA+P//AAOJMv////8AAAAAAAAAADDMPgOA+v//MMw+A4D6//9gZIsy
AAAAAAAAAAAAAAAACErBAgD4//8ISsECAPj//+vkFAr/////AAAAAAAAAAAoSsECAPj//yhK
wQIA+P//gH5gCv////8AAAAAAAAAAEhKwQIA+P//SErBAgD4//8I3LkH/////wAAAAAAAAAA
MMbJAgD4//8wxskCAPj//2D0SiQAAAAAAAAAAAAAAACISsECAPj//4hKwQIA+P//gBYeCv//
//8AAAAAAAAAAPBGfgGA+v//8EZ+AYD6//8gt08kAAAAAAAAAAAAAAAAwOfJAgD4//8g2cMC
APj//4BYhAwAAAAAAAAAAAAAAADoSsECAPj//+hKwQIA+P//iLslCv////8AAAAAAAAAAAhL
wQIA+P//CEvBAgD4//89dSkK/////wAAAAAAAAAAKEvBAgD4//8oS8ECAPj//2B6Kgr/////
AAAAAAAAAAC4MSsBgPj//2A3TwGA+P//gJOlMgAAAAAAAAAAAAAAAECiWAGA+P//cKFYAYD4
///g9KcyAAAAAAAAAAAAAAAAiEvBAgD4//+IS8ECAPj//0BWqjL/////AAAAAAAAAACoS8EC
APj//6hLwQIA+P//4BbUB/////8AAAAAAAAAABA4TwGA+P//4MfDAgD4//8AefoOAAAAAAAA
AAAAAAAA6EvBAgD4///oS8ECAPj//6iaOAr/////AAAAAAAAAACgpGgDgPj//6CkaAOA+P//
IKyPKwAAAAAAAAAAAAAAAChMwQIA+P//KEzBAgD4//8gPbYy/////wAAAAAAAAAASEzBAgD4
//9ITMECAPj//4CeuDL/////AAAAAAAAAAAwTN0CgPr//zBM3QKA+v//YCqVKwAAAAAAAAAA
AAAAAIhMwQIA+P//iEzBAgD4//9WckQK/////wAAAAAAAAAAqEzBAgD4//+oTMECAPj//yAk
SAr/////AAAAAAAAAADITMECAPj//8hMwQIA+P//ACTCMv////8AAAAAAAAAADD8bgGA+v//
QFFBA4D6//+gqq0MAAAAAAAAAAAAAAAAmJKOAoD6//9AYRwDgPr//4BQrwwAAAAAAAAAAAAA
AAAoTcECAPj//yhNwQIA+P//IEjJMv////8AAAAAAAAAAEhNwQIA+P//SE3BAgD4//+Aqcsy
/////wAAAAAAAAAAQAHsAoD6//9AAewCgPr//+AKzjIAAAAAAAAAAAAAAACITcECAPj//4hN
wQIA+P//QGzQMv////8AAAAAAAAAAKhNwQIA+P//qE3BAgD4//9AiWQd/////wAAAAAAAAAA
QFFDA4D6//+wGEQDgPr//6DqZh0AAAAAAAAAAAAAAAAwfD4DgPr//zB8PgOA+v//AExpHQAA
AAAAAAAAAAAAAAhOwQIA+P//CE7BAgD4///Q4f8H/////wAAAAAAAAAAKE7BAgD4//8oTsEC
APj//yBT3DL/////AAAAAAAAAABQcngBgPr//1ByeAGA+v//gLTeMgAAAAAAAAAAAAAAADCY
/AKA+v//MBxKA4D6//+A0XIdAAAAAAAAAAAAAAAAMPxLA4D6//8w/EsDgPr//0B34zIAAAAA
AAAAAAAAAACoTsECAPj//6hOwQIA+P//gDBtCv////8AAAAAAAAAAMhOwQIA+P//yE7BAgD4
//8AOugy/////wAAAAAAAAAA6E7BAgD4///oTsECAPj//2Cb6jL/////AAAAAAAAAAAIT8EC
APj//whPwQIA+P//wPzsMv////8AAAAAAAAAAChPwQIA+P//KE/BAgD4//8wThUI/////wAA
AAAAAAAASE/BAgD4//9IT8ECAPj//5CvFwj/////AAAAAAAAAABoT8ECAPj//2hPwQIA+P//
0CJ7Cv////8AAAAAAAAAAIhPwQIA+P//iE/BAgD4//8AjH0K/////wAAAAAAAAAAmALeAoD6
//+YAt4CgPr//wAXpREAAAAAAAAAAAAAAADIT8ECAPj//8hPwQIA+P//wEiDCv////8AAAAA
AAAAAOhPwQIA+P//6E/BAgD4//9g8iII/////wAAAAAAAAAACFDBAgD4//8IUMECAPj//wDH
iAr/////AAAAAAAAAAAoUMECAPj//yhQwQIA+P//YCiLCv////8AAAAAAAAAAIBcBQOA+v//
gFwFA4D6//8A9d4rAAAAAAAAAAAAAAAAaFDBAgD4//9oUMECAPj//yDrjwr/////AAAAAAAA
AACIUMECAPj//4hQwQIA+P//gEySCv////8AAAAAAAAAAKhQwQIA+P//qFDBAgD4//+Q8JIK
/////wAAAAAAAAAAUN16AYD6//8QQMICAPj//+DkHmYBAAAAAAAAAAAAAADoUMECAPj//+hQ
wQIA+P//oHCZCv////8AAAAAAAAAAAhRwQIA+P//CFHBAgD4//+wFJoK/////wAAAAAAAAAA
KFHBAgD4//8oUcECAPj//4AQnAr/////AAAAAAAAAABIUcECAPj//0hRwQIA+P//h309CP//
//8AAAAAAAAAAGhRwQIA+P//aFHBAgD4//+IwaEK/////wAAAAAAAAAAiFHBAgD4//+IUcEC
APj//1CIQgj/////AAAAAAAAAACoUcECAPj//6hRwQIA+P//4LinCv////8AAAAAAAAAAMhR
wQIA+P//yFHBAgD4///gUkcI/////wAAAAAAAAAAIPdLA4D6//8g90sDgPr//8AT9AoAAACA
AAAAAAAAAAAIUsECAPj//whSwQIA+P//IDetCv////8AAAAAAAAAAChSwQIA+P//KFLBAgD4
//9gPrEK/////wAAAAAAAAAA2KCWAoD6///YoJYCgPr//+AZ1hEAAAAAAAAAAAAAAABoUsEC
APj//2hSwQIA+P//iMy0Cv////8AAAAAAAAAAIhSwQIA+P//iFLBAgD4//9Q87YK/////wAA
AAAAAAAAqFLBAgD4//+oUsECAPj//6CwuAr/////AAAAAAAAAADIUsECAPj//8hSwQIA+P//
8Ge7Cv////8AAAAAAAAAAOhSwQIA+P//6FLBAgD4//9wF74K/////wAAAAAAAAAACFPBAgD4
//8IU8ECAPj//yA8wQr/////AAAAAAAAAAAoU8ECAPj//yhTwQIA+P//YEnECv////8AAAAA
AAAAAEhTwQIA+P//SFPBAgD4//+Al8QK/////wAAAAAAAAAAcJ/YAoD6//9wn9gCgPr//wCB
GywAAAAAAAAAAAAAAACIU8ECAPj//4hTwQIA+P//ALLKCv////8AAAAAAAAAAKhTwQIA+P//
qFPBAgD4//+gD0Uz/////wAAAAAAAAAAyFPBAgD4///IU8ECAPj//0Aw0Ar/////AAAAAAAA
AADoU8ECAPj//+hTwQIA+P//oJHSCv////8AAAAAAAAAAAhUwQIA+P//CFTBAgD4//8A89QK
/////wAAAAAAAAAAUGw5A4D6//9QbDkDgPr//wBBcqEFAAAAAAAAAAAAAABIVMECAPj//0hU
wQIA+P//gBnZCv////8AAAAAAAAAAGhUwQIA+P//aFTBAgD4//8gF9wK/////wAAAAAAAAAA
iFTBAgD4//+IVMECAPj//zC73Ar/////AAAAAAAAAACoVMECAPj//6hUwQIA+P//sGrfCv//
//8AAAAAAAAAAMhUwQIA+P//yFTBAgD4//8QzOEK/////wAAAAAAAAAA6FTBAgD4///oVMEC
APj//3At5Ar/////AAAAAAAAAAAIVcECAPj//whVwQIA+P//0BHmCv////8AAAAAAAAAAChV
wQIA+P//KFXBAgD4//8goGEz/////wAAAAAAAAAASFXBAgD4//9IVcECAPj//8DA7Ar/////
AAAAAAAAAABoVcECAPj//2hVwQIA+P//8LLtCv////8AAAAAAAAAAIhVwQIA+P//iFXBAgD4
//+AbFEN/////wAAAAAAAAAAqFXBAgD4//+oVcECAPj//7B18gr/////AAAAAAAAAADIVcEC
APj//8hVwQIA+P//0DT1Cv////8AAAAAAAAAAODTyQIA+P//4NPJAgD4//9g6G8zAAAAAAAA
AAAAAAAAYCpKA4D6//9gKkoDgPr//8BJcjMAAAAAAAAAAAAAAAAoVsECAPj//yhWwQIA+P//
IKt0M/////8AAAAAAAAAAEhWwQIA+P//SFbBAgD4//+ADHcz/////wAAAAAAAAAAaFbBAgD4
//9oVsECAPj//+BteTP/////AAAAAAAAAACIVsECAPj//4hWwQIA+P//gJoCC/////8AAAAA
AAAAAKhWwQIA+P//qFbBAgD4//+gMH4z/////wAAAAAAAAAAQKFBA4D6//9AQT8DgPr//wCS
gDMAAAAAAAAAAAAAAADoVsECAPj//+hWwQIA+P//QEsKC/////8AAAAAAAAAAEDHwwIA+P//
QMfDAgD4///gkEJiCAAAAAAAAAAAAAAAKFfBAgD4//8oV8ECAPj///1WDgv/////AAAAAAAA
AADgXsQCAPj//+BexAIA+P//IMFHIAIAAAAAAAAAAAAAAGhXwQIA+P//aFfBAgD4///IIhQL
/////wAAAAAAAAAAiFfBAgD4//+IV8ECAPj//4AiFgv/////AAAAAAAAAACoV8ECAPj//6hX
wQIA+P//4PoZC/////8AAAAAAAAAACDrhQKA+v//IOuFAoD6///AF8rxAgAAAAAAAAAAAAAA
6FfBAgD4///oV8ECAPj//6C9Hgv/////AAAAAAAAAAAIWMECAPj//whYwQIA+P//AB8hC///
//8AAAAAAAAAAKB0OwOA+v//4K6HAoD6//9g5oMNAAAAAAAAAAAAAAAASFjBAgD4//9IWMEC
APj//8BkJQv/////AAAAAAAAAABoWMECAPj//2hYwQIA+P//IEMoC/////8AAAAAAAAAAIhY
wQIA+P//iFjBAgD4//9QNSkL/////wAAAAAAAAAAqFjBAgD4//+oWMECAPj//6DyKgv/////
AAAAAAAAAADIWMECAPj//8hYwQIA+P//QKdsBv////8AAAAAAAAAAOhYwQIA+P//6FjBAgD4
//9wWTAL/////wAAAAAAAAAACFnBAgD4//8IWcECAPj//9C6Mgv/////AAAAAAAAAAAoWcEC
APj//yhZwQIA+P//AKc0C/////8AAAAAAAAAAEhZwQIA+P//SFnBAgD4//+QfTcL/////wAA
AAAAAAAAaFnBAgD4//9oWcECAPj///DeOQv/////AAAAAAAAAACgRUsDgPr//6BFSwOA+v//
wHHEvQAAAAAAAAAAAAAAAKhZwQIA+P//qFnBAgD4///gEEAL/////wAAAAAAAAAAyFnBAgD4
///IWcECAPj//xADQQv/////AAAAAAAAAADoWcECAPj//+hZwQIA+P//cGRDC/////8AAAAA
AAAAAAhawQIA+P//CFrBAgD4//+gbeQI/////wAAAAAAAAAAKFrBAgD4//8oWsECAPj//2CW
SQv/////AAAAAAAAAABIWsECAPj//0hawQIA+P//wJfqCP////8AAAAAAAAAAGhawQIA+P//
aFrBAgD4///w6UwL/////wAAAAAAAAAAiFrBAgD4//+IWsECAPj//4Ba7wj/////AAAAAAAA
AAAgh6oCgPr//yCHqgKA+v//4IGzDQAAAAAAAAAAAAAAAMhawQIA+P//yFrBAgD4//9AiVML
/////wAAAAAAAAAA6FrBAgD4///oWsECAPj//2DLVQv/////AAAAAAAAAAAIW8ECAPj//whb
wQIA+P//oNhYC/////8AAAAAAAAAAChbwQIA+P//KFvBAgD4//89oloL/////wAAAAAAAAAA
SFvBAgD4//9IW8ECAPj//8ACXwv/////AAAAAAAAAABoW8ECAPj//2hbwQIA+P//CG5gC///
//8AAAAAAAAAAIhbwQIA+P//iFvBAgD4//+AZQIJ/////wAAAAAAAAAAqFvBAgD4//+oW8EC
APj//+AmZgv/////AAAAAAAAAADIW8ECAPj//8hbwQIA+P//QIhoC/////8AAAAAAAAAAOhb
wQIA+P//6FvBAgD4//+g6WoL/////wAAAAAAAAAACFzBAgD4//8IXMECAPj//wBLbQv/////
AAAAAAAAAAAoXMECAPj//yhcwQIA+P//MD1uC/////8AAAAAAAAAAEhcwQIA+P//SFzBAgD4
//8AsHEL/////wAAAAAAAAAAaFzBAgD4//9oXMECAPj//yBvdAv/////AAAAAAAAAACIXMEC
APj//4hcwQIA+P//gNB2C/////8AAAAAAAAAAGh92gKA+v//aH3aAoD6//9Abr8ZAAAAAAAA
AAAAAAAAyFzBAgD4///IXMECAPj//xDEGAn/////AAAAAAAAAADoXMECAPj//+hcwQIA+P//
ID98C/////8AAAAAAAAAAAhdwQIA+P//CF3BAgD4//+oOoAL/////wAAAAAAAAAAMJYyA4D6
//9gSkgDgPr//2Ad4w0AAAAAAAAAAAAAAABAuqECgPr//0C6oQKA+v//4FKAPQAAAAAAAAAA
AAAAAGhdwQIA+P//aF3BAgD4///wCoYL/////wAAAAAAAAAAiF3BAgD4//+IXcECAPj//1Bs
iAv/////AAAAAAAAAACoXcECAPj//6hdwQIA+P//sM2KC/////8AAAAAAAAAAKjR3QKA+v//
qKGOAoD6//9g2Ik9AAAAAAAAAAAAAAAA6F3BAgD4///oXcECAPj//3CQjwv/////AAAAAAAA
AAAgcYYCgPr//wBaHAOA+v//0PGRCwAAAAAAAAAAAAAAAKAE8gOA+P//oATyA4D4//9gwpUL
AAAAAAAAAAAAAAAASF7BAgD4//9IXsECAPj//0DuMTv/////AAAAAAAAAACAxCICgPr//4DE
IgKA+v//SK6ZCwAAAAAAAAAAAAAAAIhewQIA+P//iF7BAgD4//8AsTY7/////wAAAAAAAAAA
ANfJAgD4///YLPYDgPj//+BTnQsAAAAAAAAAAAAAAAAw/IQCgPr//zD8hAKA+v//wO2gCwAA
AAAAAAAAAAAAAIBkIwKA+v//gGQjAoD6///IM6MLAAAAAAAAAAAAAAAA4Al7AoD6///gCXsC
gPr//8BYpAsAAAAAAAAAAAAAAACAqZgBgPj//4CpmAGA+P//fe2mCwAAAAAAAAAAAAAAAEhf
wQIA+P//SF/BAgD4///AzkkJ/////wAAAAAAAAAAgAQkAoD6//+ABCQCgPr//0i5rAsAAAAA
AAAAAAAAAABYHBcDgPj//yB1IQOA+v//ALmuCwAAAAAAAAAAAAAAAKDUAQGA+P//oNQBAYD4
//+AaLELAAAAAAAAAAAAAAAAmBLlAoD6//8w/EkDgPr//0DAsgsAAAAAAAAAAAAAAADoX8EC
APj//+hfwQIA+P//oLVVCf////8AAAAAAAAAAAhgwQIA+P//CGDBAgD4//+zeFYJ/////wAA
AAAAAAAAKGDBAgD4//8oYMECAPj//4B1fBD/////AAAAAAAAAABIYMECAPj//0hgwQIA+P//
wNlcCf////8AAAAAAAAAAGhgwQIA+P//aGDBAgD4//+AN2gc/////wAAAAAAAAAAMHkGA4D6
//8gUZQCgPr//+A4CRoAAAAAAAAAAAAAAACoIeUCgPr//6gR3gKA+v//AJjAPQAAAAAAAAAA
AAAAAJDWlwGA+P//EHmYAYD4//9gnMULAAAAAAAAAAAAAAAA6GDBAgD4///oYMECAPj//6DA
aAn/////AAAAAAAAAACAhGwBgPr//4CEbAGA+v//6IXMCwAAAAAAAAAAAAAAAID0FwKA+v//
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
AAAAAPDAwgIA+P//8MDCAgD4//9LREJHQAMAAADgoQIA+P//8KaoAgD4//8AAAAAAAAAAOgB
2AAAAAEAEJ+oAgD4//8AAAAAAAAAADBXxgIA+P//IHTEAgD4//9odMQCAPj//1DEwwIA+P//
MPrMAgD4//948MwCAPj//5TwzAIA+P//oIPJAgD4//8gIskCAPj//5DJyQIA+P//cIDEAgD4
//+IgMQCAPj//wAAAAAAAAAAAAAAAAAAAAAAK80CAPj//3jyzAIA+P//AAAAAAAAAAAAAAAA
AAAAAPj5zAIA+P//xO3EAgD4///48swCAPj//wjxzAIA+P//YPDMAgD4///g8swCAPj//wAA
AAAAAAAAuPDMAgD4//8AAAAAAAAAAAAAAAAAAAAAoPHMAgD4///Q+MwCAPj//wAQAAAAAAAA
kPTMAgD4//+43cQCAPj//8DdxAIA+P//yILDAgD4///IV8YCAPj//5DdxAIA+P//AN7EAgD4
//8AAAAAAAAAAAAlzQIA+P//wCrNAgD4///AK80CAPj//8AizQIA+P//mOTAAgD4///Aq8EC
APj//wCswQIA+P//aMrDAgD4//+AZcICAPj//xDwzAIA+P//APHMAgD4//8A8MwCAPj//3B/
wgIA+P//cI/CAgD4///QAMECAPj//2x/wgIA+P//kF/GAgD4///ASr0CAPj//wAAAAAAAAAA
QPzMAgD4///o8cwCAPj//yhXxgIA+P//SFvEAgD4///c8MwCAPj//9SvwwIA+P//gFvGAgD4
//+w8sQCAPj///DdxAIA+P//yN3EAgD4//887MkCAPj//zjwzAIA+P//AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAB8ALgAOAAoAHAAZAEAAAAA6AQ4A5ACKAAATdohCAD0BfAF
uEsgASQAqAQAAAAAAADYAMECAPj//+AAwQIA+P//4JPJAgD4//+AThgAIACAAQAAAAAAAAAA
AABAABAAGAAAADMAKwAAAAAAQAAjAFMAoMTJAgD4//+gwMkCAPj//wAAAAAAAAAA6NnEAgD4
///k2cQCAPj//3AHvQIA+P//2EsAAAAAAAB4zgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgoQIA+P//AAAAAAAAAAAAwF4AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPEsVQAAAAAA
6FZjVQAAAADAzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACgAAMA+P//AAAAAAAAAAAAkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMMEBAAAAAAAacbnTAAAAAAAzwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABguQAA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJv1AAAAAAAAYYBNTQAAAABIzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwxwCA+P//AAAAAAAAAAAA8AQAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH75BAAAAAAA
N8fnTAAAAACwzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAgzACA+P//AAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGL3AAAAAAAAJ+BbSgAAAAD4zwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgzQCA+P//
AAAAAAAAAAAA4AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGH8BQAAAAAAKHr2VAAAAAA40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0wCA+P//AAAAAAAAAAAAUAcAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVlBwAAAAAA
JdGsUwAAAAB40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACw7QCA+P//AAAAAAAAAAAAIAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMrJDAAAAAAAQRbFUQAAAADQ0AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ+QCA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAF9qAQAAAAAAcKsQUAAAAAAo0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ACA+P//AAAAAAAAAAAAcAUAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPasBQAAAAAA
lJLnTAAAAAB40QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABw5QCA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdQAAAAAAAAF8FbSgAAAADQ0QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5gCA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA0yAQAAAAAA/sBbSgAAAAAo0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg5gCA+P//AAAAAAAAAAAAMAMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAxAwAAAAAA
j5LnTAAAAAB40gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQ6QCA+P//AAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEvAAAAAAAAA28pbSgAAAADQ0gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg6gCA+P//
AAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAOZEAwAAAAAAO+LEVQAAAAAo0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQ+gCA+P//AAAAAAAAAAAAgAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCFAQAAAAAA
8OHEVQAAAAB40wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABQ/ACA+P//AAAAAAAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANM0AQAAAAAAAeLEVQAAAADQ0wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABw/QCA+P//
AAAAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAMjfAQAAAAAAwRtkTwAAAAAo1AAAAAAAAAAAAAAAAAAABAAAAJcYCQD4AEYA
AAAAAPgARgAAAAAAYABHAAAAAABgAEcAAAAAAACQ2gCA+P//AMAHAAAAAAAAUAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKfAQAAAAAA
oJLnTAAAAACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAwACA+P//AAAAAAAAAAAAwAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1fBgAAAAAA65LnTAAAAADY1AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA/gCA+P//
AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKkQAQAAAAAAFMFbSgAAAAAw1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxQCA+P//AAAAAAAAAAAAAAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMWcAQAAAAAA
FMFbSgAAAACI1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADg2wCA+P//AAAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALNbAgAAAAAACy/QVAAAAADg1QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA/wCA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAALtlAAAAAAAAE8FbSgAAAAA41gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwDAGA+P//AAAAAAAAAAAAoAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFYLAwAAAAAA
tfn+UQAAAACQ1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABQDwGA+P//AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJyAQAAAAAAFqTnTAAAAADo1gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAGA+P//
AAAAAAAAAAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHoFAwAAAAAAH7nJVQAAAABA1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEgGA+P//AAAAAAAAAAAAQAYAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJW+AwAAAAAA
MkTwUgAAAACY1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADAGAGA+P//AAAAAAAAAAAAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtxAwAAAAAA97jJVQAAAADw1wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHAGA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANVbAQAAAAAAA7nJVQAAAABI2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAHQGA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALeSAAAAAAAA
yqOjSwAAAACg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAGA+P//AAAAAAAAAAAAwAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1FBQAAAAAAnJLnTAAAAAD42AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABAGA+P//
AAAAAAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAERWAQAAAAAAgcRbSgAAAABQ2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJQGA+P//AAAAAAAAAAAAkBoAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF3yGQAAAAAA
ir7hUgAAAACg2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAABgGA+P//AAAAAAAAAAAA4AUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOfpBQAAAAAANJPnTAAAAAD42QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAGA+P//
AAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAJ0AgAAAAAA6lNjVQAAAABQ2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwSAGA+P//AAAAAAAAAAAAIAcAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKugBwAAAAAA
tPfKVAAAAACg2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQTwGA+P//AAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF5LAQAAAAAA/8BbSgAAAADw2gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgUAGA+P//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJIvAQAAAAAA0u9OTwAAAABI2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAGA+P//AAAAAAAAAAAAIA8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGLDgAAAAAA
svY0UAAAAACY2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAgbwGA+P//AAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD5DBgAAAAAADXaUUgAAAADw2wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgdQGA+P//
AAAAAAAAAAAAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGQYAwAAAAAAOFhjVQAAAABI3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAGA+P//AAAAAAAAAAAA8B8AAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVfHQAAAAAA
1Fs/UwAAAACg3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADgdwGA+P//AAAAAAAAAAAAkAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALI4BQAAAAAACVs/UwAAAAD43AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwfAGA+P//
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACHtAAAAAAAAipvnTAAAAABQ3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAUQGA+P//AAAAAAAAAAAAwAQAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO0nBQAAAAAA
yJLnTAAAAACo3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABwfQGA+P//AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOngAAAAAAAAu1gISgAAAAAA3gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAVgGA+P//
AAAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFZzAwAAAAAALpjnTAAAAABY3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwfQGA+P//AAAAAAAAAAAAIAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP1dAQAAAAAA
AcJbSgAAAACo3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQfwGA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPTZAAAAAAAAfpLnTAAAAAAA3wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgWQGA+P//
AAAAAAAAAAAAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEEhBAAAAAAAXKYAUQAAAABY3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAXQGA+P//AAAAAAAAAAAAYAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3/AQAAAAAA
HcFbSgAAAACo3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAQAGA+P//AAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL4YAwAAAAAAm5LnTAAAAAAA4AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwIQGA+P//
AAAAAAAAAAAAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEK3AgAAAAAAmJLnTAAAAABY4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARgGA+P//AAAAAAAAAAAAkAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANvpAAAAAAAA
CcFbSgAAAACo4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQRwGA+P//AAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOs2AAAAAAAAjcpbSgAAAAD44AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACARwGA+P//
AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAG8+AQAAAAAAh8VbSgAAAABI4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA3QCA+P//AAAAAAAAAAAAUAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMePAgAAAAAA
i8VbSgAAAACg4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADgXgGA+P//AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL6cAQAAAAAAP8VbSgAAAAD44QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQJAGA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAKz/AAAAAAAAYs5bSgAAAABQ4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgCwGA+P//AAAAAAAAAAAAkAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANV0AAAAAAAA
Ys5bSgAAAACo4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADwHQGA+P//AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2rAAAAAAAAY85bSgAAAAAA4wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAHgGA+P//
AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAACZxAAAAAAAAE8FbSgAAAABQ4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgZQOA+P//AAAAAAAAAAAAEAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO2aAQAAAAAA
FMFbSgAAAACg4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADwZgOA+P//AAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8AAgAAAAAAcmphVAAAAADw4wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQaQOA+P//
AAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFViAQAAAAAAPpPnTAAAAABA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgaQOA+P//AAAAAAAAAAAAkAgAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLpBwAAAAAA
HCmIUwAAAACQ5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABwcgOA+P//AAAAAAAAAAAAUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQRBAAAAAAAhpPnTAAAAADo5AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAdgOA+P//
AAAAAAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHuxAAAAAAAAtsxbSgAAAABA5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQdwOA+P//AAAAAAAAAAAAYAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM8NAgAAAAAA
YqjnTAAAAACY5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACweQOA+P//AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgWAQAAAAAAtsxbSgAAAADw5QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgegOA+P//
AAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAMx8AQAAAAAAdKjnTAAAAABI5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQfAOA+P//AAAAAAAAAAAAQAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWeAQAAAAAA
DKvnTAAAAACg5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAYAOA+P//AAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG/XBAAAAAAAl5TnTAAAAAD45gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZQOA+P//
AAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANU+AQAAAAAAXsFbSgAAAABQ5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQfQOA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHT0AAAAAAAA
vsNbSgAAAACo5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABAfgOA+P//AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD9fAQAAAAAALsVbSgAAAAAA6AAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALQSA+P//AAAAAAAAAAAAsAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaAQAAAAAA
6cxbSgAAAADI7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACwLgSA+P//AAAAAAAAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMtRAgAAAAAAb6jnTAAAAAAg7wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMASA+P//
AAAAAAAAAAAAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAEsnAgAAAAAA8cxbSgAAAAB47wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgMgSA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3DAAAAAAAA
qs5bSgAAAADQ7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAQMwSA+P//AAAAAAAAAACAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE6TAAAAAAAAkspbSgAAAAAo8AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMwSA+P//
AAAAAAAAAAAAMAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAIhVBAAAAAAA86PnTAAAAAB48AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgNwSA+P//AAAAAAAAAAAAIAEAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFivAQAAAAAA
labnTAAAAADQ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAACAOASA+P//AAAAAAAAAAAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiUAQAAAAAAZKjnTAAAAAAo8QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQOQSA+P//
AAAAAAAAAAAAwAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAANqYBQAAAAAAh6bnTAAAAACA8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIASA+P//AAAAAAAAAAAA0AMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMa3AwAAAAAA
ghtOUgAAAADY8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADQIwSA+P//AAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9nAgAAAAAA/iROUgAAAAAo8gAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwJQSA+P//
AAAAAAAAAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJKvAAAAAAAAk8pbSgAAAACA8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQJgSA+P//AAAAAAAAAAAAwAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOjwAAAAAAAA
xq3EVQAAAADY8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAADA5wOA+P//AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMd4AQAAAAAAvcpbSgAAAAAw8wAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACg6AOA+P//
AAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAFDeAAAAAAAAE8FbSgAAAACQ8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ/wOA+P//AAAAAAAAAAAAsAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJyAQAAAAAA
FqTnTAAAAADw8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAQwGA+P//AAAAAAAAAAAAMAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOoNAQAAAAAAj8FbSgAAAABQ9AAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgBg+f//
AAAAAAAAAAAAMDIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAP4MAAAAAAA/1ZjVQAAAACY9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwfwOA+P//AAAAAAAAAAAAwAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5BAQAAAAAA
dMVbSgAAAADw9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAWwBg+f//AAAAAAAAAAAA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQFAgAAAAAAdMVbSgAAAABA9QAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewBg+f//
AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAJaeAAAAAAAAYs5bSgAAAACI9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkgBg+f//AAAAAAAAAAAAcAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAADQ9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAwRAGA+P//AAAAAAAAAAAAMAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPF7AgAAAAAAlcJbSgAAAAAhAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAbgB0AG8AcwBrAHIAbgBsAC4A
ZQB4AGUAAAAcAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwA
aABhAGwALgBkAGwAbAAAAAAAHgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGsAZABjAG8AbQAuAGQAbABsAAAAAAAAAAAALgAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAG0AYwB1AHAAZABhAHQAZQBfAEcAZQBuAHUA
aQBuAGUASQBuAHQAZQBsAC4AZABsAGwAAAAAAAAAAAAeAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAUABTAEgARQBEAC4AZABsAGwAAAAAAAAAAAAdAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAQwBMAEYAUwAuAFMA
WQBTAAAAGwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEMA
SQAuAGQAbABsAAAAAAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAVwBkAGYAMAAxADAAMAAwAC4AcwB5AHMAAAAnAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAFcARABGAEwARABSAC4AUwBZAFMAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABBAEMAUABJAC4AcwB5AHMA
AAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAFcATQBJAEwASQBCAC4AUwBZAFMAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABtAHMAaQBzAGEA
ZAByAHYALgBzAHkAcwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAcABjAGkALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMA
dABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AGQA
cgB2AHIAbwBvAHQALgBzAHkAcwAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkA
cwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AYgB1AHMALgBzAHkAcwAAAAAA
AAAkAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkA
VgBFAFIAUwBcAHgAZQBuAC4AcwB5AHMAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AZgBpAGwAdAAuAHMA
eQBzAAAAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwA
ZAByAGkAdgBlAHIAcwBcAHAAYQByAHQAbQBnAHIALgBzAHkAcwAAAAAAJwAAAFwAUwB5AHMA
dABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AG8A
bABtAGcAcgAuAHMAeQBzAAAAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkA
cwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdgBvAGwAbQBnAHIAeAAuAHMAeQBzAAAA
AAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAGkAbgB0AGUAbABpAGQAZQAuAHMAeQBzAAAAKAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABQAEMASQBJAEQA
RQBYAC4AUwBZAFMAAAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAbQBvAHUAbgB0AG0AZwByAC4AcwB5AHMAAAAmAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAGEAdABhAHAAaQAuAHMAeQBzAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABhAHQAYQBwAG8AcgB0AC4A
UwBZAFMAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAbQBzAGEAaABjAGkALgBzAHkAcwAAAAAAAAAnAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHgA
ZQBuAHYAYgBkAC4AcwB5AHMAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABzAHQAbwByAHAAbwByAHQALgBzAHkA
cwAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAeABlAG4AYwByAHMAaAAuAHMAeQBzAAAAAAAoAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHgAZQBuAGQA
aQBzAGsALgBzAHkAcwAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABhAG0AZAB4AGEAdABhAC4AcwB5AHMAAAAAACcA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUA
cgBzAFwAZgBsAHQAbQBnAHIALgBzAHkAcwAAAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIAcwBcAGYAaQBsAGUAaQBuAGYA
bwAuAHMAeQBzAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAEQAcgBpAHYAZQByAHMAXABOAHQAZgBzAC4AcwB5AHMAAAAmAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIAcwBcAG0AcwByAHAA
YwAuAHMAeQBzAAAAAAAAAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQA
ZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABrAHMAZQBjAGQAZAAuAHMAeQBzAAAAAAAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUA
cgBzAFwAYwBuAGcALgBzAHkAcwAAAAAAJAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABwAGMAdwAuAHMAeQBzAAAAAAAnAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIA
cwBcAEYAcwBfAFIAZQBjAC4AcwB5AHMAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABuAGQAaQBzAC4AcwB5AHMA
AAAmAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkA
dgBlAHIAcwBcAE4ARQBUAEkATwAuAFMAWQBTAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABrAHMAZQBjAHAA
awBnAC4AcwB5AHMAAAAAACYAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdABjAHAAaQBwAC4AcwB5AHMAAAAAAAAAAAApAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIA
cwBcAGYAdwBwAGsAYwBsAG4AdAAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAB2AG0AcwB0AG8AcgBmAGwA
LgBzAHkAcwAAACgAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABkAHIAaQB2AGUAcgBzAFwAdgBvAGwAcwBuAGEAcAAuAHMAeQBzAAAAAAAmAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkAdgBlAHIAcwBcAHMA
cABsAGQAcgAuAHMAeQBzAAAAAAAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXAByAGQAeQBiAG8AbwBzAHQALgBzAHkA
cwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIA
aQB2AGUAcgBzAFwAbQB1AHAALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABoAHcAcABvAGwAaQBjAHkA
LgBzAHkAcwAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAZgB2AGUAdgBvAGwALgBzAHkAcwAAAAAAAAAlAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwAZAByAGkAdgBlAHIAcwBcAGQA
aQBzAGsALgBzAHkAcwAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUA
bQAzADIAXABkAHIAaQB2AGUAcgBzAFwAQwBMAEEAUwBTAFAATgBQAC4AUwBZAFMAAAAmAAAA
XABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIA
UwBcAGMAZAByAG8AbQAuAHMAeQBzAAAAAAAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABOAHUAbABsAC4AUwBZAFMA
AAAlAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwARAByAGkA
dgBlAHIAcwBcAEIAZQBlAHAALgBTAFkAUwAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABTAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdgBnAGEALgBzAHkAcwAAAAAA
KQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYA
ZQByAHMAXABWAEkARABFAE8AUABSAFQALgBTAFkAUwAAACkAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAdwBhAHQAYwBoAGQA
bwBnAC4AcwB5AHMAAAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0A
MwAyAFwARABSAEkAVgBFAFIAUwBcAFIARABQAEMARABEAC4AcwB5AHMAAAAAAAAAKQAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMA
XAByAGQAcABlAG4AYwBkAGQALgBzAHkAcwAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAcgBkAHAAcgBlAGYAbQBwAC4A
cwB5AHMAAAAlAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0AMwAyAFwA
RAByAGkAdgBlAHIAcwBcAE0AcwBmAHMALgBTAFkAUwAAACUAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUAcgBzAFwATgBwAGYAcwAuAFMA
WQBTAAAAJAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQA
UgBJAFYARQBSAFMAXAB0AGQAeAAuAHMAeQBzAAAAAAAkAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAFQARABJAC4AUwBZAFMA
AAAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIA
aQB2AGUAcgBzAFwAYQBmAGQALgBzAHkAcwAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABuAGUAdABiAHQALgBzAHkA
cwAAAAAAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIA
XABEAFIASQBWAEUAUgBTAFwAdwBmAHAAbAB3AGYALgBzAHkAcwAAAAAAAAAmAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHAA
YQBjAGUAcgAuAHMAeQBzAAAAAAAAAAAAKAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABuAGUAdABiAGkAbwBzAC4AcwB5AHMA
AAAAACcAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAdwBhAG4AYQByAHAALgBzAHkAcwAAAAAAAAAnAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHQAZQByAG0A
ZABkAC4AcwB5AHMAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAByAGQAYgBzAHMALgBzAHkAcwAAAAAAAAAAACkA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUA
cgBzAFwAbgBzAGkAcAByAG8AeAB5AC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8A
bwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAG0AcwBzAG0AYgBpAG8A
cwAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAGQAcgBpAHYAZQByAHMAXABkAGkAcwBjAGEAYwBoAGUALgBzAHkAcwAAACQAAABcAFMA
eQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwA
YwBzAGMALgBzAHkAcwAAAAAAJQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQA
ZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAGYAcwBjAC4AcwB5AHMAAAApAAAAXABTAHkA
cwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAGIA
bABiAGQAcgBpAHYAZQAuAHMAeQBzAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB0AHUAbgBuAGUAbAAuAHMAeQBzAAAA
AAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAaQA4ADAANAAyAHAAcgB0AC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAG0AbwB1AGMA
bABhAHMAcwAuAHMAeQBzAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABrAGIAZABjAGwAYQBzAHMALgBzAHkAcwAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUA
UgBTAFwAZgBkAGMALgBzAHkAcwAAAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB4AGUAbgB2AGkAZgAuAHMAeQBzAAAA
AAAAACkAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAeABlAG4AaQBmAGEAYwBlAC4AcwB5AHMAAAApAAAAXABTAHkAcwB0AGUA
bQBSAG8AbwB0AFwAcwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAEgARABBAHUA
ZABCAHUAcwAuAHMAeQBzAAAAJwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXAB2AGkAbwBzAGUAcgAuAHMAeQBzAAAAAAAAACQA
AABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUA
UgBTAFwAcQB4AGwALgBzAHkAcwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMA
eQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMAXABpAG4AdABlAGwAcABwAG0ALgBzAHkA
cwAAAC0AAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIA
SQBWAEUAUgBTAFwAQwBvAG0AcABvAHMAaQB0AGUAQgB1AHMALgBzAHkAcwAAACkAAABcAFMA
eQBzAHQAZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwA
QQBnAGkAbABlAFYAcABuAC4AcwB5AHMAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwA
cwB5AHMAdABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHIAYQBzAGwAMgB0AHAALgBzAHkA
cwAAAAAAKQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQA
UgBJAFYARQBSAFMAXABuAGQAaQBzAHQAYQBwAGkALgBzAHkAcwAAACgAAABcAFMAeQBzAHQA
ZQBtAFIAbwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAbgBkAGkA
cwB3AGEAbgAuAHMAeQBzAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMA
dABlAG0AMwAyAFwARABSAEkAVgBFAFIAUwBcAHIAYQBzAHAAcABwAG8AZQAuAHMAeQBzAAAA
KAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYA
RQBSAFMAXAByAGEAcwBwAHAAdABwAC4AcwB5AHMAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAcgBhAHMAcwBzAHQA
cAAuAHMAeQBzAAAAAAAnAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0A
MwAyAFwARABSAEkAVgBFAFIAUwBcAHIAZABwAGIAdQBzAC4AcwB5AHMAAAAAAAAAJwAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYARQBSAFMA
XABzAHcAZQBuAHUAbQAuAHMAeQBzAAAAAAAAACMAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAawBzAC4AcwB5AHMAAAAAAAAA
JgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAEQAUgBJAFYA
RQBSAFMAXAB1AG0AYgB1AHMALgBzAHkAcwAAAAAAAAAAACgAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABTAHkAcwB0AGUAbQAzADIAXABEAHIAaQB2AGUAcgBzAFwATgBEAFAAcgBvAHgA
eQAuAFMAWQBTAAAAAAAoAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAcwB5AHMAdABlAG0A
MwAyAFwAZAByAGkAdgBlAHIAcwBcAEgAZABBAHUAZABpAG8ALgBzAHkAcwAAAAAAKAAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMA
XABwAG8AcgB0AGMAbABzAC4AcwB5AHMAAAAAACUAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQA
XABzAHkAcwB0AGUAbQAzADIAXABkAHIAaQB2AGUAcgBzAFwAZAByAG0AawAuAHMAeQBzAAAA
KAAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYA
ZQByAHMAXABrAHMAdABoAHUAbgBrAC4AcwB5AHMAAAAAACcAAABcAFMAeQBzAHQAZQBtAFIA
bwBvAHQAXABzAHkAcwB0AGUAbQAzADIAXABEAFIASQBWAEUAUgBTAFwAeABlAG4AbgBlAHQA
LgBzAHkAcwAAAAAAAAApAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMAdABlAG0A
MwAyAFwARAByAGkAdgBlAHIAcwBcAGMAcgBhAHMAaABkAG0AcAAuAHMAeQBzAAAALQAAAFwA
UwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMA
XABkAHUAbQBwAF8AZAB1AG0AcABhAHQAYQAuAHMAeQBzAAAALAAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAHUAbQBwAF8A
bQBzAGEAaABjAGkALgBzAHkAcwAAAAAALQAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMA
eQBzAHQAZQBtADMAMgBcAEQAcgBpAHYAZQByAHMAXABkAHUAbQBwAF8AZAB1AG0AcABmAHYA
ZQAuAHMAeQBzAAAAHwAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMA
MgBcAHcAaQBuADMAMgBrAC4AcwB5AHMAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8A
dABcAFMAeQBzAHQAZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABEAHgAYQBwAGkALgBzAHkA
cwAAAAAAAAAAACQAAABcAFMAeQBzAHQAZQBtAFIAbwBvAHQAXABTAHkAcwB0AGUAbQAzADIA
XABkAHIAaQB2AGUAcgBzAFwAZAB4AGcALgBzAHkAcwAAAAAAHgAAAFwAUwB5AHMAdABlAG0A
UgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAFQAUwBEAEQARAAuAGQAbABsAAAAAAAAAAAA
HgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAFMAeQBzAHQAZQBtADMAMgBcAHEAeABsAGQA
ZAAuAGQAbABsAAAAAAAAAAAAJgAAAFwAUwB5AHMAdABlAG0AUgBvAG8AdABcAHMAeQBzAHQA
ZQBtADMAMgBcAGQAcgBpAHYAZQByAHMAXABsAHUAYQBmAHYALgBzAHkAcwAAAAAAAAAAAIBb
xgIA+P//KPcAAJwAAADo2cQCAPj//8T3AAAEAAAA5NnEAgD4///I9wAABAAAAMBKvQIA+P//
zPcAAAABAAAAoKgCAPj//8z4AAAAEAAAAGDoAYD4///MCAEAABAAAKDEyQIA+P//zBgBAAQA
AACgwMkCAPj//9AYAQBQAAAAfPDMAgD4//8gGQEABAAAAGjwzAIA+P//JBkBAAQAAAAoH0gC
gPr//ygZAQAAIAAAiILDAgD4//8oOQEACAAAAJCCwwIA+P//MDkBAAgAAAAAYL4CAPj//zg5
AQAAEAAAAOChAgD4//84SQEAABAAAAAgqQIA+P//OFkBAAAQAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAAA
BAkAAABgAQAACgAAAEoBAAAAAAAAAAAAAAAAAEAAAMAucGRhdGEAAGQOAAAAcAEAABAAAABU
AQAAAAAAAAAAAAAAAABAAABALnJzcmMAAAAQBAAAAIABAAAGAAAAZAEAAAAAAAAAAAAAAAAA
QAAAQC5yZWxvYwAAAAAAAAAAAABAF6kCAPj//2haygIA+P//UxupAgD4//8AAAAAAAAAAADg
oQIA+P//AAAAAAAAAAAcY74CAPj//8QpqQIA+P//399bSucAAADf31tKEAEAAODfW0o6AQEA
K+BbSosAAAAAAAAAAAAAAAAAAAAAAAAAggIAAAAAAABpHqkCAPj//zsAAAAAAAAABQAAwAAA
AADFp6gCAPj//wBs6AGA+P//AAAAAAAAAAAuRExMAEFQSQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAEFQSS1NUy1XaW4tQ29yZS1Qcm9m
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
bwBsAHUAbQBlADIAXABXAGkAbgBkAG8AdwBzAFwARgBvAG4AdABzAFwAYQByAGkAYQBsAGIA
ZAAuAHQAdABmAAAAAAAAAAIAEcCWACAEQ3KxSAAAAABA8dkCoPj//1wARABlAHYAaQBjAGUA
XABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUAMgBcAFcAaQBuAGQAbwB3AHMAXABTAHkA
cwB0AGUAbQAzADIAXABpAHQALQBJAFQAXABhAHUAZABpAG8AZABnAC4AZQB4AGUALgBtAHUA
aQAAAAAAAgACwJYACgOYBAAAlAQAAFeTs0gAAAAAAQAAAAEAAAAAAMb9/gcAAACwDQAAAAAA
lAQAALKFDQDjZWNVAAAAAAAAxv3+BwAAAAAAAAAAAAAAAAAAAAAAAFwAVwBpAG4AZABvAHcA
cwBcAFMAeQBzAHQAZQBtADMAMgBcAGEAZAB2AGEAcABpADMAMgAuAGQAbABsAAAAAAACAALA
mAAKA5gEAACUBAAATsi2SAAAAAABAAAAAQAAAAAAuPz+BwAAAPAAAAAAAACUBAAAhV4BAJHf
W0oAAAAAAAC4/P4HAAAAAAAAAAAAAAAAAAAAAAAAXABXAGkAbgBkAG8AdwBzAFwAUwB5AHMA
dABlAG0AMwAyAFwAYwByAHkAcAB0AGIAYQBzAGUALgBkAGwAbAAAAAIAAsBQAAoBaAQAABwE
AAAWZrdIAAAAAAIAAAAAAAAAAAAAAEMABgAAgAAAAAAAAACAEScAAAAAYPjZAqD4//8Q9/wC
gPr//1utAwAAAAAAAwACwGgAAQWYBAAAlAQAALeRt0gAAAAAAQAAAAEAAACUBAAAnAQAAAAA
IAKA+P//AKAfAoD4//8AAJ0AAAAAAADgnAAAAAAAAwAAAAAAAACA9Ph2AAAAAADA/f//BwAA
AAAAAAgFAgACAALAnAAKA5gEAACUBAAAeqi3SAAAAAABAAAAAQAAAAAAx/z+BwAAAEABAAAA
AACUBAAAQaYBAG/J50wAAAAAAADH/P4HAAAAAAAAAAAAAAAAAAAAAAAAXABXAGkAbgBkAG8A
dwBzAFwAUwB5AHMAdABlAG0AMwAyAFwAUgBwAGMAUgB0AFIAZQBtAG8AdABlAC4AZABsAGwA
AAAAAAAAAwACwGgAAQWMBAAACAIAAPAnuEgAAAAAAAAAAAAAAAAIAgAAoAQAAABA3gKA+P//
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
AAAAAABggQEAAAAAAwAAAAAAAAAIfQD7/gcAAACA+v//BwAACQAAAAgFAgADAALAaAABBQQE
AABsAgAALq/BSAAAAAABAAAAAAAAAGwCAAC4BAAAABAiAoD4//8AsCECgPj//wAAGgEAAAAA
AIAZAQAAAAADAAAAAAAAAAioVf3+BwAAADD9//8HAAAAAAAACAUCAAIAEcCAACAEexvCSAAA
AADA6NkCoPj//1wARABlAHYAaQBjAGUAXABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUA
MgBcAFcAaQBuAGQAbwB3AHMAXABTAHkAcwB0AGUAbQAzADIAXABjAHMAYwBzAHYAYwAuAGQA
bABsAAAAAgACwMIACgPABAAAvAQAAGgdw0gAAAAAAAAAAAAAAAAAAHL/AAAAAACwAAAAAAAA
vAQAAFcxAQDBw1tKAAAAAAAAcv8AAAAAAAAAAAAAAAAAAAAAAAAAAFwARABlAHYAaQBjAGUA
XABIAGEAcgBkAGQAaQBzAGsAVgBvAGwAdQBtAGUAMgBcAFcAaQBuAGQAbwB3AHMAXABTAHkA
cwB0AGUAbQAzADIAXABzAHYAYwBoAG8AcwB0AC4AZQB4AGUAAAAAAAAAAAACAALAlgAKA8AE
AAC8BAAAaSDDSAAAAAAAAAAAAAAAAAAA93YAAAAAAJAaAAAAAAC8BAAAFW4aAPJmY1UAAAAA
AAD3dgAAAAAAAAAAAAAAAAAAAAAAAAAAXABTAHkAcwB0AGUAbQBSAG8AbwB0AFwAUwB5AHMA
dABlAG0AMwAyAFwAbgB0AGQAbABsAC4AZABsAGwAAAAAAAIAAsCWAAoDwAQAALwEAACQVcNI
AAAAAAAAAAAAAAAAAADVdgAAAAAA8BEAAAAAALwEAAAbRRIA/GZjVQAAAAAAANV2AAAAAAAA
AAAAAAAAAAAAAAAAAABcAFcAaQBuAGQAbwB3AHMAXABTAHkAcwB0AGUAbQAzADIAXABrAGUA
cgBuAGUAbAAzADIALgBkAGwAbAAAAAAAAgACwJoACgPABAAAvAQAAClfw0gAAAAAAAAAAAAA
AAAAANT8/gcAAADABgAAAAAAvAQAAN0/BwD9ZmNVAAAAAAAA1Pz+BwAAAAAAAAAAAAAAAAAA
AAAAAFwAVwBpAG4AZABvAHcAcwBcAFMAeQBzAHQAZQBtADMAMgBcAEsAZQByAG4AZQBsAEIA
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
V9QkAFPEIwBPZCIAS3QhAEc0IABE+AwAP+gLADrYCgA1yAkAMLgIACuoBwAlmAYAH4gFABl4
BAAUaAMABwEnAAEUBoUUUwwBKwAFUAQCAAoBGQaFGVMRASsAClAJAgUKARgGhRhTEAErAAlQ
CAIECgE7BoU7UzMBKwAsUCsCJwoBBAEABGIAAAEpDIUpZCoAInQpABs0KAAUUwwBKwAFUAQC
AAoZUAyFUGQqAEl0KQBCNCgAO1MzASsALFArAicKQDcHAAAAAAAAAAAAAV8kAF/0JgBb5CUA
V9QkAFPEIwBPZCIAS3QhAEc0IABE+AwAP+gLADrYCgA1yAkAMLgIACuoBwAlmAYAH4gFABl4
BAAUaAMABwEnAAFfJABf9CYAW+QlAFfUJABTxCMAT2QiAEt0IQBHNCAARPgMAD/oCwA62AoA
NcgJADC4CAArqAcAJZgGAB+IBQAZeAQAFGgDAAcBOwABBAEABEIAAAGfJACfNC4Al2QwAI90
LwCH9DQAf+QzAHfUMgBvxDEAZ/gTAF7oEgBV2BEATMgQAEO4DwA6qA4AMZgNACiIDAAfeAsA
F2gKAA8BNQABBAEABEIAAAF/HgB/9DQAd+QzAG/UMgBnxDEAX/gTAFboEgBN2BEARMgQADu4
DwAyqA4AKZgNACCIDAAXeAsAD2gKAAcBNQABBAEABEIAAAEEAQAEwgAAAZckAJc0LgCPZDAA
h3QvAH/0NAB35DMAb9QyAGfEMQBf+BMAVugSAE3YEQBEyBAAO7gPADKoDgApmA0AIIgMABd4
CwAPaAoABwE1AAEGAwAGQgJQATAAAAEFAgAFMgFQAQYDAAZiAlABMAAAAQUCAAVSAVABBwQA
BzIDYAJQATABBwQABzIDcAJgAVABBQIABZIBUAEGAwAGggJQATAAAAEJBQAJYgXQA3ACUAEw
AAABBQIABXIBUAEIBAAIUgTgAlABMAEHAwAHYgPQAVAAAAEHBAAHMgNwAlABMAEHAwAHQgPg
AVAAAAEIBAAIcgTQAnABUAEHAwAHggPwAVAAAAEJBAAJkgXgA8ABUAEOCAAOUgrgCNAGwARw
A2ACUAEwARAJABCCDPAK4AjQBsAEcANgAlABMAAAAQcEAAdSA3ACUAEwAQgFAAhiBHADYAJQ
ATAAACEABAAAdAAAAGQDAICSBACEkgQAME0cACEAAABQWwsAoFsLAKDxGwAhAAAAfIYEAMSG
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
AGBQQUdFQkdGWExmAAAAwFIAAGgAAADqSQAAoPQCAPj//wAAAAAgAABgUEFHRVZSRkIANAAA
ADBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAwC5lZGF0YQAAgQoBAABwUwAADAEAAFJKAAAA
AAAAAAAAAAAAAEAAAEBQQUdFREFUQQDdAAAAgFQAAEwAAABeSwAAAAAAAAAAAAAAAABAAADA
UEFHRVZSRkMeKQAAAGBVAAAqAAAAqksAAAAAAAAAAAAAAAAAQAAAQFBBR0VWUkZEUBIAAACQ
VQAAFAAAANRLAAAAAAAAAAAAAAAAAEAAAMBJTklUAAAAAA53BQAAsFUAAHgFAADoSwAAAAAA
AAAAAAAAAAAgAADiLnJzcmMAAABAXwMAADBbAABgAwAAYFEAAAAAAAAAAAAAAAAAQAAAQC5y
ZWxvYwAAhCAAAACQXgAAIgAAAMBUAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVFJHRER1bXBCbG9iEAAAALEdAPAgAAAAiEjIVNEB
Hky+1igsmCQTAwAQAAAAAAAAAAAAAJ1MTVQslNVGv1DfXNlSSlBIEN8CgPr//7gPAADADoQO
SAAAAEhEQXVkQnVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAExSHAABAAAAAAAKAGYf
0tFW7ig5dz9gN9IjhX1MUjQAAgAAAAAADgBjTFCffVNJZYVAvXB3dgEASAMh/X8FAAAQK+AC
gPr//wUBAAAAAQAATFIkAAMAAAAcAFQAd/p5j+/a3gVZfKRoubDwnwAAAAABAAAATFIkAAQA
AABQADcAd/p5j+/a3gVZfKRoubDwnwEAAADTAgDATFI4AAUAAAB0AA4Ad/p5j+/a3gVZfKRo
ubDwn0gDIf1/BQAAECvgAoD6//8AMOLcAoD6//8AAABMUjQABgAAAJgADgBjTFCffVNJZYVA
vXB3dgEASAMh/X8FAAAQK+ACgPr//wYBAAAFAQAATFI0AAcAAADQAA4AY0xQn31TSWWFQL1w
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
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAgAAAAjwBcvDoe10SYjYb2iExnWGEBAAAAAAAABwAAAAACBCRZAQAA
ABgAAAECAOgDAIAACAAAAAAAAAQEBv//WGVuADQuNi4wLXJjADA5LzA0LzIwMTUAAAEbAAEB
AgMEAAAAAAAAAAAAAAAAAAAAAAYAAFhlbgBIVk0gZG9tVQA0LjYuMC1yYwAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAAAAMNAAMBAQAAAAMDAwJYZW4AAAQaAQQBAwEC
5QYBAP/7iRcAAAAAZApkCkEBQ1BVIDEASW50ZWwAAAQaAgQBAwEC5QYBAP/7iRcAAAAAZApk
CkEBQ1BVIDIASW50ZWwAAAsFAAsBWGVuAAAQDwAQAQMGAAAeAP7/AQAAABEVABEAEAAAQABA
AIAHCQABAAcAAERJTU0gMAAAEw8AEwAAAAD//x0AABABAAAUEwAUAAAAAP//HQAAEQATAQAA
AAAgCwAgAAAAAAAAAAAAfwQAfwAAAAAAAAAAACAAAACJw3psE0PcR580qIAKD7VsbgIAAAAA
AAACAAAACgAAAH4ATQBIAHoAAAAEAAAABAAAAGQKAAAsAAAAQwBvAG0AcABvAG4AZQBuAHQA
IABJAG4AZgBvAHIAbQBhAHQAaQBvAG4AAAADAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAmAAAA
QwBvAG4AZgBpAGcAdQByAGEAdABpAG8AbgAgAEQAYQB0AGEAAAAJAAAAEAAAAP//////////
AAAAAAAAAAAWAAAASQBkAGUAbgB0AGkAZgBpAGUAcgAAAAEAAABKAAAASQBuAHQAZQBsADYA
NAAgAEYAYQBtAGkAbAB5ACAANgAgAE0AbwBkAGUAbAAgADMAMAAgAFMAdABlAHAAcABpAG4A
ZwAgADUAAAAoAAAAUAByAG8AYwBlAHMAcwBvAHIATgBhAG0AZQBTAHQAcgBpAG4AZwAAAAEA
AABgAAAASQBuAHQAZQBsACgAUgApACAAWABlAG8AbgAoAFIAKQAgAEMAUABVACAAIAAgACAA
IAAgACAAIAAgACAAIABYADMANAA1ADAAIAAgAEAAIAAyAC4ANgA3AEcASAB6AAAAIgAAAFUA
cABkAGEAdABlACAAUwBpAGcAbgBhAHQAdQByAGUAAAADAAAACAAAAAAAAAAHAAAAHAAAAFUA
cABkAGEAdABlACAAUwB0AGEAdAB1AHMAAAAEAAAABAAAAAcAAAAiAAAAVgBlAG4AZABvAHIA
SQBkAGUAbgB0AGkAZgBpAGUAcgAAAAEAAAAaAAAARwBlAG4AdQBpAG4AZQBJAG4AdABlAGwA
AAAMAAAATQBTAFIAOABCAAAACwAAAAgAAAAAAAAABwAAAAAAIAAAAG/APdCO2MVEuir64DUX
LRmYAwAAAAAAAAAAAAAAAAAAAAAAAAsAAABHZW51bnRlbGluZUkLAAAAR2VudW50ZWxpbmVJ
AAAAAAEAAADlBgEAAAggAgEiuIH/+4sX5QYBAAAIIAABIriB//uLFwAAAAACAAAAAVoDVeSy
8AAAAAAALCHKCQFaA1XksvAAAAAAACwhygkAAAAABAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAE
AAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
CgAAAAAAAAdEAAAAAAAAAAAAAAAAAAAHRAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAA
AAACAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAXAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQA
AAAAAAAAAAABAAAAiwAAAAAAAAAHAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAQAAAIAA
AMABDQAAAAAAAAAAAAAAAAAAAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAACACAAAgAAAAAAAAAAA
AAAAAAgAAIAAAAAAAAAAAAAAAAAAAAAAAQAAgAAAAAAAAAAAAQAAAAAIECgAAAAAAAAAAAEA
AAAACBAoAAAAAAIAAIBJbnRlbChSKSBYZW9uKFIpSW50ZWwoUikgWGVvbihSKQAAAAADAACA
IENQVSAgICAgICAgICAgWCBDUFUgICAgICAgICAgIFgAAAAABAAAgDM0NTAgIEAgMi42N0dI
egAzNDUwICBAIDIuNjdHSHoAAAAAAAUAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAGAACAAAAAAAAAAABAYAABAAAAAAAAAAAAAAAAQGAAAQAAAAAAAAAABwAAgAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAIAkMAAAAAAAAAAAAAAAAAAA
JDAAAAAAAAAAAAAAAAAAACAAAADSQDvooLBCSKvqccnjRj3RQAAAAAAAAAAAAAAAQVBJQ2AE
AAACsFhlbgAAAEZBQ1D0AAAABEBYZW4AAABXQUVUKAAAAAFWWGVuAAAASFBFVDgAAAAB0lhl
bgAAACAAAABMSn74ocUvTb/w1d5jpeTDMAIAAAAAAAAAAAAAAAAAAAAAAAABAAAACwAAAAAA
AABXZGYwMTAwMAAAAAAAAAAApJwPAAAAAAACAAAAAAAAAAEAAABAvhkCgPr//wEAAAAJAAAA
sB0AAG1zaXNhZHJ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAFC3bwGA+v//AQAAAAkA
AACwHQAAdmRydnJvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAMCqBAoD6//8BAAAA
BQAAAHAXAABzdG9yZmx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKKpAABAmbACgPr//wEA
AAAJAAAAsB0AAGNkcm9tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqpwPAFDs3gKA+v//
AQAAAAcAAABxFwAASERBdWRCdXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA8DbgAoD6
//8BAAAACQAAALAdAABWaXJ0aW9TZXJpYWwAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACAXd4C
gPr//wEAAAAJAAAAsB0AAGludGVscHBtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAMDT
4gKA+v//AQAAAAkAAACwHQAAQ29tcG9zaXRlQnVzAAAAAAAAAAAAAAAAAAAAAAAAAACiqQAA
QBLkAoD6//8BAAAACQAAALAdAAB1bWJ1cwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA=
--------------000206070401040004060301
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------000206070401040004060301--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:40:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:40:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtqm-0002id-F9; Mon, 07 Sep 2015 10:40:36 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=68280b2b6=Stefano.Stabellini@citrix.com>)
	id 1ZXtpe-0003oR-Qc
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:27:19 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	1F/00-19110-666C9E55; Fri, 04 Sep 2015 16:27:18 +0000
X-Env-Sender: prvs=68280b2b6=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441384035!35491751!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8146 invoked from network); 4 Sep 2015 16:27:17 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-5.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:27:17 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; d="scan'208";a="301221019"
Date: Fri, 4 Sep 2015 17:25:18 +0100
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Paul Durrant <Paul.Durrant@citrix.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
Message-ID: <alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="1342847746-157961615-1441383929=:2672"
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 07 Sep 2015 10:40:35 +0000
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?Q?Rafa=C5=82_Wojdy=C5=82a?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--1342847746-157961615-1441383929=:2672
Content-Type: text/plain; charset="UTF-8"
Content-Length: 9157
Content-Transfer-Encoding: quoted-printable

On Fri, 4 Sep 2015, Paul Durrant wrote:
> > -----Original Message-----
> > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > Sent: 02 September 2015 10:00
> > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > Cc: Stefano Stabellini
> > Subject: Re: [win-pv-devel] Problems with xenvbd
> > 
> > > -----Original Message-----
> > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > Sent: 02 September 2015 09:54
> > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > Cc: Stefano Stabellini
> > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > >
> > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > >> -----Original Message-----
> > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > >> Sent: 21 August 2015 14:14
> > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant; win-pv-devel@lists.xenproject.org
> > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > >>
> > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > >>>>>> -----Original Message----- From:
> > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla Sent: 18
> > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org Subject:
> > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > >>>>>>
> > > >>>>>> Hi,
> > > >>>>>>
> > > >>>>>> I've been testing the current pvdrivers code in preparation for
> > > >>>>>> creating upstream patches for my xeniface additions and I noticed
> > > >>>>>> than xenvbd seems to be very unstable for me. I'm not sure if it's
> > > >>>>>> a problem with xenvbd itself or my code because it seemed to only
> > > >>>>>> manifest when the full suite of our guest tools was installed along
> > > >>>>>> with xenvbd. In short, most of the time the system crashed with
> > > >>>>>> kernel memory corruption in seemingly random processes shortly
> > > >>>>>> after start. Driver Verifier didn't seem to catch anything. You can
> > > >>>>>> see a log from one such crash in the attachment crash1.txt.
> > > >>>>>>
> > > >>>>>> Today I tried to perform some more tests but this time without our
> > > >>>>>> guest tools (only pvdrivers and our shared libraries were
> > > >>>>>> installed). To my surprise now Driver Verifier was crashing the
> > > >>>>>> system every time in xenvbd (see crash2.txt). I don't know why it
> > > >>>>>> didn't catch that previously... If adding some timeout to the
> > > >>>>>> offending wait doesn't break anything I'll try that to see if I can
> > > >>>>>> reproduce the previous memory corruptions.
> > > >>>>>>
> > > >>>>> Those crashes do look odd. I'm on PTO for the next week but I'll
> > have
> > > >>>>> a look when I get back to the office. I did run verifier on all the
> > > >>>>> drivers a week or so back (while running vbd plug/unplug tests) but
> > > >>>>> there have been a couple of changes since then.
> > > >>>>>
> > > >>>>> Paul
> > > >>>>>
> > > >>>> No problem. I attached some more logs. The last one was during
> > > system
> > > >>>> shutdown, after that the OS failed to boot (probably corrupted
> > > >>>> filesystem since the BSOD itself seemed to indicate that). I think
> > every
> > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet familiar
> > > with
> > > >>>> Xen PV device interfaces so not sure what that means.
> > > >>>>
> > > >>>> In the meantime I've run more tests on my modified xeniface driver
> > to
> > > >>>> make sure it's not contributing to these issues but everything
> > seemed
> > > to
> > > >>>> be fine there.
> > > >>>>
> > > >>>>
> > > >>> I also had a disk corruption on windows 10 pro 64 bit with pv drivers
> > > >>> build of 11 august but I'm not sure that is related to winpv drivers,
> > > >>> on same domU I started testing also snapshot with qcow2 disk overlay.
> > > >>> For this case I don't have useful information because don't try to
> > > >>> boot windows at all but if rehappen I'll try to take other useful
> > > >>> information.
> > > >> Happen another time but also this I was unable to understand what is
> > > >> exactly the cause.
> > > >> On windows reboot all seems was ok and did a clean shutdown but on
> > > >> reboot seabios don't found bootable disk and qemu log don't show
> > useful
> > > >> informations.
> > > >> qemu-img check show errors:
> > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > >>>
> > > >>> 2 errors were found on the image.
> > > >>> Data may be corrupted, or further writes to the image may corrupt it.
> > > >>>
> > > >>> 4 leaked clusters were found on the image.
> > > >>> This means waste of disk space, but no harm to data.
> > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > compressed
> > > >>> clusters
> > > >>> Image end offset: 1850736640
> > > >> I created it with:
> > > >> /usr/lib/xen/bin/qemu-img create -o
> > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2 W10.disk1.cow-
> > > sn1
> > > >> and changed the xl domU configuration:
> > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11 august
> > > >>
> > > >> How I can know for sure if it is a winpv or qemu or other problem and
> > > >> take useful information to report=3F
> > > >>
> > > >> Thanks for any reply and sorry for my bad english.
> > > > This sounds very much like a lack of synchronization somewhere. I recall
> > > seeing other problems of this ilk when someone was messing around with
> > > O_DIRECT for opening images. I wonder if we are missing a flush operation
> > > on shutdown.
> > > >
> > > >    Paul
> > > >
> > > Thanks for reply.
> > > I did a fast search but I not found O_DIRECT grepping in libxl, I found
> > > it only in qemu code.
> > > After I tried with patch that seems added setting of it for xen:
> > >
> > http://git.qemu.org/=3Fp=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78
> > > 376435a8e74bb4edd
> > > Checking in libxl seems disabled by default and from some old xen post
> > > seems that O_DIRECT creates problems.
> > > I should try it enable direct-io-safe in domUs qcow2 disks=3F
> > > Added also Stefano Stabellini as cc.
> > > @Stefano Stabellini: What is the current know status and result of
> > > direct-io-safe=3F

O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
haven't done the analysis on ahci emulation in qemu to know whether that
would be true for ahci disks, but that doesn't matter because unplug is
not implemented for ahci disks.


> > > Sorry is the question are stupid by or my english is too bad or many
> > > post of latest years are confused and in same cases seems also
> > > contradictory about stability/integrity/performance using it or not.
> > > In particular seems crash with some kernels but I not understand exactly
> > > what versions and/or with which patches.
> > >
> > > @Paul Durrant: have you see my other mail when I wrote that based on my
> > > latest test with xen 4.6 without udev file windows domUs with new pv
> > > driver don't boot and for still boot it correctly I must readd udev
> > > file, can this cause unexpected case related to this problem or is
> > > different=3F
> > > http://lists.xen.org/archives/html/win-pv-devel/2015-08/msg00033.html
> > >
> > 
> > I'm not sure why udev would be an issue here. The problem you have
> > appears to be QEMU ignoring the request to unplug emulated disks. I've not
> > seen this behaviour on my test box so I'll need to dig some more.
> > 
> 
> I notice you have 6 IDE channels=3F Are you using AHCI by any chance=3F If you are then it looks like QEMU is not honouring the unplug request... that would be where the bug is. I'll try to repro myself.

Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_platform.c:

static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
{
    /* We have to ignore passthrough devices */
    if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
            PCI_CLASS_STORAGE_IDE
            && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
        pci_piix3_xen_ide_unplug(DEVICE(d));
    }
}

the function specifically only unplugs IDE disks.
I am not sure what to do about ahci unplug, given that we don't
implement scsi disk unplug either. After all, if the goal is to unplug
the disk, why choose a faster emulated protocol=3F
--1342847746-157961615-1441383929=:2672
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--1342847746-157961615-1441383929=:2672--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:40:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:40:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtqm-0002ih-GQ; Mon, 07 Sep 2015 10:40:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=68280b2b6=Stefano.Stabellini@citrix.com>)
	id 1ZXtwS-0004aP-Co
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:34:20 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	95/CF-19220-B08C9E55; Fri, 04 Sep 2015 16:34:19 +0000
X-Env-Sender: prvs=68280b2b6=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1441384457!32874965!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28846 invoked from network); 4 Sep 2015 16:34:18 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:34:18 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; d="scan'208";a="301222899"
Date: Fri, 4 Sep 2015 17:31:56 +0100
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Paul Durrant <Paul.Durrant@citrix.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
Message-ID: <alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="1342847746-350722931-1441384323=:2672"
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 07 Sep 2015 10:40:35 +0000
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?Q?Rafa=C5=82_Wojdy=C5=82a?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--1342847746-350722931-1441384323=:2672
Content-Type: text/plain; charset="UTF-8"
Content-Length: 10851
Content-Transfer-Encoding: quoted-printable

On Fri, 4 Sep 2015, Paul Durrant wrote:
> > -----Original Message-----
> > From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com]
> > Sent: 04 September 2015 17:25
> > To: Paul Durrant
> > Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org; Stefano
> > Stabellini
> > Subject: RE: [win-pv-devel] Problems with xenvbd
> > 
> > On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > > -----Original Message-----
> > > > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > > > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > > > Sent: 02 September 2015 10:00
> > > > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > > Cc: Stefano Stabellini
> > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > >
> > > > > -----Original Message-----
> > > > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > Sent: 02 September 2015 09:54
> > > > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > > > Cc: Stefano Stabellini
> > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > >
> > > > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > > > >> -----Original Message-----
> > > > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > >> Sent: 21 August 2015 14:14
> > > > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant; win-pv-devel@lists.xenproject.org
> > > > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > >>
> > > > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > > > >>>>>> -----Original Message----- From:
> > > > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> > devel-
> > > > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> > Sent: 18
> > > > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org
> > Subject:
> > > > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > > > >>>>>>
> > > > > >>>>>> Hi,
> > > > > >>>>>>
> > > > > >>>>>> I've been testing the current pvdrivers code in preparation for
> > > > > >>>>>> creating upstream patches for my xeniface additions and I
> > noticed
> > > > > >>>>>> than xenvbd seems to be very unstable for me. I'm not sure if
> > it's
> > > > > >>>>>> a problem with xenvbd itself or my code because it seemed to
> > only
> > > > > >>>>>> manifest when the full suite of our guest tools was installed
> > along
> > > > > >>>>>> with xenvbd. In short, most of the time the system crashed
> > with
> > > > > >>>>>> kernel memory corruption in seemingly random processes
> > shortly
> > > > > >>>>>> after start. Driver Verifier didn't seem to catch anything. You
> > can
> > > > > >>>>>> see a log from one such crash in the attachment crash1.txt.
> > > > > >>>>>>
> > > > > >>>>>> Today I tried to perform some more tests but this time without
> > our
> > > > > >>>>>> guest tools (only pvdrivers and our shared libraries were
> > > > > >>>>>> installed). To my surprise now Driver Verifier was crashing the
> > > > > >>>>>> system every time in xenvbd (see crash2.txt). I don't know why
> > it
> > > > > >>>>>> didn't catch that previously... If adding some timeout to the
> > > > > >>>>>> offending wait doesn't break anything I'll try that to see if I can
> > > > > >>>>>> reproduce the previous memory corruptions.
> > > > > >>>>>>
> > > > > >>>>> Those crashes do look odd. I'm on PTO for the next week but I'll
> > > > have
> > > > > >>>>> a look when I get back to the office. I did run verifier on all the
> > > > > >>>>> drivers a week or so back (while running vbd plug/unplug tests)
> > but
> > > > > >>>>> there have been a couple of changes since then.
> > > > > >>>>>
> > > > > >>>>> Paul
> > > > > >>>>>
> > > > > >>>> No problem. I attached some more logs. The last one was during
> > > > > system
> > > > > >>>> shutdown, after that the OS failed to boot (probably corrupted
> > > > > >>>> filesystem since the BSOD itself seemed to indicate that). I think
> > > > every
> > > > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet
> > familiar
> > > > > with
> > > > > >>>> Xen PV device interfaces so not sure what that means.
> > > > > >>>>
> > > > > >>>> In the meantime I've run more tests on my modified xeniface
> > driver
> > > > to
> > > > > >>>> make sure it's not contributing to these issues but everything
> > > > seemed
> > > > > to
> > > > > >>>> be fine there.
> > > > > >>>>
> > > > > >>>>
> > > > > >>> I also had a disk corruption on windows 10 pro 64 bit with pv drivers
> > > > > >>> build of 11 august but I'm not sure that is related to winpv drivers,
> > > > > >>> on same domU I started testing also snapshot with qcow2 disk
> > overlay.
> > > > > >>> For this case I don't have useful information because don't try to
> > > > > >>> boot windows at all but if rehappen I'll try to take other useful
> > > > > >>> information.
> > > > > >> Happen another time but also this I was unable to understand what
> > is
> > > > > >> exactly the cause.
> > > > > >> On windows reboot all seems was ok and did a clean shutdown but
> > on
> > > > > >> reboot seabios don't found bootable disk and qemu log don't show
> > > > useful
> > > > > >> informations.
> > > > > >> qemu-img check show errors:
> > > > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > > > >>>
> > > > > >>> 2 errors were found on the image.
> > > > > >>> Data may be corrupted, or further writes to the image may corrupt
> > it.
> > > > > >>>
> > > > > >>> 4 leaked clusters were found on the image.
> > > > > >>> This means waste of disk space, but no harm to data.
> > > > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > > > compressed
> > > > > >>> clusters
> > > > > >>> Image end offset: 1850736640
> > > > > >> I created it with:
> > > > > >> /usr/lib/xen/bin/qemu-img create -o
> > > > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2
> > W10.disk1.cow-
> > > > > sn1
> > > > > >> and changed the xl domU configuration:
> > > > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11 august
> > > > > >>
> > > > > >> How I can know for sure if it is a winpv or qemu or other problem
> > and
> > > > > >> take useful information to report=3F
> > > > > >>
> > > > > >> Thanks for any reply and sorry for my bad english.
> > > > > > This sounds very much like a lack of synchronization somewhere. I
> > recall
> > > > > seeing other problems of this ilk when someone was messing around
> > with
> > > > > O_DIRECT for opening images. I wonder if we are missing a flush
> > operation
> > > > > on shutdown.
> > > > > >
> > > > > >    Paul
> > > > > >
> > > > > Thanks for reply.
> > > > > I did a fast search but I not found O_DIRECT grepping in libxl, I found
> > > > > it only in qemu code.
> > > > > After I tried with patch that seems added setting of it for xen:
> > > > >
> > > >
> > http://git.qemu.org/=3Fp=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78
> > > > > 376435a8e74bb4edd
> > > > > Checking in libxl seems disabled by default and from some old xen post
> > > > > seems that O_DIRECT creates problems.
> > > > > I should try it enable direct-io-safe in domUs qcow2 disks=3F
> > > > > Added also Stefano Stabellini as cc.
> > > > > @Stefano Stabellini: What is the current know status and result of
> > > > > direct-io-safe=3F
> > 
> > O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
> > haven't done the analysis on ahci emulation in qemu to know whether that
> > would be true for ahci disks, but that doesn't matter because unplug is
> > not implemented for ahci disks.
> > 
> > 
> > > > > Sorry is the question are stupid by or my english is too bad or many
> > > > > post of latest years are confused and in same cases seems also
> > > > > contradictory about stability/integrity/performance using it or not.
> > > > > In particular seems crash with some kernels but I not understand
> > exactly
> > > > > what versions and/or with which patches.
> > > > >
> > > > > @Paul Durrant: have you see my other mail when I wrote that based on
> > my
> > > > > latest test with xen 4.6 without udev file windows domUs with new pv
> > > > > driver don't boot and for still boot it correctly I must readd udev
> > > > > file, can this cause unexpected case related to this problem or is
> > > > > different=3F
> > > > > http://lists.xen.org/archives/html/win-pv-devel/2015-
> > 08/msg00033.html
> > > > >
> > > >
> > > > I'm not sure why udev would be an issue here. The problem you have
> > > > appears to be QEMU ignoring the request to unplug emulated disks. I've
> > not
> > > > seen this behaviour on my test box so I'll need to dig some more.
> > > >
> > >
> > > I notice you have 6 IDE channels=3F Are you using AHCI by any chance=3F If you
> > are then it looks like QEMU is not honouring the unplug request... that would
> > be where the bug is. I'll try to repro myself.
> > 
> > Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_platform.c:
> > 
> > static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
> > {
> >     /* We have to ignore passthrough devices */
> >     if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
> >             PCI_CLASS_STORAGE_IDE
> >             && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
> >         pci_piix3_xen_ide_unplug(DEVICE(d));
> >     }
> > }
> > 
> > the function specifically only unplugs IDE disks.
> > I am not sure what to do about ahci unplug, given that we don't
> > implement scsi disk unplug either. After all, if the goal is to unplug
> > the disk, why choose a faster emulated protocol=3F
> 
> I think we should unplug the disk regardless of type, if we support configuring disks of that type through libxl. The reason, in this case AFAIU, for wanting ahci is to speed up Windows boot where initial driver load is still done through int13 and hence emulated disk.

I would be happy to take a patch which makes QEMU unplug all kinds of
disks, as long as is able to skip passed though devices (see comment in
the code).
--1342847746-350722931-1441384323=:2672
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--1342847746-350722931-1441384323=:2672--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:40:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:40:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtqm-0002id-F9; Mon, 07 Sep 2015 10:40:36 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=68280b2b6=Stefano.Stabellini@citrix.com>)
	id 1ZXtpe-0003oR-Qc
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:27:19 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	1F/00-19110-666C9E55; Fri, 04 Sep 2015 16:27:18 +0000
X-Env-Sender: prvs=68280b2b6=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441384035!35491751!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8146 invoked from network); 4 Sep 2015 16:27:17 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-5.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:27:17 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; d="scan'208";a="301221019"
Date: Fri, 4 Sep 2015 17:25:18 +0100
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Paul Durrant <Paul.Durrant@citrix.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
Message-ID: <alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="1342847746-157961615-1441383929=:2672"
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 07 Sep 2015 10:40:35 +0000
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?Q?Rafa=C5=82_Wojdy=C5=82a?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--1342847746-157961615-1441383929=:2672
Content-Type: text/plain; charset="UTF-8"
Content-Length: 9157
Content-Transfer-Encoding: quoted-printable

On Fri, 4 Sep 2015, Paul Durrant wrote:
> > -----Original Message-----
> > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > Sent: 02 September 2015 10:00
> > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > Cc: Stefano Stabellini
> > Subject: Re: [win-pv-devel] Problems with xenvbd
> > 
> > > -----Original Message-----
> > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > Sent: 02 September 2015 09:54
> > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > Cc: Stefano Stabellini
> > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > >
> > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > >> -----Original Message-----
> > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > >> Sent: 21 August 2015 14:14
> > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant; win-pv-devel@lists.xenproject.org
> > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > >>
> > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > >>>>>> -----Original Message----- From:
> > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla Sent: 18
> > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org Subject:
> > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > >>>>>>
> > > >>>>>> Hi,
> > > >>>>>>
> > > >>>>>> I've been testing the current pvdrivers code in preparation for
> > > >>>>>> creating upstream patches for my xeniface additions and I noticed
> > > >>>>>> than xenvbd seems to be very unstable for me. I'm not sure if it's
> > > >>>>>> a problem with xenvbd itself or my code because it seemed to only
> > > >>>>>> manifest when the full suite of our guest tools was installed along
> > > >>>>>> with xenvbd. In short, most of the time the system crashed with
> > > >>>>>> kernel memory corruption in seemingly random processes shortly
> > > >>>>>> after start. Driver Verifier didn't seem to catch anything. You can
> > > >>>>>> see a log from one such crash in the attachment crash1.txt.
> > > >>>>>>
> > > >>>>>> Today I tried to perform some more tests but this time without our
> > > >>>>>> guest tools (only pvdrivers and our shared libraries were
> > > >>>>>> installed). To my surprise now Driver Verifier was crashing the
> > > >>>>>> system every time in xenvbd (see crash2.txt). I don't know why it
> > > >>>>>> didn't catch that previously... If adding some timeout to the
> > > >>>>>> offending wait doesn't break anything I'll try that to see if I can
> > > >>>>>> reproduce the previous memory corruptions.
> > > >>>>>>
> > > >>>>> Those crashes do look odd. I'm on PTO for the next week but I'll
> > have
> > > >>>>> a look when I get back to the office. I did run verifier on all the
> > > >>>>> drivers a week or so back (while running vbd plug/unplug tests) but
> > > >>>>> there have been a couple of changes since then.
> > > >>>>>
> > > >>>>> Paul
> > > >>>>>
> > > >>>> No problem. I attached some more logs. The last one was during
> > > system
> > > >>>> shutdown, after that the OS failed to boot (probably corrupted
> > > >>>> filesystem since the BSOD itself seemed to indicate that). I think
> > every
> > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet familiar
> > > with
> > > >>>> Xen PV device interfaces so not sure what that means.
> > > >>>>
> > > >>>> In the meantime I've run more tests on my modified xeniface driver
> > to
> > > >>>> make sure it's not contributing to these issues but everything
> > seemed
> > > to
> > > >>>> be fine there.
> > > >>>>
> > > >>>>
> > > >>> I also had a disk corruption on windows 10 pro 64 bit with pv drivers
> > > >>> build of 11 august but I'm not sure that is related to winpv drivers,
> > > >>> on same domU I started testing also snapshot with qcow2 disk overlay.
> > > >>> For this case I don't have useful information because don't try to
> > > >>> boot windows at all but if rehappen I'll try to take other useful
> > > >>> information.
> > > >> Happen another time but also this I was unable to understand what is
> > > >> exactly the cause.
> > > >> On windows reboot all seems was ok and did a clean shutdown but on
> > > >> reboot seabios don't found bootable disk and qemu log don't show
> > useful
> > > >> informations.
> > > >> qemu-img check show errors:
> > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > >>>
> > > >>> 2 errors were found on the image.
> > > >>> Data may be corrupted, or further writes to the image may corrupt it.
> > > >>>
> > > >>> 4 leaked clusters were found on the image.
> > > >>> This means waste of disk space, but no harm to data.
> > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > compressed
> > > >>> clusters
> > > >>> Image end offset: 1850736640
> > > >> I created it with:
> > > >> /usr/lib/xen/bin/qemu-img create -o
> > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2 W10.disk1.cow-
> > > sn1
> > > >> and changed the xl domU configuration:
> > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11 august
> > > >>
> > > >> How I can know for sure if it is a winpv or qemu or other problem and
> > > >> take useful information to report=3F
> > > >>
> > > >> Thanks for any reply and sorry for my bad english.
> > > > This sounds very much like a lack of synchronization somewhere. I recall
> > > seeing other problems of this ilk when someone was messing around with
> > > O_DIRECT for opening images. I wonder if we are missing a flush operation
> > > on shutdown.
> > > >
> > > >    Paul
> > > >
> > > Thanks for reply.
> > > I did a fast search but I not found O_DIRECT grepping in libxl, I found
> > > it only in qemu code.
> > > After I tried with patch that seems added setting of it for xen:
> > >
> > http://git.qemu.org/=3Fp=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78
> > > 376435a8e74bb4edd
> > > Checking in libxl seems disabled by default and from some old xen post
> > > seems that O_DIRECT creates problems.
> > > I should try it enable direct-io-safe in domUs qcow2 disks=3F
> > > Added also Stefano Stabellini as cc.
> > > @Stefano Stabellini: What is the current know status and result of
> > > direct-io-safe=3F

O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
haven't done the analysis on ahci emulation in qemu to know whether that
would be true for ahci disks, but that doesn't matter because unplug is
not implemented for ahci disks.


> > > Sorry is the question are stupid by or my english is too bad or many
> > > post of latest years are confused and in same cases seems also
> > > contradictory about stability/integrity/performance using it or not.
> > > In particular seems crash with some kernels but I not understand exactly
> > > what versions and/or with which patches.
> > >
> > > @Paul Durrant: have you see my other mail when I wrote that based on my
> > > latest test with xen 4.6 without udev file windows domUs with new pv
> > > driver don't boot and for still boot it correctly I must readd udev
> > > file, can this cause unexpected case related to this problem or is
> > > different=3F
> > > http://lists.xen.org/archives/html/win-pv-devel/2015-08/msg00033.html
> > >
> > 
> > I'm not sure why udev would be an issue here. The problem you have
> > appears to be QEMU ignoring the request to unplug emulated disks. I've not
> > seen this behaviour on my test box so I'll need to dig some more.
> > 
> 
> I notice you have 6 IDE channels=3F Are you using AHCI by any chance=3F If you are then it looks like QEMU is not honouring the unplug request... that would be where the bug is. I'll try to repro myself.

Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_platform.c:

static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
{
    /* We have to ignore passthrough devices */
    if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
            PCI_CLASS_STORAGE_IDE
            && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
        pci_piix3_xen_ide_unplug(DEVICE(d));
    }
}

the function specifically only unplugs IDE disks.
I am not sure what to do about ahci unplug, given that we don't
implement scsi disk unplug either. After all, if the goal is to unplug
the disk, why choose a faster emulated protocol=3F
--1342847746-157961615-1441383929=:2672
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--1342847746-157961615-1441383929=:2672--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 10:40:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 10:40:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYtqm-0002ih-GQ; Mon, 07 Sep 2015 10:40:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=68280b2b6=Stefano.Stabellini@citrix.com>)
	id 1ZXtwS-0004aP-Co
	for win-pv-devel@lists.xenproject.org; Fri, 04 Sep 2015 16:34:20 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	95/CF-19220-B08C9E55; Fri, 04 Sep 2015 16:34:19 +0000
X-Env-Sender: prvs=68280b2b6=Stefano.Stabellini@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1441384457!32874965!1
X-Originating-IP: [66.165.176.63]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28846 invoked from network); 4 Sep 2015 16:34:18 -0000
Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	4 Sep 2015 16:34:18 -0000
X-IronPort-AV: E=Sophos;i="5.17,470,1437436800"; d="scan'208";a="301222899"
Date: Fri, 4 Sep 2015 17:31:56 +0100
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
X-X-Sender: sstabellini@kaball.uk.xensource.com
To: Paul Durrant <Paul.Durrant@citrix.com>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
Message-ID: <alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
User-Agent: Alpine 2.02 (DEB 1266 2009-07-14)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="1342847746-350722931-1441384323=:2672"
X-DLP: MIA1
X-Mailman-Approved-At: Mon, 07 Sep 2015 10:40:35 +0000
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	Fabio Fantoni <fabio.fantoni@m2r.biz>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>,
	=?UTF-8?Q?Rafa=C5=82_Wojdy=C5=82a?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--1342847746-350722931-1441384323=:2672
Content-Type: text/plain; charset="UTF-8"
Content-Length: 10851
Content-Transfer-Encoding: quoted-printable

On Fri, 4 Sep 2015, Paul Durrant wrote:
> > -----Original Message-----
> > From: Stefano Stabellini [mailto:stefano.stabellini@eu.citrix.com]
> > Sent: 04 September 2015 17:25
> > To: Paul Durrant
> > Cc: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org; Stefano
> > Stabellini
> > Subject: RE: [win-pv-devel] Problems with xenvbd
> > 
> > On Fri, 4 Sep 2015, Paul Durrant wrote:
> > > > -----Original Message-----
> > > > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > > > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > > > Sent: 02 September 2015 10:00
> > > > To: Fabio Fantoni; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > > Cc: Stefano Stabellini
> > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > >
> > > > > -----Original Message-----
> > > > > From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > Sent: 02 September 2015 09:54
> > > > > To: Paul Durrant; Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
> > > > > Cc: Stefano Stabellini
> > > > > Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > >
> > > > > Il 01/09/2015 16:41, Paul Durrant ha scritto:
> > > > > >> -----Original Message-----
> > > > > >> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
> > > > > >> Sent: 21 August 2015 14:14
> > > > > >> To: Rafa=C5=82 Wojdy=C5=82a; Paul Durrant; win-pv-devel@lists.xenproject.org
> > > > > >> Subject: Re: [win-pv-devel] Problems with xenvbd
> > > > > >>
> > > > > >> Il 21/08/2015 10:12, Fabio Fantoni ha scritto:
> > > > > >>> Il 21/08/2015 00:03, Rafa=C5=82 Wojdy=C5=82a ha scritto:
> > > > > >>>> On 2015-08-19 23:25, Paul Durrant wrote:
> > > > > >>>>>> -----Original Message----- From:
> > > > > >>>>>> win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> > devel-
> > > > > >>>>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> > Sent: 18
> > > > > >>>>>> August 2015 14:33 To: win-pv-devel@lists.xenproject.org
> > Subject:
> > > > > >>>>>> [win-pv-devel] Problems with xenvbd
> > > > > >>>>>>
> > > > > >>>>>> Hi,
> > > > > >>>>>>
> > > > > >>>>>> I've been testing the current pvdrivers code in preparation for
> > > > > >>>>>> creating upstream patches for my xeniface additions and I
> > noticed
> > > > > >>>>>> than xenvbd seems to be very unstable for me. I'm not sure if
> > it's
> > > > > >>>>>> a problem with xenvbd itself or my code because it seemed to
> > only
> > > > > >>>>>> manifest when the full suite of our guest tools was installed
> > along
> > > > > >>>>>> with xenvbd. In short, most of the time the system crashed
> > with
> > > > > >>>>>> kernel memory corruption in seemingly random processes
> > shortly
> > > > > >>>>>> after start. Driver Verifier didn't seem to catch anything. You
> > can
> > > > > >>>>>> see a log from one such crash in the attachment crash1.txt.
> > > > > >>>>>>
> > > > > >>>>>> Today I tried to perform some more tests but this time without
> > our
> > > > > >>>>>> guest tools (only pvdrivers and our shared libraries were
> > > > > >>>>>> installed). To my surprise now Driver Verifier was crashing the
> > > > > >>>>>> system every time in xenvbd (see crash2.txt). I don't know why
> > it
> > > > > >>>>>> didn't catch that previously... If adding some timeout to the
> > > > > >>>>>> offending wait doesn't break anything I'll try that to see if I can
> > > > > >>>>>> reproduce the previous memory corruptions.
> > > > > >>>>>>
> > > > > >>>>> Those crashes do look odd. I'm on PTO for the next week but I'll
> > > > have
> > > > > >>>>> a look when I get back to the office. I did run verifier on all the
> > > > > >>>>> drivers a week or so back (while running vbd plug/unplug tests)
> > but
> > > > > >>>>> there have been a couple of changes since then.
> > > > > >>>>>
> > > > > >>>>> Paul
> > > > > >>>>>
> > > > > >>>> No problem. I attached some more logs. The last one was during
> > > > > system
> > > > > >>>> shutdown, after that the OS failed to boot (probably corrupted
> > > > > >>>> filesystem since the BSOD itself seemed to indicate that). I think
> > > > every
> > > > > >>>> time there is a BLKIF_RSP_ERROR somewhere but I'm not yet
> > familiar
> > > > > with
> > > > > >>>> Xen PV device interfaces so not sure what that means.
> > > > > >>>>
> > > > > >>>> In the meantime I've run more tests on my modified xeniface
> > driver
> > > > to
> > > > > >>>> make sure it's not contributing to these issues but everything
> > > > seemed
> > > > > to
> > > > > >>>> be fine there.
> > > > > >>>>
> > > > > >>>>
> > > > > >>> I also had a disk corruption on windows 10 pro 64 bit with pv drivers
> > > > > >>> build of 11 august but I'm not sure that is related to winpv drivers,
> > > > > >>> on same domU I started testing also snapshot with qcow2 disk
> > overlay.
> > > > > >>> For this case I don't have useful information because don't try to
> > > > > >>> boot windows at all but if rehappen I'll try to take other useful
> > > > > >>> information.
> > > > > >> Happen another time but also this I was unable to understand what
> > is
> > > > > >> exactly the cause.
> > > > > >> On windows reboot all seems was ok and did a clean shutdown but
> > on
> > > > > >> reboot seabios don't found bootable disk and qemu log don't show
> > > > useful
> > > > > >> informations.
> > > > > >> qemu-img check show errors:
> > > > > >>> /usr/lib/xen/bin/qemu-img check W10.disk1.cow-sn1
> > > > > >>> ERROR cluster 143 refcount=3D1 reference=3D2
> > > > > >>> Leaked cluster 1077 refcount=3D1 reference=3D0
> > > > > >>> ERROR cluster 1221 refcount=3D1 reference=3D2
> > > > > >>> Leaked cluster 2703 refcount=3D1 reference=3D0
> > > > > >>> Leaked cluster 5212 refcount=3D1 reference=3D0
> > > > > >>> Leaked cluster 13375 refcount=3D1 reference=3D0
> > > > > >>>
> > > > > >>> 2 errors were found on the image.
> > > > > >>> Data may be corrupted, or further writes to the image may corrupt
> > it.
> > > > > >>>
> > > > > >>> 4 leaked clusters were found on the image.
> > > > > >>> This means waste of disk space, but no harm to data.
> > > > > >>> 27853/819200 =3D 3.40% allocated, 22.65% fragmented, 0.00%
> > > > compressed
> > > > > >>> clusters
> > > > > >>> Image end offset: 1850736640
> > > > > >> I created it with:
> > > > > >> /usr/lib/xen/bin/qemu-img create -o
> > > > > >> backing_file=3DW10.disk1.xm,backing_fmt=3Draw -f qcow2
> > W10.disk1.cow-
> > > > > sn1
> > > > > >> and changed the xl domU configuration:
> > > > > >> disk=3D['/mnt/vm2/W10.disk1.cow-sn1,qcow2,hda,rw',...
> > > > > >> Dom0 is with xen 4.6-rc1 and qemu 2.4.0
> > > > > >> DomU is windows 10 pro 64 bit with pv drivers build of 11 august
> > > > > >>
> > > > > >> How I can know for sure if it is a winpv or qemu or other problem
> > and
> > > > > >> take useful information to report=3F
> > > > > >>
> > > > > >> Thanks for any reply and sorry for my bad english.
> > > > > > This sounds very much like a lack of synchronization somewhere. I
> > recall
> > > > > seeing other problems of this ilk when someone was messing around
> > with
> > > > > O_DIRECT for opening images. I wonder if we are missing a flush
> > operation
> > > > > on shutdown.
> > > > > >
> > > > > >    Paul
> > > > > >
> > > > > Thanks for reply.
> > > > > I did a fast search but I not found O_DIRECT grepping in libxl, I found
> > > > > it only in qemu code.
> > > > > After I tried with patch that seems added setting of it for xen:
> > > > >
> > > >
> > http://git.qemu.org/=3Fp=3Dqemu.git;a=3Dcommitdiff;h=3D454ae734f1d9f591345fa78
> > > > > 376435a8e74bb4edd
> > > > > Checking in libxl seems disabled by default and from some old xen post
> > > > > seems that O_DIRECT creates problems.
> > > > > I should try it enable direct-io-safe in domUs qcow2 disks=3F
> > > > > Added also Stefano Stabellini as cc.
> > > > > @Stefano Stabellini: What is the current know status and result of
> > > > > direct-io-safe=3F
> > 
> > O_DIRECT should be entirely safe to use, at least on ide and qdisk. I
> > haven't done the analysis on ahci emulation in qemu to know whether that
> > would be true for ahci disks, but that doesn't matter because unplug is
> > not implemented for ahci disks.
> > 
> > 
> > > > > Sorry is the question are stupid by or my english is too bad or many
> > > > > post of latest years are confused and in same cases seems also
> > > > > contradictory about stability/integrity/performance using it or not.
> > > > > In particular seems crash with some kernels but I not understand
> > exactly
> > > > > what versions and/or with which patches.
> > > > >
> > > > > @Paul Durrant: have you see my other mail when I wrote that based on
> > my
> > > > > latest test with xen 4.6 without udev file windows domUs with new pv
> > > > > driver don't boot and for still boot it correctly I must readd udev
> > > > > file, can this cause unexpected case related to this problem or is
> > > > > different=3F
> > > > > http://lists.xen.org/archives/html/win-pv-devel/2015-
> > 08/msg00033.html
> > > > >
> > > >
> > > > I'm not sure why udev would be an issue here. The problem you have
> > > > appears to be QEMU ignoring the request to unplug emulated disks. I've
> > not
> > > > seen this behaviour on my test box so I'll need to dig some more.
> > > >
> > >
> > > I notice you have 6 IDE channels=3F Are you using AHCI by any chance=3F If you
> > are then it looks like QEMU is not honouring the unplug request... that would
> > be where the bug is. I'll try to repro myself.
> > 
> > Unplug on ahci is actually unimplemented, see hw/i386/xen/xen_platform.c:
> > 
> > static void unplug_disks(PCIBus *b, PCIDevice *d, void *o)
> > {
> >     /* We have to ignore passthrough devices */
> >     if (pci_get_word(d->config + PCI_CLASS_DEVICE) =3D=3D
> >             PCI_CLASS_STORAGE_IDE
> >             && strcmp(d->name, "xen-pci-passthrough") !=3D 0) {
> >         pci_piix3_xen_ide_unplug(DEVICE(d));
> >     }
> > }
> > 
> > the function specifically only unplugs IDE disks.
> > I am not sure what to do about ahci unplug, given that we don't
> > implement scsi disk unplug either. After all, if the goal is to unplug
> > the disk, why choose a faster emulated protocol=3F
> 
> I think we should unplug the disk regardless of type, if we support configuring disks of that type through libxl. The reason, in this case AFAIU, for wanting ahci is to speed up Windows boot where initial driver load is still done through int13 and hence emulated disk.

I would be happy to take a patch which makes QEMU unplug all kinds of
disks, as long as is able to skip passed though devices (see comment in
the code).
--1342847746-350722931-1441384323=:2672
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--1342847746-350722931-1441384323=:2672--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 11:57:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 11:57:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYv3e-0000ct-9E; Mon, 07 Sep 2015 11:57:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYv3c-0000cl-NB
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 11:57:56 +0000
Received: from [193.109.254.147] by server-2.bemta-14.messagelabs.com id
	82/A6-12889-4CB7DE55; Mon, 07 Sep 2015 11:57:56 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1441627074!45343393!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30391 invoked from network); 7 Sep 2015 11:57:54 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 11:57:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,484,1437436800"; 
   d="scan'208";a="2497678"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q///xcoCAADfboA==
Date: Mon, 7 Sep 2015 11:57:52 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
In-Reply-To: <55ED67EF.20008@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNyBTZXB0ZW1iZXIgMjAxNSAxMToz
Mw0KPiBUbzogUGF1bCBEdXJyYW50OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gQ2M6IFJhZmHFgiBX
b2pkecWCYTsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDcvMDkvMjAx
NSAxMToyNiwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4gRmFiaW8sDQo+ID4NCj4gPiAg
ICBDYW4geW91IGNvbmZpcm0gdGhhdCB5b3UgZG9uJ3Qgc2VlIGFueSBwcm9ibGVtIGlmIHlvdSB1
c2Ugc3RhbmRhcmQgSURFDQo+IGVtdWxhdGVkIGRpc2tzPyBJIGNlcnRhaW5seSBkb24ndC4NCj4g
Pg0KPiA+ICAgIFBhdWwNCj4gV0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdhcyB3aXRoIHNhbWUgcmVz
dWx0cyBidXQgYWJvdXQgdWRldiBwcm9ibGVtIG5vdw0KPiBzZWVtcyBJIGZvdW5kIHRoZSBjYXVz
ZSwgc2VlbXMgdGhlIGRvbTAga2VybmVsLg0KPiBXaXRoIGtlcm5lbCAzLjIuMC00LWFtZDY0IHZl
cnNpb24gMy4yLjY4LTErZGViN3UzIChmcm9tIHdoZWV6eQ0KPiByZXBvc2l0b3J5KSBkb24ndCB3
b3JrcyB3aXRob3V0IHVkZXYgZmlsZSwgd2l0aCAzLjE2LjAtMC5icG8uNC1hbWQ2NA0KPiB2ZXJz
aW9uIDMuMTYuNy1ja3QxMS0xK2RlYjh1M35icG83MCsxIHdvcmtzLg0KPiBJbml0aWFsbHkgbmV3
IHB2IGRyaXZlcnMgd2FzIHdpdGggbmV0d29yayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4x
NA0KPiBidXQgYWZ0ZXIgc2VlbXMgd2FzIHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5
IGNvbW1pdCkgYnV0IHNlZW1zDQo+IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIg
a2VybmVsIGlzIHN0aWxsIG5lZWRlZC4NCj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBw
cm9ibGVtcyBpbnN0ZWFkLCBmb3IgZXhhbXBsZSB3aXRoDQo+IGJhbGxvbmluZyAoZXZlbiBpZiBz
aG91bGQgbm90IGJlIHVzZWQpLg0KPiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYg
SSB0cmllZCB0byByZW1vdmUgYSB3b3JrYXJvdW5kIG9mDQo+IGJhbGxvbmluZyBwcm9ibGVtIChk
b20wX21lbT0yRyxtYXg6M0cgaW4gZ3J1Yi5jZmcgaW5zdGVhZA0KPiBkb20wX21lbT0yRyxtYXg6
MkcpLCBJIG5vbW9yZSBzYXcga2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQ0KPiBjcmFzaGVkIGF0
IGJvb3QuDQo+IEFub3RoZXIgc3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVu
YWJsZWQgZG9uJ3Qgc2hvdyBwdg0KPiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBrZXJu
ZWwgKG9uIG9sZGVyIHRlc3RzIHdpdGggMy4xNiBkaWQgaWYgSQ0KPiByZW1lbWJlciBnb29kKQ0K
PiBJbiBhdHRhY2htZW50IHRoZSB3aW5kb3dzIG1pbmlkdW1wLg0KDQpUaGF0IHlpZWxkZWQ6DQoN
CjA6IGtkPiAhYW5hbHl6ZSAtdg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Z2NoZWNrIEFuYWx5c2lzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpTWVNURU1fU0VSVklDRV9FWENFUFRJT04gKDNi
KQ0KQW4gZXhjZXB0aW9uIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBhIHN5c3RlbSBzZXJ2aWNl
IHJvdXRpbmUuDQpBcmd1bWVudHM6DQpBcmcxOiAwMDAwMDAwMGMwMDAwMDA1LCBFeGNlcHRpb24g
Y29kZSB0aGF0IGNhdXNlZCB0aGUgYnVnY2hlY2sNCkFyZzI6IGZmZmZmODAwMDJhOGE3YzUsIEFk
ZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHdoaWNoIGNhdXNlZCB0aGUgYnVnY2hlY2sNCkFyZzM6
IGZmZmZmODgwMDFlODZjMDAsIEFkZHJlc3Mgb2YgdGhlIGNvbnRleHQgcmVjb3JkIGZvciB0aGUg
ZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBidWdjaGVjaw0KQXJnNDogMDAwMDAwMDAwMDAwMDAw
MCwgemVyby4NCg0KRGVidWdnaW5nIERldGFpbHM6DQotLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpF
WENFUFRJT05fQ09ERTogKE5UU1RBVFVTKSAweGMwMDAwMDA1IC0gVGhlIGluc3RydWN0aW9uIGF0
IDB4JTA4bHggcmVmZXJlbmNlZCBtZW1vcnkgYXQgMHglMDhseC4gVGhlIG1lbW9yeSBjb3VsZCBu
b3QgYmUgJXMuDQoNCkZBVUxUSU5HX0lQOiANCm50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTYrMA0KZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAgcmN4
LHF3b3JkIHB0ciBbcjhdDQoNCkNPTlRFWFQ6ICBmZmZmZjg4MDAxZTg2YzAwIC0tICguY3hyIDB4
ZmZmZmY4ODAwMWU4NmMwMDtyKQ0KcmF4PTAwMDAwMDAwMjZmNjAwMDMgcmJ4PTAwMDAwMDAwMDAw
MDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDANCnJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1mZmZm
ZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAwMDAwMDAwMDAwDQpyaXA9ZmZmZmY4MDAwMmE4YTdjNSBy
c3A9ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KIHI4PTZjOGI0ODMwMjQ1
YzhiNDAgIHI5PWZmZmZmODAwMDJhMWUwMDAgcjEwPWZmZmZmODAwMDJjMWZjMDANCnIxMT0wMDAw
MDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwDQpy
MTQ9MDAwMDAwMDAwMDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAwMA0KaW9wbD0wICAgICAgICAg
bnYgdXAgZWkgcGwgbnogbmEgcGUgbmMNCmNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIgIGVzPTAw
MmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyDQpudCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Og0KZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAg
ICAgICAgIG1vdiAgICAgcmN4LHF3b3JkIHB0ciBbcjhdIGRzOjAwMmI6NmM4YjQ4MzBgMjQ1Yzhi
NDA9Pz8/Pz8/Pz8/Pz8/Pz8/Pw0KTGFzdCBzZXQgY29udGV4dDoNCnJheD0wMDAwMDAwMDI2ZjYw
MDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwDQpyZHg9NmM4YjQ4
MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMA0Kcmlw
PWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2
NDANCiByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgw
MDAyYzFmYzAwDQpyMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9
MDAwMDAwMDAwMDAwMDAyMA0KcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEw
MDANCmlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jDQpjcz0wMDEwICBzcz0w
MDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAgICAgIGVmbD0w
MDAxMDIwMg0KbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCmZmZmZmODAw
YDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBkczow
MDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NClJlc2V0dGluZyBkZWZhdWx0
IHNjb3BlDQoNCkNVU1RPTUVSX0NSQVNIX0NPVU5UOiAgMQ0KDQpERUZBVUxUX0JVQ0tFVF9JRDog
IFdJTjdfRFJJVkVSX0ZBVUxUDQoNCkJVR0NIRUNLX1NUUjogIDB4M0INCg0KUFJPQ0VTU19OQU1F
OiAgbHNhc3MuZXhlDQoNCkNVUlJFTlRfSVJRTDogIDANCg0KQU5BTFlTSVNfVkVSU0lPTjogNi4z
Ljk2MDAuMTcyMzcgKGRlYnVnZ2VycyhkYmcpLjE0MDcxNi0wMzI3KSB4ODZmcmUNCg0KTEFTVF9D
T05UUk9MX1RSQU5TRkVSOiAgZnJvbSAwMDAwMDAwMDAwMDAwMDAwIHRvIGZmZmZmODAwMDJhOGE3
YzUNCg0KU1RBQ0tfVEVYVDogIA0KZmZmZmY4ODBgMDFlODc1ZTAgMDAwMDAwMDBgMDAwMDAwMDAg
OiAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAwMDAwMCAw
MDAwMDAwMGAwMDAwMDAwMCA6IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0MTYN
Cg0KDQpGT0xMT1dVUF9JUDogDQpudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2
KzANCmZmZmZmODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBw
dHIgW3I4XQ0KDQpTWU1CT0xfU1RBQ0tfSU5ERVg6ICAwDQoNClNZTUJPTF9OQU1FOiAgbnQhRXhw
SW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQoNCkZPTExPV1VQX05BTUU6ICBNYWNo
aW5lT3duZXINCg0KTU9EVUxFX05BTUU6IG50DQoNCklNQUdFX05BTUU6ICBudGtybmxtcC5leGUN
Cg0KREVCVUdfRkxSX0lNQUdFX1RJTUVTVEFNUDogIDU1NjM1NmU4DQoNCklNQUdFX1ZFUlNJT046
ICA2LjEuNzYwMS4xODg2OQ0KDQpTVEFDS19DT01NQU5EOiAgLmN4ciAweGZmZmZmODgwMDFlODZj
MDAgOyBrYg0KDQpGQUlMVVJFX0JVQ0tFVF9JRDogIFg2NF8weDNCX250IUV4cEludGVybG9ja2Vk
UG9wRW50cnlTTGlzdEZhdWx0MTYrMA0KDQpCVUNLRVRfSUQ6ICBYNjRfMHgzQl9udCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2KzANCg0KQU5BTFlTSVNfU09VUkNFOiAgS00NCg0K
RkFJTFVSRV9JRF9IQVNIX1NUUklORzogIGttOng2NF8weDNiX250IWV4cGludGVybG9ja2VkcG9w
ZW50cnlzbGlzdGZhdWx0MTYrMA0KDQpGQUlMVVJFX0lEX0hBU0g6ICB7YjM5MGJmMmEtOWMxMS0w
NzlmLTM0YjAtNWRmZmNhYmZmZTRifQ0KDQpGb2xsb3d1cDogTWFjaGluZU93bmVyDQotLS0tLS0t
LS0NCg0KMDoga2Q+IC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwO3INCnJheD0wMDAwMDAwMDI2ZjYw
MDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwDQpyZHg9NmM4YjQ4
MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMA0Kcmlw
PWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2
NDANCiByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgw
MDAyYzFmYzAwDQpyMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9
MDAwMDAwMDAwMDAwMDAyMA0KcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEw
MDANCmlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jDQpjcz0wMDEwICBzcz0w
MDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAgICAgIGVmbD0w
MDAxMDIwMg0KbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCmZmZmZmODAw
YDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBkczow
MDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NCkxhc3Qgc2V0IGNvbnRleHQ6
DQpyYXg9MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAwMDAwMSByY3g9ZmZmZmY4MDAw
MmMxZmMwMA0KcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAgcmRpPTAw
MDAwMDAwMDAwMDAwMDANCnJpcD1mZmZmZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUw
IHJicD1mZmZmZjg4MDAxZTg3NjQwDQogcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9ZmZmZmY4MDAw
MmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEyPWZm
ZmZmODgwMDA5NjcwMDAgcjEzPTAwMDAwMDAwMDAwMDAwMjANCnIxND0wMDAwMDAwMDAwMDAwMDAw
IHIxNT0wMDAwMDAwMDAwMDAxMDAwDQppb3BsPTAgICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBw
ZSBuYw0KY3M9MDAxMCAgc3M9MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAgZnM9MDA1MyAgZ3M9MDAy
YiAgICAgICAgICAgICBlZmw9MDAwMTAyMDINCm50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTY6DQpmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gs
cXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/
DQoNClRoYXQncyBwcmV0dHkgc3RyYW5nZS4gSSdkIHNheSBzb21ldGhpbmcgaXMgcHJvYmFibHkg
Y29ycnVwdC4NCg0KPiBJJ20gZ29pbmcgY3Jhenkgd2l0aCB0aGVzZSB0b28gbWFueSBwcm9ibGVt
cyBhbmQgaGF2ZW4ndCB0aW1lIHRvIGRvIGFsbA0KPiB1c2VmdWwgdGVzdHMgOigNCg0KVG9vIG1h
bnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5nIHdpdGggYSAgNC4yLXJj
IGRvbTAga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdvIGFuZCB1cHN0cmVhbSBx
ZW11IGZyb20gWGVuJ3MgdXBzdHJlYW0gdGFnIChhZ2FpbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdv
KSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IHByb2JsZW1zLiBJIGRvIGhhdmUgYSBmYWlybHkgc3Rh
bmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFuZCBzdGQtdmdhIGdyYXBoaWNzLg0KDQog
IFBhdWwNCg0KPiBDYW4geW91IGFkdmljZSBtZSBhYm91dCBtb3JlIHVzZWZ1bCB0ZXN0cyBmb3Ig
dHJ5IHRvIGZvdW5kL3NvbHZlIHRoZXNlDQo+IHByb2JsZW1zPw0KPiANCj4gVGhhbmtzIGZvciBh
bnkgcmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QK
d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 11:57:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 11:57:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYv3e-0000ct-9E; Mon, 07 Sep 2015 11:57:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYv3c-0000cl-NB
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 11:57:56 +0000
Received: from [193.109.254.147] by server-2.bemta-14.messagelabs.com id
	82/A6-12889-4CB7DE55; Mon, 07 Sep 2015 11:57:56 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1441627074!45343393!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30391 invoked from network); 7 Sep 2015 11:57:54 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 11:57:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,484,1437436800"; 
   d="scan'208";a="2497678"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q///xcoCAADfboA==
Date: Mon, 7 Sep 2015 11:57:52 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
In-Reply-To: <55ED67EF.20008@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNyBTZXB0ZW1iZXIgMjAxNSAxMToz
Mw0KPiBUbzogUGF1bCBEdXJyYW50OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gQ2M6IFJhZmHFgiBX
b2pkecWCYTsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDcvMDkvMjAx
NSAxMToyNiwgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4gRmFiaW8sDQo+ID4NCj4gPiAg
ICBDYW4geW91IGNvbmZpcm0gdGhhdCB5b3UgZG9uJ3Qgc2VlIGFueSBwcm9ibGVtIGlmIHlvdSB1
c2Ugc3RhbmRhcmQgSURFDQo+IGVtdWxhdGVkIGRpc2tzPyBJIGNlcnRhaW5seSBkb24ndC4NCj4g
Pg0KPiA+ICAgIFBhdWwNCj4gV0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdhcyB3aXRoIHNhbWUgcmVz
dWx0cyBidXQgYWJvdXQgdWRldiBwcm9ibGVtIG5vdw0KPiBzZWVtcyBJIGZvdW5kIHRoZSBjYXVz
ZSwgc2VlbXMgdGhlIGRvbTAga2VybmVsLg0KPiBXaXRoIGtlcm5lbCAzLjIuMC00LWFtZDY0IHZl
cnNpb24gMy4yLjY4LTErZGViN3UzIChmcm9tIHdoZWV6eQ0KPiByZXBvc2l0b3J5KSBkb24ndCB3
b3JrcyB3aXRob3V0IHVkZXYgZmlsZSwgd2l0aCAzLjE2LjAtMC5icG8uNC1hbWQ2NA0KPiB2ZXJz
aW9uIDMuMTYuNy1ja3QxMS0xK2RlYjh1M35icG83MCsxIHdvcmtzLg0KPiBJbml0aWFsbHkgbmV3
IHB2IGRyaXZlcnMgd2FzIHdpdGggbmV0d29yayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4x
NA0KPiBidXQgYWZ0ZXIgc2VlbXMgd2FzIHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5
IGNvbW1pdCkgYnV0IHNlZW1zDQo+IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIg
a2VybmVsIGlzIHN0aWxsIG5lZWRlZC4NCj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBw
cm9ibGVtcyBpbnN0ZWFkLCBmb3IgZXhhbXBsZSB3aXRoDQo+IGJhbGxvbmluZyAoZXZlbiBpZiBz
aG91bGQgbm90IGJlIHVzZWQpLg0KPiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYg
SSB0cmllZCB0byByZW1vdmUgYSB3b3JrYXJvdW5kIG9mDQo+IGJhbGxvbmluZyBwcm9ibGVtIChk
b20wX21lbT0yRyxtYXg6M0cgaW4gZ3J1Yi5jZmcgaW5zdGVhZA0KPiBkb20wX21lbT0yRyxtYXg6
MkcpLCBJIG5vbW9yZSBzYXcga2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQ0KPiBjcmFzaGVkIGF0
IGJvb3QuDQo+IEFub3RoZXIgc3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVu
YWJsZWQgZG9uJ3Qgc2hvdyBwdg0KPiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBrZXJu
ZWwgKG9uIG9sZGVyIHRlc3RzIHdpdGggMy4xNiBkaWQgaWYgSQ0KPiByZW1lbWJlciBnb29kKQ0K
PiBJbiBhdHRhY2htZW50IHRoZSB3aW5kb3dzIG1pbmlkdW1wLg0KDQpUaGF0IHlpZWxkZWQ6DQoN
CjA6IGtkPiAhYW5hbHl6ZSAtdg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAgICAgIEJ1Z2NoZWNrIEFuYWx5c2lzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Kg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpTWVNURU1fU0VSVklDRV9FWENFUFRJT04gKDNi
KQ0KQW4gZXhjZXB0aW9uIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBhIHN5c3RlbSBzZXJ2aWNl
IHJvdXRpbmUuDQpBcmd1bWVudHM6DQpBcmcxOiAwMDAwMDAwMGMwMDAwMDA1LCBFeGNlcHRpb24g
Y29kZSB0aGF0IGNhdXNlZCB0aGUgYnVnY2hlY2sNCkFyZzI6IGZmZmZmODAwMDJhOGE3YzUsIEFk
ZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHdoaWNoIGNhdXNlZCB0aGUgYnVnY2hlY2sNCkFyZzM6
IGZmZmZmODgwMDFlODZjMDAsIEFkZHJlc3Mgb2YgdGhlIGNvbnRleHQgcmVjb3JkIGZvciB0aGUg
ZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBidWdjaGVjaw0KQXJnNDogMDAwMDAwMDAwMDAwMDAw
MCwgemVyby4NCg0KRGVidWdnaW5nIERldGFpbHM6DQotLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQpF
WENFUFRJT05fQ09ERTogKE5UU1RBVFVTKSAweGMwMDAwMDA1IC0gVGhlIGluc3RydWN0aW9uIGF0
IDB4JTA4bHggcmVmZXJlbmNlZCBtZW1vcnkgYXQgMHglMDhseC4gVGhlIG1lbW9yeSBjb3VsZCBu
b3QgYmUgJXMuDQoNCkZBVUxUSU5HX0lQOiANCm50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTYrMA0KZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAgcmN4
LHF3b3JkIHB0ciBbcjhdDQoNCkNPTlRFWFQ6ICBmZmZmZjg4MDAxZTg2YzAwIC0tICguY3hyIDB4
ZmZmZmY4ODAwMWU4NmMwMDtyKQ0KcmF4PTAwMDAwMDAwMjZmNjAwMDMgcmJ4PTAwMDAwMDAwMDAw
MDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDANCnJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1mZmZm
ZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAwMDAwMDAwMDAwDQpyaXA9ZmZmZmY4MDAwMmE4YTdjNSBy
c3A9ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KIHI4PTZjOGI0ODMwMjQ1
YzhiNDAgIHI5PWZmZmZmODAwMDJhMWUwMDAgcjEwPWZmZmZmODAwMDJjMWZjMDANCnIxMT0wMDAw
MDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwDQpy
MTQ9MDAwMDAwMDAwMDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAwMA0KaW9wbD0wICAgICAgICAg
bnYgdXAgZWkgcGwgbnogbmEgcGUgbmMNCmNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIgIGVzPTAw
MmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyDQpudCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Og0KZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAg
ICAgICAgIG1vdiAgICAgcmN4LHF3b3JkIHB0ciBbcjhdIGRzOjAwMmI6NmM4YjQ4MzBgMjQ1Yzhi
NDA9Pz8/Pz8/Pz8/Pz8/Pz8/Pw0KTGFzdCBzZXQgY29udGV4dDoNCnJheD0wMDAwMDAwMDI2ZjYw
MDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwDQpyZHg9NmM4YjQ4
MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMA0Kcmlw
PWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2
NDANCiByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgw
MDAyYzFmYzAwDQpyMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9
MDAwMDAwMDAwMDAwMDAyMA0KcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEw
MDANCmlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jDQpjcz0wMDEwICBzcz0w
MDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAgICAgIGVmbD0w
MDAxMDIwMg0KbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCmZmZmZmODAw
YDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBkczow
MDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NClJlc2V0dGluZyBkZWZhdWx0
IHNjb3BlDQoNCkNVU1RPTUVSX0NSQVNIX0NPVU5UOiAgMQ0KDQpERUZBVUxUX0JVQ0tFVF9JRDog
IFdJTjdfRFJJVkVSX0ZBVUxUDQoNCkJVR0NIRUNLX1NUUjogIDB4M0INCg0KUFJPQ0VTU19OQU1F
OiAgbHNhc3MuZXhlDQoNCkNVUlJFTlRfSVJRTDogIDANCg0KQU5BTFlTSVNfVkVSU0lPTjogNi4z
Ljk2MDAuMTcyMzcgKGRlYnVnZ2VycyhkYmcpLjE0MDcxNi0wMzI3KSB4ODZmcmUNCg0KTEFTVF9D
T05UUk9MX1RSQU5TRkVSOiAgZnJvbSAwMDAwMDAwMDAwMDAwMDAwIHRvIGZmZmZmODAwMDJhOGE3
YzUNCg0KU1RBQ0tfVEVYVDogIA0KZmZmZmY4ODBgMDFlODc1ZTAgMDAwMDAwMDBgMDAwMDAwMDAg
OiAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAwMDAwMCAw
MDAwMDAwMGAwMDAwMDAwMCA6IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0MTYN
Cg0KDQpGT0xMT1dVUF9JUDogDQpudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2
KzANCmZmZmZmODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBw
dHIgW3I4XQ0KDQpTWU1CT0xfU1RBQ0tfSU5ERVg6ICAwDQoNClNZTUJPTF9OQU1FOiAgbnQhRXhw
SW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQoNCkZPTExPV1VQX05BTUU6ICBNYWNo
aW5lT3duZXINCg0KTU9EVUxFX05BTUU6IG50DQoNCklNQUdFX05BTUU6ICBudGtybmxtcC5leGUN
Cg0KREVCVUdfRkxSX0lNQUdFX1RJTUVTVEFNUDogIDU1NjM1NmU4DQoNCklNQUdFX1ZFUlNJT046
ICA2LjEuNzYwMS4xODg2OQ0KDQpTVEFDS19DT01NQU5EOiAgLmN4ciAweGZmZmZmODgwMDFlODZj
MDAgOyBrYg0KDQpGQUlMVVJFX0JVQ0tFVF9JRDogIFg2NF8weDNCX250IUV4cEludGVybG9ja2Vk
UG9wRW50cnlTTGlzdEZhdWx0MTYrMA0KDQpCVUNLRVRfSUQ6ICBYNjRfMHgzQl9udCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2KzANCg0KQU5BTFlTSVNfU09VUkNFOiAgS00NCg0K
RkFJTFVSRV9JRF9IQVNIX1NUUklORzogIGttOng2NF8weDNiX250IWV4cGludGVybG9ja2VkcG9w
ZW50cnlzbGlzdGZhdWx0MTYrMA0KDQpGQUlMVVJFX0lEX0hBU0g6ICB7YjM5MGJmMmEtOWMxMS0w
NzlmLTM0YjAtNWRmZmNhYmZmZTRifQ0KDQpGb2xsb3d1cDogTWFjaGluZU93bmVyDQotLS0tLS0t
LS0NCg0KMDoga2Q+IC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwO3INCnJheD0wMDAwMDAwMDI2ZjYw
MDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwDQpyZHg9NmM4YjQ4
MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMA0Kcmlw
PWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2
NDANCiByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgw
MDAyYzFmYzAwDQpyMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9
MDAwMDAwMDAwMDAwMDAyMA0KcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEw
MDANCmlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jDQpjcz0wMDEwICBzcz0w
MDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAgICAgIGVmbD0w
MDAxMDIwMg0KbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCmZmZmZmODAw
YDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBkczow
MDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NCkxhc3Qgc2V0IGNvbnRleHQ6
DQpyYXg9MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAwMDAwMSByY3g9ZmZmZmY4MDAw
MmMxZmMwMA0KcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAgcmRpPTAw
MDAwMDAwMDAwMDAwMDANCnJpcD1mZmZmZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUw
IHJicD1mZmZmZjg4MDAxZTg3NjQwDQogcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9ZmZmZmY4MDAw
MmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEyPWZm
ZmZmODgwMDA5NjcwMDAgcjEzPTAwMDAwMDAwMDAwMDAwMjANCnIxND0wMDAwMDAwMDAwMDAwMDAw
IHIxNT0wMDAwMDAwMDAwMDAxMDAwDQppb3BsPTAgICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBw
ZSBuYw0KY3M9MDAxMCAgc3M9MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAgZnM9MDA1MyAgZ3M9MDAy
YiAgICAgICAgICAgICBlZmw9MDAwMTAyMDINCm50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTY6DQpmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gs
cXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/
DQoNClRoYXQncyBwcmV0dHkgc3RyYW5nZS4gSSdkIHNheSBzb21ldGhpbmcgaXMgcHJvYmFibHkg
Y29ycnVwdC4NCg0KPiBJJ20gZ29pbmcgY3Jhenkgd2l0aCB0aGVzZSB0b28gbWFueSBwcm9ibGVt
cyBhbmQgaGF2ZW4ndCB0aW1lIHRvIGRvIGFsbA0KPiB1c2VmdWwgdGVzdHMgOigNCg0KVG9vIG1h
bnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5nIHdpdGggYSAgNC4yLXJj
IGRvbTAga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdvIGFuZCB1cHN0cmVhbSBx
ZW11IGZyb20gWGVuJ3MgdXBzdHJlYW0gdGFnIChhZ2FpbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdv
KSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IHByb2JsZW1zLiBJIGRvIGhhdmUgYSBmYWlybHkgc3Rh
bmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFuZCBzdGQtdmdhIGdyYXBoaWNzLg0KDQog
IFBhdWwNCg0KPiBDYW4geW91IGFkdmljZSBtZSBhYm91dCBtb3JlIHVzZWZ1bCB0ZXN0cyBmb3Ig
dHJ5IHRvIGZvdW5kL3NvbHZlIHRoZXNlDQo+IHByb2JsZW1zPw0KPiANCj4gVGhhbmtzIGZvciBh
bnkgcmVwbHkgYW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QK
d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 13:01:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 13:01:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYw2x-0004k7-Ip; Mon, 07 Sep 2015 13:01:19 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZYw2w-0004jt-Ay
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 13:01:18 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	55/30-22089-D9A8DE55; Mon, 07 Sep 2015 13:01:17 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-206.messagelabs.com!1441630873!28025954!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12243 invoked from network); 7 Sep 2015 13:01:13 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 13:01:13 -0000
Received: by wicge5 with SMTP id ge5so83327103wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 07 Sep 2015 06:01:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=xhxzvtgU5Pfy05VcoaPSAf5RGtA7jY/qcS+pgoOVAw0=;
	b=QwAzhUkt/zofIMfeE4mfpBIL4lYOvSrg+OAxOItS2WBDwiamFZShRLWx1V7n7xziBo
	dObSY/plBGjw+IJypWIF2KB4j7ZCKvubWwhm5ksI+PdmNTbDXNtBqNlisQvwXnxCk05a
	f5a2g5JkJ0MNdkFvGsERF3XLwMc67LAw7ncA9Bsdz+32UyJReWfWEKrQji2ciAep6UyF
	m0AlrjFH2n/7gQFpyH++zu9rjyBHJwoDRLPeha0LNeD7VNRN3rs5OwpQ/mWfM5FXQ1La
	ledbef4XBTK9CuU7ejsx+vvPEtJp9J1YMZ6/A/sdUQQynDGcgWnilhLYC2fngi3Tq0Xd
	52jA==
X-Gm-Message-State: ALoCoQkUb4Nu0dxxDxRYSykkr38qZdf+Ij3f+ISAs0f9ehG8jRNCRCDEZpMIRQmQO49aWTy+eLqB
X-Received: by 10.180.8.3 with SMTP id n3mr10304371wia.41.1441630873147;
	Mon, 07 Sep 2015 06:01:13 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	gc8sm239438wib.2.2015.09.07.06.01.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 07 Sep 2015 06:01:12 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55ED8A96.5060806@m2r.biz>
Date: Mon, 7 Sep 2015 15:01:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
Content-Length:10472
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDcvMDkvMjAxNSAxMzo1NywgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5m
YW50b25pQG0yci5iaXpdCj4+IFNlbnQ6IDA3IFNlcHRlbWJlciAyMDE1IDExOjMzCj4+IFRvOiBQ
YXVsIER1cnJhbnQ7IFN0ZWZhbm8gU3RhYmVsbGluaQo+PiBDYzogUmFmYcWCIFdvamR5xYJhOyB3
aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPj4gU3ViamVjdDogUmU6IFt3aW4tcHYt
ZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkCj4+Cj4+IElsIDA3LzA5LzIwMTUgMTE6MjYsIFBh
dWwgRHVycmFudCBoYSBzY3JpdHRvOgo+Pj4gRmFiaW8sCj4+Pgo+Pj4gICAgIENhbiB5b3UgY29u
ZmlybSB0aGF0IHlvdSBkb24ndCBzZWUgYW55IHByb2JsZW0gaWYgeW91IHVzZSBzdGFuZGFyZCBJ
REUKPj4gZW11bGF0ZWQgZGlza3M/IEkgY2VydGFpbmx5IGRvbid0Lgo+Pj4gICAgIFBhdWwKPj4g
V0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdhcyB3aXRoIHNhbWUgcmVzdWx0cyBidXQgYWJvdXQgdWRl
diBwcm9ibGVtIG5vdwo+PiBzZWVtcyBJIGZvdW5kIHRoZSBjYXVzZSwgc2VlbXMgdGhlIGRvbTAg
a2VybmVsLgo+PiBXaXRoIGtlcm5lbCAzLjIuMC00LWFtZDY0IHZlcnNpb24gMy4yLjY4LTErZGVi
N3UzIChmcm9tIHdoZWV6eQo+PiByZXBvc2l0b3J5KSBkb24ndCB3b3JrcyB3aXRob3V0IHVkZXYg
ZmlsZSwgd2l0aCAzLjE2LjAtMC5icG8uNC1hbWQ2NAo+PiB2ZXJzaW9uIDMuMTYuNy1ja3QxMS0x
K2RlYjh1M35icG83MCsxIHdvcmtzLgo+PiBJbml0aWFsbHkgbmV3IHB2IGRyaXZlcnMgd2FzIHdp
dGggbmV0d29yayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4xNAo+PiBidXQgYWZ0ZXIgc2Vl
bXMgd2FzIHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5IGNvbW1pdCkgYnV0IHNlZW1z
Cj4+IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIga2VybmVsIGlzIHN0aWxsIG5l
ZWRlZC4KPj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBwcm9ibGVtcyBpbnN0ZWFkLCBm
b3IgZXhhbXBsZSB3aXRoCj4+IGJhbGxvbmluZyAoZXZlbiBpZiBzaG91bGQgbm90IGJlIHVzZWQp
Lgo+PiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYgSSB0cmllZCB0byByZW1vdmUg
YSB3b3JrYXJvdW5kIG9mCj4+IGJhbGxvbmluZyBwcm9ibGVtIChkb20wX21lbT0yRyxtYXg6M0cg
aW4gZ3J1Yi5jZmcgaW5zdGVhZAo+PiBkb20wX21lbT0yRyxtYXg6MkcpLCBJIG5vbW9yZSBzYXcg
a2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQo+PiBjcmFzaGVkIGF0IGJvb3QuCj4+IEFub3RoZXIg
c3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVuYWJsZWQgZG9uJ3Qgc2hvdyBw
dgo+PiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBrZXJuZWwgKG9uIG9sZGVyIHRlc3Rz
IHdpdGggMy4xNiBkaWQgaWYgSQo+PiByZW1lbWJlciBnb29kKQo+PiBJbiBhdHRhY2htZW50IHRo
ZSB3aW5kb3dzIG1pbmlkdW1wLgo+IFRoYXQgeWllbGRlZDoKPgo+IDA6IGtkPiAhYW5hbHl6ZSAt
dgo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCj4gKiAg
ICAgICAgICAgICAgICAgICAgICAgIEJ1Z2NoZWNrIEFuYWx5c2lzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgo+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKPiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCj4KPiBTWVNURU1fU0VSVklDRV9FWENFUFRJT04gKDNiKQo+IEFuIGV4Y2Vw
dGlvbiBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgYSBzeXN0ZW0gc2VydmljZSByb3V0aW5lLgo+
IEFyZ3VtZW50czoKPiBBcmcxOiAwMDAwMDAwMGMwMDAwMDA1LCBFeGNlcHRpb24gY29kZSB0aGF0
IGNhdXNlZCB0aGUgYnVnY2hlY2sKPiBBcmcyOiBmZmZmZjgwMDAyYThhN2M1LCBBZGRyZXNzIG9m
IHRoZSBpbnN0cnVjdGlvbiB3aGljaCBjYXVzZWQgdGhlIGJ1Z2NoZWNrCj4gQXJnMzogZmZmZmY4
ODAwMWU4NmMwMCwgQWRkcmVzcyBvZiB0aGUgY29udGV4dCByZWNvcmQgZm9yIHRoZSBleGNlcHRp
b24gdGhhdCBjYXVzZWQgdGhlIGJ1Z2NoZWNrCj4gQXJnNDogMDAwMDAwMDAwMDAwMDAwMCwgemVy
by4KPgo+IERlYnVnZ2luZyBEZXRhaWxzOgo+IC0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4KPiBFWENF
UFRJT05fQ09ERTogKE5UU1RBVFVTKSAweGMwMDAwMDA1IC0gVGhlIGluc3RydWN0aW9uIGF0IDB4
JTA4bHggcmVmZXJlbmNlZCBtZW1vcnkgYXQgMHglMDhseC4gVGhlIG1lbW9yeSBjb3VsZCBub3Qg
YmUgJXMuCj4KPiBGQVVMVElOR19JUDoKPiBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RG
YXVsdDE2KzAKPiBmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gs
cXdvcmQgcHRyIFtyOF0KPgo+IENPTlRFWFQ6ICBmZmZmZjg4MDAxZTg2YzAwIC0tICguY3hyIDB4
ZmZmZmY4ODAwMWU4NmMwMDtyKQo+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAw
MDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwCj4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZm
ZmZmODAwMDJjY2Y4ZDAgcmRpPTAwMDAwMDAwMDAwMDAwMDAKPiByaXA9ZmZmZmY4MDAwMmE4YTdj
NSByc3A9ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MAo+ICAgcjg9NmM4YjQ4
MzAyNDVjOGI0MCAgcjk9ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMAo+IHIx
MT0wMDAwMDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAw
MDIwCj4gcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDAKPiBpb3BsPTAg
ICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYwo+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAw
MmIgIGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyCj4g
bnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoKPiBmZmZmZjgwMGAwMmE4YTdj
NSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2Yzhi
NDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/Cj4gTGFzdCBzZXQgY29udGV4dDoKPiByYXg9
MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAwMDAwMSByY3g9ZmZmZmY4MDAwMmMxZmMw
MAo+IHJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1mZmZmZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAw
MDAwMDAwMDAwCj4gcmlwPWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJw
PWZmZmZmODgwMDFlODc2NDAKPiAgIHI4PTZjOGI0ODMwMjQ1YzhiNDAgIHI5PWZmZmZmODAwMDJh
MWUwMDAgcjEwPWZmZmZmODAwMDJjMWZjMDAKPiByMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZm
ZmY4ODAwMDk2NzAwMCByMTM9MDAwMDAwMDAwMDAwMDAyMAo+IHIxND0wMDAwMDAwMDAwMDAwMDAw
IHIxNT0wMDAwMDAwMDAwMDAxMDAwCj4gaW9wbD0wICAgICAgICAgbnYgdXAgZWkgcGwgbnogbmEg
cGUgbmMKPiBjcz0wMDEwICBzcz0wMDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0w
MDJiICAgICAgICAgICAgIGVmbD0wMDAxMDIwMgo+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlT
TGlzdEZhdWx0MTY6Cj4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAg
cmN4LHF3b3JkIHB0ciBbcjhdIGRzOjAwMmI6NmM4YjQ4MzBgMjQ1YzhiNDA9Pz8/Pz8/Pz8/Pz8/
Pz8/Pwo+IFJlc2V0dGluZyBkZWZhdWx0IHNjb3BlCj4KPiBDVVNUT01FUl9DUkFTSF9DT1VOVDog
IDEKPgo+IERFRkFVTFRfQlVDS0VUX0lEOiAgV0lON19EUklWRVJfRkFVTFQKPgo+IEJVR0NIRUNL
X1NUUjogIDB4M0IKPgo+IFBST0NFU1NfTkFNRTogIGxzYXNzLmV4ZQo+Cj4gQ1VSUkVOVF9JUlFM
OiAgMAo+Cj4gQU5BTFlTSVNfVkVSU0lPTjogNi4zLjk2MDAuMTcyMzcgKGRlYnVnZ2VycyhkYmcp
LjE0MDcxNi0wMzI3KSB4ODZmcmUKPgo+IExBU1RfQ09OVFJPTF9UUkFOU0ZFUjogIGZyb20gMDAw
MDAwMDAwMDAwMDAwMCB0byBmZmZmZjgwMDAyYThhN2M1Cj4KPiBTVEFDS19URVhUOgo+IGZmZmZm
ODgwYDAxZTg3NWUwIDAwMDAwMDAwYDAwMDAwMDAwIDogMDAwMDAwMDBgMDAwMDAwMDAgMDAwMDAw
MDBgMDAwMDAwMDAgMDAwMDAwMDBgMDAwMDAwMDAgMDAwMDAwMDBgMDAwMDAwMDAgOiBudCFFeHBJ
bnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Cj4KPgo+IEZPTExPV1VQX0lQOgo+IG50IUV4
cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0MTYrMAo+IGZmZmZmODAwYDAyYThhN2M1IDQ5
OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQo+Cj4gU1lNQk9MX1NUQUNL
X0lOREVYOiAgMAo+Cj4gU1lNQk9MX05BTUU6ICBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xp
c3RGYXVsdDE2KzAKPgo+IEZPTExPV1VQX05BTUU6ICBNYWNoaW5lT3duZXIKPgo+IE1PRFVMRV9O
QU1FOiBudAo+Cj4gSU1BR0VfTkFNRTogIG50a3JubG1wLmV4ZQo+Cj4gREVCVUdfRkxSX0lNQUdF
X1RJTUVTVEFNUDogIDU1NjM1NmU4Cj4KPiBJTUFHRV9WRVJTSU9OOiAgNi4xLjc2MDEuMTg4NjkK
Pgo+IFNUQUNLX0NPTU1BTkQ6ICAuY3hyIDB4ZmZmZmY4ODAwMWU4NmMwMCA7IGtiCj4KPiBGQUlM
VVJFX0JVQ0tFVF9JRDogIFg2NF8weDNCX250IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZh
dWx0MTYrMAo+Cj4gQlVDS0VUX0lEOiAgWDY0XzB4M0JfbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRy
eVNMaXN0RmF1bHQxNiswCj4KPiBBTkFMWVNJU19TT1VSQ0U6ICBLTQo+Cj4gRkFJTFVSRV9JRF9I
QVNIX1NUUklORzogIGttOng2NF8weDNiX250IWV4cGludGVybG9ja2VkcG9wZW50cnlzbGlzdGZh
dWx0MTYrMAo+Cj4gRkFJTFVSRV9JRF9IQVNIOiAge2IzOTBiZjJhLTljMTEtMDc5Zi0zNGIwLTVk
ZmZjYWJmZmU0Yn0KPgo+IEZvbGxvd3VwOiBNYWNoaW5lT3duZXIKPiAtLS0tLS0tLS0KPgo+IDA6
IGtkPiAuY3hyIDB4ZmZmZmY4ODAwMWU4NmMwMDtyCj4gcmF4PTAwMDAwMDAwMjZmNjAwMDMgcmJ4
PTAwMDAwMDAwMDAwMDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDAKPiByZHg9NmM4YjQ4MzAyNDVj
OGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMAo+IHJpcD1mZmZm
ZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUwIHJicD1mZmZmZjg4MDAxZTg3NjQwCj4g
ICByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgwMDAy
YzFmYzAwCj4gcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEyPWZmZmZmODgwMDA5NjcwMDAgcjEzPTAw
MDAwMDAwMDAwMDAwMjAKPiByMTQ9MDAwMDAwMDAwMDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAw
MAo+IGlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jCj4gY3M9MDAxMCAgc3M9
MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAgZnM9MDA1MyAgZ3M9MDAyYiAgICAgICAgICAgICBlZmw9
MDAwMTAyMDIKPiBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Ogo+IGZmZmZm
ODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBk
czowMDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8KPiBMYXN0IHNldCBjb250
ZXh0Ogo+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZm
ZjgwMDAyYzFmYzAwCj4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAg
cmRpPTAwMDAwMDAwMDAwMDAwMDAKPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9ZmZmZmY4ODAw
MWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MAo+ICAgcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9
ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMAo+IHIxMT0wMDAwMDAwMDAwMDAw
MDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwCj4gcjE0PTAwMDAw
MDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDAKPiBpb3BsPTAgICAgICAgICBudiB1cCBl
aSBwbCBueiBuYSBwZSBuYwo+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIgIGVzPTAwMmIgIGZz
PTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyCj4gbnQhRXhwSW50ZXJsb2Nr
ZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoKPiBmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAg
ICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/
Pz8/Pz8/Pz8/Pz8/Pz8/Cj4KPiBUaGF0J3MgcHJldHR5IHN0cmFuZ2UuIEknZCBzYXkgc29tZXRo
aW5nIGlzIHByb2JhYmx5IGNvcnJ1cHQuCgpUaGUgY29ycnVwdGlvbiBJIHNhdyBmb3Igc3VyZSBh
Ym91dCBkaXNrcyBhcmUgdXNpbmcgYnRyZnMgYXMgZG9tMCBmcyAoaW4gCnJhcmUgY2FzZXMpIGFu
ZCB3aXRoIHFjb3cyIG92ZXJsYXkuClRoZXNlIHRlc3RzIGFyZSBpbnN0ZWFkIHdpdGggZXh0NCBh
bmQgcmF3IGRvbVVzIGRpc2suCkFib3V0IG90aGVycyBjb3JydXB0aW9ucyAobm90IG9ubHkgZGlz
a3MpIEkgZG9uJ3Qga25vdy4KCj4KPj4gSSdtIGdvaW5nIGNyYXp5IHdpdGggdGhlc2UgdG9vIG1h
bnkgcHJvYmxlbXMgYW5kIGhhdmVuJ3QgdGltZSB0byBkbyBhbGwKPj4gdXNlZnVsIHRlc3RzIDoo
Cj4gVG9vIG1hbnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5nIHdpdGgg
YSAgNC4yLXJjIGRvbTAga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdvIGFuZCB1
cHN0cmVhbSBxZW11IGZyb20gWGVuJ3MgdXBzdHJlYW0gdGFnIChhZ2FpbiBmcm9tIGFib3V0IDMg
d2Vla3MgYWdvKSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IHByb2JsZW1zLiBJIGRvIGhhdmUgYSBm
YWlybHkgc3RhbmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFuZCBzdGQtdmdhIGdyYXBo
aWNzLgo+Cj4gICAgUGF1bAoKQWJvdXQgZG9tMCBrZXJuZWwsIGFyZSB5b3UgdXNpbmcgYnVpbGQg
ZnJvbSBhIHBhY2thZ2UgbyBjdXN0b20gYnVpbGQ/CkNhbiBiZSB1c2VmdWwgZm9yIG1lIHRyeSBr
ZXJuZWwgNC4yIGluc3RlYWQ/Cgo+Cj4+IENhbiB5b3UgYWR2aWNlIG1lIGFib3V0IG1vcmUgdXNl
ZnVsIHRlc3RzIGZvciB0cnkgdG8gZm91bmQvc29sdmUgdGhlc2UKPj4gcHJvYmxlbXM/Cj4+Cj4+
IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVs
IG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xp
c3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 13:01:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 13:01:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYw2x-0004k7-Ip; Mon, 07 Sep 2015 13:01:19 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZYw2w-0004jt-Ay
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 13:01:18 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	55/30-22089-D9A8DE55; Mon, 07 Sep 2015 13:01:17 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-10.tower-206.messagelabs.com!1441630873!28025954!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12243 invoked from network); 7 Sep 2015 13:01:13 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-10.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 13:01:13 -0000
Received: by wicge5 with SMTP id ge5so83327103wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 07 Sep 2015 06:01:13 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=xhxzvtgU5Pfy05VcoaPSAf5RGtA7jY/qcS+pgoOVAw0=;
	b=QwAzhUkt/zofIMfeE4mfpBIL4lYOvSrg+OAxOItS2WBDwiamFZShRLWx1V7n7xziBo
	dObSY/plBGjw+IJypWIF2KB4j7ZCKvubWwhm5ksI+PdmNTbDXNtBqNlisQvwXnxCk05a
	f5a2g5JkJ0MNdkFvGsERF3XLwMc67LAw7ncA9Bsdz+32UyJReWfWEKrQji2ciAep6UyF
	m0AlrjFH2n/7gQFpyH++zu9rjyBHJwoDRLPeha0LNeD7VNRN3rs5OwpQ/mWfM5FXQ1La
	ledbef4XBTK9CuU7ejsx+vvPEtJp9J1YMZ6/A/sdUQQynDGcgWnilhLYC2fngi3Tq0Xd
	52jA==
X-Gm-Message-State: ALoCoQkUb4Nu0dxxDxRYSykkr38qZdf+Ij3f+ISAs0f9ehG8jRNCRCDEZpMIRQmQO49aWTy+eLqB
X-Received: by 10.180.8.3 with SMTP id n3mr10304371wia.41.1441630873147;
	Mon, 07 Sep 2015 06:01:13 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	gc8sm239438wib.2.2015.09.07.06.01.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 07 Sep 2015 06:01:12 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55ED8A96.5060806@m2r.biz>
Date: Mon, 7 Sep 2015 15:01:10 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
Content-Length:10472
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SWwgMDcvMDkvMjAxNSAxMzo1NywgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86Cj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5m
YW50b25pQG0yci5iaXpdCj4+IFNlbnQ6IDA3IFNlcHRlbWJlciAyMDE1IDExOjMzCj4+IFRvOiBQ
YXVsIER1cnJhbnQ7IFN0ZWZhbm8gU3RhYmVsbGluaQo+PiBDYzogUmFmYcWCIFdvamR5xYJhOyB3
aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPj4gU3ViamVjdDogUmU6IFt3aW4tcHYt
ZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkCj4+Cj4+IElsIDA3LzA5LzIwMTUgMTE6MjYsIFBh
dWwgRHVycmFudCBoYSBzY3JpdHRvOgo+Pj4gRmFiaW8sCj4+Pgo+Pj4gICAgIENhbiB5b3UgY29u
ZmlybSB0aGF0IHlvdSBkb24ndCBzZWUgYW55IHByb2JsZW0gaWYgeW91IHVzZSBzdGFuZGFyZCBJ
REUKPj4gZW11bGF0ZWQgZGlza3M/IEkgY2VydGFpbmx5IGRvbid0Lgo+Pj4gICAgIFBhdWwKPj4g
V0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdhcyB3aXRoIHNhbWUgcmVzdWx0cyBidXQgYWJvdXQgdWRl
diBwcm9ibGVtIG5vdwo+PiBzZWVtcyBJIGZvdW5kIHRoZSBjYXVzZSwgc2VlbXMgdGhlIGRvbTAg
a2VybmVsLgo+PiBXaXRoIGtlcm5lbCAzLjIuMC00LWFtZDY0IHZlcnNpb24gMy4yLjY4LTErZGVi
N3UzIChmcm9tIHdoZWV6eQo+PiByZXBvc2l0b3J5KSBkb24ndCB3b3JrcyB3aXRob3V0IHVkZXYg
ZmlsZSwgd2l0aCAzLjE2LjAtMC5icG8uNC1hbWQ2NAo+PiB2ZXJzaW9uIDMuMTYuNy1ja3QxMS0x
K2RlYjh1M35icG83MCsxIHdvcmtzLgo+PiBJbml0aWFsbHkgbmV3IHB2IGRyaXZlcnMgd2FzIHdp
dGggbmV0d29yayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4xNAo+PiBidXQgYWZ0ZXIgc2Vl
bXMgd2FzIHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5IGNvbW1pdCkgYnV0IHNlZW1z
Cj4+IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIga2VybmVsIGlzIHN0aWxsIG5l
ZWRlZC4KPj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBwcm9ibGVtcyBpbnN0ZWFkLCBm
b3IgZXhhbXBsZSB3aXRoCj4+IGJhbGxvbmluZyAoZXZlbiBpZiBzaG91bGQgbm90IGJlIHVzZWQp
Lgo+PiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYgSSB0cmllZCB0byByZW1vdmUg
YSB3b3JrYXJvdW5kIG9mCj4+IGJhbGxvbmluZyBwcm9ibGVtIChkb20wX21lbT0yRyxtYXg6M0cg
aW4gZ3J1Yi5jZmcgaW5zdGVhZAo+PiBkb20wX21lbT0yRyxtYXg6MkcpLCBJIG5vbW9yZSBzYXcg
a2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQo+PiBjcmFzaGVkIGF0IGJvb3QuCj4+IEFub3RoZXIg
c3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVuYWJsZWQgZG9uJ3Qgc2hvdyBw
dgo+PiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBrZXJuZWwgKG9uIG9sZGVyIHRlc3Rz
IHdpdGggMy4xNiBkaWQgaWYgSQo+PiByZW1lbWJlciBnb29kKQo+PiBJbiBhdHRhY2htZW50IHRo
ZSB3aW5kb3dzIG1pbmlkdW1wLgo+IFRoYXQgeWllbGRlZDoKPgo+IDA6IGtkPiAhYW5hbHl6ZSAt
dgo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioKPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCj4gKiAg
ICAgICAgICAgICAgICAgICAgICAgIEJ1Z2NoZWNrIEFuYWx5c2lzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKgo+ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKPiAqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCj4KPiBTWVNURU1fU0VSVklDRV9FWENFUFRJT04gKDNiKQo+IEFuIGV4Y2Vw
dGlvbiBoYXBwZW5lZCB3aGlsZSBleGVjdXRpbmcgYSBzeXN0ZW0gc2VydmljZSByb3V0aW5lLgo+
IEFyZ3VtZW50czoKPiBBcmcxOiAwMDAwMDAwMGMwMDAwMDA1LCBFeGNlcHRpb24gY29kZSB0aGF0
IGNhdXNlZCB0aGUgYnVnY2hlY2sKPiBBcmcyOiBmZmZmZjgwMDAyYThhN2M1LCBBZGRyZXNzIG9m
IHRoZSBpbnN0cnVjdGlvbiB3aGljaCBjYXVzZWQgdGhlIGJ1Z2NoZWNrCj4gQXJnMzogZmZmZmY4
ODAwMWU4NmMwMCwgQWRkcmVzcyBvZiB0aGUgY29udGV4dCByZWNvcmQgZm9yIHRoZSBleGNlcHRp
b24gdGhhdCBjYXVzZWQgdGhlIGJ1Z2NoZWNrCj4gQXJnNDogMDAwMDAwMDAwMDAwMDAwMCwgemVy
by4KPgo+IERlYnVnZ2luZyBEZXRhaWxzOgo+IC0tLS0tLS0tLS0tLS0tLS0tLQo+Cj4KPiBFWENF
UFRJT05fQ09ERTogKE5UU1RBVFVTKSAweGMwMDAwMDA1IC0gVGhlIGluc3RydWN0aW9uIGF0IDB4
JTA4bHggcmVmZXJlbmNlZCBtZW1vcnkgYXQgMHglMDhseC4gVGhlIG1lbW9yeSBjb3VsZCBub3Qg
YmUgJXMuCj4KPiBGQVVMVElOR19JUDoKPiBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RG
YXVsdDE2KzAKPiBmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gs
cXdvcmQgcHRyIFtyOF0KPgo+IENPTlRFWFQ6ICBmZmZmZjg4MDAxZTg2YzAwIC0tICguY3hyIDB4
ZmZmZmY4ODAwMWU4NmMwMDtyKQo+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAw
MDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFmYzAwCj4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZm
ZmZmODAwMDJjY2Y4ZDAgcmRpPTAwMDAwMDAwMDAwMDAwMDAKPiByaXA9ZmZmZmY4MDAwMmE4YTdj
NSByc3A9ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MAo+ICAgcjg9NmM4YjQ4
MzAyNDVjOGI0MCAgcjk9ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMAo+IHIx
MT0wMDAwMDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAw
MDIwCj4gcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDAKPiBpb3BsPTAg
ICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYwo+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAw
MmIgIGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyCj4g
bnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoKPiBmZmZmZjgwMGAwMmE4YTdj
NSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2Yzhi
NDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/Cj4gTGFzdCBzZXQgY29udGV4dDoKPiByYXg9
MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAwMDAwMSByY3g9ZmZmZmY4MDAwMmMxZmMw
MAo+IHJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1mZmZmZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAw
MDAwMDAwMDAwCj4gcmlwPWZmZmZmODAwMDJhOGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJw
PWZmZmZmODgwMDFlODc2NDAKPiAgIHI4PTZjOGI0ODMwMjQ1YzhiNDAgIHI5PWZmZmZmODAwMDJh
MWUwMDAgcjEwPWZmZmZmODAwMDJjMWZjMDAKPiByMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZm
ZmY4ODAwMDk2NzAwMCByMTM9MDAwMDAwMDAwMDAwMDAyMAo+IHIxND0wMDAwMDAwMDAwMDAwMDAw
IHIxNT0wMDAwMDAwMDAwMDAxMDAwCj4gaW9wbD0wICAgICAgICAgbnYgdXAgZWkgcGwgbnogbmEg
cGUgbmMKPiBjcz0wMDEwICBzcz0wMDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0w
MDJiICAgICAgICAgICAgIGVmbD0wMDAxMDIwMgo+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlT
TGlzdEZhdWx0MTY6Cj4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAg
cmN4LHF3b3JkIHB0ciBbcjhdIGRzOjAwMmI6NmM4YjQ4MzBgMjQ1YzhiNDA9Pz8/Pz8/Pz8/Pz8/
Pz8/Pwo+IFJlc2V0dGluZyBkZWZhdWx0IHNjb3BlCj4KPiBDVVNUT01FUl9DUkFTSF9DT1VOVDog
IDEKPgo+IERFRkFVTFRfQlVDS0VUX0lEOiAgV0lON19EUklWRVJfRkFVTFQKPgo+IEJVR0NIRUNL
X1NUUjogIDB4M0IKPgo+IFBST0NFU1NfTkFNRTogIGxzYXNzLmV4ZQo+Cj4gQ1VSUkVOVF9JUlFM
OiAgMAo+Cj4gQU5BTFlTSVNfVkVSU0lPTjogNi4zLjk2MDAuMTcyMzcgKGRlYnVnZ2VycyhkYmcp
LjE0MDcxNi0wMzI3KSB4ODZmcmUKPgo+IExBU1RfQ09OVFJPTF9UUkFOU0ZFUjogIGZyb20gMDAw
MDAwMDAwMDAwMDAwMCB0byBmZmZmZjgwMDAyYThhN2M1Cj4KPiBTVEFDS19URVhUOgo+IGZmZmZm
ODgwYDAxZTg3NWUwIDAwMDAwMDAwYDAwMDAwMDAwIDogMDAwMDAwMDBgMDAwMDAwMDAgMDAwMDAw
MDBgMDAwMDAwMDAgMDAwMDAwMDBgMDAwMDAwMDAgMDAwMDAwMDBgMDAwMDAwMDAgOiBudCFFeHBJ
bnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Cj4KPgo+IEZPTExPV1VQX0lQOgo+IG50IUV4
cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0MTYrMAo+IGZmZmZmODAwYDAyYThhN2M1IDQ5
OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQo+Cj4gU1lNQk9MX1NUQUNL
X0lOREVYOiAgMAo+Cj4gU1lNQk9MX05BTUU6ICBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xp
c3RGYXVsdDE2KzAKPgo+IEZPTExPV1VQX05BTUU6ICBNYWNoaW5lT3duZXIKPgo+IE1PRFVMRV9O
QU1FOiBudAo+Cj4gSU1BR0VfTkFNRTogIG50a3JubG1wLmV4ZQo+Cj4gREVCVUdfRkxSX0lNQUdF
X1RJTUVTVEFNUDogIDU1NjM1NmU4Cj4KPiBJTUFHRV9WRVJTSU9OOiAgNi4xLjc2MDEuMTg4NjkK
Pgo+IFNUQUNLX0NPTU1BTkQ6ICAuY3hyIDB4ZmZmZmY4ODAwMWU4NmMwMCA7IGtiCj4KPiBGQUlM
VVJFX0JVQ0tFVF9JRDogIFg2NF8weDNCX250IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZh
dWx0MTYrMAo+Cj4gQlVDS0VUX0lEOiAgWDY0XzB4M0JfbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRy
eVNMaXN0RmF1bHQxNiswCj4KPiBBTkFMWVNJU19TT1VSQ0U6ICBLTQo+Cj4gRkFJTFVSRV9JRF9I
QVNIX1NUUklORzogIGttOng2NF8weDNiX250IWV4cGludGVybG9ja2VkcG9wZW50cnlzbGlzdGZh
dWx0MTYrMAo+Cj4gRkFJTFVSRV9JRF9IQVNIOiAge2IzOTBiZjJhLTljMTEtMDc5Zi0zNGIwLTVk
ZmZjYWJmZmU0Yn0KPgo+IEZvbGxvd3VwOiBNYWNoaW5lT3duZXIKPiAtLS0tLS0tLS0KPgo+IDA6
IGtkPiAuY3hyIDB4ZmZmZmY4ODAwMWU4NmMwMDtyCj4gcmF4PTAwMDAwMDAwMjZmNjAwMDMgcmJ4
PTAwMDAwMDAwMDAwMDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDAKPiByZHg9NmM4YjQ4MzAyNDVj
OGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAwMDAwMAo+IHJpcD1mZmZm
ZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUwIHJicD1mZmZmZjg4MDAxZTg3NjQwCj4g
ICByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAyYTFlMDAwIHIxMD1mZmZmZjgwMDAy
YzFmYzAwCj4gcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEyPWZmZmZmODgwMDA5NjcwMDAgcjEzPTAw
MDAwMDAwMDAwMDAwMjAKPiByMTQ9MDAwMDAwMDAwMDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAw
MAo+IGlvcGw9MCAgICAgICAgIG52IHVwIGVpIHBsIG56IG5hIHBlIG5jCj4gY3M9MDAxMCAgc3M9
MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAgZnM9MDA1MyAgZ3M9MDAyYiAgICAgICAgICAgICBlZmw9
MDAwMTAyMDIKPiBudCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Ogo+IGZmZmZm
ODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XSBk
czowMDJiOjZjOGI0ODMwYDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8KPiBMYXN0IHNldCBjb250
ZXh0Ogo+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZm
ZjgwMDAyYzFmYzAwCj4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAg
cmRpPTAwMDAwMDAwMDAwMDAwMDAKPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9ZmZmZmY4ODAw
MWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MAo+ICAgcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9
ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMAo+IHIxMT0wMDAwMDAwMDAwMDAw
MDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwCj4gcjE0PTAwMDAw
MDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDAKPiBpb3BsPTAgICAgICAgICBudiB1cCBl
aSBwbCBueiBuYSBwZSBuYwo+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIgIGVzPTAwMmIgIGZz
PTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyCj4gbnQhRXhwSW50ZXJsb2Nr
ZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoKPiBmZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAg
ICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/
Pz8/Pz8/Pz8/Pz8/Pz8/Cj4KPiBUaGF0J3MgcHJldHR5IHN0cmFuZ2UuIEknZCBzYXkgc29tZXRo
aW5nIGlzIHByb2JhYmx5IGNvcnJ1cHQuCgpUaGUgY29ycnVwdGlvbiBJIHNhdyBmb3Igc3VyZSBh
Ym91dCBkaXNrcyBhcmUgdXNpbmcgYnRyZnMgYXMgZG9tMCBmcyAoaW4gCnJhcmUgY2FzZXMpIGFu
ZCB3aXRoIHFjb3cyIG92ZXJsYXkuClRoZXNlIHRlc3RzIGFyZSBpbnN0ZWFkIHdpdGggZXh0NCBh
bmQgcmF3IGRvbVVzIGRpc2suCkFib3V0IG90aGVycyBjb3JydXB0aW9ucyAobm90IG9ubHkgZGlz
a3MpIEkgZG9uJ3Qga25vdy4KCj4KPj4gSSdtIGdvaW5nIGNyYXp5IHdpdGggdGhlc2UgdG9vIG1h
bnkgcHJvYmxlbXMgYW5kIGhhdmVuJ3QgdGltZSB0byBkbyBhbGwKPj4gdXNlZnVsIHRlc3RzIDoo
Cj4gVG9vIG1hbnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5nIHdpdGgg
YSAgNC4yLXJjIGRvbTAga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3MgYWdvIGFuZCB1
cHN0cmVhbSBxZW11IGZyb20gWGVuJ3MgdXBzdHJlYW0gdGFnIChhZ2FpbiBmcm9tIGFib3V0IDMg
d2Vla3MgYWdvKSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IHByb2JsZW1zLiBJIGRvIGhhdmUgYSBm
YWlybHkgc3RhbmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFuZCBzdGQtdmdhIGdyYXBo
aWNzLgo+Cj4gICAgUGF1bAoKQWJvdXQgZG9tMCBrZXJuZWwsIGFyZSB5b3UgdXNpbmcgYnVpbGQg
ZnJvbSBhIHBhY2thZ2UgbyBjdXN0b20gYnVpbGQ/CkNhbiBiZSB1c2VmdWwgZm9yIG1lIHRyeSBr
ZXJuZWwgNC4yIGluc3RlYWQ/Cgo+Cj4+IENhbiB5b3UgYWR2aWNlIG1lIGFib3V0IG1vcmUgdXNl
ZnVsIHRlc3RzIGZvciB0cnkgdG8gZm91bmQvc29sdmUgdGhlc2UKPj4gcHJvYmxlbXM/Cj4+Cj4+
IFRoYW5rcyBmb3IgYW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVs
IG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xp
c3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:05:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:05:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYx3E-0001dh-QP; Mon, 07 Sep 2015 14:05:40 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZYx3D-0001dc-IP
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:05:39 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	C7/0E-31122-2B99DE55; Mon, 07 Sep 2015 14:05:38 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-21.messagelabs.com!1441634730!510976!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.1; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 58065 invoked from network); 7 Sep 2015 14:05:37 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 7 Sep 2015 14:05:37 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 6552821215
	for <win-pv-devel@lists.xenproject.org>;
	Mon,  7 Sep 2015 10:05:30 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Mon, 07 Sep 2015 10:05:30 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=lTLojLEkqDwn0IaL
	WiXSKi2A+QE=; b=JmZI5wCxxZWwQ9HtkTT7WrkRPxbgQi72rjsQW5R2Af4KmesB
	RQoQKT4iXvhmOTX7yvtuBrp1NQ79odFSTDWgmUGjNDXOoSYD2Z+mU1huhZZQMIHp
	lRAxyM8S1z0+GMUHNlZd72WkCm+cCWHldB7IQyMk/eXXI9x5GBZtjLav9Bw=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=lTLojLEkqDwn0Ia
	LWiXSKi2A+QE=; b=VHV7wEXjM7noTzOpHnuzkRwWgOyPbvRZgPPfal1CQLuUia9
	S55dHAR6ZNGEgOvb4vCamJz+Ytpc2onIh4ZUABJNFSUzpnn6JjvpzghXh8amEDwP
	cLjk+eopvhupLdvfnb3Fm4vT+CBack5TJHBfJctk/FBF1ENx+HdCNh52AmWc=
X-Sasl-enc: ybKmpW/VCX0i4ZxUB6O3jbQ4KjdKokceId3BuTTdz9Bz 1441634730
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id CB117C00286;
	Mon,  7 Sep 2015 10:05:29 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
	<55E99119.9030809@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55ED99B3.7090000@invisiblethingslab.com>
Date: Mon, 7 Sep 2015 16:05:39 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55E99119.9030809@invisiblethingslab.com>
Content-Length: 3113
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxNDozOSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOgo+IE9uIDIwMTUtMDkt
MDQgMTA6NTgsIFBhdWwgRHVycmFudCB3cm90ZToKPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tCj4+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBb
bWFpbHRvOndpbi1wdi1kZXZlbC0KPj4+IGJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmddIE9u
IEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhCj4+PiBTZW50OiAyNSBBdWd1c3QgMjAxNSAxNzoxNgo+
Pj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+Pj4gU3ViamVjdDogW3dp
bi1wdi1kZXZlbF0gW1BBVENIIDEvMl0gQWRkIGZvcmVpZ24gcGFnZSBtYXBwaW5nIGZ1bmN0aW9u
cyB0bwo+Pj4gdGhlIEdOVFRBQiBpbnRlcmZhY2UKPj4+Cj4+PiArX19jaGVja1JldHVybgo+Pj4g
K1hFTl9BUEkKPj4+ICtOVFNUQVRVUwo+Pj4gK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgKPj4+
ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4+ICsgICAgSU4gIFVM
T05HICAgICAgICAgICAgICAgICAgIEdyYW50UmVmLAo+Pj4gKyAgICBJTiAgUEhZU0lDQUxfQURE
UkVTUyAgICAgICAgQWRkcmVzcywKPj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAg
IFJlYWRPbmx5LAo+Pj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZQo+
Pj4gKyAgICApCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgb3A7
Cj4+PiArICAgIExPTkdfUFRSIHJjOwo+Pj4gKyAgICBOVFNUQVRVUyBzdGF0dXM7Cj4+PiArCj4+
PiArICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsKPj4+ICsgICAgb3AuZG9tID0g
RG9tYWluOwo+Pj4gKyAgICBvcC5yZWYgPSBHcmFudFJlZjsKPj4+ICsgICAgb3AuZmxhZ3MgPSBH
TlRNQVBfaG9zdF9tYXA7Cj4+PiArICAgIGlmIChSZWFkT25seSkKPj4+ICsgICAgICAgIG9wLmZs
YWdzIHw9IEdOVE1BUF9yZWFkb25seTsKPj4+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5R
dWFkUGFydDsKPj4+ICsKPj4+ICsgICAgcmMgPSBHcmFudFRhYmxlT3AoR05UVEFCT1BfbWFwX2dy
YW50X3JlZiwgJm9wLCAxKTsKPj4+ICsKPj4+ICsgICAgaWYgKHJjIDwgMCkgewo+Pj4gKyAgICAg
ICAgRVJSTk9fVE9fU1RBVFVTKC1yYywgc3RhdHVzKTsKPj4+ICsgICAgICAgIGdvdG8gZmFpbDE7
Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7
Cj4+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOwo+Pj4gKyAgICAgICAg
Z290byBmYWlsMjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAqSGFuZGxlID0gb3AuaGFuZGxl
Owo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cj4+PiArCj4+PiArZmFpbDI6
Cj4+PiArICAgIEVycm9yKCJmYWlsMjogb3Auc3RhdHVzID0gJWRcbiIsIG9wLnN0YXR1cyk7Cj4+
Cj4+IEluIGdlbmVyYWwgSSd2ZSB0cmllZCB0byBrZWVwICdFcnJvcicgbWVzc2FnZXMgb3RoZXIg
dGhhbiAnZmFpbDE6JwpwbGFpbi4gUmF0aGVyIHRoYW4ganVzdCBzZXR0aW5nIHN0YXR1cyB0byB1
bnN1Y2Nlc3NmdWwgYW5kIGxvZ2dpbmcgdGhlCnJhdyBncmFudCBzdGF0dXMgaGVyZSBpdCB3b3Vs
ZCBiZSBuaWNlciB0byBoYXZlIGEgR05UU1RfVE9fU1RBVFVTKCkKbWFjcm8gdG8gc2V0IHN0YXR1
cyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgdGhlbiBqdXN0IGxvZyB0aGF0IGluCnRoZSAn
ZmFpbDE6JyBiZWxvdy4KPiBOb3RlZC4KVW5mb3J0dW5hdGVseSBtb3N0IG9mIHRoZSBHTlRTVF8q
IHZhbHVlcyBkb24ndCByZWFsbHkgaGF2ZSBhbnkKbWVhbmluZ2Z1bCBOVFNUQVRVUyBlcXVpdmFs
ZW50cy4gQW55IGlkZWFzIG9uIGhvdyB0byBhcHByb2FjaCB0aGlzPyBJCmd1ZXNzIHdlIGNvdWxk
IGRlZmluZSBjdXN0b20gdmFsdWVzIGJ1dCB0aGF0IGRvZXNuJ3Qgc291bmQgaWRlYWwuLi4KCi0t
IApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBz
Oi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxt
YW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:05:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:05:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYx3E-0001dh-QP; Mon, 07 Sep 2015 14:05:40 +0000
Received: from mail6.bemta4.messagelabs.com ([85.158.143.247])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZYx3D-0001dc-IP
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:05:39 +0000
Received: from [85.158.143.35] by server-3.bemta-4.messagelabs.com id
	C7/0E-31122-2B99DE55; Mon, 07 Sep 2015 14:05:38 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-21.messagelabs.com!1441634730!510976!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 7.19.1; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 58065 invoked from network); 7 Sep 2015 14:05:37 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384
	encrypted SMTP; 7 Sep 2015 14:05:37 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 6552821215
	for <win-pv-devel@lists.xenproject.org>;
	Mon,  7 Sep 2015 10:05:30 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Mon, 07 Sep 2015 10:05:30 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=lTLojLEkqDwn0IaL
	WiXSKi2A+QE=; b=JmZI5wCxxZWwQ9HtkTT7WrkRPxbgQi72rjsQW5R2Af4KmesB
	RQoQKT4iXvhmOTX7yvtuBrp1NQ79odFSTDWgmUGjNDXOoSYD2Z+mU1huhZZQMIHp
	lRAxyM8S1z0+GMUHNlZd72WkCm+cCWHldB7IQyMk/eXXI9x5GBZtjLav9Bw=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=lTLojLEkqDwn0Ia
	LWiXSKi2A+QE=; b=VHV7wEXjM7noTzOpHnuzkRwWgOyPbvRZgPPfal1CQLuUia9
	S55dHAR6ZNGEgOvb4vCamJz+Ytpc2onIh4ZUABJNFSUzpnn6JjvpzghXh8amEDwP
	cLjk+eopvhupLdvfnb3Fm4vT+CBack5TJHBfJctk/FBF1ENx+HdCNh52AmWc=
X-Sasl-enc: ybKmpW/VCX0i4ZxUB6O3jbQ4KjdKokceId3BuTTdz9Bz 1441634730
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id CB117C00286;
	Mon,  7 Sep 2015 10:05:29 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
	<55E99119.9030809@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55ED99B3.7090000@invisiblethingslab.com>
Date: Mon, 7 Sep 2015 16:05:39 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55E99119.9030809@invisiblethingslab.com>
Content-Length: 3113
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wNCAxNDozOSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOgo+IE9uIDIwMTUtMDkt
MDQgMTA6NTgsIFBhdWwgRHVycmFudCB3cm90ZToKPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tCj4+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBb
bWFpbHRvOndpbi1wdi1kZXZlbC0KPj4+IGJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmddIE9u
IEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhCj4+PiBTZW50OiAyNSBBdWd1c3QgMjAxNSAxNzoxNgo+
Pj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+Pj4gU3ViamVjdDogW3dp
bi1wdi1kZXZlbF0gW1BBVENIIDEvMl0gQWRkIGZvcmVpZ24gcGFnZSBtYXBwaW5nIGZ1bmN0aW9u
cyB0bwo+Pj4gdGhlIEdOVFRBQiBpbnRlcmZhY2UKPj4+Cj4+PiArX19jaGVja1JldHVybgo+Pj4g
K1hFTl9BUEkKPj4+ICtOVFNUQVRVUwo+Pj4gK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgKPj4+
ICsgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwKPj4+ICsgICAgSU4gIFVM
T05HICAgICAgICAgICAgICAgICAgIEdyYW50UmVmLAo+Pj4gKyAgICBJTiAgUEhZU0lDQUxfQURE
UkVTUyAgICAgICAgQWRkcmVzcywKPj4+ICsgICAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgICAg
IFJlYWRPbmx5LAo+Pj4gKyAgICBPVVQgVUxPTkcgICAgICAgICAgICAgICAgICAgKkhhbmRsZQo+
Pj4gKyAgICApCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgb3A7
Cj4+PiArICAgIExPTkdfUFRSIHJjOwo+Pj4gKyAgICBOVFNUQVRVUyBzdGF0dXM7Cj4+PiArCj4+
PiArICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yob3ApKTsKPj4+ICsgICAgb3AuZG9tID0g
RG9tYWluOwo+Pj4gKyAgICBvcC5yZWYgPSBHcmFudFJlZjsKPj4+ICsgICAgb3AuZmxhZ3MgPSBH
TlRNQVBfaG9zdF9tYXA7Cj4+PiArICAgIGlmIChSZWFkT25seSkKPj4+ICsgICAgICAgIG9wLmZs
YWdzIHw9IEdOVE1BUF9yZWFkb25seTsKPj4+ICsgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVzcy5R
dWFkUGFydDsKPj4+ICsKPj4+ICsgICAgcmMgPSBHcmFudFRhYmxlT3AoR05UVEFCT1BfbWFwX2dy
YW50X3JlZiwgJm9wLCAxKTsKPj4+ICsKPj4+ICsgICAgaWYgKHJjIDwgMCkgewo+Pj4gKyAgICAg
ICAgRVJSTk9fVE9fU1RBVFVTKC1yYywgc3RhdHVzKTsKPj4+ICsgICAgICAgIGdvdG8gZmFpbDE7
Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgaWYgKG9wLnN0YXR1cyAhPSBHTlRTVF9va2F5KSB7
Cj4+PiArICAgICAgICBzdGF0dXMgPSBTVEFUVVNfVU5TVUNDRVNTRlVMOwo+Pj4gKyAgICAgICAg
Z290byBmYWlsMjsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAqSGFuZGxlID0gb3AuaGFuZGxl
Owo+Pj4gKwo+Pj4gKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Cj4+PiArCj4+PiArZmFpbDI6
Cj4+PiArICAgIEVycm9yKCJmYWlsMjogb3Auc3RhdHVzID0gJWRcbiIsIG9wLnN0YXR1cyk7Cj4+
Cj4+IEluIGdlbmVyYWwgSSd2ZSB0cmllZCB0byBrZWVwICdFcnJvcicgbWVzc2FnZXMgb3RoZXIg
dGhhbiAnZmFpbDE6JwpwbGFpbi4gUmF0aGVyIHRoYW4ganVzdCBzZXR0aW5nIHN0YXR1cyB0byB1
bnN1Y2Nlc3NmdWwgYW5kIGxvZ2dpbmcgdGhlCnJhdyBncmFudCBzdGF0dXMgaGVyZSBpdCB3b3Vs
ZCBiZSBuaWNlciB0byBoYXZlIGEgR05UU1RfVE9fU1RBVFVTKCkKbWFjcm8gdG8gc2V0IHN0YXR1
cyB0byBzb21ldGhpbmcgbWVhbmluZ2Z1bCBhbmQgdGhlbiBqdXN0IGxvZyB0aGF0IGluCnRoZSAn
ZmFpbDE6JyBiZWxvdy4KPiBOb3RlZC4KVW5mb3J0dW5hdGVseSBtb3N0IG9mIHRoZSBHTlRTVF8q
IHZhbHVlcyBkb24ndCByZWFsbHkgaGF2ZSBhbnkKbWVhbmluZ2Z1bCBOVFNUQVRVUyBlcXVpdmFs
ZW50cy4gQW55IGlkZWFzIG9uIGhvdyB0byBhcHByb2FjaCB0aGlzPyBJCmd1ZXNzIHdlIGNvdWxk
IGRlZmluZSBjdXN0b20gdmFsdWVzIGJ1dCB0aGF0IGRvZXNuJ3Qgc291bmQgaWRlYWwuLi4KCi0t
IApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBz
Oi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxt
YW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:41:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:41:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYxbn-0004ai-7A; Mon, 07 Sep 2015 14:41:23 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYxbl-0004ad-Cr
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:41:21 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	47/37-26043-012ADE55; Mon, 07 Sep 2015 14:41:20 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441636879!47467066!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9889 invoked from network); 7 Sep 2015 14:41:19 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 14:41:19 -0000
X-IronPort-AV: E=Sophos;i="5.17,485,1437436800"; 
   d="scan'208";a="2502449"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q///xcoCAADfboP//8XQAAAei8bA=
Date: Mon, 7 Sep 2015 14:41:17 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
In-Reply-To: <55ED8A96.5060806@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNyBTZXB0ZW1iZXIgMjAxNSAxNDow
MQ0KPiBUbzogUGF1bCBEdXJyYW50OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gQ2M6IFJhZmHFgiBX
b2pkecWCYTsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDcvMDkvMjAx
NSAxMzo1NywgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25p
QG0yci5iaXpdDQo+ID4+IFNlbnQ6IDA3IFNlcHRlbWJlciAyMDE1IDExOjMzDQo+ID4+IFRvOiBQ
YXVsIER1cnJhbnQ7IFN0ZWZhbm8gU3RhYmVsbGluaQ0KPiA+PiBDYzogUmFmYcWCIFdvamR5xYJh
OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gU3ViamVjdDogUmU6IFt3
aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkDQo+ID4+DQo+ID4+IElsIDA3LzA5LzIw
MTUgMTE6MjYsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KPiA+Pj4gRmFiaW8sDQo+ID4+Pg0K
PiA+Pj4gICAgIENhbiB5b3UgY29uZmlybSB0aGF0IHlvdSBkb24ndCBzZWUgYW55IHByb2JsZW0g
aWYgeW91IHVzZSBzdGFuZGFyZA0KPiBJREUNCj4gPj4gZW11bGF0ZWQgZGlza3M/IEkgY2VydGFp
bmx5IGRvbid0Lg0KPiA+Pj4gICAgIFBhdWwNCj4gPj4gV0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdh
cyB3aXRoIHNhbWUgcmVzdWx0cyBidXQgYWJvdXQgdWRldiBwcm9ibGVtIG5vdw0KPiA+PiBzZWVt
cyBJIGZvdW5kIHRoZSBjYXVzZSwgc2VlbXMgdGhlIGRvbTAga2VybmVsLg0KPiA+PiBXaXRoIGtl
cm5lbCAzLjIuMC00LWFtZDY0IHZlcnNpb24gMy4yLjY4LTErZGViN3UzIChmcm9tIHdoZWV6eQ0K
PiA+PiByZXBvc2l0b3J5KSBkb24ndCB3b3JrcyB3aXRob3V0IHVkZXYgZmlsZSwgd2l0aCAzLjE2
LjAtMC5icG8uNC1hbWQ2NA0KPiA+PiB2ZXJzaW9uIDMuMTYuNy1ja3QxMS0xK2RlYjh1M35icG83
MCsxIHdvcmtzLg0KPiA+PiBJbml0aWFsbHkgbmV3IHB2IGRyaXZlcnMgd2FzIHdpdGggbmV0d29y
ayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4xNA0KPiA+PiBidXQgYWZ0ZXIgc2VlbXMgd2Fz
IHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5IGNvbW1pdCkgYnV0IHNlZW1zDQo+ID4+
IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIga2VybmVsIGlzIHN0aWxsIG5lZWRl
ZC4NCj4gPj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBwcm9ibGVtcyBpbnN0ZWFkLCBm
b3IgZXhhbXBsZSB3aXRoDQo+ID4+IGJhbGxvbmluZyAoZXZlbiBpZiBzaG91bGQgbm90IGJlIHVz
ZWQpLg0KPiA+PiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYgSSB0cmllZCB0byBy
ZW1vdmUgYSB3b3JrYXJvdW5kIG9mDQo+ID4+IGJhbGxvbmluZyBwcm9ibGVtIChkb20wX21lbT0y
RyxtYXg6M0cgaW4gZ3J1Yi5jZmcgaW5zdGVhZA0KPiA+PiBkb20wX21lbT0yRyxtYXg6MkcpLCBJ
IG5vbW9yZSBzYXcga2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQ0KPiA+PiBjcmFzaGVkIGF0IGJv
b3QuDQo+ID4+IEFub3RoZXIgc3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVu
YWJsZWQgZG9uJ3Qgc2hvdyBwdg0KPiA+PiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBr
ZXJuZWwgKG9uIG9sZGVyIHRlc3RzIHdpdGggMy4xNiBkaWQgaWYgSQ0KPiA+PiByZW1lbWJlciBn
b29kKQ0KPiA+PiBJbiBhdHRhY2htZW50IHRoZSB3aW5kb3dzIG1pbmlkdW1wLg0KPiA+IFRoYXQg
eWllbGRlZDoNCj4gPg0KPiA+IDA6IGtkPiAhYW5hbHl6ZSAtdg0KPiA+DQo+ICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioq
KioqKioqKioqKioqKioqDQo+ID4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KPiA+ICogICAgICAg
ICAgICAgICAgICAgICAgICBCdWdjaGVjayBBbmFseXNpcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoNCj4gPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQo+ID4NCj4gKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAq
KioqKioqKioqKioqKioqKioqKioNCj4gPg0KPiA+IFNZU1RFTV9TRVJWSUNFX0VYQ0VQVElPTiAo
M2IpDQo+ID4gQW4gZXhjZXB0aW9uIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBhIHN5c3RlbSBz
ZXJ2aWNlIHJvdXRpbmUuDQo+ID4gQXJndW1lbnRzOg0KPiA+IEFyZzE6IDAwMDAwMDAwYzAwMDAw
MDUsIEV4Y2VwdGlvbiBjb2RlIHRoYXQgY2F1c2VkIHRoZSBidWdjaGVjaw0KPiA+IEFyZzI6IGZm
ZmZmODAwMDJhOGE3YzUsIEFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHdoaWNoIGNhdXNlZCB0
aGUNCj4gYnVnY2hlY2sNCj4gPiBBcmczOiBmZmZmZjg4MDAxZTg2YzAwLCBBZGRyZXNzIG9mIHRo
ZSBjb250ZXh0IHJlY29yZCBmb3IgdGhlIGV4Y2VwdGlvbg0KPiB0aGF0IGNhdXNlZCB0aGUgYnVn
Y2hlY2sNCj4gPiBBcmc0OiAwMDAwMDAwMDAwMDAwMDAwLCB6ZXJvLg0KPiA+DQo+ID4gRGVidWdn
aW5nIERldGFpbHM6DQo+ID4gLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4NCj4gPg0KPiA+IEVYQ0VQ
VElPTl9DT0RFOiAoTlRTVEFUVVMpIDB4YzAwMDAwMDUgLSBUaGUgaW5zdHJ1Y3Rpb24gYXQgMHgl
MDhseA0KPiByZWZlcmVuY2VkIG1lbW9yeSBhdCAweCUwOGx4LiBUaGUgbWVtb3J5IGNvdWxkIG5v
dCBiZSAlcy4NCj4gPg0KPiA+IEZBVUxUSU5HX0lQOg0KPiA+IG50IUV4cEludGVybG9ja2VkUG9w
RW50cnlTTGlzdEZhdWx0MTYrMA0KPiA+IGZmZmZmODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAg
ICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQ0KPiA+DQo+ID4gQ09OVEVYVDogIGZmZmZmODgw
MDFlODZjMDAgLS0gKC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwO3IpDQo+ID4gcmF4PTAwMDAwMDAw
MjZmNjAwMDMgcmJ4PTAwMDAwMDAwMDAwMDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDANCj4gPiBy
ZHg9NmM4YjQ4MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAw
MDAwMA0KPiA+IHJpcD1mZmZmZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUwIHJicD1m
ZmZmZjg4MDAxZTg3NjQwDQo+ID4gICByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAy
YTFlMDAwIHIxMD1mZmZmZjgwMDAyYzFmYzAwDQo+ID4gcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEy
PWZmZmZmODgwMDA5NjcwMDAgcjEzPTAwMDAwMDAwMDAwMDAwMjANCj4gPiByMTQ9MDAwMDAwMDAw
MDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAwMA0KPiA+IGlvcGw9MCAgICAgICAgIG52IHVwIGVp
IHBsIG56IG5hIHBlIG5jDQo+ID4gY3M9MDAxMCAgc3M9MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAg
ZnM9MDA1MyAgZ3M9MDAyYiAgICAgICAgICAgICBlZmw9MDAwMTAyMDINCj4gPiBudCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Og0KPiA+IGZmZmZmODAwYDAyYThhN2M1IDQ5OGIw
OCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQ0KPiBkczowMDJiOjZjOGI0ODMw
YDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NCj4gPiBMYXN0IHNldCBjb250ZXh0Og0KPiA+IHJh
eD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFm
YzAwDQo+ID4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAgcmRpPTAw
MDAwMDAwMDAwMDAwMDANCj4gPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9ZmZmZmY4ODAwMWU4
NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KPiA+ICAgcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9
ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHIxMT0wMDAwMDAwMDAw
MDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwDQo+ID4gcjE0
PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDANCj4gPiBpb3BsPTAgICAgICAg
ICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYw0KPiA+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIg
IGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyDQo+ID4g
bnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCj4gPiBmZmZmZjgwMGAwMmE4
YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0NCj4gZHM6MDAy
Yjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/DQo+ID4gUmVzZXR0aW5nIGRlZmF1
bHQgc2NvcGUNCj4gPg0KPiA+IENVU1RPTUVSX0NSQVNIX0NPVU5UOiAgMQ0KPiA+DQo+ID4gREVG
QVVMVF9CVUNLRVRfSUQ6ICBXSU43X0RSSVZFUl9GQVVMVA0KPiA+DQo+ID4gQlVHQ0hFQ0tfU1RS
OiAgMHgzQg0KPiA+DQo+ID4gUFJPQ0VTU19OQU1FOiAgbHNhc3MuZXhlDQo+ID4NCj4gPiBDVVJS
RU5UX0lSUUw6ICAwDQo+ID4NCj4gPiBBTkFMWVNJU19WRVJTSU9OOiA2LjMuOTYwMC4xNzIzNyAo
ZGVidWdnZXJzKGRiZykuMTQwNzE2LTAzMjcpIHg4NmZyZQ0KPiA+DQo+ID4gTEFTVF9DT05UUk9M
X1RSQU5TRkVSOiAgZnJvbSAwMDAwMDAwMDAwMDAwMDAwIHRvIGZmZmZmODAwMDJhOGE3YzUNCj4g
Pg0KPiA+IFNUQUNLX1RFWFQ6DQo+ID4gZmZmZmY4ODBgMDFlODc1ZTAgMDAwMDAwMDBgMDAwMDAw
MDAgOiAwMDAwMDAwMGAwMDAwMDAwMA0KPiAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAw
MDAwMCAwMDAwMDAwMGAwMDAwMDAwMCA6DQo+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTYNCj4gPg0KPiA+DQo+ID4gRk9MTE9XVVBfSVA6DQo+ID4gbnQhRXhwSW50ZXJsb2Nr
ZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQo+ID4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAg
ICAgICAgIG1vdiAgICAgcmN4LHF3b3JkIHB0ciBbcjhdDQo+ID4NCj4gPiBTWU1CT0xfU1RBQ0tf
SU5ERVg6ICAwDQo+ID4NCj4gPiBTWU1CT0xfTkFNRTogIG50IUV4cEludGVybG9ja2VkUG9wRW50
cnlTTGlzdEZhdWx0MTYrMA0KPiA+DQo+ID4gRk9MTE9XVVBfTkFNRTogIE1hY2hpbmVPd25lcg0K
PiA+DQo+ID4gTU9EVUxFX05BTUU6IG50DQo+ID4NCj4gPiBJTUFHRV9OQU1FOiAgbnRrcm5sbXAu
ZXhlDQo+ID4NCj4gPiBERUJVR19GTFJfSU1BR0VfVElNRVNUQU1QOiAgNTU2MzU2ZTgNCj4gPg0K
PiA+IElNQUdFX1ZFUlNJT046ICA2LjEuNzYwMS4xODg2OQ0KPiA+DQo+ID4gU1RBQ0tfQ09NTUFO
RDogIC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwIDsga2INCj4gPg0KPiA+IEZBSUxVUkVfQlVDS0VU
X0lEOiAgWDY0XzB4M0JfbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQo+
ID4NCj4gPiBCVUNLRVRfSUQ6ICBYNjRfMHgzQl9udCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xp
c3RGYXVsdDE2KzANCj4gPg0KPiA+IEFOQUxZU0lTX1NPVVJDRTogIEtNDQo+ID4NCj4gPiBGQUlM
VVJFX0lEX0hBU0hfU1RSSU5HOg0KPiBrbTp4NjRfMHgzYl9udCFleHBpbnRlcmxvY2tlZHBvcGVu
dHJ5c2xpc3RmYXVsdDE2KzANCj4gPg0KPiA+IEZBSUxVUkVfSURfSEFTSDogIHtiMzkwYmYyYS05
YzExLTA3OWYtMzRiMC01ZGZmY2FiZmZlNGJ9DQo+ID4NCj4gPiBGb2xsb3d1cDogTWFjaGluZU93
bmVyDQo+ID4gLS0tLS0tLS0tDQo+ID4NCj4gPiAwOiBrZD4gLmN4ciAweGZmZmZmODgwMDFlODZj
MDA7cg0KPiA+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1m
ZmZmZjgwMDAyYzFmYzAwDQo+ID4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJj
Y2Y4ZDAgcmRpPTAwMDAwMDAwMDAwMDAwMDANCj4gPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9
ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KPiA+ICAgcjg9NmM4YjQ4MzAy
NDVjOGI0MCAgcjk9ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHIx
MT0wMDAwMDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAw
MDIwDQo+ID4gcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDANCj4gPiBp
b3BsPTAgICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYw0KPiA+IGNzPTAwMTAgIHNzPTAw
MTggIGRzPTAwMmIgIGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAw
MDEwMjAyDQo+ID4gbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCj4gPiBm
ZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFty
OF0NCj4gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/DQo+ID4gTGFz
dCBzZXQgY29udGV4dDoNCj4gPiByYXg9MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAw
MDAwMSByY3g9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1m
ZmZmZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAwMDAwMDAwMDAwDQo+ID4gcmlwPWZmZmZmODAwMDJh
OGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2NDANCj4gPiAgIHI4
PTZjOGI0ODMwMjQ1YzhiNDAgIHI5PWZmZmZmODAwMDJhMWUwMDAgcjEwPWZmZmZmODAwMDJjMWZj
MDANCj4gPiByMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9MDAw
MDAwMDAwMDAwMDAyMA0KPiA+IHIxND0wMDAwMDAwMDAwMDAwMDAwIHIxNT0wMDAwMDAwMDAwMDAx
MDAwDQo+ID4gaW9wbD0wICAgICAgICAgbnYgdXAgZWkgcGwgbnogbmEgcGUgbmMNCj4gPiBjcz0w
MDEwICBzcz0wMDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAg
ICAgIGVmbD0wMDAxMDIwMg0KPiA+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0
MTY6DQo+ID4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAgcmN4LHF3
b3JkIHB0ciBbcjhdDQo+IGRzOjAwMmI6NmM4YjQ4MzBgMjQ1YzhiNDA9Pz8/Pz8/Pz8/Pz8/Pz8/
Pw0KPiA+DQo+ID4gVGhhdCdzIHByZXR0eSBzdHJhbmdlLiBJJ2Qgc2F5IHNvbWV0aGluZyBpcyBw
cm9iYWJseSBjb3JydXB0Lg0KPiANCj4gVGhlIGNvcnJ1cHRpb24gSSBzYXcgZm9yIHN1cmUgYWJv
dXQgZGlza3MgYXJlIHVzaW5nIGJ0cmZzIGFzIGRvbTAgZnMgKGluDQo+IHJhcmUgY2FzZXMpIGFu
ZCB3aXRoIHFjb3cyIG92ZXJsYXkuDQo+IFRoZXNlIHRlc3RzIGFyZSBpbnN0ZWFkIHdpdGggZXh0
NCBhbmQgcmF3IGRvbVVzIGRpc2suDQo+IEFib3V0IG90aGVycyBjb3JydXB0aW9ucyAobm90IG9u
bHkgZGlza3MpIEkgZG9uJ3Qga25vdy4NCg0KSSdtIGp1c3QgdXNpbmcgYSBzaW5nbGUgbGF5ZXIg
cWNvdzIuDQoNCj4gDQo+ID4NCj4gPj4gSSdtIGdvaW5nIGNyYXp5IHdpdGggdGhlc2UgdG9vIG1h
bnkgcHJvYmxlbXMgYW5kIGhhdmVuJ3QgdGltZSB0byBkbyBhbGwNCj4gPj4gdXNlZnVsIHRlc3Rz
IDooDQo+ID4gVG9vIG1hbnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5n
IHdpdGggYSAgNC4yLXJjIGRvbTANCj4ga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3Mg
YWdvIGFuZCB1cHN0cmVhbSBxZW11IGZyb20gWGVuJ3MNCj4gdXBzdHJlYW0gdGFnIChhZ2FpbiBm
cm9tIGFib3V0IDMgd2Vla3MgYWdvKSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55DQo+IHByb2JsZW1z
LiBJIGRvIGhhdmUgYSBmYWlybHkgc3RhbmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFu
ZCBzdGQtdmdhDQo+IGdyYXBoaWNzLg0KPiA+DQo+ID4gICAgUGF1bA0KPiANCj4gQWJvdXQgZG9t
MCBrZXJuZWwsIGFyZSB5b3UgdXNpbmcgYnVpbGQgZnJvbSBhIHBhY2thZ2UgbyBjdXN0b20gYnVp
bGQ/DQo+IENhbiBiZSB1c2VmdWwgZm9yIG1lIHRyeSBrZXJuZWwgNC4yIGluc3RlYWQ/DQo+IA0K
DQpJJ20gYnVpbGRpbmcgbXkgb3duLiBJJ20gb24gYSB3aGVlenkgYmFzZSBidXQgMy4yIGlzIG11
Y2ggdG9vIG9sZCBhIGtlcm5lbCBmb3IgbWUuDQoNCiAgUGF1bA0KDQo+ID4NCj4gPj4gQ2FuIHlv
dSBhZHZpY2UgbWUgYWJvdXQgbW9yZSB1c2VmdWwgdGVzdHMgZm9yIHRyeSB0byBmb3VuZC9zb2x2
ZSB0aGVzZQ0KPiA+PiBwcm9ibGVtcz8NCj4gPj4NCj4gPj4gVGhhbmtzIGZvciBhbnkgcmVwbHkg
YW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCg0KX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:41:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:41:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYxbn-0004ai-7A; Mon, 07 Sep 2015 14:41:23 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYxbl-0004ad-Cr
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:41:21 +0000
Received: from [193.109.254.147] by server-9.bemta-14.messagelabs.com id
	47/37-26043-012ADE55; Mon, 07 Sep 2015 14:41:20 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441636879!47467066!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=1.7 required=7.0 tests=BIZ_TLD,received_headers: 
	No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9889 invoked from network); 7 Sep 2015 14:41:19 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 14:41:19 -0000
X-IronPort-AV: E=Sophos;i="5.17,485,1437436800"; 
   d="scan'208";a="2502449"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Stefano Stabellini
	<Stefano.Stabellini@citrix.com>
Thread-Topic: [win-pv-devel] Problems with xenvbd
Thread-Index: AQHQ2f2kBHBqHqNqAUuMLqb8opkfOZ4T1qyQgAF72ICAAKpOAIAAVDmAgBGCQbCAARDmAIAAIuHQgAMtWwCAAFKiAIAAIjzg///fngCAABbuAIAESm0Q///xcoCAADfboP//8XQAAAei8bA=
Date: Mon, 7 Sep 2015 14:41:17 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
In-Reply-To: <55ED8A96.5060806@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBGYWJpbyBGYW50b25pIFttYWls
dG86ZmFiaW8uZmFudG9uaUBtMnIuYml6XQ0KPiBTZW50OiAwNyBTZXB0ZW1iZXIgMjAxNSAxNDow
MQ0KPiBUbzogUGF1bCBEdXJyYW50OyBTdGVmYW5vIFN0YWJlbGxpbmkNCj4gQ2M6IFJhZmHFgiBX
b2pkecWCYTsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IFN1YmplY3Q6IFJl
OiBbd2luLXB2LWRldmVsXSBQcm9ibGVtcyB3aXRoIHhlbnZiZA0KPiANCj4gSWwgMDcvMDkvMjAx
NSAxMzo1NywgUGF1bCBEdXJyYW50IGhhIHNjcml0dG86DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVz
c2FnZS0tLS0tDQo+ID4+IEZyb206IEZhYmlvIEZhbnRvbmkgW21haWx0bzpmYWJpby5mYW50b25p
QG0yci5iaXpdDQo+ID4+IFNlbnQ6IDA3IFNlcHRlbWJlciAyMDE1IDExOjMzDQo+ID4+IFRvOiBQ
YXVsIER1cnJhbnQ7IFN0ZWZhbm8gU3RhYmVsbGluaQ0KPiA+PiBDYzogUmFmYcWCIFdvamR5xYJh
OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gU3ViamVjdDogUmU6IFt3
aW4tcHYtZGV2ZWxdIFByb2JsZW1zIHdpdGggeGVudmJkDQo+ID4+DQo+ID4+IElsIDA3LzA5LzIw
MTUgMTE6MjYsIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KPiA+Pj4gRmFiaW8sDQo+ID4+Pg0K
PiA+Pj4gICAgIENhbiB5b3UgY29uZmlybSB0aGF0IHlvdSBkb24ndCBzZWUgYW55IHByb2JsZW0g
aWYgeW91IHVzZSBzdGFuZGFyZA0KPiBJREUNCj4gPj4gZW11bGF0ZWQgZGlza3M/IEkgY2VydGFp
bmx5IGRvbid0Lg0KPiA+Pj4gICAgIFBhdWwNCj4gPj4gV0l0aCBpZGUgaW5zdGVhZCBhaGNpIHdh
cyB3aXRoIHNhbWUgcmVzdWx0cyBidXQgYWJvdXQgdWRldiBwcm9ibGVtIG5vdw0KPiA+PiBzZWVt
cyBJIGZvdW5kIHRoZSBjYXVzZSwgc2VlbXMgdGhlIGRvbTAga2VybmVsLg0KPiA+PiBXaXRoIGtl
cm5lbCAzLjIuMC00LWFtZDY0IHZlcnNpb24gMy4yLjY4LTErZGViN3UzIChmcm9tIHdoZWV6eQ0K
PiA+PiByZXBvc2l0b3J5KSBkb24ndCB3b3JrcyB3aXRob3V0IHVkZXYgZmlsZSwgd2l0aCAzLjE2
LjAtMC5icG8uNC1hbWQ2NA0KPiA+PiB2ZXJzaW9uIDMuMTYuNy1ja3QxMS0xK2RlYjh1M35icG83
MCsxIHdvcmtzLg0KPiA+PiBJbml0aWFsbHkgbmV3IHB2IGRyaXZlcnMgd2FzIHdpdGggbmV0d29y
ayBub3Qgd29ya2luZyB3aXRoIGtlcm5lbCA8My4xNA0KPiA+PiBidXQgYWZ0ZXIgc2VlbXMgd2Fz
IHNvbHZlZCAoSSBkb24ndCBrbm93IHRoZSBleGFjdGx5IGNvbW1pdCkgYnV0IHNlZW1zDQo+ID4+
IHRoYXQgeGVuIHdpdGhvdXQgdWRldiBmaWxlIGEgbmV3ZXIga2VybmVsIGlzIHN0aWxsIG5lZWRl
ZC4NCj4gPj4gV2l0aCAzLjE2IGtlcm5lbCBJIGhhZCBvdGhlciBwcm9ibGVtcyBpbnN0ZWFkLCBm
b3IgZXhhbXBsZSB3aXRoDQo+ID4+IGJhbGxvbmluZyAoZXZlbiBpZiBzaG91bGQgbm90IGJlIHVz
ZWQpLg0KPiA+PiBXaXRoIHNlY29uZCB0ZXN0IHdpdGgga2VybmVsIDMuMTYgSSB0cmllZCB0byBy
ZW1vdmUgYSB3b3JrYXJvdW5kIG9mDQo+ID4+IGJhbGxvbmluZyBwcm9ibGVtIChkb20wX21lbT0y
RyxtYXg6M0cgaW4gZ3J1Yi5jZmcgaW5zdGVhZA0KPiA+PiBkb20wX21lbT0yRyxtYXg6MkcpLCBJ
IG5vbW9yZSBzYXcga2Vybi5sb2cgc3BhbSBidXQgVzcgZG9tVQ0KPiA+PiBjcmFzaGVkIGF0IGJv
b3QuDQo+ID4+IEFub3RoZXIgc3RyYW5nZSB0aGluZ3MgaXMgZXZlbiBpZiB3aXRoIHRyYWNlIGVu
YWJsZWQgZG9uJ3Qgc2hvdyBwdg0KPiA+PiBkcml2ZXJzIGRlYnVnIGxpbmVzIHdpdGggMy4xNiBr
ZXJuZWwgKG9uIG9sZGVyIHRlc3RzIHdpdGggMy4xNiBkaWQgaWYgSQ0KPiA+PiByZW1lbWJlciBn
b29kKQ0KPiA+PiBJbiBhdHRhY2htZW50IHRoZSB3aW5kb3dzIG1pbmlkdW1wLg0KPiA+IFRoYXQg
eWllbGRlZDoNCj4gPg0KPiA+IDA6IGtkPiAhYW5hbHl6ZSAtdg0KPiA+DQo+ICoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioq
KioqKioqKioqKioqKioqDQo+ID4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KPiA+ICogICAgICAg
ICAgICAgICAgICAgICAgICBCdWdjaGVjayBBbmFseXNpcyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoNCj4gPiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQo+ID4NCj4gKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAq
KioqKioqKioqKioqKioqKioqKioNCj4gPg0KPiA+IFNZU1RFTV9TRVJWSUNFX0VYQ0VQVElPTiAo
M2IpDQo+ID4gQW4gZXhjZXB0aW9uIGhhcHBlbmVkIHdoaWxlIGV4ZWN1dGluZyBhIHN5c3RlbSBz
ZXJ2aWNlIHJvdXRpbmUuDQo+ID4gQXJndW1lbnRzOg0KPiA+IEFyZzE6IDAwMDAwMDAwYzAwMDAw
MDUsIEV4Y2VwdGlvbiBjb2RlIHRoYXQgY2F1c2VkIHRoZSBidWdjaGVjaw0KPiA+IEFyZzI6IGZm
ZmZmODAwMDJhOGE3YzUsIEFkZHJlc3Mgb2YgdGhlIGluc3RydWN0aW9uIHdoaWNoIGNhdXNlZCB0
aGUNCj4gYnVnY2hlY2sNCj4gPiBBcmczOiBmZmZmZjg4MDAxZTg2YzAwLCBBZGRyZXNzIG9mIHRo
ZSBjb250ZXh0IHJlY29yZCBmb3IgdGhlIGV4Y2VwdGlvbg0KPiB0aGF0IGNhdXNlZCB0aGUgYnVn
Y2hlY2sNCj4gPiBBcmc0OiAwMDAwMDAwMDAwMDAwMDAwLCB6ZXJvLg0KPiA+DQo+ID4gRGVidWdn
aW5nIERldGFpbHM6DQo+ID4gLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4NCj4gPg0KPiA+IEVYQ0VQ
VElPTl9DT0RFOiAoTlRTVEFUVVMpIDB4YzAwMDAwMDUgLSBUaGUgaW5zdHJ1Y3Rpb24gYXQgMHgl
MDhseA0KPiByZWZlcmVuY2VkIG1lbW9yeSBhdCAweCUwOGx4LiBUaGUgbWVtb3J5IGNvdWxkIG5v
dCBiZSAlcy4NCj4gPg0KPiA+IEZBVUxUSU5HX0lQOg0KPiA+IG50IUV4cEludGVybG9ja2VkUG9w
RW50cnlTTGlzdEZhdWx0MTYrMA0KPiA+IGZmZmZmODAwYDAyYThhN2M1IDQ5OGIwOCAgICAgICAg
ICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQ0KPiA+DQo+ID4gQ09OVEVYVDogIGZmZmZmODgw
MDFlODZjMDAgLS0gKC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwO3IpDQo+ID4gcmF4PTAwMDAwMDAw
MjZmNjAwMDMgcmJ4PTAwMDAwMDAwMDAwMDAwMDEgcmN4PWZmZmZmODAwMDJjMWZjMDANCj4gPiBy
ZHg9NmM4YjQ4MzAyNDVjOGI0MSByc2k9ZmZmZmY4MDAwMmNjZjhkMCByZGk9MDAwMDAwMDAwMDAw
MDAwMA0KPiA+IHJpcD1mZmZmZjgwMDAyYThhN2M1IHJzcD1mZmZmZjg4MDAxZTg3NWUwIHJicD1m
ZmZmZjg4MDAxZTg3NjQwDQo+ID4gICByOD02YzhiNDgzMDI0NWM4YjQwICByOT1mZmZmZjgwMDAy
YTFlMDAwIHIxMD1mZmZmZjgwMDAyYzFmYzAwDQo+ID4gcjExPTAwMDAwMDAwMDAwMDAwMDEgcjEy
PWZmZmZmODgwMDA5NjcwMDAgcjEzPTAwMDAwMDAwMDAwMDAwMjANCj4gPiByMTQ9MDAwMDAwMDAw
MDAwMDAwMCByMTU9MDAwMDAwMDAwMDAwMTAwMA0KPiA+IGlvcGw9MCAgICAgICAgIG52IHVwIGVp
IHBsIG56IG5hIHBlIG5jDQo+ID4gY3M9MDAxMCAgc3M9MDAxOCAgZHM9MDAyYiAgZXM9MDAyYiAg
ZnM9MDA1MyAgZ3M9MDAyYiAgICAgICAgICAgICBlZmw9MDAwMTAyMDINCj4gPiBudCFFeHBJbnRl
cmxvY2tlZFBvcEVudHJ5U0xpc3RGYXVsdDE2Og0KPiA+IGZmZmZmODAwYDAyYThhN2M1IDQ5OGIw
OCAgICAgICAgICBtb3YgICAgIHJjeCxxd29yZCBwdHIgW3I4XQ0KPiBkczowMDJiOjZjOGI0ODMw
YDI0NWM4YjQwPT8/Pz8/Pz8/Pz8/Pz8/Pz8NCj4gPiBMYXN0IHNldCBjb250ZXh0Og0KPiA+IHJh
eD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1mZmZmZjgwMDAyYzFm
YzAwDQo+ID4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJjY2Y4ZDAgcmRpPTAw
MDAwMDAwMDAwMDAwMDANCj4gPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9ZmZmZmY4ODAwMWU4
NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KPiA+ICAgcjg9NmM4YjQ4MzAyNDVjOGI0MCAgcjk9
ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHIxMT0wMDAwMDAwMDAw
MDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAwMDIwDQo+ID4gcjE0
PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDANCj4gPiBpb3BsPTAgICAgICAg
ICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYw0KPiA+IGNzPTAwMTAgIHNzPTAwMTggIGRzPTAwMmIg
IGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAwMDEwMjAyDQo+ID4g
bnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCj4gPiBmZmZmZjgwMGAwMmE4
YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFtyOF0NCj4gZHM6MDAy
Yjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/DQo+ID4gUmVzZXR0aW5nIGRlZmF1
bHQgc2NvcGUNCj4gPg0KPiA+IENVU1RPTUVSX0NSQVNIX0NPVU5UOiAgMQ0KPiA+DQo+ID4gREVG
QVVMVF9CVUNLRVRfSUQ6ICBXSU43X0RSSVZFUl9GQVVMVA0KPiA+DQo+ID4gQlVHQ0hFQ0tfU1RS
OiAgMHgzQg0KPiA+DQo+ID4gUFJPQ0VTU19OQU1FOiAgbHNhc3MuZXhlDQo+ID4NCj4gPiBDVVJS
RU5UX0lSUUw6ICAwDQo+ID4NCj4gPiBBTkFMWVNJU19WRVJTSU9OOiA2LjMuOTYwMC4xNzIzNyAo
ZGVidWdnZXJzKGRiZykuMTQwNzE2LTAzMjcpIHg4NmZyZQ0KPiA+DQo+ID4gTEFTVF9DT05UUk9M
X1RSQU5TRkVSOiAgZnJvbSAwMDAwMDAwMDAwMDAwMDAwIHRvIGZmZmZmODAwMDJhOGE3YzUNCj4g
Pg0KPiA+IFNUQUNLX1RFWFQ6DQo+ID4gZmZmZmY4ODBgMDFlODc1ZTAgMDAwMDAwMDBgMDAwMDAw
MDAgOiAwMDAwMDAwMGAwMDAwMDAwMA0KPiAwMDAwMDAwMGAwMDAwMDAwMCAwMDAwMDAwMGAwMDAw
MDAwMCAwMDAwMDAwMGAwMDAwMDAwMCA6DQo+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlz
dEZhdWx0MTYNCj4gPg0KPiA+DQo+ID4gRk9MTE9XVVBfSVA6DQo+ID4gbnQhRXhwSW50ZXJsb2Nr
ZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQo+ID4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAg
ICAgICAgIG1vdiAgICAgcmN4LHF3b3JkIHB0ciBbcjhdDQo+ID4NCj4gPiBTWU1CT0xfU1RBQ0tf
SU5ERVg6ICAwDQo+ID4NCj4gPiBTWU1CT0xfTkFNRTogIG50IUV4cEludGVybG9ja2VkUG9wRW50
cnlTTGlzdEZhdWx0MTYrMA0KPiA+DQo+ID4gRk9MTE9XVVBfTkFNRTogIE1hY2hpbmVPd25lcg0K
PiA+DQo+ID4gTU9EVUxFX05BTUU6IG50DQo+ID4NCj4gPiBJTUFHRV9OQU1FOiAgbnRrcm5sbXAu
ZXhlDQo+ID4NCj4gPiBERUJVR19GTFJfSU1BR0VfVElNRVNUQU1QOiAgNTU2MzU2ZTgNCj4gPg0K
PiA+IElNQUdFX1ZFUlNJT046ICA2LjEuNzYwMS4xODg2OQ0KPiA+DQo+ID4gU1RBQ0tfQ09NTUFO
RDogIC5jeHIgMHhmZmZmZjg4MDAxZTg2YzAwIDsga2INCj4gPg0KPiA+IEZBSUxVUkVfQlVDS0VU
X0lEOiAgWDY0XzB4M0JfbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNiswDQo+
ID4NCj4gPiBCVUNLRVRfSUQ6ICBYNjRfMHgzQl9udCFFeHBJbnRlcmxvY2tlZFBvcEVudHJ5U0xp
c3RGYXVsdDE2KzANCj4gPg0KPiA+IEFOQUxZU0lTX1NPVVJDRTogIEtNDQo+ID4NCj4gPiBGQUlM
VVJFX0lEX0hBU0hfU1RSSU5HOg0KPiBrbTp4NjRfMHgzYl9udCFleHBpbnRlcmxvY2tlZHBvcGVu
dHJ5c2xpc3RmYXVsdDE2KzANCj4gPg0KPiA+IEZBSUxVUkVfSURfSEFTSDogIHtiMzkwYmYyYS05
YzExLTA3OWYtMzRiMC01ZGZmY2FiZmZlNGJ9DQo+ID4NCj4gPiBGb2xsb3d1cDogTWFjaGluZU93
bmVyDQo+ID4gLS0tLS0tLS0tDQo+ID4NCj4gPiAwOiBrZD4gLmN4ciAweGZmZmZmODgwMDFlODZj
MDA7cg0KPiA+IHJheD0wMDAwMDAwMDI2ZjYwMDAzIHJieD0wMDAwMDAwMDAwMDAwMDAxIHJjeD1m
ZmZmZjgwMDAyYzFmYzAwDQo+ID4gcmR4PTZjOGI0ODMwMjQ1YzhiNDEgcnNpPWZmZmZmODAwMDJj
Y2Y4ZDAgcmRpPTAwMDAwMDAwMDAwMDAwMDANCj4gPiByaXA9ZmZmZmY4MDAwMmE4YTdjNSByc3A9
ZmZmZmY4ODAwMWU4NzVlMCByYnA9ZmZmZmY4ODAwMWU4NzY0MA0KPiA+ICAgcjg9NmM4YjQ4MzAy
NDVjOGI0MCAgcjk9ZmZmZmY4MDAwMmExZTAwMCByMTA9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHIx
MT0wMDAwMDAwMDAwMDAwMDAxIHIxMj1mZmZmZjg4MDAwOTY3MDAwIHIxMz0wMDAwMDAwMDAwMDAw
MDIwDQo+ID4gcjE0PTAwMDAwMDAwMDAwMDAwMDAgcjE1PTAwMDAwMDAwMDAwMDEwMDANCj4gPiBp
b3BsPTAgICAgICAgICBudiB1cCBlaSBwbCBueiBuYSBwZSBuYw0KPiA+IGNzPTAwMTAgIHNzPTAw
MTggIGRzPTAwMmIgIGVzPTAwMmIgIGZzPTAwNTMgIGdzPTAwMmIgICAgICAgICAgICAgZWZsPTAw
MDEwMjAyDQo+ID4gbnQhRXhwSW50ZXJsb2NrZWRQb3BFbnRyeVNMaXN0RmF1bHQxNjoNCj4gPiBm
ZmZmZjgwMGAwMmE4YTdjNSA0OThiMDggICAgICAgICAgbW92ICAgICByY3gscXdvcmQgcHRyIFty
OF0NCj4gZHM6MDAyYjo2YzhiNDgzMGAyNDVjOGI0MD0/Pz8/Pz8/Pz8/Pz8/Pz8/DQo+ID4gTGFz
dCBzZXQgY29udGV4dDoNCj4gPiByYXg9MDAwMDAwMDAyNmY2MDAwMyByYng9MDAwMDAwMDAwMDAw
MDAwMSByY3g9ZmZmZmY4MDAwMmMxZmMwMA0KPiA+IHJkeD02YzhiNDgzMDI0NWM4YjQxIHJzaT1m
ZmZmZjgwMDAyY2NmOGQwIHJkaT0wMDAwMDAwMDAwMDAwMDAwDQo+ID4gcmlwPWZmZmZmODAwMDJh
OGE3YzUgcnNwPWZmZmZmODgwMDFlODc1ZTAgcmJwPWZmZmZmODgwMDFlODc2NDANCj4gPiAgIHI4
PTZjOGI0ODMwMjQ1YzhiNDAgIHI5PWZmZmZmODAwMDJhMWUwMDAgcjEwPWZmZmZmODAwMDJjMWZj
MDANCj4gPiByMTE9MDAwMDAwMDAwMDAwMDAwMSByMTI9ZmZmZmY4ODAwMDk2NzAwMCByMTM9MDAw
MDAwMDAwMDAwMDAyMA0KPiA+IHIxND0wMDAwMDAwMDAwMDAwMDAwIHIxNT0wMDAwMDAwMDAwMDAx
MDAwDQo+ID4gaW9wbD0wICAgICAgICAgbnYgdXAgZWkgcGwgbnogbmEgcGUgbmMNCj4gPiBjcz0w
MDEwICBzcz0wMDE4ICBkcz0wMDJiICBlcz0wMDJiICBmcz0wMDUzICBncz0wMDJiICAgICAgICAg
ICAgIGVmbD0wMDAxMDIwMg0KPiA+IG50IUV4cEludGVybG9ja2VkUG9wRW50cnlTTGlzdEZhdWx0
MTY6DQo+ID4gZmZmZmY4MDBgMDJhOGE3YzUgNDk4YjA4ICAgICAgICAgIG1vdiAgICAgcmN4LHF3
b3JkIHB0ciBbcjhdDQo+IGRzOjAwMmI6NmM4YjQ4MzBgMjQ1YzhiNDA9Pz8/Pz8/Pz8/Pz8/Pz8/
Pw0KPiA+DQo+ID4gVGhhdCdzIHByZXR0eSBzdHJhbmdlLiBJJ2Qgc2F5IHNvbWV0aGluZyBpcyBw
cm9iYWJseSBjb3JydXB0Lg0KPiANCj4gVGhlIGNvcnJ1cHRpb24gSSBzYXcgZm9yIHN1cmUgYWJv
dXQgZGlza3MgYXJlIHVzaW5nIGJ0cmZzIGFzIGRvbTAgZnMgKGluDQo+IHJhcmUgY2FzZXMpIGFu
ZCB3aXRoIHFjb3cyIG92ZXJsYXkuDQo+IFRoZXNlIHRlc3RzIGFyZSBpbnN0ZWFkIHdpdGggZXh0
NCBhbmQgcmF3IGRvbVVzIGRpc2suDQo+IEFib3V0IG90aGVycyBjb3JydXB0aW9ucyAobm90IG9u
bHkgZGlza3MpIEkgZG9uJ3Qga25vdy4NCg0KSSdtIGp1c3QgdXNpbmcgYSBzaW5nbGUgbGF5ZXIg
cWNvdzIuDQoNCj4gDQo+ID4NCj4gPj4gSSdtIGdvaW5nIGNyYXp5IHdpdGggdGhlc2UgdG9vIG1h
bnkgcHJvYmxlbXMgYW5kIGhhdmVuJ3QgdGltZSB0byBkbyBhbGwNCj4gPj4gdXNlZnVsIHRlc3Rz
IDooDQo+ID4gVG9vIG1hbnkgbW92aW5nIHBhcnRzIEknZCBzYXkuIEkndmUgYmVlbiBydW5uaW5n
IHdpdGggYSAgNC4yLXJjIGRvbTANCj4ga2VybmVsLCBhIFhlbiBmcm9tIGFib3V0IDMgd2Vla3Mg
YWdvIGFuZCB1cHN0cmVhbSBxZW11IGZyb20gWGVuJ3MNCj4gdXBzdHJlYW0gdGFnIChhZ2FpbiBm
cm9tIGFib3V0IDMgd2Vla3MgYWdvKSBhbmQgSSdtIG5vdCBzZWVpbmcgYW55DQo+IHByb2JsZW1z
LiBJIGRvIGhhdmUgYSBmYWlybHkgc3RhbmRhcmQgY29uZmlnIHRob3VnaDsgaWRlIGRpc2tzIGFu
ZCBzdGQtdmdhDQo+IGdyYXBoaWNzLg0KPiA+DQo+ID4gICAgUGF1bA0KPiANCj4gQWJvdXQgZG9t
MCBrZXJuZWwsIGFyZSB5b3UgdXNpbmcgYnVpbGQgZnJvbSBhIHBhY2thZ2UgbyBjdXN0b20gYnVp
bGQ/DQo+IENhbiBiZSB1c2VmdWwgZm9yIG1lIHRyeSBrZXJuZWwgNC4yIGluc3RlYWQ/DQo+IA0K
DQpJJ20gYnVpbGRpbmcgbXkgb3duLiBJJ20gb24gYSB3aGVlenkgYmFzZSBidXQgMy4yIGlzIG11
Y2ggdG9vIG9sZCBhIGtlcm5lbCBmb3IgbWUuDQoNCiAgUGF1bA0KDQo+ID4NCj4gPj4gQ2FuIHlv
dSBhZHZpY2UgbWUgYWJvdXQgbW9yZSB1c2VmdWwgdGVzdHMgZm9yIHRyeSB0byBmb3VuZC9zb2x2
ZSB0aGVzZQ0KPiA+PiBwcm9ibGVtcz8NCj4gPj4NCj4gPj4gVGhhbmtzIGZvciBhbnkgcmVwbHkg
YW5kIHNvcnJ5IGZvciBteSBiYWQgZW5nbGlzaC4NCg0KX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:44:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:44:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYxet-0004cZ-IF; Mon, 07 Sep 2015 14:44:35 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYxes-0004cP-8e
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:44:34 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	D1/96-24494-1D2ADE55; Mon, 07 Sep 2015 14:44:33 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1441637069!33318212!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31206 invoked from network); 7 Sep 2015 14:44:29 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 14:44:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,485,1437436800"; 
   d="scan'208";a="2502547"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ31F+/j0j99Sl5ky47zllSFi+KZ4sG9uQgAAhkoCABM71gIAAK7sw
Date: Mon, 7 Sep 2015 14:44:24 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64F4@AMSPEX01CL01.citrite.net>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
	<55E99119.9030809@invisiblethingslab.com>
	<55ED99B3.7090000@invisiblethingslab.com>
In-Reply-To: <55ED99B3.7090000@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA3IFNlcHRlbWJlciAy
MDE1IDE1OjA2DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gW1BBVENIIDEvMl0gQWRkIGZv
cmVpZ24gcGFnZSBtYXBwaW5nIGZ1bmN0aW9ucw0KPiB0byB0aGUgR05UVEFCIGludGVyZmFjZQ0K
PiANCj4gT24gMjAxNS0wOS0wNCAxNDozOSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOg0KPiA+IE9u
IDIwMTUtMDktMDQgMTA6NTgsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54
ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi0NCj4gZGV2ZWwtDQo+ID4+PiBib3VuY2VzQGxp
c3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYQ0KPiA+Pj4gU2Vu
dDogMjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gPj4+IFRvOiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcNCj4gPj4+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAxLzJdIEFk
ZCBmb3JlaWduIHBhZ2UgbWFwcGluZw0KPiBmdW5jdGlvbnMgdG8NCj4gPj4+IHRoZSBHTlRUQUIg
aW50ZXJmYWNlDQo+ID4+Pg0KPiA+Pj4gK19fY2hlY2tSZXR1cm4NCj4gPj4+ICtYRU5fQVBJDQo+
ID4+PiArTlRTVEFUVVMNCj4gPj4+ICtHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoDQo+ID4+PiAr
ICAgIElOICBVU0hPUlQgICAgICAgICAgICAgICAgICBEb21haW4sDQo+ID4+PiArICAgIElOICBV
TE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJlZiwNCj4gPj4+ICsgICAgSU4gIFBIWVNJQ0FM
X0FERFJFU1MgICAgICAgIEFkZHJlc3MsDQo+ID4+PiArICAgIElOICBCT09MRUFOICAgICAgICAg
ICAgICAgICBSZWFkT25seSwNCj4gPj4+ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAg
ICpIYW5kbGUNCj4gPj4+ICsgICAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgICAgc3RydWN0IGdudHRh
Yl9tYXBfZ3JhbnRfcmVmIG9wOw0KPiA+Pj4gKyAgICBMT05HX1BUUiByYzsNCj4gPj4+ICsgICAg
TlRTVEFUVVMgc3RhdHVzOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgICBSdGxaZXJvTWVtb3J5KCZvcCwg
c2l6ZW9mKG9wKSk7DQo+ID4+PiArICAgIG9wLmRvbSA9IERvbWFpbjsNCj4gPj4+ICsgICAgb3Au
cmVmID0gR3JhbnRSZWY7DQo+ID4+PiArICAgIG9wLmZsYWdzID0gR05UTUFQX2hvc3RfbWFwOw0K
PiA+Pj4gKyAgICBpZiAoUmVhZE9ubHkpDQo+ID4+PiArICAgICAgICBvcC5mbGFncyB8PSBHTlRN
QVBfcmVhZG9ubHk7DQo+ID4+PiArICAgIG9wLmhvc3RfYWRkciA9IEFkZHJlc3MuUXVhZFBhcnQ7
DQo+ID4+PiArDQo+ID4+PiArICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX21hcF9ncmFu
dF9yZWYsICZvcCwgMSk7DQo+ID4+PiArDQo+ID4+PiArICAgIGlmIChyYyA8IDApIHsNCj4gPj4+
ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7DQo+ID4+PiArICAgICAgICBn
b3RvIGZhaWwxOw0KPiA+Pj4gKyAgICB9DQo+ID4+PiArDQo+ID4+PiArICAgIGlmIChvcC5zdGF0
dXMgIT0gR05UU1Rfb2theSkgew0KPiA+Pj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1VOU1VD
Q0VTU0ZVTDsNCj4gPj4+ICsgICAgICAgIGdvdG8gZmFpbDI7DQo+ID4+PiArICAgIH0NCj4gPj4+
ICsNCj4gPj4+ICsgICAgKkhhbmRsZSA9IG9wLmhhbmRsZTsNCj4gPj4+ICsNCj4gPj4+ICsgICAg
cmV0dXJuIFNUQVRVU19TVUNDRVNTOw0KPiA+Pj4gKw0KPiA+Pj4gK2ZhaWwyOg0KPiA+Pj4gKyAg
ICBFcnJvcigiZmFpbDI6IG9wLnN0YXR1cyA9ICVkXG4iLCBvcC5zdGF0dXMpOw0KPiA+Pg0KPiA+
PiBJbiBnZW5lcmFsIEkndmUgdHJpZWQgdG8ga2VlcCAnRXJyb3InIG1lc3NhZ2VzIG90aGVyIHRo
YW4gJ2ZhaWwxOicNCj4gcGxhaW4uIFJhdGhlciB0aGFuIGp1c3Qgc2V0dGluZyBzdGF0dXMgdG8g
dW5zdWNjZXNzZnVsIGFuZCBsb2dnaW5nIHRoZQ0KPiByYXcgZ3JhbnQgc3RhdHVzIGhlcmUgaXQg
d291bGQgYmUgbmljZXIgdG8gaGF2ZSBhIEdOVFNUX1RPX1NUQVRVUygpDQo+IG1hY3JvIHRvIHNl
dCBzdGF0dXMgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWwgYW5kIHRoZW4ganVzdCBsb2cgdGhhdCBp
bg0KPiB0aGUgJ2ZhaWwxOicgYmVsb3cuDQo+ID4gTm90ZWQuDQo+IFVuZm9ydHVuYXRlbHkgbW9z
dCBvZiB0aGUgR05UU1RfKiB2YWx1ZXMgZG9uJ3QgcmVhbGx5IGhhdmUgYW55DQo+IG1lYW5pbmdm
dWwgTlRTVEFUVVMgZXF1aXZhbGVudHMuIEFueSBpZGVhcyBvbiBob3cgdG8gYXBwcm9hY2ggdGhp
cz8gSQ0KPiBndWVzcyB3ZSBjb3VsZCBkZWZpbmUgY3VzdG9tIHZhbHVlcyBidXQgdGhhdCBkb2Vz
bid0IHNvdW5kIGlkZWFsLi4uDQoNCk9rLCBwcm9iYWJseSBqdXN0IHNlcGFyYXRlbHkgbG9nIGl0
IHRoZW4gaWYgeW91IHRoaW5rIHRoZSB2YWx1ZSB3aWxsIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5n
Lg0KDQogIFBhdWwNCg0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xz
IGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJlcy1vcy5vcmcvDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwg
bWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 07 14:44:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 07 Sep 2015 14:44:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZYxet-0004cZ-IF; Mon, 07 Sep 2015 14:44:35 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=685ccaf6b=Paul.Durrant@citrix.com>)
	id 1ZYxes-0004cP-8e
	for win-pv-devel@lists.xenproject.org; Mon, 07 Sep 2015 14:44:34 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	D1/96-24494-1D2ADE55; Mon, 07 Sep 2015 14:44:33 +0000
X-Env-Sender: prvs=685ccaf6b=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-206.messagelabs.com!1441637069!33318212!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31206 invoked from network); 7 Sep 2015 14:44:29 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	7 Sep 2015 14:44:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,485,1437436800"; 
   d="scan'208";a="2502547"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ31F+/j0j99Sl5ky47zllSFi+KZ4sG9uQgAAhkoCABM71gIAAK7sw
Date: Mon, 7 Sep 2015 14:44:24 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64F4@AMSPEX01CL01.citrite.net>
References: <55DC94C9.2080606@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B27DD@AMSPEX01CL01.citrite.net>
	<55E99119.9030809@invisiblethingslab.com>
	<55ED99B3.7090000@invisiblethingslab.com>
In-Reply-To: <55ED99B3.7090000@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/2] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA3IFNlcHRlbWJlciAy
MDE1IDE1OjA2DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gW1BBVENIIDEvMl0gQWRkIGZv
cmVpZ24gcGFnZSBtYXBwaW5nIGZ1bmN0aW9ucw0KPiB0byB0aGUgR05UVEFCIGludGVyZmFjZQ0K
PiANCj4gT24gMjAxNS0wOS0wNCAxNDozOSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOg0KPiA+IE9u
IDIwMTUtMDktMDQgMTA6NTgsIFBhdWwgRHVycmFudCB3cm90ZToNCj4gPj4+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54
ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi0NCj4gZGV2ZWwtDQo+ID4+PiBib3VuY2VzQGxp
c3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYQ0KPiA+Pj4gU2Vu
dDogMjUgQXVndXN0IDIwMTUgMTc6MTYNCj4gPj4+IFRvOiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcNCj4gPj4+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFtQQVRDSCAxLzJdIEFk
ZCBmb3JlaWduIHBhZ2UgbWFwcGluZw0KPiBmdW5jdGlvbnMgdG8NCj4gPj4+IHRoZSBHTlRUQUIg
aW50ZXJmYWNlDQo+ID4+Pg0KPiA+Pj4gK19fY2hlY2tSZXR1cm4NCj4gPj4+ICtYRU5fQVBJDQo+
ID4+PiArTlRTVEFUVVMNCj4gPj4+ICtHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoDQo+ID4+PiAr
ICAgIElOICBVU0hPUlQgICAgICAgICAgICAgICAgICBEb21haW4sDQo+ID4+PiArICAgIElOICBV
TE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJlZiwNCj4gPj4+ICsgICAgSU4gIFBIWVNJQ0FM
X0FERFJFU1MgICAgICAgIEFkZHJlc3MsDQo+ID4+PiArICAgIElOICBCT09MRUFOICAgICAgICAg
ICAgICAgICBSZWFkT25seSwNCj4gPj4+ICsgICAgT1VUIFVMT05HICAgICAgICAgICAgICAgICAg
ICpIYW5kbGUNCj4gPj4+ICsgICAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgICAgc3RydWN0IGdudHRh
Yl9tYXBfZ3JhbnRfcmVmIG9wOw0KPiA+Pj4gKyAgICBMT05HX1BUUiByYzsNCj4gPj4+ICsgICAg
TlRTVEFUVVMgc3RhdHVzOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgICBSdGxaZXJvTWVtb3J5KCZvcCwg
c2l6ZW9mKG9wKSk7DQo+ID4+PiArICAgIG9wLmRvbSA9IERvbWFpbjsNCj4gPj4+ICsgICAgb3Au
cmVmID0gR3JhbnRSZWY7DQo+ID4+PiArICAgIG9wLmZsYWdzID0gR05UTUFQX2hvc3RfbWFwOw0K
PiA+Pj4gKyAgICBpZiAoUmVhZE9ubHkpDQo+ID4+PiArICAgICAgICBvcC5mbGFncyB8PSBHTlRN
QVBfcmVhZG9ubHk7DQo+ID4+PiArICAgIG9wLmhvc3RfYWRkciA9IEFkZHJlc3MuUXVhZFBhcnQ7
DQo+ID4+PiArDQo+ID4+PiArICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX21hcF9ncmFu
dF9yZWYsICZvcCwgMSk7DQo+ID4+PiArDQo+ID4+PiArICAgIGlmIChyYyA8IDApIHsNCj4gPj4+
ICsgICAgICAgIEVSUk5PX1RPX1NUQVRVUygtcmMsIHN0YXR1cyk7DQo+ID4+PiArICAgICAgICBn
b3RvIGZhaWwxOw0KPiA+Pj4gKyAgICB9DQo+ID4+PiArDQo+ID4+PiArICAgIGlmIChvcC5zdGF0
dXMgIT0gR05UU1Rfb2theSkgew0KPiA+Pj4gKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1VOU1VD
Q0VTU0ZVTDsNCj4gPj4+ICsgICAgICAgIGdvdG8gZmFpbDI7DQo+ID4+PiArICAgIH0NCj4gPj4+
ICsNCj4gPj4+ICsgICAgKkhhbmRsZSA9IG9wLmhhbmRsZTsNCj4gPj4+ICsNCj4gPj4+ICsgICAg
cmV0dXJuIFNUQVRVU19TVUNDRVNTOw0KPiA+Pj4gKw0KPiA+Pj4gK2ZhaWwyOg0KPiA+Pj4gKyAg
ICBFcnJvcigiZmFpbDI6IG9wLnN0YXR1cyA9ICVkXG4iLCBvcC5zdGF0dXMpOw0KPiA+Pg0KPiA+
PiBJbiBnZW5lcmFsIEkndmUgdHJpZWQgdG8ga2VlcCAnRXJyb3InIG1lc3NhZ2VzIG90aGVyIHRo
YW4gJ2ZhaWwxOicNCj4gcGxhaW4uIFJhdGhlciB0aGFuIGp1c3Qgc2V0dGluZyBzdGF0dXMgdG8g
dW5zdWNjZXNzZnVsIGFuZCBsb2dnaW5nIHRoZQ0KPiByYXcgZ3JhbnQgc3RhdHVzIGhlcmUgaXQg
d291bGQgYmUgbmljZXIgdG8gaGF2ZSBhIEdOVFNUX1RPX1NUQVRVUygpDQo+IG1hY3JvIHRvIHNl
dCBzdGF0dXMgdG8gc29tZXRoaW5nIG1lYW5pbmdmdWwgYW5kIHRoZW4ganVzdCBsb2cgdGhhdCBp
bg0KPiB0aGUgJ2ZhaWwxOicgYmVsb3cuDQo+ID4gTm90ZWQuDQo+IFVuZm9ydHVuYXRlbHkgbW9z
dCBvZiB0aGUgR05UU1RfKiB2YWx1ZXMgZG9uJ3QgcmVhbGx5IGhhdmUgYW55DQo+IG1lYW5pbmdm
dWwgTlRTVEFUVVMgZXF1aXZhbGVudHMuIEFueSBpZGVhcyBvbiBob3cgdG8gYXBwcm9hY2ggdGhp
cz8gSQ0KPiBndWVzcyB3ZSBjb3VsZCBkZWZpbmUgY3VzdG9tIHZhbHVlcyBidXQgdGhhdCBkb2Vz
bid0IHNvdW5kIGlkZWFsLi4uDQoNCk9rLCBwcm9iYWJseSBqdXN0IHNlcGFyYXRlbHkgbG9nIGl0
IHRoZW4gaWYgeW91IHRoaW5rIHRoZSB2YWx1ZSB3aWxsIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5n
Lg0KDQogIFBhdWwNCg0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xz
IGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJlcy1vcy5vcmcvDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwg
bWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 09:34:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 09:34:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZFHv-0008Vg-8G; Tue, 08 Sep 2015 09:34:03 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZFHt-0008VW-Al
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 09:34:01 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	80/79-01143-88BAEE55; Tue, 08 Sep 2015 09:34:00 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1441704835!47745784!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12483 invoked from network); 8 Sep 2015 09:33:55 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 09:33:55 -0000
Received: by wiclk2 with SMTP id lk2so113052434wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 02:33:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=qXq60Y8G4ZVxW1vKsaX3U6n9SgiehN1b0qFy+4tneEo=;
	b=OjJGZNwWmoUsjLTcex8ul0J79CllqUcVxnOaun985ZYMQvSltSx1CnTcv+5l5S31Fv
	cGeU4M98i5Gl7Hy0NsdUpiAiJLfwTJIwMVugzOco0I2NigWvPjMhe/zARYcnsUu4FZPs
	DSrTvcXzuSohBUifC5pNbZYRCazMGxhgRfmsv9ldNn1d8ILVsHPsYSMpgYVbIqUPAaLa
	C807RyO4T15qZLN6oLESRXEb01aEJ3xNeJp1p5gXj7E/mse/yO1my0t0DFOkY1gWvRqq
	X573qy4cFP08aH2BRXIPqhnHSA4MO7Gk6OT6gYLxY707BgAy3197QniKo9ANCtpy1GOM
	mhgw==
X-Received: by 10.194.158.68 with SMTP id ws4mr30746974wjb.25.1441704835162;
	Tue, 08 Sep 2015 02:33:55 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id c11sm4769407wib.1.2015.09.08.02.33.54
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 02:33:54 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 10:33:40 +0100
Message-Id: <1441704820-11796-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Use multicast control if the backend
	supports it.
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This required a bit of re-work in the transmitter code since using multicast
control necessitates sending dummy transmit requests with special extra
info fragments. As a knock-on I also re-worked the way the IP address table
is maintained, removing bits that were in the transmitter code into the
general frontend code.

Re-work was also required in the mac code since it is also necessary to
track addition and removal of individual multicast addresses, rather than
just handling a table update.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/frontend.c    |  317 ++++++++++---
 src/xenvif/frontend.h    |   12 +
 src/xenvif/mac.c         |  343 ++++++++++++--
 src/xenvif/mac.h         |   19 +-
 src/xenvif/transmitter.c | 1126 +++++++++++++++++++++++++++++++++-------------
 src/xenvif/transmitter.h |   27 +-
 src/xenvif/vif.c         |   19 +-
 7 files changed, 1435 insertions(+), 428 deletions(-)

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index b389b1c..69aed73 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -63,7 +63,6 @@ struct _XENVIF_FRONTEND {
     XENVIF_FRONTEND_STATE       State;
     BOOLEAN                     Online;
     KSPIN_LOCK                  Lock;
-    PXENVIF_THREAD              MibThread;
     PXENVIF_THREAD              EjectThread;
     KEVENT                      EjectEvent;
 
@@ -86,6 +85,10 @@ struct _XENVIF_FRONTEND {
 
     PXENVIF_FRONTEND_STATISTICS Statistics;
     ULONG                       StatisticsCount;
+
+    PXENVIF_THREAD              MibThread;
+    PSOCKADDR_INET              AddressTable;
+    ULONG                       AddressCount;
 };
 
 static const PCHAR
@@ -229,7 +232,7 @@ FrontendSetMaxQueues(
     if (NT_SUCCESS(status) && FrontendMaxQueues < Frontend->MaxQueues)
         Frontend->MaxQueues = FrontendMaxQueues;
 
-    Info("%u\n", Frontend->MaxQueues);
+    Info("%s: %u\n", __FrontendGetPath(Frontend), Frontend->MaxQueues);
 }
 
 static FORCEINLINE ULONG
@@ -503,50 +506,49 @@ found:
 
 static NTSTATUS
 FrontendInsertAddress(
-    IN OUT  PSOCKADDR_INET      *AddressTable,
-    IN      const SOCKADDR_INET *Address,
-    IN OUT  PULONG              AddressCount
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  const SOCKADDR_INET *Address
     )
 {
-    ULONG                       Index;
-    PSOCKADDR_INET              Table;
-    NTSTATUS                    status;
+    ULONG                   Index;
+    PSOCKADDR_INET          Table;
+    NTSTATUS                status;
 
     Trace("====>\n");
 
-    for (Index = 0; Index < *AddressCount; Index++) {
-        if ((*AddressTable)[Index].si_family != Address->si_family)
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        if (Frontend->AddressTable[Index].si_family != Address->si_family)
             continue;
 
         if (Address->si_family == AF_INET) {
-            if (RtlCompareMemory(&Address->Ipv4.sin_addr.s_addr,
-                                 &(*AddressTable)[Index].Ipv4.sin_addr.s_addr,
-                                 IPV4_ADDRESS_LENGTH) == IPV4_ADDRESS_LENGTH)
+            if (RtlEqualMemory(&Address->Ipv4.sin_addr.s_addr,
+                               &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                                 IPV4_ADDRESS_LENGTH))
                 goto done;
         } else {
             ASSERT3U(Address->si_family, ==, AF_INET6);
 
-            if (RtlCompareMemory(&Address->Ipv6.sin6_addr.s6_addr,
-                                 &(*AddressTable)[Index].Ipv6.sin6_addr.s6_addr,
-                                 IPV6_ADDRESS_LENGTH) == IPV6_ADDRESS_LENGTH)
+            if (RtlEqualMemory(&Address->Ipv6.sin6_addr.s6_addr,
+                               &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                               IPV6_ADDRESS_LENGTH))
                 goto done;
         }
     }
 
     // We have an address we've not seen before so grow the table
-    Table = __FrontendAllocate(sizeof (SOCKADDR_INET) * (*AddressCount + 1));
+    Table = __FrontendAllocate(sizeof (SOCKADDR_INET) * (Frontend->AddressCount + 1));
 
     status = STATUS_NO_MEMORY;
     if (Table == NULL)
         goto fail1;
 
-    RtlCopyMemory(Table, *AddressTable, sizeof (SOCKADDR_INET) * *AddressCount);
-    Table[(*AddressCount)++] = *Address;
+    RtlCopyMemory(Table, Frontend->AddressTable, sizeof (SOCKADDR_INET) * Frontend->AddressCount);
 
-    if (*AddressTable != NULL)
-        __FrontendFree(*AddressTable);
+    if (Frontend->AddressCount != 0)
+        __FrontendFree(Frontend->AddressTable);
 
-    *AddressTable = Table;
+    Table[Frontend->AddressCount++] = *Address;
+    Frontend->AddressTable = Table;
 
 done:
     Trace("<====\n");
@@ -563,9 +565,7 @@ static NTSTATUS
 FrontendProcessAddressTable(
     IN  PXENVIF_FRONTEND            Frontend,
     IN  PMIB_UNICASTIPADDRESS_TABLE Table,
-    IN  NET_IFINDEX                 InterfaceIndex,
-    OUT PSOCKADDR_INET              *AddressTable,
-    OUT PULONG                      AddressCount
+    IN  NET_IFINDEX                 InterfaceIndex
     )
 {
     ULONG                           Index;
@@ -573,8 +573,12 @@ FrontendProcessAddressTable(
 
     UNREFERENCED_PARAMETER(Frontend);
 
-    *AddressTable = NULL;
-    *AddressCount = 0;
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
 
     for (Index = 0; Index < Table->NumEntries; Index++) {
         PMIB_UNICASTIPADDRESS_ROW   Row = &Table->Table[Index];
@@ -586,9 +590,7 @@ FrontendProcessAddressTable(
             Row->Address.si_family != AF_INET6)
             continue;
 
-        status = FrontendInsertAddress(AddressTable,
-                                       &Row->Address,
-                                       AddressCount);
+        status = FrontendInsertAddress(Frontend, &Row->Address);
         if (!NT_SUCCESS(status))
             goto fail1;
     }
@@ -598,17 +600,12 @@ FrontendProcessAddressTable(
 fail1:
     Error("fail1 (%08x)\n", status);
 
-    if (*AddressTable != NULL)
-        __FrontendFree(*AddressTable);
-
     return status;
 }
 
 static NTSTATUS
 FrontendDumpAddressTable(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  PSOCKADDR_INET          AddressTable,
-    IN  ULONG                   AddressCount
+    IN  PXENVIF_FRONTEND        Frontend
     )
 {
     PXENBUS_STORE_TRANSACTION   Transaction;
@@ -646,19 +643,19 @@ FrontendDumpAddressTable(
     IpVersion4Count = 0;
     IpVersion6Count = 0;
 
-    for (Index = 0; Index < AddressCount; Index++) {
-        switch (AddressTable[Index].si_family) {
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        switch (Frontend->AddressTable[Index].si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv4/XXXXXXXX/addr")];
+            CHAR            Node[sizeof ("ipv4/address/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
-                          &AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
                           IPV4_ADDRESS_LENGTH);
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv4/%u/addr",
+                                        "ipv4/address/%u",
                                         IpVersion4Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -687,15 +684,15 @@ FrontendDumpAddressTable(
         }
         case AF_INET6: {
             IPV6_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv6/XXXXXXXX/addr")];
+            CHAR            Node[sizeof ("ipv6/address/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
-                          &AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
                           IPV6_ADDRESS_LENGTH);
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv6/%u/addr",
+                                        "ipv6/address/%u",
                                         IpVersion6Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -848,8 +845,6 @@ FrontendMib(
         NET_IFINDEX                 InterfaceIndex;
         PMIB_UNICASTIPADDRESS_TABLE UnicastIpAddressTable;
         KIRQL                       Irql;
-        PSOCKADDR_INET              AddressTable;
-        ULONG                       AddressCount;
 
         Trace("waiting...\n");
 
@@ -892,22 +887,11 @@ FrontendMib(
 
         status = FrontendProcessAddressTable(Frontend,
                                              UnicastIpAddressTable,
-                                             InterfaceIndex,
-                                             &AddressTable,
-                                             &AddressCount);
+                                             InterfaceIndex);
         if (!NT_SUCCESS(status))
             goto unlock;
 
-        TransmitterUpdateAddressTable(__FrontendGetTransmitter(Frontend),
-                                      AddressTable,
-                                      AddressCount);
-
-        (VOID) FrontendDumpAddressTable(Frontend,
-                                        AddressTable,
-                                        AddressCount);
-
-        if (AddressCount != 0)
-            __FrontendFree(AddressTable);
+        (VOID) FrontendDumpAddressTable(Frontend);
 
 unlock:
         KeReleaseSpinLock(&Frontend->Lock, Irql);
@@ -920,6 +904,13 @@ loop:
             __FreeMibTable(IfTable);
     }
 
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
+
     status = __CancelMibChangeNotify2(Handle);
     ASSERT(NT_SUCCESS(status));
 
@@ -948,6 +939,208 @@ fail1:
     return status;
 }
 
+NTSTATUS
+FrontendSetMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  PETHERNET_ADDRESS   Address,
+    IN  ULONG               Count
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    PXENVIF_MAC             Mac;
+    KIRQL                   Irql;
+    PETHERNET_ADDRESS       MulticastAddress;
+    ULONG                   MulticastCount;
+    ULONG                   MulticastIndex;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+    Mac = FrontendGetMac(Frontend);
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+    status = MacQueryMulticastAddresses(Mac, NULL, &MulticastCount);
+    ASSERT3U(status, ==, STATUS_BUFFER_OVERFLOW);
+
+    if (MulticastCount != 0) {
+        MulticastAddress = __FrontendAllocate(sizeof (ETHERNET_ADDRESS) *
+                                              MulticastCount);
+
+        status = STATUS_NO_MEMORY;
+        if (MulticastAddress == NULL)
+            goto fail1;
+
+        status = MacQueryMulticastAddresses(Mac,
+                                            MulticastAddress,
+                                            &MulticastCount);
+        if (!NT_SUCCESS(status))
+            goto fail2;
+    } else
+        MulticastAddress = NULL;
+
+    for (Index = 0; Index < Count; Index++) {
+        BOOLEAN Found;
+
+        ASSERT(Address[Index].Byte[0] & 0x01);
+
+        Found = FALSE;
+
+        // If the multicast address has already been added and it
+        // appears in the updated list then we don't want to remove it.
+        for (MulticastIndex = 0;
+             MulticastIndex < MulticastCount;
+             MulticastIndex++) {
+            if (RtlEqualMemory(&Address[Index],
+                               &MulticastAddress[MulticastIndex],
+                               ETHERNET_ADDRESS_LENGTH)) {
+                Found = TRUE;
+                RtlZeroMemory(&MulticastAddress[MulticastIndex],
+                              ETHERNET_ADDRESS_LENGTH);
+                break;
+            }
+        }
+
+        if (!Found) {
+            (VOID) MacAddMulticastAddress(Mac, &Address[Index]);
+            (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                    &Address[Index],
+                                                    TRUE);
+        }
+    }
+
+    // Walk the multicast list removing any addresses not in the
+    // updated list
+    for (MulticastIndex = 0;
+         MulticastIndex < MulticastCount;
+         MulticastIndex++) {
+        if (!(MulticastAddress[MulticastIndex].Byte[0] & 0x01))
+            continue;
+
+        (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                &MulticastAddress[MulticastIndex],
+                                                FALSE);
+        (VOID) MacRemoveMulticastAddress(Mac,
+                                         &MulticastAddress[MulticastIndex]);
+    }
+
+    if (MulticastAddress != NULL)
+        __FrontendFree(MulticastAddress);
+
+    KeLowerIrql(Irql);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __FrontendFree(MulticastAddress);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    KeLowerIrql(Irql);
+
+    return status;
+}
+
+static NTSTATUS
+FrontendNotifyMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  BOOLEAN             Add
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    PXENVIF_MAC             Mac;
+    PETHERNET_ADDRESS       Address;
+    ULONG                   Count;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+    Mac = FrontendGetMac(Frontend);
+
+    status = MacQueryMulticastAddresses(Mac, NULL, &Count);
+    ASSERT3U(status, ==, STATUS_BUFFER_OVERFLOW);
+
+    if (Count != 0) {
+        Address = __FrontendAllocate(sizeof (ETHERNET_ADDRESS) *
+                                     Count);
+
+        status = STATUS_NO_MEMORY;
+        if (Address == NULL)
+            goto fail1;
+
+        status = MacQueryMulticastAddresses(Mac, Address, &Count);
+        if (!NT_SUCCESS(status))
+            goto fail2;
+    } else
+        Address = NULL;
+
+    for (Index = 0; Index < Count; Index++)
+        (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                &Address[Index],
+                                                Add);
+
+    if (Address != NULL)
+        __FrontendFree(Address);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __FrontendFree(Address);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+FrontendAdvertiseIpAddresses(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    KIRQL                   Irql;
+    ULONG                   Index;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+
+    KeAcquireSpinLock(&Frontend->Lock, &Irql);
+
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        switch (Frontend->AddressTable[Index].si_family) {
+        case AF_INET: {
+            IPV4_ADDRESS    Address;
+
+            RtlCopyMemory(Address.Byte,
+                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          IPV4_ADDRESS_LENGTH);
+
+            TransmitterQueueArp(Transmitter, &Address);
+            break;
+        }
+        case AF_INET6: {
+            IPV6_ADDRESS    Address;
+
+            RtlCopyMemory(Address.Byte,
+                          &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          IPV6_ADDRESS_LENGTH);
+
+            TransmitterQueueNeighbourAdvertisement(Transmitter, &Address);
+            break;
+        }
+        default:
+            ASSERT(FALSE);
+        }
+    }
+
+    KeReleaseSpinLock(&Frontend->Lock, Irql);
+}
+
 static VOID
 FrontendSetOnline(
     IN  PXENVIF_FRONTEND    Frontend
@@ -1461,7 +1654,7 @@ FrontendSetNumQueues(
 
     Frontend->NumQueues = __min(Frontend->MaxQueues, BackendMaxQueues);
 
-    Info("%u\n", Frontend->NumQueues);
+    Info("%s: %u\n", __FrontendGetPath(Frontend), Frontend->NumQueues);
 }
 
 static FORCEINLINE ULONG
@@ -1713,6 +1906,8 @@ FrontendEnable(
     if (!NT_SUCCESS(status))
         goto fail3;
 
+    FrontendNotifyMulticastAddresses(Frontend, TRUE);
+
     Trace("<====\n");
     return STATUS_SUCCESS;
 
@@ -1739,6 +1934,8 @@ FrontendDisable(
 {
     Trace("====>\n");
 
+    FrontendNotifyMulticastAddresses(Frontend, FALSE);
+
     TransmitterDisable(__FrontendGetTransmitter(Frontend));
     ReceiverDisable(__FrontendGetReceiver(Frontend));
     MacDisable(__FrontendGetMac(Frontend));
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 374e9b4..bd39767 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -169,4 +169,16 @@ FrontendIncrementStatistic(
     IN  ULONGLONG               Delta
     );
 
+extern NTSTATUS
+FrontendSetMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  PETHERNET_ADDRESS   Address,
+    IN  ULONG               Count
+    );
+
+extern VOID
+FrontendAdvertiseIpAddresses(
+    IN  PXENVIF_FRONTEND        Frontend
+    );
+
 #endif  // _XENVIF_FRONTEND_H
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index b255d58..91467d6 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -42,6 +42,11 @@
 #include "assert.h"
 #include "util.h"
 
+typedef struct _XENVIF_MAC_MULTICAST {
+    LIST_ENTRY          ListEntry;
+    ETHERNET_ADDRESS    Address;
+} XENVIF_MAC_MULTICAST, *PXENVIF_MAC_MULTICAST;
+
 struct _XENVIF_MAC {
     PXENVIF_FRONTEND        Frontend;
     KSPIN_LOCK              Lock;
@@ -51,8 +56,9 @@ struct _XENVIF_MAC {
     ETHERNET_ADDRESS        PermanentAddress;
     ETHERNET_ADDRESS        CurrentAddress;
     ETHERNET_ADDRESS        BroadcastAddress;
-    PETHERNET_ADDRESS       MulticastAddress;
-    ULONG                   MulticastAddressCount;
+    LIST_ENTRY              MulticastList;
+    ULONG                   MulticastCount;
+    BOOLEAN                 MulticastControl;
     XENVIF_MAC_FILTER_LEVEL FilterLevel[ETHERNET_ADDRESS_TYPE_COUNT];
     XENBUS_DEBUG_INTERFACE  DebugInterface;
     PXENBUS_DEBUG_CALLBACK  DebugCallback;
@@ -108,6 +114,15 @@ __MacSetPermanentAddress(
                         Mac->PermanentAddress.Byte[4],
                         Mac->PermanentAddress.Byte[5]);
 
+    Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPrefix(Frontend),
+         Mac->PermanentAddress.Byte[0],
+         Mac->PermanentAddress.Byte[1],
+         Mac->PermanentAddress.Byte[2],
+         Mac->PermanentAddress.Byte[3],
+         Mac->PermanentAddress.Byte[4],
+         Mac->PermanentAddress.Byte[5]);
+
     return STATUS_SUCCESS;
 
 fail1:
@@ -153,6 +168,15 @@ __MacSetCurrentAddress(
                         Mac->CurrentAddress.Byte[4],
                         Mac->CurrentAddress.Byte[5]);
 
+    Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPrefix(Frontend),
+         Mac->CurrentAddress.Byte[0],
+         Mac->CurrentAddress.Byte[1],
+         Mac->CurrentAddress.Byte[2],
+         Mac->CurrentAddress.Byte[3],
+         Mac->CurrentAddress.Byte[4],
+         Mac->CurrentAddress.Byte[5]);
+
     return STATUS_SUCCESS;
 
 fail1:
@@ -218,6 +242,7 @@ MacInitialize(
         goto fail1;
 
     KeInitializeSpinLock(&(*Mac)->Lock);
+    InitializeListHead(&(*Mac)->MulticastList);
 
     FdoGetDebugInterface(PdoGetFdo(FrontendGetPdo(Frontend)),
                          &(*Mac)->DebugInterface);
@@ -235,6 +260,113 @@ fail1:
     return status;
 }
 
+static NTSTATUS
+MacDumpMulticastList(
+    IN  PXENVIF_MAC     Mac
+    )
+{
+    PXENVIF_FRONTEND    Frontend;
+    PETHERNET_ADDRESS   Address;
+    ULONG               Count;
+    PLIST_ENTRY         ListEntry;
+    ULONG               Index;
+    KIRQL               Irql;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Frontend = Mac->Frontend;
+
+    KeAcquireSpinLock(&Mac->Lock, &Irql);
+
+    status  = STATUS_UNSUCCESSFUL;
+    if (!Mac->Connected)
+        goto fail1;
+
+    if (Mac->MulticastCount != 0) {
+        Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
+                                Mac->MulticastCount);
+
+        status = STATUS_NO_MEMORY;
+        if (Address == NULL)
+            goto fail2;
+
+        Count = 0;
+        for (ListEntry = Mac->MulticastList.Flink;
+             ListEntry != &Mac->MulticastList;
+             ListEntry = ListEntry->Flink) {
+            PXENVIF_MAC_MULTICAST   Multicast;
+
+            Multicast = CONTAINING_RECORD(ListEntry,
+                                          XENVIF_MAC_MULTICAST,
+                                          ListEntry);
+
+            Address[Count++] = Multicast->Address;
+        }
+        ASSERT3U(Count, ==, Mac->MulticastCount);
+    } else {
+        Address = NULL;
+        Count = 0;
+    }
+
+    KeReleaseSpinLock(&Mac->Lock, Irql);
+
+    (VOID) XENBUS_STORE(Remove,
+                        &Mac->StoreInterface,
+                        NULL,
+                        FrontendGetPrefix(Frontend),
+                        "mac/multicast");
+
+    for (Index = 0; Index < Count; Index++) {
+        CHAR    Node[sizeof ("mac/multicast/XX")];
+
+        status = RtlStringCbPrintfA(Node,
+                                    sizeof (Node),
+                                    "mac/multicast/%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        (VOID) XENBUS_STORE(Printf,
+                            &Mac->StoreInterface,
+                            NULL,
+                            FrontendGetPrefix(Frontend),
+                            Node,
+                            "%02x:%02x:%02x:%02x:%02x:%02x",
+                            Address[Index].Byte[0],
+                            Address[Index].Byte[1],
+                            Address[Index].Byte[2],
+                            Address[Index].Byte[3],
+                            Address[Index].Byte[4],
+                            Address[Index].Byte[5]);
+
+        Trace("%s: %02x:%02x:%02x:%02x:%02x:%02x\n",
+              FrontendGetPrefix(Frontend),
+              Address[Index].Byte[0],
+              Address[Index].Byte[1],
+              Address[Index].Byte[2],
+              Address[Index].Byte[3],
+              Address[Index].Byte[4],
+              Address[Index].Byte[5]);
+    }
+
+    if (Address != NULL)
+        __MacFree(Address);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    KeReleaseSpinLock(&Mac->Lock, Irql);
+
+    return status;
+}
+
 NTSTATUS
 MacConnect(
     IN  PXENVIF_MAC     Mac
@@ -292,6 +424,22 @@ MacConnect(
 
     Mac->MaximumFrameSize = (ULONG)Mtu + sizeof (ETHERNET_TAGGED_HEADER);
 
+    status = XENBUS_STORE(Read,
+                          &Mac->StoreInterface,
+                          NULL,
+                          FrontendGetBackendPath(Frontend),
+                          "feature-multicast-control",
+                          &Buffer);
+    if (!NT_SUCCESS(status)) {
+        Mac->MulticastControl = FALSE;
+    } else {
+        Mac->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
+
+        XENBUS_STORE(Free,
+                     &Mac->StoreInterface,
+                     Buffer);
+    }
+
     status = XENBUS_DEBUG(Register,
                           &Mac->DebugInterface,
                           __MODULE__ "|MAC",
@@ -301,8 +449,12 @@ MacConnect(
     if (!NT_SUCCESS(status))
         goto fail5;
 
+    KeAcquireSpinLockAtDpcLevel(&Mac->Lock);
     ASSERT(!Mac->Connected);
     Mac->Connected = TRUE;
+    KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
+
+    (VOID) MacDumpMulticastList(Mac);
 
     return STATUS_SUCCESS;
 
@@ -419,14 +571,18 @@ MacDisconnect(
 
     Frontend = Mac->Frontend;
 
+    KeAcquireSpinLockAtDpcLevel(&Mac->Lock);
     ASSERT(Mac->Connected);
     Mac->Connected = FALSE;
+    KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
 
     XENBUS_DEBUG(Deregister,
                  &Mac->DebugInterface,
                  Mac->DebugCallback);
     Mac->DebugCallback = NULL;
 
+    Mac->MulticastControl = FALSE;
+
     Mac->MaximumFrameSize = 0;
 
     RtlZeroMemory(&Mac->BroadcastAddress, sizeof (ETHERNET_ADDRESS));
@@ -449,11 +605,25 @@ MacTeardown(
     IN  PXENVIF_MAC Mac
     )
 {
-    if (Mac->MulticastAddressCount != 0) {
-        __MacFree(Mac->MulticastAddress);
-        Mac->MulticastAddress = NULL;
-        Mac->MulticastAddressCount = 0;
+    while (!IsListEmpty(&Mac->MulticastList)) {
+        PLIST_ENTRY             ListEntry;
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        ListEntry = RemoveHeadList(&Mac->MulticastList);
+        ASSERT3P(ListEntry, !=, &Mac->MulticastList);
+
+        RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+        __MacFree(Multicast);
+
+        --Mac->MulticastCount;
     }
+    ASSERT3U(Mac->MulticastCount, ==, 0);
+
+    RtlZeroMemory(&Mac->MulticastList, sizeof (LIST_ENTRY));
 
     RtlZeroMemory(&Mac->FilterLevel,
                   ETHERNET_ADDRESS_TYPE_COUNT * sizeof (XENVIF_MAC_FILTER_LEVEL));
@@ -570,50 +740,105 @@ MacQueryMaximumFrameSize(
 }
 
 NTSTATUS
-MacSetMulticastAddresses(
-    IN  PXENVIF_MAC         Mac,
-    IN  ETHERNET_ADDRESS    Address[],
-    IN  ULONG               Count
+MacAddMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    IN      PETHERNET_ADDRESS   Address
     )
 {
-    KIRQL                   Irql;
-    PETHERNET_ADDRESS       MulticastAddress;
-    ULONG                   Index;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_MAC_MULTICAST       Multicast;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
+
+    Frontend = Mac->Frontend;
+
+    ASSERT(Address->Byte[0] & 0x01);
+
+    Multicast = __MacAllocate(sizeof (XENVIF_MAC_MULTICAST));
+
+    status = STATUS_NO_MEMORY;
+    if (Multicast == NULL)
+        goto fail1;
+
+    Multicast->Address = *Address;
 
     KeAcquireSpinLock(&Mac->Lock, &Irql);
+    InsertTailList(&Mac->MulticastList, &Multicast->ListEntry);
+    Mac->MulticastCount++;
+    KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    status = STATUS_INVALID_PARAMETER;
-    for (Index = 0; Index < Count; Index++) {
-        if (!(Address[Index].Byte[0] & 0x01))
-            goto fail1;
-    }
+    (VOID) MacDumpMulticastList(Mac);
 
-    if (Count != 0) {
-        MulticastAddress = __MacAllocate(sizeof (ETHERNET_ADDRESS) * Count);
+    Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+          FrontendGetPrefix(Frontend),
+          Address->Byte[0],
+          Address->Byte[1],
+          Address->Byte[2],
+          Address->Byte[3],
+          Address->Byte[4],
+          Address->Byte[5]);
 
-        status = STATUS_NO_MEMORY;
-        if (MulticastAddress == NULL)
-            goto fail2;
+    return STATUS_SUCCESS;
 
-        for (Index = 0; Index < Count; Index++)
-            MulticastAddress[Index] = Address[Index];
-    } else {
-        MulticastAddress = NULL;
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+MacRemoveMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    IN      PETHERNET_ADDRESS   Address
+    )
+{
+    PXENVIF_FRONTEND            Frontend;
+    PLIST_ENTRY                 ListEntry;
+    PXENVIF_MAC_MULTICAST       Multicast;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
+
+    Frontend = Mac->Frontend;
+
+    KeAcquireSpinLock(&Mac->Lock, &Irql);
+
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+
+        if (RtlEqualMemory(&Multicast->Address,
+                           Address,
+                           ETHERNET_ADDRESS_LENGTH))
+            goto found;
     }
 
-    if (Mac->MulticastAddressCount != 0)
-        __MacFree(Mac->MulticastAddress);
+    status = STATUS_OBJECT_NAME_NOT_FOUND;
+    goto fail1;
+
+found:
+    ASSERT(Mac->MulticastCount != 0);
+    --Mac->MulticastCount;
 
-    Mac->MulticastAddress = MulticastAddress;
-    Mac->MulticastAddressCount = Count;
+    RemoveEntryList(&Multicast->ListEntry);
+    __MacFree(Multicast);
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    return STATUS_SUCCESS;
+    (VOID) MacDumpMulticastList(Mac);
 
-fail2:
-    Error("fail2\n");
+    Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+          FrontendGetPrefix(Frontend),
+          Address->Byte[0],
+          Address->Byte[1],
+          Address->Byte[2],
+          Address->Byte[3],
+          Address->Byte[4],
+          Address->Byte[5]);
+
+    return STATUS_SUCCESS;
 
 fail1:
     Error("fail1 (%08x)\n", status);
@@ -626,31 +851,40 @@ fail1:
 NTSTATUS
 MacQueryMulticastAddresses(
     IN      PXENVIF_MAC         Mac,
-    IN      PETHERNET_ADDRESS   Address,
+    IN      PETHERNET_ADDRESS   Address OPTIONAL,
     IN OUT  PULONG              Count
     )
 {
+    PLIST_ENTRY                 ListEntry;
     KIRQL                       Irql;
-    ULONG                       Index;
     NTSTATUS                    status;
 
     KeAcquireSpinLock(&Mac->Lock, &Irql);
 
     status = STATUS_BUFFER_OVERFLOW;
-    if (*Count < Mac->MulticastAddressCount)
+    if (Address == NULL || *Count < Mac->MulticastCount)
         goto fail1;
 
-    for (Index = 0; Index < Mac->MulticastAddressCount; Index++)
-        Address[Index] = Mac->MulticastAddress[Index];
+    *Count = 0;
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
 
-    *Count = Mac->MulticastAddressCount;
+        Address[(*Count)++] = Multicast->Address;
+    }
+    ASSERT3U(*Count, ==, Mac->MulticastCount);
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
     return STATUS_SUCCESS;
 
 fail1:
-    *Count = Mac->MulticastAddressCount;
+    *Count = Mac->MulticastCount;
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
@@ -770,17 +1004,32 @@ MacApplyFilters(
             break;
 
         case XENVIF_MAC_FILTER_MATCHING: {
-            ULONG Index;
+            PLIST_ENTRY ListEntry;
+
+            if (Mac->MulticastControl) {
+                Allow = TRUE;
+                break;
+            }
 
-            for (Index = 0; Index < Mac->MulticastAddressCount; Index++) {
-                if (RtlEqualMemory(&Mac->MulticastAddress[Index],
+            for (ListEntry = Mac->MulticastList.Flink;
+                 ListEntry != &Mac->MulticastList;
+                 ListEntry = ListEntry->Flink) {
+                PXENVIF_MAC_MULTICAST   Multicast;
+
+                Multicast = CONTAINING_RECORD(ListEntry,
+                                              XENVIF_MAC_MULTICAST,
+                                              ListEntry);
+
+                if (RtlEqualMemory(&Multicast->Address,
                                    DestinationAddress,
-                                   ETHERNET_ADDRESS_LENGTH))
+                                   ETHERNET_ADDRESS_LENGTH)) {
                     Allow = TRUE;
+                    break;
+                }
             }
+
             break;
         }
-
         case XENVIF_MAC_FILTER_ALL:
             Allow = TRUE;
             break;
diff --git a/src/xenvif/mac.h b/src/xenvif/mac.h
index d39c523..83ce5b8 100644
--- a/src/xenvif/mac.h
+++ b/src/xenvif/mac.h
@@ -96,17 +96,22 @@ MacQueryBroadcastAddress(
     );
 
 extern NTSTATUS
-MacQueryMulticastAddresses(
+MacAddMulticastAddress(
     IN      PXENVIF_MAC         Mac,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    OUT     PETHERNET_ADDRESS   Address
     );
 
 extern NTSTATUS
-MacSetMulticastAddresses(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   Address OPTIONAL,
-    IN  ULONG               Count
+MacRemoveMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    OUT     PETHERNET_ADDRESS   Address
+    );
+
+extern NTSTATUS
+MacQueryMulticastAddresses(
+    IN      PXENVIF_MAC         Mac,
+    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
+    IN OUT  PULONG              Count
     );
 
 extern NTSTATUS
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 4cf21db..2d8f613 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -10,7 +10,7 @@
  *     following disclaimer.
  * *   Redistributions in binary form must reproduce the above 
  *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
+ *     following disclaimer in the documetation and/or other
  *     materials provided with the distribution.
  * 
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
@@ -64,16 +64,64 @@
 
 #define MAXNAMELEN  128
 
+typedef struct _XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS {
+    IPV4_ADDRESS    Address;
+} XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS;
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS {
+    IPV6_ADDRESS    Address;
+} XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS;
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS {
+    ETHERNET_ADDRESS    Address;
+    BOOLEAN             Add;
+} XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS;
+
+typedef enum _XENVIF_TRANSMITTER_REQUEST_TYPE {
+    XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID = 0,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_ARP,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL
+} XENVIF_TRANSMITTER_REQUEST_TYPE, *PXENVIF_TRANSMITTER_REQUEST_TYPE;
+
+#pragma warning(push)
+#pragma warning(disable:4201)   // nonstandard extension used : nameless struct/union
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST {
+    LIST_ENTRY                      ListEntry;
+    XENVIF_TRANSMITTER_REQUEST_TYPE Type;
+    union {
+        XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS                       Arp;
+        XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS   NeighbourAdvertisement;
+        XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS         MulticastControl;
+    };
+} XENVIF_TRANSMITTER_REQUEST, *PXENVIF_TRANSMITTER_REQUEST;
+
+#pragma warning(pop)
+
 typedef struct _XENVIF_TRANSMITTER_BUFFER {
     PMDL        Mdl;
     PVOID       Context;
     ULONG       Reference;
 } XENVIF_TRANSMITTER_BUFFER, *PXENVIF_TRANSMITTER_BUFFER;
 
+typedef enum _XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE {
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_INVALID = 0,
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD,
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE
+} XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE, *PXENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE;
+
+typedef struct _XENVIF_TRANSMITTER_MULTICAST_CONTROL {
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE   Type;
+    ETHERNET_ADDRESS                            Address;
+    ULONG                                       Reference;
+} XENVIF_TRANSMITTER_MULTICAST_CONTROL, *PXENVIF_TRANSMITTER_MULTICAST_CONTROL;
+
 typedef enum _XENVIF_TRANSMITTER_FRAGMENT_TYPE {
     XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID = 0,
     XENVIF_TRANSMITTER_FRAGMENT_TYPE_PACKET,
-    XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER
+    XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER,
+    XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL
 } XENVIF_TRANSMITTER_FRAGMENT_TYPE, *PXENVIF_TRANSMITTER_FRAGMENT_TYPE;
 
 typedef struct _XENVIF_TRANSMITTER_FRAGMENT {
@@ -106,9 +154,11 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     ULONG                           Index;
     PCHAR                           Path;
     PXENBUS_CACHE                   BufferCache;
+    PXENBUS_CACHE                   MulticastControlCache;
     PXENBUS_CACHE                   FragmentCache;
     PXENBUS_GNTTAB_CACHE            GnttabCache;
     PXENBUS_RANGE_SET               RangeSet;
+    PXENBUS_CACHE                   RequestCache;
     PMDL                            Mdl;
     netif_tx_front_ring_t           Front;
     netif_tx_sring_t                *Shared;
@@ -122,7 +172,8 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     BOOLEAN                         Stopped;
     PVOID                           Lock;
     PKTHREAD                        LockThread;
-    LIST_ENTRY                      Queued;
+    LIST_ENTRY                      PacketQueue;
+    LIST_ENTRY                      RequestQueue;
     XENVIF_TRANSMITTER_STATE        State;
     ULONG                           PacketsQueued;
     ULONG                           PacketsGranted;
@@ -135,11 +186,8 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     ULONG                           RequestsPushed;
     ULONG                           ResponsesProcessed;
     ULONG                           PacketsSent;
-    LIST_ENTRY                      Completed;
+    LIST_ENTRY                      PacketComplete;
     ULONG                           PacketsCompleted;
-    PSOCKADDR_INET                  AddressTable;
-    ULONG                           AddressCount;
-    ULONG                           AddressIndex;
     PXENBUS_DEBUG_CALLBACK          DebugCallback;
     PXENVIF_THREAD                  WatchdogThread;
 } XENVIF_TRANSMITTER_RING, *PXENVIF_TRANSMITTER_RING;
@@ -155,6 +203,7 @@ struct _XENVIF_TRANSMITTER {
     LONG                        NumQueues;
     LONG_PTR                    Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT];
     BOOLEAN                     Split;
+    BOOLEAN                     MulticastControl;
     ULONG                       DisableIpVersion4Gso;
     ULONG                       DisableIpVersion6Gso;
     ULONG                       AlwaysCopy;
@@ -196,7 +245,7 @@ TransmitterPacketAcquireLock(
 
 static VOID
 TransmitterPacketReleaseLock(
-    IN  PVOID                       Argument
+    IN  PVOID           Argument
     )
 {
     PXENVIF_TRANSMITTER Transmitter = Argument;
@@ -207,8 +256,8 @@ TransmitterPacketReleaseLock(
 
 static NTSTATUS
 TransmitterPacketCtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    IN  PVOID   Argument,
+    IN  PVOID   Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -219,8 +268,8 @@ TransmitterPacketCtor(
 
 static VOID
 TransmitterPacketDtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    IN  PVOID   Argument,
+    IN  PVOID   Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -360,6 +409,69 @@ __TransmitterPutBuffer(
 }
 
 static NTSTATUS
+TransmitterMulticastControlCtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+
+    return STATUS_SUCCESS;
+}
+
+static VOID
+TransmitterMulticastControlDtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+}
+
+static FORCEINLINE PXENVIF_TRANSMITTER_MULTICAST_CONTROL
+__TransmitterGetMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING            Ring
+    )
+{
+    PXENVIF_TRANSMITTER                     Transmitter;
+    PXENVIF_FRONTEND                        Frontend;
+    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    Control = XENBUS_CACHE(Get,
+                           &Transmitter->CacheInterface,
+                           Ring->MulticastControlCache,
+                           TRUE);
+
+    return Control;
+}
+
+static FORCEINLINE VOID
+__TransmitterPutMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING                Ring,
+    IN  PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control
+    )
+{
+    PXENVIF_TRANSMITTER                         Transmitter;
+    PXENVIF_FRONTEND                            Frontend;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    ASSERT3U(Control->Reference, ==, 0);
+
+    XENBUS_CACHE(Put,
+                 &Transmitter->CacheInterface,
+                 Ring->MulticastControlCache,
+                 Control,
+                 TRUE);
+}
+
+static NTSTATUS
 TransmitterFragmentCtor(
     IN  PVOID                       Argument,
     IN  PVOID                       Object
@@ -457,6 +569,7 @@ __TransmitterPutFragment(
     ASSERT3U(Fragment->Offset, ==, 0);
     ASSERT3U(Fragment->Type, ==, XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID);
     ASSERT3P(Fragment->Context, ==, NULL);
+    ASSERT3P(Fragment->Entry, ==, NULL);
     ASSERT(!Fragment->Extra);
 
     XENBUS_CACHE(Put,
@@ -466,6 +579,65 @@ __TransmitterPutFragment(
                  TRUE);
 }
 
+static NTSTATUS
+TransmitterRequestCtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+
+    return STATUS_SUCCESS;
+}
+
+static VOID
+TransmitterRequestDtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+}
+
+static FORCEINLINE PXENVIF_TRANSMITTER_REQUEST
+__TransmitterGetRequest(
+    IN  PXENVIF_TRANSMITTER_RING    Ring
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+
+    Transmitter = Ring->Transmitter;
+
+    Request = XENBUS_CACHE(Get,
+                           &Transmitter->CacheInterface,
+                           Ring->RequestCache,
+                           TRUE);
+
+    return Request;
+}
+
+static FORCEINLINE VOID
+__TransmitterPutRequest(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PXENVIF_TRANSMITTER_REQUEST Request
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+
+    Transmitter = Ring->Transmitter;
+
+    ASSERT3U(Request->Type, ==, XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID);
+
+    XENBUS_CACHE(Put,
+                 &Transmitter->CacheInterface,
+                 Ring->RequestCache,
+                 Request,
+                 TRUE);
+}
+
 static VOID
 TransmitterRingDebugCallback(
     IN  PVOID                   Argument,
@@ -1188,7 +1360,7 @@ fail1:
     return status;
 }
 
-static FORCEINLINE VOID
+static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
 __TransmitterRingUnprepareFragments(
     IN  PXENVIF_TRANSMITTER_RING    Ring
     )
@@ -1196,18 +1368,20 @@ __TransmitterRingUnprepareFragments(
     PXENVIF_TRANSMITTER             Transmitter;
     PXENVIF_FRONTEND                Frontend;
     PXENVIF_TRANSMITTER_STATE       State;
+    ULONG                           Count;
+    PXENVIF_TRANSMITTER_PACKET      Packet;
 
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
 
     State = &Ring->State;
+    Count = State->Count;
 
-    while (State->Count != 0) {
+    while (Count != 0) {
         PLIST_ENTRY                     ListEntry;
         PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
-        PXENVIF_TRANSMITTER_PACKET      Packet;
 
-        --State->Count;
+        --Count;
 
         ListEntry = RemoveTailList(&State->List);
         ASSERT3P(ListEntry, !=, &State->List);
@@ -1238,8 +1412,8 @@ __TransmitterRingUnprepareFragments(
             Buffer->Context = NULL;
 
             ASSERT(Buffer->Reference != 0);
-            if (--Buffer->Reference == 0)
-                __TransmitterPutBuffer(Ring, Buffer);
+            --Buffer->Reference;
+            __TransmitterPutBuffer(Ring, Buffer);
 
             break;
         }
@@ -1250,16 +1424,64 @@ __TransmitterRingUnprepareFragments(
 
             break;
 
-        default:
+        case XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL: {
+            PXENVIF_TRANSMITTER_MULTICAST_CONTROL Control;
+
+            Control = Fragment->Context;
+            Fragment->Context = NULL;
+            Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID;
+
+            switch (Control->Type) {
+            case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD:
+            case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE:
+                break;
+            default:
+                ASSERT(FALSE);
+                break;
+            }
+
+            ASSERT(Control->Reference != 0);
+            --Control->Reference;
+            __TransmitterPutMulticastControl(Ring, Control);
+
             Packet = NULL;
+            break;
+            }
+        default:
             ASSERT(FALSE);
+            Packet = NULL;
+            break;
         }
 
-        __TransmitterPutFragment(Ring, Fragment);
-
         if (Packet != NULL)
             Packet->Value--;
+
+        __TransmitterPutFragment(Ring, Fragment);
+    }
+
+    if (State->Count != 0) {
+        ASSERT(IsListEmpty(&State->List));
+        RtlZeroMemory(&State->List, sizeof (LIST_ENTRY));
+
+        State->Count = 0;
+    }
+
+    Packet = State->Packet;
+
+    if (Packet != NULL) {
+        Ring->PacketsUnprepared++;
+
+        RtlZeroMemory(&State->Payload, sizeof (XENVIF_PACKET_PAYLOAD));
+
+        Packet->Send = State->Send;
+        RtlZeroMemory(&State->Send, sizeof (XENVIF_TRANSMITTER_PACKET_SEND_INFO));
+
+        State->Packet = NULL;
     }
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    return Packet;
 }
 
 static FORCEINLINE NTSTATUS
@@ -1395,44 +1617,6 @@ fail1:
     return status;
 }
 
-static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
-__TransmitterRingUnpreparePacket(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
-    )
-{
-    PXENVIF_TRANSMITTER_STATE       State;
-    PXENVIF_TRANSMITTER_PACKET      Packet;
-
-    State = &Ring->State;
-    Packet = State->Packet;
-
-    // This has the side effect of freeing up resources associated with a pending
-    // gratuitous ARP, which is why the call is not conditional on Packet being
-    // non-NULL
-    __TransmitterRingUnprepareFragments(Ring);
-    RtlZeroMemory(&State->Info, sizeof (XENVIF_PACKET_INFO));
-
-    if (Packet == NULL)
-        goto done;
-
-    Ring->PacketsUnprepared++;
-
-    ASSERT(IsListEmpty(&State->List));
-    RtlZeroMemory(&State->List, sizeof (LIST_ENTRY));
-
-    RtlZeroMemory(&State->Payload, sizeof (XENVIF_PACKET_PAYLOAD));
-
-    Packet->Send = State->Send;
-    RtlZeroMemory(&State->Send, sizeof (XENVIF_TRANSMITTER_PACKET_SEND_INFO));
-
-    State->Packet = NULL;
-
-    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
-
-done:
-    return Packet;
-}
-
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareArp(
     IN  PXENVIF_TRANSMITTER_RING    Ring,
@@ -1458,12 +1642,6 @@ __TransmitterRingPrepareArp(
 
     ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
 
-    Info("%u.%u.%u.%u\n",
-         Address->Byte[0],
-         Address->Byte[1],
-         Address->Byte[2],
-         Address->Byte[3]);
-
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
     Mac = FrontendGetMac(Frontend);
@@ -1606,16 +1784,6 @@ __TransmitterRingPrepareNeighbourAdvertisement(
 
     ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
 
-    Info("%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
-         HTONS(Address->Word[0]),
-         HTONS(Address->Word[1]),
-         HTONS(Address->Word[2]),
-         HTONS(Address->Word[3]),
-         HTONS(Address->Word[4]),
-         HTONS(Address->Word[5]),
-         HTONS(Address->Word[6]),
-         HTONS(Address->Word[7]));
-
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
     Mac = FrontendGetMac(Frontend);
@@ -1758,13 +1926,71 @@ fail1:
 }
 
 static FORCEINLINE NTSTATUS
-__TransmitterRingPostFragments(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+__TransmitterRingPrepareMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING            Ring,
+    IN  PETHERNET_ADDRESS                   Address,
+    IN  BOOLEAN                             Add
     )
 {
+    PXENVIF_TRANSMITTER_STATE               State;
+    PXENVIF_TRANSMITTER_FRAGMENT            Fragment;
+    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+    NTSTATUS                                status;
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    State = &Ring->State;
+
+    Control = __TransmitterGetMulticastControl(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Control == NULL)
+        goto fail1;
+
+    Control->Type = (Add) ?
+                    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD :
+                    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE;
+    Control->Address = *Address;
+
+    Fragment = __TransmitterGetFragment(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Fragment == NULL)
+        goto fail2;
+
+    Fragment->Context = Control;
+    Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL;
+    Control->Reference++;
+
+    InitializeListHead(&State->List);
+
+    ASSERT(IsZeroMemory(&Fragment->ListEntry, sizeof (LIST_ENTRY)));
+    InsertTailList(&State->List, &Fragment->ListEntry);
+    State->Count++;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __TransmitterPutMulticastControl(Ring, Control);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    return status;
+}
+
 #define RING_SLOTS_AVAILABLE(_Front, _req_prod, _rsp_cons)   \
         (RING_SIZE(_Front) - ((_req_prod) - (_rsp_cons)))
 
+static FORCEINLINE NTSTATUS
+__TransmitterRingPostFragments(
+    IN  PXENVIF_TRANSMITTER_RING    Ring
+    )
+{
     PXENVIF_TRANSMITTER             Transmitter;
     PXENVIF_FRONTEND                Frontend;
     PXENVIF_TRANSMITTER_STATE       State;
@@ -1775,6 +2001,8 @@ __TransmitterRingPostFragments(
     ULONG                           Extra;
     ULONG                           PacketLength;
     BOOLEAN                         FirstRequest;
+    PLIST_ENTRY                     ListEntry;
+    PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
     netif_tx_request_t              *req;
     NTSTATUS                        status;
 
@@ -1793,8 +2021,14 @@ __TransmitterRingPostFragments(
     req_prod = Ring->Front.req_prod_pvt;
     rsp_cons = Ring->Front.rsp_cons;
 
+    ListEntry = State->List.Flink;
+    Fragment = CONTAINING_RECORD(ListEntry,
+                                 XENVIF_TRANSMITTER_FRAGMENT,
+                                 ListEntry);
+
     Extra = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
-             State->Send.OffloadOptions.OffloadIpVersion6LargePacket) ?
+             State->Send.OffloadOptions.OffloadIpVersion6LargePacket ||
+             Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL) ?
             1 :
             0;
 
@@ -1809,9 +2043,6 @@ __TransmitterRingPostFragments(
     FirstRequest = TRUE;
     PacketLength = 0;
     while (State->Count != 0) {
-        PLIST_ENTRY                     ListEntry;
-        PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
-
         --State->Count;
 
         ListEntry = RemoveHeadList(&State->List);
@@ -1819,16 +2050,20 @@ __TransmitterRingPostFragments(
 
         RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-        Fragment = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_FRAGMENT, ListEntry);
+        Fragment = CONTAINING_RECORD(ListEntry,
+                                     XENVIF_TRANSMITTER_FRAGMENT,
+                                     ListEntry);
 
         req = RING_GET_REQUEST(&Ring->Front, req_prod);
         req_prod++;
         Ring->RequestsPosted++;
 
         req->id = Fragment->Id;
-        req->gref = XENBUS_GNTTAB(GetReference,
+        req->gref = (Fragment->Entry != NULL) ?
+                    XENBUS_GNTTAB(GetReference,
                                   &Transmitter->GnttabInterface,
-                                  Fragment->Entry);
+                                  Fragment->Entry) :
+                    0;
         req->offset = (USHORT)Fragment->Offset;
         req->size = (USHORT)Fragment->Length;
         req->flags = NETTXF_more_data;
@@ -1843,37 +2078,49 @@ __TransmitterRingPostFragments(
                 req->flags |= NETTXF_csum_blank | NETTXF_data_validated;
 
             if (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
-                State->Send.OffloadOptions.OffloadIpVersion6LargePacket) {
-                uint8_t                 type;
-                uint16_t                size;
+                State->Send.OffloadOptions.OffloadIpVersion6LargePacket ||
+                Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL) {
                 struct netif_extra_info *extra;
 
                 ASSERT(Extra != 0);
                 Fragment->Extra = TRUE;
 
-                ASSERT(!(State->Send.OffloadOptions.OffloadIpVersion4LargePacket &&
-                         State->Send.OffloadOptions.OffloadIpVersion6LargePacket));
-                type = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket) ?
-                       XEN_NETIF_GSO_TYPE_TCPV4 :
-                       XEN_NETIF_GSO_TYPE_TCPV6;
-
-                ASSERT(State->Send.MaximumSegmentSize != 0);
-                size = State->Send.MaximumSegmentSize;
-
-                ASSERT(req->flags & (NETTXF_csum_blank | NETTXF_data_validated));
-                req->flags |= NETTXF_extra_info;
-
                 extra = (struct netif_extra_info *)RING_GET_REQUEST(&Ring->Front, req_prod);
                 req_prod++;
                 Ring->RequestsPosted++;
 
-                extra->type = XEN_NETIF_EXTRA_TYPE_GSO;
-                extra->flags = 0;
+                if (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
+                    State->Send.OffloadOptions.OffloadIpVersion6LargePacket) {
+                    ASSERT(State->Send.MaximumSegmentSize != 0);
+
+                    extra->type = XEN_NETIF_EXTRA_TYPE_GSO;
+                    extra->flags = 0;
+
+                    extra->u.gso.type = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket) ?
+                                        XEN_NETIF_GSO_TYPE_TCPV4 :
+                                        XEN_NETIF_GSO_TYPE_TCPV6;;
+                    extra->u.gso.size = State->Send.MaximumSegmentSize;
+                    extra->u.gso.pad = 0;
+                    extra->u.gso.features = 0;
+
+                    ASSERT(req->flags & (NETTXF_csum_blank | NETTXF_data_validated));
+                } else {
+                    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+                    ASSERT(Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL);
+                    Control = Fragment->Context;
+
+                    extra->type = (Control->Type == XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD) ?
+                        XEN_NETIF_EXTRA_TYPE_MCAST_ADD :
+                        XEN_NETIF_EXTRA_TYPE_MCAST_DEL;
+                    extra->flags = 0;
 
-                extra->u.gso.size = size;
-                extra->u.gso.type = type;
-                extra->u.gso.pad = 0;
-                extra->u.gso.features = 0;
+                    RtlCopyMemory(&extra->u.mcast.addr,
+                                  &Control->Address.Byte[0],
+                                  ETHERNET_ADDRESS_LENGTH);
+                }
+
+                req->flags |= NETTXF_extra_info;
             }
 
             // The first fragment length is the length of the entire packet
@@ -1886,7 +2133,6 @@ __TransmitterRingPostFragments(
         Ring->Pending[req->id] = Fragment;
     }
     ASSERT(!FirstRequest);
-    ASSERT(PacketLength != 0);
 
     ASSERT(req != NULL);
     req->flags &= ~NETTXF_more_data;
@@ -1902,6 +2148,8 @@ __TransmitterRingPostFragments(
         PXENVIF_PACKET_INFO Info;
         PETHERNET_HEADER    Header;
 
+        ASSERT(PacketLength != 0);
+
         StartVa = State->StartVa;
         Info = &State->Info;
 
@@ -1930,9 +2178,9 @@ __TransmitterRingPostFragments(
 
 fail1:
     return status;
+}
 
 #undef  RING_SLOTS_AVAILABLE
-}
 
 static FORCEINLINE VOID
 __TransmitterRingFakeResponses(
@@ -1989,8 +2237,16 @@ __TransmitterRingFakeResponses(
 
     ASSERT3U(Ring->Shared->rsp_prod, ==, Ring->Front.req_prod_pvt);
 
-    if (Count != 0)
-        Info("Faked %lu responses\n", Count);
+    if (Count != 0) {
+        PXENVIF_TRANSMITTER Transmitter;
+        PXENVIF_FRONTEND    Frontend;
+
+        Transmitter = Ring->Transmitter;
+        Frontend = Transmitter->Frontend;
+
+        Info("%s: faked %lu responses\n",
+             FrontendGetPath(Frontend), Count);
+    }
 }
 
 static FORCEINLINE VOID
@@ -2055,7 +2311,7 @@ __TransmitterRingCompletePacket(
         }
     }
 
-    InsertTailList(&Ring->Completed, &Packet->ListEntry);
+    InsertTailList(&Ring->PacketComplete, &Packet->ListEntry);
     Ring->PacketsCompleted++;
 }
 
@@ -2123,8 +2379,8 @@ TransmitterRingPoll(
                 Buffer->Context = NULL;
 
                 ASSERT(Buffer->Reference != 0);
-                if (--Buffer->Reference == 0)
-                    __TransmitterPutBuffer(Ring, Buffer);
+                --Buffer->Reference;
+                __TransmitterPutBuffer(Ring, Buffer);
 
                 break;
             }
@@ -2135,20 +2391,46 @@ TransmitterRingPoll(
 
                 break;
 
-            default:
-                Packet = NULL;
-                ASSERT(FALSE);
+            case XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL: {
+                PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+                Control = Fragment->Context;
+                Fragment->Context = NULL;
+                Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID;
+
+                switch (Control->Type) {
+                case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD:
+                case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE:
+                    break;
+                default:
+                    ASSERT(FALSE);
+                    break;
+                }
+
+                ASSERT(Control->Reference != 0);
+                --Control->Reference;
+                __TransmitterPutMulticastControl(Ring, Control);
+
+                Packet = NULL;
+                break;
+            }
+            default:
+                ASSERT(FALSE);
+                Packet = NULL;
+                break;
             }
 
             Fragment->Length = 0;
             Fragment->Offset = 0;
 
-            (VOID) XENBUS_GNTTAB(RevokeForeignAccess,
-                                 &Transmitter->GnttabInterface,
-                                 Ring->GnttabCache,
-                                 TRUE,
-                                 Fragment->Entry);
-            Fragment->Entry = NULL;
+            if (Fragment->Entry != NULL) {
+                (VOID) XENBUS_GNTTAB(RevokeForeignAccess,
+                                     &Transmitter->GnttabInterface,
+                                     Ring->GnttabCache,
+                                     TRUE,
+                                     Fragment->Entry);
+                Fragment->Entry = NULL;
+            }
 
             Fragment->Extra = FALSE;
             __TransmitterPutFragment(Ring, Fragment);
@@ -2331,7 +2613,8 @@ TransmitterRingSwizzle(
     ListEntry = List.Flink;
     if (!IsListEmpty(&List)) {
         RemoveEntryList(&List);
-        AppendTailList(&Ring->Queued, ListEntry);
+        InitializeListHead(&List);
+        AppendTailList(&Ring->PacketQueue, ListEntry);
         Ring->PacketsQueued += Count;
     }
 }
@@ -2349,9 +2632,7 @@ TransmitterRingSchedule(
     State = &Ring->State;
 
     for (;;) {
-        PLIST_ENTRY                 ListEntry;
-        PXENVIF_TRANSMITTER_PACKET  Packet;
-        NTSTATUS                    status;
+        NTSTATUS    status;
 
         if (State->Count != 0) {
             status = __TransmitterRingPostFragments(Ring);
@@ -2367,72 +2648,85 @@ TransmitterRingSchedule(
 
         ASSERT3U(State->Count, ==, 0);
 
-        if (Ring->AddressIndex != 0) {
-            ULONG   Index = (--Ring->AddressIndex) % Ring->AddressCount;
-
-            switch (Ring->AddressTable[Index].si_family) {
-            case AF_INET: {
-                IPV4_ADDRESS    Address;
+        if (!IsListEmpty(&Ring->RequestQueue)) {
+            PLIST_ENTRY                 ListEntry;
+            PXENVIF_TRANSMITTER_REQUEST Request;
 
-                RtlCopyMemory(Address.Byte,
-                              &Ring->AddressTable[Index].Ipv4.sin_addr.s_addr,
-                              IPV4_ADDRESS_LENGTH);
+            ListEntry = RemoveHeadList(&Ring->RequestQueue);
+            RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-                (VOID) __TransmitterRingPrepareArp(Ring, &Address);
+            Request = CONTAINING_RECORD(ListEntry,
+                                        XENVIF_TRANSMITTER_REQUEST,
+                                        ListEntry);
 
+            switch (Request->Type) {
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_ARP:
+                (VOID) __TransmitterRingPrepareArp(Ring,
+                                                   &Request->Arp.Address);
                 break;
-            }
-            case AF_INET6: {
-                IPV6_ADDRESS    Address;
-
-                RtlCopyMemory(Address.Byte,
-                              &Ring->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
-                              IPV6_ADDRESS_LENGTH);
 
-                (VOID) __TransmitterRingPrepareNeighbourAdvertisement(Ring, &Address);
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT:
+                (VOID) __TransmitterRingPrepareNeighbourAdvertisement(Ring,
+                                                                      &Request->NeighbourAdvertisement.Address);
+                break;
 
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL:
+                (VOID) __TransmitterRingPrepareMulticastControl(Ring,
+                                                                &Request->MulticastControl.Address,
+                                                                Request->MulticastControl.Add);
                 break;
-            }
+
             default:
-                ASSERT(FALSE);
+                break;
             }
 
+            Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID;
+            __TransmitterPutRequest(Ring, Request);
             continue;
         }
 
-        ListEntry = RemoveHeadList(&Ring->Queued);
-        if (ListEntry == &Ring->Queued)
-            break;
+        if (!IsListEmpty(&Ring->PacketQueue)) {
+            PLIST_ENTRY                 ListEntry;
+            PXENVIF_TRANSMITTER_PACKET  Packet;
 
-        Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
-        Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
-        Packet->Value = 0;
+            ListEntry = RemoveHeadList(&Ring->PacketQueue);
+            RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-        status = __TransmitterRingPreparePacket(Ring, Packet);
-        if (!NT_SUCCESS(status)) {
-            PXENVIF_TRANSMITTER Transmitter;
-            PXENVIF_FRONTEND    Frontend;
+            Packet = CONTAINING_RECORD(ListEntry,
+                                       XENVIF_TRANSMITTER_PACKET,
+                                       ListEntry);
 
-            Transmitter = Ring->Transmitter;
-            Frontend = Transmitter->Frontend;
+            Packet->Value = 0;
 
-            ASSERT(status != STATUS_BUFFER_OVERFLOW);
+            status = __TransmitterRingPreparePacket(Ring, Packet);
+            if (!NT_SUCCESS(status)) {
+                PXENVIF_TRANSMITTER Transmitter;
+                PXENVIF_FRONTEND    Frontend;
 
-            // Fake that we prapared and sent this packet
-            Ring->PacketsPrepared++;
-            Ring->PacketsSent++;
-            Ring->PacketsFaked++;
+                Transmitter = Ring->Transmitter;
+                Frontend = Transmitter->Frontend;
 
-            Packet->Completion.Status = XENVIF_TRANSMITTER_PACKET_DROPPED;
+                ASSERT(status != STATUS_BUFFER_OVERFLOW);
 
-            FrontendIncrementStatistic(Frontend,
-                                       XENVIF_TRANSMITTER_FRONTEND_ERRORS,
-                                       1);
+                // Fake that we prapared and sent this packet
+                Ring->PacketsPrepared++;
+                Ring->PacketsSent++;
+                Ring->PacketsFaked++;
 
-            __TransmitterRingCompletePacket(Ring, Packet);
+                Packet->Completion.Status = XENVIF_TRANSMITTER_PACKET_DROPPED;
+
+                FrontendIncrementStatistic(Frontend,
+                                           XENVIF_TRANSMITTER_FRONTEND_ERRORS,
+                                           1);
+
+                __TransmitterRingCompletePacket(Ring, Packet);
+            }
+
+            ASSERT3U(Ring->PacketsPrepared, ==, Ring->PacketsCopied + Ring->PacketsGranted + Ring->PacketsFaked);
+            continue;
         }
 
-        ASSERT3U(Ring->PacketsPrepared, ==, Ring->PacketsCopied + Ring->PacketsGranted + Ring->PacketsFaked);
+        break;
     }
 
     __TransmitterRingPushRequests(Ring);
@@ -2607,10 +2901,10 @@ __TransmitterRingReleaseLock(
         TransmitterRingSwizzle(Ring);
         TransmitterRingSchedule(Ring);
 
-        ListEntry = Ring->Completed.Flink;
-        if (!IsListEmpty(&Ring->Completed)) {
-            RemoveEntryList(&Ring->Completed);
-            InitializeListHead(&Ring->Completed);
+        ListEntry = Ring->PacketComplete.Flink;
+        if (!IsListEmpty(&Ring->PacketComplete)) {
+            RemoveEntryList(&Ring->PacketComplete);
+            InitializeListHead(&Ring->PacketComplete);
             AppendTailList(&List, ListEntry);
         }
     } while (!__TransmitterRingTryReleaseLock(Ring));
@@ -2787,62 +3081,6 @@ TransmitterRingWatchdog(
     return STATUS_SUCCESS;
 }
 
-static FORCEINLINE VOID
-__TransmitterRingUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PSOCKADDR_INET              Table,
-    IN  ULONG                       Count
-    )
-{
-    NTSTATUS                        status;
-
-    __TransmitterRingAcquireLock(Ring);
-
-    if (Ring->AddressCount != 0) {
-        Ring->AddressCount = 0;
-
-        ASSERT(Ring->AddressTable != NULL);
-        __TransmitterFree(Ring->AddressTable);
-        Ring->AddressTable = NULL;
-    }
-
-    if (Count == 0)
-        goto done;
-
-    Ring->AddressTable = __TransmitterAllocate(sizeof (SOCKADDR_INET) * Count);
-
-    status = STATUS_NO_MEMORY;
-    if (Ring->AddressTable == NULL)
-        goto fail1;
-
-    RtlCopyMemory(Ring->AddressTable, Table, sizeof (SOCKADDR_INET) * Count);
-    Ring->AddressCount = Count;
-
-    // Re-advertize if we were part way through
-    if (Ring->AddressIndex != 0)
-        Ring->AddressIndex = Ring->AddressCount * 3;
-
-done:
-    __TransmitterRingReleaseLock(Ring);
-
-    return;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    __TransmitterRingReleaseLock(Ring);
-}
-
-static FORCEINLINE VOID
-__TransmitterRingAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
-    )
-{
-    __TransmitterRingAcquireLock(Ring);
-    Ring->AddressIndex = Ring->AddressCount * 3;
-    __TransmitterRingReleaseLock(Ring);
-}
-
 static FORCEINLINE NTSTATUS
 __TransmitterRingInitialize(
     IN  PXENVIF_TRANSMITTER         Transmitter,
@@ -2869,8 +3107,9 @@ __TransmitterRingInitialize(
     if ((*Ring)->Path == NULL)
         goto fail2;
 
-    InitializeListHead(&(*Ring)->Queued);
-    InitializeListHead(&(*Ring)->Completed);
+    InitializeListHead(&(*Ring)->PacketQueue);
+    InitializeListHead(&(*Ring)->RequestQueue);
+    InitializeListHead(&(*Ring)->PacketComplete);
 
     KeInitializeDpc(&(*Ring)->Dpc, TransmitterRingDpc, *Ring);
 
@@ -2901,7 +3140,7 @@ __TransmitterRingInitialize(
 
     status = RtlStringCbPrintfA(Name,
                                 sizeof (Name),
-                                "%s_transmitter_req_id",
+                                "%s_transmitter_multicast_control",
                                 (*Ring)->Path);
     if (!NT_SUCCESS(status))
         goto fail5;
@@ -2910,12 +3149,37 @@ __TransmitterRingInitialize(
         if (Name[Index] == '/')
             Name[Index] = '_';
 
+    status = XENBUS_CACHE(Create,
+                          &Transmitter->CacheInterface,
+                          Name,
+                          sizeof (XENVIF_TRANSMITTER_MULTICAST_CONTROL),
+                          0,
+                          TransmitterMulticastControlCtor,
+                          TransmitterMulticastControlDtor,
+                          TransmitterRingAcquireLock,
+                          TransmitterRingReleaseLock,
+                          *Ring,
+                          &(*Ring)->MulticastControlCache);
+    if (!NT_SUCCESS(status))
+        goto fail6;
+
+    status = RtlStringCbPrintfA(Name,
+                                sizeof (Name),
+                                "%s_transmitter_req_id",
+                                (*Ring)->Path);
+    if (!NT_SUCCESS(status))
+        goto fail7;
+
+    for (Index = 0; Name[Index] != '\0'; Index++)
+        if (Name[Index] == '/')
+            Name[Index] = '_';
+
     status = XENBUS_RANGE_SET(Create,
                               &Transmitter->RangeSetInterface,
                               Name,
                               &(*Ring)->RangeSet);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail8;
 
     status = XENBUS_RANGE_SET(Put,
                               &Transmitter->RangeSetInterface,
@@ -2923,14 +3187,14 @@ __TransmitterRingInitialize(
                               1,
                               XENVIF_TRANSMITTER_MAXIMUM_FRAGMENT_ID);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail9;
 
     status = RtlStringCbPrintfA(Name,
                                 sizeof (Name),
                                 "%s_transmitter_fragment",
                                 (*Ring)->Path);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail10;
 
     for (Index = 0; Name[Index] != '\0'; Index++)
         if (Name[Index] == '/')
@@ -2948,29 +3212,65 @@ __TransmitterRingInitialize(
                           *Ring,
                           &(*Ring)->FragmentCache);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail11;
+
+    status = RtlStringCbPrintfA(Name,
+                                sizeof (Name),
+                                "%s_transmitter_request",
+                                (*Ring)->Path);
+    if (!NT_SUCCESS(status))
+        goto fail12;
+
+    for (Index = 0; Name[Index] != '\0'; Index++)
+        if (Name[Index] == '/')
+            Name[Index] = '_';
+
+    status = XENBUS_CACHE(Create,
+                          &Transmitter->CacheInterface,
+                          Name,
+                          sizeof (XENVIF_TRANSMITTER_REQUEST),
+                          0,
+                          TransmitterRequestCtor,
+                          TransmitterRequestDtor,
+                          TransmitterRingAcquireLock,
+                          TransmitterRingReleaseLock,
+                          *Ring,
+                          &(*Ring)->RequestCache);
+    if (!NT_SUCCESS(status))
+        goto fail13;
 
     status = ThreadCreate(TransmitterRingWatchdog,
                           *Ring,
                           &(*Ring)->WatchdogThread);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail14;
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail14:
+    Error("fail14\n");
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
+                 (*Ring)->RequestCache);
+    (*Ring)->RequestCache = NULL;
+
+fail13:
+    Error("fail13\n");
+
+fail12:
+    Error("fail12\n");
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
                  (*Ring)->FragmentCache);
     (*Ring)->FragmentCache = NULL;
 
-fail9:
-    Error("fail9\n");
+fail11:
+    Error("fail11\n");
 
-fail8:
-    Error("fail8\n");
+fail10:
+    Error("fail10\n");
 
     (VOID) XENBUS_RANGE_SET(Get,
                             &Transmitter->RangeSetInterface,
@@ -2978,14 +3278,25 @@ fail8:
                             1,
                             XENVIF_TRANSMITTER_MAXIMUM_FRAGMENT_ID);
 
-fail7:
-    Error("fail7\n");
+fail9:
+    Error("fail9\n");
 
     XENBUS_RANGE_SET(Destroy,
                      &Transmitter->RangeSetInterface,
                      (*Ring)->RangeSet);
     (*Ring)->RangeSet = NULL;
 
+fail8:
+    Error("fail8\n");
+
+fail7:
+    Error("fail7\n");
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
+                 (*Ring)->MulticastControlCache);
+    (*Ring)->MulticastControlCache = NULL;
+
 fail6:
     Error("fail6\n");
 
@@ -3005,8 +3316,9 @@ fail3:
 
     RtlZeroMemory(&(*Ring)->Dpc, sizeof (KDPC));
 
-    RtlZeroMemory(&(*Ring)->Queued, sizeof (LIST_ENTRY));
-    RtlZeroMemory(&(*Ring)->Completed, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->PacketComplete, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->RequestQueue, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->PacketQueue, sizeof (LIST_ENTRY));
 
     FrontendFreePath(Frontend, (*Ring)->Path);
     (*Ring)->Path = NULL;
@@ -3300,13 +3612,27 @@ __TransmitterRingDisable(
     Ring->Enabled = FALSE;
 
     // Release any fragments associated with a pending packet
-    Packet = __TransmitterRingUnpreparePacket(Ring);
+    Packet = __TransmitterRingUnprepareFragments(Ring);
 
     // Put any packet back on the head of the queue
     if (Packet != NULL)
-        InsertHeadList(&Ring->Queued, &Packet->ListEntry);
+        InsertHeadList(&Ring->PacketQueue, &Packet->ListEntry);
+
+    // Discard any pending requests
+    while (!IsListEmpty(&Ring->RequestQueue)) {
+        PLIST_ENTRY                 ListEntry;
+        PXENVIF_TRANSMITTER_REQUEST Request;
 
-    Ring->AddressIndex = 0;
+        ListEntry = RemoveHeadList(&Ring->RequestQueue);
+        ASSERT3P(ListEntry, !=, &Ring->RequestQueue);
+
+        Request = CONTAINING_RECORD(ListEntry,
+                                    XENVIF_TRANSMITTER_REQUEST,
+                                    ListEntry);
+
+        Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID;
+        __TransmitterPutRequest(Ring, Request);
+    }
 
     status = XENBUS_STORE(Read,
                           &Transmitter->StoreInterface,
@@ -3433,20 +3759,17 @@ __TransmitterRingTeardown(
     Ring->PacketsPrepared = 0;
     Ring->PacketsQueued = 0;
 
-    if (Ring->AddressCount != 0) {
-        ASSERT(Ring->AddressTable != NULL);
-        __TransmitterFree(Ring->AddressTable);
-    }
-
-    Ring->AddressTable = NULL;
-    Ring->AddressCount = 0;
-
     ThreadAlert(Ring->WatchdogThread);
     ThreadJoin(Ring->WatchdogThread);
     Ring->WatchdogThread = NULL;
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
+                 Ring->RequestCache);
+    Ring->RequestCache = NULL;
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
                  Ring->FragmentCache);
     Ring->FragmentCache = NULL;
 
@@ -3463,14 +3786,22 @@ __TransmitterRingTeardown(
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
+                 Ring->MulticastControlCache);
+    Ring->MulticastControlCache = NULL;
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
                  Ring->BufferCache);
     Ring->BufferCache = NULL;
 
-    ASSERT(IsListEmpty(&Ring->Queued));
-    RtlZeroMemory(&Ring->Queued, sizeof (LIST_ENTRY));
+    ASSERT(IsListEmpty(&Ring->PacketComplete));
+    RtlZeroMemory(&Ring->PacketComplete, sizeof (LIST_ENTRY));
+
+    ASSERT(IsListEmpty(&Ring->RequestQueue));
+    RtlZeroMemory(&Ring->RequestQueue, sizeof (LIST_ENTRY));
 
-    ASSERT(IsListEmpty(&Ring->Completed));
-    RtlZeroMemory(&Ring->Completed, sizeof (LIST_ENTRY));
+    ASSERT(IsListEmpty(&Ring->PacketQueue));
+    RtlZeroMemory(&Ring->PacketQueue, sizeof (LIST_ENTRY));
 
     FrontendFreePath(Frontend, Ring->Path);
     Ring->Path = NULL;
@@ -3520,12 +3851,12 @@ __TransmitterRingAbortPackets(
 
     TransmitterRingSwizzle(Ring);
 
-    while (!IsListEmpty(&Ring->Queued)) {
+    while (!IsListEmpty(&Ring->PacketQueue)) {
         PLIST_ENTRY                 ListEntry;
         PXENVIF_TRANSMITTER_PACKET  Packet;
         
-        ListEntry = RemoveHeadList(&Ring->Queued);
-        ASSERT3P(ListEntry, !=, &Ring->Queued);
+        ListEntry = RemoveHeadList(&Ring->PacketQueue);
+        ASSERT3P(ListEntry, !=, &Ring->PacketQueue);
 
         Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
         Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
@@ -3548,6 +3879,168 @@ __TransmitterRingAbortPackets(
     __TransmitterRingReleaseLock(Ring);
 }
 
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueArp(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PIPV4_ADDRESS               Address
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail1;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail2;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_ARP;
+    Request->Arp.Address = *Address;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %u.%u.%u.%u\n",
+         FrontendGetPath(Frontend),
+         Address->Byte[0],
+         Address->Byte[1],
+         Address->Byte[2],
+         Address->Byte[3]);
+
+    return STATUS_SUCCESS;
+
+fail2:
+fail1:
+    __TransmitterRingReleaseLock(Ring);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PIPV6_ADDRESS               Address
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail1;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail2;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT;
+    Request->NeighbourAdvertisement.Address = *Address;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
+         FrontendGetPath(Frontend),
+         HTONS(Address->Word[0]),
+         HTONS(Address->Word[1]),
+         HTONS(Address->Word[2]),
+         HTONS(Address->Word[3]),
+         HTONS(Address->Word[4]),
+         HTONS(Address->Word[5]),
+         HTONS(Address->Word[6]),
+         HTONS(Address->Word[7]));
+
+    return STATUS_SUCCESS;
+
+fail2:
+fail1:
+    __TransmitterRingReleaseLock(Ring);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PETHERNET_ADDRESS           Address,
+    IN  BOOLEAN                     Add
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+
+    status = STATUS_NOT_SUPPORTED;
+    if (!Transmitter->MulticastControl)
+        goto fail1;
+
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail2;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail3;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL;
+    Request->MulticastControl.Address = *Address;
+    Request->MulticastControl.Add = Add;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %s %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPath(Frontend),
+         (Add) ? "ADD" : "REMOVE",
+         Address->Byte[0],
+         Address->Byte[1],
+         Address->Byte[2],
+         Address->Byte[3],
+         Address->Byte[4],
+         Address->Byte[5]);
+
+    return STATUS_SUCCESS;
+
+fail3:
+fail2:
+    __TransmitterRingReleaseLock(Ring);
+
+fail1:
+    return status;
+}
+
 static VOID
 TransmitterDebugCallback(
     IN  PVOID           Argument,
@@ -3796,6 +4289,22 @@ TransmitterConnect(
                      Buffer);
     }
 
+    status = XENBUS_STORE(Read,
+                          &Transmitter->StoreInterface,
+                          NULL,
+                          FrontendGetBackendPath(Frontend),
+                          "feature-multicast-control",
+                          &Buffer);
+    if (!NT_SUCCESS(status)) {
+        Transmitter->MulticastControl = FALSE;
+    } else {
+        Transmitter->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
+
+        XENBUS_STORE(Free,
+                     &Transmitter->StoreInterface,
+                     Buffer);
+    }
+
     Transmitter->NumQueues = FrontendGetNumQueues(Frontend);
     ASSERT3U(Transmitter->NumQueues, <=, Transmitter->MaxQueues);
 
@@ -3880,22 +4389,38 @@ TransmitterStoreWrite(
     IN  PXENBUS_STORE_TRANSACTION   Transaction
     )
 {
+    PXENVIF_FRONTEND                Frontend;
     NTSTATUS                        status;
     LONG                            Index;
 
+    Frontend = Transmitter->Frontend;
+
+    status = XENBUS_STORE(Printf,
+                          &Transmitter->StoreInterface,
+                          Transaction,
+                          FrontendGetPath(Frontend),
+                          "request-multicast-control",
+                          "%u",
+                          TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     Index = 0;
     while (Index < Transmitter->NumQueues) {
         PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[Index];
 
         status = __TransmitterRingStoreWrite(Ring, Transaction);
         if (!NT_SUCCESS(status))
-            goto fail1;
+            goto fail2;
 
         Index++;
     }    
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -3954,6 +4479,7 @@ TransmitterDisconnect(
 
     Frontend = Transmitter->Frontend;
 
+    Transmitter->MulticastControl = FALSE;
     Transmitter->Split = FALSE;
 
     XENBUS_DEBUG(Deregister,
@@ -4046,42 +4572,6 @@ TransmitterTeardown(
     __TransmitterFree(Transmitter);
 }
 
-VOID
-TransmitterUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  SOCKADDR_INET           Table[],
-    IN  ULONG                   Count
-    )
-{
-    KIRQL                       Irql;
-    PXENVIF_TRANSMITTER_RING    Ring;
-
-    // Make sure we don't suspend
-    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
-
-    // Use the first ring for address advertisment
-    Ring = Transmitter->Ring[0];
-    ASSERT3U(Ring, !=, NULL);
-
-    __TransmitterRingUpdateAddressTable(Ring, Table, Count);
-
-    KeLowerIrql(Irql);
-}
-
-VOID
-TransmitterAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER     Transmitter
-    )
-{
-    PXENVIF_TRANSMITTER_RING    Ring;
-
-    // Use the first ring for address advertisment
-    Ring = Transmitter->Ring[0];
-    ASSERT3U(Ring, !=, NULL);
-
-    __TransmitterRingAdvertiseAddresses(Ring);
-}
-
 NTSTATUS
 TransmitterSetPacketOffset(
     IN  PXENVIF_TRANSMITTER                 Transmitter,
@@ -4346,6 +4836,40 @@ TransmitterAbortPackets(
 }
 
 VOID
+TransmitterQueueArp(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV4_ADDRESS           Address
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueArp(Ring, Address);
+}
+
+VOID
+TransmitterQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV6_ADDRESS           Address
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueNeighbourAdvertisement(Ring, Address);
+}
+
+VOID
+TransmitterQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PETHERNET_ADDRESS       Address,
+    IN  BOOLEAN                 Add
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueMulticastControl(Ring, Address, Add);
+}
+
+VOID
 TransmitterQueryRingSize(
     IN  PXENVIF_TRANSMITTER Transmitter,
     OUT PULONG              Size
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index fad0762..eddc51b 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -34,7 +34,9 @@
 
 #include <ntddk.h>
 #include <netioapi.h>
+
 #include <vif_interface.h>
+#include <tcpip.h>
 
 #include "frontend.h"
 
@@ -89,21 +91,28 @@ TransmitterAbortPackets(
     );
 
 extern VOID
-TransmitterQueryRingSize(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    OUT PULONG              Size
+TransmitterQueueArp(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV4_ADDRESS           Address
     );
 
 extern VOID
-TransmitterUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  PSOCKADDR_INET      Table,
-    IN  ULONG               Count
+TransmitterQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV6_ADDRESS           Address
     );
 
 extern VOID
-TransmitterAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER Transmitter
+TransmitterQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PETHERNET_ADDRESS       Address,
+    IN  BOOLEAN                 Add
+    );
+
+extern VOID
+TransmitterQueryRingSize(
+    IN  PXENVIF_TRANSMITTER Transmitter,
+    OUT PULONG              Size
     );
 
 extern VOID
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 35af384..b2bbf05 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -501,16 +501,24 @@ VifMacSetMulticastAddresses(
     )
 {
     PXENVIF_VIF_CONTEXT     Context = Interface->Context;
+    ULONG                   Index;
     NTSTATUS                status;
 
+    status = STATUS_INVALID_PARAMETER;
+    for (Index = 0; Index < Count; Index++) {
+        if (!(Address[Index].Byte[0] & 0x01))
+            goto done;
+    }
+
     AcquireMrswLockShared(&Context->Lock);
 
-    status = MacSetMulticastAddresses(FrontendGetMac(Context->Frontend),
-                                      Address,
-                                      Count);
+    status = FrontendSetMulticastAddresses(Context->Frontend,
+                                           Address,
+                                           Count);
 
     ReleaseMrswLockShared(&Context->Lock);
 
+done:
     return status;
 }
 
@@ -598,7 +606,10 @@ VifSuspendCallbackLate(
     status = FrontendSetState(Context->Frontend, FRONTEND_ENABLED);
     ASSERT(NT_SUCCESS(status));
 
-    TransmitterAdvertiseAddresses(FrontendGetTransmitter(Context->Frontend));
+    // We do this three times to make sure switches take note
+    FrontendAdvertiseIpAddresses(Context->Frontend);
+    FrontendAdvertiseIpAddresses(Context->Frontend);
+    FrontendAdvertiseIpAddresses(Context->Frontend);
 }
 
 static NTSTATUS
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 09:34:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 09:34:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZFHv-0008Vg-8G; Tue, 08 Sep 2015 09:34:03 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZFHt-0008VW-Al
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 09:34:01 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	80/79-01143-88BAEE55; Tue, 08 Sep 2015 09:34:00 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1441704835!47745784!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12483 invoked from network); 8 Sep 2015 09:33:55 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 09:33:55 -0000
Received: by wiclk2 with SMTP id lk2so113052434wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 02:33:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=qXq60Y8G4ZVxW1vKsaX3U6n9SgiehN1b0qFy+4tneEo=;
	b=OjJGZNwWmoUsjLTcex8ul0J79CllqUcVxnOaun985ZYMQvSltSx1CnTcv+5l5S31Fv
	cGeU4M98i5Gl7Hy0NsdUpiAiJLfwTJIwMVugzOco0I2NigWvPjMhe/zARYcnsUu4FZPs
	DSrTvcXzuSohBUifC5pNbZYRCazMGxhgRfmsv9ldNn1d8ILVsHPsYSMpgYVbIqUPAaLa
	C807RyO4T15qZLN6oLESRXEb01aEJ3xNeJp1p5gXj7E/mse/yO1my0t0DFOkY1gWvRqq
	X573qy4cFP08aH2BRXIPqhnHSA4MO7Gk6OT6gYLxY707BgAy3197QniKo9ANCtpy1GOM
	mhgw==
X-Received: by 10.194.158.68 with SMTP id ws4mr30746974wjb.25.1441704835162;
	Tue, 08 Sep 2015 02:33:55 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id c11sm4769407wib.1.2015.09.08.02.33.54
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 02:33:54 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 10:33:40 +0100
Message-Id: <1441704820-11796-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Use multicast control if the backend
	supports it.
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This required a bit of re-work in the transmitter code since using multicast
control necessitates sending dummy transmit requests with special extra
info fragments. As a knock-on I also re-worked the way the IP address table
is maintained, removing bits that were in the transmitter code into the
general frontend code.

Re-work was also required in the mac code since it is also necessary to
track addition and removal of individual multicast addresses, rather than
just handling a table update.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/frontend.c    |  317 ++++++++++---
 src/xenvif/frontend.h    |   12 +
 src/xenvif/mac.c         |  343 ++++++++++++--
 src/xenvif/mac.h         |   19 +-
 src/xenvif/transmitter.c | 1126 +++++++++++++++++++++++++++++++++-------------
 src/xenvif/transmitter.h |   27 +-
 src/xenvif/vif.c         |   19 +-
 7 files changed, 1435 insertions(+), 428 deletions(-)

diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index b389b1c..69aed73 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -63,7 +63,6 @@ struct _XENVIF_FRONTEND {
     XENVIF_FRONTEND_STATE       State;
     BOOLEAN                     Online;
     KSPIN_LOCK                  Lock;
-    PXENVIF_THREAD              MibThread;
     PXENVIF_THREAD              EjectThread;
     KEVENT                      EjectEvent;
 
@@ -86,6 +85,10 @@ struct _XENVIF_FRONTEND {
 
     PXENVIF_FRONTEND_STATISTICS Statistics;
     ULONG                       StatisticsCount;
+
+    PXENVIF_THREAD              MibThread;
+    PSOCKADDR_INET              AddressTable;
+    ULONG                       AddressCount;
 };
 
 static const PCHAR
@@ -229,7 +232,7 @@ FrontendSetMaxQueues(
     if (NT_SUCCESS(status) && FrontendMaxQueues < Frontend->MaxQueues)
         Frontend->MaxQueues = FrontendMaxQueues;
 
-    Info("%u\n", Frontend->MaxQueues);
+    Info("%s: %u\n", __FrontendGetPath(Frontend), Frontend->MaxQueues);
 }
 
 static FORCEINLINE ULONG
@@ -503,50 +506,49 @@ found:
 
 static NTSTATUS
 FrontendInsertAddress(
-    IN OUT  PSOCKADDR_INET      *AddressTable,
-    IN      const SOCKADDR_INET *Address,
-    IN OUT  PULONG              AddressCount
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  const SOCKADDR_INET *Address
     )
 {
-    ULONG                       Index;
-    PSOCKADDR_INET              Table;
-    NTSTATUS                    status;
+    ULONG                   Index;
+    PSOCKADDR_INET          Table;
+    NTSTATUS                status;
 
     Trace("====>\n");
 
-    for (Index = 0; Index < *AddressCount; Index++) {
-        if ((*AddressTable)[Index].si_family != Address->si_family)
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        if (Frontend->AddressTable[Index].si_family != Address->si_family)
             continue;
 
         if (Address->si_family == AF_INET) {
-            if (RtlCompareMemory(&Address->Ipv4.sin_addr.s_addr,
-                                 &(*AddressTable)[Index].Ipv4.sin_addr.s_addr,
-                                 IPV4_ADDRESS_LENGTH) == IPV4_ADDRESS_LENGTH)
+            if (RtlEqualMemory(&Address->Ipv4.sin_addr.s_addr,
+                               &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                                 IPV4_ADDRESS_LENGTH))
                 goto done;
         } else {
             ASSERT3U(Address->si_family, ==, AF_INET6);
 
-            if (RtlCompareMemory(&Address->Ipv6.sin6_addr.s6_addr,
-                                 &(*AddressTable)[Index].Ipv6.sin6_addr.s6_addr,
-                                 IPV6_ADDRESS_LENGTH) == IPV6_ADDRESS_LENGTH)
+            if (RtlEqualMemory(&Address->Ipv6.sin6_addr.s6_addr,
+                               &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                               IPV6_ADDRESS_LENGTH))
                 goto done;
         }
     }
 
     // We have an address we've not seen before so grow the table
-    Table = __FrontendAllocate(sizeof (SOCKADDR_INET) * (*AddressCount + 1));
+    Table = __FrontendAllocate(sizeof (SOCKADDR_INET) * (Frontend->AddressCount + 1));
 
     status = STATUS_NO_MEMORY;
     if (Table == NULL)
         goto fail1;
 
-    RtlCopyMemory(Table, *AddressTable, sizeof (SOCKADDR_INET) * *AddressCount);
-    Table[(*AddressCount)++] = *Address;
+    RtlCopyMemory(Table, Frontend->AddressTable, sizeof (SOCKADDR_INET) * Frontend->AddressCount);
 
-    if (*AddressTable != NULL)
-        __FrontendFree(*AddressTable);
+    if (Frontend->AddressCount != 0)
+        __FrontendFree(Frontend->AddressTable);
 
-    *AddressTable = Table;
+    Table[Frontend->AddressCount++] = *Address;
+    Frontend->AddressTable = Table;
 
 done:
     Trace("<====\n");
@@ -563,9 +565,7 @@ static NTSTATUS
 FrontendProcessAddressTable(
     IN  PXENVIF_FRONTEND            Frontend,
     IN  PMIB_UNICASTIPADDRESS_TABLE Table,
-    IN  NET_IFINDEX                 InterfaceIndex,
-    OUT PSOCKADDR_INET              *AddressTable,
-    OUT PULONG                      AddressCount
+    IN  NET_IFINDEX                 InterfaceIndex
     )
 {
     ULONG                           Index;
@@ -573,8 +573,12 @@ FrontendProcessAddressTable(
 
     UNREFERENCED_PARAMETER(Frontend);
 
-    *AddressTable = NULL;
-    *AddressCount = 0;
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
 
     for (Index = 0; Index < Table->NumEntries; Index++) {
         PMIB_UNICASTIPADDRESS_ROW   Row = &Table->Table[Index];
@@ -586,9 +590,7 @@ FrontendProcessAddressTable(
             Row->Address.si_family != AF_INET6)
             continue;
 
-        status = FrontendInsertAddress(AddressTable,
-                                       &Row->Address,
-                                       AddressCount);
+        status = FrontendInsertAddress(Frontend, &Row->Address);
         if (!NT_SUCCESS(status))
             goto fail1;
     }
@@ -598,17 +600,12 @@ FrontendProcessAddressTable(
 fail1:
     Error("fail1 (%08x)\n", status);
 
-    if (*AddressTable != NULL)
-        __FrontendFree(*AddressTable);
-
     return status;
 }
 
 static NTSTATUS
 FrontendDumpAddressTable(
-    IN  PXENVIF_FRONTEND        Frontend,
-    IN  PSOCKADDR_INET          AddressTable,
-    IN  ULONG                   AddressCount
+    IN  PXENVIF_FRONTEND        Frontend
     )
 {
     PXENBUS_STORE_TRANSACTION   Transaction;
@@ -646,19 +643,19 @@ FrontendDumpAddressTable(
     IpVersion4Count = 0;
     IpVersion6Count = 0;
 
-    for (Index = 0; Index < AddressCount; Index++) {
-        switch (AddressTable[Index].si_family) {
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        switch (Frontend->AddressTable[Index].si_family) {
         case AF_INET: {
             IPV4_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv4/XXXXXXXX/addr")];
+            CHAR            Node[sizeof ("ipv4/address/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
-                          &AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
                           IPV4_ADDRESS_LENGTH);
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv4/%u/addr",
+                                        "ipv4/address/%u",
                                         IpVersion4Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -687,15 +684,15 @@ FrontendDumpAddressTable(
         }
         case AF_INET6: {
             IPV6_ADDRESS    Address;
-            CHAR            Node[sizeof ("ipv6/XXXXXXXX/addr")];
+            CHAR            Node[sizeof ("ipv6/address/XXXXXXXX")];
 
             RtlCopyMemory(Address.Byte,
-                          &AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
                           IPV6_ADDRESS_LENGTH);
 
             status = RtlStringCbPrintfA(Node,
                                         sizeof (Node),
-                                        "ipv6/%u/addr",
+                                        "ipv6/address/%u",
                                         IpVersion6Count);
             ASSERT(NT_SUCCESS(status));
 
@@ -848,8 +845,6 @@ FrontendMib(
         NET_IFINDEX                 InterfaceIndex;
         PMIB_UNICASTIPADDRESS_TABLE UnicastIpAddressTable;
         KIRQL                       Irql;
-        PSOCKADDR_INET              AddressTable;
-        ULONG                       AddressCount;
 
         Trace("waiting...\n");
 
@@ -892,22 +887,11 @@ FrontendMib(
 
         status = FrontendProcessAddressTable(Frontend,
                                              UnicastIpAddressTable,
-                                             InterfaceIndex,
-                                             &AddressTable,
-                                             &AddressCount);
+                                             InterfaceIndex);
         if (!NT_SUCCESS(status))
             goto unlock;
 
-        TransmitterUpdateAddressTable(__FrontendGetTransmitter(Frontend),
-                                      AddressTable,
-                                      AddressCount);
-
-        (VOID) FrontendDumpAddressTable(Frontend,
-                                        AddressTable,
-                                        AddressCount);
-
-        if (AddressCount != 0)
-            __FrontendFree(AddressTable);
+        (VOID) FrontendDumpAddressTable(Frontend);
 
 unlock:
         KeReleaseSpinLock(&Frontend->Lock, Irql);
@@ -920,6 +904,13 @@ loop:
             __FreeMibTable(IfTable);
     }
 
+    if (Frontend->AddressCount != 0) {
+        __FrontendFree(Frontend->AddressTable);
+
+        Frontend->AddressTable = NULL;
+        Frontend->AddressCount = 0;
+    }
+
     status = __CancelMibChangeNotify2(Handle);
     ASSERT(NT_SUCCESS(status));
 
@@ -948,6 +939,208 @@ fail1:
     return status;
 }
 
+NTSTATUS
+FrontendSetMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  PETHERNET_ADDRESS   Address,
+    IN  ULONG               Count
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    PXENVIF_MAC             Mac;
+    KIRQL                   Irql;
+    PETHERNET_ADDRESS       MulticastAddress;
+    ULONG                   MulticastCount;
+    ULONG                   MulticastIndex;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+    Mac = FrontendGetMac(Frontend);
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+    status = MacQueryMulticastAddresses(Mac, NULL, &MulticastCount);
+    ASSERT3U(status, ==, STATUS_BUFFER_OVERFLOW);
+
+    if (MulticastCount != 0) {
+        MulticastAddress = __FrontendAllocate(sizeof (ETHERNET_ADDRESS) *
+                                              MulticastCount);
+
+        status = STATUS_NO_MEMORY;
+        if (MulticastAddress == NULL)
+            goto fail1;
+
+        status = MacQueryMulticastAddresses(Mac,
+                                            MulticastAddress,
+                                            &MulticastCount);
+        if (!NT_SUCCESS(status))
+            goto fail2;
+    } else
+        MulticastAddress = NULL;
+
+    for (Index = 0; Index < Count; Index++) {
+        BOOLEAN Found;
+
+        ASSERT(Address[Index].Byte[0] & 0x01);
+
+        Found = FALSE;
+
+        // If the multicast address has already been added and it
+        // appears in the updated list then we don't want to remove it.
+        for (MulticastIndex = 0;
+             MulticastIndex < MulticastCount;
+             MulticastIndex++) {
+            if (RtlEqualMemory(&Address[Index],
+                               &MulticastAddress[MulticastIndex],
+                               ETHERNET_ADDRESS_LENGTH)) {
+                Found = TRUE;
+                RtlZeroMemory(&MulticastAddress[MulticastIndex],
+                              ETHERNET_ADDRESS_LENGTH);
+                break;
+            }
+        }
+
+        if (!Found) {
+            (VOID) MacAddMulticastAddress(Mac, &Address[Index]);
+            (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                    &Address[Index],
+                                                    TRUE);
+        }
+    }
+
+    // Walk the multicast list removing any addresses not in the
+    // updated list
+    for (MulticastIndex = 0;
+         MulticastIndex < MulticastCount;
+         MulticastIndex++) {
+        if (!(MulticastAddress[MulticastIndex].Byte[0] & 0x01))
+            continue;
+
+        (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                &MulticastAddress[MulticastIndex],
+                                                FALSE);
+        (VOID) MacRemoveMulticastAddress(Mac,
+                                         &MulticastAddress[MulticastIndex]);
+    }
+
+    if (MulticastAddress != NULL)
+        __FrontendFree(MulticastAddress);
+
+    KeLowerIrql(Irql);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __FrontendFree(MulticastAddress);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    KeLowerIrql(Irql);
+
+    return status;
+}
+
+static NTSTATUS
+FrontendNotifyMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  BOOLEAN             Add
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    PXENVIF_MAC             Mac;
+    PETHERNET_ADDRESS       Address;
+    ULONG                   Count;
+    ULONG                   Index;
+    NTSTATUS                status;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+    Mac = FrontendGetMac(Frontend);
+
+    status = MacQueryMulticastAddresses(Mac, NULL, &Count);
+    ASSERT3U(status, ==, STATUS_BUFFER_OVERFLOW);
+
+    if (Count != 0) {
+        Address = __FrontendAllocate(sizeof (ETHERNET_ADDRESS) *
+                                     Count);
+
+        status = STATUS_NO_MEMORY;
+        if (Address == NULL)
+            goto fail1;
+
+        status = MacQueryMulticastAddresses(Mac, Address, &Count);
+        if (!NT_SUCCESS(status))
+            goto fail2;
+    } else
+        Address = NULL;
+
+    for (Index = 0; Index < Count; Index++)
+        (VOID) TransmitterQueueMulticastControl(Transmitter,
+                                                &Address[Index],
+                                                Add);
+
+    if (Address != NULL)
+        __FrontendFree(Address);
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __FrontendFree(Address);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+VOID
+FrontendAdvertiseIpAddresses(
+    IN  PXENVIF_FRONTEND    Frontend
+    )
+{
+    PXENVIF_TRANSMITTER     Transmitter;
+    KIRQL                   Irql;
+    ULONG                   Index;
+
+    Transmitter = FrontendGetTransmitter(Frontend);
+
+    KeAcquireSpinLock(&Frontend->Lock, &Irql);
+
+    for (Index = 0; Index < Frontend->AddressCount; Index++) {
+        switch (Frontend->AddressTable[Index].si_family) {
+        case AF_INET: {
+            IPV4_ADDRESS    Address;
+
+            RtlCopyMemory(Address.Byte,
+                          &Frontend->AddressTable[Index].Ipv4.sin_addr.s_addr,
+                          IPV4_ADDRESS_LENGTH);
+
+            TransmitterQueueArp(Transmitter, &Address);
+            break;
+        }
+        case AF_INET6: {
+            IPV6_ADDRESS    Address;
+
+            RtlCopyMemory(Address.Byte,
+                          &Frontend->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
+                          IPV6_ADDRESS_LENGTH);
+
+            TransmitterQueueNeighbourAdvertisement(Transmitter, &Address);
+            break;
+        }
+        default:
+            ASSERT(FALSE);
+        }
+    }
+
+    KeReleaseSpinLock(&Frontend->Lock, Irql);
+}
+
 static VOID
 FrontendSetOnline(
     IN  PXENVIF_FRONTEND    Frontend
@@ -1461,7 +1654,7 @@ FrontendSetNumQueues(
 
     Frontend->NumQueues = __min(Frontend->MaxQueues, BackendMaxQueues);
 
-    Info("%u\n", Frontend->NumQueues);
+    Info("%s: %u\n", __FrontendGetPath(Frontend), Frontend->NumQueues);
 }
 
 static FORCEINLINE ULONG
@@ -1713,6 +1906,8 @@ FrontendEnable(
     if (!NT_SUCCESS(status))
         goto fail3;
 
+    FrontendNotifyMulticastAddresses(Frontend, TRUE);
+
     Trace("<====\n");
     return STATUS_SUCCESS;
 
@@ -1739,6 +1934,8 @@ FrontendDisable(
 {
     Trace("====>\n");
 
+    FrontendNotifyMulticastAddresses(Frontend, FALSE);
+
     TransmitterDisable(__FrontendGetTransmitter(Frontend));
     ReceiverDisable(__FrontendGetReceiver(Frontend));
     MacDisable(__FrontendGetMac(Frontend));
diff --git a/src/xenvif/frontend.h b/src/xenvif/frontend.h
index 374e9b4..bd39767 100644
--- a/src/xenvif/frontend.h
+++ b/src/xenvif/frontend.h
@@ -169,4 +169,16 @@ FrontendIncrementStatistic(
     IN  ULONGLONG               Delta
     );
 
+extern NTSTATUS
+FrontendSetMulticastAddresses(
+    IN  PXENVIF_FRONTEND    Frontend,
+    IN  PETHERNET_ADDRESS   Address,
+    IN  ULONG               Count
+    );
+
+extern VOID
+FrontendAdvertiseIpAddresses(
+    IN  PXENVIF_FRONTEND        Frontend
+    );
+
 #endif  // _XENVIF_FRONTEND_H
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index b255d58..91467d6 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -42,6 +42,11 @@
 #include "assert.h"
 #include "util.h"
 
+typedef struct _XENVIF_MAC_MULTICAST {
+    LIST_ENTRY          ListEntry;
+    ETHERNET_ADDRESS    Address;
+} XENVIF_MAC_MULTICAST, *PXENVIF_MAC_MULTICAST;
+
 struct _XENVIF_MAC {
     PXENVIF_FRONTEND        Frontend;
     KSPIN_LOCK              Lock;
@@ -51,8 +56,9 @@ struct _XENVIF_MAC {
     ETHERNET_ADDRESS        PermanentAddress;
     ETHERNET_ADDRESS        CurrentAddress;
     ETHERNET_ADDRESS        BroadcastAddress;
-    PETHERNET_ADDRESS       MulticastAddress;
-    ULONG                   MulticastAddressCount;
+    LIST_ENTRY              MulticastList;
+    ULONG                   MulticastCount;
+    BOOLEAN                 MulticastControl;
     XENVIF_MAC_FILTER_LEVEL FilterLevel[ETHERNET_ADDRESS_TYPE_COUNT];
     XENBUS_DEBUG_INTERFACE  DebugInterface;
     PXENBUS_DEBUG_CALLBACK  DebugCallback;
@@ -108,6 +114,15 @@ __MacSetPermanentAddress(
                         Mac->PermanentAddress.Byte[4],
                         Mac->PermanentAddress.Byte[5]);
 
+    Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPrefix(Frontend),
+         Mac->PermanentAddress.Byte[0],
+         Mac->PermanentAddress.Byte[1],
+         Mac->PermanentAddress.Byte[2],
+         Mac->PermanentAddress.Byte[3],
+         Mac->PermanentAddress.Byte[4],
+         Mac->PermanentAddress.Byte[5]);
+
     return STATUS_SUCCESS;
 
 fail1:
@@ -153,6 +168,15 @@ __MacSetCurrentAddress(
                         Mac->CurrentAddress.Byte[4],
                         Mac->CurrentAddress.Byte[5]);
 
+    Info("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPrefix(Frontend),
+         Mac->CurrentAddress.Byte[0],
+         Mac->CurrentAddress.Byte[1],
+         Mac->CurrentAddress.Byte[2],
+         Mac->CurrentAddress.Byte[3],
+         Mac->CurrentAddress.Byte[4],
+         Mac->CurrentAddress.Byte[5]);
+
     return STATUS_SUCCESS;
 
 fail1:
@@ -218,6 +242,7 @@ MacInitialize(
         goto fail1;
 
     KeInitializeSpinLock(&(*Mac)->Lock);
+    InitializeListHead(&(*Mac)->MulticastList);
 
     FdoGetDebugInterface(PdoGetFdo(FrontendGetPdo(Frontend)),
                          &(*Mac)->DebugInterface);
@@ -235,6 +260,113 @@ fail1:
     return status;
 }
 
+static NTSTATUS
+MacDumpMulticastList(
+    IN  PXENVIF_MAC     Mac
+    )
+{
+    PXENVIF_FRONTEND    Frontend;
+    PETHERNET_ADDRESS   Address;
+    ULONG               Count;
+    PLIST_ENTRY         ListEntry;
+    ULONG               Index;
+    KIRQL               Irql;
+    NTSTATUS            status;
+
+    Trace("====>\n");
+
+    Frontend = Mac->Frontend;
+
+    KeAcquireSpinLock(&Mac->Lock, &Irql);
+
+    status  = STATUS_UNSUCCESSFUL;
+    if (!Mac->Connected)
+        goto fail1;
+
+    if (Mac->MulticastCount != 0) {
+        Address = __MacAllocate(sizeof (ETHERNET_ADDRESS) *
+                                Mac->MulticastCount);
+
+        status = STATUS_NO_MEMORY;
+        if (Address == NULL)
+            goto fail2;
+
+        Count = 0;
+        for (ListEntry = Mac->MulticastList.Flink;
+             ListEntry != &Mac->MulticastList;
+             ListEntry = ListEntry->Flink) {
+            PXENVIF_MAC_MULTICAST   Multicast;
+
+            Multicast = CONTAINING_RECORD(ListEntry,
+                                          XENVIF_MAC_MULTICAST,
+                                          ListEntry);
+
+            Address[Count++] = Multicast->Address;
+        }
+        ASSERT3U(Count, ==, Mac->MulticastCount);
+    } else {
+        Address = NULL;
+        Count = 0;
+    }
+
+    KeReleaseSpinLock(&Mac->Lock, Irql);
+
+    (VOID) XENBUS_STORE(Remove,
+                        &Mac->StoreInterface,
+                        NULL,
+                        FrontendGetPrefix(Frontend),
+                        "mac/multicast");
+
+    for (Index = 0; Index < Count; Index++) {
+        CHAR    Node[sizeof ("mac/multicast/XX")];
+
+        status = RtlStringCbPrintfA(Node,
+                                    sizeof (Node),
+                                    "mac/multicast/%u",
+                                    Index);
+        ASSERT(NT_SUCCESS(status));
+
+        (VOID) XENBUS_STORE(Printf,
+                            &Mac->StoreInterface,
+                            NULL,
+                            FrontendGetPrefix(Frontend),
+                            Node,
+                            "%02x:%02x:%02x:%02x:%02x:%02x",
+                            Address[Index].Byte[0],
+                            Address[Index].Byte[1],
+                            Address[Index].Byte[2],
+                            Address[Index].Byte[3],
+                            Address[Index].Byte[4],
+                            Address[Index].Byte[5]);
+
+        Trace("%s: %02x:%02x:%02x:%02x:%02x:%02x\n",
+              FrontendGetPrefix(Frontend),
+              Address[Index].Byte[0],
+              Address[Index].Byte[1],
+              Address[Index].Byte[2],
+              Address[Index].Byte[3],
+              Address[Index].Byte[4],
+              Address[Index].Byte[5]);
+    }
+
+    if (Address != NULL)
+        __MacFree(Address);
+
+    Trace("<====\n");
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    KeReleaseSpinLock(&Mac->Lock, Irql);
+
+    return status;
+}
+
 NTSTATUS
 MacConnect(
     IN  PXENVIF_MAC     Mac
@@ -292,6 +424,22 @@ MacConnect(
 
     Mac->MaximumFrameSize = (ULONG)Mtu + sizeof (ETHERNET_TAGGED_HEADER);
 
+    status = XENBUS_STORE(Read,
+                          &Mac->StoreInterface,
+                          NULL,
+                          FrontendGetBackendPath(Frontend),
+                          "feature-multicast-control",
+                          &Buffer);
+    if (!NT_SUCCESS(status)) {
+        Mac->MulticastControl = FALSE;
+    } else {
+        Mac->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
+
+        XENBUS_STORE(Free,
+                     &Mac->StoreInterface,
+                     Buffer);
+    }
+
     status = XENBUS_DEBUG(Register,
                           &Mac->DebugInterface,
                           __MODULE__ "|MAC",
@@ -301,8 +449,12 @@ MacConnect(
     if (!NT_SUCCESS(status))
         goto fail5;
 
+    KeAcquireSpinLockAtDpcLevel(&Mac->Lock);
     ASSERT(!Mac->Connected);
     Mac->Connected = TRUE;
+    KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
+
+    (VOID) MacDumpMulticastList(Mac);
 
     return STATUS_SUCCESS;
 
@@ -419,14 +571,18 @@ MacDisconnect(
 
     Frontend = Mac->Frontend;
 
+    KeAcquireSpinLockAtDpcLevel(&Mac->Lock);
     ASSERT(Mac->Connected);
     Mac->Connected = FALSE;
+    KeReleaseSpinLockFromDpcLevel(&Mac->Lock);
 
     XENBUS_DEBUG(Deregister,
                  &Mac->DebugInterface,
                  Mac->DebugCallback);
     Mac->DebugCallback = NULL;
 
+    Mac->MulticastControl = FALSE;
+
     Mac->MaximumFrameSize = 0;
 
     RtlZeroMemory(&Mac->BroadcastAddress, sizeof (ETHERNET_ADDRESS));
@@ -449,11 +605,25 @@ MacTeardown(
     IN  PXENVIF_MAC Mac
     )
 {
-    if (Mac->MulticastAddressCount != 0) {
-        __MacFree(Mac->MulticastAddress);
-        Mac->MulticastAddress = NULL;
-        Mac->MulticastAddressCount = 0;
+    while (!IsListEmpty(&Mac->MulticastList)) {
+        PLIST_ENTRY             ListEntry;
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        ListEntry = RemoveHeadList(&Mac->MulticastList);
+        ASSERT3P(ListEntry, !=, &Mac->MulticastList);
+
+        RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+        __MacFree(Multicast);
+
+        --Mac->MulticastCount;
     }
+    ASSERT3U(Mac->MulticastCount, ==, 0);
+
+    RtlZeroMemory(&Mac->MulticastList, sizeof (LIST_ENTRY));
 
     RtlZeroMemory(&Mac->FilterLevel,
                   ETHERNET_ADDRESS_TYPE_COUNT * sizeof (XENVIF_MAC_FILTER_LEVEL));
@@ -570,50 +740,105 @@ MacQueryMaximumFrameSize(
 }
 
 NTSTATUS
-MacSetMulticastAddresses(
-    IN  PXENVIF_MAC         Mac,
-    IN  ETHERNET_ADDRESS    Address[],
-    IN  ULONG               Count
+MacAddMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    IN      PETHERNET_ADDRESS   Address
     )
 {
-    KIRQL                   Irql;
-    PETHERNET_ADDRESS       MulticastAddress;
-    ULONG                   Index;
-    NTSTATUS                status;
+    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_MAC_MULTICAST       Multicast;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
+
+    Frontend = Mac->Frontend;
+
+    ASSERT(Address->Byte[0] & 0x01);
+
+    Multicast = __MacAllocate(sizeof (XENVIF_MAC_MULTICAST));
+
+    status = STATUS_NO_MEMORY;
+    if (Multicast == NULL)
+        goto fail1;
+
+    Multicast->Address = *Address;
 
     KeAcquireSpinLock(&Mac->Lock, &Irql);
+    InsertTailList(&Mac->MulticastList, &Multicast->ListEntry);
+    Mac->MulticastCount++;
+    KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    status = STATUS_INVALID_PARAMETER;
-    for (Index = 0; Index < Count; Index++) {
-        if (!(Address[Index].Byte[0] & 0x01))
-            goto fail1;
-    }
+    (VOID) MacDumpMulticastList(Mac);
 
-    if (Count != 0) {
-        MulticastAddress = __MacAllocate(sizeof (ETHERNET_ADDRESS) * Count);
+    Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+          FrontendGetPrefix(Frontend),
+          Address->Byte[0],
+          Address->Byte[1],
+          Address->Byte[2],
+          Address->Byte[3],
+          Address->Byte[4],
+          Address->Byte[5]);
 
-        status = STATUS_NO_MEMORY;
-        if (MulticastAddress == NULL)
-            goto fail2;
+    return STATUS_SUCCESS;
 
-        for (Index = 0; Index < Count; Index++)
-            MulticastAddress[Index] = Address[Index];
-    } else {
-        MulticastAddress = NULL;
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+NTSTATUS
+MacRemoveMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    IN      PETHERNET_ADDRESS   Address
+    )
+{
+    PXENVIF_FRONTEND            Frontend;
+    PLIST_ENTRY                 ListEntry;
+    PXENVIF_MAC_MULTICAST       Multicast;
+    KIRQL                       Irql;
+    NTSTATUS                    status;
+
+    Frontend = Mac->Frontend;
+
+    KeAcquireSpinLock(&Mac->Lock, &Irql);
+
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
+
+        if (RtlEqualMemory(&Multicast->Address,
+                           Address,
+                           ETHERNET_ADDRESS_LENGTH))
+            goto found;
     }
 
-    if (Mac->MulticastAddressCount != 0)
-        __MacFree(Mac->MulticastAddress);
+    status = STATUS_OBJECT_NAME_NOT_FOUND;
+    goto fail1;
+
+found:
+    ASSERT(Mac->MulticastCount != 0);
+    --Mac->MulticastCount;
 
-    Mac->MulticastAddress = MulticastAddress;
-    Mac->MulticastAddressCount = Count;
+    RemoveEntryList(&Multicast->ListEntry);
+    __MacFree(Multicast);
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
-    return STATUS_SUCCESS;
+    (VOID) MacDumpMulticastList(Mac);
 
-fail2:
-    Error("fail2\n");
+    Trace("%s: %02X:%02X:%02X:%02X:%02X:%02X\n",
+          FrontendGetPrefix(Frontend),
+          Address->Byte[0],
+          Address->Byte[1],
+          Address->Byte[2],
+          Address->Byte[3],
+          Address->Byte[4],
+          Address->Byte[5]);
+
+    return STATUS_SUCCESS;
 
 fail1:
     Error("fail1 (%08x)\n", status);
@@ -626,31 +851,40 @@ fail1:
 NTSTATUS
 MacQueryMulticastAddresses(
     IN      PXENVIF_MAC         Mac,
-    IN      PETHERNET_ADDRESS   Address,
+    IN      PETHERNET_ADDRESS   Address OPTIONAL,
     IN OUT  PULONG              Count
     )
 {
+    PLIST_ENTRY                 ListEntry;
     KIRQL                       Irql;
-    ULONG                       Index;
     NTSTATUS                    status;
 
     KeAcquireSpinLock(&Mac->Lock, &Irql);
 
     status = STATUS_BUFFER_OVERFLOW;
-    if (*Count < Mac->MulticastAddressCount)
+    if (Address == NULL || *Count < Mac->MulticastCount)
         goto fail1;
 
-    for (Index = 0; Index < Mac->MulticastAddressCount; Index++)
-        Address[Index] = Mac->MulticastAddress[Index];
+    *Count = 0;
+    for (ListEntry = Mac->MulticastList.Flink;
+         ListEntry != &Mac->MulticastList;
+         ListEntry = ListEntry->Flink) {
+        PXENVIF_MAC_MULTICAST   Multicast;
+
+        Multicast = CONTAINING_RECORD(ListEntry,
+                                      XENVIF_MAC_MULTICAST,
+                                      ListEntry);
 
-    *Count = Mac->MulticastAddressCount;
+        Address[(*Count)++] = Multicast->Address;
+    }
+    ASSERT3U(*Count, ==, Mac->MulticastCount);
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
     return STATUS_SUCCESS;
 
 fail1:
-    *Count = Mac->MulticastAddressCount;
+    *Count = Mac->MulticastCount;
 
     KeReleaseSpinLock(&Mac->Lock, Irql);
 
@@ -770,17 +1004,32 @@ MacApplyFilters(
             break;
 
         case XENVIF_MAC_FILTER_MATCHING: {
-            ULONG Index;
+            PLIST_ENTRY ListEntry;
+
+            if (Mac->MulticastControl) {
+                Allow = TRUE;
+                break;
+            }
 
-            for (Index = 0; Index < Mac->MulticastAddressCount; Index++) {
-                if (RtlEqualMemory(&Mac->MulticastAddress[Index],
+            for (ListEntry = Mac->MulticastList.Flink;
+                 ListEntry != &Mac->MulticastList;
+                 ListEntry = ListEntry->Flink) {
+                PXENVIF_MAC_MULTICAST   Multicast;
+
+                Multicast = CONTAINING_RECORD(ListEntry,
+                                              XENVIF_MAC_MULTICAST,
+                                              ListEntry);
+
+                if (RtlEqualMemory(&Multicast->Address,
                                    DestinationAddress,
-                                   ETHERNET_ADDRESS_LENGTH))
+                                   ETHERNET_ADDRESS_LENGTH)) {
                     Allow = TRUE;
+                    break;
+                }
             }
+
             break;
         }
-
         case XENVIF_MAC_FILTER_ALL:
             Allow = TRUE;
             break;
diff --git a/src/xenvif/mac.h b/src/xenvif/mac.h
index d39c523..83ce5b8 100644
--- a/src/xenvif/mac.h
+++ b/src/xenvif/mac.h
@@ -96,17 +96,22 @@ MacQueryBroadcastAddress(
     );
 
 extern NTSTATUS
-MacQueryMulticastAddresses(
+MacAddMulticastAddress(
     IN      PXENVIF_MAC         Mac,
-    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
-    IN OUT  PULONG              Count
+    OUT     PETHERNET_ADDRESS   Address
     );
 
 extern NTSTATUS
-MacSetMulticastAddresses(
-    IN  PXENVIF_MAC         Mac,
-    IN  PETHERNET_ADDRESS   Address OPTIONAL,
-    IN  ULONG               Count
+MacRemoveMulticastAddress(
+    IN      PXENVIF_MAC         Mac,
+    OUT     PETHERNET_ADDRESS   Address
+    );
+
+extern NTSTATUS
+MacQueryMulticastAddresses(
+    IN      PXENVIF_MAC         Mac,
+    OUT     PETHERNET_ADDRESS   Address OPTIONAL,
+    IN OUT  PULONG              Count
     );
 
 extern NTSTATUS
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 4cf21db..2d8f613 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -10,7 +10,7 @@
  *     following disclaimer.
  * *   Redistributions in binary form must reproduce the above 
  *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
+ *     following disclaimer in the documetation and/or other
  *     materials provided with the distribution.
  * 
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
@@ -64,16 +64,64 @@
 
 #define MAXNAMELEN  128
 
+typedef struct _XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS {
+    IPV4_ADDRESS    Address;
+} XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS;
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS {
+    IPV6_ADDRESS    Address;
+} XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS;
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS {
+    ETHERNET_ADDRESS    Address;
+    BOOLEAN             Add;
+} XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS, *PXENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS;
+
+typedef enum _XENVIF_TRANSMITTER_REQUEST_TYPE {
+    XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID = 0,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_ARP,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT,
+    XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL
+} XENVIF_TRANSMITTER_REQUEST_TYPE, *PXENVIF_TRANSMITTER_REQUEST_TYPE;
+
+#pragma warning(push)
+#pragma warning(disable:4201)   // nonstandard extension used : nameless struct/union
+
+typedef struct _XENVIF_TRANSMITTER_REQUEST {
+    LIST_ENTRY                      ListEntry;
+    XENVIF_TRANSMITTER_REQUEST_TYPE Type;
+    union {
+        XENVIF_TRANSMITTER_REQUEST_ARP_PARAMETERS                       Arp;
+        XENVIF_TRANSMITTER_REQUEST_NEIGHBOUR_ADVERTISEMENT_PARAMETERS   NeighbourAdvertisement;
+        XENVIF_TRANSMITTER_REQUEST_MULTICAST_CONTROL_PARAMETERS         MulticastControl;
+    };
+} XENVIF_TRANSMITTER_REQUEST, *PXENVIF_TRANSMITTER_REQUEST;
+
+#pragma warning(pop)
+
 typedef struct _XENVIF_TRANSMITTER_BUFFER {
     PMDL        Mdl;
     PVOID       Context;
     ULONG       Reference;
 } XENVIF_TRANSMITTER_BUFFER, *PXENVIF_TRANSMITTER_BUFFER;
 
+typedef enum _XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE {
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_INVALID = 0,
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD,
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE
+} XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE, *PXENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE;
+
+typedef struct _XENVIF_TRANSMITTER_MULTICAST_CONTROL {
+    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE   Type;
+    ETHERNET_ADDRESS                            Address;
+    ULONG                                       Reference;
+} XENVIF_TRANSMITTER_MULTICAST_CONTROL, *PXENVIF_TRANSMITTER_MULTICAST_CONTROL;
+
 typedef enum _XENVIF_TRANSMITTER_FRAGMENT_TYPE {
     XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID = 0,
     XENVIF_TRANSMITTER_FRAGMENT_TYPE_PACKET,
-    XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER
+    XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER,
+    XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL
 } XENVIF_TRANSMITTER_FRAGMENT_TYPE, *PXENVIF_TRANSMITTER_FRAGMENT_TYPE;
 
 typedef struct _XENVIF_TRANSMITTER_FRAGMENT {
@@ -106,9 +154,11 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     ULONG                           Index;
     PCHAR                           Path;
     PXENBUS_CACHE                   BufferCache;
+    PXENBUS_CACHE                   MulticastControlCache;
     PXENBUS_CACHE                   FragmentCache;
     PXENBUS_GNTTAB_CACHE            GnttabCache;
     PXENBUS_RANGE_SET               RangeSet;
+    PXENBUS_CACHE                   RequestCache;
     PMDL                            Mdl;
     netif_tx_front_ring_t           Front;
     netif_tx_sring_t                *Shared;
@@ -122,7 +172,8 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     BOOLEAN                         Stopped;
     PVOID                           Lock;
     PKTHREAD                        LockThread;
-    LIST_ENTRY                      Queued;
+    LIST_ENTRY                      PacketQueue;
+    LIST_ENTRY                      RequestQueue;
     XENVIF_TRANSMITTER_STATE        State;
     ULONG                           PacketsQueued;
     ULONG                           PacketsGranted;
@@ -135,11 +186,8 @@ typedef struct _XENVIF_TRANSMITTER_RING {
     ULONG                           RequestsPushed;
     ULONG                           ResponsesProcessed;
     ULONG                           PacketsSent;
-    LIST_ENTRY                      Completed;
+    LIST_ENTRY                      PacketComplete;
     ULONG                           PacketsCompleted;
-    PSOCKADDR_INET                  AddressTable;
-    ULONG                           AddressCount;
-    ULONG                           AddressIndex;
     PXENBUS_DEBUG_CALLBACK          DebugCallback;
     PXENVIF_THREAD                  WatchdogThread;
 } XENVIF_TRANSMITTER_RING, *PXENVIF_TRANSMITTER_RING;
@@ -155,6 +203,7 @@ struct _XENVIF_TRANSMITTER {
     LONG                        NumQueues;
     LONG_PTR                    Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT];
     BOOLEAN                     Split;
+    BOOLEAN                     MulticastControl;
     ULONG                       DisableIpVersion4Gso;
     ULONG                       DisableIpVersion6Gso;
     ULONG                       AlwaysCopy;
@@ -196,7 +245,7 @@ TransmitterPacketAcquireLock(
 
 static VOID
 TransmitterPacketReleaseLock(
-    IN  PVOID                       Argument
+    IN  PVOID           Argument
     )
 {
     PXENVIF_TRANSMITTER Transmitter = Argument;
@@ -207,8 +256,8 @@ TransmitterPacketReleaseLock(
 
 static NTSTATUS
 TransmitterPacketCtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    IN  PVOID   Argument,
+    IN  PVOID   Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -219,8 +268,8 @@ TransmitterPacketCtor(
 
 static VOID
 TransmitterPacketDtor(
-    IN  PVOID                       Argument,
-    IN  PVOID                       Object
+    IN  PVOID   Argument,
+    IN  PVOID   Object
     )
 {
     UNREFERENCED_PARAMETER(Argument);
@@ -360,6 +409,69 @@ __TransmitterPutBuffer(
 }
 
 static NTSTATUS
+TransmitterMulticastControlCtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+
+    return STATUS_SUCCESS;
+}
+
+static VOID
+TransmitterMulticastControlDtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+}
+
+static FORCEINLINE PXENVIF_TRANSMITTER_MULTICAST_CONTROL
+__TransmitterGetMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING            Ring
+    )
+{
+    PXENVIF_TRANSMITTER                     Transmitter;
+    PXENVIF_FRONTEND                        Frontend;
+    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    Control = XENBUS_CACHE(Get,
+                           &Transmitter->CacheInterface,
+                           Ring->MulticastControlCache,
+                           TRUE);
+
+    return Control;
+}
+
+static FORCEINLINE VOID
+__TransmitterPutMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING                Ring,
+    IN  PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control
+    )
+{
+    PXENVIF_TRANSMITTER                         Transmitter;
+    PXENVIF_FRONTEND                            Frontend;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    ASSERT3U(Control->Reference, ==, 0);
+
+    XENBUS_CACHE(Put,
+                 &Transmitter->CacheInterface,
+                 Ring->MulticastControlCache,
+                 Control,
+                 TRUE);
+}
+
+static NTSTATUS
 TransmitterFragmentCtor(
     IN  PVOID                       Argument,
     IN  PVOID                       Object
@@ -457,6 +569,7 @@ __TransmitterPutFragment(
     ASSERT3U(Fragment->Offset, ==, 0);
     ASSERT3U(Fragment->Type, ==, XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID);
     ASSERT3P(Fragment->Context, ==, NULL);
+    ASSERT3P(Fragment->Entry, ==, NULL);
     ASSERT(!Fragment->Extra);
 
     XENBUS_CACHE(Put,
@@ -466,6 +579,65 @@ __TransmitterPutFragment(
                  TRUE);
 }
 
+static NTSTATUS
+TransmitterRequestCtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+
+    return STATUS_SUCCESS;
+}
+
+static VOID
+TransmitterRequestDtor(
+    IN  PVOID   Argument,
+    IN  PVOID   Object
+    )
+{
+    UNREFERENCED_PARAMETER(Argument);
+    UNREFERENCED_PARAMETER(Object);
+}
+
+static FORCEINLINE PXENVIF_TRANSMITTER_REQUEST
+__TransmitterGetRequest(
+    IN  PXENVIF_TRANSMITTER_RING    Ring
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+
+    Transmitter = Ring->Transmitter;
+
+    Request = XENBUS_CACHE(Get,
+                           &Transmitter->CacheInterface,
+                           Ring->RequestCache,
+                           TRUE);
+
+    return Request;
+}
+
+static FORCEINLINE VOID
+__TransmitterPutRequest(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PXENVIF_TRANSMITTER_REQUEST Request
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+
+    Transmitter = Ring->Transmitter;
+
+    ASSERT3U(Request->Type, ==, XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID);
+
+    XENBUS_CACHE(Put,
+                 &Transmitter->CacheInterface,
+                 Ring->RequestCache,
+                 Request,
+                 TRUE);
+}
+
 static VOID
 TransmitterRingDebugCallback(
     IN  PVOID                   Argument,
@@ -1188,7 +1360,7 @@ fail1:
     return status;
 }
 
-static FORCEINLINE VOID
+static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
 __TransmitterRingUnprepareFragments(
     IN  PXENVIF_TRANSMITTER_RING    Ring
     )
@@ -1196,18 +1368,20 @@ __TransmitterRingUnprepareFragments(
     PXENVIF_TRANSMITTER             Transmitter;
     PXENVIF_FRONTEND                Frontend;
     PXENVIF_TRANSMITTER_STATE       State;
+    ULONG                           Count;
+    PXENVIF_TRANSMITTER_PACKET      Packet;
 
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
 
     State = &Ring->State;
+    Count = State->Count;
 
-    while (State->Count != 0) {
+    while (Count != 0) {
         PLIST_ENTRY                     ListEntry;
         PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
-        PXENVIF_TRANSMITTER_PACKET      Packet;
 
-        --State->Count;
+        --Count;
 
         ListEntry = RemoveTailList(&State->List);
         ASSERT3P(ListEntry, !=, &State->List);
@@ -1238,8 +1412,8 @@ __TransmitterRingUnprepareFragments(
             Buffer->Context = NULL;
 
             ASSERT(Buffer->Reference != 0);
-            if (--Buffer->Reference == 0)
-                __TransmitterPutBuffer(Ring, Buffer);
+            --Buffer->Reference;
+            __TransmitterPutBuffer(Ring, Buffer);
 
             break;
         }
@@ -1250,16 +1424,64 @@ __TransmitterRingUnprepareFragments(
 
             break;
 
-        default:
+        case XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL: {
+            PXENVIF_TRANSMITTER_MULTICAST_CONTROL Control;
+
+            Control = Fragment->Context;
+            Fragment->Context = NULL;
+            Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID;
+
+            switch (Control->Type) {
+            case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD:
+            case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE:
+                break;
+            default:
+                ASSERT(FALSE);
+                break;
+            }
+
+            ASSERT(Control->Reference != 0);
+            --Control->Reference;
+            __TransmitterPutMulticastControl(Ring, Control);
+
             Packet = NULL;
+            break;
+            }
+        default:
             ASSERT(FALSE);
+            Packet = NULL;
+            break;
         }
 
-        __TransmitterPutFragment(Ring, Fragment);
-
         if (Packet != NULL)
             Packet->Value--;
+
+        __TransmitterPutFragment(Ring, Fragment);
+    }
+
+    if (State->Count != 0) {
+        ASSERT(IsListEmpty(&State->List));
+        RtlZeroMemory(&State->List, sizeof (LIST_ENTRY));
+
+        State->Count = 0;
+    }
+
+    Packet = State->Packet;
+
+    if (Packet != NULL) {
+        Ring->PacketsUnprepared++;
+
+        RtlZeroMemory(&State->Payload, sizeof (XENVIF_PACKET_PAYLOAD));
+
+        Packet->Send = State->Send;
+        RtlZeroMemory(&State->Send, sizeof (XENVIF_TRANSMITTER_PACKET_SEND_INFO));
+
+        State->Packet = NULL;
     }
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    return Packet;
 }
 
 static FORCEINLINE NTSTATUS
@@ -1395,44 +1617,6 @@ fail1:
     return status;
 }
 
-static FORCEINLINE PXENVIF_TRANSMITTER_PACKET
-__TransmitterRingUnpreparePacket(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
-    )
-{
-    PXENVIF_TRANSMITTER_STATE       State;
-    PXENVIF_TRANSMITTER_PACKET      Packet;
-
-    State = &Ring->State;
-    Packet = State->Packet;
-
-    // This has the side effect of freeing up resources associated with a pending
-    // gratuitous ARP, which is why the call is not conditional on Packet being
-    // non-NULL
-    __TransmitterRingUnprepareFragments(Ring);
-    RtlZeroMemory(&State->Info, sizeof (XENVIF_PACKET_INFO));
-
-    if (Packet == NULL)
-        goto done;
-
-    Ring->PacketsUnprepared++;
-
-    ASSERT(IsListEmpty(&State->List));
-    RtlZeroMemory(&State->List, sizeof (LIST_ENTRY));
-
-    RtlZeroMemory(&State->Payload, sizeof (XENVIF_PACKET_PAYLOAD));
-
-    Packet->Send = State->Send;
-    RtlZeroMemory(&State->Send, sizeof (XENVIF_TRANSMITTER_PACKET_SEND_INFO));
-
-    State->Packet = NULL;
-
-    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
-
-done:
-    return Packet;
-}
-
 static FORCEINLINE NTSTATUS
 __TransmitterRingPrepareArp(
     IN  PXENVIF_TRANSMITTER_RING    Ring,
@@ -1458,12 +1642,6 @@ __TransmitterRingPrepareArp(
 
     ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
 
-    Info("%u.%u.%u.%u\n",
-         Address->Byte[0],
-         Address->Byte[1],
-         Address->Byte[2],
-         Address->Byte[3]);
-
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
     Mac = FrontendGetMac(Frontend);
@@ -1606,16 +1784,6 @@ __TransmitterRingPrepareNeighbourAdvertisement(
 
     ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
 
-    Info("%04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
-         HTONS(Address->Word[0]),
-         HTONS(Address->Word[1]),
-         HTONS(Address->Word[2]),
-         HTONS(Address->Word[3]),
-         HTONS(Address->Word[4]),
-         HTONS(Address->Word[5]),
-         HTONS(Address->Word[6]),
-         HTONS(Address->Word[7]));
-
     Transmitter = Ring->Transmitter;
     Frontend = Transmitter->Frontend;
     Mac = FrontendGetMac(Frontend);
@@ -1758,13 +1926,71 @@ fail1:
 }
 
 static FORCEINLINE NTSTATUS
-__TransmitterRingPostFragments(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
+__TransmitterRingPrepareMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING            Ring,
+    IN  PETHERNET_ADDRESS                   Address,
+    IN  BOOLEAN                             Add
     )
 {
+    PXENVIF_TRANSMITTER_STATE               State;
+    PXENVIF_TRANSMITTER_FRAGMENT            Fragment;
+    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+    NTSTATUS                                status;
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    State = &Ring->State;
+
+    Control = __TransmitterGetMulticastControl(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Control == NULL)
+        goto fail1;
+
+    Control->Type = (Add) ?
+                    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD :
+                    XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE;
+    Control->Address = *Address;
+
+    Fragment = __TransmitterGetFragment(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Fragment == NULL)
+        goto fail2;
+
+    Fragment->Context = Control;
+    Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL;
+    Control->Reference++;
+
+    InitializeListHead(&State->List);
+
+    ASSERT(IsZeroMemory(&Fragment->ListEntry, sizeof (LIST_ENTRY)));
+    InsertTailList(&State->List, &Fragment->ListEntry);
+    State->Count++;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+    __TransmitterPutMulticastControl(Ring, Control);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    ASSERT(IsZeroMemory(&Ring->State, sizeof (XENVIF_TRANSMITTER_STATE)));
+
+    return status;
+}
+
 #define RING_SLOTS_AVAILABLE(_Front, _req_prod, _rsp_cons)   \
         (RING_SIZE(_Front) - ((_req_prod) - (_rsp_cons)))
 
+static FORCEINLINE NTSTATUS
+__TransmitterRingPostFragments(
+    IN  PXENVIF_TRANSMITTER_RING    Ring
+    )
+{
     PXENVIF_TRANSMITTER             Transmitter;
     PXENVIF_FRONTEND                Frontend;
     PXENVIF_TRANSMITTER_STATE       State;
@@ -1775,6 +2001,8 @@ __TransmitterRingPostFragments(
     ULONG                           Extra;
     ULONG                           PacketLength;
     BOOLEAN                         FirstRequest;
+    PLIST_ENTRY                     ListEntry;
+    PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
     netif_tx_request_t              *req;
     NTSTATUS                        status;
 
@@ -1793,8 +2021,14 @@ __TransmitterRingPostFragments(
     req_prod = Ring->Front.req_prod_pvt;
     rsp_cons = Ring->Front.rsp_cons;
 
+    ListEntry = State->List.Flink;
+    Fragment = CONTAINING_RECORD(ListEntry,
+                                 XENVIF_TRANSMITTER_FRAGMENT,
+                                 ListEntry);
+
     Extra = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
-             State->Send.OffloadOptions.OffloadIpVersion6LargePacket) ?
+             State->Send.OffloadOptions.OffloadIpVersion6LargePacket ||
+             Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL) ?
             1 :
             0;
 
@@ -1809,9 +2043,6 @@ __TransmitterRingPostFragments(
     FirstRequest = TRUE;
     PacketLength = 0;
     while (State->Count != 0) {
-        PLIST_ENTRY                     ListEntry;
-        PXENVIF_TRANSMITTER_FRAGMENT    Fragment;
-
         --State->Count;
 
         ListEntry = RemoveHeadList(&State->List);
@@ -1819,16 +2050,20 @@ __TransmitterRingPostFragments(
 
         RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-        Fragment = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_FRAGMENT, ListEntry);
+        Fragment = CONTAINING_RECORD(ListEntry,
+                                     XENVIF_TRANSMITTER_FRAGMENT,
+                                     ListEntry);
 
         req = RING_GET_REQUEST(&Ring->Front, req_prod);
         req_prod++;
         Ring->RequestsPosted++;
 
         req->id = Fragment->Id;
-        req->gref = XENBUS_GNTTAB(GetReference,
+        req->gref = (Fragment->Entry != NULL) ?
+                    XENBUS_GNTTAB(GetReference,
                                   &Transmitter->GnttabInterface,
-                                  Fragment->Entry);
+                                  Fragment->Entry) :
+                    0;
         req->offset = (USHORT)Fragment->Offset;
         req->size = (USHORT)Fragment->Length;
         req->flags = NETTXF_more_data;
@@ -1843,37 +2078,49 @@ __TransmitterRingPostFragments(
                 req->flags |= NETTXF_csum_blank | NETTXF_data_validated;
 
             if (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
-                State->Send.OffloadOptions.OffloadIpVersion6LargePacket) {
-                uint8_t                 type;
-                uint16_t                size;
+                State->Send.OffloadOptions.OffloadIpVersion6LargePacket ||
+                Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL) {
                 struct netif_extra_info *extra;
 
                 ASSERT(Extra != 0);
                 Fragment->Extra = TRUE;
 
-                ASSERT(!(State->Send.OffloadOptions.OffloadIpVersion4LargePacket &&
-                         State->Send.OffloadOptions.OffloadIpVersion6LargePacket));
-                type = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket) ?
-                       XEN_NETIF_GSO_TYPE_TCPV4 :
-                       XEN_NETIF_GSO_TYPE_TCPV6;
-
-                ASSERT(State->Send.MaximumSegmentSize != 0);
-                size = State->Send.MaximumSegmentSize;
-
-                ASSERT(req->flags & (NETTXF_csum_blank | NETTXF_data_validated));
-                req->flags |= NETTXF_extra_info;
-
                 extra = (struct netif_extra_info *)RING_GET_REQUEST(&Ring->Front, req_prod);
                 req_prod++;
                 Ring->RequestsPosted++;
 
-                extra->type = XEN_NETIF_EXTRA_TYPE_GSO;
-                extra->flags = 0;
+                if (State->Send.OffloadOptions.OffloadIpVersion4LargePacket ||
+                    State->Send.OffloadOptions.OffloadIpVersion6LargePacket) {
+                    ASSERT(State->Send.MaximumSegmentSize != 0);
+
+                    extra->type = XEN_NETIF_EXTRA_TYPE_GSO;
+                    extra->flags = 0;
+
+                    extra->u.gso.type = (State->Send.OffloadOptions.OffloadIpVersion4LargePacket) ?
+                                        XEN_NETIF_GSO_TYPE_TCPV4 :
+                                        XEN_NETIF_GSO_TYPE_TCPV6;;
+                    extra->u.gso.size = State->Send.MaximumSegmentSize;
+                    extra->u.gso.pad = 0;
+                    extra->u.gso.features = 0;
+
+                    ASSERT(req->flags & (NETTXF_csum_blank | NETTXF_data_validated));
+                } else {
+                    PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+                    ASSERT(Fragment->Type == XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL);
+                    Control = Fragment->Context;
+
+                    extra->type = (Control->Type == XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD) ?
+                        XEN_NETIF_EXTRA_TYPE_MCAST_ADD :
+                        XEN_NETIF_EXTRA_TYPE_MCAST_DEL;
+                    extra->flags = 0;
 
-                extra->u.gso.size = size;
-                extra->u.gso.type = type;
-                extra->u.gso.pad = 0;
-                extra->u.gso.features = 0;
+                    RtlCopyMemory(&extra->u.mcast.addr,
+                                  &Control->Address.Byte[0],
+                                  ETHERNET_ADDRESS_LENGTH);
+                }
+
+                req->flags |= NETTXF_extra_info;
             }
 
             // The first fragment length is the length of the entire packet
@@ -1886,7 +2133,6 @@ __TransmitterRingPostFragments(
         Ring->Pending[req->id] = Fragment;
     }
     ASSERT(!FirstRequest);
-    ASSERT(PacketLength != 0);
 
     ASSERT(req != NULL);
     req->flags &= ~NETTXF_more_data;
@@ -1902,6 +2148,8 @@ __TransmitterRingPostFragments(
         PXENVIF_PACKET_INFO Info;
         PETHERNET_HEADER    Header;
 
+        ASSERT(PacketLength != 0);
+
         StartVa = State->StartVa;
         Info = &State->Info;
 
@@ -1930,9 +2178,9 @@ __TransmitterRingPostFragments(
 
 fail1:
     return status;
+}
 
 #undef  RING_SLOTS_AVAILABLE
-}
 
 static FORCEINLINE VOID
 __TransmitterRingFakeResponses(
@@ -1989,8 +2237,16 @@ __TransmitterRingFakeResponses(
 
     ASSERT3U(Ring->Shared->rsp_prod, ==, Ring->Front.req_prod_pvt);
 
-    if (Count != 0)
-        Info("Faked %lu responses\n", Count);
+    if (Count != 0) {
+        PXENVIF_TRANSMITTER Transmitter;
+        PXENVIF_FRONTEND    Frontend;
+
+        Transmitter = Ring->Transmitter;
+        Frontend = Transmitter->Frontend;
+
+        Info("%s: faked %lu responses\n",
+             FrontendGetPath(Frontend), Count);
+    }
 }
 
 static FORCEINLINE VOID
@@ -2055,7 +2311,7 @@ __TransmitterRingCompletePacket(
         }
     }
 
-    InsertTailList(&Ring->Completed, &Packet->ListEntry);
+    InsertTailList(&Ring->PacketComplete, &Packet->ListEntry);
     Ring->PacketsCompleted++;
 }
 
@@ -2123,8 +2379,8 @@ TransmitterRingPoll(
                 Buffer->Context = NULL;
 
                 ASSERT(Buffer->Reference != 0);
-                if (--Buffer->Reference == 0)
-                    __TransmitterPutBuffer(Ring, Buffer);
+                --Buffer->Reference;
+                __TransmitterPutBuffer(Ring, Buffer);
 
                 break;
             }
@@ -2135,20 +2391,46 @@ TransmitterRingPoll(
 
                 break;
 
-            default:
-                Packet = NULL;
-                ASSERT(FALSE);
+            case XENVIF_TRANSMITTER_FRAGMENT_TYPE_MULTICAST_CONTROL: {
+                PXENVIF_TRANSMITTER_MULTICAST_CONTROL   Control;
+
+                Control = Fragment->Context;
+                Fragment->Context = NULL;
+                Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_INVALID;
+
+                switch (Control->Type) {
+                case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_ADD:
+                case XENVIF_TRANSMITTER_MULTICAST_CONTROL_TYPE_REMOVE:
+                    break;
+                default:
+                    ASSERT(FALSE);
+                    break;
+                }
+
+                ASSERT(Control->Reference != 0);
+                --Control->Reference;
+                __TransmitterPutMulticastControl(Ring, Control);
+
+                Packet = NULL;
+                break;
+            }
+            default:
+                ASSERT(FALSE);
+                Packet = NULL;
+                break;
             }
 
             Fragment->Length = 0;
             Fragment->Offset = 0;
 
-            (VOID) XENBUS_GNTTAB(RevokeForeignAccess,
-                                 &Transmitter->GnttabInterface,
-                                 Ring->GnttabCache,
-                                 TRUE,
-                                 Fragment->Entry);
-            Fragment->Entry = NULL;
+            if (Fragment->Entry != NULL) {
+                (VOID) XENBUS_GNTTAB(RevokeForeignAccess,
+                                     &Transmitter->GnttabInterface,
+                                     Ring->GnttabCache,
+                                     TRUE,
+                                     Fragment->Entry);
+                Fragment->Entry = NULL;
+            }
 
             Fragment->Extra = FALSE;
             __TransmitterPutFragment(Ring, Fragment);
@@ -2331,7 +2613,8 @@ TransmitterRingSwizzle(
     ListEntry = List.Flink;
     if (!IsListEmpty(&List)) {
         RemoveEntryList(&List);
-        AppendTailList(&Ring->Queued, ListEntry);
+        InitializeListHead(&List);
+        AppendTailList(&Ring->PacketQueue, ListEntry);
         Ring->PacketsQueued += Count;
     }
 }
@@ -2349,9 +2632,7 @@ TransmitterRingSchedule(
     State = &Ring->State;
 
     for (;;) {
-        PLIST_ENTRY                 ListEntry;
-        PXENVIF_TRANSMITTER_PACKET  Packet;
-        NTSTATUS                    status;
+        NTSTATUS    status;
 
         if (State->Count != 0) {
             status = __TransmitterRingPostFragments(Ring);
@@ -2367,72 +2648,85 @@ TransmitterRingSchedule(
 
         ASSERT3U(State->Count, ==, 0);
 
-        if (Ring->AddressIndex != 0) {
-            ULONG   Index = (--Ring->AddressIndex) % Ring->AddressCount;
-
-            switch (Ring->AddressTable[Index].si_family) {
-            case AF_INET: {
-                IPV4_ADDRESS    Address;
+        if (!IsListEmpty(&Ring->RequestQueue)) {
+            PLIST_ENTRY                 ListEntry;
+            PXENVIF_TRANSMITTER_REQUEST Request;
 
-                RtlCopyMemory(Address.Byte,
-                              &Ring->AddressTable[Index].Ipv4.sin_addr.s_addr,
-                              IPV4_ADDRESS_LENGTH);
+            ListEntry = RemoveHeadList(&Ring->RequestQueue);
+            RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-                (VOID) __TransmitterRingPrepareArp(Ring, &Address);
+            Request = CONTAINING_RECORD(ListEntry,
+                                        XENVIF_TRANSMITTER_REQUEST,
+                                        ListEntry);
 
+            switch (Request->Type) {
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_ARP:
+                (VOID) __TransmitterRingPrepareArp(Ring,
+                                                   &Request->Arp.Address);
                 break;
-            }
-            case AF_INET6: {
-                IPV6_ADDRESS    Address;
-
-                RtlCopyMemory(Address.Byte,
-                              &Ring->AddressTable[Index].Ipv6.sin6_addr.s6_addr,
-                              IPV6_ADDRESS_LENGTH);
 
-                (VOID) __TransmitterRingPrepareNeighbourAdvertisement(Ring, &Address);
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT:
+                (VOID) __TransmitterRingPrepareNeighbourAdvertisement(Ring,
+                                                                      &Request->NeighbourAdvertisement.Address);
+                break;
 
+            case XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL:
+                (VOID) __TransmitterRingPrepareMulticastControl(Ring,
+                                                                &Request->MulticastControl.Address,
+                                                                Request->MulticastControl.Add);
                 break;
-            }
+
             default:
-                ASSERT(FALSE);
+                break;
             }
 
+            Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID;
+            __TransmitterPutRequest(Ring, Request);
             continue;
         }
 
-        ListEntry = RemoveHeadList(&Ring->Queued);
-        if (ListEntry == &Ring->Queued)
-            break;
+        if (!IsListEmpty(&Ring->PacketQueue)) {
+            PLIST_ENTRY                 ListEntry;
+            PXENVIF_TRANSMITTER_PACKET  Packet;
 
-        Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
-        Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
-        Packet->Value = 0;
+            ListEntry = RemoveHeadList(&Ring->PacketQueue);
+            RtlZeroMemory(ListEntry, sizeof (LIST_ENTRY));
 
-        status = __TransmitterRingPreparePacket(Ring, Packet);
-        if (!NT_SUCCESS(status)) {
-            PXENVIF_TRANSMITTER Transmitter;
-            PXENVIF_FRONTEND    Frontend;
+            Packet = CONTAINING_RECORD(ListEntry,
+                                       XENVIF_TRANSMITTER_PACKET,
+                                       ListEntry);
 
-            Transmitter = Ring->Transmitter;
-            Frontend = Transmitter->Frontend;
+            Packet->Value = 0;
 
-            ASSERT(status != STATUS_BUFFER_OVERFLOW);
+            status = __TransmitterRingPreparePacket(Ring, Packet);
+            if (!NT_SUCCESS(status)) {
+                PXENVIF_TRANSMITTER Transmitter;
+                PXENVIF_FRONTEND    Frontend;
 
-            // Fake that we prapared and sent this packet
-            Ring->PacketsPrepared++;
-            Ring->PacketsSent++;
-            Ring->PacketsFaked++;
+                Transmitter = Ring->Transmitter;
+                Frontend = Transmitter->Frontend;
 
-            Packet->Completion.Status = XENVIF_TRANSMITTER_PACKET_DROPPED;
+                ASSERT(status != STATUS_BUFFER_OVERFLOW);
 
-            FrontendIncrementStatistic(Frontend,
-                                       XENVIF_TRANSMITTER_FRONTEND_ERRORS,
-                                       1);
+                // Fake that we prapared and sent this packet
+                Ring->PacketsPrepared++;
+                Ring->PacketsSent++;
+                Ring->PacketsFaked++;
 
-            __TransmitterRingCompletePacket(Ring, Packet);
+                Packet->Completion.Status = XENVIF_TRANSMITTER_PACKET_DROPPED;
+
+                FrontendIncrementStatistic(Frontend,
+                                           XENVIF_TRANSMITTER_FRONTEND_ERRORS,
+                                           1);
+
+                __TransmitterRingCompletePacket(Ring, Packet);
+            }
+
+            ASSERT3U(Ring->PacketsPrepared, ==, Ring->PacketsCopied + Ring->PacketsGranted + Ring->PacketsFaked);
+            continue;
         }
 
-        ASSERT3U(Ring->PacketsPrepared, ==, Ring->PacketsCopied + Ring->PacketsGranted + Ring->PacketsFaked);
+        break;
     }
 
     __TransmitterRingPushRequests(Ring);
@@ -2607,10 +2901,10 @@ __TransmitterRingReleaseLock(
         TransmitterRingSwizzle(Ring);
         TransmitterRingSchedule(Ring);
 
-        ListEntry = Ring->Completed.Flink;
-        if (!IsListEmpty(&Ring->Completed)) {
-            RemoveEntryList(&Ring->Completed);
-            InitializeListHead(&Ring->Completed);
+        ListEntry = Ring->PacketComplete.Flink;
+        if (!IsListEmpty(&Ring->PacketComplete)) {
+            RemoveEntryList(&Ring->PacketComplete);
+            InitializeListHead(&Ring->PacketComplete);
             AppendTailList(&List, ListEntry);
         }
     } while (!__TransmitterRingTryReleaseLock(Ring));
@@ -2787,62 +3081,6 @@ TransmitterRingWatchdog(
     return STATUS_SUCCESS;
 }
 
-static FORCEINLINE VOID
-__TransmitterRingUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER_RING    Ring,
-    IN  PSOCKADDR_INET              Table,
-    IN  ULONG                       Count
-    )
-{
-    NTSTATUS                        status;
-
-    __TransmitterRingAcquireLock(Ring);
-
-    if (Ring->AddressCount != 0) {
-        Ring->AddressCount = 0;
-
-        ASSERT(Ring->AddressTable != NULL);
-        __TransmitterFree(Ring->AddressTable);
-        Ring->AddressTable = NULL;
-    }
-
-    if (Count == 0)
-        goto done;
-
-    Ring->AddressTable = __TransmitterAllocate(sizeof (SOCKADDR_INET) * Count);
-
-    status = STATUS_NO_MEMORY;
-    if (Ring->AddressTable == NULL)
-        goto fail1;
-
-    RtlCopyMemory(Ring->AddressTable, Table, sizeof (SOCKADDR_INET) * Count);
-    Ring->AddressCount = Count;
-
-    // Re-advertize if we were part way through
-    if (Ring->AddressIndex != 0)
-        Ring->AddressIndex = Ring->AddressCount * 3;
-
-done:
-    __TransmitterRingReleaseLock(Ring);
-
-    return;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    __TransmitterRingReleaseLock(Ring);
-}
-
-static FORCEINLINE VOID
-__TransmitterRingAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER_RING    Ring
-    )
-{
-    __TransmitterRingAcquireLock(Ring);
-    Ring->AddressIndex = Ring->AddressCount * 3;
-    __TransmitterRingReleaseLock(Ring);
-}
-
 static FORCEINLINE NTSTATUS
 __TransmitterRingInitialize(
     IN  PXENVIF_TRANSMITTER         Transmitter,
@@ -2869,8 +3107,9 @@ __TransmitterRingInitialize(
     if ((*Ring)->Path == NULL)
         goto fail2;
 
-    InitializeListHead(&(*Ring)->Queued);
-    InitializeListHead(&(*Ring)->Completed);
+    InitializeListHead(&(*Ring)->PacketQueue);
+    InitializeListHead(&(*Ring)->RequestQueue);
+    InitializeListHead(&(*Ring)->PacketComplete);
 
     KeInitializeDpc(&(*Ring)->Dpc, TransmitterRingDpc, *Ring);
 
@@ -2901,7 +3140,7 @@ __TransmitterRingInitialize(
 
     status = RtlStringCbPrintfA(Name,
                                 sizeof (Name),
-                                "%s_transmitter_req_id",
+                                "%s_transmitter_multicast_control",
                                 (*Ring)->Path);
     if (!NT_SUCCESS(status))
         goto fail5;
@@ -2910,12 +3149,37 @@ __TransmitterRingInitialize(
         if (Name[Index] == '/')
             Name[Index] = '_';
 
+    status = XENBUS_CACHE(Create,
+                          &Transmitter->CacheInterface,
+                          Name,
+                          sizeof (XENVIF_TRANSMITTER_MULTICAST_CONTROL),
+                          0,
+                          TransmitterMulticastControlCtor,
+                          TransmitterMulticastControlDtor,
+                          TransmitterRingAcquireLock,
+                          TransmitterRingReleaseLock,
+                          *Ring,
+                          &(*Ring)->MulticastControlCache);
+    if (!NT_SUCCESS(status))
+        goto fail6;
+
+    status = RtlStringCbPrintfA(Name,
+                                sizeof (Name),
+                                "%s_transmitter_req_id",
+                                (*Ring)->Path);
+    if (!NT_SUCCESS(status))
+        goto fail7;
+
+    for (Index = 0; Name[Index] != '\0'; Index++)
+        if (Name[Index] == '/')
+            Name[Index] = '_';
+
     status = XENBUS_RANGE_SET(Create,
                               &Transmitter->RangeSetInterface,
                               Name,
                               &(*Ring)->RangeSet);
     if (!NT_SUCCESS(status))
-        goto fail6;
+        goto fail8;
 
     status = XENBUS_RANGE_SET(Put,
                               &Transmitter->RangeSetInterface,
@@ -2923,14 +3187,14 @@ __TransmitterRingInitialize(
                               1,
                               XENVIF_TRANSMITTER_MAXIMUM_FRAGMENT_ID);
     if (!NT_SUCCESS(status))
-        goto fail7;
+        goto fail9;
 
     status = RtlStringCbPrintfA(Name,
                                 sizeof (Name),
                                 "%s_transmitter_fragment",
                                 (*Ring)->Path);
     if (!NT_SUCCESS(status))
-        goto fail8;
+        goto fail10;
 
     for (Index = 0; Name[Index] != '\0'; Index++)
         if (Name[Index] == '/')
@@ -2948,29 +3212,65 @@ __TransmitterRingInitialize(
                           *Ring,
                           &(*Ring)->FragmentCache);
     if (!NT_SUCCESS(status))
-        goto fail9;
+        goto fail11;
+
+    status = RtlStringCbPrintfA(Name,
+                                sizeof (Name),
+                                "%s_transmitter_request",
+                                (*Ring)->Path);
+    if (!NT_SUCCESS(status))
+        goto fail12;
+
+    for (Index = 0; Name[Index] != '\0'; Index++)
+        if (Name[Index] == '/')
+            Name[Index] = '_';
+
+    status = XENBUS_CACHE(Create,
+                          &Transmitter->CacheInterface,
+                          Name,
+                          sizeof (XENVIF_TRANSMITTER_REQUEST),
+                          0,
+                          TransmitterRequestCtor,
+                          TransmitterRequestDtor,
+                          TransmitterRingAcquireLock,
+                          TransmitterRingReleaseLock,
+                          *Ring,
+                          &(*Ring)->RequestCache);
+    if (!NT_SUCCESS(status))
+        goto fail13;
 
     status = ThreadCreate(TransmitterRingWatchdog,
                           *Ring,
                           &(*Ring)->WatchdogThread);
     if (!NT_SUCCESS(status))
-        goto fail10;
+        goto fail14;
 
     return STATUS_SUCCESS;
 
-fail10:
-    Error("fail10\n");
+fail14:
+    Error("fail14\n");
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
+                 (*Ring)->RequestCache);
+    (*Ring)->RequestCache = NULL;
+
+fail13:
+    Error("fail13\n");
+
+fail12:
+    Error("fail12\n");
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
                  (*Ring)->FragmentCache);
     (*Ring)->FragmentCache = NULL;
 
-fail9:
-    Error("fail9\n");
+fail11:
+    Error("fail11\n");
 
-fail8:
-    Error("fail8\n");
+fail10:
+    Error("fail10\n");
 
     (VOID) XENBUS_RANGE_SET(Get,
                             &Transmitter->RangeSetInterface,
@@ -2978,14 +3278,25 @@ fail8:
                             1,
                             XENVIF_TRANSMITTER_MAXIMUM_FRAGMENT_ID);
 
-fail7:
-    Error("fail7\n");
+fail9:
+    Error("fail9\n");
 
     XENBUS_RANGE_SET(Destroy,
                      &Transmitter->RangeSetInterface,
                      (*Ring)->RangeSet);
     (*Ring)->RangeSet = NULL;
 
+fail8:
+    Error("fail8\n");
+
+fail7:
+    Error("fail7\n");
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
+                 (*Ring)->MulticastControlCache);
+    (*Ring)->MulticastControlCache = NULL;
+
 fail6:
     Error("fail6\n");
 
@@ -3005,8 +3316,9 @@ fail3:
 
     RtlZeroMemory(&(*Ring)->Dpc, sizeof (KDPC));
 
-    RtlZeroMemory(&(*Ring)->Queued, sizeof (LIST_ENTRY));
-    RtlZeroMemory(&(*Ring)->Completed, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->PacketComplete, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->RequestQueue, sizeof (LIST_ENTRY));
+    RtlZeroMemory(&(*Ring)->PacketQueue, sizeof (LIST_ENTRY));
 
     FrontendFreePath(Frontend, (*Ring)->Path);
     (*Ring)->Path = NULL;
@@ -3300,13 +3612,27 @@ __TransmitterRingDisable(
     Ring->Enabled = FALSE;
 
     // Release any fragments associated with a pending packet
-    Packet = __TransmitterRingUnpreparePacket(Ring);
+    Packet = __TransmitterRingUnprepareFragments(Ring);
 
     // Put any packet back on the head of the queue
     if (Packet != NULL)
-        InsertHeadList(&Ring->Queued, &Packet->ListEntry);
+        InsertHeadList(&Ring->PacketQueue, &Packet->ListEntry);
+
+    // Discard any pending requests
+    while (!IsListEmpty(&Ring->RequestQueue)) {
+        PLIST_ENTRY                 ListEntry;
+        PXENVIF_TRANSMITTER_REQUEST Request;
 
-    Ring->AddressIndex = 0;
+        ListEntry = RemoveHeadList(&Ring->RequestQueue);
+        ASSERT3P(ListEntry, !=, &Ring->RequestQueue);
+
+        Request = CONTAINING_RECORD(ListEntry,
+                                    XENVIF_TRANSMITTER_REQUEST,
+                                    ListEntry);
+
+        Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_INVALID;
+        __TransmitterPutRequest(Ring, Request);
+    }
 
     status = XENBUS_STORE(Read,
                           &Transmitter->StoreInterface,
@@ -3433,20 +3759,17 @@ __TransmitterRingTeardown(
     Ring->PacketsPrepared = 0;
     Ring->PacketsQueued = 0;
 
-    if (Ring->AddressCount != 0) {
-        ASSERT(Ring->AddressTable != NULL);
-        __TransmitterFree(Ring->AddressTable);
-    }
-
-    Ring->AddressTable = NULL;
-    Ring->AddressCount = 0;
-
     ThreadAlert(Ring->WatchdogThread);
     ThreadJoin(Ring->WatchdogThread);
     Ring->WatchdogThread = NULL;
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
+                 Ring->RequestCache);
+    Ring->RequestCache = NULL;
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
                  Ring->FragmentCache);
     Ring->FragmentCache = NULL;
 
@@ -3463,14 +3786,22 @@ __TransmitterRingTeardown(
 
     XENBUS_CACHE(Destroy,
                  &Transmitter->CacheInterface,
+                 Ring->MulticastControlCache);
+    Ring->MulticastControlCache = NULL;
+
+    XENBUS_CACHE(Destroy,
+                 &Transmitter->CacheInterface,
                  Ring->BufferCache);
     Ring->BufferCache = NULL;
 
-    ASSERT(IsListEmpty(&Ring->Queued));
-    RtlZeroMemory(&Ring->Queued, sizeof (LIST_ENTRY));
+    ASSERT(IsListEmpty(&Ring->PacketComplete));
+    RtlZeroMemory(&Ring->PacketComplete, sizeof (LIST_ENTRY));
+
+    ASSERT(IsListEmpty(&Ring->RequestQueue));
+    RtlZeroMemory(&Ring->RequestQueue, sizeof (LIST_ENTRY));
 
-    ASSERT(IsListEmpty(&Ring->Completed));
-    RtlZeroMemory(&Ring->Completed, sizeof (LIST_ENTRY));
+    ASSERT(IsListEmpty(&Ring->PacketQueue));
+    RtlZeroMemory(&Ring->PacketQueue, sizeof (LIST_ENTRY));
 
     FrontendFreePath(Frontend, Ring->Path);
     Ring->Path = NULL;
@@ -3520,12 +3851,12 @@ __TransmitterRingAbortPackets(
 
     TransmitterRingSwizzle(Ring);
 
-    while (!IsListEmpty(&Ring->Queued)) {
+    while (!IsListEmpty(&Ring->PacketQueue)) {
         PLIST_ENTRY                 ListEntry;
         PXENVIF_TRANSMITTER_PACKET  Packet;
         
-        ListEntry = RemoveHeadList(&Ring->Queued);
-        ASSERT3P(ListEntry, !=, &Ring->Queued);
+        ListEntry = RemoveHeadList(&Ring->PacketQueue);
+        ASSERT3P(ListEntry, !=, &Ring->PacketQueue);
 
         Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
         Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
@@ -3548,6 +3879,168 @@ __TransmitterRingAbortPackets(
     __TransmitterRingReleaseLock(Ring);
 }
 
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueArp(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PIPV4_ADDRESS               Address
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail1;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail2;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_ARP;
+    Request->Arp.Address = *Address;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %u.%u.%u.%u\n",
+         FrontendGetPath(Frontend),
+         Address->Byte[0],
+         Address->Byte[1],
+         Address->Byte[2],
+         Address->Byte[3]);
+
+    return STATUS_SUCCESS;
+
+fail2:
+fail1:
+    __TransmitterRingReleaseLock(Ring);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PIPV6_ADDRESS               Address
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail1;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail2;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_NEIGHBOUR_ADVERTISEMENT;
+    Request->NeighbourAdvertisement.Address = *Address;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x\n",
+         FrontendGetPath(Frontend),
+         HTONS(Address->Word[0]),
+         HTONS(Address->Word[1]),
+         HTONS(Address->Word[2]),
+         HTONS(Address->Word[3]),
+         HTONS(Address->Word[4]),
+         HTONS(Address->Word[5]),
+         HTONS(Address->Word[6]),
+         HTONS(Address->Word[7]));
+
+    return STATUS_SUCCESS;
+
+fail2:
+fail1:
+    __TransmitterRingReleaseLock(Ring);
+
+    return status;
+}
+
+static FORCEINLINE NTSTATUS
+__TransmitterRingQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER_RING    Ring,
+    IN  PETHERNET_ADDRESS           Address,
+    IN  BOOLEAN                     Add
+    )
+{
+    PXENVIF_TRANSMITTER             Transmitter;
+    PXENVIF_FRONTEND                Frontend;
+    PXENVIF_TRANSMITTER_REQUEST     Request;
+    NTSTATUS                        status;
+
+    Transmitter = Ring->Transmitter;
+
+    status = STATUS_NOT_SUPPORTED;
+    if (!Transmitter->MulticastControl)
+        goto fail1;
+
+    Frontend = Transmitter->Frontend;
+
+    __TransmitterRingAcquireLock(Ring);
+
+    status = STATUS_UNSUCCESSFUL;
+    if (!Ring->Enabled)
+        goto fail2;
+
+    Request = __TransmitterGetRequest(Ring);
+
+    status = STATUS_NO_MEMORY;
+    if (Request == NULL)
+        goto fail3;
+
+    Request->Type = XENVIF_TRANSMITTER_REQUEST_TYPE_MULTICAST_CONTROL;
+    Request->MulticastControl.Address = *Address;
+    Request->MulticastControl.Add = Add;
+
+    InsertTailList(&Ring->RequestQueue, &Request->ListEntry);
+
+    __TransmitterRingReleaseLock(Ring);
+
+    Info("%s: %s %02X:%02X:%02X:%02X:%02X:%02X\n",
+         FrontendGetPath(Frontend),
+         (Add) ? "ADD" : "REMOVE",
+         Address->Byte[0],
+         Address->Byte[1],
+         Address->Byte[2],
+         Address->Byte[3],
+         Address->Byte[4],
+         Address->Byte[5]);
+
+    return STATUS_SUCCESS;
+
+fail3:
+fail2:
+    __TransmitterRingReleaseLock(Ring);
+
+fail1:
+    return status;
+}
+
 static VOID
 TransmitterDebugCallback(
     IN  PVOID           Argument,
@@ -3796,6 +4289,22 @@ TransmitterConnect(
                      Buffer);
     }
 
+    status = XENBUS_STORE(Read,
+                          &Transmitter->StoreInterface,
+                          NULL,
+                          FrontendGetBackendPath(Frontend),
+                          "feature-multicast-control",
+                          &Buffer);
+    if (!NT_SUCCESS(status)) {
+        Transmitter->MulticastControl = FALSE;
+    } else {
+        Transmitter->MulticastControl = (BOOLEAN)strtol(Buffer, NULL, 2);
+
+        XENBUS_STORE(Free,
+                     &Transmitter->StoreInterface,
+                     Buffer);
+    }
+
     Transmitter->NumQueues = FrontendGetNumQueues(Frontend);
     ASSERT3U(Transmitter->NumQueues, <=, Transmitter->MaxQueues);
 
@@ -3880,22 +4389,38 @@ TransmitterStoreWrite(
     IN  PXENBUS_STORE_TRANSACTION   Transaction
     )
 {
+    PXENVIF_FRONTEND                Frontend;
     NTSTATUS                        status;
     LONG                            Index;
 
+    Frontend = Transmitter->Frontend;
+
+    status = XENBUS_STORE(Printf,
+                          &Transmitter->StoreInterface,
+                          Transaction,
+                          FrontendGetPath(Frontend),
+                          "request-multicast-control",
+                          "%u",
+                          TRUE);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
     Index = 0;
     while (Index < Transmitter->NumQueues) {
         PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[Index];
 
         status = __TransmitterRingStoreWrite(Ring, Transaction);
         if (!NT_SUCCESS(status))
-            goto fail1;
+            goto fail2;
 
         Index++;
     }    
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -3954,6 +4479,7 @@ TransmitterDisconnect(
 
     Frontend = Transmitter->Frontend;
 
+    Transmitter->MulticastControl = FALSE;
     Transmitter->Split = FALSE;
 
     XENBUS_DEBUG(Deregister,
@@ -4046,42 +4572,6 @@ TransmitterTeardown(
     __TransmitterFree(Transmitter);
 }
 
-VOID
-TransmitterUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER     Transmitter,
-    IN  SOCKADDR_INET           Table[],
-    IN  ULONG                   Count
-    )
-{
-    KIRQL                       Irql;
-    PXENVIF_TRANSMITTER_RING    Ring;
-
-    // Make sure we don't suspend
-    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
-
-    // Use the first ring for address advertisment
-    Ring = Transmitter->Ring[0];
-    ASSERT3U(Ring, !=, NULL);
-
-    __TransmitterRingUpdateAddressTable(Ring, Table, Count);
-
-    KeLowerIrql(Irql);
-}
-
-VOID
-TransmitterAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER     Transmitter
-    )
-{
-    PXENVIF_TRANSMITTER_RING    Ring;
-
-    // Use the first ring for address advertisment
-    Ring = Transmitter->Ring[0];
-    ASSERT3U(Ring, !=, NULL);
-
-    __TransmitterRingAdvertiseAddresses(Ring);
-}
-
 NTSTATUS
 TransmitterSetPacketOffset(
     IN  PXENVIF_TRANSMITTER                 Transmitter,
@@ -4346,6 +4836,40 @@ TransmitterAbortPackets(
 }
 
 VOID
+TransmitterQueueArp(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV4_ADDRESS           Address
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueArp(Ring, Address);
+}
+
+VOID
+TransmitterQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV6_ADDRESS           Address
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueNeighbourAdvertisement(Ring, Address);
+}
+
+VOID
+TransmitterQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PETHERNET_ADDRESS       Address,
+    IN  BOOLEAN                 Add
+    )
+{
+    PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[0];
+
+    (VOID) __TransmitterRingQueueMulticastControl(Ring, Address, Add);
+}
+
+VOID
 TransmitterQueryRingSize(
     IN  PXENVIF_TRANSMITTER Transmitter,
     OUT PULONG              Size
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index fad0762..eddc51b 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -34,7 +34,9 @@
 
 #include <ntddk.h>
 #include <netioapi.h>
+
 #include <vif_interface.h>
+#include <tcpip.h>
 
 #include "frontend.h"
 
@@ -89,21 +91,28 @@ TransmitterAbortPackets(
     );
 
 extern VOID
-TransmitterQueryRingSize(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    OUT PULONG              Size
+TransmitterQueueArp(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV4_ADDRESS           Address
     );
 
 extern VOID
-TransmitterUpdateAddressTable(
-    IN  PXENVIF_TRANSMITTER Transmitter,
-    IN  PSOCKADDR_INET      Table,
-    IN  ULONG               Count
+TransmitterQueueNeighbourAdvertisement(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PIPV6_ADDRESS           Address
     );
 
 extern VOID
-TransmitterAdvertiseAddresses(
-    IN  PXENVIF_TRANSMITTER Transmitter
+TransmitterQueueMulticastControl(
+    IN  PXENVIF_TRANSMITTER     Transmitter,
+    IN  PETHERNET_ADDRESS       Address,
+    IN  BOOLEAN                 Add
+    );
+
+extern VOID
+TransmitterQueryRingSize(
+    IN  PXENVIF_TRANSMITTER Transmitter,
+    OUT PULONG              Size
     );
 
 extern VOID
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 35af384..b2bbf05 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -501,16 +501,24 @@ VifMacSetMulticastAddresses(
     )
 {
     PXENVIF_VIF_CONTEXT     Context = Interface->Context;
+    ULONG                   Index;
     NTSTATUS                status;
 
+    status = STATUS_INVALID_PARAMETER;
+    for (Index = 0; Index < Count; Index++) {
+        if (!(Address[Index].Byte[0] & 0x01))
+            goto done;
+    }
+
     AcquireMrswLockShared(&Context->Lock);
 
-    status = MacSetMulticastAddresses(FrontendGetMac(Context->Frontend),
-                                      Address,
-                                      Count);
+    status = FrontendSetMulticastAddresses(Context->Frontend,
+                                           Address,
+                                           Count);
 
     ReleaseMrswLockShared(&Context->Lock);
 
+done:
     return status;
 }
 
@@ -598,7 +606,10 @@ VifSuspendCallbackLate(
     status = FrontendSetState(Context->Frontend, FRONTEND_ENABLED);
     ASSERT(NT_SUCCESS(status));
 
-    TransmitterAdvertiseAddresses(FrontendGetTransmitter(Context->Frontend));
+    // We do this three times to make sure switches take note
+    FrontendAdvertiseIpAddresses(Context->Frontend);
+    FrontendAdvertiseIpAddresses(Context->Frontend);
+    FrontendAdvertiseIpAddresses(Context->Frontend);
 }
 
 static NTSTATUS
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:47:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:47:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJF3-0000fo-Du; Tue, 08 Sep 2015 13:47:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJF2-0000fh-50
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:47:20 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	A9/02-09570-7E6EEE55; Tue, 08 Sep 2015 13:47:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441720038!42412616!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30732 invoked from network); 8 Sep 2015 13:47:19 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:47:19 -0000
Received: by wiclk2 with SMTP id lk2so121180237wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=iEHMnU/LNTxrSTzePoJlJkPObA/T4MwO6pqW+6os/go=;
	b=jRsY1MKDZ9iDPX1hLw3kKCmB8FRlL6587gzOcwTlIp1YV0pc955nCA4D8eEb42Vvgl
	tsmZt2vXdkfQd9B0shU/orzAvQnnBqtmhU8EPQxJKT01Dq0RJwFYSs3/1EfrfUXABLUa
	PtyMJ8n5rx3zwfwMXdVWyF9hYL8xCsx7PJvmRPLHIihEZCz6L3v/+/hE/j9eg41NAK0P
	a++4Gh7BOBFiLmGEWFPVa+y15RkByTlsN7wbk3epSJxxiZcq7yHNqBYLE3uJUlrUBAKh
	yYPeJRexwx7hk7LFHPWuoNNPKwnwMp3wpF/+ZPZfwJLh/KLGHYSSlKODJAGuHFHBmQN+
	poxQ==
X-Received: by 10.194.119.161 with SMTP id kv1mr45223501wjb.157.1441720038435; 
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p20sm5927936wie.5.2015.09.08.06.47.17
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:47:04 +0100
Message-Id: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as
	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENBUS, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

This needs to be back-ported to 8.1

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 406fcae..825ba38 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -817,23 +817,24 @@ SupportChildDrivers(
 
         Success = OpenDriverKey(DriverKeyName, &DriverKey);
         if (!Success)
-            goto fail7;
+            goto loop;
 
         Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
         if (!Success)
-            goto fail8;
+            goto fail7;
 
         Success = SupportDeviceID(MatchingDeviceID);
         if (!Success)
-            goto fail9;
+            goto fail8;
 
         free(MatchingDeviceID);
 
         RegCloseKey(DriverKey);
 
-        free(DriverKeyName);
-
     loop:
+        if (DriverKeyName != NULL)
+            free(DriverKeyName);
+
         RegCloseKey(DeviceKey);
     }
 
@@ -846,19 +847,16 @@ done:
 
     return TRUE;
 
-fail9:
-    Log("fail9");
-
-    free(MatchingDeviceID);
-
 fail8:
     Log("fail8");
 
-    RegCloseKey(DriverKey);
+    free(MatchingDeviceID);
 
 fail7:
     Log("fail7");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail6:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:47:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:47:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJF3-0000fo-Du; Tue, 08 Sep 2015 13:47:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJF2-0000fh-50
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:47:20 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	A9/02-09570-7E6EEE55; Tue, 08 Sep 2015 13:47:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441720038!42412616!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30732 invoked from network); 8 Sep 2015 13:47:19 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:47:19 -0000
Received: by wiclk2 with SMTP id lk2so121180237wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=iEHMnU/LNTxrSTzePoJlJkPObA/T4MwO6pqW+6os/go=;
	b=jRsY1MKDZ9iDPX1hLw3kKCmB8FRlL6587gzOcwTlIp1YV0pc955nCA4D8eEb42Vvgl
	tsmZt2vXdkfQd9B0shU/orzAvQnnBqtmhU8EPQxJKT01Dq0RJwFYSs3/1EfrfUXABLUa
	PtyMJ8n5rx3zwfwMXdVWyF9hYL8xCsx7PJvmRPLHIihEZCz6L3v/+/hE/j9eg41NAK0P
	a++4Gh7BOBFiLmGEWFPVa+y15RkByTlsN7wbk3epSJxxiZcq7yHNqBYLE3uJUlrUBAKh
	yYPeJRexwx7hk7LFHPWuoNNPKwnwMp3wpF/+ZPZfwJLh/KLGHYSSlKODJAGuHFHBmQN+
	poxQ==
X-Received: by 10.194.119.161 with SMTP id kv1mr45223501wjb.157.1441720038435; 
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id p20sm5927936wie.5.2015.09.08.06.47.17
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:47:18 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:47:04 +0100
Message-Id: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as
	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENBUS, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

This needs to be back-ported to 8.1

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 406fcae..825ba38 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -817,23 +817,24 @@ SupportChildDrivers(
 
         Success = OpenDriverKey(DriverKeyName, &DriverKey);
         if (!Success)
-            goto fail7;
+            goto loop;
 
         Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
         if (!Success)
-            goto fail8;
+            goto fail7;
 
         Success = SupportDeviceID(MatchingDeviceID);
         if (!Success)
-            goto fail9;
+            goto fail8;
 
         free(MatchingDeviceID);
 
         RegCloseKey(DriverKey);
 
-        free(DriverKeyName);
-
     loop:
+        if (DriverKeyName != NULL)
+            free(DriverKeyName);
+
         RegCloseKey(DeviceKey);
     }
 
@@ -846,19 +847,16 @@ done:
 
     return TRUE;
 
-fail9:
-    Log("fail9");
-
-    free(MatchingDeviceID);
-
 fail8:
     Log("fail8");
 
-    RegCloseKey(DriverKey);
+    free(MatchingDeviceID);
 
 fail7:
     Log("fail7");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail6:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:48:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:48:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJGX-0000od-IK; Tue, 08 Sep 2015 13:48:53 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJGW-0000oY-Hc
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:48:52 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	E7/96-09570-347EEE55; Tue, 08 Sep 2015 13:48:51 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441720130!42409762!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31497 invoked from network); 8 Sep 2015 13:48:50 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:48:50 -0000
Received: by wicfx3 with SMTP id fx3so115875975wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:48:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=asOo0vmxFY/I+LDaYmYlonWcOSq4aoc9zhLELqRchJs=;
	b=kXnBk09ru1uoBTI6rifBRMueud8JL5dxeSlMC0DMZrYZ7XuPRqaikCVSza7aakleDj
	SqHmOoRGaWoxzIN+Et9kUT8sDiwW6dRFsiTeuJUJVL+d1aJOre0lK3cSltPcWNA8SgCN
	xTS+eGzBwzxADmBW63FOGOpmKpqLer1V861Zzv2lJ4LLp2Hz5Qvuh8RD+xiSW9Y4/W19
	kavlZK0YEt5muK9s4dJHAawsjJJmypW5gC7a/lO/8rSNch59xbRGLDAKsDwNp6NvVQ2Q
	eO2WFN1O5vXkstDSfz7GLeUwqbd2wFp1lgL5sIoYTdZEn6BKxp3ZXUor3OEgEczNznuQ
	L7pQ==
X-Received: by 10.180.219.106 with SMTP id pn10mr46211644wic.56.1441720129938; 
	Tue, 08 Sep 2015 06:48:49 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	bs8sm4932185wjc.47.2015.09.08.06.48.49
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:48:49 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:48:38 +0100
Message-Id: <1441720118-11800-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as
	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENBUS, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

This needs to be back-ported to 8.1

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 68e3265..09ef847 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -704,7 +704,7 @@ found:
 
     Success = OpenDriverKey(DriverKeyName, &DriverKey);
     if (!Success)
-        goto fail5;
+        goto done;
 
     Error = RegQueryInfoKey(DriverKey,
                             NULL,
@@ -720,14 +720,14 @@ found:
                             NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail6;
+        goto fail5;
     }
 
     DriverDescLength = MaxValueLength + sizeof (TCHAR);
 
     DriverDesc = calloc(1, DriverDescLength);
     if (DriverDesc == NULL)
-        goto fail7;
+        goto fail6;
 
     Error = RegQueryValueEx(DriverKey,
                             "DriverDesc",
@@ -740,12 +740,12 @@ found:
             goto done;
 
         SetLastError(Error);
-        goto fail8;
+        goto fail7;
     }
 
     if (Type != REG_SZ) {
         SetLastError(ERROR_BAD_FORMAT);
-        goto fail9;
+        goto fail8;
     }
 
     ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
@@ -754,13 +754,13 @@ found:
                 PRODUCT_NAME_STR,
                 ProductNameLength) != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
-        goto fail10;
+        goto fail9;
     }
 
     if (strcmp(DriverDesc + ProductNameLength,
                " PV Bus") != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
-        goto fail11;
+        goto fail10;
     }
 
 done:
@@ -781,9 +781,6 @@ done:
 
     return TRUE;
 
-fail11:
-    Log("fail11");
-
 fail10:
     Log("fail10");
 
@@ -793,19 +790,19 @@ fail9:
 fail8:
     Log("fail8");
 
-    free(DriverDesc);
-
 fail7:
     Log("fail7");
 
+    free(DriverDesc);
+
 fail6:
     Log("fail6");
 
-    RegCloseKey(DriverKey);
-
 fail5:
     Log("fail5");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail4:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:48:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:48:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJGX-0000od-IK; Tue, 08 Sep 2015 13:48:53 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJGW-0000oY-Hc
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:48:52 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	E7/96-09570-347EEE55; Tue, 08 Sep 2015 13:48:51 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441720130!42409762!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31497 invoked from network); 8 Sep 2015 13:48:50 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:48:50 -0000
Received: by wicfx3 with SMTP id fx3so115875975wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:48:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=asOo0vmxFY/I+LDaYmYlonWcOSq4aoc9zhLELqRchJs=;
	b=kXnBk09ru1uoBTI6rifBRMueud8JL5dxeSlMC0DMZrYZ7XuPRqaikCVSza7aakleDj
	SqHmOoRGaWoxzIN+Et9kUT8sDiwW6dRFsiTeuJUJVL+d1aJOre0lK3cSltPcWNA8SgCN
	xTS+eGzBwzxADmBW63FOGOpmKpqLer1V861Zzv2lJ4LLp2Hz5Qvuh8RD+xiSW9Y4/W19
	kavlZK0YEt5muK9s4dJHAawsjJJmypW5gC7a/lO/8rSNch59xbRGLDAKsDwNp6NvVQ2Q
	eO2WFN1O5vXkstDSfz7GLeUwqbd2wFp1lgL5sIoYTdZEn6BKxp3ZXUor3OEgEczNznuQ
	L7pQ==
X-Received: by 10.180.219.106 with SMTP id pn10mr46211644wic.56.1441720129938; 
	Tue, 08 Sep 2015 06:48:49 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	bs8sm4932185wjc.47.2015.09.08.06.48.49
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:48:49 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:48:38 +0100
Message-Id: <1441720118-11800-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as
	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENBUS, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 25 +++++++++++--------------
 1 file changed, 11 insertions(+), 14 deletions(-)

This needs to be back-ported to 8.1

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 68e3265..09ef847 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -704,7 +704,7 @@ found:
 
     Success = OpenDriverKey(DriverKeyName, &DriverKey);
     if (!Success)
-        goto fail5;
+        goto done;
 
     Error = RegQueryInfoKey(DriverKey,
                             NULL,
@@ -720,14 +720,14 @@ found:
                             NULL);
     if (Error != ERROR_SUCCESS) {
         SetLastError(Error);
-        goto fail6;
+        goto fail5;
     }
 
     DriverDescLength = MaxValueLength + sizeof (TCHAR);
 
     DriverDesc = calloc(1, DriverDescLength);
     if (DriverDesc == NULL)
-        goto fail7;
+        goto fail6;
 
     Error = RegQueryValueEx(DriverKey,
                             "DriverDesc",
@@ -740,12 +740,12 @@ found:
             goto done;
 
         SetLastError(Error);
-        goto fail8;
+        goto fail7;
     }
 
     if (Type != REG_SZ) {
         SetLastError(ERROR_BAD_FORMAT);
-        goto fail9;
+        goto fail8;
     }
 
     ProductNameLength = (DWORD)strlen(PRODUCT_NAME_STR);
@@ -754,13 +754,13 @@ found:
                 PRODUCT_NAME_STR,
                 ProductNameLength) != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
-        goto fail10;
+        goto fail9;
     }
 
     if (strcmp(DriverDesc + ProductNameLength,
                " PV Bus") != 0) {
         SetLastError(ERROR_INSTALL_FAILURE);
-        goto fail11;
+        goto fail10;
     }
 
 done:
@@ -781,9 +781,6 @@ done:
 
     return TRUE;
 
-fail11:
-    Log("fail11");
-
 fail10:
     Log("fail10");
 
@@ -793,19 +790,19 @@ fail9:
 fail8:
     Log("fail8");
 
-    free(DriverDesc);
-
 fail7:
     Log("fail7");
 
+    free(DriverDesc);
+
 fail6:
     Log("fail6");
 
-    RegCloseKey(DriverKey);
-
 fail5:
     Log("fail5");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail4:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:51:01 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:51:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJIa-0000vO-Re; Tue, 08 Sep 2015 13:51:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6860a9805=Paul.Durrant@citrix.com>)
	id 1ZZJIZ-0000vJ-AK
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:50:59 +0000
Received: from [193.109.254.147] by server-15.bemta-14.messagelabs.com id
	D5/8D-18886-2C7EEE55; Tue, 08 Sep 2015 13:50:58 +0000
X-Env-Sender: prvs=6860a9805=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1441720256!41753870!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27497 invoked from network); 8 Sep 2015 13:50:57 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:50:57 -0000
X-IronPort-AV: E=Sophos;i="5.17,490,1437436800"; 
   d="scan'208";a="2526077"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver
	key as	a hard failure
Thread-Index: AQHQ6j0NLyq8i2eH9U+ToaU3MTlTcp4ypigA
Date: Tue, 8 Sep 2015 13:50:56 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B8150@AMSPEX01CL01.citrite.net>
References: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key
 as	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 08 September 2015 14:47
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as a
> hard failure
> 
> When looking to see whether an incumbent child driver will patch the
> PDO names created by the new version of XENBUS, ignore any cases where

This should have said XENVIF. I'll send v2.

  Paul

> we find that the Driver key referenced in the Device key is actually
> missing.
> 
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> ---
>  src/coinst/coinst.c | 20 +++++++++-----------
>  1 file changed, 9 insertions(+), 11 deletions(-)
> 
> This needs to be back-ported to 8.1
> 
> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> index 406fcae..825ba38 100644
> --- a/src/coinst/coinst.c
> +++ b/src/coinst/coinst.c
> @@ -817,23 +817,24 @@ SupportChildDrivers(
> 
>          Success = OpenDriverKey(DriverKeyName, &DriverKey);
>          if (!Success)
> -            goto fail7;
> +            goto loop;
> 
>          Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
>          if (!Success)
> -            goto fail8;
> +            goto fail7;
> 
>          Success = SupportDeviceID(MatchingDeviceID);
>          if (!Success)
> -            goto fail9;
> +            goto fail8;
> 
>          free(MatchingDeviceID);
> 
>          RegCloseKey(DriverKey);
> 
> -        free(DriverKeyName);
> -
>      loop:
> +        if (DriverKeyName != NULL)
> +            free(DriverKeyName);
> +
>          RegCloseKey(DeviceKey);
>      }
> 
> @@ -846,19 +847,16 @@ done:
> 
>      return TRUE;
> 
> -fail9:
> -    Log("fail9");
> -
> -    free(MatchingDeviceID);
> -
>  fail8:
>      Log("fail8");
> 
> -    RegCloseKey(DriverKey);
> +    free(MatchingDeviceID);
> 
>  fail7:
>      Log("fail7");
> 
> +    RegCloseKey(DriverKey);
> +
>      free(DriverKeyName);
> 
>  fail6:
> --
> 2.1.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:51:01 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:51:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJIa-0000vO-Re; Tue, 08 Sep 2015 13:51:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=6860a9805=Paul.Durrant@citrix.com>)
	id 1ZZJIZ-0000vJ-AK
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:50:59 +0000
Received: from [193.109.254.147] by server-15.bemta-14.messagelabs.com id
	D5/8D-18886-2C7EEE55; Tue, 08 Sep 2015 13:50:58 +0000
X-Env-Sender: prvs=6860a9805=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-27.messagelabs.com!1441720256!41753870!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27497 invoked from network); 8 Sep 2015 13:50:57 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:50:57 -0000
X-IronPort-AV: E=Sophos;i="5.17,490,1437436800"; 
   d="scan'208";a="2526077"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver
	key as	a hard failure
Thread-Index: AQHQ6j0NLyq8i2eH9U+ToaU3MTlTcp4ypigA
Date: Tue, 8 Sep 2015 13:50:56 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B8150@AMSPEX01CL01.citrite.net>
References: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1441720024-17008-1-git-send-email-paul.durrant@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key
 as	a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 08 September 2015 14:47
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [win-pv-devel] [PATCH for 8.1] Don't treat a missing Driver key as a
> hard failure
> 
> When looking to see whether an incumbent child driver will patch the
> PDO names created by the new version of XENBUS, ignore any cases where

This should have said XENVIF. I'll send v2.

  Paul

> we find that the Driver key referenced in the Device key is actually
> missing.
> 
> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> ---
>  src/coinst/coinst.c | 20 +++++++++-----------
>  1 file changed, 9 insertions(+), 11 deletions(-)
> 
> This needs to be back-ported to 8.1
> 
> diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
> index 406fcae..825ba38 100644
> --- a/src/coinst/coinst.c
> +++ b/src/coinst/coinst.c
> @@ -817,23 +817,24 @@ SupportChildDrivers(
> 
>          Success = OpenDriverKey(DriverKeyName, &DriverKey);
>          if (!Success)
> -            goto fail7;
> +            goto loop;
> 
>          Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
>          if (!Success)
> -            goto fail8;
> +            goto fail7;
> 
>          Success = SupportDeviceID(MatchingDeviceID);
>          if (!Success)
> -            goto fail9;
> +            goto fail8;
> 
>          free(MatchingDeviceID);
> 
>          RegCloseKey(DriverKey);
> 
> -        free(DriverKeyName);
> -
>      loop:
> +        if (DriverKeyName != NULL)
> +            free(DriverKeyName);
> +
>          RegCloseKey(DeviceKey);
>      }
> 
> @@ -846,19 +847,16 @@ done:
> 
>      return TRUE;
> 
> -fail9:
> -    Log("fail9");
> -
> -    free(MatchingDeviceID);
> -
>  fail8:
>      Log("fail8");
> 
> -    RegCloseKey(DriverKey);
> +    free(MatchingDeviceID);
> 
>  fail7:
>      Log("fail7");
> 
> +    RegCloseKey(DriverKey);
> +
>      free(DriverKeyName);
> 
>  fail6:
> --
> 2.1.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:52:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:52:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJK8-0000wT-0q; Tue, 08 Sep 2015 13:52:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJK5-0000wO-W5
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:52:34 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	DF/C1-02380-128EEE55; Tue, 08 Sep 2015 13:52:33 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441720352!33644180!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30578 invoked from network); 8 Sep 2015 13:52:32 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:52:32 -0000
Received: by wicfx3 with SMTP id fx3so121157315wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=EEZzVWMVer3QAVHTBIXgJxLv1qwlGjhUi25dqF81Dis=;
	b=MgYJOXdtQbSsi72W3yok9q7Nj/gbdbcdPZ5YM6kiO65hQXC5Nq1lmAj7wGCl3NUkT7
	uRvl6PvBmEcXew1ZNFj2lSYROq0oBz2EYxestMHHim1MNncTr3/ZqcetcuvAPbbK+8PV
	2GDiMGha8b7/87U17yxzqmwQ6ZM6hwFEnnd9Lb5JtgdlR4d0bViD8UI0lJlLEgP+I53p
	LUDQuvkU0k+eviDhukbJvemZoX3+PPwdU2ocYcpfgQoXChtE4kEB3qsFGtpV1o8pGNw0
	j5xbxrZUZLyDVxYZekJ/S5/0Ml5RyniYfOzCnzNMvETmN6/A9ltigaCPXzp3UHkwwGKu
	nxLg==
X-Received: by 10.194.85.163 with SMTP id i3mr46939861wjz.75.1441720352454;
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id wo2sm5013632wjb.2.2015.09.08.06.52.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:52:20 +0100
Message-Id: <1441720340-17188-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH v2 for 8.1] Don't treat a missing Driver key
	as a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENVIF, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

This needs to be back-ported to 8.1.

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 406fcae..825ba38 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -817,23 +817,24 @@ SupportChildDrivers(
 
         Success = OpenDriverKey(DriverKeyName, &DriverKey);
         if (!Success)
-            goto fail7;
+            goto loop;
 
         Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
         if (!Success)
-            goto fail8;
+            goto fail7;
 
         Success = SupportDeviceID(MatchingDeviceID);
         if (!Success)
-            goto fail9;
+            goto fail8;
 
         free(MatchingDeviceID);
 
         RegCloseKey(DriverKey);
 
-        free(DriverKeyName);
-
     loop:
+        if (DriverKeyName != NULL)
+            free(DriverKeyName);
+
         RegCloseKey(DeviceKey);
     }
 
@@ -846,19 +847,16 @@ done:
 
     return TRUE;
 
-fail9:
-    Log("fail9");
-
-    free(MatchingDeviceID);
-
 fail8:
     Log("fail8");
 
-    RegCloseKey(DriverKey);
+    free(MatchingDeviceID);
 
 fail7:
     Log("fail7");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail6:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 08 13:52:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 08 Sep 2015 13:52:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZJK8-0000wT-0q; Tue, 08 Sep 2015 13:52:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZJK5-0000wO-W5
	for win-pv-devel@lists.xenproject.org; Tue, 08 Sep 2015 13:52:34 +0000
Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id
	DF/C1-02380-128EEE55; Tue, 08 Sep 2015 13:52:33 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441720352!33644180!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30578 invoked from network); 8 Sep 2015 13:52:32 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	8 Sep 2015 13:52:32 -0000
Received: by wicfx3 with SMTP id fx3so121157315wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=EEZzVWMVer3QAVHTBIXgJxLv1qwlGjhUi25dqF81Dis=;
	b=MgYJOXdtQbSsi72W3yok9q7Nj/gbdbcdPZ5YM6kiO65hQXC5Nq1lmAj7wGCl3NUkT7
	uRvl6PvBmEcXew1ZNFj2lSYROq0oBz2EYxestMHHim1MNncTr3/ZqcetcuvAPbbK+8PV
	2GDiMGha8b7/87U17yxzqmwQ6ZM6hwFEnnd9Lb5JtgdlR4d0bViD8UI0lJlLEgP+I53p
	LUDQuvkU0k+eviDhukbJvemZoX3+PPwdU2ocYcpfgQoXChtE4kEB3qsFGtpV1o8pGNw0
	j5xbxrZUZLyDVxYZekJ/S5/0Ml5RyniYfOzCnzNMvETmN6/A9ltigaCPXzp3UHkwwGKu
	nxLg==
X-Received: by 10.194.85.163 with SMTP id i3mr46939861wjz.75.1441720352454;
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id wo2sm5013632wjb.2.2015.09.08.06.52.31
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 08 Sep 2015 06:52:32 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue,  8 Sep 2015 14:52:20 +0100
Message-Id: <1441720340-17188-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH v2 for 8.1] Don't treat a missing Driver key
	as a hard failure
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

When looking to see whether an incumbent child driver will patch the
PDO names created by the new version of XENVIF, ignore any cases where
we find that the Driver key referenced in the Device key is actually
missing.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/coinst/coinst.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

This needs to be back-ported to 8.1.

diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 406fcae..825ba38 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -817,23 +817,24 @@ SupportChildDrivers(
 
         Success = OpenDriverKey(DriverKeyName, &DriverKey);
         if (!Success)
-            goto fail7;
+            goto loop;
 
         Success = GetMatchingDeviceID(DriverKey, &MatchingDeviceID);
         if (!Success)
-            goto fail8;
+            goto fail7;
 
         Success = SupportDeviceID(MatchingDeviceID);
         if (!Success)
-            goto fail9;
+            goto fail8;
 
         free(MatchingDeviceID);
 
         RegCloseKey(DriverKey);
 
-        free(DriverKeyName);
-
     loop:
+        if (DriverKeyName != NULL)
+            free(DriverKeyName);
+
         RegCloseKey(DeviceKey);
     }
 
@@ -846,19 +847,16 @@ done:
 
     return TRUE;
 
-fail9:
-    Log("fail9");
-
-    free(MatchingDeviceID);
-
 fail8:
     Log("fail8");
 
-    RegCloseKey(DriverKey);
+    free(MatchingDeviceID);
 
 fail7:
     Log("fail7");
 
+    RegCloseKey(DriverKey);
+
     free(DriverKeyName);
 
 fail6:
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 00:44:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 00:44:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZTUl-0002fo-7B; Wed, 09 Sep 2015 00:44:15 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZTUj-0002fj-9k
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 00:44:13 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	DD/1A-28791-CD08FE55; Wed, 09 Sep 2015 00:44:12 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1441759451!45840551!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9085 invoked from network); 9 Sep 2015 00:44:11 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-4.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 00:44:11 -0000
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
	by mailout.nyi.internal (Postfix) with ESMTP id D595F201E8
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  8 Sep 2015 20:44:10 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute6.internal (MEProxy); Tue, 08 Sep 2015 20:44:10 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=qTAIG7PeW3YY18a0M6IvCMRc4mc=; b=UCbXoN
	nO17OBBKrZi7+Ksg/Z/LiHnoSGyHuqBWbL6In5YPBKYAwfGLpwDAWuZ+lofVedaW
	1eP1EGaQJF66QBm5cwnbXdvhA3YX4HG6N4owDCz7h0IScfL2/3HFIcY08qmAs5Ph
	V5lKmYOK456ETBjqdCC5mfv2tNp8qxNuOAHgY=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=qTAIG7PeW3YY18a0M6IvCMRc4mc=; b=JHqAm
	N1Qn1ZH9ruTfq+52i7IgnASgiVrW0GabxoEyoipzcoQQows6di67EMO7O9uGYspe
	L1+EpqvhfTmGj9wEq6D58zvldPnRgOcT5cKxXja++bN+Xr/6mkMPOkt1ur/Dz6Ci
	ECXyQBzrtZVjiq15teVWUuZma/RZktvSbuPL2c=
X-Sasl-enc: OIjR8ezGcngtROdoX1A7BM9Ws2NSVcjkCOHz0YXCGEq+ 1441759450
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 5E87668012B
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  8 Sep 2015 20:44:10 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55EF80D8.1090304@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 02:44:08 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 568
Subject: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFy
Yml0cmFyeSBrZXkKdmFsdWVzPyBJJ3ZlIGJlZW4gdHJpcHBpbmcgdGhlIGFzc2VydGlvbiBpbiBI
YXNoVGFibGVIYXNoKCkgb24ga2V5cyB0aGF0CndlcmUgNjRiaXQgYWRkcmVzc2VzLgoKLS0gClJh
ZmHFgiBXb2pkecWCYQpRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXIKaHR0cHM6Ly93
d3cucXViZXMtb3Mub3JnLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9s
aXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 00:44:17 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 00:44:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZTUl-0002fo-7B; Wed, 09 Sep 2015 00:44:15 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZTUj-0002fj-9k
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 00:44:13 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	DD/1A-28791-CD08FE55; Wed, 09 Sep 2015 00:44:12 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1441759451!45840551!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9085 invoked from network); 9 Sep 2015 00:44:11 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-4.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 00:44:11 -0000
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
	by mailout.nyi.internal (Postfix) with ESMTP id D595F201E8
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  8 Sep 2015 20:44:10 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute6.internal (MEProxy); Tue, 08 Sep 2015 20:44:10 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=qTAIG7PeW3YY18a0M6IvCMRc4mc=; b=UCbXoN
	nO17OBBKrZi7+Ksg/Z/LiHnoSGyHuqBWbL6In5YPBKYAwfGLpwDAWuZ+lofVedaW
	1eP1EGaQJF66QBm5cwnbXdvhA3YX4HG6N4owDCz7h0IScfL2/3HFIcY08qmAs5Ph
	V5lKmYOK456ETBjqdCC5mfv2tNp8qxNuOAHgY=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=qTAIG7PeW3YY18a0M6IvCMRc4mc=; b=JHqAm
	N1Qn1ZH9ruTfq+52i7IgnASgiVrW0GabxoEyoipzcoQQows6di67EMO7O9uGYspe
	L1+EpqvhfTmGj9wEq6D58zvldPnRgOcT5cKxXja++bN+Xr/6mkMPOkt1ur/Dz6Ci
	ECXyQBzrtZVjiq15teVWUuZma/RZktvSbuPL2c=
X-Sasl-enc: OIjR8ezGcngtROdoX1A7BM9Ws2NSVcjkCOHz0YXCGEq+ 1441759450
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 5E87668012B
	for <win-pv-devel@lists.xenproject.org>;
	Tue,  8 Sep 2015 20:44:10 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55EF80D8.1090304@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 02:44:08 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 568
Subject: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFy
Yml0cmFyeSBrZXkKdmFsdWVzPyBJJ3ZlIGJlZW4gdHJpcHBpbmcgdGhlIGFzc2VydGlvbiBpbiBI
YXNoVGFibGVIYXNoKCkgb24ga2V5cyB0aGF0CndlcmUgNjRiaXQgYWRkcmVzc2VzLgoKLS0gClJh
ZmHFgiBXb2pkecWCYQpRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXIKaHR0cHM6Ly93
d3cucXViZXMtb3Mub3JnLwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9s
aXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:26:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:26:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZahf-0007tE-NO; Wed, 09 Sep 2015 08:26:03 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZahe-0007sq-DP
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:26:02 +0000
Received: from [85.158.137.68] by server-13.bemta-3.messagelabs.com id
	DC/93-00536-91DEFE55; Wed, 09 Sep 2015 08:26:01 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-2.tower-31.messagelabs.com!1441787159!11493506!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25661 invoked from network); 9 Sep 2015 08:26:00 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-2.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:26:00 -0000
Received: by wiclk2 with SMTP id lk2so12355732wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:25:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=RDImfoqb/OQmhTZhhxoOs8NZQ67YhTgdR0cbGFV7J1Q=;
	b=G/Fg7XZfBhfEEATYJxrl31j5GIPS3LfVPI9Rwf1fvzsMpQF4vGDw5OQvVfYsX7TVME
	78DC0yMg+0vEluZ/6fAu3thxuLVR1m9koJIVwh8D2hnPZw02QfEiY2/35bmTbQCxQIx0
	KlMJazIu9yDev3JkT2UZ9+lML6EF213fSzRw7X2CzgJcJTsLAyQYf2Mrc+kiDVxFv4YE
	If6EdTPKkalMa/FPtAutXUX3R6h3FjnC4Misf2COFQORRytyejxcM3rMGpWFnTFtpSy+
	Tbl6fkRnVTa68EZoS9e/4Sb1pY+uOQnwWUD6BFSE8530rARYvWA9GV+Kr8uQTWjqWzti
	XwIA==
X-Received: by 10.180.82.233 with SMTP id l9mr51871771wiy.71.1441787159603;
	Wed, 09 Sep 2015 01:25:59 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	lh3sm8911652wjc.44.2015.09.09.01.25.58
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:25:58 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:25:42 +0100
Message-Id: <1441787142-17280-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENBUS package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xenbus.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 96 ++++++++++++++++++++++++++++++++++++++++----
 include/version.hx           | 54 -------------------------
 src/coinst/coinst.c          | 10 ++---
 src/xen/xen.rc               |  2 +-
 src/xenbus.inf               |  8 ++--
 src/xenbus/fdo.c             |  4 +-
 src/xenbus/xenbus.rc         |  2 +-
 src/xenfilt/xenfilt.rc       |  2 +-
 vs2012/xen/xen.vcxproj       |  8 ----
 vs2012/xenbus/xenbus.vcxproj |  8 ----
 vs2013/xen/xen.vcxproj       |  8 ----
 vs2013/xenbus/xenbus.vcxproj |  8 ----
 12 files changed, 103 insertions(+), 107 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index 3bccc62..59c2626 100755
--- a/build.py
+++ b/build.py
@@ -24,6 +24,74 @@ def next_build_number():
     return build_number
 
 
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -330,11 +398,11 @@ if __name__ == '__main__':
     driver = 'xenbus'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
-    
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
+
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -346,13 +414,27 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        print("VENDOR_DEVICE_ID\t'%s'" % os.environ['VENDOR_DEVICE_ID'])
+
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index 4b7351d..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 09ef847..5cdd060 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -365,10 +365,8 @@ fail1:
     return FALSE;
 }
 
-#define PLATFORM_DEVICE_0001_NAME       "VEN_5853&DEV_0001"
-#define PLATFORM_DEVICE_0002_NAME       "VEN_5853&DEV_0002"
-
-#define XENSERVER_VENDOR_DEVICE_NAME    "VEN_5853&DEV_C000"
+#define XEN_PLATFORM_PCI_DEVICE_STR         "VEN_5853&DEV_0001"
+#define XENSERVER_PLATFORM_PCI_DEVICE_STR   "VEN_5853&DEV_0002"
 
 static BOOLEAN
 OpenDeviceKey(
@@ -669,7 +667,7 @@ MatchExistingDriver(
 
     // Look for a legacy platform device
     Success = GetDeviceKeyName("PCI",
-                               PLATFORM_DEVICE_0001_NAME,
+                               XEN_PLATFORM_PCI_DEVICE_STR,
                                &DeviceKeyName);
     if (!Success)
         goto fail1;
@@ -678,7 +676,7 @@ MatchExistingDriver(
         goto found;
 
     Success = GetDeviceKeyName("PCI",
-                               PLATFORM_DEVICE_0002_NAME,
+                               XENSERVER_PLATFORM_PCI_DEVICE_STR,
                                &DeviceKeyName);
     if (!Success)
         goto fail2;
diff --git a/src/xen/xen.rc b/src/xen/xen.rc
index 51db47a..95d94b6 100644
--- a/src/xen/xen.rc
+++ b/src/xen/xen.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XEN"
diff --git a/src/xenbus.inf b/src/xenbus.inf
index 7f9370f..7ece951 100644
--- a/src/xenbus.inf
+++ b/src/xenbus.inf
@@ -32,7 +32,7 @@
 Signature="$Windows NT$" 
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xenbus.cat
 DriverVer=01/01/1900,0.0.0.0
 
@@ -58,13 +58,13 @@ xenfilt.sys
 xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xenbus_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_C000&SUBSYS_C0005853&REV_01
+%XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_@VENDOR_DEVICE_ID@&SUBSYS_@VENDOR_DEVICE_ID@5853&REV_01
 %XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_0002
 %XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_0001
 
@@ -118,7 +118,7 @@ HKR,,CoInstallers32,0x00010000,"xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@" 
+Vendor="@VENDOR_NAME@" 
 DiskDesc="@PRODUCT_NAME@ PV Bus Package" 
 XenBusDesc="@PRODUCT_NAME@ PV Bus"
 XenFiltDesc="@PRODUCT_NAME@ Generic Bus Filter"
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 0a516a4..354438f 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -39,6 +39,7 @@
 #include <xen.h>
 
 #include <pvdevice_interface.h>
+#include <version.h>
 
 #include "names.h"
 #include "registry.h"
@@ -479,7 +480,8 @@ __FdoSetVendorName(
 
     status = RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
-                                "XS%04X",
+                                "%s%04X",
+                                VENDOR_PREFIX_STR,
                                 DeviceID);
     ASSERT(NT_SUCCESS(status));
 
diff --git a/src/xenbus/xenbus.rc b/src/xenbus/xenbus.rc
index c3ec266..9248d87 100644
--- a/src/xenbus/xenbus.rc
+++ b/src/xenbus/xenbus.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENBUS"
diff --git a/src/xenfilt/xenfilt.rc b/src/xenfilt/xenfilt.rc
index 69077d0..4949492 100644
--- a/src/xenfilt/xenfilt.rc
+++ b/src/xenfilt/xenfilt.rc
@@ -39,7 +39,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENFILT"
diff --git a/vs2012/xen/xen.vcxproj b/vs2012/xen/xen.vcxproj
index 0ffb844..c5f34d6 100644
--- a/vs2012/xen/xen.vcxproj
+++ b/vs2012/xen/xen.vcxproj
@@ -21,18 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;..\..\src\common;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command> echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\..\include\version.h</Outputs>
-      <Inputs>..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XEN";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2012/xenbus/xenbus.vcxproj b/vs2012/xenbus/xenbus.vcxproj
index b4fe992..f5692eb 100644
--- a/vs2012/xenbus/xenbus.vcxproj
+++ b/vs2012/xenbus/xenbus.vcxproj
@@ -21,18 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;..\..\src\common;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenbus.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2012\xenbus.inf"
-      </Command>
-      <Outputs>..\..\vs2012\xenbus.inf</Outputs>
-      <Inputs>..\..\src\xenbus.inf</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENBUS";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xen/xen.vcxproj b/vs2013/xen/xen.vcxproj
index 9330d8d..fd5a471 100644
--- a/vs2013/xen/xen.vcxproj
+++ b/vs2013/xen/xen.vcxproj
@@ -22,16 +22,8 @@
     <EnableInf2cat>false</EnableInf2cat>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
   </PropertyGroup>
   <ItemDefinitionGroup>
-      <CustomBuildStep>
-        <Command> echo "Build version header"
-            powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-        </Command>
-        <Outputs>..\..\include\version.h</Outputs>
-        <Inputs>..\..\include\version.hx</Inputs>
-      </CustomBuildStep>
     <ClCompile>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XEN";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/vs2013/xenbus/xenbus.vcxproj b/vs2013/xenbus/xenbus.vcxproj
index f6e0575..d53ce0e 100644
--- a/vs2013/xenbus/xenbus.vcxproj
+++ b/vs2013/xenbus/xenbus.vcxproj
@@ -22,16 +22,8 @@
     <EnableInf2cat>false</EnableInf2cat>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
-    <CustomBuildBeforeTargets>StampInf</CustomBuildBeforeTargets>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-        <Command>echo "Build Inf"
-            powershell -Command "(Get-Content ..\..\src\xenbus.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2013\xenbus.inf"
-        </Command>
-        <Outputs>..\..\vs2013\xenbus.inf</Outputs>
-        <Inputs>..\..\src\xenbus.inf</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENBUS";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;..\..\src\common;</AdditionalIncludeDirectories>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:26:04 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:26:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZahf-0007tE-NO; Wed, 09 Sep 2015 08:26:03 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZahe-0007sq-DP
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:26:02 +0000
Received: from [85.158.137.68] by server-13.bemta-3.messagelabs.com id
	DC/93-00536-91DEFE55; Wed, 09 Sep 2015 08:26:01 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-2.tower-31.messagelabs.com!1441787159!11493506!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25661 invoked from network); 9 Sep 2015 08:26:00 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-2.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:26:00 -0000
Received: by wiclk2 with SMTP id lk2so12355732wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:25:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=RDImfoqb/OQmhTZhhxoOs8NZQ67YhTgdR0cbGFV7J1Q=;
	b=G/Fg7XZfBhfEEATYJxrl31j5GIPS3LfVPI9Rwf1fvzsMpQF4vGDw5OQvVfYsX7TVME
	78DC0yMg+0vEluZ/6fAu3thxuLVR1m9koJIVwh8D2hnPZw02QfEiY2/35bmTbQCxQIx0
	KlMJazIu9yDev3JkT2UZ9+lML6EF213fSzRw7X2CzgJcJTsLAyQYf2Mrc+kiDVxFv4YE
	If6EdTPKkalMa/FPtAutXUX3R6h3FjnC4Misf2COFQORRytyejxcM3rMGpWFnTFtpSy+
	Tbl6fkRnVTa68EZoS9e/4Sb1pY+uOQnwWUD6BFSE8530rARYvWA9GV+Kr8uQTWjqWzti
	XwIA==
X-Received: by 10.180.82.233 with SMTP id l9mr51871771wiy.71.1441787159603;
	Wed, 09 Sep 2015 01:25:59 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	lh3sm8911652wjc.44.2015.09.09.01.25.58
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:25:58 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:25:42 +0100
Message-Id: <1441787142-17280-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENBUS package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xenbus.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 96 ++++++++++++++++++++++++++++++++++++++++----
 include/version.hx           | 54 -------------------------
 src/coinst/coinst.c          | 10 ++---
 src/xen/xen.rc               |  2 +-
 src/xenbus.inf               |  8 ++--
 src/xenbus/fdo.c             |  4 +-
 src/xenbus/xenbus.rc         |  2 +-
 src/xenfilt/xenfilt.rc       |  2 +-
 vs2012/xen/xen.vcxproj       |  8 ----
 vs2012/xenbus/xenbus.vcxproj |  8 ----
 vs2013/xen/xen.vcxproj       |  8 ----
 vs2013/xenbus/xenbus.vcxproj |  8 ----
 12 files changed, 103 insertions(+), 107 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index 3bccc62..59c2626 100755
--- a/build.py
+++ b/build.py
@@ -24,6 +24,74 @@ def next_build_number():
     return build_number
 
 
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -330,11 +398,11 @@ if __name__ == '__main__':
     driver = 'xenbus'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
-    
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
+
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -346,13 +414,27 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        print("VENDOR_DEVICE_ID\t'%s'" % os.environ['VENDOR_DEVICE_ID'])
+
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index 4b7351d..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * *   Redistributions of source code must retain the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above
- *     copyright notice, this list of conditions and the
- *     following disclaimer in the documentation and/or other
- *     materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
diff --git a/src/coinst/coinst.c b/src/coinst/coinst.c
index 09ef847..5cdd060 100644
--- a/src/coinst/coinst.c
+++ b/src/coinst/coinst.c
@@ -365,10 +365,8 @@ fail1:
     return FALSE;
 }
 
-#define PLATFORM_DEVICE_0001_NAME       "VEN_5853&DEV_0001"
-#define PLATFORM_DEVICE_0002_NAME       "VEN_5853&DEV_0002"
-
-#define XENSERVER_VENDOR_DEVICE_NAME    "VEN_5853&DEV_C000"
+#define XEN_PLATFORM_PCI_DEVICE_STR         "VEN_5853&DEV_0001"
+#define XENSERVER_PLATFORM_PCI_DEVICE_STR   "VEN_5853&DEV_0002"
 
 static BOOLEAN
 OpenDeviceKey(
@@ -669,7 +667,7 @@ MatchExistingDriver(
 
     // Look for a legacy platform device
     Success = GetDeviceKeyName("PCI",
-                               PLATFORM_DEVICE_0001_NAME,
+                               XEN_PLATFORM_PCI_DEVICE_STR,
                                &DeviceKeyName);
     if (!Success)
         goto fail1;
@@ -678,7 +676,7 @@ MatchExistingDriver(
         goto found;
 
     Success = GetDeviceKeyName("PCI",
-                               PLATFORM_DEVICE_0002_NAME,
+                               XENSERVER_PLATFORM_PCI_DEVICE_STR,
                                &DeviceKeyName);
     if (!Success)
         goto fail2;
diff --git a/src/xen/xen.rc b/src/xen/xen.rc
index 51db47a..95d94b6 100644
--- a/src/xen/xen.rc
+++ b/src/xen/xen.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XEN"
diff --git a/src/xenbus.inf b/src/xenbus.inf
index 7f9370f..7ece951 100644
--- a/src/xenbus.inf
+++ b/src/xenbus.inf
@@ -32,7 +32,7 @@
 Signature="$Windows NT$" 
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xenbus.cat
 DriverVer=01/01/1900,0.0.0.0
 
@@ -58,13 +58,13 @@ xenfilt.sys
 xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xenbus_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_C000&SUBSYS_C0005853&REV_01
+%XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_@VENDOR_DEVICE_ID@&SUBSYS_@VENDOR_DEVICE_ID@5853&REV_01
 %XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_0002
 %XenBusDesc%		=XenBus_Inst,	PCI\VEN_5853&DEV_0001
 
@@ -118,7 +118,7 @@ HKR,,CoInstallers32,0x00010000,"xenbus_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@" 
+Vendor="@VENDOR_NAME@" 
 DiskDesc="@PRODUCT_NAME@ PV Bus Package" 
 XenBusDesc="@PRODUCT_NAME@ PV Bus"
 XenFiltDesc="@PRODUCT_NAME@ Generic Bus Filter"
diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 0a516a4..354438f 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -39,6 +39,7 @@
 #include <xen.h>
 
 #include <pvdevice_interface.h>
+#include <version.h>
 
 #include "names.h"
 #include "registry.h"
@@ -479,7 +480,8 @@ __FdoSetVendorName(
 
     status = RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
-                                "XS%04X",
+                                "%s%04X",
+                                VENDOR_PREFIX_STR,
                                 DeviceID);
     ASSERT(NT_SUCCESS(status));
 
diff --git a/src/xenbus/xenbus.rc b/src/xenbus/xenbus.rc
index c3ec266..9248d87 100644
--- a/src/xenbus/xenbus.rc
+++ b/src/xenbus/xenbus.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENBUS"
diff --git a/src/xenfilt/xenfilt.rc b/src/xenfilt/xenfilt.rc
index 69077d0..4949492 100644
--- a/src/xenfilt/xenfilt.rc
+++ b/src/xenfilt/xenfilt.rc
@@ -39,7 +39,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENFILT"
diff --git a/vs2012/xen/xen.vcxproj b/vs2012/xen/xen.vcxproj
index 0ffb844..c5f34d6 100644
--- a/vs2012/xen/xen.vcxproj
+++ b/vs2012/xen/xen.vcxproj
@@ -21,18 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;..\..\src\common;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command> echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\..\include\version.h</Outputs>
-      <Inputs>..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XEN";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2012/xenbus/xenbus.vcxproj b/vs2012/xenbus/xenbus.vcxproj
index b4fe992..f5692eb 100644
--- a/vs2012/xenbus/xenbus.vcxproj
+++ b/vs2012/xenbus/xenbus.vcxproj
@@ -21,18 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;..\..\src\common;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenbus.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2012\xenbus.inf"
-      </Command>
-      <Outputs>..\..\vs2012\xenbus.inf</Outputs>
-      <Inputs>..\..\src\xenbus.inf</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENBUS";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xen/xen.vcxproj b/vs2013/xen/xen.vcxproj
index 9330d8d..fd5a471 100644
--- a/vs2013/xen/xen.vcxproj
+++ b/vs2013/xen/xen.vcxproj
@@ -22,16 +22,8 @@
     <EnableInf2cat>false</EnableInf2cat>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
   </PropertyGroup>
   <ItemDefinitionGroup>
-      <CustomBuildStep>
-        <Command> echo "Build version header"
-            powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-        </Command>
-        <Outputs>..\..\include\version.h</Outputs>
-        <Inputs>..\..\include\version.hx</Inputs>
-      </CustomBuildStep>
     <ClCompile>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XEN";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/vs2013/xenbus/xenbus.vcxproj b/vs2013/xenbus/xenbus.vcxproj
index f6e0575..d53ce0e 100644
--- a/vs2013/xenbus/xenbus.vcxproj
+++ b/vs2013/xenbus/xenbus.vcxproj
@@ -22,16 +22,8 @@
     <EnableInf2cat>false</EnableInf2cat>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
-    <CustomBuildBeforeTargets>StampInf</CustomBuildBeforeTargets>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-        <Command>echo "Build Inf"
-            powershell -Command "(Get-Content ..\..\src\xenbus.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2013\xenbus.inf"
-        </Command>
-        <Outputs>..\..\vs2013\xenbus.inf</Outputs>
-        <Inputs>..\..\src\xenbus.inf</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENBUS";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;..\..\src\common;</AdditionalIncludeDirectories>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:26:42 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:26:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaiI-00081r-0X; Wed, 09 Sep 2015 08:26:42 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZaiG-000814-1a
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:26:40 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	D2/17-06179-F3DEFE55; Wed, 09 Sep 2015 08:26:39 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441787198!26208172!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3198 invoked from network); 9 Sep 2015 08:26:38 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:26:38 -0000
Received: by wicfx3 with SMTP id fx3so147331013wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:26:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=7DUy9urcbFrTUv7IqUtZXjvdJZIZmq3pzLatWs/08HA=;
	b=Lm+/dN9Hd0vWd6EzMGJBDASgaOdYMaq0/UXMYye2xrmrPUkpHMyoSxyQy+aBb5P8mg
	VrDSVMCbyJChA8vcwnj1b77GGuFfd0crOjXw6SJHvhoo/PXY8BEWNyAWbrueZSHTfKwX
	KZ0v5AEJUFQmhaCFHAsXxqBU6SLaWz/WscRUGLswwVdb0WfGnwfCIPFhLjwhKFOkSwHz
	gx/xQJ9PctahlE7eRsAa7OXRPqMaxwe/ZRsYE8uTWGaEM5hPGmnvHSHTTu8Cw/LAj9ew
	fBewm+DUeMaSEaTqKLQDy1/q/Q2yBxA4d0rJ/4mOnWVTRkiyElu6uVBJX5VEI7KVGm13
	qkNg==
X-Received: by 10.194.82.167 with SMTP id j7mr55407130wjy.123.1441787197983;
	Wed, 09 Sep 2015 01:26:37 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	gt10sm2551790wib.20.2015.09.09.01.26.37
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:26:37 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:26:22 +0100
Message-Id: <1441787182-12744-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENVIF package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xenvif.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 91 +++++++++++++++++++++++++++++++++++++++++---
 include/version.hx           | 55 --------------------------
 src/xenvif.inf               | 12 +++---
 src/xenvif/fdo.c             |  4 +-
 src/xenvif/xenvif.rc         |  2 +-
 vs2012/xenvif/xenvif.vcxproj | 10 -----
 vs2013/xenvif/xenvif.vcxproj | 10 -----
 7 files changed, 95 insertions(+), 89 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index 0945b1c..bdb0e3c 100755
--- a/build.py
+++ b/build.py
@@ -24,6 +24,75 @@ def next_build_number():
     return build_number
 
 
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -329,11 +398,11 @@ if __name__ == '__main__':
     driver = 'xenvif'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -345,13 +414,23 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index e3863f3..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
diff --git a/src/xenvif.inf b/src/xenvif.inf
index 727fbcc..3edd405 100644
--- a/src/xenvif.inf
+++ b/src/xenvif.inf
@@ -33,7 +33,7 @@
 Signature="$Windows NT$" 
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xenvif.cat
 DriverVer=01/01/1900,0.0.0.0
 
@@ -52,15 +52,15 @@ xenvif_coinst.dll=0,,
 xenvif_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xenvif_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XSC000&DEV_VIF&REV_08000009
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XS0001&DEV_VIF&REV_08000009
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XS0002&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VIF&REV_08000009
 
 [XenVif_Inst] 
 CopyFiles=XenVif_Copyfiles
@@ -97,7 +97,7 @@ HKR,,CoInstallers32,0x00010000,"xenvif_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@"
+Vendor="@VENDOR_NAME@"
 DiskDesc="@PRODUCT_NAME@ PV Network Class Package"
 XenVifDesc="@PRODUCT_NAME@ PV Network Class"
 
diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index c4c8052..67916d6 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -42,6 +42,7 @@
 #include <gnttab_interface.h>
 #include <suspend_interface.h>
 #include <unplug_interface.h>
+#include <version.h>
 
 #include "driver.h"
 #include "registry.h"
@@ -419,7 +420,8 @@ __FdoSetVendorName(
 
     status = RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
-                                "XS%04X",
+                                "%s%04X",
+                                VENDOR_PREFIX_STR,
                                 DeviceID);
     ASSERT(NT_SUCCESS(status));
 }
diff --git a/src/xenvif/xenvif.rc b/src/xenvif/xenvif.rc
index 6d8e820..55aedb1 100644
--- a/src/xenvif/xenvif.rc
+++ b/src/xenvif/xenvif.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENVIF"
diff --git a/vs2012/xenvif/xenvif.vcxproj b/vs2012/xenvif/xenvif.vcxproj
index 13be8a2..e3df309 100644
--- a/vs2012/xenvif/xenvif.vcxproj
+++ b/vs2012/xenvif/xenvif.vcxproj
@@ -21,20 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenvif.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xenvif.inf"
-      echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\xenvif.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xenvif.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENVIF";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xenvif/xenvif.vcxproj b/vs2013/xenvif/xenvif.vcxproj
index 19ac1ed..61265a2 100644
--- a/vs2013/xenvif/xenvif.vcxproj
+++ b/vs2013/xenvif/xenvif.vcxproj
@@ -20,20 +20,10 @@
   <PropertyGroup>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenvif.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xenvif.inf"
-      echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\xenvif.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xenvif.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XENVIF";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:26:42 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:26:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaiI-00081r-0X; Wed, 09 Sep 2015 08:26:42 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZaiG-000814-1a
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:26:40 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	D2/17-06179-F3DEFE55; Wed, 09 Sep 2015 08:26:39 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1441787198!26208172!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3198 invoked from network); 9 Sep 2015 08:26:38 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:26:38 -0000
Received: by wicfx3 with SMTP id fx3so147331013wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:26:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=7DUy9urcbFrTUv7IqUtZXjvdJZIZmq3pzLatWs/08HA=;
	b=Lm+/dN9Hd0vWd6EzMGJBDASgaOdYMaq0/UXMYye2xrmrPUkpHMyoSxyQy+aBb5P8mg
	VrDSVMCbyJChA8vcwnj1b77GGuFfd0crOjXw6SJHvhoo/PXY8BEWNyAWbrueZSHTfKwX
	KZ0v5AEJUFQmhaCFHAsXxqBU6SLaWz/WscRUGLswwVdb0WfGnwfCIPFhLjwhKFOkSwHz
	gx/xQJ9PctahlE7eRsAa7OXRPqMaxwe/ZRsYE8uTWGaEM5hPGmnvHSHTTu8Cw/LAj9ew
	fBewm+DUeMaSEaTqKLQDy1/q/Q2yBxA4d0rJ/4mOnWVTRkiyElu6uVBJX5VEI7KVGm13
	qkNg==
X-Received: by 10.194.82.167 with SMTP id j7mr55407130wjy.123.1441787197983;
	Wed, 09 Sep 2015 01:26:37 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	gt10sm2551790wib.20.2015.09.09.01.26.37
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:26:37 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:26:22 +0100
Message-Id: <1441787182-12744-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENVIF package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xenvif.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 91 +++++++++++++++++++++++++++++++++++++++++---
 include/version.hx           | 55 --------------------------
 src/xenvif.inf               | 12 +++---
 src/xenvif/fdo.c             |  4 +-
 src/xenvif/xenvif.rc         |  2 +-
 vs2012/xenvif/xenvif.vcxproj | 10 -----
 vs2013/xenvif/xenvif.vcxproj | 10 -----
 7 files changed, 95 insertions(+), 89 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index 0945b1c..bdb0e3c 100755
--- a/build.py
+++ b/build.py
@@ -24,6 +24,75 @@ def next_build_number():
     return build_number
 
 
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -329,11 +398,11 @@ if __name__ == '__main__':
     driver = 'xenvif'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -345,13 +414,23 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index e3863f3..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
diff --git a/src/xenvif.inf b/src/xenvif.inf
index 727fbcc..3edd405 100644
--- a/src/xenvif.inf
+++ b/src/xenvif.inf
@@ -33,7 +33,7 @@
 Signature="$Windows NT$" 
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xenvif.cat
 DriverVer=01/01/1900,0.0.0.0
 
@@ -52,15 +52,15 @@ xenvif_coinst.dll=0,,
 xenvif_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xenvif_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XSC000&DEV_VIF&REV_08000009
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XS0001&DEV_VIF&REV_08000009
-%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_XS0002&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_VIF&REV_08000009
+%XenVifDesc%		=XenVif_Inst,	XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_VIF&REV_08000009
 
 [XenVif_Inst] 
 CopyFiles=XenVif_Copyfiles
@@ -97,7 +97,7 @@ HKR,,CoInstallers32,0x00010000,"xenvif_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@"
+Vendor="@VENDOR_NAME@"
 DiskDesc="@PRODUCT_NAME@ PV Network Class Package"
 XenVifDesc="@PRODUCT_NAME@ PV Network Class"
 
diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index c4c8052..67916d6 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -42,6 +42,7 @@
 #include <gnttab_interface.h>
 #include <suspend_interface.h>
 #include <unplug_interface.h>
+#include <version.h>
 
 #include "driver.h"
 #include "registry.h"
@@ -419,7 +420,8 @@ __FdoSetVendorName(
 
     status = RtlStringCbPrintfA(Fdo->VendorName,
                                 MAXNAMELEN,
-                                "XS%04X",
+                                "%s%04X",
+                                VENDOR_PREFIX_STR,
                                 DeviceID);
     ASSERT(NT_SUCCESS(status));
 }
diff --git a/src/xenvif/xenvif.rc b/src/xenvif/xenvif.rc
index 6d8e820..55aedb1 100644
--- a/src/xenvif/xenvif.rc
+++ b/src/xenvif/xenvif.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENVIF"
diff --git a/vs2012/xenvif/xenvif.vcxproj b/vs2012/xenvif/xenvif.vcxproj
index 13be8a2..e3df309 100644
--- a/vs2012/xenvif/xenvif.vcxproj
+++ b/vs2012/xenvif/xenvif.vcxproj
@@ -21,20 +21,10 @@
     <IncludePath>..\..\include;..\..\include\xen;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenvif.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xenvif.inf"
-      echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\xenvif.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xenvif.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENVIF";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xenvif/xenvif.vcxproj b/vs2013/xenvif/xenvif.vcxproj
index 19ac1ed..61265a2 100644
--- a/vs2013/xenvif/xenvif.vcxproj
+++ b/vs2013/xenvif/xenvif.vcxproj
@@ -20,20 +20,10 @@
   <PropertyGroup>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-      powershell -Command "(Get-Content ..\..\src\xenvif.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xenvif.inf"
-      echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\xenvif.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xenvif.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <AdditionalIncludeDirectories>$(WindowsSdkDir)\include\km;..\..\include;..\..\include\xen;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XENVIF";POOL_NX_OPTIN=1;NT_PROCESSOR_GROUPS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:27:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:27:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaiq-00087n-BN; Wed, 09 Sep 2015 08:27:16 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZaio-00086w-Fo
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:27:14 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	53/03-18744-16DEFE55; Wed, 09 Sep 2015 08:27:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441787231!48033567!1
X-Originating-IP: [209.85.212.180]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8865 invoked from network); 9 Sep 2015 08:27:11 -0000
Received: from mail-wi0-f180.google.com (HELO mail-wi0-f180.google.com)
	(209.85.212.180)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:27:11 -0000
Received: by wicge5 with SMTP id ge5so145069091wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=/+6tAtT6G6ae/ZpV7uKUN20LFMoTI7/cA2kumGvVoJA=;
	b=m+QTPauyofTcncP3I7pvzezHuReIsCzc/CFp3s9vptpARsXkqWXGVDv5yIBS9a1M+A
	9bIalnVepGpr//dDTzO4oNEfE0hAKwnmqc0gX7IpDhnbTUoLqT6ORFdtoB5edpscsP4g
	ntARRoh/u1+jd+hmWUNGRqcqJ8qz7ApEEmTO8jXIBYEyOT0J7wUZETZfxsGT52Zmn2uJ
	h7M1j3iyRFQuFaKRqMmbpoQ91LDnGsHB/jNc2SxV2deuvLuxbhfJrV60S2WbsQ062z/C
	o2gOxU8qik+3SZZMEQamYE7tQdTh1NhCR1MzCxw0FfZ67zqxS0jC/XYdR8+5vBDiNXov
	r0QA==
X-Received: by 10.180.37.164 with SMTP id z4mr53565313wij.30.1441787231617;
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	im10sm8916812wjb.40.2015.09.09.01.27.10
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:26:59 +0100
Message-Id: <1441787219-5632-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENNET package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xennet.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 92 +++++++++++++++++++++++++++++++++++++++++---
 include/version.hx           | 55 --------------------------
 src/xennet.inf               | 12 +++---
 src/xennet/adapter.c         |  4 +-
 src/xennet/xennet.rc         |  2 +-
 vs2012/xennet/xennet.vcxproj | 12 +-----
 vs2013/xennet/xennet.vcxproj | 10 -----
 7 files changed, 96 insertions(+), 91 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index a13296e..37438a3 100755
--- a/build.py
+++ b/build.py
@@ -23,6 +23,76 @@ def next_build_number():
 
     return build_number
 
+
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -329,11 +399,11 @@ if __name__ == '__main__':
     driver = 'xennet'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -345,13 +415,23 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index e3863f3..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
diff --git a/src/xennet.inf b/src/xennet.inf
index e94b07e..7e9d9e6 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -32,7 +32,7 @@
 Signature="$Windows NT$" 
 Class=Net
 ClassGUID={4d36e972-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xennet.cat
 DriverVer=01/01/1900,0.0.0.0
 BootCritical=1
@@ -55,15 +55,15 @@ xennet.sys
 xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xennet_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XSC000&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XS0001&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XS0002&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000002
 
 [XenNet_Inst] 
 Characteristics=0x84
@@ -189,7 +189,7 @@ HKR,,CoInstallers32,0x00010000,"xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@"
+Vendor="@VENDOR_NAME@"
 DiskDesc="@PRODUCT_NAME@ PV Network Device Package" 
 XenNetDesc="@PRODUCT_NAME@ PV Network Device"
 IPChecksumOffloadIPv4="IPv4 Checksum Offload"
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index af958b6..a1460c7 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -1364,10 +1364,10 @@ AdapterQueryInformation(
         break;
 
     case OID_GEN_VENDOR_DESCRIPTION:
-        BytesNeeded = (ULONG)strlen(COMPANY_NAME_STR) + 1;
+        BytesNeeded = (ULONG)strlen(VENDOR_NAME_STR) + 1;
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
-                                  COMPANY_NAME_STR,
+                                  VENDOR_NAME_STR,
                                   BytesNeeded,
                                   &BytesWritten);
         break;
diff --git a/src/xennet/xennet.rc b/src/xennet/xennet.rc
index ffa9802..3276fc8 100644
--- a/src/xennet/xennet.rc
+++ b/src/xennet/xennet.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENNET"
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index 884d938..8c1862e 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -25,22 +25,12 @@
 	<PropertyGroup>
 		<IncludePath>..\..\include;$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
-        <EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
+		<EnableInf2cat>false</EnableInf2cat>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 	
     <ItemDefinitionGroup>
-        <CustomBuildStep>
-            <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xennet.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xennet.inf"
-                echo "Build version header"
-                powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-            </Command>
-            <Outputs>..\xennet.inf;..\..\include\version.h</Outputs>
-            <Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
-        </CustomBuildStep>
 		<ClCompile>
 			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index 020322b..0aa30a6 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -59,20 +59,10 @@
     <IncludePath>..\..\include;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xennet.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xennet.inf"
-                echo "Build version header"
-                powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-            </Command>
-      <Outputs>..\xennet.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:27:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:27:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaiq-00087n-BN; Wed, 09 Sep 2015 08:27:16 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZaio-00086w-Fo
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:27:14 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	53/03-18744-16DEFE55; Wed, 09 Sep 2015 08:27:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-27.messagelabs.com!1441787231!48033567!1
X-Originating-IP: [209.85.212.180]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8865 invoked from network); 9 Sep 2015 08:27:11 -0000
Received: from mail-wi0-f180.google.com (HELO mail-wi0-f180.google.com)
	(209.85.212.180)
	by server-3.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:27:11 -0000
Received: by wicge5 with SMTP id ge5so145069091wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=/+6tAtT6G6ae/ZpV7uKUN20LFMoTI7/cA2kumGvVoJA=;
	b=m+QTPauyofTcncP3I7pvzezHuReIsCzc/CFp3s9vptpARsXkqWXGVDv5yIBS9a1M+A
	9bIalnVepGpr//dDTzO4oNEfE0hAKwnmqc0gX7IpDhnbTUoLqT6ORFdtoB5edpscsP4g
	ntARRoh/u1+jd+hmWUNGRqcqJ8qz7ApEEmTO8jXIBYEyOT0J7wUZETZfxsGT52Zmn2uJ
	h7M1j3iyRFQuFaKRqMmbpoQ91LDnGsHB/jNc2SxV2deuvLuxbhfJrV60S2WbsQ062z/C
	o2gOxU8qik+3SZZMEQamYE7tQdTh1NhCR1MzCxw0FfZ67zqxS0jC/XYdR8+5vBDiNXov
	r0QA==
X-Received: by 10.180.37.164 with SMTP id z4mr53565313wij.30.1441787231617;
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	im10sm8916812wjb.40.2015.09.09.01.27.10
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:27:11 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:26:59 +0100
Message-Id: <1441787219-5632-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENNET package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xennet.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 build.py                     | 92 +++++++++++++++++++++++++++++++++++++++++---
 include/version.hx           | 55 --------------------------
 src/xennet.inf               | 12 +++---
 src/xennet/adapter.c         |  4 +-
 src/xennet/xennet.rc         |  2 +-
 vs2012/xennet/xennet.vcxproj | 12 +-----
 vs2013/xennet/xennet.vcxproj | 10 -----
 7 files changed, 96 insertions(+), 91 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/build.py b/build.py
index a13296e..37438a3 100755
--- a/build.py
+++ b/build.py
@@ -23,6 +23,76 @@ def next_build_number():
 
     return build_number
 
+
+def make_header():
+    now = datetime.datetime.now()
+
+    file = open('include\\version.h', 'w')
+
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
+    file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
+    file.write('\n')
+
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
+    file.write('\n')
+
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
+    file.write('\n')
+
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
+    file.write('\n')
+
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
+    file.write('\n')
+
+    file.close()
+
+
+def copy_inf(vs, name):
+    src = open('src\\%s.inf' % name, 'r')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
+
+    for line in src:
+        line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
+        line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
+        line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
+        line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
+        line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
+        dst.write(line)
+
+    dst.close()
+    src.close()
+
+
 def get_expired_symbols(name, age = 30):
     path = os.path.join(os.environ['SYMBOL_SERVER'], '000Admin\\history.txt')
 
@@ -329,11 +399,11 @@ if __name__ == '__main__':
     driver = 'xennet'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -345,13 +415,23 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
+
+    make_header()
+    copy_inf(vs, driver)
+
     symstore_del(driver, 30)
 
     if vs=='vs2012':
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index e3863f3..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
diff --git a/src/xennet.inf b/src/xennet.inf
index e94b07e..7e9d9e6 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -32,7 +32,7 @@
 Signature="$Windows NT$" 
 Class=Net
 ClassGUID={4d36e972-e325-11ce-bfc1-08002be10318}
-Provider=%Company% 
+Provider=%Vendor% 
 CatalogFile=xennet.cat
 DriverVer=01/01/1900,0.0.0.0
 BootCritical=1
@@ -55,15 +55,15 @@ xennet.sys
 xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@MICRO_VERSION@_@BUILD_NUMBER@.dll,xennet_coinst.dll
 
 [Manufacturer] 
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		Section		DeviceID
 ; -----------		-------		--------
 
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XSC000&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XS0001&DEV_NET&REV_08000002
-%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_XS0002&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0001&DEV_NET&REV_08000002
+%XenNetDesc%		=XenNet_Inst,	XENVIF\VEN_@VENDOR_PREFIX@0002&DEV_NET&REV_08000002
 
 [XenNet_Inst] 
 Characteristics=0x84
@@ -189,7 +189,7 @@ HKR,,CoInstallers32,0x00010000,"xennet_coinst_@MAJOR_VERSION@_@MINOR_VERSION@_@M
 
 [Strings] 
 
-Company="@COMPANY_NAME@"
+Vendor="@VENDOR_NAME@"
 DiskDesc="@PRODUCT_NAME@ PV Network Device Package" 
 XenNetDesc="@PRODUCT_NAME@ PV Network Device"
 IPChecksumOffloadIPv4="IPv4 Checksum Offload"
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index af958b6..a1460c7 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -1364,10 +1364,10 @@ AdapterQueryInformation(
         break;
 
     case OID_GEN_VENDOR_DESCRIPTION:
-        BytesNeeded = (ULONG)strlen(COMPANY_NAME_STR) + 1;
+        BytesNeeded = (ULONG)strlen(VENDOR_NAME_STR) + 1;
         ndisStatus = __CopyBuffer(Buffer,
                                   BufferLength,
-                                  COMPANY_NAME_STR,
+                                  VENDOR_NAME_STR,
                                   BytesNeeded,
                                   &BytesWritten);
         break;
diff --git a/src/xennet/xennet.rc b/src/xennet/xennet.rc
index ffa9802..3276fc8 100644
--- a/src/xennet/xennet.rc
+++ b/src/xennet/xennet.rc
@@ -40,7 +40,7 @@
 
 #include <version.h>
 
-#define	VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define	VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENNET"
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index 884d938..8c1862e 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -25,22 +25,12 @@
 	<PropertyGroup>
 		<IncludePath>..\..\include;$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
-        <EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
+		<EnableInf2cat>false</EnableInf2cat>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 	
     <ItemDefinitionGroup>
-        <CustomBuildStep>
-            <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xennet.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xennet.inf"
-                echo "Build version header"
-                powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-            </Command>
-            <Outputs>..\xennet.inf;..\..\include\version.h</Outputs>
-            <Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
-        </CustomBuildStep>
 		<ClCompile>
 			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index 020322b..0aa30a6 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -59,20 +59,10 @@
     <IncludePath>..\..\include;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xennet.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\xennet.inf"
-                echo "Build version header"
-                powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) | Set-Content ..\..\include\version.h"
-            </Command>
-      <Outputs>..\xennet.inf;..\..\include\version.h</Outputs>
-      <Inputs>..\..\src\xennet.inf;..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:28:00 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:28:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZajY-0008F8-NX; Wed, 09 Sep 2015 08:28:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZajX-0008Eq-61
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:27:59 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	C2/E4-16618-E8DEFE55; Wed, 09 Sep 2015 08:27:58 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441787276!48135310!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14176 invoked from network); 9 Sep 2015 08:27:56 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:27:56 -0000
Received: by wiclk2 with SMTP id lk2so12413348wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:27:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:mime-version:content-type
	:content-transfer-encoding;
	bh=beGxldlFkBoOeo3+MNaycdebNlj7odU0tdGHbU6aaX0=;
	b=LMWtcE1FLSsAnep9vHceJAjTj7fRiTsGwp0J/zWu33pQrQX70G8mht8Sw0punCpnUJ
	iM86vz5T+lCnAhlKHdbLIz9dJrp2bKsLhEdlr0YCCF9VxBhQso5STXuxMOf/9Qjr3sIL
	yCksmI7nT28XgUmv0NRk3MSRqML0NEVhwY0t7LEJBZhWkJiQSyRdGmEMxa7V2NeFtx8i
	kh9ui8bf49EDm85Kws3V+oe1aWp1h/AGDkumPU74P2oU7vp6DDPEUGc9QYbewrJ5sJ3o
	rfUaiEyFBVxLG+tATevibpcAPVa5FfimQzfa8R+ezHAOchnCnc85eoBIeqrpOJOYhloM
	ju+w==
X-Received: by 10.194.86.72 with SMTP id n8mr58321379wjz.119.1441787276169;
	Wed, 09 Sep 2015 01:27:56 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	bi6sm8954287wjc.25.2015.09.09.01.27.55
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:27:55 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:27:44 +0100
Message-Id: <1441787264-7724-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
Content-Length: 23295
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

VGhlIFhlblNlcnZlciBQViB2ZW5kb3IgcHJlZml4ICgnWFMnKSBhbmQgUENJIGRldmljZSAoQzAw
MCkgYXJlIHN0aWxsCmhhcmQtY29kZWQgaW50byB0aGUgWEVOVkJEIHBhY2thZ2UuIFRoZXNlIG5l
ZWQgdG8gYmUgc3RyaXBwZWQgb3V0IGFuZApyZXBsYWNlZCBieSB2YWx1ZXMgdGhhdCBjYW4gYmUg
Y3VzdG9taXplZCBhdCBidWlsZCB0aW1lLiBUaGlzIHBhdGNoIGRvZXMKdGhhdC4KClRoZSBwYXRj
aCBhbHNvIHJldmVydHMgdG8gYnVpbGRpbmcgdmVyc2lvbi5oIGFuZCBjdXN0b21pemluZyB4ZW52
YmQuaW5mCmRpcmVjdGx5IGluIGJ1aWxkLnB5LgoKU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50
IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAg
ICAgICAgfCAzMSArKysrKysrKysrLS0tLQogYnVpbGQucHkgICAgICAgICAgICAgICAgICAgICAg
IHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBpbmNsdWRl
L3ZlcnNpb24uaHggICAgICAgICAgICAgfCA1NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNy
Yy94ZW5jcnNoL3hlbmNyc2gucmMgICAgICAgICB8ICAyICstCiBzcmMveGVuZGlzay94ZW5kaXNr
LnJjICAgICAgICAgfCAgMiArLQogc3JjL3hlbnZiZC5pbmYgICAgICAgICAgICAgICAgIHwgMTIg
KysrLS0tCiBzcmMveGVudmJkL3hlbnZiZC5yYyAgICAgICAgICAgfCAgMiArLQogdnMyMDEyL3hl
bmNyc2gveGVuY3JzaC52Y3hwcm9qIHwgMTIgKy0tLS0tCiB2czIwMTMveGVuY3JzaC94ZW5jcnNo
LnZjeHByb2ogfCAxMiArLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyks
IDEwMCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3ZlcnNpb24uaHgK
CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDA5ZTlmNjUuLjg4
Y2M5N2EgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02LDE5
ICs2LDM0IEBAIHdobyB3aWxsIGFkdmlzZSB5b3Ugb24gdGhlIHByZWNpc2UgcHJvY2VkdXJlIHRo
ZXkgd2lzaCB0byB1c2UuCiAKIFdlIGFsc28gcmVxdWVzdCB5b3UgZm9sbG93IHRoZXNlIGJhc2lj
IGd1aWRlbGluZXM6CiAKLTEuICBNYWtlIHN1cmUgeW91IHRlc3QgeW91ciBjaGFuZ2VzIG9uIGJv
dGggMzItIGFuZCA2NC1iaXQgdmVyc2lvbnMgb2YgIFdpbmRvd3MuCisxLiAgTWFrZSBzdXJlIHlv
dSB0ZXN0IHlvdXIgY2hhbmdlcyBvbiBib3RoIGEgMzItIGFuZCA2NC1iaXQgdmVyc2lvbiBvZiBX
aW5kb3dzLgorICAgIChUaGUgbW9yZSB2ZXJzaW9ucyBvZiBXaW5kb3dzIHlvdSBjYW4gdGVzdCBv
biB0aGUgYmV0dGVyKS4KIAogMi4gIE1ha2Ugc3VyZSB5b3VyIGNoYW5nZXMgZG8gbm90IGludHJv
ZHVjZSBhbnkgbmV3IHByZWZhc3Qgd2FybmluZ3MuCiAKLTMuICBBbGwgc3VibWlzc2lvbnMgbXVz
dCBiZSBtYWRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkRldmVsb3BlcidzIENlcnRpZmljYXRl
Ci0gICAgb2YgT3JpZ2luIiAoREMpIGFuZCBzaG91bGQgaW5jbHVkZSBhIFNpZ25lZC1vZmYtYnk6
IGxpbmUuCiszLiAgTWFrZSBhIHBhdGNoIGF2YWlsYWJsZSB0byB0aGUgcmVsZXZhbnQgbWFpbnRh
aW5lciBpbiB0aGUgbGlzdC4gVXNlICdkaWZmIC11JworICAgIHRvIG1ha2UgdGhlIHBhdGNoIGVh
c3kgdG8gbWVyZ2UuIEJlIHByZXBhcmVkIHRvIGdldCB5b3VyIGNoYW5nZXMgc2VudCBiYWNrCisg
ICAgd2l0aCBzZWVtaW5nbHkgc2lsbHkgcmVxdWVzdHMgYWJvdXQgZm9ybWF0dGluZyBhbmQgdmFy
aWFibGUgbmFtZXMuIFRoZXNlCisgICAgYXJlbid0IGFzIHNpbGx5IGFzIHRoZXkgc2VlbS4gT25l
IGpvYiB0aGUgbWFpbnRhaW5lcnMgZG8gaXMgdG8ga2VlcCB0aGluZ3MKKyAgICBsb29raW5nIHRo
ZSBzYW1lLgogCi0yLiAgQWxsIFN1Ym1pc3Npb25zIHNob3VsZCB1c2UgVW5peCBsaW5lIGVuZGlu
Z3MgZm9yIGNvbnNpdGVuY3kgd2l0aCB0aGUgcmVzdCBvZgotICAgIHRoZSBYZW5TZXJ2ZXIgcHJv
amVjdC4KKyAgICBOT1RFIHRoYXQgYWxsIHNvdXJjZSBzaG91bGQgaGF2ZSBVbml4IGxpbmUgZW5k
aW5ncy4KIAotMy4gIEVhY2ggcGF0Y2ggc2hvdWxkIGluY2x1ZGUgYSBkZXNjcmlwdGl2ZSBjb21t
aXQgY29tbWVudCB0aGF0IGhlbHBzIHVuZGVyc3RhbmQKLSAgICB3aHkgdGhlIHBhdGNoIGlzIG5l
Y2Vzc2FyeSBhbmQgd2h5IGl0IHdvcmtzLiBUaGlzIHdpbGwgYmUgdXNlZCBib3RoIGZvcgotICAg
IGluaXRpYWwgcmV2aWV3IGFuZCBmb3IgbmV3IHBlb3BsZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUg
Y29kZSB3b3JrcyBsYXRlcgorICAgIFBMRUFTRSBzZWUgaHR0cDovL3dpa2kueGVuLm9yZy93aWtp
L1N1Ym1pdHRpbmdfWGVuX1BhdGNoZXMgZm9yIGhpbnRzIG9uIGhvdworICAgIHRvIHN1Ym1pdCBh
IHBhdGNoIGluIGEgc3VpdGFibGUgZm9ybS4gV2hpbHN0IHRoZSBQViBkcml2ZXIgc291cmNlCisg
ICAgcmVwb3NpdG9yaWVzIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZp
c29yIHNvdXJjZSwgd2Ugd2lsbAorICAgIGZvbGxvdyB0aGUgc2FtZSBnZW5lcmFsIHBhdGNoIHN1
Ym1pc3Npb24gYW5kIHJldmlldyBwcm9jZXNzLgorCisgICAgUExFQVNFIHRyeSB0byBpbmNsdWRl
IGFueSBjcmVkaXQgbGluZXMgeW91IHdhbnQgYWRkZWQgd2l0aCB0aGUgIHBhdGNoLiBJdAorICAg
IGF2b2lkcyBwZW9wbGUgYmVpbmcgbWlzc2VkIG9mZiBieSBtaXN0YWtlIGFuZCBtYWtlcyBpdCBl
YXNpZXIgdG8ga25vdyB3aG8KKyAgICB3YW50cyBhZGRpbmcgYW5kIHdobyBkb2Vzbid0LgorCisg
ICAgUExFQVNFIGRvY3VtZW50IGtub3duIGJ1Z3MuIElmIGl0IGRvZXNuJ3Qgd29yayBmb3IgZXZl
cnl0aGluZyBvciBkb2VzCisgICAgc29tZXRoaW5nIHZlcnkgb2RkIG9uY2UgYSBtb250aCBkb2N1
bWVudCBpdC4KKworICAgIFBMRUFTRSByZW1lbWJlciB0aGF0IHN1Ym1pc3Npb25zIG11c3QgYmUg
bWFkZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgIkRldmVsb3BlcidzIENlcnRpZmljYXRl
IG9mIE9yaWdpbiIgKERDTykgYW5kIHNob3VsZCBpbmNsdWRlIGEKKyAgICBTaWduZWQtb2ZmLWJ5
OiBsaW5lLgogCiA0LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgYW55
IGNoYW5nZXMgeW91IG1ha2UuIElmIHlvdSBkbyAKICAgICBjaGFuZ2VzIGF0IHdvcmsgeW91IG1h
eSBmaW5kIHlvdXIgZW1wbG95ZXIgb3ducyB0aGUgcGF0Y2hlcyBpbnN0ZWFkIG9mIApkaWZmIC0t
Z2l0IGEvYnVpbGQucHkgYi9idWlsZC5weQppbmRleCA3NWI5NjMxLi4xOGEzYzUyIDEwMDc1NQot
LS0gYS9idWlsZC5weQorKysgYi9idWlsZC5weQpAQCAtMjMsNiArMjMsNzYgQEAgZGVmIG5leHRf
YnVpbGRfbnVtYmVyKCk6CiAKICAgICByZXR1cm4gYnVpbGRfbnVtYmVyCiAKKworZGVmIG1ha2Vf
aGVhZGVyKCk6CisgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKworICAgIGZpbGUg
PSBvcGVuKCdpbmNsdWRlXFx2ZXJzaW9uLmgnLCAndycpCisKKyAgICBmaWxlLndyaXRlKCcjZGVm
aW5lIFZFTkRPUl9OQU1FX1NUUlx0XHQiJyArIG9zLmVudmlyb25bJ1ZFTkRPUl9OQU1FJ10gKyAn
IlxuJykKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIFZFTkRPUl9QUkVGSVhfU1RSXHQiJyArIG9z
LmVudmlyb25bJ1ZFTkRPUl9QUkVGSVgnXSArICciXG4nKQorCisgICAgaWYgJ1ZFTkRPUl9ERVZJ
Q0VfSUQnIGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICBmaWxlLndyaXRlKCcjZGVmaW5l
IFZFTkRPUl9ERVZJQ0VfSURfU1RSXHQiJyArIG9zLmVudmlyb25bJ1ZFTkRPUl9ERVZJQ0VfSUQn
XSArICciXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBQUk9EVUNUX05BTUVfU1RSXHQi
JyArIG9zLmVudmlyb25bJ1BST0RVQ1RfTkFNRSddICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgn
XG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBNQUpPUl9WRVJTSU9OXHRcdCcgKyBvcy5l
bnZpcm9uWydNQUpPUl9WRVJTSU9OJ10gKyAnXG4nKQorICAgIGZpbGUud3JpdGUoJyNkZWZpbmUg
TUFKT1JfVkVSU0lPTl9TVFJcdCInICsgb3MuZW52aXJvblsnTUFKT1JfVkVSU0lPTiddICsgJyJc
bicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBNSU5P
Ul9WRVJTSU9OXHRcdCcgKyBvcy5lbnZpcm9uWydNSU5PUl9WRVJTSU9OJ10gKyAnXG4nKQorICAg
IGZpbGUud3JpdGUoJyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9TVFJcdCInICsgb3MuZW52aXJvblsn
TUlOT1JfVkVSU0lPTiddICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmls
ZS53cml0ZSgnI2RlZmluZSBNSUNST19WRVJTSU9OXHRcdCcgKyBvcy5lbnZpcm9uWydNSUNST19W
RVJTSU9OJ10gKyAnXG4nKQorICAgIGZpbGUud3JpdGUoJyNkZWZpbmUgTUlDUk9fVkVSU0lPTl9T
VFJcdCInICsgb3MuZW52aXJvblsnTUlDUk9fVkVSU0lPTiddICsgJyJcbicpCisgICAgZmlsZS53
cml0ZSgnXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBCVUlMRF9OVU1CRVJcdFx0JyAr
IG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddICsgJ1xuJykKKyAgICBmaWxlLndyaXRlKCcjZGVm
aW5lIEJVSUxEX05VTUJFUl9TVFJcdCInICsgb3MuZW52aXJvblsnQlVJTERfTlVNQkVSJ10gKyAn
IlxuJykKKyAgICBmaWxlLndyaXRlKCdcbicpCisKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIFlF
QVJcdFx0XHQnICsgc3RyKG5vdy55ZWFyKSArICdcbicpCisgICAgZmlsZS53cml0ZSgnI2RlZmlu
ZSBZRUFSX1NUUlx0XHQiJyArIHN0cihub3cueWVhcikgKyAnIlxuJykKKyAgICBmaWxlLndyaXRl
KCdcbicpCisKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIE1PTlRIXHRcdFx0JyArIHN0cihub3cu
bW9udGgpICsgJ1xuJykKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIE1PTlRIX1NUUlx0XHQiJyAr
IHN0cihub3cubW9udGgpICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmls
ZS53cml0ZSgnI2RlZmluZSBEQVlcdFx0XHQnICsgc3RyKG5vdy5kYXkpICsgJ1xuJykKKyAgICBm
aWxlLndyaXRlKCcjZGVmaW5lIERBWV9TVFJcdFx0XHQiJyArIHN0cihub3cuZGF5KSArICciXG4n
KQorICAgIGZpbGUud3JpdGUoJ1xuJykKKworICAgIGZpbGUuY2xvc2UoKQorCisKK2RlZiBjb3B5
X2luZih2cywgbmFtZSk6CisgICAgc3JjID0gb3Blbignc3JjXFwlcy5pbmYnICUgbmFtZSwgJ3In
KQorICAgIGRzdCA9IG9wZW4oJyVzXFwlcy5pbmYnICUgKHZzLCBuYW1lKSwgJ3cnKQorCisgICAg
Zm9yIGxpbmUgaW4gc3JjOgorICAgICAgICBsaW5lID0gcmUuc3ViKCdATUFKT1JfVkVSU0lPTkAn
LCBvcy5lbnZpcm9uWydNQUpPUl9WRVJTSU9OJ10sIGxpbmUpCisgICAgICAgIGxpbmUgPSByZS5z
dWIoJ0BNSU5PUl9WRVJTSU9OQCcsIG9zLmVudmlyb25bJ01JTk9SX1ZFUlNJT04nXSwgbGluZSkK
KyAgICAgICAgbGluZSA9IHJlLnN1YignQE1JQ1JPX1ZFUlNJT05AJywgb3MuZW52aXJvblsnTUlD
Uk9fVkVSU0lPTiddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdAQlVJTERfTlVNQkVS
QCcsIG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUu
c3ViKCdAVkVORE9SX05BTUVAJywgb3MuZW52aXJvblsnVkVORE9SX05BTUUnXSwgbGluZSkKKyAg
ICAgICAgbGluZSA9IHJlLnN1YignQFZFTkRPUl9QUkVGSVhAJywgb3MuZW52aXJvblsnVkVORE9S
X1BSRUZJWCddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdAUFJPRFVDVF9OQU1FQCcs
IG9zLmVudmlyb25bJ1BST0RVQ1RfTkFNRSddLCBsaW5lKQorCisgICAgICAgIGlmIHJlLnNlYXJj
aCgnQFZFTkRPUl9ERVZJQ0VfSURAJywgbGluZSk6CisgICAgICAgICAgICBpZiAnVkVORE9SX0RF
VklDRV9JRCcgbm90IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCdAVkVORE9SX0RFVklDRV9JREAnLCBvcy5l
bnZpcm9uWydWRU5ET1JfREVWSUNFX0lEJ10sIGxpbmUpCisKKyAgICAgICAgZHN0LndyaXRlKGxp
bmUpCisKKyAgICBkc3QuY2xvc2UoKQorICAgIHNyYy5jbG9zZSgpCisKKwogZGVmIGdldF9leHBp
cmVkX3N5bWJvbHMobmFtZSwgYWdlID0gMzApOgogICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3Mu
ZW52aXJvblsnU1lNQk9MX1NFUlZFUiddLCAnMDAwQWRtaW5cXGhpc3RvcnkudHh0JykKIApAQCAt
MzI5LDExICszOTksMTEgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBkcml2ZXIg
PSAneGVudmJkJwogICAgIHZzID0gZ2V0VnNWZXJzaW9uKCkKIAotICAgIG9zLnV0aW1lKCdpbmNs
dWRlL3ZlcnNpb24uaHgnLCBOb25lKQotICAgIG9zLnV0aW1lKCdzcmMvJXMuaW5mJyAlIGRyaXZl
ciwgTm9uZSkKKyAgICBpZiAnVkVORE9SX05BTUUnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToK
KyAgICAgICAgb3MuZW52aXJvblsnVkVORE9SX05BTUUnXSA9ICdYZW4gUHJvamVjdCcKIAotICAg
IGlmICdDT01QQU5ZX05BTUUnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKLSAgICAgICAgb3Mu
ZW52aXJvblsnQ09NUEFOWV9OQU1FJ10gPSAnWGVuIFByb2plY3QnCisgICAgaWYgJ1ZFTkRPUl9Q
UkVGSVgnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgb3MuZW52aXJvblsnVkVO
RE9SX1BSRUZJWCddID0gJ1hQJwogCiAgICAgaWYgJ1BST0RVQ1RfTkFNRScgbm90IGluIG9zLmVu
dmlyb24ua2V5cygpOgogICAgICAgICBvcy5lbnZpcm9uWydQUk9EVUNUX05BTUUnXSA9ICdYZW4n
CkBAIC0zNDUsMTMgKzQxNSwyNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGlm
ICdCVUlMRF9OVU1CRVInIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKICAgICAgICAgb3MuZW52
aXJvblsnQlVJTERfTlVNQkVSJ10gPSBuZXh0X2J1aWxkX251bWJlcigpCiAKLSAgICBwcmludCgi
QlVJTERfTlVNQkVSPSVzIiAlIG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddKQotCiAgICAgaWYg
J0dJVF9SRVZJU0lPTicgaW4gb3MuZW52aXJvbi5rZXlzKCk6CiAgICAgICAgIHJldmlzaW9uID0g
b3BlbigncmV2aXNpb24nLCAndycpCiAgICAgICAgIHByaW50KG9zLmVudmlyb25bJ0dJVF9SRVZJ
U0lPTiddLCBmaWxlPXJldmlzaW9uKQogICAgICAgICByZXZpc2lvbi5jbG9zZSgpCiAKKyAgICBw
cmludCgiVkVORE9SX05BTUVcdFx0JyVzJyIgJSBvcy5lbnZpcm9uWydWRU5ET1JfTkFNRSddKQor
ICAgIHByaW50KCJWRU5ET1JfUFJFRklYXHRcdCclcyciICUgb3MuZW52aXJvblsnVkVORE9SX1BS
RUZJWCddKQorCisgICAgaWYgJ1ZFTkRPUl9ERVZJQ0VfSUQnIGluIG9zLmVudmlyb24ua2V5cygp
OgorICAgICAgICBwcmludCgiVkVORE9SX0RFVklDRV9JRFx0JyVzJyIgJSBvcy5lbnZpcm9uWydW
RU5ET1JfREVWSUNFX0lEJ10pCisKKyAgICBwcmludCgiUFJPRFVDVF9OQU1FXHRcdCclcyciICUg
b3MuZW52aXJvblsnUFJPRFVDVF9OQU1FJ10pCisgICAgcHJpbnQoIk1BSk9SX1ZFUlNJT05cdFx0
JXMiICUgb3MuZW52aXJvblsnTUFKT1JfVkVSU0lPTiddKQorICAgIHByaW50KCJNSU5PUl9WRVJT
SU9OXHRcdCVzIiAlIG9zLmVudmlyb25bJ01JTk9SX1ZFUlNJT04nXSkKKyAgICBwcmludCgiTUlD
Uk9fVkVSU0lPTlx0XHQlcyIgJSBvcy5lbnZpcm9uWydNSUNST19WRVJTSU9OJ10pCisgICAgcHJp
bnQoIkJVSUxEX05VTUJFUlx0XHQlcyIgJSBvcy5lbnZpcm9uWydCVUlMRF9OVU1CRVInXSkKKyAg
ICBwcmludCgpCisKKyAgICBtYWtlX2hlYWRlcigpCisgICAgY29weV9pbmYodnMsIGRyaXZlcikK
KwogICAgIHN5bXN0b3JlX2RlbChkcml2ZXIsIDMwKQogCiAgICAgaWYgdnM9PSd2czIwMTInOgpk
aWZmIC0tZ2l0IGEvaW5jbHVkZS92ZXJzaW9uLmh4IGIvaW5jbHVkZS92ZXJzaW9uLmh4CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmIwYTZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUv
dmVyc2lvbi5oeAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIENvcHlyaWdodCAo
YykgQ2l0cml4IFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywgCi0gKiB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIAotICog
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqIAotICogKiAgIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgCi0gKiAgICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSAKLSAqICAg
ICBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIAotICogICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgCi0gKiAgICAgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIAotICogICAgIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCAKLSAqIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIAotICogSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgCi0g
KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSAKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SIAotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIAotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAotICogTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSAKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIENPTVBBTllfTkFNRV9TVFIJIkBDT01QQU5ZX05BTUVA
IgotI2RlZmluZSBQUk9EVUNUX05BTUVfU1RSCSJAUFJPRFVDVF9OQU1FQCIKLQotI2RlZmluZSBN
QUpPUl9WRVJTSU9OCUBNQUpPUl9WRVJTSU9OQAotI2RlZmluZSBNQUpPUl9WRVJTSU9OX1NUUgki
QE1BSk9SX1ZFUlNJT05AIgotCi0jZGVmaW5lIE1JTk9SX1ZFUlNJT04JQE1JTk9SX1ZFUlNJT05A
Ci0jZGVmaW5lIE1JTk9SX1ZFUlNJT05fU1RSCSJATUlOT1JfVkVSU0lPTkAiCi0KLSNkZWZpbmUg
TUlDUk9fVkVSU0lPTglATUlDUk9fVkVSU0lPTkAKLSNkZWZpbmUgTUlDUk9fVkVSU0lPTl9TVFIJ
IkBNSUNST19WRVJTSU9OQCIKLQotI2RlZmluZSBCVUlMRF9OVU1CRVIJQEJVSUxEX05VTUJFUkAK
LSNkZWZpbmUgQlVJTERfTlVNQkVSX1NUUgkiQEJVSUxEX05VTUJFUkAiCi0KLSNkZWZpbmUgWUVB
UglAWUVBUkAKLSNkZWZpbmUgWUVBUl9TVFIJIkBZRUFSQCIKLQotI2RlZmluZSBNT05USAlATU9O
VEhACi0jZGVmaW5lIE1PTlRIX1NUUgkiQE1PTlRIQCIKLQotI2RlZmluZSBEQVkJQERBWUAKLSNk
ZWZpbmUgREFZX1NUUgkiQERBWUAiCi0KZGlmZiAtLWdpdCBhL3NyYy94ZW5jcnNoL3hlbmNyc2gu
cmMgYi9zcmMveGVuY3JzaC94ZW5jcnNoLnJjCmluZGV4IGQwOTcyNzAuLjY1YmJmZjkgMTAwNjQ0
Ci0tLSBhL3NyYy94ZW5jcnNoL3hlbmNyc2gucmMKKysrIGIvc3JjL3hlbmNyc2gveGVuY3JzaC5y
YwpAQCAtNDAsNyArNDAsNyBAQAogCiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCi0jZGVmaW5lCVZF
Ul9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBDT01QQU5ZX05BTUVfU1RSCisjZGVmaW5lCVZFUl9D
T01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1JfTkFNRV9TVFIKICNkZWZpbmUgVkVSX0xFR0FM
Q09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQgKGMpIENpdHJpeCBTeXN0ZW1zIEluYy4iCiAK
ICNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAgICAgICAgICJYRU5DUlNIIgpkaWZmIC0tZ2l0
IGEvc3JjL3hlbmRpc2sveGVuZGlzay5yYyBiL3NyYy94ZW5kaXNrL3hlbmRpc2sucmMKaW5kZXgg
NWFhNTZhMy4uYTc0Y2UwYyAxMDA2NDQKLS0tIGEvc3JjL3hlbmRpc2sveGVuZGlzay5yYworKysg
Yi9zcmMveGVuZGlzay94ZW5kaXNrLnJjCkBAIC00MCw3ICs0MCw3IEBACiAKICNpbmNsdWRlIDx2
ZXJzaW9uLmg+CiAKLSNkZWZpbmUJVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIENPTVBBTllf
TkFNRV9TVFIKKyNkZWZpbmUJVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIFZFTkRPUl9OQU1F
X1NUUgogI2RlZmluZSBWRVJfTEVHQUxDT1BZUklHSFRfU1RSICAgICAgIkNvcHlyaWdodCAoYykg
Q2l0cml4IFN5c3RlbXMgSW5jLiIKIAogI2RlZmluZSBWRVJfUFJPRFVDVE5BTUVfU1RSICAgICAg
ICAgIlhFTkRJU0siCmRpZmYgLS1naXQgYS9zcmMveGVudmJkLmluZiBiL3NyYy94ZW52YmQuaW5m
CmluZGV4IGU5MmQzZmIuLjk4ZWMzZGUgMTAwNjQ0Ci0tLSBhL3NyYy94ZW52YmQuaW5mCisrKyBi
L3NyYy94ZW52YmQuaW5mCkBAIC0zMiw3ICszMiw3IEBACiBTaWduYXR1cmU9IiRXaW5kb3dzIE5U
JCIgCiBDbGFzcz1TQ1NJQWRhcHRlcgogQ2xhc3NHVUlEPXs0RDM2RTk3Qi1FMzI1LTExQ0UtQkZD
MS0wODAwMkJFMTAzMTh9IAotUHJvdmlkZXI9JUNvbXBhbnklIAorUHJvdmlkZXI9JVZlbmRvciUg
CiBDYXRhbG9nRmlsZT14ZW52YmQuY2F0CiBEcml2ZXJWZXI9MDEvMDEvMTkwMCwwLjAuMC4wCiAK
QEAgLTUwLDEyICs1MCwxMiBAQCB4ZW5kaXNrLnN5cz0wLCwKIHhlbnZiZF9jb2luc3QuZGxsPTAs
LAogCiBbTWFudWZhY3R1cmVyXSAKLSVDb21wYW55JT1JbnN0LE5UJEFSQ0gkCislVmVuZG9yJT1J
bnN0LE5UJEFSQ0gkCiAKIFtJbnN0Lk5UJEFSQ0gkXQotJVhlblZiZERlc2MlPVhlblZiZF9JbnN0
LFhFTkJVU1xWRU5fWFNDMDAwJkRFVl9WQkQmUkVWXzA4MDAwMDA5Ci0lWGVuVmJkRGVzYyU9WGVu
VmJkX0luc3QsWEVOQlVTXFZFTl9YUzAwMDEmREVWX1ZCRCZSRVZfMDgwMDAwMDkKLSVYZW5WYmRE
ZXNjJT1YZW5WYmRfSW5zdCxYRU5CVVNcVkVOX1hTMDAwMiZERVZfVkJEJlJFVl8wODAwMDAwOQor
JVhlblZiZERlc2MlPVhlblZiZF9JbnN0LFhFTkJVU1xWRU5fQFZFTkRPUl9QUkVGSVhAQFZFTkRP
Ul9ERVZJQ0VfSURAJkRFVl9WQkQmUkVWXzA4MDAwMDA5CislWGVuVmJkRGVzYyU9WGVuVmJkX0lu
c3QsWEVOQlVTXFZFTl9AVkVORE9SX1BSRUZJWEAwMDAxJkRFVl9WQkQmUkVWXzA4MDAwMDA5Cisl
WGVuVmJkRGVzYyU9WGVuVmJkX0luc3QsWEVOQlVTXFZFTl9AVkVORE9SX1BSRUZJWEAwMDAyJkRF
Vl9WQkQmUkVWXzA4MDAwMDA5CiAKIFtYZW5WYmRfSW5zdF0gCiBDb3B5RmlsZXM9WGVuVmJkX0Nv
cHlmaWxlcwpAQCAtMTA5LDcgKzEwOSw3IEBAIEhLUiwsQ29JbnN0YWxsZXJzMzIsMHgwMDAxMDAw
MCwieGVudmJkX2NvaW5zdF9ATUFKT1JfVkVSU0lPTkBfQE1JTk9SX1ZFUlNJT05AX0BNCiAKIFtT
dHJpbmdzXSAKIAotQ29tcGFueSA9ICJAQ09NUEFOWV9OQU1FQCIKK1ZlbmRvciA9ICJAVkVORE9S
X05BTUVAIgogRGlza0Rlc2MgPSAiQFBST0RVQ1RfTkFNRUAgUFYgU3RvcmFnZSBIb3N0IEFkYXB0
ZXIgUGFja2FnZSIgCiBYZW5WYmREZXNjPSAiQFBST0RVQ1RfTkFNRUAgUFYgU3RvcmFnZSBIb3N0
IEFkYXB0ZXIiCiBYZW5EaXNrRGVzYz0gIkBQUk9EVUNUX05BTUVAIFBWIFN0b3JhZ2UgRmlsdGVy
IgpkaWZmIC0tZ2l0IGEvc3JjL3hlbnZiZC94ZW52YmQucmMgYi9zcmMveGVudmJkL3hlbnZiZC5y
YwppbmRleCA2YWM4YzUwLi4xYjAxNDhiIDEwMDY0NAotLS0gYS9zcmMveGVudmJkL3hlbnZiZC5y
YworKysgYi9zcmMveGVudmJkL3hlbnZiZC5yYwpAQCAtNDAsNyArNDAsNyBAQAogCiAjaW5jbHVk
ZSA8dmVyc2lvbi5oPgogCi0jZGVmaW5lCVZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBDT01Q
QU5ZX05BTUVfU1RSCisjZGVmaW5lCVZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1Jf
TkFNRV9TVFIKICNkZWZpbmUgVkVSX0xFR0FMQ09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQg
KGMpIENpdHJpeCBTeXN0ZW1zIEluYy4iCiAKICNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAg
ICAgICAgICJYRU5WQkQiCmRpZmYgLS1naXQgYS92czIwMTIveGVuY3JzaC94ZW5jcnNoLnZjeHBy
b2ogYi92czIwMTIveGVuY3JzaC94ZW5jcnNoLnZjeHByb2oKaW5kZXggYzgzNWI0NC4uMjNmNDY5
YiAxMDA2NDQKLS0tIGEvdnMyMDEyL3hlbmNyc2gveGVuY3JzaC52Y3hwcm9qCisrKyBiL3ZzMjAx
Mi94ZW5jcnNoL3hlbmNyc2gudmN4cHJvagpAQCAtMjUsMjIgKzI1LDEyIEBACiAJPFByb3BlcnR5
R3JvdXA+CiAJCTxJbmNsdWRlUGF0aD4uLlwuLlxpbmNsdWRlOyQoSW5jbHVkZVBhdGgpPC9JbmNs
dWRlUGF0aD4KIAkJPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+Ci0gICAg
ICAgIDxFbmFibGVJbmYyY2F0PmZhbHNlPC9FbmFibGVJbmYyY2F0PgotICAgICAgICA8Q3VzdG9t
QnVpbGRCZWZvcmVUYXJnZXRzPkNsQ29tcGlsZTtTdGFtcEluZjwvQ3VzdG9tQnVpbGRCZWZvcmVU
YXJnZXRzPgorCQk8RW5hYmxlSW5mMmNhdD5mYWxzZTwvRW5hYmxlSW5mMmNhdD4KIAkJPEludERp
cj4uLlwkKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVwkKFBsYXRmb3JtKVw8L0lu
dERpcj4KIAkJPE91dERpcj4uLlwkKENvbmZpZ3VyYXRpb25OYW1lKVwkKFBsYXRmb3JtKVw8L091
dERpcj4KIAk8L1Byb3BlcnR5R3JvdXA+CiAJCiAgICAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+Ci0g
ICAgICAgIDxDdXN0b21CdWlsZFN0ZXA+Ci0gICAgICAgICAgICA8Q29tbWFuZD5lY2hvICJCdWls
ZCBJbmYiCi0gICAgICAgICAgICAgICAgcG93ZXJzaGVsbCAtQ29tbWFuZCAiKEdldC1Db250ZW50
IC4uXC4uXHNyY1x4ZW52YmQuaW5mKSAtcmVwbGFjZSAnQE1BSk9SX1ZFUlNJT05AJywgJyQoTUFK
T1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlOT1JfVkVSU0lPTkAnLCAnJChNSU5PUl9WRVJTSU9O
KScgLXJlcGxhY2UgJ0BNSUNST19WRVJTSU9OQCcsJyQoTUlDUk9fVkVSU0lPTiknIC1yZXBsYWNl
ICdAQlVJTERfTlVNQkVSQCcsJyQoQlVJTERfTlVNQkVSKScgLXJlcGxhY2UgJ0BDT01QQU5ZX05B
TUVAJywnJChDT01QQU5ZX05BTUUpJyAtcmVwbGFjZSAnQFBST0RVQ1RfTkFNRUAnLCckKFBST0RV
Q1RfTkFNRSknIHwgU2V0LUNvbnRlbnQgLi5cLi5cdnMyMDEyXHhlbnZiZC5pbmYiCi0gICAgICAg
ICAgICAgICAgZWNobyAiQnVpbGQgdmVyc2lvbiBoZWFkZXIiCi0gICAgICAgICAgICAgICAgcG93
ZXJzaGVsbCAtQ29tbWFuZCAiKEdldC1Db250ZW50IC4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oeCkg
LXJlcGxhY2UgJ0BNQUpPUl9WRVJTSU9OQCcsICckKE1BSk9SX1ZFUlNJT04pJyAtcmVwbGFjZSAn
QE1JTk9SX1ZFUlNJT05AJywgJyQoTUlOT1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlDUk9fVkVS
U0lPTkAnLCckKE1JQ1JPX1ZFUlNJT04pJyAtcmVwbGFjZSAnQEJVSUxEX05VTUJFUkAnLCckKEJV
SUxEX05VTUJFUiknIC1yZXBsYWNlICdAQ09NUEFOWV9OQU1FQCcsJyQoQ09NUEFOWV9OQU1FKScg
LXJlcGxhY2UgJ0BQUk9EVUNUX05BTUVAJywnJChQUk9EVUNUX05BTUUpJyAtcmVwbGFjZSAnQERB
WUAnLCUyNChHZXQtRGF0ZSAtZm9ybWF0ICUyNSUyNWQpIC1yZXBsYWNlICdATU9OVEhAJywlMjQo
R2V0LURhdGUgLWZvcm1hdCAlMjUlMjVNKSAtcmVwbGFjZSAnQFlFQVJAJywlMjQoR2V0LURhdGUg
LWZvcm1hdCB5eXl5KSB8IFNldC1Db250ZW50IC4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oIgotICAg
ICAgICAgICAgPC9Db21tYW5kPgotICAgICAgICAgICAgPE91dHB1dHM+Li5cLi5cdnMyMDEyXHhl
bnZiZC5pbmY7Li5cLi5caW5jbHVkZVx2ZXJzaW9uLmg8L091dHB1dHM+Ci0gICAgICAgICAgICA8
SW5wdXRzPi4uXC4uXHNyY1x4ZW52YmQuaW5mOy4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oeDwvSW5w
dXRzPgotICAgICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KIAkJPENsQ29tcGlsZT4KIAkJCTxQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz5fX01PRFVMRV9fPSJYRU5DUlNIIjslKFByZXByb2Nlc3NvckRl
ZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAJCQk8V2FybmluZ0xldmVsPkVu
YWJsZUFsbFdhcm5pbmdzPC9XYXJuaW5nTGV2ZWw+CmRpZmYgLS1naXQgYS92czIwMTMveGVuY3Jz
aC94ZW5jcnNoLnZjeHByb2ogYi92czIwMTMveGVuY3JzaC94ZW5jcnNoLnZjeHByb2oKaW5kZXgg
NjY4MDQyNi4uOTA5MTRkOCAxMDA2NDQKLS0tIGEvdnMyMDEzL3hlbmNyc2gveGVuY3JzaC52Y3hw
cm9qCisrKyBiL3ZzMjAxMy94ZW5jcnNoL3hlbmNyc2gudmN4cHJvagpAQCAtMSw0ICsxLDQgQEAK
Le+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxk
IiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20v
ZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJbXBvcnQgUHJvamVjdD0iLi5cY29uZmlncy5w
cm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgpAQCAtNTYsMjAgKzU2
LDEwIEBACiAgICAgPEluY2x1ZGVQYXRoPi4uXC4uXGluY2x1ZGU7JChJbmNsdWRlUGF0aCk8L0lu
Y2x1ZGVQYXRoPgogICAgIDxSdW5Db2RlQW5hbHlzaXM+dHJ1ZTwvUnVuQ29kZUFuYWx5c2lzPgog
ICAgIDxFbmFibGVJbmYyY2F0PmZhbHNlPC9FbmFibGVJbmYyY2F0PgotICAgIDxDdXN0b21CdWls
ZEJlZm9yZVRhcmdldHM+Q2xDb21waWxlO1N0YW1wSW5mPC9DdXN0b21CdWlsZEJlZm9yZVRhcmdl
dHM+CiAgICAgPEludERpcj4uLlwkKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVwk
KFBsYXRmb3JtKVw8L0ludERpcj4KICAgICA8T3V0RGlyPi4uXCQoQ29uZmlndXJhdGlvbk5hbWUp
XCQoUGxhdGZvcm0pXDwvT3V0RGlyPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5p
dGlvbkdyb3VwPgotICAgIDxDdXN0b21CdWlsZFN0ZXA+Ci0gICAgICAgIDxDb21tYW5kPmVjaG8g
IkJ1aWxkIEluZiIKLSAgICAgICAgICAgIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIihHZXQtQ29udGVu
dCAuLlwuLlxzcmNceGVudmJkLmluZikgLXJlcGxhY2UgJ0BNQUpPUl9WRVJTSU9OQCcsICckKE1B
Sk9SX1ZFUlNJT04pJyAtcmVwbGFjZSAnQE1JTk9SX1ZFUlNJT05AJywgJyQoTUlOT1JfVkVSU0lP
TiknIC1yZXBsYWNlICdATUlDUk9fVkVSU0lPTkAnLCckKE1JQ1JPX1ZFUlNJT04pJyAtcmVwbGFj
ZSAnQEJVSUxEX05VTUJFUkAnLCckKEJVSUxEX05VTUJFUiknIC1yZXBsYWNlICdAQ09NUEFOWV9O
QU1FQCcsJyQoQ09NUEFOWV9OQU1FKScgLXJlcGxhY2UgJ0BQUk9EVUNUX05BTUVAJywnJChQUk9E
VUNUX05BTUUpJyB8IFNldC1Db250ZW50IC4uXC4uXHZzMjAxM1x4ZW52YmQuaW5mIgotICAgICAg
ICAgICAgZWNobyAiQnVpbGQgdmVyc2lvbiBoZWFkZXIiCi0gICAgICAgICAgICBwb3dlcnNoZWxs
IC1Db21tYW5kICIoR2V0LUNvbnRlbnQgLi5cLi5caW5jbHVkZVx2ZXJzaW9uLmh4KSAtcmVwbGFj
ZSAnQE1BSk9SX1ZFUlNJT05AJywgJyQoTUFKT1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlOT1Jf
VkVSU0lPTkAnLCAnJChNSU5PUl9WRVJTSU9OKScgLXJlcGxhY2UgJ0BNSUNST19WRVJTSU9OQCcs
JyQoTUlDUk9fVkVSU0lPTiknIC1yZXBsYWNlICdAQlVJTERfTlVNQkVSQCcsJyQoQlVJTERfTlVN
QkVSKScgLXJlcGxhY2UgJ0BDT01QQU5ZX05BTUVAJywnJChDT01QQU5ZX05BTUUpJyAtcmVwbGFj
ZSAnQFBST0RVQ1RfTkFNRUAnLCckKFBST0RVQ1RfTkFNRSknIC1yZXBsYWNlICdAREFZQCcsJTI0
KEdldC1EYXRlIC1mb3JtYXQgJTI1JTI1ZCkgLXJlcGxhY2UgJ0BNT05USEAnLCUyNChHZXQtRGF0
ZSAtZm9ybWF0ICUyNSUyNU0pIC1yZXBsYWNlICdAWUVBUkAnLCUyNChHZXQtRGF0ZSAtZm9ybWF0
IHl5eXkpIHwgU2V0LUNvbnRlbnQgLi5cLi5caW5jbHVkZVx2ZXJzaW9uLmgiCi0gICAgICAgIDwv
Q29tbWFuZD4KLSAgICAgICAgPE91dHB1dHM+Li5cLi5cdnMyMDEzXHhlbnZiZC5pbmY7Li5cLi5c
aW5jbHVkZVx2ZXJzaW9uLmg8L091dHB1dHM+Ci0gICAgICAgIDxJbnB1dHM+Li5cLi5cc3JjXHhl
bnZiZC5pbmY7Li5cLi5caW5jbHVkZVx2ZXJzaW9uLmh4PC9JbnB1dHM+Ci0gICAgPC9DdXN0b21C
dWlsZFN0ZXA+CiAgICAgPENsQ29tcGlsZT4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5fX01PRFVMRV9fPSJYRU5DUlNIIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgICA8V2FybmluZ0xldmVsPkVuYWJsZUFsbFdhcm5pbmdz
PC9XYXJuaW5nTGV2ZWw+Ci0tIAoyLjEuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmlu
L21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:28:00 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:28:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZajY-0008F8-NX; Wed, 09 Sep 2015 08:28:00 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZajX-0008Eq-61
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:27:59 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	C2/E4-16618-E8DEFE55; Wed, 09 Sep 2015 08:27:58 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441787276!48135310!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14176 invoked from network); 9 Sep 2015 08:27:56 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:27:56 -0000
Received: by wiclk2 with SMTP id lk2so12413348wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:27:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:mime-version:content-type
	:content-transfer-encoding;
	bh=beGxldlFkBoOeo3+MNaycdebNlj7odU0tdGHbU6aaX0=;
	b=LMWtcE1FLSsAnep9vHceJAjTj7fRiTsGwp0J/zWu33pQrQX70G8mht8Sw0punCpnUJ
	iM86vz5T+lCnAhlKHdbLIz9dJrp2bKsLhEdlr0YCCF9VxBhQso5STXuxMOf/9Qjr3sIL
	yCksmI7nT28XgUmv0NRk3MSRqML0NEVhwY0t7LEJBZhWkJiQSyRdGmEMxa7V2NeFtx8i
	kh9ui8bf49EDm85Kws3V+oe1aWp1h/AGDkumPU74P2oU7vp6DDPEUGc9QYbewrJ5sJ3o
	rfUaiEyFBVxLG+tATevibpcAPVa5FfimQzfa8R+ezHAOchnCnc85eoBIeqrpOJOYhloM
	ju+w==
X-Received: by 10.194.86.72 with SMTP id n8mr58321379wjz.119.1441787276169;
	Wed, 09 Sep 2015 01:27:56 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	bi6sm8954287wjc.25.2015.09.09.01.27.55
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:27:55 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:27:44 +0100
Message-Id: <1441787264-7724-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
MIME-Version: 1.0
Content-Length: 23295
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

VGhlIFhlblNlcnZlciBQViB2ZW5kb3IgcHJlZml4ICgnWFMnKSBhbmQgUENJIGRldmljZSAoQzAw
MCkgYXJlIHN0aWxsCmhhcmQtY29kZWQgaW50byB0aGUgWEVOVkJEIHBhY2thZ2UuIFRoZXNlIG5l
ZWQgdG8gYmUgc3RyaXBwZWQgb3V0IGFuZApyZXBsYWNlZCBieSB2YWx1ZXMgdGhhdCBjYW4gYmUg
Y3VzdG9taXplZCBhdCBidWlsZCB0aW1lLiBUaGlzIHBhdGNoIGRvZXMKdGhhdC4KClRoZSBwYXRj
aCBhbHNvIHJldmVydHMgdG8gYnVpbGRpbmcgdmVyc2lvbi5oIGFuZCBjdXN0b21pemluZyB4ZW52
YmQuaW5mCmRpcmVjdGx5IGluIGJ1aWxkLnB5LgoKU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50
IDxwYXVsLmR1cnJhbnRAY2l0cml4LmNvbT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAg
ICAgICAgfCAzMSArKysrKysrKysrLS0tLQogYnVpbGQucHkgICAgICAgICAgICAgICAgICAgICAg
IHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiBpbmNsdWRl
L3ZlcnNpb24uaHggICAgICAgICAgICAgfCA1NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNy
Yy94ZW5jcnNoL3hlbmNyc2gucmMgICAgICAgICB8ICAyICstCiBzcmMveGVuZGlzay94ZW5kaXNr
LnJjICAgICAgICAgfCAgMiArLQogc3JjL3hlbnZiZC5pbmYgICAgICAgICAgICAgICAgIHwgMTIg
KysrLS0tCiBzcmMveGVudmJkL3hlbnZiZC5yYyAgICAgICAgICAgfCAgMiArLQogdnMyMDEyL3hl
bmNyc2gveGVuY3JzaC52Y3hwcm9qIHwgMTIgKy0tLS0tCiB2czIwMTMveGVuY3JzaC94ZW5jcnNo
LnZjeHByb2ogfCAxMiArLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgMTI0IGluc2VydGlvbnMoKyks
IDEwMCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3ZlcnNpb24uaHgK
CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDA5ZTlmNjUuLjg4
Y2M5N2EgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02LDE5
ICs2LDM0IEBAIHdobyB3aWxsIGFkdmlzZSB5b3Ugb24gdGhlIHByZWNpc2UgcHJvY2VkdXJlIHRo
ZXkgd2lzaCB0byB1c2UuCiAKIFdlIGFsc28gcmVxdWVzdCB5b3UgZm9sbG93IHRoZXNlIGJhc2lj
IGd1aWRlbGluZXM6CiAKLTEuICBNYWtlIHN1cmUgeW91IHRlc3QgeW91ciBjaGFuZ2VzIG9uIGJv
dGggMzItIGFuZCA2NC1iaXQgdmVyc2lvbnMgb2YgIFdpbmRvd3MuCisxLiAgTWFrZSBzdXJlIHlv
dSB0ZXN0IHlvdXIgY2hhbmdlcyBvbiBib3RoIGEgMzItIGFuZCA2NC1iaXQgdmVyc2lvbiBvZiBX
aW5kb3dzLgorICAgIChUaGUgbW9yZSB2ZXJzaW9ucyBvZiBXaW5kb3dzIHlvdSBjYW4gdGVzdCBv
biB0aGUgYmV0dGVyKS4KIAogMi4gIE1ha2Ugc3VyZSB5b3VyIGNoYW5nZXMgZG8gbm90IGludHJv
ZHVjZSBhbnkgbmV3IHByZWZhc3Qgd2FybmluZ3MuCiAKLTMuICBBbGwgc3VibWlzc2lvbnMgbXVz
dCBiZSBtYWRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgIkRldmVsb3BlcidzIENlcnRpZmljYXRl
Ci0gICAgb2YgT3JpZ2luIiAoREMpIGFuZCBzaG91bGQgaW5jbHVkZSBhIFNpZ25lZC1vZmYtYnk6
IGxpbmUuCiszLiAgTWFrZSBhIHBhdGNoIGF2YWlsYWJsZSB0byB0aGUgcmVsZXZhbnQgbWFpbnRh
aW5lciBpbiB0aGUgbGlzdC4gVXNlICdkaWZmIC11JworICAgIHRvIG1ha2UgdGhlIHBhdGNoIGVh
c3kgdG8gbWVyZ2UuIEJlIHByZXBhcmVkIHRvIGdldCB5b3VyIGNoYW5nZXMgc2VudCBiYWNrCisg
ICAgd2l0aCBzZWVtaW5nbHkgc2lsbHkgcmVxdWVzdHMgYWJvdXQgZm9ybWF0dGluZyBhbmQgdmFy
aWFibGUgbmFtZXMuIFRoZXNlCisgICAgYXJlbid0IGFzIHNpbGx5IGFzIHRoZXkgc2VlbS4gT25l
IGpvYiB0aGUgbWFpbnRhaW5lcnMgZG8gaXMgdG8ga2VlcCB0aGluZ3MKKyAgICBsb29raW5nIHRo
ZSBzYW1lLgogCi0yLiAgQWxsIFN1Ym1pc3Npb25zIHNob3VsZCB1c2UgVW5peCBsaW5lIGVuZGlu
Z3MgZm9yIGNvbnNpdGVuY3kgd2l0aCB0aGUgcmVzdCBvZgotICAgIHRoZSBYZW5TZXJ2ZXIgcHJv
amVjdC4KKyAgICBOT1RFIHRoYXQgYWxsIHNvdXJjZSBzaG91bGQgaGF2ZSBVbml4IGxpbmUgZW5k
aW5ncy4KIAotMy4gIEVhY2ggcGF0Y2ggc2hvdWxkIGluY2x1ZGUgYSBkZXNjcmlwdGl2ZSBjb21t
aXQgY29tbWVudCB0aGF0IGhlbHBzIHVuZGVyc3RhbmQKLSAgICB3aHkgdGhlIHBhdGNoIGlzIG5l
Y2Vzc2FyeSBhbmQgd2h5IGl0IHdvcmtzLiBUaGlzIHdpbGwgYmUgdXNlZCBib3RoIGZvcgotICAg
IGluaXRpYWwgcmV2aWV3IGFuZCBmb3IgbmV3IHBlb3BsZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUg
Y29kZSB3b3JrcyBsYXRlcgorICAgIFBMRUFTRSBzZWUgaHR0cDovL3dpa2kueGVuLm9yZy93aWtp
L1N1Ym1pdHRpbmdfWGVuX1BhdGNoZXMgZm9yIGhpbnRzIG9uIGhvdworICAgIHRvIHN1Ym1pdCBh
IHBhdGNoIGluIGEgc3VpdGFibGUgZm9ybS4gV2hpbHN0IHRoZSBQViBkcml2ZXIgc291cmNlCisg
ICAgcmVwb3NpdG9yaWVzIGFyZSBkaXN0aW5jdCBmcm9tIHRoZSBYZW4gUHJvamVjdCBoeXBlcnZp
c29yIHNvdXJjZSwgd2Ugd2lsbAorICAgIGZvbGxvdyB0aGUgc2FtZSBnZW5lcmFsIHBhdGNoIHN1
Ym1pc3Npb24gYW5kIHJldmlldyBwcm9jZXNzLgorCisgICAgUExFQVNFIHRyeSB0byBpbmNsdWRl
IGFueSBjcmVkaXQgbGluZXMgeW91IHdhbnQgYWRkZWQgd2l0aCB0aGUgIHBhdGNoLiBJdAorICAg
IGF2b2lkcyBwZW9wbGUgYmVpbmcgbWlzc2VkIG9mZiBieSBtaXN0YWtlIGFuZCBtYWtlcyBpdCBl
YXNpZXIgdG8ga25vdyB3aG8KKyAgICB3YW50cyBhZGRpbmcgYW5kIHdobyBkb2Vzbid0LgorCisg
ICAgUExFQVNFIGRvY3VtZW50IGtub3duIGJ1Z3MuIElmIGl0IGRvZXNuJ3Qgd29yayBmb3IgZXZl
cnl0aGluZyBvciBkb2VzCisgICAgc29tZXRoaW5nIHZlcnkgb2RkIG9uY2UgYSBtb250aCBkb2N1
bWVudCBpdC4KKworICAgIFBMRUFTRSByZW1lbWJlciB0aGF0IHN1Ym1pc3Npb25zIG11c3QgYmUg
bWFkZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgIkRldmVsb3BlcidzIENlcnRpZmljYXRl
IG9mIE9yaWdpbiIgKERDTykgYW5kIHNob3VsZCBpbmNsdWRlIGEKKyAgICBTaWduZWQtb2ZmLWJ5
OiBsaW5lLgogCiA0LiAgTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgYW55
IGNoYW5nZXMgeW91IG1ha2UuIElmIHlvdSBkbyAKICAgICBjaGFuZ2VzIGF0IHdvcmsgeW91IG1h
eSBmaW5kIHlvdXIgZW1wbG95ZXIgb3ducyB0aGUgcGF0Y2hlcyBpbnN0ZWFkIG9mIApkaWZmIC0t
Z2l0IGEvYnVpbGQucHkgYi9idWlsZC5weQppbmRleCA3NWI5NjMxLi4xOGEzYzUyIDEwMDc1NQot
LS0gYS9idWlsZC5weQorKysgYi9idWlsZC5weQpAQCAtMjMsNiArMjMsNzYgQEAgZGVmIG5leHRf
YnVpbGRfbnVtYmVyKCk6CiAKICAgICByZXR1cm4gYnVpbGRfbnVtYmVyCiAKKworZGVmIG1ha2Vf
aGVhZGVyKCk6CisgICAgbm93ID0gZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKworICAgIGZpbGUg
PSBvcGVuKCdpbmNsdWRlXFx2ZXJzaW9uLmgnLCAndycpCisKKyAgICBmaWxlLndyaXRlKCcjZGVm
aW5lIFZFTkRPUl9OQU1FX1NUUlx0XHQiJyArIG9zLmVudmlyb25bJ1ZFTkRPUl9OQU1FJ10gKyAn
IlxuJykKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIFZFTkRPUl9QUkVGSVhfU1RSXHQiJyArIG9z
LmVudmlyb25bJ1ZFTkRPUl9QUkVGSVgnXSArICciXG4nKQorCisgICAgaWYgJ1ZFTkRPUl9ERVZJ
Q0VfSUQnIGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICBmaWxlLndyaXRlKCcjZGVmaW5l
IFZFTkRPUl9ERVZJQ0VfSURfU1RSXHQiJyArIG9zLmVudmlyb25bJ1ZFTkRPUl9ERVZJQ0VfSUQn
XSArICciXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBQUk9EVUNUX05BTUVfU1RSXHQi
JyArIG9zLmVudmlyb25bJ1BST0RVQ1RfTkFNRSddICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgn
XG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBNQUpPUl9WRVJTSU9OXHRcdCcgKyBvcy5l
bnZpcm9uWydNQUpPUl9WRVJTSU9OJ10gKyAnXG4nKQorICAgIGZpbGUud3JpdGUoJyNkZWZpbmUg
TUFKT1JfVkVSU0lPTl9TVFJcdCInICsgb3MuZW52aXJvblsnTUFKT1JfVkVSU0lPTiddICsgJyJc
bicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBNSU5P
Ul9WRVJTSU9OXHRcdCcgKyBvcy5lbnZpcm9uWydNSU5PUl9WRVJTSU9OJ10gKyAnXG4nKQorICAg
IGZpbGUud3JpdGUoJyNkZWZpbmUgTUlOT1JfVkVSU0lPTl9TVFJcdCInICsgb3MuZW52aXJvblsn
TUlOT1JfVkVSU0lPTiddICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmls
ZS53cml0ZSgnI2RlZmluZSBNSUNST19WRVJTSU9OXHRcdCcgKyBvcy5lbnZpcm9uWydNSUNST19W
RVJTSU9OJ10gKyAnXG4nKQorICAgIGZpbGUud3JpdGUoJyNkZWZpbmUgTUlDUk9fVkVSU0lPTl9T
VFJcdCInICsgb3MuZW52aXJvblsnTUlDUk9fVkVSU0lPTiddICsgJyJcbicpCisgICAgZmlsZS53
cml0ZSgnXG4nKQorCisgICAgZmlsZS53cml0ZSgnI2RlZmluZSBCVUlMRF9OVU1CRVJcdFx0JyAr
IG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddICsgJ1xuJykKKyAgICBmaWxlLndyaXRlKCcjZGVm
aW5lIEJVSUxEX05VTUJFUl9TVFJcdCInICsgb3MuZW52aXJvblsnQlVJTERfTlVNQkVSJ10gKyAn
IlxuJykKKyAgICBmaWxlLndyaXRlKCdcbicpCisKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIFlF
QVJcdFx0XHQnICsgc3RyKG5vdy55ZWFyKSArICdcbicpCisgICAgZmlsZS53cml0ZSgnI2RlZmlu
ZSBZRUFSX1NUUlx0XHQiJyArIHN0cihub3cueWVhcikgKyAnIlxuJykKKyAgICBmaWxlLndyaXRl
KCdcbicpCisKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIE1PTlRIXHRcdFx0JyArIHN0cihub3cu
bW9udGgpICsgJ1xuJykKKyAgICBmaWxlLndyaXRlKCcjZGVmaW5lIE1PTlRIX1NUUlx0XHQiJyAr
IHN0cihub3cubW9udGgpICsgJyJcbicpCisgICAgZmlsZS53cml0ZSgnXG4nKQorCisgICAgZmls
ZS53cml0ZSgnI2RlZmluZSBEQVlcdFx0XHQnICsgc3RyKG5vdy5kYXkpICsgJ1xuJykKKyAgICBm
aWxlLndyaXRlKCcjZGVmaW5lIERBWV9TVFJcdFx0XHQiJyArIHN0cihub3cuZGF5KSArICciXG4n
KQorICAgIGZpbGUud3JpdGUoJ1xuJykKKworICAgIGZpbGUuY2xvc2UoKQorCisKK2RlZiBjb3B5
X2luZih2cywgbmFtZSk6CisgICAgc3JjID0gb3Blbignc3JjXFwlcy5pbmYnICUgbmFtZSwgJ3In
KQorICAgIGRzdCA9IG9wZW4oJyVzXFwlcy5pbmYnICUgKHZzLCBuYW1lKSwgJ3cnKQorCisgICAg
Zm9yIGxpbmUgaW4gc3JjOgorICAgICAgICBsaW5lID0gcmUuc3ViKCdATUFKT1JfVkVSU0lPTkAn
LCBvcy5lbnZpcm9uWydNQUpPUl9WRVJTSU9OJ10sIGxpbmUpCisgICAgICAgIGxpbmUgPSByZS5z
dWIoJ0BNSU5PUl9WRVJTSU9OQCcsIG9zLmVudmlyb25bJ01JTk9SX1ZFUlNJT04nXSwgbGluZSkK
KyAgICAgICAgbGluZSA9IHJlLnN1YignQE1JQ1JPX1ZFUlNJT05AJywgb3MuZW52aXJvblsnTUlD
Uk9fVkVSU0lPTiddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdAQlVJTERfTlVNQkVS
QCcsIG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUu
c3ViKCdAVkVORE9SX05BTUVAJywgb3MuZW52aXJvblsnVkVORE9SX05BTUUnXSwgbGluZSkKKyAg
ICAgICAgbGluZSA9IHJlLnN1YignQFZFTkRPUl9QUkVGSVhAJywgb3MuZW52aXJvblsnVkVORE9S
X1BSRUZJWCddLCBsaW5lKQorICAgICAgICBsaW5lID0gcmUuc3ViKCdAUFJPRFVDVF9OQU1FQCcs
IG9zLmVudmlyb25bJ1BST0RVQ1RfTkFNRSddLCBsaW5lKQorCisgICAgICAgIGlmIHJlLnNlYXJj
aCgnQFZFTkRPUl9ERVZJQ0VfSURAJywgbGluZSk6CisgICAgICAgICAgICBpZiAnVkVORE9SX0RF
VklDRV9JRCcgbm90IGluIG9zLmVudmlyb24ua2V5cygpOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCdAVkVORE9SX0RFVklDRV9JREAnLCBvcy5l
bnZpcm9uWydWRU5ET1JfREVWSUNFX0lEJ10sIGxpbmUpCisKKyAgICAgICAgZHN0LndyaXRlKGxp
bmUpCisKKyAgICBkc3QuY2xvc2UoKQorICAgIHNyYy5jbG9zZSgpCisKKwogZGVmIGdldF9leHBp
cmVkX3N5bWJvbHMobmFtZSwgYWdlID0gMzApOgogICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ob3Mu
ZW52aXJvblsnU1lNQk9MX1NFUlZFUiddLCAnMDAwQWRtaW5cXGhpc3RvcnkudHh0JykKIApAQCAt
MzI5LDExICszOTksMTEgQEAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBkcml2ZXIg
PSAneGVudmJkJwogICAgIHZzID0gZ2V0VnNWZXJzaW9uKCkKIAotICAgIG9zLnV0aW1lKCdpbmNs
dWRlL3ZlcnNpb24uaHgnLCBOb25lKQotICAgIG9zLnV0aW1lKCdzcmMvJXMuaW5mJyAlIGRyaXZl
ciwgTm9uZSkKKyAgICBpZiAnVkVORE9SX05BTUUnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToK
KyAgICAgICAgb3MuZW52aXJvblsnVkVORE9SX05BTUUnXSA9ICdYZW4gUHJvamVjdCcKIAotICAg
IGlmICdDT01QQU5ZX05BTUUnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKLSAgICAgICAgb3Mu
ZW52aXJvblsnQ09NUEFOWV9OQU1FJ10gPSAnWGVuIFByb2plY3QnCisgICAgaWYgJ1ZFTkRPUl9Q
UkVGSVgnIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKKyAgICAgICAgb3MuZW52aXJvblsnVkVO
RE9SX1BSRUZJWCddID0gJ1hQJwogCiAgICAgaWYgJ1BST0RVQ1RfTkFNRScgbm90IGluIG9zLmVu
dmlyb24ua2V5cygpOgogICAgICAgICBvcy5lbnZpcm9uWydQUk9EVUNUX05BTUUnXSA9ICdYZW4n
CkBAIC0zNDUsMTMgKzQxNSwyNyBAQCBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGlm
ICdCVUlMRF9OVU1CRVInIG5vdCBpbiBvcy5lbnZpcm9uLmtleXMoKToKICAgICAgICAgb3MuZW52
aXJvblsnQlVJTERfTlVNQkVSJ10gPSBuZXh0X2J1aWxkX251bWJlcigpCiAKLSAgICBwcmludCgi
QlVJTERfTlVNQkVSPSVzIiAlIG9zLmVudmlyb25bJ0JVSUxEX05VTUJFUiddKQotCiAgICAgaWYg
J0dJVF9SRVZJU0lPTicgaW4gb3MuZW52aXJvbi5rZXlzKCk6CiAgICAgICAgIHJldmlzaW9uID0g
b3BlbigncmV2aXNpb24nLCAndycpCiAgICAgICAgIHByaW50KG9zLmVudmlyb25bJ0dJVF9SRVZJ
U0lPTiddLCBmaWxlPXJldmlzaW9uKQogICAgICAgICByZXZpc2lvbi5jbG9zZSgpCiAKKyAgICBw
cmludCgiVkVORE9SX05BTUVcdFx0JyVzJyIgJSBvcy5lbnZpcm9uWydWRU5ET1JfTkFNRSddKQor
ICAgIHByaW50KCJWRU5ET1JfUFJFRklYXHRcdCclcyciICUgb3MuZW52aXJvblsnVkVORE9SX1BS
RUZJWCddKQorCisgICAgaWYgJ1ZFTkRPUl9ERVZJQ0VfSUQnIGluIG9zLmVudmlyb24ua2V5cygp
OgorICAgICAgICBwcmludCgiVkVORE9SX0RFVklDRV9JRFx0JyVzJyIgJSBvcy5lbnZpcm9uWydW
RU5ET1JfREVWSUNFX0lEJ10pCisKKyAgICBwcmludCgiUFJPRFVDVF9OQU1FXHRcdCclcyciICUg
b3MuZW52aXJvblsnUFJPRFVDVF9OQU1FJ10pCisgICAgcHJpbnQoIk1BSk9SX1ZFUlNJT05cdFx0
JXMiICUgb3MuZW52aXJvblsnTUFKT1JfVkVSU0lPTiddKQorICAgIHByaW50KCJNSU5PUl9WRVJT
SU9OXHRcdCVzIiAlIG9zLmVudmlyb25bJ01JTk9SX1ZFUlNJT04nXSkKKyAgICBwcmludCgiTUlD
Uk9fVkVSU0lPTlx0XHQlcyIgJSBvcy5lbnZpcm9uWydNSUNST19WRVJTSU9OJ10pCisgICAgcHJp
bnQoIkJVSUxEX05VTUJFUlx0XHQlcyIgJSBvcy5lbnZpcm9uWydCVUlMRF9OVU1CRVInXSkKKyAg
ICBwcmludCgpCisKKyAgICBtYWtlX2hlYWRlcigpCisgICAgY29weV9pbmYodnMsIGRyaXZlcikK
KwogICAgIHN5bXN0b3JlX2RlbChkcml2ZXIsIDMwKQogCiAgICAgaWYgdnM9PSd2czIwMTInOgpk
aWZmIC0tZ2l0IGEvaW5jbHVkZS92ZXJzaW9uLmh4IGIvaW5jbHVkZS92ZXJzaW9uLmh4CmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmIwYTZiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUv
dmVyc2lvbi5oeAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIENvcHlyaWdodCAo
YykgQ2l0cml4IFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywgCi0gKiB3
aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIAotICog
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqIAotICogKiAgIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgCi0gKiAgICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSAKLSAqICAg
ICBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICogICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIAotICogICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgCi0gKiAgICAgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIAotICogICAgIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCAKLSAqIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIAotICogSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgCi0g
KiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSAKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SIAotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIAotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAotICogV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAotICogTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSAKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jZGVmaW5lIENPTVBBTllfTkFNRV9TVFIJIkBDT01QQU5ZX05BTUVA
IgotI2RlZmluZSBQUk9EVUNUX05BTUVfU1RSCSJAUFJPRFVDVF9OQU1FQCIKLQotI2RlZmluZSBN
QUpPUl9WRVJTSU9OCUBNQUpPUl9WRVJTSU9OQAotI2RlZmluZSBNQUpPUl9WRVJTSU9OX1NUUgki
QE1BSk9SX1ZFUlNJT05AIgotCi0jZGVmaW5lIE1JTk9SX1ZFUlNJT04JQE1JTk9SX1ZFUlNJT05A
Ci0jZGVmaW5lIE1JTk9SX1ZFUlNJT05fU1RSCSJATUlOT1JfVkVSU0lPTkAiCi0KLSNkZWZpbmUg
TUlDUk9fVkVSU0lPTglATUlDUk9fVkVSU0lPTkAKLSNkZWZpbmUgTUlDUk9fVkVSU0lPTl9TVFIJ
IkBNSUNST19WRVJTSU9OQCIKLQotI2RlZmluZSBCVUlMRF9OVU1CRVIJQEJVSUxEX05VTUJFUkAK
LSNkZWZpbmUgQlVJTERfTlVNQkVSX1NUUgkiQEJVSUxEX05VTUJFUkAiCi0KLSNkZWZpbmUgWUVB
UglAWUVBUkAKLSNkZWZpbmUgWUVBUl9TVFIJIkBZRUFSQCIKLQotI2RlZmluZSBNT05USAlATU9O
VEhACi0jZGVmaW5lIE1PTlRIX1NUUgkiQE1PTlRIQCIKLQotI2RlZmluZSBEQVkJQERBWUAKLSNk
ZWZpbmUgREFZX1NUUgkiQERBWUAiCi0KZGlmZiAtLWdpdCBhL3NyYy94ZW5jcnNoL3hlbmNyc2gu
cmMgYi9zcmMveGVuY3JzaC94ZW5jcnNoLnJjCmluZGV4IGQwOTcyNzAuLjY1YmJmZjkgMTAwNjQ0
Ci0tLSBhL3NyYy94ZW5jcnNoL3hlbmNyc2gucmMKKysrIGIvc3JjL3hlbmNyc2gveGVuY3JzaC5y
YwpAQCAtNDAsNyArNDAsNyBAQAogCiAjaW5jbHVkZSA8dmVyc2lvbi5oPgogCi0jZGVmaW5lCVZF
Ul9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBDT01QQU5ZX05BTUVfU1RSCisjZGVmaW5lCVZFUl9D
T01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1JfTkFNRV9TVFIKICNkZWZpbmUgVkVSX0xFR0FM
Q09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQgKGMpIENpdHJpeCBTeXN0ZW1zIEluYy4iCiAK
ICNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAgICAgICAgICJYRU5DUlNIIgpkaWZmIC0tZ2l0
IGEvc3JjL3hlbmRpc2sveGVuZGlzay5yYyBiL3NyYy94ZW5kaXNrL3hlbmRpc2sucmMKaW5kZXgg
NWFhNTZhMy4uYTc0Y2UwYyAxMDA2NDQKLS0tIGEvc3JjL3hlbmRpc2sveGVuZGlzay5yYworKysg
Yi9zcmMveGVuZGlzay94ZW5kaXNrLnJjCkBAIC00MCw3ICs0MCw3IEBACiAKICNpbmNsdWRlIDx2
ZXJzaW9uLmg+CiAKLSNkZWZpbmUJVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIENPTVBBTllf
TkFNRV9TVFIKKyNkZWZpbmUJVkVSX0NPTVBBTllOQU1FX1NUUiAgICAgICAgIFZFTkRPUl9OQU1F
X1NUUgogI2RlZmluZSBWRVJfTEVHQUxDT1BZUklHSFRfU1RSICAgICAgIkNvcHlyaWdodCAoYykg
Q2l0cml4IFN5c3RlbXMgSW5jLiIKIAogI2RlZmluZSBWRVJfUFJPRFVDVE5BTUVfU1RSICAgICAg
ICAgIlhFTkRJU0siCmRpZmYgLS1naXQgYS9zcmMveGVudmJkLmluZiBiL3NyYy94ZW52YmQuaW5m
CmluZGV4IGU5MmQzZmIuLjk4ZWMzZGUgMTAwNjQ0Ci0tLSBhL3NyYy94ZW52YmQuaW5mCisrKyBi
L3NyYy94ZW52YmQuaW5mCkBAIC0zMiw3ICszMiw3IEBACiBTaWduYXR1cmU9IiRXaW5kb3dzIE5U
JCIgCiBDbGFzcz1TQ1NJQWRhcHRlcgogQ2xhc3NHVUlEPXs0RDM2RTk3Qi1FMzI1LTExQ0UtQkZD
MS0wODAwMkJFMTAzMTh9IAotUHJvdmlkZXI9JUNvbXBhbnklIAorUHJvdmlkZXI9JVZlbmRvciUg
CiBDYXRhbG9nRmlsZT14ZW52YmQuY2F0CiBEcml2ZXJWZXI9MDEvMDEvMTkwMCwwLjAuMC4wCiAK
QEAgLTUwLDEyICs1MCwxMiBAQCB4ZW5kaXNrLnN5cz0wLCwKIHhlbnZiZF9jb2luc3QuZGxsPTAs
LAogCiBbTWFudWZhY3R1cmVyXSAKLSVDb21wYW55JT1JbnN0LE5UJEFSQ0gkCislVmVuZG9yJT1J
bnN0LE5UJEFSQ0gkCiAKIFtJbnN0Lk5UJEFSQ0gkXQotJVhlblZiZERlc2MlPVhlblZiZF9JbnN0
LFhFTkJVU1xWRU5fWFNDMDAwJkRFVl9WQkQmUkVWXzA4MDAwMDA5Ci0lWGVuVmJkRGVzYyU9WGVu
VmJkX0luc3QsWEVOQlVTXFZFTl9YUzAwMDEmREVWX1ZCRCZSRVZfMDgwMDAwMDkKLSVYZW5WYmRE
ZXNjJT1YZW5WYmRfSW5zdCxYRU5CVVNcVkVOX1hTMDAwMiZERVZfVkJEJlJFVl8wODAwMDAwOQor
JVhlblZiZERlc2MlPVhlblZiZF9JbnN0LFhFTkJVU1xWRU5fQFZFTkRPUl9QUkVGSVhAQFZFTkRP
Ul9ERVZJQ0VfSURAJkRFVl9WQkQmUkVWXzA4MDAwMDA5CislWGVuVmJkRGVzYyU9WGVuVmJkX0lu
c3QsWEVOQlVTXFZFTl9AVkVORE9SX1BSRUZJWEAwMDAxJkRFVl9WQkQmUkVWXzA4MDAwMDA5Cisl
WGVuVmJkRGVzYyU9WGVuVmJkX0luc3QsWEVOQlVTXFZFTl9AVkVORE9SX1BSRUZJWEAwMDAyJkRF
Vl9WQkQmUkVWXzA4MDAwMDA5CiAKIFtYZW5WYmRfSW5zdF0gCiBDb3B5RmlsZXM9WGVuVmJkX0Nv
cHlmaWxlcwpAQCAtMTA5LDcgKzEwOSw3IEBAIEhLUiwsQ29JbnN0YWxsZXJzMzIsMHgwMDAxMDAw
MCwieGVudmJkX2NvaW5zdF9ATUFKT1JfVkVSU0lPTkBfQE1JTk9SX1ZFUlNJT05AX0BNCiAKIFtT
dHJpbmdzXSAKIAotQ29tcGFueSA9ICJAQ09NUEFOWV9OQU1FQCIKK1ZlbmRvciA9ICJAVkVORE9S
X05BTUVAIgogRGlza0Rlc2MgPSAiQFBST0RVQ1RfTkFNRUAgUFYgU3RvcmFnZSBIb3N0IEFkYXB0
ZXIgUGFja2FnZSIgCiBYZW5WYmREZXNjPSAiQFBST0RVQ1RfTkFNRUAgUFYgU3RvcmFnZSBIb3N0
IEFkYXB0ZXIiCiBYZW5EaXNrRGVzYz0gIkBQUk9EVUNUX05BTUVAIFBWIFN0b3JhZ2UgRmlsdGVy
IgpkaWZmIC0tZ2l0IGEvc3JjL3hlbnZiZC94ZW52YmQucmMgYi9zcmMveGVudmJkL3hlbnZiZC5y
YwppbmRleCA2YWM4YzUwLi4xYjAxNDhiIDEwMDY0NAotLS0gYS9zcmMveGVudmJkL3hlbnZiZC5y
YworKysgYi9zcmMveGVudmJkL3hlbnZiZC5yYwpAQCAtNDAsNyArNDAsNyBAQAogCiAjaW5jbHVk
ZSA8dmVyc2lvbi5oPgogCi0jZGVmaW5lCVZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBDT01Q
QU5ZX05BTUVfU1RSCisjZGVmaW5lCVZFUl9DT01QQU5ZTkFNRV9TVFIgICAgICAgICBWRU5ET1Jf
TkFNRV9TVFIKICNkZWZpbmUgVkVSX0xFR0FMQ09QWVJJR0hUX1NUUiAgICAgICJDb3B5cmlnaHQg
KGMpIENpdHJpeCBTeXN0ZW1zIEluYy4iCiAKICNkZWZpbmUgVkVSX1BST0RVQ1ROQU1FX1NUUiAg
ICAgICAgICJYRU5WQkQiCmRpZmYgLS1naXQgYS92czIwMTIveGVuY3JzaC94ZW5jcnNoLnZjeHBy
b2ogYi92czIwMTIveGVuY3JzaC94ZW5jcnNoLnZjeHByb2oKaW5kZXggYzgzNWI0NC4uMjNmNDY5
YiAxMDA2NDQKLS0tIGEvdnMyMDEyL3hlbmNyc2gveGVuY3JzaC52Y3hwcm9qCisrKyBiL3ZzMjAx
Mi94ZW5jcnNoL3hlbmNyc2gudmN4cHJvagpAQCAtMjUsMjIgKzI1LDEyIEBACiAJPFByb3BlcnR5
R3JvdXA+CiAJCTxJbmNsdWRlUGF0aD4uLlwuLlxpbmNsdWRlOyQoSW5jbHVkZVBhdGgpPC9JbmNs
dWRlUGF0aD4KIAkJPFJ1bkNvZGVBbmFseXNpcz50cnVlPC9SdW5Db2RlQW5hbHlzaXM+Ci0gICAg
ICAgIDxFbmFibGVJbmYyY2F0PmZhbHNlPC9FbmFibGVJbmYyY2F0PgotICAgICAgICA8Q3VzdG9t
QnVpbGRCZWZvcmVUYXJnZXRzPkNsQ29tcGlsZTtTdGFtcEluZjwvQ3VzdG9tQnVpbGRCZWZvcmVU
YXJnZXRzPgorCQk8RW5hYmxlSW5mMmNhdD5mYWxzZTwvRW5hYmxlSW5mMmNhdD4KIAkJPEludERp
cj4uLlwkKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVwkKFBsYXRmb3JtKVw8L0lu
dERpcj4KIAkJPE91dERpcj4uLlwkKENvbmZpZ3VyYXRpb25OYW1lKVwkKFBsYXRmb3JtKVw8L091
dERpcj4KIAk8L1Byb3BlcnR5R3JvdXA+CiAJCiAgICAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+Ci0g
ICAgICAgIDxDdXN0b21CdWlsZFN0ZXA+Ci0gICAgICAgICAgICA8Q29tbWFuZD5lY2hvICJCdWls
ZCBJbmYiCi0gICAgICAgICAgICAgICAgcG93ZXJzaGVsbCAtQ29tbWFuZCAiKEdldC1Db250ZW50
IC4uXC4uXHNyY1x4ZW52YmQuaW5mKSAtcmVwbGFjZSAnQE1BSk9SX1ZFUlNJT05AJywgJyQoTUFK
T1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlOT1JfVkVSU0lPTkAnLCAnJChNSU5PUl9WRVJTSU9O
KScgLXJlcGxhY2UgJ0BNSUNST19WRVJTSU9OQCcsJyQoTUlDUk9fVkVSU0lPTiknIC1yZXBsYWNl
ICdAQlVJTERfTlVNQkVSQCcsJyQoQlVJTERfTlVNQkVSKScgLXJlcGxhY2UgJ0BDT01QQU5ZX05B
TUVAJywnJChDT01QQU5ZX05BTUUpJyAtcmVwbGFjZSAnQFBST0RVQ1RfTkFNRUAnLCckKFBST0RV
Q1RfTkFNRSknIHwgU2V0LUNvbnRlbnQgLi5cLi5cdnMyMDEyXHhlbnZiZC5pbmYiCi0gICAgICAg
ICAgICAgICAgZWNobyAiQnVpbGQgdmVyc2lvbiBoZWFkZXIiCi0gICAgICAgICAgICAgICAgcG93
ZXJzaGVsbCAtQ29tbWFuZCAiKEdldC1Db250ZW50IC4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oeCkg
LXJlcGxhY2UgJ0BNQUpPUl9WRVJTSU9OQCcsICckKE1BSk9SX1ZFUlNJT04pJyAtcmVwbGFjZSAn
QE1JTk9SX1ZFUlNJT05AJywgJyQoTUlOT1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlDUk9fVkVS
U0lPTkAnLCckKE1JQ1JPX1ZFUlNJT04pJyAtcmVwbGFjZSAnQEJVSUxEX05VTUJFUkAnLCckKEJV
SUxEX05VTUJFUiknIC1yZXBsYWNlICdAQ09NUEFOWV9OQU1FQCcsJyQoQ09NUEFOWV9OQU1FKScg
LXJlcGxhY2UgJ0BQUk9EVUNUX05BTUVAJywnJChQUk9EVUNUX05BTUUpJyAtcmVwbGFjZSAnQERB
WUAnLCUyNChHZXQtRGF0ZSAtZm9ybWF0ICUyNSUyNWQpIC1yZXBsYWNlICdATU9OVEhAJywlMjQo
R2V0LURhdGUgLWZvcm1hdCAlMjUlMjVNKSAtcmVwbGFjZSAnQFlFQVJAJywlMjQoR2V0LURhdGUg
LWZvcm1hdCB5eXl5KSB8IFNldC1Db250ZW50IC4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oIgotICAg
ICAgICAgICAgPC9Db21tYW5kPgotICAgICAgICAgICAgPE91dHB1dHM+Li5cLi5cdnMyMDEyXHhl
bnZiZC5pbmY7Li5cLi5caW5jbHVkZVx2ZXJzaW9uLmg8L091dHB1dHM+Ci0gICAgICAgICAgICA8
SW5wdXRzPi4uXC4uXHNyY1x4ZW52YmQuaW5mOy4uXC4uXGluY2x1ZGVcdmVyc2lvbi5oeDwvSW5w
dXRzPgotICAgICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KIAkJPENsQ29tcGlsZT4KIAkJCTxQcmVw
cm9jZXNzb3JEZWZpbml0aW9ucz5fX01PRFVMRV9fPSJYRU5DUlNIIjslKFByZXByb2Nlc3NvckRl
ZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAJCQk8V2FybmluZ0xldmVsPkVu
YWJsZUFsbFdhcm5pbmdzPC9XYXJuaW5nTGV2ZWw+CmRpZmYgLS1naXQgYS92czIwMTMveGVuY3Jz
aC94ZW5jcnNoLnZjeHByb2ogYi92czIwMTMveGVuY3JzaC94ZW5jcnNoLnZjeHByb2oKaW5kZXgg
NjY4MDQyNi4uOTA5MTRkOCAxMDA2NDQKLS0tIGEvdnMyMDEzL3hlbmNyc2gveGVuY3JzaC52Y3hw
cm9qCisrKyBiL3ZzMjAxMy94ZW5jcnNoL3hlbmNyc2gudmN4cHJvagpAQCAtMSw0ICsxLDQgQEAK
Le+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgogPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxk
IiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20v
ZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJbXBvcnQgUHJvamVjdD0iLi5cY29uZmlncy5w
cm9wcyIgLz4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgpAQCAtNTYsMjAgKzU2
LDEwIEBACiAgICAgPEluY2x1ZGVQYXRoPi4uXC4uXGluY2x1ZGU7JChJbmNsdWRlUGF0aCk8L0lu
Y2x1ZGVQYXRoPgogICAgIDxSdW5Db2RlQW5hbHlzaXM+dHJ1ZTwvUnVuQ29kZUFuYWx5c2lzPgog
ICAgIDxFbmFibGVJbmYyY2F0PmZhbHNlPC9FbmFibGVJbmYyY2F0PgotICAgIDxDdXN0b21CdWls
ZEJlZm9yZVRhcmdldHM+Q2xDb21waWxlO1N0YW1wSW5mPC9DdXN0b21CdWlsZEJlZm9yZVRhcmdl
dHM+CiAgICAgPEludERpcj4uLlwkKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb25OYW1lKVwk
KFBsYXRmb3JtKVw8L0ludERpcj4KICAgICA8T3V0RGlyPi4uXCQoQ29uZmlndXJhdGlvbk5hbWUp
XCQoUGxhdGZvcm0pXDwvT3V0RGlyPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5p
dGlvbkdyb3VwPgotICAgIDxDdXN0b21CdWlsZFN0ZXA+Ci0gICAgICAgIDxDb21tYW5kPmVjaG8g
IkJ1aWxkIEluZiIKLSAgICAgICAgICAgIHBvd2Vyc2hlbGwgLUNvbW1hbmQgIihHZXQtQ29udGVu
dCAuLlwuLlxzcmNceGVudmJkLmluZikgLXJlcGxhY2UgJ0BNQUpPUl9WRVJTSU9OQCcsICckKE1B
Sk9SX1ZFUlNJT04pJyAtcmVwbGFjZSAnQE1JTk9SX1ZFUlNJT05AJywgJyQoTUlOT1JfVkVSU0lP
TiknIC1yZXBsYWNlICdATUlDUk9fVkVSU0lPTkAnLCckKE1JQ1JPX1ZFUlNJT04pJyAtcmVwbGFj
ZSAnQEJVSUxEX05VTUJFUkAnLCckKEJVSUxEX05VTUJFUiknIC1yZXBsYWNlICdAQ09NUEFOWV9O
QU1FQCcsJyQoQ09NUEFOWV9OQU1FKScgLXJlcGxhY2UgJ0BQUk9EVUNUX05BTUVAJywnJChQUk9E
VUNUX05BTUUpJyB8IFNldC1Db250ZW50IC4uXC4uXHZzMjAxM1x4ZW52YmQuaW5mIgotICAgICAg
ICAgICAgZWNobyAiQnVpbGQgdmVyc2lvbiBoZWFkZXIiCi0gICAgICAgICAgICBwb3dlcnNoZWxs
IC1Db21tYW5kICIoR2V0LUNvbnRlbnQgLi5cLi5caW5jbHVkZVx2ZXJzaW9uLmh4KSAtcmVwbGFj
ZSAnQE1BSk9SX1ZFUlNJT05AJywgJyQoTUFKT1JfVkVSU0lPTiknIC1yZXBsYWNlICdATUlOT1Jf
VkVSU0lPTkAnLCAnJChNSU5PUl9WRVJTSU9OKScgLXJlcGxhY2UgJ0BNSUNST19WRVJTSU9OQCcs
JyQoTUlDUk9fVkVSU0lPTiknIC1yZXBsYWNlICdAQlVJTERfTlVNQkVSQCcsJyQoQlVJTERfTlVN
QkVSKScgLXJlcGxhY2UgJ0BDT01QQU5ZX05BTUVAJywnJChDT01QQU5ZX05BTUUpJyAtcmVwbGFj
ZSAnQFBST0RVQ1RfTkFNRUAnLCckKFBST0RVQ1RfTkFNRSknIC1yZXBsYWNlICdAREFZQCcsJTI0
KEdldC1EYXRlIC1mb3JtYXQgJTI1JTI1ZCkgLXJlcGxhY2UgJ0BNT05USEAnLCUyNChHZXQtRGF0
ZSAtZm9ybWF0ICUyNSUyNU0pIC1yZXBsYWNlICdAWUVBUkAnLCUyNChHZXQtRGF0ZSAtZm9ybWF0
IHl5eXkpIHwgU2V0LUNvbnRlbnQgLi5cLi5caW5jbHVkZVx2ZXJzaW9uLmgiCi0gICAgICAgIDwv
Q29tbWFuZD4KLSAgICAgICAgPE91dHB1dHM+Li5cLi5cdnMyMDEzXHhlbnZiZC5pbmY7Li5cLi5c
aW5jbHVkZVx2ZXJzaW9uLmg8L091dHB1dHM+Ci0gICAgICAgIDxJbnB1dHM+Li5cLi5cc3JjXHhl
bnZiZC5pbmY7Li5cLi5caW5jbHVkZVx2ZXJzaW9uLmh4PC9JbnB1dHM+Ci0gICAgPC9DdXN0b21C
dWlsZFN0ZXA+CiAgICAgPENsQ29tcGlsZT4KICAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9u
cz5fX01PRFVMRV9fPSJYRU5DUlNIIjslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJv
Y2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgICA8V2FybmluZ0xldmVsPkVuYWJsZUFsbFdhcm5pbmdz
PC9XYXJuaW5nTGV2ZWw+Ci0tIAoyLjEuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmlu
L21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:28:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:28:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZakE-0008GT-QL; Wed, 09 Sep 2015 08:28:42 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZakD-0008GO-69
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:28:41 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	E1/C9-00475-8BDEFE55; Wed, 09 Sep 2015 08:28:40 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1441787318!15759173!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1780 invoked from network); 9 Sep 2015 08:28:38 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-16.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:28:38 -0000
Received: by wicfx3 with SMTP id fx3so12416601wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=eRAawNXIaguG734La25V4wm6mVNPGZESEQ3y3S8D2Z4=;
	b=m2vn+0+tjZGAow88wX3kxpDJPAKKLZsxRPONLqAvYG+YHDm+TXujmh1Vszycyo++0E
	fCL+X+RdmI3ucI976clwyVevaXaGGi4AVO3mh+mmx0+PaOpu/WUDx+CmNvFlSiA+u1Xr
	XsLt17/lNF9FJdhl1B3ztk7FE1DpPVrAY3Bb+DZg4c4HGCRC16HkxdSf3qJ28g2hEccD
	cVfnQxZCjttwng1lPukeWTQipEvS66ikdGm5qCFvmSF3zp9f4+RLvP9tLvTUdFWGaAQB
	9Wehrk6SxCjbtTZaf/vHf6g2k157r7CnLf9zsN/HlkqBOdzyhV/Ipu7FcMUsqMVwMRXh
	27bA==
X-Received: by 10.194.109.97 with SMTP id hr1mr55510110wjb.38.1441787318469;
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	op6sm2575125wic.12.2015.09.09.01.28.37
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:28:28 +0100
Message-Id: <1441787308-14664-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENIFACE package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xeniface.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 MAINTAINERS                                    | 31 ++++++++---
 build.py                                       | 74 +++++++++++++++++---------
 include/version.hx                             | 58 --------------------
 src/win32stubagent/WmiAccessor.cpp             |  2 +-
 src/win32stubagent/w32xagent.rc                | 10 ++--
 src/xeniface.inf                               | 12 ++---
 src/xeniface/xeniface.rc                       |  2 +-
 vs2012/xeniface/xeniface.vcxproj               | 15 +-----
 vs2012/xeniface_coinst/xeniface_coinst.vcxproj |  9 ----
 vs2013/xeniface/xeniface.vcxproj               | 10 ----
 vs2013/xeniface_coinst/xeniface_coinst.vcxproj |  9 ----
 11 files changed, 86 insertions(+), 146 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/MAINTAINERS b/MAINTAINERS
index 09e9f65..88cc97a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6,19 +6,34 @@ who will advise you on the precise procedure they wish to use.
 
 We also request you follow these basic guidelines:
 
-1.  Make sure you test your changes on both 32- and 64-bit versions of  Windows.
+1.  Make sure you test your changes on both a 32- and 64-bit version of Windows.
+    (The more versions of Windows you can test on the better).
 
 2.  Make sure your changes do not introduce any new prefast warnings.
 
-3.  All submissions must be made under the terms of the "Developer's Certificate
-    of Origin" (DC) and should include a Signed-off-by: line.
+3.  Make a patch available to the relevant maintainer in the list. Use 'diff -u'
+    to make the patch easy to merge. Be prepared to get your changes sent back
+    with seemingly silly requests about formatting and variable names. These
+    aren't as silly as they seem. One job the maintainers do is to keep things
+    looking the same.
 
-2.  All Submissions should use Unix line endings for consitency with the rest of
-    the XenServer project.
+    NOTE that all source should have Unix line endings.
 
-3.  Each patch should include a descriptive commit comment that helps understand
-    why the patch is necessary and why it works. This will be used both for
-    initial review and for new people to understand how the code works later
+    PLEASE see http://wiki.xen.org/wiki/Submitting_Xen_Patches for hints on how
+    to submit a patch in a suitable form. Whilst the PV driver source
+    repositories are distinct from the Xen Project hypervisor source, we will
+    follow the same general patch submission and review process.
+
+    PLEASE try to include any credit lines you want added with the  patch. It
+    avoids people being missed off by mistake and makes it easier to know who
+    wants adding and who doesn't.
+
+    PLEASE document known bugs. If it doesn't work for everything or does
+    something very odd once a month document it.
+
+    PLEASE remember that submissions must be made under the terms of the
+    "Developer's Certificate of Origin" (DCO) and should include a
+    Signed-off-by: line.
 
 4.  Make sure you have the right to submit any changes you make. If you do 
     changes at work you may find your employer owns the patches instead of 
diff --git a/build.py b/build.py
index 081cb71..f49374c 100755
--- a/build.py
+++ b/build.py
@@ -29,55 +29,68 @@ def make_header():
 
     file = open('include\\version.h', 'w')
 
-    file.write('#define COMPANY_NAME_STR\t"' + os.environ['COMPANY_NAME'] + '"\n')
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
     file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
     file.write('\n')
 
-    file.write('#define MAJOR_VERSION\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define OBJECT_PREFIX_STR\t"' + os.environ['OBJECT_PREFIX'] + '"\n')
+    file.write('#define OBJECT_GUID(_Name)\t' + os.environ['OBJECT_PREFIX'] + ' ## _Name ## _GUID\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
     file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define MINOR_VERSION\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
     file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define MICRO_VERSION\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
     file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define BUILD_NUMBER\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
     file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
     file.write('\n')
 
-    file.write('#define YEAR\t' + str(now.year) + '\n')
-    file.write('#define YEAR_STR\t"' + str(now.year) + '"\n')
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
     file.write('\n')
 
-    file.write('#define MONTH\t' + str(now.month) + '\n')
-    file.write('#define MONTH_STR\t"' + str(now.month) + '"\n')
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
     file.write('\n')
 
-    file.write('#define DAY\t' + str(now.day) + '\n')
-    file.write('#define DAY_STR\t"' + str(now.day) + '"\n')
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
     file.write('\n')
 
-    file.write('#define OBJECT_PREFIX_STR\t"' + os.environ['OBJECT_PREFIX'] + '"\n')
-    file.write('#define OBJECT_GUID(_Name)\t' + os.environ['OBJECT_PREFIX'] + ' ## _Name ## _GUID\n')
-
     file.close()
 
 
-def copy_inf(name, vs):
+def copy_inf(vs, name):
     src = open('src\\%s.inf' % name, 'r')
-    dst = open(vs+'\\%s.inf' % name, 'w')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
 
     for line in src:
         line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
         line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
         line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
         line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
-        line = re.sub('@COMPANY_NAME@', os.environ['COMPANY_NAME'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
         line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
         dst.write(line)
 
     dst.close()
@@ -401,11 +414,11 @@ if __name__ == '__main__':
     driver = 'xeniface'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -420,18 +433,27 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
-    #make_header()
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        print("VENDOR_DEVICE_ID\t'%s'" % os.environ['VENDOR_DEVICE_ID'])
 
-    #copy_mof(driver)
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
 
-    #copy_inf(driver, vs)
+    make_header()
+    copy_inf(vs, driver)
+    copy_mof(driver)
 
     symstore_del(driver, 30)
 
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index a997c94..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
-#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
-
diff --git a/src/win32stubagent/WmiAccessor.cpp b/src/win32stubagent/WmiAccessor.cpp
index b4b09f2..b85ff8e 100644
--- a/src/win32stubagent/WmiAccessor.cpp
+++ b/src/win32stubagent/WmiAccessor.cpp
@@ -862,7 +862,7 @@ IWbemClassObject *openSession(WMIAccessor** wmi, const char *sessionname)
 
     VARIANT var;
     var.vt = VT_BSTR;
-    var.bstrVal=formatBstr(COMPANY_NAME_STR " Xen Win32 Service : %s", sessionname);
+    var.bstrVal=formatBstr(VENDOR_NAME_STR " " PRODUCT_NAME_STR " Win32 Service : %s", sessionname);
 
     if (var.bstrVal == NULL)
         goto formatnamebstrfailed;
diff --git a/src/win32stubagent/w32xagent.rc b/src/win32stubagent/w32xagent.rc
index 63083d9..78e5cc7 100644
--- a/src/win32stubagent/w32xagent.rc
+++ b/src/win32stubagent/w32xagent.rc
@@ -40,17 +40,17 @@
 
 #include <version.h>
 
-#define VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENIFACE"
 #define VER_PRODUCTVERSION          MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
 #define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
 
-#define VER_INTERNALNAME_STR "w32xagent.exe"
-#define VER_FILEVERSION_STR "1.0"
-#define VER_FILEDESCRIPTION_STR "w32agent"
-#define VER_ORIGINALFILENAME_STR "w32xagent.exe"
+#define VER_INTERNALNAME_STR 	    "w32xagent.exe"
+#define VER_FILEVERSION_STR 	    "1.0"
+#define VER_FILEDESCRIPTION_STR     "w32agent"
+#define VER_ORIGINALFILENAME_STR    "w32xagent.exe"
 #define VER_FILETYPE VFT_APP
 #define VER_FILESUBTYPE 0
 
diff --git a/src/xeniface.inf b/src/xeniface.inf
index 9d0b805..b3112b9 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -32,7 +32,7 @@
 Signature="$WINDOWS NT$"
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
-Provider=%Company%
+Provider=%Vendor%
 DriverVer=01/01/1900,0.0.0.0
 CatalogFile=xeniface.cat
 
@@ -42,15 +42,15 @@ Coinst.NT.Copy = 11
 ServiceDestDir.NT.Copy = 11
 
 [Manufacturer]
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		    Section	      DeviceID
 ; -----------		    -------	      --------
 
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_08000009
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_08000009
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_IFACE&REV_08000009
 
 [XenIface_Device.NT$ARCH$]
 CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
@@ -104,7 +104,7 @@ xeniface_coinst.dll=1,,
 
 [Strings]
 SPSVCINST_ASSOCSERVICE= 0x00000002
-Company= "@COMPANY_NAME@" 
+Vendor= "@VENDOR_NAME@" 
 DiskId1 = "@PRODUCT_NAME@ Interface Package"
 XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
 LITESVC_FLAGS= 0x00000800
diff --git a/src/xeniface/xeniface.rc b/src/xeniface/xeniface.rc
index df1167d..8902799 100644
--- a/src/xeniface/xeniface.rc
+++ b/src/xeniface/xeniface.rc
@@ -39,7 +39,7 @@
 
 #include <version.h>
 
-#define VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENIFACE"
diff --git a/vs2012/xeniface/xeniface.vcxproj b/vs2012/xeniface/xeniface.vcxproj
index 4220f31..a3472ba 100644
--- a/vs2012/xeniface/xeniface.vcxproj
+++ b/vs2012/xeniface/xeniface.vcxproj
@@ -25,23 +25,12 @@
 	<PropertyGroup>
 		<IncludePath>..\..\include;$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
-        <EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile;MofComp;StampInf</CustomBuildBeforeTargets>
+		<EnableInf2cat>false</EnableInf2cat>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 	
-    <ItemDefinitionGroup>
-        <CustomBuildStep>
-            <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xeniface.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2012\xeniface.inf"
-                echo "Modify mof"
-                powershell -Command "(Get-Content ..\..\src\xeniface.mof)  -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\src\xeniface\wmi.mof"
-            </Command>
-            <Outputs>..\..\vs2012\xeniface.inf;..\..\src\xeniface\wmi.mof</Outputs>
-            <Inputs>..\..\src\xeniface.inf;..\..\src\xeniface.mof</Inputs>
-        </CustomBuildStep>
-        
+    <ItemDefinitionGroup>       
 		<ClCompile>
 			<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2012/xeniface_coinst/xeniface_coinst.vcxproj b/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
index 7e2f29d..2d75a07 100644
--- a/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
+++ b/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
@@ -27,20 +27,11 @@
 		<IncludePath>$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
 		<EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 
 	<ItemDefinitionGroup>
-	  <CustomBuildStep>
-            <Command>echo "Build version header"
-	    powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\include\version.h"
-	    </Command>
-            <Outputs>..\..\include\version.h</Outputs>
-            <Inputs>..\..\include\version.hx</Inputs>
-        </CustomBuildStep>
-
 		<ClCompile>
 			<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 			<PreprocessorDefinitions>__MODULE__="XENIFACE_COINST";%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/vs2013/xeniface/xeniface.vcxproj b/vs2013/xeniface/xeniface.vcxproj
index 65743d4..fea2ad1 100644
--- a/vs2013/xeniface/xeniface.vcxproj
+++ b/vs2013/xeniface/xeniface.vcxproj
@@ -56,20 +56,10 @@
     <IncludePath>..\..\include;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;MofComp;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-      <CustomBuildStep>
-            <Command>echo "Build Inf"
-                 powershell -Command "(Get-Content ..\..\src\xeniface.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2013\xeniface.inf"
-                echo "Modify mof"
-                powershell -Command "(Get-Content ..\..\src\xeniface.mof)  -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\src\xeniface\wmi.mof"
-            </Command>
-            <Outputs>..\..\vs2013\xeniface.inf;..\..\src\xeniface\wmi.mof</Outputs>
-            <Inputs>..\..\src\xeniface.inf;..\..\src\xeniface.mof</Inputs>
-        </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xeniface_coinst/xeniface_coinst.vcxproj b/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
index b577dc8..b80b908 100644
--- a/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
+++ b/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
@@ -57,19 +57,10 @@
     <IncludePath>$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\..\include\version.h</Outputs>
-      <Inputs>..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
-
     <ClCompile>
       <AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XENIFACE_COINST";%(PreprocessorDefinitions)</PreprocessorDefinitions>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:28:43 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:28:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZakE-0008GT-QL; Wed, 09 Sep 2015 08:28:42 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZakD-0008GO-69
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:28:41 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	E1/C9-00475-8BDEFE55; Wed, 09 Sep 2015 08:28:40 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1441787318!15759173!1
X-Originating-IP: [209.85.212.174]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG, UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1780 invoked from network); 9 Sep 2015 08:28:38 -0000
Received: from mail-wi0-f174.google.com (HELO mail-wi0-f174.google.com)
	(209.85.212.174)
	by server-16.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:28:38 -0000
Received: by wicfx3 with SMTP id fx3so12416601wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=eRAawNXIaguG734La25V4wm6mVNPGZESEQ3y3S8D2Z4=;
	b=m2vn+0+tjZGAow88wX3kxpDJPAKKLZsxRPONLqAvYG+YHDm+TXujmh1Vszycyo++0E
	fCL+X+RdmI3ucI976clwyVevaXaGGi4AVO3mh+mmx0+PaOpu/WUDx+CmNvFlSiA+u1Xr
	XsLt17/lNF9FJdhl1B3ztk7FE1DpPVrAY3Bb+DZg4c4HGCRC16HkxdSf3qJ28g2hEccD
	cVfnQxZCjttwng1lPukeWTQipEvS66ikdGm5qCFvmSF3zp9f4+RLvP9tLvTUdFWGaAQB
	9Wehrk6SxCjbtTZaf/vHf6g2k157r7CnLf9zsN/HlkqBOdzyhV/Ipu7FcMUsqMVwMRXh
	27bA==
X-Received: by 10.194.109.97 with SMTP id hr1mr55510110wjb.38.1441787318469;
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	op6sm2575125wic.12.2015.09.09.01.28.37
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 01:28:38 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 09:28:28 +0100
Message-Id: <1441787308-14664-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Parameterize vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The XenServer PV vendor prefix ('XS') and PCI device (C000) are still
hard-coded into the XENIFACE package. These need to be stripped out and
replaced by values that can be customized at build time. This patch does
that.

The patch also reverts to building version.h and customizing xeniface.inf
directly in build.py.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 MAINTAINERS                                    | 31 ++++++++---
 build.py                                       | 74 +++++++++++++++++---------
 include/version.hx                             | 58 --------------------
 src/win32stubagent/WmiAccessor.cpp             |  2 +-
 src/win32stubagent/w32xagent.rc                | 10 ++--
 src/xeniface.inf                               | 12 ++---
 src/xeniface/xeniface.rc                       |  2 +-
 vs2012/xeniface/xeniface.vcxproj               | 15 +-----
 vs2012/xeniface_coinst/xeniface_coinst.vcxproj |  9 ----
 vs2013/xeniface/xeniface.vcxproj               | 10 ----
 vs2013/xeniface_coinst/xeniface_coinst.vcxproj |  9 ----
 11 files changed, 86 insertions(+), 146 deletions(-)
 delete mode 100644 include/version.hx

diff --git a/MAINTAINERS b/MAINTAINERS
index 09e9f65..88cc97a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6,19 +6,34 @@ who will advise you on the precise procedure they wish to use.
 
 We also request you follow these basic guidelines:
 
-1.  Make sure you test your changes on both 32- and 64-bit versions of  Windows.
+1.  Make sure you test your changes on both a 32- and 64-bit version of Windows.
+    (The more versions of Windows you can test on the better).
 
 2.  Make sure your changes do not introduce any new prefast warnings.
 
-3.  All submissions must be made under the terms of the "Developer's Certificate
-    of Origin" (DC) and should include a Signed-off-by: line.
+3.  Make a patch available to the relevant maintainer in the list. Use 'diff -u'
+    to make the patch easy to merge. Be prepared to get your changes sent back
+    with seemingly silly requests about formatting and variable names. These
+    aren't as silly as they seem. One job the maintainers do is to keep things
+    looking the same.
 
-2.  All Submissions should use Unix line endings for consitency with the rest of
-    the XenServer project.
+    NOTE that all source should have Unix line endings.
 
-3.  Each patch should include a descriptive commit comment that helps understand
-    why the patch is necessary and why it works. This will be used both for
-    initial review and for new people to understand how the code works later
+    PLEASE see http://wiki.xen.org/wiki/Submitting_Xen_Patches for hints on how
+    to submit a patch in a suitable form. Whilst the PV driver source
+    repositories are distinct from the Xen Project hypervisor source, we will
+    follow the same general patch submission and review process.
+
+    PLEASE try to include any credit lines you want added with the  patch. It
+    avoids people being missed off by mistake and makes it easier to know who
+    wants adding and who doesn't.
+
+    PLEASE document known bugs. If it doesn't work for everything or does
+    something very odd once a month document it.
+
+    PLEASE remember that submissions must be made under the terms of the
+    "Developer's Certificate of Origin" (DCO) and should include a
+    Signed-off-by: line.
 
 4.  Make sure you have the right to submit any changes you make. If you do 
     changes at work you may find your employer owns the patches instead of 
diff --git a/build.py b/build.py
index 081cb71..f49374c 100755
--- a/build.py
+++ b/build.py
@@ -29,55 +29,68 @@ def make_header():
 
     file = open('include\\version.h', 'w')
 
-    file.write('#define COMPANY_NAME_STR\t"' + os.environ['COMPANY_NAME'] + '"\n')
+    file.write('#define VENDOR_NAME_STR\t\t"' + os.environ['VENDOR_NAME'] + '"\n')
+    file.write('#define VENDOR_PREFIX_STR\t"' + os.environ['VENDOR_PREFIX'] + '"\n')
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        file.write('#define VENDOR_DEVICE_ID_STR\t"' + os.environ['VENDOR_DEVICE_ID'] + '"\n')
+
     file.write('#define PRODUCT_NAME_STR\t"' + os.environ['PRODUCT_NAME'] + '"\n')
     file.write('\n')
 
-    file.write('#define MAJOR_VERSION\t' + os.environ['MAJOR_VERSION'] + '\n')
+    file.write('#define OBJECT_PREFIX_STR\t"' + os.environ['OBJECT_PREFIX'] + '"\n')
+    file.write('#define OBJECT_GUID(_Name)\t' + os.environ['OBJECT_PREFIX'] + ' ## _Name ## _GUID\n')
+    file.write('\n')
+
+    file.write('#define MAJOR_VERSION\t\t' + os.environ['MAJOR_VERSION'] + '\n')
     file.write('#define MAJOR_VERSION_STR\t"' + os.environ['MAJOR_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define MINOR_VERSION\t' + os.environ['MINOR_VERSION'] + '\n')
+    file.write('#define MINOR_VERSION\t\t' + os.environ['MINOR_VERSION'] + '\n')
     file.write('#define MINOR_VERSION_STR\t"' + os.environ['MINOR_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define MICRO_VERSION\t' + os.environ['MICRO_VERSION'] + '\n')
+    file.write('#define MICRO_VERSION\t\t' + os.environ['MICRO_VERSION'] + '\n')
     file.write('#define MICRO_VERSION_STR\t"' + os.environ['MICRO_VERSION'] + '"\n')
     file.write('\n')
 
-    file.write('#define BUILD_NUMBER\t' + os.environ['BUILD_NUMBER'] + '\n')
+    file.write('#define BUILD_NUMBER\t\t' + os.environ['BUILD_NUMBER'] + '\n')
     file.write('#define BUILD_NUMBER_STR\t"' + os.environ['BUILD_NUMBER'] + '"\n')
     file.write('\n')
 
-    file.write('#define YEAR\t' + str(now.year) + '\n')
-    file.write('#define YEAR_STR\t"' + str(now.year) + '"\n')
+    file.write('#define YEAR\t\t\t' + str(now.year) + '\n')
+    file.write('#define YEAR_STR\t\t"' + str(now.year) + '"\n')
     file.write('\n')
 
-    file.write('#define MONTH\t' + str(now.month) + '\n')
-    file.write('#define MONTH_STR\t"' + str(now.month) + '"\n')
+    file.write('#define MONTH\t\t\t' + str(now.month) + '\n')
+    file.write('#define MONTH_STR\t\t"' + str(now.month) + '"\n')
     file.write('\n')
 
-    file.write('#define DAY\t' + str(now.day) + '\n')
-    file.write('#define DAY_STR\t"' + str(now.day) + '"\n')
+    file.write('#define DAY\t\t\t' + str(now.day) + '\n')
+    file.write('#define DAY_STR\t\t\t"' + str(now.day) + '"\n')
     file.write('\n')
 
-    file.write('#define OBJECT_PREFIX_STR\t"' + os.environ['OBJECT_PREFIX'] + '"\n')
-    file.write('#define OBJECT_GUID(_Name)\t' + os.environ['OBJECT_PREFIX'] + ' ## _Name ## _GUID\n')
-
     file.close()
 
 
-def copy_inf(name, vs):
+def copy_inf(vs, name):
     src = open('src\\%s.inf' % name, 'r')
-    dst = open(vs+'\\%s.inf' % name, 'w')
+    dst = open('%s\\%s.inf' % (vs, name), 'w')
 
     for line in src:
         line = re.sub('@MAJOR_VERSION@', os.environ['MAJOR_VERSION'], line)
         line = re.sub('@MINOR_VERSION@', os.environ['MINOR_VERSION'], line)
         line = re.sub('@MICRO_VERSION@', os.environ['MICRO_VERSION'], line)
         line = re.sub('@BUILD_NUMBER@', os.environ['BUILD_NUMBER'], line)
-        line = re.sub('@COMPANY_NAME@', os.environ['COMPANY_NAME'], line)
+        line = re.sub('@VENDOR_NAME@', os.environ['VENDOR_NAME'], line)
+        line = re.sub('@VENDOR_PREFIX@', os.environ['VENDOR_PREFIX'], line)
         line = re.sub('@PRODUCT_NAME@', os.environ['PRODUCT_NAME'], line)
+
+        if re.search('@VENDOR_DEVICE_ID@', line):
+            if 'VENDOR_DEVICE_ID' not in os.environ.keys():
+                continue
+            line = re.sub('@VENDOR_DEVICE_ID@', os.environ['VENDOR_DEVICE_ID'], line)
+
         dst.write(line)
 
     dst.close()
@@ -401,11 +414,11 @@ if __name__ == '__main__':
     driver = 'xeniface'
     vs = getVsVersion()
 
-    os.utime('include/version.hx', None)
-    os.utime('src/%s.inf' % driver, None)
+    if 'VENDOR_NAME' not in os.environ.keys():
+        os.environ['VENDOR_NAME'] = 'Xen Project'
 
-    if 'COMPANY_NAME' not in os.environ.keys():
-        os.environ['COMPANY_NAME'] = 'Xen Project'
+    if 'VENDOR_PREFIX' not in os.environ.keys():
+        os.environ['VENDOR_PREFIX'] = 'XP'
 
     if 'PRODUCT_NAME' not in os.environ.keys():
         os.environ['PRODUCT_NAME'] = 'Xen'
@@ -420,18 +433,27 @@ if __name__ == '__main__':
     if 'BUILD_NUMBER' not in os.environ.keys():
         os.environ['BUILD_NUMBER'] = next_build_number()
 
-    print("BUILD_NUMBER=%s" % os.environ['BUILD_NUMBER'])
-
     if 'GIT_REVISION' in os.environ.keys():
         revision = open('revision', 'w')
         print(os.environ['GIT_REVISION'], file=revision)
         revision.close()
 
-    #make_header()
+    print("VENDOR_NAME\t\t'%s'" % os.environ['VENDOR_NAME'])
+    print("VENDOR_PREFIX\t\t'%s'" % os.environ['VENDOR_PREFIX'])
+
+    if 'VENDOR_DEVICE_ID' in os.environ.keys():
+        print("VENDOR_DEVICE_ID\t'%s'" % os.environ['VENDOR_DEVICE_ID'])
 
-    #copy_mof(driver)
+    print("PRODUCT_NAME\t\t'%s'" % os.environ['PRODUCT_NAME'])
+    print("MAJOR_VERSION\t\t%s" % os.environ['MAJOR_VERSION'])
+    print("MINOR_VERSION\t\t%s" % os.environ['MINOR_VERSION'])
+    print("MICRO_VERSION\t\t%s" % os.environ['MICRO_VERSION'])
+    print("BUILD_NUMBER\t\t%s" % os.environ['BUILD_NUMBER'])
+    print()
 
-    #copy_inf(driver, vs)
+    make_header()
+    copy_inf(vs, driver)
+    copy_mof(driver)
 
     symstore_del(driver, 30)
 
diff --git a/include/version.hx b/include/version.hx
deleted file mode 100644
index a997c94..0000000
--- a/include/version.hx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Copyright (c) Citrix Systems Inc.
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, 
- * with or without modification, are permitted provided 
- * that the following conditions are met:
- * 
- * *   Redistributions of source code must retain the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer.
- * *   Redistributions in binary form must reproduce the above 
- *     copyright notice, this list of conditions and the 
- *     following disclaimer in the documentation and/or other 
- *     materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- */
-
-#define COMPANY_NAME_STR	"@COMPANY_NAME@"
-#define PRODUCT_NAME_STR	"@PRODUCT_NAME@"
-
-#define MAJOR_VERSION	@MAJOR_VERSION@
-#define MAJOR_VERSION_STR	"@MAJOR_VERSION@"
-
-#define MINOR_VERSION	@MINOR_VERSION@
-#define MINOR_VERSION_STR	"@MINOR_VERSION@"
-
-#define MICRO_VERSION	@MICRO_VERSION@
-#define MICRO_VERSION_STR	"@MICRO_VERSION@"
-
-#define BUILD_NUMBER	@BUILD_NUMBER@
-#define BUILD_NUMBER_STR	"@BUILD_NUMBER@"
-
-#define YEAR	@YEAR@
-#define YEAR_STR	"@YEAR@"
-
-#define MONTH	@MONTH@
-#define MONTH_STR	"@MONTH@"
-
-#define DAY	@DAY@
-#define DAY_STR	"@DAY@"
-
-#define OBJECT_PREFIX_STR   "@OBJECT_PREFIX@"
-#define OBJECT_GUID(_Name)  @OBJECT_PREFIX@ ## _Name ## _GUID
-
diff --git a/src/win32stubagent/WmiAccessor.cpp b/src/win32stubagent/WmiAccessor.cpp
index b4b09f2..b85ff8e 100644
--- a/src/win32stubagent/WmiAccessor.cpp
+++ b/src/win32stubagent/WmiAccessor.cpp
@@ -862,7 +862,7 @@ IWbemClassObject *openSession(WMIAccessor** wmi, const char *sessionname)
 
     VARIANT var;
     var.vt = VT_BSTR;
-    var.bstrVal=formatBstr(COMPANY_NAME_STR " Xen Win32 Service : %s", sessionname);
+    var.bstrVal=formatBstr(VENDOR_NAME_STR " " PRODUCT_NAME_STR " Win32 Service : %s", sessionname);
 
     if (var.bstrVal == NULL)
         goto formatnamebstrfailed;
diff --git a/src/win32stubagent/w32xagent.rc b/src/win32stubagent/w32xagent.rc
index 63083d9..78e5cc7 100644
--- a/src/win32stubagent/w32xagent.rc
+++ b/src/win32stubagent/w32xagent.rc
@@ -40,17 +40,17 @@
 
 #include <version.h>
 
-#define VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENIFACE"
 #define VER_PRODUCTVERSION          MAJOR_VERSION,MINOR_VERSION,MICRO_VERSION,BUILD_NUMBER
 #define VER_PRODUCTVERSION_STR      MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR
 
-#define VER_INTERNALNAME_STR "w32xagent.exe"
-#define VER_FILEVERSION_STR "1.0"
-#define VER_FILEDESCRIPTION_STR "w32agent"
-#define VER_ORIGINALFILENAME_STR "w32xagent.exe"
+#define VER_INTERNALNAME_STR 	    "w32xagent.exe"
+#define VER_FILEVERSION_STR 	    "1.0"
+#define VER_FILEDESCRIPTION_STR     "w32agent"
+#define VER_ORIGINALFILENAME_STR    "w32xagent.exe"
 #define VER_FILETYPE VFT_APP
 #define VER_FILESUBTYPE 0
 
diff --git a/src/xeniface.inf b/src/xeniface.inf
index 9d0b805..b3112b9 100644
--- a/src/xeniface.inf
+++ b/src/xeniface.inf
@@ -32,7 +32,7 @@
 Signature="$WINDOWS NT$"
 Class=System
 ClassGUID={4d36e97d-e325-11ce-bfc1-08002be10318} 
-Provider=%Company%
+Provider=%Vendor%
 DriverVer=01/01/1900,0.0.0.0
 CatalogFile=xeniface.cat
 
@@ -42,15 +42,15 @@ Coinst.NT.Copy = 11
 ServiceDestDir.NT.Copy = 11
 
 [Manufacturer]
-%Company%=Inst,NT$ARCH$
+%Vendor%=Inst,NT$ARCH$
 
 [Inst.NT$ARCH$]
 ; DisplayName		    Section	      DeviceID
 ; -----------		    -------	      --------
 
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XSC000&DEV_IFACE&REV_08000009
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0001&DEV_IFACE&REV_08000009
-%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_XS0002&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@@VENDOR_DEVICE_ID@&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@0001&DEV_IFACE&REV_08000009
+%XenIfaceDevice.DeviceDesc% =XenIface_Device, XENBUS\VEN_@VENDOR_PREFIX@0002&DEV_IFACE&REV_08000009
 
 [XenIface_Device.NT$ARCH$]
 CopyFiles=XenIface_Device.NT.Copy, ServiceDestDir.NT.Copy
@@ -104,7 +104,7 @@ xeniface_coinst.dll=1,,
 
 [Strings]
 SPSVCINST_ASSOCSERVICE= 0x00000002
-Company= "@COMPANY_NAME@" 
+Vendor= "@VENDOR_NAME@" 
 DiskId1 = "@PRODUCT_NAME@ Interface Package"
 XenIfaceDevice.DeviceDesc = "@PRODUCT_NAME@ Interface"
 LITESVC_FLAGS= 0x00000800
diff --git a/src/xeniface/xeniface.rc b/src/xeniface/xeniface.rc
index df1167d..8902799 100644
--- a/src/xeniface/xeniface.rc
+++ b/src/xeniface/xeniface.rc
@@ -39,7 +39,7 @@
 
 #include <version.h>
 
-#define VER_COMPANYNAME_STR         COMPANY_NAME_STR
+#define VER_COMPANYNAME_STR         VENDOR_NAME_STR
 #define VER_LEGALCOPYRIGHT_STR      "Copyright (c) Citrix Systems Inc."
 
 #define VER_PRODUCTNAME_STR         "XENIFACE"
diff --git a/vs2012/xeniface/xeniface.vcxproj b/vs2012/xeniface/xeniface.vcxproj
index 4220f31..a3472ba 100644
--- a/vs2012/xeniface/xeniface.vcxproj
+++ b/vs2012/xeniface/xeniface.vcxproj
@@ -25,23 +25,12 @@
 	<PropertyGroup>
 		<IncludePath>..\..\include;$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
-        <EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile;MofComp;StampInf</CustomBuildBeforeTargets>
+		<EnableInf2cat>false</EnableInf2cat>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 	
-    <ItemDefinitionGroup>
-        <CustomBuildStep>
-            <Command>echo "Build Inf"
-                powershell -Command "(Get-Content ..\..\src\xeniface.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2012\xeniface.inf"
-                echo "Modify mof"
-                powershell -Command "(Get-Content ..\..\src\xeniface.mof)  -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\src\xeniface\wmi.mof"
-            </Command>
-            <Outputs>..\..\vs2012\xeniface.inf;..\..\src\xeniface\wmi.mof</Outputs>
-            <Inputs>..\..\src\xeniface.inf;..\..\src\xeniface.mof</Inputs>
-        </CustomBuildStep>
-        
+    <ItemDefinitionGroup>       
 		<ClCompile>
 			<PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2012/xeniface_coinst/xeniface_coinst.vcxproj b/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
index 7e2f29d..2d75a07 100644
--- a/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
+++ b/vs2012/xeniface_coinst/xeniface_coinst.vcxproj
@@ -27,20 +27,11 @@
 		<IncludePath>$(IncludePath)</IncludePath>
 		<RunCodeAnalysis>true</RunCodeAnalysis>
 		<EnableInf2cat>false</EnableInf2cat>
-        <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
 		<IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
 		<OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
 	</PropertyGroup>
 
 	<ItemDefinitionGroup>
-	  <CustomBuildStep>
-            <Command>echo "Build version header"
-	    powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\include\version.h"
-	    </Command>
-            <Outputs>..\..\include\version.h</Outputs>
-            <Inputs>..\..\include\version.hx</Inputs>
-        </CustomBuildStep>
-
 		<ClCompile>
 			<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
 			<PreprocessorDefinitions>__MODULE__="XENIFACE_COINST";%(PreprocessorDefinitions)</PreprocessorDefinitions>
diff --git a/vs2013/xeniface/xeniface.vcxproj b/vs2013/xeniface/xeniface.vcxproj
index 65743d4..fea2ad1 100644
--- a/vs2013/xeniface/xeniface.vcxproj
+++ b/vs2013/xeniface/xeniface.vcxproj
@@ -56,20 +56,10 @@
     <IncludePath>..\..\include;$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile;MofComp;StampInf</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-      <CustomBuildStep>
-            <Command>echo "Build Inf"
-                 powershell -Command "(Get-Content ..\..\src\xeniface.inf) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' | Set-Content ..\..\vs2013\xeniface.inf"
-                echo "Modify mof"
-                powershell -Command "(Get-Content ..\..\src\xeniface.mof)  -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\src\xeniface\wmi.mof"
-            </Command>
-            <Outputs>..\..\vs2013\xeniface.inf;..\..\src\xeniface\wmi.mof</Outputs>
-            <Inputs>..\..\src\xeniface.inf;..\..\src\xeniface.mof</Inputs>
-        </CustomBuildStep>
     <ClCompile>
       <PreprocessorDefinitions>__MODULE__="XENIFACE";POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
diff --git a/vs2013/xeniface_coinst/xeniface_coinst.vcxproj b/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
index b577dc8..b80b908 100644
--- a/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
+++ b/vs2013/xeniface_coinst/xeniface_coinst.vcxproj
@@ -57,19 +57,10 @@
     <IncludePath>$(IncludePath)</IncludePath>
     <RunCodeAnalysis>true</RunCodeAnalysis>
     <EnableInf2cat>false</EnableInf2cat>
-    <CustomBuildBeforeTargets>ClCompile</CustomBuildBeforeTargets>
     <IntDir>..\$(ProjectName)\$(ConfigurationName)\$(Platform)\</IntDir>
     <OutDir>..\$(ConfigurationName)\$(Platform)\</OutDir>
   </PropertyGroup>
   <ItemDefinitionGroup>
-    <CustomBuildStep>
-      <Command>echo "Build version header"
-      powershell -Command "(Get-Content ..\..\include\version.hx) -replace '@MAJOR_VERSION@', '$(MAJOR_VERSION)' -replace '@MINOR_VERSION@', '$(MINOR_VERSION)' -replace '@MICRO_VERSION@','$(MICRO_VERSION)' -replace '@BUILD_NUMBER@','$(BUILD_NUMBER)' -replace '@COMPANY_NAME@','$(COMPANY_NAME)' -replace '@PRODUCT_NAME@','$(PRODUCT_NAME)' -replace '@DAY@',%24(Get-Date -format %25%25d) -replace '@MONTH@',%24(Get-Date -format %25%25M) -replace '@YEAR@',%24(Get-Date -format yyyy) -replace '@OBJECT_PREFIX@','$(OBJECT_PREFIX)' | Set-Content ..\..\include\version.h"
-      </Command>
-      <Outputs>..\..\include\version.h</Outputs>
-      <Inputs>..\..\include\version.hx</Inputs>
-    </CustomBuildStep>
-
     <ClCompile>
       <AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>__MODULE__="XENIFACE_COINST";%(PreprocessorDefinitions)</PreprocessorDefinitions>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:34:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:34:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaqE-0000e2-1Z; Wed, 09 Sep 2015 08:34:54 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZaqD-0000du-6F
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:34:53 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	DD/F4-30270-C2FEFE55; Wed, 09 Sep 2015 08:34:52 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441787690!33820178!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14266 invoked from network); 9 Sep 2015 08:34:52 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:34:52 -0000
X-IronPort-AV: E=Sophos;i="5.17,495,1437436800"; 
   d="scan'208";a="2544193"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw
Date: Wed, 9 Sep 2015 08:34:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
In-Reply-To: <55EF80D8.1090304@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMgaGFzaHRhYmxlIHVzYWdl
DQo+IA0KPiBJcyB0aGUgaGFzaCB0YWJsZSBmcm9tIGhhc2hfdGFibGUuYyBzdXBwb3NlZCB0byBh
Y2NlcHQgYXJiaXRyYXJ5IGtleQ0KPiB2YWx1ZXM/DQoNClRoYXQncyB0aGUgaWRlYS4gV2hhdCBh
cmUgeW91IGludGVuZGluZyB0byBkbyB3aXRoIGl0PyBJIGhhdmUgYmVlbiB3b25kZXJpbmcgYWJv
dXQgZXhwb3NpbmcgaXQgYXMgYW4gaW50ZXJmYWNlLg0KDQo+IEkndmUgYmVlbiB0cmlwcGluZyB0
aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRoYXQNCj4gd2VyZSA2NGJp
dCBhZGRyZXNzZXMuDQo+IA0KDQpUaGF0IHNvdW5kcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1
ZyB0aGVuLiBJJ2xsIGhhdmUgYSBsb29rLg0KDQpDaGVlcnMsDQoNCiAgICBQYXVsDQoNCj4gLS0N
Cj4gUmFmYcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0K
PiBodHRwczovL3d3dy5xdWJlcy1vcy5vcmcvDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQo+
IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRwOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxp
bmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhl
bnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:34:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:34:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZaqE-0000e2-1Z; Wed, 09 Sep 2015 08:34:54 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZaqD-0000du-6F
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:34:53 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	DD/F4-30270-C2FEFE55; Wed, 09 Sep 2015 08:34:52 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441787690!33820178!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14266 invoked from network); 9 Sep 2015 08:34:52 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:34:52 -0000
X-IronPort-AV: E=Sophos;i="5.17,495,1437436800"; 
   d="scan'208";a="2544193"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw
Date: Wed, 9 Sep 2015 08:34:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
In-Reply-To: <55EF80D8.1090304@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMgaGFzaHRhYmxlIHVzYWdl
DQo+IA0KPiBJcyB0aGUgaGFzaCB0YWJsZSBmcm9tIGhhc2hfdGFibGUuYyBzdXBwb3NlZCB0byBh
Y2NlcHQgYXJiaXRyYXJ5IGtleQ0KPiB2YWx1ZXM/DQoNClRoYXQncyB0aGUgaWRlYS4gV2hhdCBh
cmUgeW91IGludGVuZGluZyB0byBkbyB3aXRoIGl0PyBJIGhhdmUgYmVlbiB3b25kZXJpbmcgYWJv
dXQgZXhwb3NpbmcgaXQgYXMgYW4gaW50ZXJmYWNlLg0KDQo+IEkndmUgYmVlbiB0cmlwcGluZyB0
aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRoYXQNCj4gd2VyZSA2NGJp
dCBhZGRyZXNzZXMuDQo+IA0KDQpUaGF0IHNvdW5kcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1
ZyB0aGVuLiBJJ2xsIGhhdmUgYSBsb29rLg0KDQpDaGVlcnMsDQoNCiAgICBQYXVsDQoNCj4gLS0N
Cj4gUmFmYcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0K
PiBodHRwczovL3d3dy5xdWJlcy1vcy5vcmcvDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXw0KPiB3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQo+
IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRwOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxp
bmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhl
bnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:54:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:54:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZb9G-0002Hp-Fa; Wed, 09 Sep 2015 08:54:34 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZb9F-0002Hk-VR
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:54:34 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	B9/6E-32615-9C3FFE55; Wed, 09 Sep 2015 08:54:33 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441788872!18083548!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 357 invoked from network); 9 Sep 2015 08:54:32 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:54:32 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2544793"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: Parameterization vendor prefix and PCI device id
Thread-Index: AdDq2qgom3xg83KGST+hP3QaUQJRGA==
Date: Wed, 9 Sep 2015 08:54:32 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

  My recent set of patches (one for each driver) to parameterize the device name vendor prefix and vendor PCI device id have a knock on effect on compatibility between drivers. This, however, is with good reason...

  There was a recent incident where Windows PV drivers were accidentally posted to Windows Update (not by Citrix) using binding names in use by Citrix XenServer. To avoid this sort of accident it seems prudent to parameterize the names and these patches do that.
  The default vendor prefix has been set to 'XP' (Xen Project) rather than 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build time, but for Xen Project development builds this means drivers built after these patches are applied will not be compatible with those before. The bindings for the XenServer vendor PCI device are also no longer hardcoded but this is unlikely to have an effect on most people unless they have been deliberately specifying this device in their VM config.
  I am also intending to back-port all the patches to the 8.1 branch and tag a new rc in the near future. I will mail out once the patches are there and the branches are tagged. With any luck I can also get rc builds posted to xenbits in the near future; that may require a little infrastructure tweaking though.

  Cheers,

    Paul

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 08:54:35 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 08:54:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZb9G-0002Hp-Fa; Wed, 09 Sep 2015 08:54:34 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZb9F-0002Hk-VR
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 08:54:34 +0000
Received: from [85.158.139.211] by server-1.bemta-5.messagelabs.com id
	B9/6E-32615-9C3FFE55; Wed, 09 Sep 2015 08:54:33 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441788872!18083548!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 357 invoked from network); 9 Sep 2015 08:54:32 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 08:54:32 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2544793"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: Parameterization vendor prefix and PCI device id
Thread-Index: AdDq2qgom3xg83KGST+hP3QaUQJRGA==
Date: Wed, 9 Sep 2015 08:54:32 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Hi,

  My recent set of patches (one for each driver) to parameterize the device name vendor prefix and vendor PCI device id have a knock on effect on compatibility between drivers. This, however, is with good reason...

  There was a recent incident where Windows PV drivers were accidentally posted to Windows Update (not by Citrix) using binding names in use by Citrix XenServer. To avoid this sort of accident it seems prudent to parameterize the names and these patches do that.
  The default vendor prefix has been set to 'XP' (Xen Project) rather than 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build time, but for Xen Project development builds this means drivers built after these patches are applied will not be compatible with those before. The bindings for the XenServer vendor PCI device are also no longer hardcoded but this is unlikely to have an effect on most people unless they have been deliberately specifying this device in their VM config.
  I am also intending to back-port all the patches to the 8.1 branch and tag a new rc in the near future. I will mail out once the patches are there and the branches are tagged. With any luck I can also get rc builds posted to xenbits in the near future; that may require a little infrastructure tweaking though.

  Cheers,

    Paul

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:17:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:17:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZbVJ-0004P6-8J; Wed, 09 Sep 2015 09:17:21 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZbVH-0004Ni-1H
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:17:19 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	A8/BB-00475-D19FFE55; Wed, 09 Sep 2015 09:17:17 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1441790235!48141749!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22713 invoked from network); 9 Sep 2015 09:17:17 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-6.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 09:17:17 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 3C6FD21609
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 05:17:15 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Wed, 09 Sep 2015 05:17:15 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=4WjxJr8+uPLK647o
	W/+PduYY8J8=; b=aTQshkpv1TUTlIkrMiYBOrSMV8DiS/Sa95o/9vx+l1ZK6fro
	zKgTSA2K++5LOGzr5tU0KaVVKtkTcILCY+GMzvtMbJRNp7zuXvywPvsO78JNbg6K
	AC2kvUcwHX1/v/woKKvzI0bKvYMXBliZ4p3b/jv0WMTGf/X/Ib/N3cyeVmE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=4WjxJr8+uPLK647
	oW/+PduYY8J8=; b=kRmOItDpirEw7SXunDdIX/rtvTUe4gch+OzSBJQK6aKVH/r
	rjNXM/66YFeZtFCgYJjpEn8K2nEJBHbjsvNkl+ZcZnoh0lk7nhIGpYOYugX1Wkbp
	xA9prnugPnI1+CuUt223PzikmvP+ydrs1t8kwm8yRqjDKHSdOe+roIkWPBIA=
X-Sasl-enc: l+6M5PuC29siBFzukN1j/hMvsCVtTRhB0ok1H8QlUYlu 1441790234
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id AB5D2680119;
	Wed,  9 Sep 2015 05:17:14 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55EFF919.9080702@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 11:17:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
Content-Length:1443
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMDkgU2VwdGVtYmVyIDIw
MTUgMDE6NDQKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJq
ZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMgaGFzaHRhYmxlIHVzYWdlCj4+Cj4+IElzIHRoZSBo
YXNoIHRhYmxlIGZyb20gaGFzaF90YWJsZS5jIHN1cHBvc2VkIHRvIGFjY2VwdCBhcmJpdHJhcnkg
a2V5Cj4+IHZhbHVlcz8KPiAKPiBUaGF0J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRp
bmcgdG8gZG8gd2l0aCBpdD8gSSBoYXZlIGJlZW4gd29uZGVyaW5nIGFib3V0IGV4cG9zaW5nIGl0
IGFzIGFuIGludGVyZmFjZS4KPiAKSSB3YW50ZWQgdG8gdXNlIGl0IGZvciBzdG9yaW5nIGFkZHJl
c3MgPC0+IG1hcCBoYW5kbGVzIGZvciBnbnR0YWIgYXMgeW91CnN1Z2dlc3RlZC4KCj4+IEkndmUg
YmVlbiB0cmlwcGluZyB0aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRo
YXQKPj4gd2VyZSA2NGJpdCBhZGRyZXNzZXMuCj4+Cj4gCj4gVGhhdCBzb3VuZHMgbGlrZSBhIHN0
cmFpZ2h0Zm9yd2FyZCBidWcgdGhlbi4gSSdsbCBoYXZlIGEgbG9vay4KPiAKPiBDaGVlcnMsCj4g
Cj4gICAgIFBhdWwKPiAKCi0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRv
d3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QK
d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:17:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:17:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZbVJ-0004P6-8J; Wed, 09 Sep 2015 09:17:21 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZbVH-0004Ni-1H
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:17:19 +0000
Received: from [193.109.254.147] by server-5.bemta-14.messagelabs.com id
	A8/BB-00475-D19FFE55; Wed, 09 Sep 2015 09:17:17 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1441790235!48141749!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22713 invoked from network); 9 Sep 2015 09:17:17 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-6.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 09:17:17 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 3C6FD21609
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 05:17:15 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Wed, 09 Sep 2015 05:17:15 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=4WjxJr8+uPLK647o
	W/+PduYY8J8=; b=aTQshkpv1TUTlIkrMiYBOrSMV8DiS/Sa95o/9vx+l1ZK6fro
	zKgTSA2K++5LOGzr5tU0KaVVKtkTcILCY+GMzvtMbJRNp7zuXvywPvsO78JNbg6K
	AC2kvUcwHX1/v/woKKvzI0bKvYMXBliZ4p3b/jv0WMTGf/X/Ib/N3cyeVmE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=4WjxJr8+uPLK647
	oW/+PduYY8J8=; b=kRmOItDpirEw7SXunDdIX/rtvTUe4gch+OzSBJQK6aKVH/r
	rjNXM/66YFeZtFCgYJjpEn8K2nEJBHbjsvNkl+ZcZnoh0lk7nhIGpYOYugX1Wkbp
	xA9prnugPnI1+CuUt223PzikmvP+ydrs1t8kwm8yRqjDKHSdOe+roIkWPBIA=
X-Sasl-enc: l+6M5PuC29siBFzukN1j/hMvsCVtTRhB0ok1H8QlUYlu 1441790234
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id AB5D2680119;
	Wed,  9 Sep 2015 05:17:14 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55EFF919.9080702@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 11:17:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
Content-Length:1443
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGEKPj4gU2VudDogMDkgU2VwdGVtYmVyIDIw
MTUgMDE6NDQKPj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+PiBTdWJq
ZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMgaGFzaHRhYmxlIHVzYWdlCj4+Cj4+IElzIHRoZSBo
YXNoIHRhYmxlIGZyb20gaGFzaF90YWJsZS5jIHN1cHBvc2VkIHRvIGFjY2VwdCBhcmJpdHJhcnkg
a2V5Cj4+IHZhbHVlcz8KPiAKPiBUaGF0J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRp
bmcgdG8gZG8gd2l0aCBpdD8gSSBoYXZlIGJlZW4gd29uZGVyaW5nIGFib3V0IGV4cG9zaW5nIGl0
IGFzIGFuIGludGVyZmFjZS4KPiAKSSB3YW50ZWQgdG8gdXNlIGl0IGZvciBzdG9yaW5nIGFkZHJl
c3MgPC0+IG1hcCBoYW5kbGVzIGZvciBnbnR0YWIgYXMgeW91CnN1Z2dlc3RlZC4KCj4+IEkndmUg
YmVlbiB0cmlwcGluZyB0aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRo
YXQKPj4gd2VyZSA2NGJpdCBhZGRyZXNzZXMuCj4+Cj4gCj4gVGhhdCBzb3VuZHMgbGlrZSBhIHN0
cmFpZ2h0Zm9yd2FyZCBidWcgdGhlbi4gSSdsbCBoYXZlIGEgbG9vay4KPiAKPiBDaGVlcnMsCj4g
Cj4gICAgIFBhdWwKPiAKCi0tIApSYWZhxYIgV29qZHnFgmEKUXViZXMgVG9vbHMgZm9yIFdpbmRv
d3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8KCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QK
d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:18:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:18:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZbWS-0004uW-NU; Wed, 09 Sep 2015 09:18:32 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZbWR-0004uJ-E1
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:18:31 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	B1/3E-19110-669FFE55; Wed, 09 Sep 2015 09:18:30 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441790309!48136092!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19643 invoked from network); 9 Sep 2015 09:18:30 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 09:18:30 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2545693"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsA==
Date: Wed, 9 Sep 2015 09:18:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
In-Reply-To: <55EFF919.9080702@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDEwOjE3DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gT24gMjAxNS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4g
Pj4gU2VudDogMDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gPj4gVG86IHdpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMg
aGFzaHRhYmxlIHVzYWdlDQo+ID4+DQo+ID4+IElzIHRoZSBoYXNoIHRhYmxlIGZyb20gaGFzaF90
YWJsZS5jIHN1cHBvc2VkIHRvIGFjY2VwdCBhcmJpdHJhcnkga2V5DQo+ID4+IHZhbHVlcz8NCg0K
T2ssIGNvb2wuIEknbGwgZ2V0IGEgZml4IHRvZ2V0aGVyIGEucy5hLnAuDQoNCiAgUGF1bA0KDQo+
ID4NCj4gPiBUaGF0J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRpbmcgdG8gZG8gd2l0
aCBpdD8gSSBoYXZlIGJlZW4NCj4gd29uZGVyaW5nIGFib3V0IGV4cG9zaW5nIGl0IGFzIGFuIGlu
dGVyZmFjZS4NCj4gPg0KPiBJIHdhbnRlZCB0byB1c2UgaXQgZm9yIHN0b3JpbmcgYWRkcmVzcyA8
LT4gbWFwIGhhbmRsZXMgZm9yIGdudHRhYiBhcyB5b3UNCj4gc3VnZ2VzdGVkLg0KPiANCj4gPj4g
SSd2ZSBiZWVuIHRyaXBwaW5nIHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFzaCgpIG9uIGtl
eXMgdGhhdA0KPiA+PiB3ZXJlIDY0Yml0IGFkZHJlc3Nlcy4NCj4gPj4NCj4gPg0KPiA+IFRoYXQg
c291bmRzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIHRoZW4uIEknbGwgaGF2ZSBhIGxvb2su
DQo+ID4NCj4gPiBDaGVlcnMsDQo+ID4NCj4gPiAgICAgUGF1bA0KPiA+DQo+IA0KPiAtLQ0KPiBS
YWZhxYIgV29qZHnFgmENCj4gUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyDQo+IGh0
dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:18:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:18:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZbWS-0004uW-NU; Wed, 09 Sep 2015 09:18:32 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZbWR-0004uJ-E1
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:18:31 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	B1/3E-19110-669FFE55; Wed, 09 Sep 2015 09:18:30 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441790309!48136092!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 19643 invoked from network); 9 Sep 2015 09:18:30 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 09:18:30 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2545693"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsA==
Date: Wed, 9 Sep 2015 09:18:29 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
In-Reply-To: <55EFF919.9080702@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDEwOjE3DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gT24gMjAxNS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4g
Pj4gU2VudDogMDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gPj4gVG86IHdpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiA+PiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBYZW5idXMg
aGFzaHRhYmxlIHVzYWdlDQo+ID4+DQo+ID4+IElzIHRoZSBoYXNoIHRhYmxlIGZyb20gaGFzaF90
YWJsZS5jIHN1cHBvc2VkIHRvIGFjY2VwdCBhcmJpdHJhcnkga2V5DQo+ID4+IHZhbHVlcz8NCg0K
T2ssIGNvb2wuIEknbGwgZ2V0IGEgZml4IHRvZ2V0aGVyIGEucy5hLnAuDQoNCiAgUGF1bA0KDQo+
ID4NCj4gPiBUaGF0J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRpbmcgdG8gZG8gd2l0
aCBpdD8gSSBoYXZlIGJlZW4NCj4gd29uZGVyaW5nIGFib3V0IGV4cG9zaW5nIGl0IGFzIGFuIGlu
dGVyZmFjZS4NCj4gPg0KPiBJIHdhbnRlZCB0byB1c2UgaXQgZm9yIHN0b3JpbmcgYWRkcmVzcyA8
LT4gbWFwIGhhbmRsZXMgZm9yIGdudHRhYiBhcyB5b3UNCj4gc3VnZ2VzdGVkLg0KPiANCj4gPj4g
SSd2ZSBiZWVuIHRyaXBwaW5nIHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFzaCgpIG9uIGtl
eXMgdGhhdA0KPiA+PiB3ZXJlIDY0Yml0IGFkZHJlc3Nlcy4NCj4gPj4NCj4gPg0KPiA+IFRoYXQg
c291bmRzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIHRoZW4uIEknbGwgaGF2ZSBhIGxvb2su
DQo+ID4NCj4gPiBDaGVlcnMsDQo+ID4NCj4gPiAgICAgUGF1bA0KPiA+DQo+IA0KPiAtLQ0KPiBS
YWZhxYIgV29qZHnFgmENCj4gUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyDQo+IGh0
dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21h
aWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:51:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:51:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZc2O-0000Ci-3J; Wed, 09 Sep 2015 09:51:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZc2N-0000CV-4J
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:51:31 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	28/3A-30270-22100F55; Wed, 09 Sep 2015 09:51:30 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1441792288!33816676!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10641 invoked from network); 9 Sep 2015 09:51:29 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 09:51:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2546706"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ
Date: Wed, 9 Sep 2015 09:51:17 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiBTZW50OiAw
OSBTZXB0ZW1iZXIgMjAxNSAxMDoxOA0KPiBUbzogUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFhl
bmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21haWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xh
Yi5jb21dDQo+ID4gU2VudDogMDkgU2VwdGVtYmVyIDIwMTUgMTA6MTcNCj4gPiBUbzogUGF1bCBE
dXJyYW50OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBTdWJqZWN0OiBS
ZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1c2FnZQ0KPiA+DQo+ID4gT24gMjAx
NS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+ID4+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPj4gRnJvbTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtDQo+IGRldmVsLQ0KPiA+ID4+IGJvdW5jZXNAbGlz
dHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhDQo+ID4gPj4gU2Vu
dDogMDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gPiA+PiBUbzogd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnDQo+ID4gPj4gU3ViamVjdDogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhh
c2h0YWJsZSB1c2FnZQ0KPiA+ID4+DQo+ID4gPj4gSXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNo
X3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXkNCj4gPiA+PiB2YWx1ZXM/
DQo+IA0KPiBPaywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIgYS5zLmEucC4NCj4gDQoN
CkkgdGhpbmsgdGhpcyBzaG91bGQgZG8gaXQ6DQoNCmRpZmYgLS1naXQgYS9zcmMveGVuYnVzL2hh
c2hfdGFibGUuYyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jDQppbmRleCBhOWMxYjc5Li5jN2M2
MTAxIDEwMDY0NA0KLS0tIGEvc3JjL3hlbmJ1cy9oYXNoX3RhYmxlLmMNCisrKyBiL3NyYy94ZW5i
dXMvaGFzaF90YWJsZS5jDQpAQCAtOTAsNyArOTAsNyBAQCBIYXNoVGFibGVIYXNoKA0KDQogICAg
ICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVsYXRvciA8PCA0KSArIEFycmF5W0luZGV4XTsNCg0K
LSAgICAgICAgT3ZlcmZsb3cgPSBBY2N1bXVsYXRvciAmIDB4MDAwMDBmMDA7DQorICAgICAgICBP
dmVyZmxvdyA9IEFjY3VtdWxhdG9yICYgMHgwMDAwZmYwMDsNCiAgICAgICAgIGlmIChPdmVyZmxv
dyAhPSAwKSB7DQogICAgICAgICAgICAgQWNjdW11bGF0b3IgXj0gT3ZlcmZsb3cgPj4gODsNCiAg
ICAgICAgICAgICBBY2N1bXVsYXRvciBePSBPdmVyZmxvdzsNCg0KQ2FuIHlvdSB0ZXN0Pw0KDQog
IFBhdWwNCg0KPiAgIFBhdWwNCj4gDQo+ID4gPg0KPiA+ID4gVGhhdCdzIHRoZSBpZGVhLiBXaGF0
IGFyZSB5b3UgaW50ZW5kaW5nIHRvIGRvIHdpdGggaXQ/IEkgaGF2ZSBiZWVuDQo+ID4gd29uZGVy
aW5nIGFib3V0IGV4cG9zaW5nIGl0IGFzIGFuIGludGVyZmFjZS4NCj4gPiA+DQo+ID4gSSB3YW50
ZWQgdG8gdXNlIGl0IGZvciBzdG9yaW5nIGFkZHJlc3MgPC0+IG1hcCBoYW5kbGVzIGZvciBnbnR0
YWIgYXMgeW91DQo+ID4gc3VnZ2VzdGVkLg0KPiA+DQo+ID4gPj4gSSd2ZSBiZWVuIHRyaXBwaW5n
IHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFzaCgpIG9uIGtleXMgdGhhdA0KPiA+ID4+IHdl
cmUgNjRiaXQgYWRkcmVzc2VzLg0KPiA+ID4+DQo+ID4gPg0KPiA+ID4gVGhhdCBzb3VuZHMgbGlr
ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgdGhlbi4gSSdsbCBoYXZlIGEgbG9vay4NCj4gPiA+DQo+
ID4gPiBDaGVlcnMsDQo+ID4gPg0KPiA+ID4gICAgIFBhdWwNCj4gPiA+DQo+ID4NCj4gPiAtLQ0K
PiA+IFJhZmHFgiBXb2pkecWCYQ0KPiA+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Bl
cg0KPiA+IGh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCj4gX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0K
PiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:51:33 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:51:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZc2O-0000Ci-3J; Wed, 09 Sep 2015 09:51:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZc2N-0000CV-4J
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:51:31 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	28/3A-30270-22100F55; Wed, 09 Sep 2015 09:51:30 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-206.messagelabs.com!1441792288!33816676!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10641 invoked from network); 9 Sep 2015 09:51:29 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 09:51:29 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2546706"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>, =?utf-8?B?UmFmYcWCIFdvamR5xYJh?=
	<omeg@invisiblethingslab.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ
Date: Wed, 9 Sep 2015 09:51:17 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiBTZW50OiAw
OSBTZXB0ZW1iZXIgMjAxNSAxMDoxOA0KPiBUbzogUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFhl
bmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N
Cj4gPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21haWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xh
Yi5jb21dDQo+ID4gU2VudDogMDkgU2VwdGVtYmVyIDIwMTUgMTA6MTcNCj4gPiBUbzogUGF1bCBE
dXJyYW50OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPiBTdWJqZWN0OiBS
ZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1c2FnZQ0KPiA+DQo+ID4gT24gMjAx
NS0wOS0wOSAxMDozNCwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+ID4+IC0tLS0tT3JpZ2luYWwg
TWVzc2FnZS0tLS0tDQo+ID4gPj4gRnJvbTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYtDQo+IGRldmVsLQ0KPiA+ID4+IGJvdW5jZXNAbGlz
dHMueGVucHJvamVjdC5vcmddIE9uIEJlaGFsZiBPZiBSYWZhbCBXb2pkeWxhDQo+ID4gPj4gU2Vu
dDogMDkgU2VwdGVtYmVyIDIwMTUgMDE6NDQNCj4gPiA+PiBUbzogd2luLXB2LWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnDQo+ID4gPj4gU3ViamVjdDogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhh
c2h0YWJsZSB1c2FnZQ0KPiA+ID4+DQo+ID4gPj4gSXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNo
X3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXkNCj4gPiA+PiB2YWx1ZXM/
DQo+IA0KPiBPaywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIgYS5zLmEucC4NCj4gDQoN
CkkgdGhpbmsgdGhpcyBzaG91bGQgZG8gaXQ6DQoNCmRpZmYgLS1naXQgYS9zcmMveGVuYnVzL2hh
c2hfdGFibGUuYyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jDQppbmRleCBhOWMxYjc5Li5jN2M2
MTAxIDEwMDY0NA0KLS0tIGEvc3JjL3hlbmJ1cy9oYXNoX3RhYmxlLmMNCisrKyBiL3NyYy94ZW5i
dXMvaGFzaF90YWJsZS5jDQpAQCAtOTAsNyArOTAsNyBAQCBIYXNoVGFibGVIYXNoKA0KDQogICAg
ICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVsYXRvciA8PCA0KSArIEFycmF5W0luZGV4XTsNCg0K
LSAgICAgICAgT3ZlcmZsb3cgPSBBY2N1bXVsYXRvciAmIDB4MDAwMDBmMDA7DQorICAgICAgICBP
dmVyZmxvdyA9IEFjY3VtdWxhdG9yICYgMHgwMDAwZmYwMDsNCiAgICAgICAgIGlmIChPdmVyZmxv
dyAhPSAwKSB7DQogICAgICAgICAgICAgQWNjdW11bGF0b3IgXj0gT3ZlcmZsb3cgPj4gODsNCiAg
ICAgICAgICAgICBBY2N1bXVsYXRvciBePSBPdmVyZmxvdzsNCg0KQ2FuIHlvdSB0ZXN0Pw0KDQog
IFBhdWwNCg0KPiAgIFBhdWwNCj4gDQo+ID4gPg0KPiA+ID4gVGhhdCdzIHRoZSBpZGVhLiBXaGF0
IGFyZSB5b3UgaW50ZW5kaW5nIHRvIGRvIHdpdGggaXQ/IEkgaGF2ZSBiZWVuDQo+ID4gd29uZGVy
aW5nIGFib3V0IGV4cG9zaW5nIGl0IGFzIGFuIGludGVyZmFjZS4NCj4gPiA+DQo+ID4gSSB3YW50
ZWQgdG8gdXNlIGl0IGZvciBzdG9yaW5nIGFkZHJlc3MgPC0+IG1hcCBoYW5kbGVzIGZvciBnbnR0
YWIgYXMgeW91DQo+ID4gc3VnZ2VzdGVkLg0KPiA+DQo+ID4gPj4gSSd2ZSBiZWVuIHRyaXBwaW5n
IHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFzaCgpIG9uIGtleXMgdGhhdA0KPiA+ID4+IHdl
cmUgNjRiaXQgYWRkcmVzc2VzLg0KPiA+ID4+DQo+ID4gPg0KPiA+ID4gVGhhdCBzb3VuZHMgbGlr
ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBidWcgdGhlbi4gSSdsbCBoYXZlIGEgbG9vay4NCj4gPiA+DQo+
ID4gPiBDaGVlcnMsDQo+ID4gPg0KPiA+ID4gICAgIFBhdWwNCj4gPiA+DQo+ID4NCj4gPiAtLQ0K
PiA+IFJhZmHFgiBXb2pkecWCYQ0KPiA+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Bl
cg0KPiA+IGh0dHBzOi8vd3d3LnF1YmVzLW9zLm9yZy8NCj4gX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0K
PiB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWls
aW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:58:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:58:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZc9R-0000gC-Ko; Wed, 09 Sep 2015 09:58:49 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZc9Q-0000fQ-2D
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:58:48 +0000
Received: from [85.158.137.68] by server-13.bemta-3.messagelabs.com id
	CC/51-00536-7D200F55; Wed, 09 Sep 2015 09:58:47 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441792726!42784206!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22904 invoked from network); 9 Sep 2015 09:58:46 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 09:58:46 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id C780D2108A
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 05:58:45 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Wed, 09 Sep 2015 05:58:45 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=peojmioiXMwfN0bh
	QeFERbdEC+U=; b=jHkQMIru2UHiTHkIXqg//EKeMeGo7YrVdQEF4lcpwjoO2Z2s
	l+ToEVztXTuWDtiAjzqrKpA0rLtYaSkWmzBGUaH5DDWNN0tj4uUATklDFzaMybc/
	kOq49Yzgm26u/8HlqxZFLRis/K+zBM4Pl2Rp+8rCrZmmG1yIdo3cT3nx3R4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=peojmioiXMwfN0b
	hQeFERbdEC+U=; b=t0EoRINS7ZapLATHNAiBArLKexvV9fStd7/t7PEoJANNSk7
	VCo57ywVXw1fooowojgaCAxWAfYYXbcntK+PzugoSrC5yng179TCHar+XV/OL5zd
	Q2NzmkEVJlcb1ez/tAdKAYF9VV1hkW7//JARKKIoh81Frbc9FFH+tL0C2KsU=
X-Sasl-enc: diAkwxG/lpLem5XrBzl9FBrZ+AT2yd8hb2PnpoZ3kR09 1441792725
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 37561C0028D;
	Wed,  9 Sep 2015 05:58:45 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F002D3.70103@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 11:58:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
Content-Length: 3243
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wOSAxMTo1MSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudAo+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAxMDoxOAo+PiBUbzogUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKPj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUg
dXNhZ2UKPj4KPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+PiBGcm9tOiBSYWZhxYIg
V29qZHnFgmEgW21haWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dCj4+PiBTZW50OiAw
OSBTZXB0ZW1iZXIgMjAxNSAxMDoxNwo+Pj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVu
YnVzIGhhc2h0YWJsZSB1c2FnZQo+Pj4KPj4+IE9uIDIwMTUtMDktMDkgMTA6MzQsIFBhdWwgRHVy
cmFudCB3cm90ZToKPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+Pj4gRnJvbTog
d2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYt
Cj4+IGRldmVsLQo+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYg
T2YgUmFmYWwgV29qZHlsYQo+Pj4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAxNSAwMTo0NAo+Pj4+
PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4+Pj4+IFN1YmplY3Q6IFt3
aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UKPj4+Pj4KPj4+Pj4gSXMgdGhlIGhh
c2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBr
ZXkKPj4+Pj4gdmFsdWVzPwo+Pgo+PiBPaywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIg
YS5zLmEucC4KPj4KPiAKPiBJIHRoaW5rIHRoaXMgc2hvdWxkIGRvIGl0Ogo+IAo+IGRpZmYgLS1n
aXQgYS9zcmMveGVuYnVzL2hhc2hfdGFibGUuYyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jCj4g
aW5kZXggYTljMWI3OS4uYzdjNjEwMSAxMDA2NDQKPiAtLS0gYS9zcmMveGVuYnVzL2hhc2hfdGFi
bGUuYwo+ICsrKyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jCj4gQEAgLTkwLDcgKzkwLDcgQEAg
SGFzaFRhYmxlSGFzaCgKPiAKPiAgICAgICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVsYXRvciA8
PCA0KSArIEFycmF5W0luZGV4XTsKPiAKPiAtICAgICAgICBPdmVyZmxvdyA9IEFjY3VtdWxhdG9y
ICYgMHgwMDAwMGYwMDsKPiArICAgICAgICBPdmVyZmxvdyA9IEFjY3VtdWxhdG9yICYgMHgwMDAw
ZmYwMDsKPiAgICAgICAgICBpZiAoT3ZlcmZsb3cgIT0gMCkgewo+ICAgICAgICAgICAgICBBY2N1
bXVsYXRvciBePSBPdmVyZmxvdyA+PiA4Owo+ICAgICAgICAgICAgICBBY2N1bXVsYXRvciBePSBP
dmVyZmxvdzsKPiAKPiBDYW4geW91IHRlc3Q/Cj4gCj4gICBQYXVsCj4gClRoaXMgaW5kZWVkIHNl
ZW1zIHRvIGZpeCB0aGUgaXNzdWUsIHRoYW5rcy4KCj4+ICAgUGF1bAo+Pgo+Pj4+Cj4+Pj4gVGhh
dCdzIHRoZSBpZGVhLiBXaGF0IGFyZSB5b3UgaW50ZW5kaW5nIHRvIGRvIHdpdGggaXQ/IEkgaGF2
ZSBiZWVuCj4+PiB3b25kZXJpbmcgYWJvdXQgZXhwb3NpbmcgaXQgYXMgYW4gaW50ZXJmYWNlLgo+
Pj4+Cj4+PiBJIHdhbnRlZCB0byB1c2UgaXQgZm9yIHN0b3JpbmcgYWRkcmVzcyA8LT4gbWFwIGhh
bmRsZXMgZm9yIGdudHRhYiBhcyB5b3UKPj4+IHN1Z2dlc3RlZC4KPj4+Cj4+Pj4+IEkndmUgYmVl
biB0cmlwcGluZyB0aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRoYXQK
Pj4+Pj4gd2VyZSA2NGJpdCBhZGRyZXNzZXMuCj4+Pj4+Cj4+Pj4KPj4+PiBUaGF0IHNvdW5kcyBs
aWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyB0aGVuLiBJJ2xsIGhhdmUgYSBsb29rLgo+Pj4+Cj4+
Pj4gQ2hlZXJzLAo+Pj4+Cj4+Pj4gICAgIFBhdWwKPj4+PgoKCi0tIApSYWZhxYIgV29qZHnFgmEK
UXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9y
Zy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2
LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 09:58:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 09:58:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZc9R-0000gC-Ko; Wed, 09 Sep 2015 09:58:49 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZc9Q-0000fQ-2D
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 09:58:48 +0000
Received: from [85.158.137.68] by server-13.bemta-3.messagelabs.com id
	CC/51-00536-7D200F55; Wed, 09 Sep 2015 09:58:47 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441792726!42784206!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22904 invoked from network); 9 Sep 2015 09:58:46 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 09:58:46 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id C780D2108A
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 05:58:45 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Wed, 09 Sep 2015 05:58:45 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=peojmioiXMwfN0bh
	QeFERbdEC+U=; b=jHkQMIru2UHiTHkIXqg//EKeMeGo7YrVdQEF4lcpwjoO2Z2s
	l+ToEVztXTuWDtiAjzqrKpA0rLtYaSkWmzBGUaH5DDWNN0tj4uUATklDFzaMybc/
	kOq49Yzgm26u/8HlqxZFLRis/K+zBM4Pl2Rp+8rCrZmmG1yIdo3cT3nx3R4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=peojmioiXMwfN0b
	hQeFERbdEC+U=; b=t0EoRINS7ZapLATHNAiBArLKexvV9fStd7/t7PEoJANNSk7
	VCo57ywVXw1fooowojgaCAxWAfYYXbcntK+PzugoSrC5yng179TCHar+XV/OL5zd
	Q2NzmkEVJlcb1ez/tAdKAYF9VV1hkW7//JARKKIoh81Frbc9FFH+tL0C2KsU=
X-Sasl-enc: diAkwxG/lpLem5XrBzl9FBrZ+AT2yd8hb2PnpoZ3kR09 1441792725
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 37561C0028D;
	Wed,  9 Sep 2015 05:58:45 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F002D3.70103@invisiblethingslab.com>
Date: Wed, 9 Sep 2015 11:58:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
Content-Length: 3243
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0wOSAxMTo1MSwgUGF1bCBEdXJyYW50IHdyb3RlOgo+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0KPj4gYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0
Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudAo+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAxMDoxOAo+PiBUbzogUmFmYcWCIFdvamR5xYJhOyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKPj4gU3ViamVjdDogUmU6IFt3aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUg
dXNhZ2UKPj4KPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+PiBGcm9tOiBSYWZhxYIg
V29qZHnFgmEgW21haWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dCj4+PiBTZW50OiAw
OSBTZXB0ZW1iZXIgMjAxNSAxMDoxNwo+Pj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCj4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVu
YnVzIGhhc2h0YWJsZSB1c2FnZQo+Pj4KPj4+IE9uIDIwMTUtMDktMDkgMTA6MzQsIFBhdWwgRHVy
cmFudCB3cm90ZToKPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+Pj4gRnJvbTog
d2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4tcHYt
Cj4+IGRldmVsLQo+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYg
T2YgUmFmYWwgV29qZHlsYQo+Pj4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAxNSAwMTo0NAo+Pj4+
PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4+Pj4+IFN1YmplY3Q6IFt3
aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UKPj4+Pj4KPj4+Pj4gSXMgdGhlIGhh
c2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9zZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBr
ZXkKPj4+Pj4gdmFsdWVzPwo+Pgo+PiBPaywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIg
YS5zLmEucC4KPj4KPiAKPiBJIHRoaW5rIHRoaXMgc2hvdWxkIGRvIGl0Ogo+IAo+IGRpZmYgLS1n
aXQgYS9zcmMveGVuYnVzL2hhc2hfdGFibGUuYyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jCj4g
aW5kZXggYTljMWI3OS4uYzdjNjEwMSAxMDA2NDQKPiAtLS0gYS9zcmMveGVuYnVzL2hhc2hfdGFi
bGUuYwo+ICsrKyBiL3NyYy94ZW5idXMvaGFzaF90YWJsZS5jCj4gQEAgLTkwLDcgKzkwLDcgQEAg
SGFzaFRhYmxlSGFzaCgKPiAKPiAgICAgICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVsYXRvciA8
PCA0KSArIEFycmF5W0luZGV4XTsKPiAKPiAtICAgICAgICBPdmVyZmxvdyA9IEFjY3VtdWxhdG9y
ICYgMHgwMDAwMGYwMDsKPiArICAgICAgICBPdmVyZmxvdyA9IEFjY3VtdWxhdG9yICYgMHgwMDAw
ZmYwMDsKPiAgICAgICAgICBpZiAoT3ZlcmZsb3cgIT0gMCkgewo+ICAgICAgICAgICAgICBBY2N1
bXVsYXRvciBePSBPdmVyZmxvdyA+PiA4Owo+ICAgICAgICAgICAgICBBY2N1bXVsYXRvciBePSBP
dmVyZmxvdzsKPiAKPiBDYW4geW91IHRlc3Q/Cj4gCj4gICBQYXVsCj4gClRoaXMgaW5kZWVkIHNl
ZW1zIHRvIGZpeCB0aGUgaXNzdWUsIHRoYW5rcy4KCj4+ICAgUGF1bAo+Pgo+Pj4+Cj4+Pj4gVGhh
dCdzIHRoZSBpZGVhLiBXaGF0IGFyZSB5b3UgaW50ZW5kaW5nIHRvIGRvIHdpdGggaXQ/IEkgaGF2
ZSBiZWVuCj4+PiB3b25kZXJpbmcgYWJvdXQgZXhwb3NpbmcgaXQgYXMgYW4gaW50ZXJmYWNlLgo+
Pj4+Cj4+PiBJIHdhbnRlZCB0byB1c2UgaXQgZm9yIHN0b3JpbmcgYWRkcmVzcyA8LT4gbWFwIGhh
bmRsZXMgZm9yIGdudHRhYiBhcyB5b3UKPj4+IHN1Z2dlc3RlZC4KPj4+Cj4+Pj4+IEkndmUgYmVl
biB0cmlwcGluZyB0aGUgYXNzZXJ0aW9uIGluIEhhc2hUYWJsZUhhc2goKSBvbiBrZXlzIHRoYXQK
Pj4+Pj4gd2VyZSA2NGJpdCBhZGRyZXNzZXMuCj4+Pj4+Cj4+Pj4KPj4+PiBUaGF0IHNvdW5kcyBs
aWtlIGEgc3RyYWlnaHRmb3J3YXJkIGJ1ZyB0aGVuLiBJJ2xsIGhhdmUgYSBsb29rLgo+Pj4+Cj4+
Pj4gQ2hlZXJzLAo+Pj4+Cj4+Pj4gICAgIFBhdWwKPj4+PgoKCi0tIApSYWZhxYIgV29qZHnFgmEK
UXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9zLm9y
Zy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1w
di1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2
LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 11:04:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 11:04:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZdBH-0007Pe-UW; Wed, 09 Sep 2015 11:04:47 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZdBH-0007PY-5y
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 11:04:47 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	5B/E8-28221-E4210F55; Wed, 09 Sep 2015 11:04:46 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441796685!21571268!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18234 invoked from network); 9 Sep 2015 11:04:45 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 11:04:45 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2548750"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ///gt4CAADPWcA==
Date: Wed, 9 Sep 2015 11:04:44 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
In-Reply-To: <55F002D3.70103@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDEwOjU5DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gT24gMjAxNS0wOS0wOSAxMTo1MSwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiA+
PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAxNSAxMDoxOA0KPiA+PiBUbzogUmFmYcWCIFdvamR5xYJh
OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gU3ViamVjdDogUmU6IFt3
aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4gPj4NCj4gPj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21haWx0bzpv
bWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+ID4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAxMDoxNw0KPiA+Pj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnDQo+ID4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0
YWJsZSB1c2FnZQ0KPiA+Pj4NCj4gPj4+IE9uIDIwMTUtMDktMDkgMTA6MzQsIFBhdWwgRHVycmFu
dCB3cm90ZToNCj4gPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+Pj4gRnJv
bTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4t
cHYtDQo+ID4+IGRldmVsLQ0KPiA+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBP
biBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYQ0KPiA+Pj4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAwMTo0NA0KPiA+Pj4+PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
ID4+Pj4+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4g
Pj4+Pj4NCj4gPj4+Pj4gSXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9z
ZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXkNCj4gPj4+Pj4gdmFsdWVzPw0KPiA+Pg0KPiA+PiBP
aywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIgYS5zLmEucC4NCj4gPj4NCj4gPg0KPiA+
IEkgdGhpbmsgdGhpcyBzaG91bGQgZG8gaXQ6DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvc3JjL3hl
bmJ1cy9oYXNoX3RhYmxlLmMgYi9zcmMveGVuYnVzL2hhc2hfdGFibGUuYw0KPiA+IGluZGV4IGE5
YzFiNzkuLmM3YzYxMDEgMTAwNjQ0DQo+ID4gLS0tIGEvc3JjL3hlbmJ1cy9oYXNoX3RhYmxlLmMN
Cj4gPiArKysgYi9zcmMveGVuYnVzL2hhc2hfdGFibGUuYw0KPiA+IEBAIC05MCw3ICs5MCw3IEBA
IEhhc2hUYWJsZUhhc2goDQo+ID4NCj4gPiAgICAgICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVs
YXRvciA8PCA0KSArIEFycmF5W0luZGV4XTsNCj4gPg0KPiA+IC0gICAgICAgIE92ZXJmbG93ID0g
QWNjdW11bGF0b3IgJiAweDAwMDAwZjAwOw0KPiA+ICsgICAgICAgIE92ZXJmbG93ID0gQWNjdW11
bGF0b3IgJiAweDAwMDBmZjAwOw0KPiA+ICAgICAgICAgIGlmIChPdmVyZmxvdyAhPSAwKSB7DQo+
ID4gICAgICAgICAgICAgIEFjY3VtdWxhdG9yIF49IE92ZXJmbG93ID4+IDg7DQo+ID4gICAgICAg
ICAgICAgIEFjY3VtdWxhdG9yIF49IE92ZXJmbG93Ow0KPiA+DQo+ID4gQ2FuIHlvdSB0ZXN0Pw0K
PiA+DQo+ID4gICBQYXVsDQo+ID4NCj4gVGhpcyBpbmRlZWQgc2VlbXMgdG8gZml4IHRoZSBpc3N1
ZSwgdGhhbmtzLg0KPiANCg0KQ29vbC4gUHJvcGVyIHBhdGNoIGluIGEgc2hvcnQgd2hpbGUgdGhl
biA6LSkNCg0KICBQYXVsDQoNCj4gPj4gICBQYXVsDQo+ID4+DQo+ID4+Pj4NCj4gPj4+PiBUaGF0
J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRpbmcgdG8gZG8gd2l0aCBpdD8gSSBoYXZl
IGJlZW4NCj4gPj4+IHdvbmRlcmluZyBhYm91dCBleHBvc2luZyBpdCBhcyBhbiBpbnRlcmZhY2Uu
DQo+ID4+Pj4NCj4gPj4+IEkgd2FudGVkIHRvIHVzZSBpdCBmb3Igc3RvcmluZyBhZGRyZXNzIDwt
PiBtYXAgaGFuZGxlcyBmb3IgZ250dGFiIGFzIHlvdQ0KPiA+Pj4gc3VnZ2VzdGVkLg0KPiA+Pj4N
Cj4gPj4+Pj4gSSd2ZSBiZWVuIHRyaXBwaW5nIHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFz
aCgpIG9uIGtleXMgdGhhdA0KPiA+Pj4+PiB3ZXJlIDY0Yml0IGFkZHJlc3Nlcy4NCj4gPj4+Pj4N
Cj4gPj4+Pg0KPiA+Pj4+IFRoYXQgc291bmRzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIHRo
ZW4uIEknbGwgaGF2ZSBhIGxvb2suDQo+ID4+Pj4NCj4gPj4+PiBDaGVlcnMsDQo+ID4+Pj4NCj4g
Pj4+PiAgICAgUGF1bA0KPiA+Pj4+DQo+IA0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJhDQo+
IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJlcy1v
cy5vcmcvDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3
aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dp
bi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 11:04:48 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 11:04:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZdBH-0007Pe-UW; Wed, 09 Sep 2015 11:04:47 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZdBH-0007PY-5y
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 11:04:47 +0000
Received: from [193.109.254.147] by server-7.bemta-14.messagelabs.com id
	5B/E8-28221-E4210F55; Wed, 09 Sep 2015 11:04:46 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441796685!21571268!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18234 invoked from network); 9 Sep 2015 11:04:45 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 11:04:45 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2548750"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ///gt4CAADPWcA==
Date: Wed, 9 Sep 2015 11:04:44 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
In-Reply-To: <55F002D3.70103@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDEwOjU5DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gT24gMjAxNS0wOS0wOSAxMTo1MSwgUGF1bCBEdXJyYW50IHdyb3RlOg0KPiA+
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gPj4gYm91
bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFBhdWwgRHVycmFudA0KPiA+
PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAxNSAxMDoxOA0KPiA+PiBUbzogUmFmYcWCIFdvamR5xYJh
OyB3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gPj4gU3ViamVjdDogUmU6IFt3
aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4gPj4NCj4gPj4+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+PiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21haWx0bzpv
bWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+ID4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAxMDoxNw0KPiA+Pj4gVG86IFBhdWwgRHVycmFudDsgd2luLXB2LWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnDQo+ID4+PiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0
YWJsZSB1c2FnZQ0KPiA+Pj4NCj4gPj4+IE9uIDIwMTUtMDktMDkgMTA6MzQsIFBhdWwgRHVycmFu
dCB3cm90ZToNCj4gPj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4+Pj4gRnJv
bTogd2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgW21haWx0bzp3aW4t
cHYtDQo+ID4+IGRldmVsLQ0KPiA+Pj4+PiBib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnXSBP
biBCZWhhbGYgT2YgUmFmYWwgV29qZHlsYQ0KPiA+Pj4+PiBTZW50OiAwOSBTZXB0ZW1iZXIgMjAx
NSAwMTo0NA0KPiA+Pj4+PiBUbzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+
ID4+Pj4+IFN1YmplY3Q6IFt3aW4tcHYtZGV2ZWxdIFhlbmJ1cyBoYXNodGFibGUgdXNhZ2UNCj4g
Pj4+Pj4NCj4gPj4+Pj4gSXMgdGhlIGhhc2ggdGFibGUgZnJvbSBoYXNoX3RhYmxlLmMgc3VwcG9z
ZWQgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXkNCj4gPj4+Pj4gdmFsdWVzPw0KPiA+Pg0KPiA+PiBP
aywgY29vbC4gSSdsbCBnZXQgYSBmaXggdG9nZXRoZXIgYS5zLmEucC4NCj4gPj4NCj4gPg0KPiA+
IEkgdGhpbmsgdGhpcyBzaG91bGQgZG8gaXQ6DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvc3JjL3hl
bmJ1cy9oYXNoX3RhYmxlLmMgYi9zcmMveGVuYnVzL2hhc2hfdGFibGUuYw0KPiA+IGluZGV4IGE5
YzFiNzkuLmM3YzYxMDEgMTAwNjQ0DQo+ID4gLS0tIGEvc3JjL3hlbmJ1cy9oYXNoX3RhYmxlLmMN
Cj4gPiArKysgYi9zcmMveGVuYnVzL2hhc2hfdGFibGUuYw0KPiA+IEBAIC05MCw3ICs5MCw3IEBA
IEhhc2hUYWJsZUhhc2goDQo+ID4NCj4gPiAgICAgICAgICBBY2N1bXVsYXRvciA9IChBY2N1bXVs
YXRvciA8PCA0KSArIEFycmF5W0luZGV4XTsNCj4gPg0KPiA+IC0gICAgICAgIE92ZXJmbG93ID0g
QWNjdW11bGF0b3IgJiAweDAwMDAwZjAwOw0KPiA+ICsgICAgICAgIE92ZXJmbG93ID0gQWNjdW11
bGF0b3IgJiAweDAwMDBmZjAwOw0KPiA+ICAgICAgICAgIGlmIChPdmVyZmxvdyAhPSAwKSB7DQo+
ID4gICAgICAgICAgICAgIEFjY3VtdWxhdG9yIF49IE92ZXJmbG93ID4+IDg7DQo+ID4gICAgICAg
ICAgICAgIEFjY3VtdWxhdG9yIF49IE92ZXJmbG93Ow0KPiA+DQo+ID4gQ2FuIHlvdSB0ZXN0Pw0K
PiA+DQo+ID4gICBQYXVsDQo+ID4NCj4gVGhpcyBpbmRlZWQgc2VlbXMgdG8gZml4IHRoZSBpc3N1
ZSwgdGhhbmtzLg0KPiANCg0KQ29vbC4gUHJvcGVyIHBhdGNoIGluIGEgc2hvcnQgd2hpbGUgdGhl
biA6LSkNCg0KICBQYXVsDQoNCj4gPj4gICBQYXVsDQo+ID4+DQo+ID4+Pj4NCj4gPj4+PiBUaGF0
J3MgdGhlIGlkZWEuIFdoYXQgYXJlIHlvdSBpbnRlbmRpbmcgdG8gZG8gd2l0aCBpdD8gSSBoYXZl
IGJlZW4NCj4gPj4+IHdvbmRlcmluZyBhYm91dCBleHBvc2luZyBpdCBhcyBhbiBpbnRlcmZhY2Uu
DQo+ID4+Pj4NCj4gPj4+IEkgd2FudGVkIHRvIHVzZSBpdCBmb3Igc3RvcmluZyBhZGRyZXNzIDwt
PiBtYXAgaGFuZGxlcyBmb3IgZ250dGFiIGFzIHlvdQ0KPiA+Pj4gc3VnZ2VzdGVkLg0KPiA+Pj4N
Cj4gPj4+Pj4gSSd2ZSBiZWVuIHRyaXBwaW5nIHRoZSBhc3NlcnRpb24gaW4gSGFzaFRhYmxlSGFz
aCgpIG9uIGtleXMgdGhhdA0KPiA+Pj4+PiB3ZXJlIDY0Yml0IGFkZHJlc3Nlcy4NCj4gPj4+Pj4N
Cj4gPj4+Pg0KPiA+Pj4+IFRoYXQgc291bmRzIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIHRo
ZW4uIEknbGwgaGF2ZSBhIGxvb2suDQo+ID4+Pj4NCj4gPj4+PiBDaGVlcnMsDQo+ID4+Pj4NCj4g
Pj4+PiAgICAgUGF1bA0KPiA+Pj4+DQo+IA0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJhDQo+
IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJlcy1v
cy5vcmcvDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3
aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dp
bi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:46:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:46:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZelM-0008Ai-09; Wed, 09 Sep 2015 12:46:08 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZelK-0008AW-6W
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:46:06 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	B7/15-24494-D0A20F55; Wed, 09 Sep 2015 12:46:05 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441802763!18166490!1
X-Originating-IP: [209.85.160.170]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3246 invoked from network); 9 Sep 2015 12:46:04 -0000
Received: from mail-yk0-f170.google.com (HELO mail-yk0-f170.google.com)
	(209.85.160.170)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:46:04 -0000
Received: by ykdu9 with SMTP id u9so12682654ykd.2
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=0H6wHAAvrXhYDSPPm/6HM1GxqpDZ5a+L+80d0Yytsy8=;
	b=OVBM21OxRE0TOg1dJzSBtZZNq2C/ehXvS2e0/O2CJ9lznGGCq/JnaevGwmc6YupstZ
	swPdOmh3a/Je90svkU2lXP9QhOZY7uz7ry3IF0AqjFsY+hMbrdyg4L+SUgq2db2QzBq5
	wN4+kXjiqQo24OdKDEsHuAycsEkSjNOMPXzrEyjE2Cs2lge2sfuWMNcOiSRxn5JFXz1J
	cW5TIaWw1yEstDbB5+sBdwYslAPfvlGyqjaTFalUxHi03H45K6cJgC9RIYm5JJAJZc2c
	VzxQzA6a0O028sKNXKr5bFAuv8GN5r13Vd6UtXRxU+RWe/qHncaUAovGSiawhCghCzRB
	/NNg==
X-Received: by 10.170.157.5 with SMTP id y5mr35428422ykc.28.1441802763667;
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	u79sm6157617ywf.21.2015.09.09.05.46.02
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 13:45:51 +0100
Message-Id: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

There is a flaw in HashTableHash() which means that, for example, an Array
value of 0xff added to an Accumulator value of 0xff will lead to more than
4 bits of Overflow. The 5th bit is missed by the mask and is hence not
folded back into the lower order bits of the Accumulator. The upshot of the
this is an ASSERTion failure for a debug build or an array overflow in the
caller for a non-debug build.
This patch fixes this issue by increasing the overflow mask to 8 bits
instead of 4 (although 5 bit would actually be sufficient).

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/hash_table.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
index a9c1b79..c7c6101 100644
--- a/src/xenbus/hash_table.c
+++ b/src/xenbus/hash_table.c
@@ -90,7 +90,7 @@ HashTableHash(
 
         Accumulator = (Accumulator << 4) + Array[Index];
 
-        Overflow = Accumulator & 0x00000f00;
+        Overflow = Accumulator & 0x0000ff00;
         if (Overflow != 0) {
             Accumulator ^= Overflow >> 8;
             Accumulator ^= Overflow;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:46:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:46:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZelM-0008Ai-09; Wed, 09 Sep 2015 12:46:08 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZelK-0008AW-6W
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:46:06 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	B7/15-24494-D0A20F55; Wed, 09 Sep 2015 12:46:05 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441802763!18166490!1
X-Originating-IP: [209.85.160.170]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3246 invoked from network); 9 Sep 2015 12:46:04 -0000
Received: from mail-yk0-f170.google.com (HELO mail-yk0-f170.google.com)
	(209.85.160.170)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:46:04 -0000
Received: by ykdu9 with SMTP id u9so12682654ykd.2
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=0H6wHAAvrXhYDSPPm/6HM1GxqpDZ5a+L+80d0Yytsy8=;
	b=OVBM21OxRE0TOg1dJzSBtZZNq2C/ehXvS2e0/O2CJ9lznGGCq/JnaevGwmc6YupstZ
	swPdOmh3a/Je90svkU2lXP9QhOZY7uz7ry3IF0AqjFsY+hMbrdyg4L+SUgq2db2QzBq5
	wN4+kXjiqQo24OdKDEsHuAycsEkSjNOMPXzrEyjE2Cs2lge2sfuWMNcOiSRxn5JFXz1J
	cW5TIaWw1yEstDbB5+sBdwYslAPfvlGyqjaTFalUxHi03H45K6cJgC9RIYm5JJAJZc2c
	VzxQzA6a0O028sKNXKr5bFAuv8GN5r13Vd6UtXRxU+RWe/qHncaUAovGSiawhCghCzRB
	/NNg==
X-Received: by 10.170.157.5 with SMTP id y5mr35428422ykc.28.1441802763667;
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	u79sm6157617ywf.21.2015.09.09.05.46.02
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 05:46:03 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 13:45:51 +0100
Message-Id: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

There is a flaw in HashTableHash() which means that, for example, an Array
value of 0xff added to an Accumulator value of 0xff will lead to more than
4 bits of Overflow. The 5th bit is missed by the mask and is hence not
folded back into the lower order bits of the Accumulator. The upshot of the
this is an ASSERTion failure for a debug build or an array overflow in the
caller for a non-debug build.
This patch fixes this issue by increasing the overflow mask to 8 bits
instead of 4 (although 5 bit would actually be sufficient).

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenbus/hash_table.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
index a9c1b79..c7c6101 100644
--- a/src/xenbus/hash_table.c
+++ b/src/xenbus/hash_table.c
@@ -90,7 +90,7 @@ HashTableHash(
 
         Accumulator = (Accumulator << 4) + Array[Index];
 
-        Overflow = Accumulator & 0x00000f00;
+        Overflow = Accumulator & 0x0000ff00;
         if (Overflow != 0) {
             Accumulator ^= Overflow >> 8;
             Accumulator ^= Overflow;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:48:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:48:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZenO-0000Ch-69; Wed, 09 Sep 2015 12:48:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZenM-00009U-RL
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:48:12 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	C7/C0-19125-C8A20F55; Wed, 09 Sep 2015 12:48:12 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441802891!33910980!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31318 invoked from network); 9 Sep 2015 12:48:11 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:48:11 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2551824"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
Thread-Index: AQHQ6v2WrPXcOnFEFESboMQ74vt67J40JVkQ
Date: Wed, 9 Sep 2015 12:48:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA04F@AMSPEX01CL01.citrite.net>
References: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 09 September 2015 13:46
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> =

> There is a flaw in HashTableHash() which means that, for example, an Array
> value of 0xff added to an Accumulator value of 0xff will lead to more than
> 4 bits of Overflow. The 5th bit is missed by the mask and is hence not
> folded back into the lower order bits of the Accumulator. The upshot of t=
he
> this is an ASSERTion failure for a debug build or an array overflow in the
> caller for a non-debug build.
> This patch fixes this issue by increasing the overflow mask to 8 bits
> instead of 4 (although 5 bit would actually be sufficient).
> =

> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

Sorry, that should also be:

Reported-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

> ---
>  src/xenbus/hash_table.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> =

> diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
> index a9c1b79..c7c6101 100644
> --- a/src/xenbus/hash_table.c
> +++ b/src/xenbus/hash_table.c
> @@ -90,7 +90,7 @@ HashTableHash(
> =

>          Accumulator =3D (Accumulator << 4) + Array[Index];
> =

> -        Overflow =3D Accumulator & 0x00000f00;
> +        Overflow =3D Accumulator & 0x0000ff00;
>          if (Overflow !=3D 0) {
>              Accumulator ^=3D Overflow >> 8;
>              Accumulator ^=3D Overflow;
> --
> 2.1.1
> =

> =

> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:48:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:48:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZenO-0000Ch-69; Wed, 09 Sep 2015 12:48:14 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZenM-00009U-RL
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:48:12 +0000
Received: from [85.158.139.211] by server-14.bemta-5.messagelabs.com id
	C7/C0-19125-C8A20F55; Wed, 09 Sep 2015 12:48:12 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-206.messagelabs.com!1441802891!33910980!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31318 invoked from network); 9 Sep 2015 12:48:11 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:48:11 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2551824"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
Thread-Index: AQHQ6v2WrPXcOnFEFESboMQ74vt67J40JVkQ
Date: Wed, 9 Sep 2015 12:48:10 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA04F@AMSPEX01CL01.citrite.net>
References: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
In-Reply-To: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 09 September 2015 13:46
> To: win-pv-devel@lists.xenproject.org
> Cc: Paul Durrant
> Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> =

> There is a flaw in HashTableHash() which means that, for example, an Array
> value of 0xff added to an Accumulator value of 0xff will lead to more than
> 4 bits of Overflow. The 5th bit is missed by the mask and is hence not
> folded back into the lower order bits of the Accumulator. The upshot of t=
he
> this is an ASSERTion failure for a debug build or an array overflow in the
> caller for a non-debug build.
> This patch fixes this issue by increasing the overflow mask to 8 bits
> instead of 4 (although 5 bit would actually be sufficient).
> =

> Signed-off-by: Paul Durrant <paul.durrant@citrix.com>

Sorry, that should also be:

Reported-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

> ---
>  src/xenbus/hash_table.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> =

> diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
> index a9c1b79..c7c6101 100644
> --- a/src/xenbus/hash_table.c
> +++ b/src/xenbus/hash_table.c
> @@ -90,7 +90,7 @@ HashTableHash(
> =

>          Accumulator =3D (Accumulator << 4) + Array[Index];
> =

> -        Overflow =3D Accumulator & 0x00000f00;
> +        Overflow =3D Accumulator & 0x0000ff00;
>          if (Overflow !=3D 0) {
>              Accumulator ^=3D Overflow >> 8;
>              Accumulator ^=3D Overflow;
> --
> 2.1.1
> =

> =

> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:50:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZeph-0000bE-4L; Wed, 09 Sep 2015 12:50:37 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZepg-0000b7-Dj
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:50:36 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	6F/75-31069-B1B20F55; Wed, 09 Sep 2015 12:50:35 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1441803034!42810344!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9563 invoked from network); 9 Sep 2015 12:50:35 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:50:35 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2551895"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
Thread-Index: AQHQ6v2WrPXcOnFEFESboMQ74vt67J40JVkQgAAAu6A=
Date: Wed, 9 Sep 2015 12:50:34 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA06A@AMSPEX01CL01.citrite.net>
References: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com> 
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Paul Durrant
> Sent: 09 September 2015 13:48
> To: 'Paul Durrant'; win-pv-devel@lists.xenproject.org
> Subject: RE: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> =

> > -----Original Message-----
> > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > Sent: 09 September 2015 13:46
> > To: win-pv-devel@lists.xenproject.org
> > Cc: Paul Durrant
> > Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> >
> > There is a flaw in HashTableHash() which means that, for example, an Ar=
ray
> > value of 0xff added to an Accumulator value of 0xff will lead to more t=
han
> > 4 bits of Overflow. The 5th bit is missed by the mask and is hence not
> > folded back into the lower order bits of the Accumulator. The upshot of=
 the
> > this is an ASSERTion failure for a debug build or an array overflow in =
the
> > caller for a non-debug build.
> > This patch fixes this issue by increasing the overflow mask to 8 bits
> > instead of 4 (although 5 bit would actually be sufficient).
> >
> > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> =

> Sorry, that should also be:
> =

> Reported-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

... and indeed

Tested-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

> =

> > ---
> >  src/xenbus/hash_table.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
> > index a9c1b79..c7c6101 100644
> > --- a/src/xenbus/hash_table.c
> > +++ b/src/xenbus/hash_table.c
> > @@ -90,7 +90,7 @@ HashTableHash(
> >
> >          Accumulator =3D (Accumulator << 4) + Array[Index];
> >
> > -        Overflow =3D Accumulator & 0x00000f00;
> > +        Overflow =3D Accumulator & 0x0000ff00;
> >          if (Overflow !=3D 0) {
> >              Accumulator ^=3D Overflow >> 8;
> >              Accumulator ^=3D Overflow;
> > --
> > 2.1.1
> >
> >
> > _______________________________________________
> > win-pv-devel mailing list
> > win-pv-devel@lists.xenproject.org
> > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 12:50:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 12:50:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZeph-0000bE-4L; Wed, 09 Sep 2015 12:50:37 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZepg-0000b7-Dj
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 12:50:36 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	6F/75-31069-B1B20F55; Wed, 09 Sep 2015 12:50:35 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1441803034!42810344!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9563 invoked from network); 9 Sep 2015 12:50:35 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 12:50:35 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2551895"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <pdurrant@gmail.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
Thread-Index: AQHQ6v2WrPXcOnFEFESboMQ74vt67J40JVkQgAAAu6A=
Date: Wed, 9 Sep 2015 12:50:34 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA06A@AMSPEX01CL01.citrite.net>
References: <1441802751-6420-1-git-send-email-paul.durrant@citrix.com> 
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Paul Durrant
> Sent: 09 September 2015 13:48
> To: 'Paul Durrant'; win-pv-devel@lists.xenproject.org
> Subject: RE: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> =

> > -----Original Message-----
> > From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> > bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> > Sent: 09 September 2015 13:46
> > To: win-pv-devel@lists.xenproject.org
> > Cc: Paul Durrant
> > Subject: [win-pv-devel] [PATCH for 8.1] Fix hash table overflow
> >
> > There is a flaw in HashTableHash() which means that, for example, an Ar=
ray
> > value of 0xff added to an Accumulator value of 0xff will lead to more t=
han
> > 4 bits of Overflow. The 5th bit is missed by the mask and is hence not
> > folded back into the lower order bits of the Accumulator. The upshot of=
 the
> > this is an ASSERTion failure for a debug build or an array overflow in =
the
> > caller for a non-debug build.
> > This patch fixes this issue by increasing the overflow mask to 8 bits
> > instead of 4 (although 5 bit would actually be sufficient).
> >
> > Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
> =

> Sorry, that should also be:
> =

> Reported-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

... and indeed

Tested-by: Rafa=B3 Wojdy=B3a <omeg@invisiblethingslab.com>

> =

> > ---
> >  src/xenbus/hash_table.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
> > index a9c1b79..c7c6101 100644
> > --- a/src/xenbus/hash_table.c
> > +++ b/src/xenbus/hash_table.c
> > @@ -90,7 +90,7 @@ HashTableHash(
> >
> >          Accumulator =3D (Accumulator << 4) + Array[Index];
> >
> > -        Overflow =3D Accumulator & 0x00000f00;
> > +        Overflow =3D Accumulator & 0x0000ff00;
> >          if (Overflow !=3D 0) {
> >              Accumulator ^=3D Overflow >> 8;
> >              Accumulator ^=3D Overflow;
> > --
> > 2.1.1
> >
> >
> > _______________________________________________
> > win-pv-devel mailing list
> > win-pv-devel@lists.xenproject.org
> > http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 13:04:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 13:04:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZf2s-0001Y9-FR; Wed, 09 Sep 2015 13:04:14 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZZf2r-0001Y4-5t
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 13:04:13 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	48/4A-18744-94E20F55; Wed, 09 Sep 2015 13:04:09 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441803848!48246643!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13771 invoked from network); 9 Sep 2015 13:04:08 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 13:04:08 -0000
Received: by wicge5 with SMTP id ge5so154323328wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 06:04:08 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:from:subject:to:references:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=e3RjI9t8AFs00Otx4bbm/iwD61FLRCh4eVFpHUH8RH0=;
	b=ilLhvHweiCaZ3RON4BTTb5dYkeIRXHvVa4C0pOvEAdReAuF0nw+kMp15KzNJLXl8K3
	CdTpryXR6KVRT+7173ioO/7EmP37NVYG0IU4T9urY7eS2m+uOFRoGVMet5YS7byxT697
	R7DTNJGAaovAOfilU1uphk7LhMiMV0BQ+rXG+GZdO3Bm3oed9HqrSLWHxDucjuvIa+fq
	j4jUSMDzmuEvuEoC0s7jlKe6LDwiO+q66d/vGcqMj/ZCAi75RQJyFGX/ggShe7e0kITy
	Ba3b1w50OC7rOa0hd5v0BPHvx5bqi5PCqJUHWdUHf5R0dYnCcDozFqqe6HOAnVWLlqKx
	KRgw==
X-Gm-Message-State: ALoCoQlIaeyM6uEiCZERjUvmM7sx3AFzmTzmoHflGK7Qu1j0iOdaDIDZhYyUWVWYOdBLt7tWm284
X-Received: by 10.180.104.40 with SMTP id gb8mr31223078wib.17.1441803846246;
	Wed, 09 Sep 2015 06:04:06 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	j7sm10200172wjz.11.2015.09.09.06.04.05
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 06:04:05 -0700 (PDT)
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Message-ID: <55F02E4B.9000705@m2r.biz>
Date: Wed, 9 Sep 2015 15:04:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/09/2015 10:54, Paul Durrant ha scritto:
> Hi,
>
>    My recent set of patches (one for each driver) to parameterize the device name vendor prefix and vendor PCI device id have a knock on effect on compatibility between drivers. This, however, is with good reason...
>
>    There was a recent incident where Windows PV drivers were accidentally posted to Windows Update (not by Citrix) using binding names in use by Citrix XenServer. To avoid this sort of accident it seems prudent to parameterize the names and these patches do that.
>    The default vendor prefix has been set to 'XP' (Xen Project) rather than 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build time, but for Xen Project development builds this means drivers built after these patches are applied will not be compatible with those before. The bindings for the XenServer vendor PCI device are also no longer hardcoded but this is unlikely to have an effect on most people unless they have been deliberately specifying this device in their VM config.
>    I am also intending to back-port all the patches to the 8.1 branch and tag a new rc in the near future. I will mail out once the patches are there and the branches are tagged. With any luck I can also get rc builds posted to xenbits in the near future; that may require a little infrastructure tweaking though.
>
>    Cheers,
>
>      Paul
>
>
I thinked that was already default to xen project and that wasn't unable 
to install on device id different...
But from this seems that the drivers can be installed manually also if 
emulated xen device in qemu have different id, is it right?

Another strange think is default device id in xen, looking libxl_dm.c 
the default seems nothing:
> switch (b_info->u.hvm.vendor_device) {
>          case LIBXL_VENDOR_DEVICE_XENSERVER:
>              flexarray_append(dm_args, "-device");
>              flexarray_append(dm_args, "xen-pvdevice,device-id=0xc000");
>              break;
>          default:
>              break;
>          }
But from qemu patch: 
http://git.qemu.org/?p=qemu.git;a=commitdiff;h=539891a85d17bd8c23a2547e52e26993350d2c3a
Is also nothing the default and in commit description tell that should 
always specified by toolstack.
Xen should set xen project id by default but actually don't do it, is it 
right?
 From libxl_dm.c seems that can set correctly xen-pvdevice only for 
xenserver case.
Should add -device xen-pvdevice,device-id=0x0001 on default based on 
http://xenbits.xen.org/docs/unstable-staging/misc/pci-device-reservations.txt 
or I'm wrong?
Docs seems that write about also others possible id but actually 
u.hvm.vendor_device provide only none or xenserver.
Added Stefano Stabellini on cc.

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 13:04:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 13:04:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZf2s-0001Y9-FR; Wed, 09 Sep 2015 13:04:14 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZZf2r-0001Y4-5t
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 13:04:13 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	48/4A-18744-94E20F55; Wed, 09 Sep 2015 13:04:09 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441803848!48246643!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13771 invoked from network); 9 Sep 2015 13:04:08 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 13:04:08 -0000
Received: by wicge5 with SMTP id ge5so154323328wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 06:04:08 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:from:subject:to:references:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type
	:content-transfer-encoding;
	bh=e3RjI9t8AFs00Otx4bbm/iwD61FLRCh4eVFpHUH8RH0=;
	b=ilLhvHweiCaZ3RON4BTTb5dYkeIRXHvVa4C0pOvEAdReAuF0nw+kMp15KzNJLXl8K3
	CdTpryXR6KVRT+7173ioO/7EmP37NVYG0IU4T9urY7eS2m+uOFRoGVMet5YS7byxT697
	R7DTNJGAaovAOfilU1uphk7LhMiMV0BQ+rXG+GZdO3Bm3oed9HqrSLWHxDucjuvIa+fq
	j4jUSMDzmuEvuEoC0s7jlKe6LDwiO+q66d/vGcqMj/ZCAi75RQJyFGX/ggShe7e0kITy
	Ba3b1w50OC7rOa0hd5v0BPHvx5bqi5PCqJUHWdUHf5R0dYnCcDozFqqe6HOAnVWLlqKx
	KRgw==
X-Gm-Message-State: ALoCoQlIaeyM6uEiCZERjUvmM7sx3AFzmTzmoHflGK7Qu1j0iOdaDIDZhYyUWVWYOdBLt7tWm284
X-Received: by 10.180.104.40 with SMTP id gb8mr31223078wib.17.1441803846246;
	Wed, 09 Sep 2015 06:04:06 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	j7sm10200172wjz.11.2015.09.09.06.04.05
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 06:04:05 -0700 (PDT)
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Message-ID: <55F02E4B.9000705@m2r.biz>
Date: Wed, 9 Sep 2015 15:04:11 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="us-ascii"; Format="flowed"
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Il 09/09/2015 10:54, Paul Durrant ha scritto:
> Hi,
>
>    My recent set of patches (one for each driver) to parameterize the device name vendor prefix and vendor PCI device id have a knock on effect on compatibility between drivers. This, however, is with good reason...
>
>    There was a recent incident where Windows PV drivers were accidentally posted to Windows Update (not by Citrix) using binding names in use by Citrix XenServer. To avoid this sort of accident it seems prudent to parameterize the names and these patches do that.
>    The default vendor prefix has been set to 'XP' (Xen Project) rather than 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build time, but for Xen Project development builds this means drivers built after these patches are applied will not be compatible with those before. The bindings for the XenServer vendor PCI device are also no longer hardcoded but this is unlikely to have an effect on most people unless they have been deliberately specifying this device in their VM config.
>    I am also intending to back-port all the patches to the 8.1 branch and tag a new rc in the near future. I will mail out once the patches are there and the branches are tagged. With any luck I can also get rc builds posted to xenbits in the near future; that may require a little infrastructure tweaking though.
>
>    Cheers,
>
>      Paul
>
>
I thinked that was already default to xen project and that wasn't unable 
to install on device id different...
But from this seems that the drivers can be installed manually also if 
emulated xen device in qemu have different id, is it right?

Another strange think is default device id in xen, looking libxl_dm.c 
the default seems nothing:
> switch (b_info->u.hvm.vendor_device) {
>          case LIBXL_VENDOR_DEVICE_XENSERVER:
>              flexarray_append(dm_args, "-device");
>              flexarray_append(dm_args, "xen-pvdevice,device-id=0xc000");
>              break;
>          default:
>              break;
>          }
But from qemu patch: 
http://git.qemu.org/?p=qemu.git;a=commitdiff;h=539891a85d17bd8c23a2547e52e26993350d2c3a
Is also nothing the default and in commit description tell that should 
always specified by toolstack.
Xen should set xen project id by default but actually don't do it, is it 
right?
 From libxl_dm.c seems that can set correctly xen-pvdevice only for 
xenserver case.
Should add -device xen-pvdevice,device-id=0x0001 on default based on 
http://xenbits.xen.org/docs/unstable-staging/misc/pci-device-reservations.txt 
or I'm wrong?
Docs seems that write about also others possible id but actually 
u.hvm.vendor_device provide only none or xenserver.
Added Stefano Stabellini on cc.

Thanks for any reply and sorry for my bad english.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 13:30:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 13:30:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZfSX-0005Fu-No; Wed, 09 Sep 2015 13:30:45 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZfSX-0005Ff-0M
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 13:30:45 +0000
Received: from [85.158.137.68] by server-1.bemta-3.messagelabs.com id
	C3/79-01421-48430F55; Wed, 09 Sep 2015 13:30:44 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1441805443!42693223!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16847 invoked from network); 9 Sep 2015 13:30:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 13:30:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2553924"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Parameterization vendor prefix and PCI device id
Thread-Index: AdDq2qgom3xg83KGST+hP3QaUQJRGAAFJlOAAAT4NoA=
Date: Wed, 9 Sep 2015 13:30:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA217@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
	<55F02E4B.9000705@m2r.biz>
In-Reply-To: <55F02E4B.9000705@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> Sent: 09 September 2015 14:04
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Cc: Stefano Stabellini
> Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
> 
> Il 09/09/2015 10:54, Paul Durrant ha scritto:
> > Hi,
> >
> >    My recent set of patches (one for each driver) to parameterize the device
> name vendor prefix and vendor PCI device id have a knock on effect on
> compatibility between drivers. This, however, is with good reason...
> >
> >    There was a recent incident where Windows PV drivers were accidentally
> posted to Windows Update (not by Citrix) using binding names in use by
> Citrix XenServer. To avoid this sort of accident it seems prudent to
> parameterize the names and these patches do that.
> >    The default vendor prefix has been set to 'XP' (Xen Project) rather than
> 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build
> time, but for Xen Project development builds this means drivers built after
> these patches are applied will not be compatible with those before. The
> bindings for the XenServer vendor PCI device are also no longer hardcoded
> but this is unlikely to have an effect on most people unless they have been
> deliberately specifying this device in their VM config.
> >    I am also intending to back-port all the patches to the 8.1 branch and tag a
> new rc in the near future. I will mail out once the patches are there and the
> branches are tagged. With any luck I can also get rc builds posted to xenbits in
> the near future; that may require a little infrastructure tweaking though.
> >
> >    Cheers,
> >
> >      Paul
> >
> >
> I thinked that was already default to xen project and that wasn't unable
> to install on device id different...
> But from this seems that the drivers can be installed manually also if
> emulated xen device in qemu have different id, is it right?
> 

XENBUS will bind to the Xen platform device (namely 5853:0001), an old  XenServer variant of that (5853:0002) or a 'vendor' device of which the only registered example is one for XenServer (5853:C000) to which you refer below...

> Another strange think is default device id in xen, looking libxl_dm.c
> the default seems nothing:
> > switch (b_info->u.hvm.vendor_device) {
> >          case LIBXL_VENDOR_DEVICE_XENSERVER:
> >              flexarray_append(dm_args, "-device");
> >              flexarray_append(dm_args, "xen-pvdevice,device-id=0xc000");
> >              break;
> >          default:
> >              break;
> >          }
> But from qemu patch:
> http://git.qemu.org/?p=qemu.git;a=commitdiff;h=539891a85d17bd8c23a254
> 7e52e26993350d2c3a
> Is also nothing the default and in commit description tell that should
> always specified by toolstack.
> Xen should set xen project id by default but actually don't do it, is it
> right?
>  From libxl_dm.c seems that can set correctly xen-pvdevice only for
> xenserver case.
> Should add -device xen-pvdevice,device-id=0x0001 on default based on
> http://xenbits.xen.org/docs/unstable-staging/misc/pci-device-
> reservations.txt
> or I'm wrong?

QEMU, as invoked via libxl, will always create the Xen platform device (5853:0001) and so nothing special is required in xl.cfg to give you a VM into which you can install PV drivers.

> Docs seems that write about also others possible id but actually
> u.hvm.vendor_device provide only none or xenserver.
> Added Stefano Stabellini on cc.

That is correct. No-one else has registered a vendor device.

  Paul

> 
> Thanks for any reply and sorry for my bad english.
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 13:30:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 13:30:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZfSX-0005Fu-No; Wed, 09 Sep 2015 13:30:45 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=687cea7eb=Paul.Durrant@citrix.com>)
	id 1ZZfSX-0005Ff-0M
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 13:30:45 +0000
Received: from [85.158.137.68] by server-1.bemta-3.messagelabs.com id
	C3/79-01421-48430F55; Wed, 09 Sep 2015 13:30:44 +0000
X-Env-Sender: prvs=687cea7eb=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1441805443!42693223!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16847 invoked from network); 9 Sep 2015 13:30:43 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 13:30:43 -0000
X-IronPort-AV: E=Sophos;i="5.17,496,1437436800"; 
   d="scan'208";a="2553924"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Parameterization vendor prefix and PCI device id
Thread-Index: AdDq2qgom3xg83KGST+hP3QaUQJRGAAFJlOAAAT4NoA=
Date: Wed, 9 Sep 2015 13:30:41 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BA217@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B999C@AMSPEX01CL01.citrite.net>
	<55F02E4B.9000705@m2r.biz>
In-Reply-To: <55F02E4B.9000705@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Cc: Stefano Stabellini <Stefano.Stabellini@citrix.com>
Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Fabio Fantoni
> Sent: 09 September 2015 14:04
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Cc: Stefano Stabellini
> Subject: Re: [win-pv-devel] Parameterization vendor prefix and PCI device id
> 
> Il 09/09/2015 10:54, Paul Durrant ha scritto:
> > Hi,
> >
> >    My recent set of patches (one for each driver) to parameterize the device
> name vendor prefix and vendor PCI device id have a knock on effect on
> compatibility between drivers. This, however, is with good reason...
> >
> >    There was a recent incident where Windows PV drivers were accidentally
> posted to Windows Update (not by Citrix) using binding names in use by
> Citrix XenServer. To avoid this sort of accident it seems prudent to
> parameterize the names and these patches do that.
> >    The default vendor prefix has been set to 'XP' (Xen Project) rather than
> 'XS' (XenServer). Citrix will continue to use the 'XS' prefix by setting it at build
> time, but for Xen Project development builds this means drivers built after
> these patches are applied will not be compatible with those before. The
> bindings for the XenServer vendor PCI device are also no longer hardcoded
> but this is unlikely to have an effect on most people unless they have been
> deliberately specifying this device in their VM config.
> >    I am also intending to back-port all the patches to the 8.1 branch and tag a
> new rc in the near future. I will mail out once the patches are there and the
> branches are tagged. With any luck I can also get rc builds posted to xenbits in
> the near future; that may require a little infrastructure tweaking though.
> >
> >    Cheers,
> >
> >      Paul
> >
> >
> I thinked that was already default to xen project and that wasn't unable
> to install on device id different...
> But from this seems that the drivers can be installed manually also if
> emulated xen device in qemu have different id, is it right?
> 

XENBUS will bind to the Xen platform device (namely 5853:0001), an old  XenServer variant of that (5853:0002) or a 'vendor' device of which the only registered example is one for XenServer (5853:C000) to which you refer below...

> Another strange think is default device id in xen, looking libxl_dm.c
> the default seems nothing:
> > switch (b_info->u.hvm.vendor_device) {
> >          case LIBXL_VENDOR_DEVICE_XENSERVER:
> >              flexarray_append(dm_args, "-device");
> >              flexarray_append(dm_args, "xen-pvdevice,device-id=0xc000");
> >              break;
> >          default:
> >              break;
> >          }
> But from qemu patch:
> http://git.qemu.org/?p=qemu.git;a=commitdiff;h=539891a85d17bd8c23a254
> 7e52e26993350d2c3a
> Is also nothing the default and in commit description tell that should
> always specified by toolstack.
> Xen should set xen project id by default but actually don't do it, is it
> right?
>  From libxl_dm.c seems that can set correctly xen-pvdevice only for
> xenserver case.
> Should add -device xen-pvdevice,device-id=0x0001 on default based on
> http://xenbits.xen.org/docs/unstable-staging/misc/pci-device-
> reservations.txt
> or I'm wrong?

QEMU, as invoked via libxl, will always create the Xen platform device (5853:0001) and so nothing special is required in xl.cfg to give you a VM into which you can install PV drivers.

> Docs seems that write about also others possible id but actually
> u.hvm.vendor_device provide only none or xenserver.
> Added Stefano Stabellini on cc.

That is correct. No-one else has registered a vendor device.

  Paul

> 
> Thanks for any reply and sorry for my bad english.
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 15:41:55 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 15:41:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZhVQ-00012w-U4; Wed, 09 Sep 2015 15:41:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZhVP-00012r-II
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 15:41:51 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	4D/F7-03819-E3350F55; Wed, 09 Sep 2015 15:41:50 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441813309!33983052!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16780 invoked from network); 9 Sep 2015 15:41:49 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 15:41:49 -0000
Received: by wicge5 with SMTP id ge5so160335121wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 08:41:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=a4Sk+0MOdzhCglgfN+YCbxTxxo9FHEfRguXsZlYu+ek=;
	b=Rny5hMkajyrcBuoL6uhRJ4Febzl9iLZjB5z8pUt20dpMudGaKVA0SRpevV/xF4vMCZ
	E0rrnsNFDNlKJPEr8aJOtf7c/CjQUZ5mr+wJixqLRWD4wP1ccyi7H5d/PZAn5zMhiMMn
	Ja4i3wsJB6DaQcoTRmqLArMwjdZVr2fddqjnaVHEJwdGSWMuWLh7e+3LTRJSmqeNqxVl
	NVZ2HWKjfxuWEMBhZqhbNrljYFXaGMu5ifsfhqw4OhBSa6XhCOjvbZGTZqfUKf/khTCJ
	9YAwlibbD0F6aNXPKWf6YMYYsvXKnvMgtQK0eW6NJ+sNMDRBI6UcnQsLBNqSA93ULLvY
	PZsg==
X-Received: by 10.194.94.165 with SMTP id dd5mr62253743wjb.40.1441813309496;
	Wed, 09 Sep 2015 08:41:49 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id fw5sm4488525wib.5.2015.09.09.08.41.48
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 08:41:48 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 16:41:37 +0100
Message-Id: <1441813297-1796-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add Wait method to XENBUS_EVTCHN and use it
	in XENBUS_STORE
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch adds a Wait method to the XENBUS_EVTCHN interface to allow
a subscriber to wait for an event channel to be signalled. This is useful
in XENBUS_STORE to avoid polling the ring state too often.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/evtchn_interface.h |  36 +++++++++++++++-
 include/revision.h         |   5 ++-
 src/xenbus/evtchn.c        | 103 ++++++++++++++++++++++++++++++++++++++++++++-
 src/xenbus/store.c         |  56 +++++++++++++++++++++---
 4 files changed, 189 insertions(+), 11 deletions(-)

diff --git a/include/evtchn_interface.h b/include/evtchn_interface.h
index 6f8fe42..a9952d6 100644
--- a/include/evtchn_interface.h
+++ b/include/evtchn_interface.h
@@ -180,6 +180,20 @@ typedef VOID
     IN  PXENBUS_EVTCHN_CHANNEL  Channel
     );
 
+/*! \typedef XENBUS_EVTCHN_WAIT
+    \brief Wait for an event to the local end of the channel
+
+    \param Interface The interface header
+    \param Channel The channel handle
+    \param Timeout An optional timeout value (similar to KeWaitForSingleObject(), but non-zero values are allowed at DISPATCH_LEVEL).
+*/
+typedef NTSTATUS
+(*XENBUS_EVTCHN_WAIT)(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    );
+
 /*! \typedef XENBUS_EVTCHN_GET_PORT
     \brief Get the local port number bound to the channel
 
@@ -276,7 +290,25 @@ struct _XENBUS_EVTCHN_INTERFACE_V4 {
     XENBUS_EVTCHN_CLOSE     EvtchnClose;
 };
 
-typedef struct _XENBUS_EVTCHN_INTERFACE_V4 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
+/*! \struct _XENBUS_EVTCHN_INTERFACE_V5
+    \brief EVTCHN interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_EVTCHN_INTERFACE_V5 {
+    INTERFACE               Interface;
+    XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
+    XENBUS_EVTCHN_RELEASE   EvtchnRelease;
+    XENBUS_EVTCHN_OPEN      EvtchnOpen;
+    XENBUS_EVTCHN_BIND      EvtchnBind;
+    XENBUS_EVTCHN_UNMASK    EvtchnUnmask;
+    XENBUS_EVTCHN_SEND      EvtchnSend;
+    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
+    XENBUS_EVTCHN_WAIT      EvtchnWait;
+    XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
+    XENBUS_EVTCHN_CLOSE     EvtchnClose;
+};
+
+typedef struct _XENBUS_EVTCHN_INTERFACE_V5 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
 
 /*! \def XENBUS_EVTCHN
     \brief Macro at assist in method invocation
@@ -287,7 +319,7 @@ typedef struct _XENBUS_EVTCHN_INTERFACE_V4 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVT
 #endif  // _WINDLL
 
 #define XENBUS_EVTCHN_INTERFACE_VERSION_MIN 1
-#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 4
+#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 5
 
 #endif  // _XENBUS_EVTCHN_INTERFACE_H
 
diff --git a/include/revision.h b/include/revision.h
index dfe4995..7f261fc 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -44,7 +44,8 @@
 // EM - XENFILT_EMULATED_INTERFACE
 
 //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
-#define DEFINE_REVISION_TABLE                                           \
-    DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1)
+#define DEFINE_REVISION_TABLE                                               \
+    DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
+    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
 
 #endif  // _REVISION_H
diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c
index 051ec1f..4a6ebd2 100644
--- a/src/xenbus/evtchn.c
+++ b/src/xenbus/evtchn.c
@@ -81,6 +81,7 @@ struct _XENBUS_EVTCHN_CHANNEL {
     PKSERVICE_ROUTINE           Callback;
     PVOID                       Argument;
     BOOLEAN                     Active; // Must be tested at >= DISPATCH_LEVEL
+    ULONG                       Events;
     XENBUS_EVTCHN_TYPE          Type;
     XENBUS_EVTCHN_PARAMETERS    Parameters;
     BOOLEAN                     Mask;
@@ -400,6 +401,8 @@ EvtchnReap(
 
     Trace("%u\n", LocalPort);
 
+    Channel->Events = 0;
+
     ASSERT(Channel->Closed);
     Channel->Closed = FALSE;
 
@@ -504,6 +507,8 @@ EvtchnPoll(
 
         KeMemoryBarrier();
         if (!Channel->Closed) {
+            Channel->Events++;
+
             RemoveEntryList(&Channel->PendingListEntry);
             InitializeListHead(&Channel->PendingListEntry);
 
@@ -879,6 +884,66 @@ EvtchnGetPort(
     return Channel->LocalPort;
 }
 
+static NTSTATUS
+EvtchnWait(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  PLARGE_INTEGER          Timeout
+    )
+{
+    KIRQL                       Irql;
+    ULONG                       Events;
+    LARGE_INTEGER               Start;
+    NTSTATUS                    status;
+
+    UNREFERENCED_PARAMETER(Interface);
+
+    ASSERT3U(KeGetCurrentIrql(), <=, DISPATCH_LEVEL);
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql); // Prevent suspend
+
+    Events = Channel->Events;
+    KeMemoryBarrier();
+
+    KeQuerySystemTime(&Start);
+
+    for (;;) {
+        status = STATUS_SUCCESS;
+        if (Channel->Events != Events)
+            break;
+
+        if (Timeout != NULL) {
+            LARGE_INTEGER   Now;
+
+            KeQuerySystemTime(&Now);
+
+            status = STATUS_TIMEOUT;
+            if (Timeout->QuadPart > 0) {
+                // Absolute timeout
+                if (Now.QuadPart > Timeout->QuadPart)
+                    break;
+            } else if (Timeout->QuadPart < 0) {
+                LONGLONG   Delta;
+
+                // Relative timeout
+                Delta = Now.QuadPart - Start.QuadPart;
+                if (Delta > -Timeout->QuadPart)
+                    break;
+            } else {
+                // Immediate timeout
+                ASSERT(Timeout->QuadPart == 0);
+                break;
+            }
+        }
+
+        _mm_pause();
+        KeMemoryBarrier();
+    }
+
+    KeLowerIrql(Irql);
+
+    return status;
+}
+
 static
 _Function_class_(KSERVICE_ROUTINE)
 __drv_requiresIRQL(HIGH_LEVEL)
@@ -1018,8 +1083,6 @@ EvtchnReset(
     }
 }
 
-
-
 static NTSTATUS
 EvtchnAbiAcquire(
     IN  PXENBUS_EVTCHN_CONTEXT  Context
@@ -1286,6 +1349,11 @@ EvtchnDebugCallback(
             default:
                 break;
             }
+
+            XENBUS_DEBUG(Printf,
+                         &Context->DebugInterface,
+                         "Events = %lu\n",
+                         Channel->Events);
         }
     }
 }
@@ -1597,6 +1665,20 @@ static struct _XENBUS_EVTCHN_INTERFACE_V4 EvtchnInterfaceVersion4 = {
     EvtchnClose
 };
 
+static struct _XENBUS_EVTCHN_INTERFACE_V5 EvtchnInterfaceVersion5 = {
+    { sizeof (struct _XENBUS_EVTCHN_INTERFACE_V5), 5, NULL, NULL, NULL },
+    EvtchnAcquire,
+    EvtchnRelease,
+    EvtchnOpen,
+    EvtchnBind,
+    EvtchnUnmask,
+    EvtchnSend,
+    EvtchnTrigger,
+    EvtchnWait,
+    EvtchnGetPort,
+    EvtchnClose,
+};
+
 NTSTATUS
 EvtchnInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -1773,6 +1855,23 @@ EvtchnGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 5: {
+        struct _XENBUS_EVTCHN_INTERFACE_V5  *EvtchnInterface;
+
+        EvtchnInterface = (struct _XENBUS_EVTCHN_INTERFACE_V5 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENBUS_EVTCHN_INTERFACE_V5))
+            break;
+
+        *EvtchnInterface = EvtchnInterfaceVersion5;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 16ca37b..c54b0f0 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -131,6 +131,9 @@ struct _XENBUS_STORE_CONTEXT {
     LIST_ENTRY                          WatchList;
     LIST_ENTRY                          BufferList;
     KDPC                                Dpc;
+    ULONG                               Polls;
+    ULONG                               Dpcs;
+    ULONG                               Events;
     XENBUS_STORE_RESPONSE               Response;
     XENBUS_EVTCHN_INTERFACE             EvtchnInterface;
     PHYSICAL_ADDRESS                    Address;
@@ -828,6 +831,8 @@ StorePollLocked(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    Context->Polls++;
+
     do {
         Read = Written = 0;
 
@@ -877,6 +882,13 @@ StoreDpc(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+#define TIME_US(_us)        ((_us) * 10)
+#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
+#define TIME_S(_s)          (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t)   (-(_t))
+
+#define XENBUS_STORE_POLL_PERIOD 5
+
 static PXENBUS_STORE_RESPONSE
 StoreSubmitRequest(
     IN  PXENBUS_STORE_CONTEXT   Context,
@@ -885,6 +897,7 @@ StoreSubmitRequest(
 {
     PXENBUS_STORE_RESPONSE      Response;
     KIRQL                       Irql;
+    LARGE_INTEGER               Timeout;
 
     ASSERT3U(Request->State, ==, XENBUS_STORE_REQUEST_PREPARED);
 
@@ -895,11 +908,25 @@ StoreSubmitRequest(
     KeAcquireSpinLockAtDpcLevel(&Context->Lock);
 
     InsertTailList(&Context->SubmittedList, &Request->ListEntry);
+
     Request->State = XENBUS_STORE_REQUEST_SUBMITTED;
+    StorePollLocked(Context);
+    KeMemoryBarrier();
+
+    Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_POLL_PERIOD));
 
     while (Request->State != XENBUS_STORE_REQUEST_COMPLETED) {
+        NTSTATUS    status;
+
+        status = XENBUS_EVTCHN(Wait,
+                               &Context->EvtchnInterface,
+                               Context->Channel,
+                               &Timeout);
+        if (status == STATUS_TIMEOUT)
+            Warning("TIMED OUT\n");
+
         StorePollLocked(Context);
-        SchedYield();
+        KeMemoryBarrier();
     }
 
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
@@ -1778,13 +1805,14 @@ fail1:
 
 static VOID
 StorePoll(
-    IN  PINTERFACE  Interface
+    IN  PINTERFACE          Interface
     )
 {
-    PXENBUS_STORE_CONTEXT  Context = Interface->Context;
+    PXENBUS_STORE_CONTEXT   Context = Interface->Context;
 
     KeAcquireSpinLockAtDpcLevel(&Context->Lock);
-    StorePollLocked(Context);
+    if (Context->References != 0)
+        StorePollLocked(Context);
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
@@ -1804,7 +1832,10 @@ StoreEvtchnCallback(
 
     ASSERT(Context != NULL);
 
-    KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
+    Context->Events++;
+
+    if (KeInsertQueueDpc(&Context->Dpc, NULL, NULL))
+        Context->Dpcs++;
 
     return TRUE;
 }
@@ -1851,6 +1882,9 @@ StoreEnable(
                   &Context->EvtchnInterface,
                   Context->Channel,
                   FALSE);
+
+    // Trigger an initial poll
+    KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
 }
 
 static PHYSICAL_ADDRESS
@@ -1973,6 +2007,13 @@ StoreDebugCallback(
                      Shared->rsp_prod);
     }
 
+    XENBUS_DEBUG(Printf,
+                 &Context->DebugInterface,
+                 "Events = %lu Dpcs = %lu Polls = %lu\n",
+                 Context->Events,
+                 Context->Dpcs,
+                 Context->Polls);
+
     if (!IsListEmpty(&Context->BufferList)) {
         PLIST_ENTRY ListEntry;
 
@@ -2254,6 +2295,7 @@ StoreRelease(
     XENBUS_SUSPEND(Release, &Context->SuspendInterface);
 
     StoreDisable(Context);
+    StorePollLocked(Context);
     RtlZeroMemory(&Context->Response, sizeof (XENBUS_STORE_RESPONSE));
 
     XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
@@ -2402,6 +2444,10 @@ StoreTeardown(
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
+    Context->Polls = 0;
+    Context->Dpcs = 0;
+    Context->Events = 0;
+
     Context->Fdo = NULL;
 
     RtlZeroMemory(&Context->Dpc, sizeof (KDPC));
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 15:41:55 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 15:41:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZhVQ-00012w-U4; Wed, 09 Sep 2015 15:41:52 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZhVP-00012r-II
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 15:41:51 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	4D/F7-03819-E3350F55; Wed, 09 Sep 2015 15:41:50 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-206.messagelabs.com!1441813309!33983052!1
X-Originating-IP: [209.85.212.182]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16780 invoked from network); 9 Sep 2015 15:41:49 -0000
Received: from mail-wi0-f182.google.com (HELO mail-wi0-f182.google.com)
	(209.85.212.182)
	by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	9 Sep 2015 15:41:49 -0000
Received: by wicge5 with SMTP id ge5so160335121wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Wed, 09 Sep 2015 08:41:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=a4Sk+0MOdzhCglgfN+YCbxTxxo9FHEfRguXsZlYu+ek=;
	b=Rny5hMkajyrcBuoL6uhRJ4Febzl9iLZjB5z8pUt20dpMudGaKVA0SRpevV/xF4vMCZ
	E0rrnsNFDNlKJPEr8aJOtf7c/CjQUZ5mr+wJixqLRWD4wP1ccyi7H5d/PZAn5zMhiMMn
	Ja4i3wsJB6DaQcoTRmqLArMwjdZVr2fddqjnaVHEJwdGSWMuWLh7e+3LTRJSmqeNqxVl
	NVZ2HWKjfxuWEMBhZqhbNrljYFXaGMu5ifsfhqw4OhBSa6XhCOjvbZGTZqfUKf/khTCJ
	9YAwlibbD0F6aNXPKWf6YMYYsvXKnvMgtQK0eW6NJ+sNMDRBI6UcnQsLBNqSA93ULLvY
	PZsg==
X-Received: by 10.194.94.165 with SMTP id dd5mr62253743wjb.40.1441813309496;
	Wed, 09 Sep 2015 08:41:49 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id fw5sm4488525wib.5.2015.09.09.08.41.48
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Wed, 09 Sep 2015 08:41:48 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Wed,  9 Sep 2015 16:41:37 +0100
Message-Id: <1441813297-1796-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add Wait method to XENBUS_EVTCHN and use it
	in XENBUS_STORE
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch adds a Wait method to the XENBUS_EVTCHN interface to allow
a subscriber to wait for an event channel to be signalled. This is useful
in XENBUS_STORE to avoid polling the ring state too often.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/evtchn_interface.h |  36 +++++++++++++++-
 include/revision.h         |   5 ++-
 src/xenbus/evtchn.c        | 103 ++++++++++++++++++++++++++++++++++++++++++++-
 src/xenbus/store.c         |  56 +++++++++++++++++++++---
 4 files changed, 189 insertions(+), 11 deletions(-)

diff --git a/include/evtchn_interface.h b/include/evtchn_interface.h
index 6f8fe42..a9952d6 100644
--- a/include/evtchn_interface.h
+++ b/include/evtchn_interface.h
@@ -180,6 +180,20 @@ typedef VOID
     IN  PXENBUS_EVTCHN_CHANNEL  Channel
     );
 
+/*! \typedef XENBUS_EVTCHN_WAIT
+    \brief Wait for an event to the local end of the channel
+
+    \param Interface The interface header
+    \param Channel The channel handle
+    \param Timeout An optional timeout value (similar to KeWaitForSingleObject(), but non-zero values are allowed at DISPATCH_LEVEL).
+*/
+typedef NTSTATUS
+(*XENBUS_EVTCHN_WAIT)(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  PLARGE_INTEGER          Timeout OPTIONAL
+    );
+
 /*! \typedef XENBUS_EVTCHN_GET_PORT
     \brief Get the local port number bound to the channel
 
@@ -276,7 +290,25 @@ struct _XENBUS_EVTCHN_INTERFACE_V4 {
     XENBUS_EVTCHN_CLOSE     EvtchnClose;
 };
 
-typedef struct _XENBUS_EVTCHN_INTERFACE_V4 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
+/*! \struct _XENBUS_EVTCHN_INTERFACE_V5
+    \brief EVTCHN interface version 5
+    \ingroup interfaces
+*/
+struct _XENBUS_EVTCHN_INTERFACE_V5 {
+    INTERFACE               Interface;
+    XENBUS_EVTCHN_ACQUIRE   EvtchnAcquire;
+    XENBUS_EVTCHN_RELEASE   EvtchnRelease;
+    XENBUS_EVTCHN_OPEN      EvtchnOpen;
+    XENBUS_EVTCHN_BIND      EvtchnBind;
+    XENBUS_EVTCHN_UNMASK    EvtchnUnmask;
+    XENBUS_EVTCHN_SEND      EvtchnSend;
+    XENBUS_EVTCHN_TRIGGER   EvtchnTrigger;
+    XENBUS_EVTCHN_WAIT      EvtchnWait;
+    XENBUS_EVTCHN_GET_PORT  EvtchnGetPort;
+    XENBUS_EVTCHN_CLOSE     EvtchnClose;
+};
+
+typedef struct _XENBUS_EVTCHN_INTERFACE_V5 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVTCHN_INTERFACE;
 
 /*! \def XENBUS_EVTCHN
     \brief Macro at assist in method invocation
@@ -287,7 +319,7 @@ typedef struct _XENBUS_EVTCHN_INTERFACE_V4 XENBUS_EVTCHN_INTERFACE, *PXENBUS_EVT
 #endif  // _WINDLL
 
 #define XENBUS_EVTCHN_INTERFACE_VERSION_MIN 1
-#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 4
+#define XENBUS_EVTCHN_INTERFACE_VERSION_MAX 5
 
 #endif  // _XENBUS_EVTCHN_INTERFACE_H
 
diff --git a/include/revision.h b/include/revision.h
index dfe4995..7f261fc 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -44,7 +44,8 @@
 // EM - XENFILT_EMULATED_INTERFACE
 
 //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
-#define DEFINE_REVISION_TABLE                                           \
-    DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1)
+#define DEFINE_REVISION_TABLE                                               \
+    DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
+    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
 
 #endif  // _REVISION_H
diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c
index 051ec1f..4a6ebd2 100644
--- a/src/xenbus/evtchn.c
+++ b/src/xenbus/evtchn.c
@@ -81,6 +81,7 @@ struct _XENBUS_EVTCHN_CHANNEL {
     PKSERVICE_ROUTINE           Callback;
     PVOID                       Argument;
     BOOLEAN                     Active; // Must be tested at >= DISPATCH_LEVEL
+    ULONG                       Events;
     XENBUS_EVTCHN_TYPE          Type;
     XENBUS_EVTCHN_PARAMETERS    Parameters;
     BOOLEAN                     Mask;
@@ -400,6 +401,8 @@ EvtchnReap(
 
     Trace("%u\n", LocalPort);
 
+    Channel->Events = 0;
+
     ASSERT(Channel->Closed);
     Channel->Closed = FALSE;
 
@@ -504,6 +507,8 @@ EvtchnPoll(
 
         KeMemoryBarrier();
         if (!Channel->Closed) {
+            Channel->Events++;
+
             RemoveEntryList(&Channel->PendingListEntry);
             InitializeListHead(&Channel->PendingListEntry);
 
@@ -879,6 +884,66 @@ EvtchnGetPort(
     return Channel->LocalPort;
 }
 
+static NTSTATUS
+EvtchnWait(
+    IN  PINTERFACE              Interface,
+    IN  PXENBUS_EVTCHN_CHANNEL  Channel,
+    IN  PLARGE_INTEGER          Timeout
+    )
+{
+    KIRQL                       Irql;
+    ULONG                       Events;
+    LARGE_INTEGER               Start;
+    NTSTATUS                    status;
+
+    UNREFERENCED_PARAMETER(Interface);
+
+    ASSERT3U(KeGetCurrentIrql(), <=, DISPATCH_LEVEL);
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql); // Prevent suspend
+
+    Events = Channel->Events;
+    KeMemoryBarrier();
+
+    KeQuerySystemTime(&Start);
+
+    for (;;) {
+        status = STATUS_SUCCESS;
+        if (Channel->Events != Events)
+            break;
+
+        if (Timeout != NULL) {
+            LARGE_INTEGER   Now;
+
+            KeQuerySystemTime(&Now);
+
+            status = STATUS_TIMEOUT;
+            if (Timeout->QuadPart > 0) {
+                // Absolute timeout
+                if (Now.QuadPart > Timeout->QuadPart)
+                    break;
+            } else if (Timeout->QuadPart < 0) {
+                LONGLONG   Delta;
+
+                // Relative timeout
+                Delta = Now.QuadPart - Start.QuadPart;
+                if (Delta > -Timeout->QuadPart)
+                    break;
+            } else {
+                // Immediate timeout
+                ASSERT(Timeout->QuadPart == 0);
+                break;
+            }
+        }
+
+        _mm_pause();
+        KeMemoryBarrier();
+    }
+
+    KeLowerIrql(Irql);
+
+    return status;
+}
+
 static
 _Function_class_(KSERVICE_ROUTINE)
 __drv_requiresIRQL(HIGH_LEVEL)
@@ -1018,8 +1083,6 @@ EvtchnReset(
     }
 }
 
-
-
 static NTSTATUS
 EvtchnAbiAcquire(
     IN  PXENBUS_EVTCHN_CONTEXT  Context
@@ -1286,6 +1349,11 @@ EvtchnDebugCallback(
             default:
                 break;
             }
+
+            XENBUS_DEBUG(Printf,
+                         &Context->DebugInterface,
+                         "Events = %lu\n",
+                         Channel->Events);
         }
     }
 }
@@ -1597,6 +1665,20 @@ static struct _XENBUS_EVTCHN_INTERFACE_V4 EvtchnInterfaceVersion4 = {
     EvtchnClose
 };
 
+static struct _XENBUS_EVTCHN_INTERFACE_V5 EvtchnInterfaceVersion5 = {
+    { sizeof (struct _XENBUS_EVTCHN_INTERFACE_V5), 5, NULL, NULL, NULL },
+    EvtchnAcquire,
+    EvtchnRelease,
+    EvtchnOpen,
+    EvtchnBind,
+    EvtchnUnmask,
+    EvtchnSend,
+    EvtchnTrigger,
+    EvtchnWait,
+    EvtchnGetPort,
+    EvtchnClose,
+};
+
 NTSTATUS
 EvtchnInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -1773,6 +1855,23 @@ EvtchnGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 5: {
+        struct _XENBUS_EVTCHN_INTERFACE_V5  *EvtchnInterface;
+
+        EvtchnInterface = (struct _XENBUS_EVTCHN_INTERFACE_V5 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENBUS_EVTCHN_INTERFACE_V5))
+            break;
+
+        *EvtchnInterface = EvtchnInterfaceVersion5;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index 16ca37b..c54b0f0 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -131,6 +131,9 @@ struct _XENBUS_STORE_CONTEXT {
     LIST_ENTRY                          WatchList;
     LIST_ENTRY                          BufferList;
     KDPC                                Dpc;
+    ULONG                               Polls;
+    ULONG                               Dpcs;
+    ULONG                               Events;
     XENBUS_STORE_RESPONSE               Response;
     XENBUS_EVTCHN_INTERFACE             EvtchnInterface;
     PHYSICAL_ADDRESS                    Address;
@@ -828,6 +831,8 @@ StorePollLocked(
 
     ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
 
+    Context->Polls++;
+
     do {
         Read = Written = 0;
 
@@ -877,6 +882,13 @@ StoreDpc(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+#define TIME_US(_us)        ((_us) * 10)
+#define TIME_MS(_ms)        (TIME_US((_ms) * 1000))
+#define TIME_S(_s)          (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t)   (-(_t))
+
+#define XENBUS_STORE_POLL_PERIOD 5
+
 static PXENBUS_STORE_RESPONSE
 StoreSubmitRequest(
     IN  PXENBUS_STORE_CONTEXT   Context,
@@ -885,6 +897,7 @@ StoreSubmitRequest(
 {
     PXENBUS_STORE_RESPONSE      Response;
     KIRQL                       Irql;
+    LARGE_INTEGER               Timeout;
 
     ASSERT3U(Request->State, ==, XENBUS_STORE_REQUEST_PREPARED);
 
@@ -895,11 +908,25 @@ StoreSubmitRequest(
     KeAcquireSpinLockAtDpcLevel(&Context->Lock);
 
     InsertTailList(&Context->SubmittedList, &Request->ListEntry);
+
     Request->State = XENBUS_STORE_REQUEST_SUBMITTED;
+    StorePollLocked(Context);
+    KeMemoryBarrier();
+
+    Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENBUS_STORE_POLL_PERIOD));
 
     while (Request->State != XENBUS_STORE_REQUEST_COMPLETED) {
+        NTSTATUS    status;
+
+        status = XENBUS_EVTCHN(Wait,
+                               &Context->EvtchnInterface,
+                               Context->Channel,
+                               &Timeout);
+        if (status == STATUS_TIMEOUT)
+            Warning("TIMED OUT\n");
+
         StorePollLocked(Context);
-        SchedYield();
+        KeMemoryBarrier();
     }
 
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
@@ -1778,13 +1805,14 @@ fail1:
 
 static VOID
 StorePoll(
-    IN  PINTERFACE  Interface
+    IN  PINTERFACE          Interface
     )
 {
-    PXENBUS_STORE_CONTEXT  Context = Interface->Context;
+    PXENBUS_STORE_CONTEXT   Context = Interface->Context;
 
     KeAcquireSpinLockAtDpcLevel(&Context->Lock);
-    StorePollLocked(Context);
+    if (Context->References != 0)
+        StorePollLocked(Context);
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
@@ -1804,7 +1832,10 @@ StoreEvtchnCallback(
 
     ASSERT(Context != NULL);
 
-    KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
+    Context->Events++;
+
+    if (KeInsertQueueDpc(&Context->Dpc, NULL, NULL))
+        Context->Dpcs++;
 
     return TRUE;
 }
@@ -1851,6 +1882,9 @@ StoreEnable(
                   &Context->EvtchnInterface,
                   Context->Channel,
                   FALSE);
+
+    // Trigger an initial poll
+    KeInsertQueueDpc(&Context->Dpc, NULL, NULL);
 }
 
 static PHYSICAL_ADDRESS
@@ -1973,6 +2007,13 @@ StoreDebugCallback(
                      Shared->rsp_prod);
     }
 
+    XENBUS_DEBUG(Printf,
+                 &Context->DebugInterface,
+                 "Events = %lu Dpcs = %lu Polls = %lu\n",
+                 Context->Events,
+                 Context->Dpcs,
+                 Context->Polls);
+
     if (!IsListEmpty(&Context->BufferList)) {
         PLIST_ENTRY ListEntry;
 
@@ -2254,6 +2295,7 @@ StoreRelease(
     XENBUS_SUSPEND(Release, &Context->SuspendInterface);
 
     StoreDisable(Context);
+    StorePollLocked(Context);
     RtlZeroMemory(&Context->Response, sizeof (XENBUS_STORE_RESPONSE));
 
     XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
@@ -2402,6 +2444,10 @@ StoreTeardown(
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
+    Context->Polls = 0;
+    Context->Dpcs = 0;
+    Context->Events = 0;
+
     Context->Fdo = NULL;
 
     RtlZeroMemory(&Context->Dpc, sizeof (KDPC));
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 22:34:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 22:34:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZnwl-0003eP-81; Wed, 09 Sep 2015 22:34:31 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZnwj-0003eI-NI
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 22:34:29 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	BD/26-18744-5F3B0F55; Wed, 09 Sep 2015 22:34:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1441838067!48327411!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22130 invoked from network); 9 Sep 2015 22:34:28 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 22:34:28 -0000
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
	by mailout.nyi.internal (Postfix) with ESMTP id 9107320331
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 18:34:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute6.internal (MEProxy); Wed, 09 Sep 2015 18:34:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=nVIRiidQETjvCH4m
	NG6+QxWJg6U=; b=gcjxHUcY3AG5n49h59OjEKDp1iWLgx/lttgY86h5ehFumTUM
	npqme4TRjihR47j0XP/Kj8z0tyceLGtvFtHZNaFIyKEVt8ZmYZDTF/Wn9hrsMmhT
	IAacjgeeGN9dgzC69F0p8HrZve8wMQu3LD/+RwguV7HleIPyYf60JOP+HTo=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=nVIRiidQETjvCH4
	mNG6+QxWJg6U=; b=fld+JwpKkSbm5bI/iY9QOk3RM2hgvqJPAP/Tw1aGkuM5RPn
	v0wAdK0mzIuc6/IrGSsNzpkpkH6iRKeEl3jit12Um8J1BVllrKZzWdgFPi+g1wc4
	9BttCQxHg9dUIsUd0wTuhHIYNiEAXKR+s72ZY09j7btY2thYt16YRBKL5hRA=
X-Sasl-enc: QoRmjVSw4odZzytD/jlt+i2a3pZ27G0W4KHuSVuYt6d0 1441838067
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 0992468016F;
	Wed,  9 Sep 2015 18:34:26 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F0B3F1.3010906@invisiblethingslab.com>
Date: Thu, 10 Sep 2015 00:34:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
Content-Length: 588
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Rm91bmQgYW5vdGhlciBidWcgOikKTGlzdCB0cmF2ZXJzYWwgbG9vcHMgaW4gSGFzaFRhYmxlTG9v
a3VwKCkgYW5kIEhhc2hUYWJsZVJlbW92ZSgpIGRvbid0Cml0ZXJhdGUgdG8gdGhlIG5leHQgZWxl
bWVudCwgc28gdGhleSBsb2NrIHVwIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZQppdGVtIGluIGEg
YnVja2V0LgoKLS0gClJhZmHFgiBXb2pkecWCYQpRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZl
bG9wZXIKaHR0cHM6Ly93d3cucXViZXMtb3Mub3JnLwoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 09 22:34:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 09 Sep 2015 22:34:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZnwl-0003eP-81; Wed, 09 Sep 2015 22:34:31 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZZnwj-0003eI-NI
	for win-pv-devel@lists.xenproject.org; Wed, 09 Sep 2015 22:34:29 +0000
Received: from [193.109.254.147] by server-12.bemta-14.messagelabs.com id
	BD/26-18744-5F3B0F55; Wed, 09 Sep 2015 22:34:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-7.tower-27.messagelabs.com!1441838067!48327411!1
X-Originating-IP: [66.111.4.26]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjYgPT4gMTIyNTM=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22130 invoked from network); 9 Sep 2015 22:34:28 -0000
Received: from out2-smtp.messagingengine.com (HELO
	out2-smtp.messagingengine.com) (66.111.4.26)
	by server-7.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 9 Sep 2015 22:34:28 -0000
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46])
	by mailout.nyi.internal (Postfix) with ESMTP id 9107320331
	for <win-pv-devel@lists.xenproject.org>;
	Wed,  9 Sep 2015 18:34:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute6.internal (MEProxy); Wed, 09 Sep 2015 18:34:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=nVIRiidQETjvCH4m
	NG6+QxWJg6U=; b=gcjxHUcY3AG5n49h59OjEKDp1iWLgx/lttgY86h5ehFumTUM
	npqme4TRjihR47j0XP/Kj8z0tyceLGtvFtHZNaFIyKEVt8ZmYZDTF/Wn9hrsMmhT
	IAacjgeeGN9dgzC69F0p8HrZve8wMQu3LD/+RwguV7HleIPyYf60JOP+HTo=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=nVIRiidQETjvCH4
	mNG6+QxWJg6U=; b=fld+JwpKkSbm5bI/iY9QOk3RM2hgvqJPAP/Tw1aGkuM5RPn
	v0wAdK0mzIuc6/IrGSsNzpkpkH6iRKeEl3jit12Um8J1BVllrKZzWdgFPi+g1wc4
	9BttCQxHg9dUIsUd0wTuhHIYNiEAXKR+s72ZY09j7btY2thYt16YRBKL5hRA=
X-Sasl-enc: QoRmjVSw4odZzytD/jlt+i2a3pZ27G0W4KHuSVuYt6d0 1441838067
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 0992468016F;
	Wed,  9 Sep 2015 18:34:26 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F0B3F1.3010906@invisiblethingslab.com>
Date: Thu, 10 Sep 2015 00:34:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
Content-Length: 588
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Rm91bmQgYW5vdGhlciBidWcgOikKTGlzdCB0cmF2ZXJzYWwgbG9vcHMgaW4gSGFzaFRhYmxlTG9v
a3VwKCkgYW5kIEhhc2hUYWJsZVJlbW92ZSgpIGRvbid0Cml0ZXJhdGUgdG8gdGhlIG5leHQgZWxl
bWVudCwgc28gdGhleSBsb2NrIHVwIGlmIHRoZXJlJ3MgbW9yZSB0aGFuIG9uZQppdGVtIGluIGEg
YnVja2V0LgoKLS0gClJhZmHFgiBXb2pkecWCYQpRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZl
bG9wZXIKaHR0cHM6Ly93d3cucXViZXMtb3Mub3JnLwoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2Nn
aS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 08:36:13 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 08:36:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZxL1-0007yB-SA; Thu, 10 Sep 2015 08:36:11 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=688e4faf5=Paul.Durrant@citrix.com>)
	id 1ZZxL0-0007y5-UI
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 08:36:11 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	3E/B1-13905-AF041F55; Thu, 10 Sep 2015 08:36:10 +0000
X-Env-Sender: prvs=688e4faf5=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1441874168!34088756!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23724 invoked from network); 10 Sep 2015 08:36:09 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 08:36:09 -0000
X-IronPort-AV: E=Sophos;i="5.17,503,1437436800"; 
   d="scan'208";a="2627630"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ///gt4CAADPWcIAAn06AgADF1BA=
Date: Thu, 10 Sep 2015 08:36:07 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BCA68@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
	<55F0B3F1.3010906@invisiblethingslab.com>
In-Reply-To: <55F0B3F1.3010906@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDIzOjM0DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gRm91bmQgYW5vdGhlciBidWcgOikNCj4gTGlzdCB0cmF2ZXJzYWwgbG9vcHMg
aW4gSGFzaFRhYmxlTG9va3VwKCkgYW5kIEhhc2hUYWJsZVJlbW92ZSgpIGRvbid0DQo+IGl0ZXJh
dGUgdG8gdGhlIG5leHQgZWxlbWVudCwgc28gdGhleSBsb2NrIHVwIGlmIHRoZXJlJ3MgbW9yZSB0
aGFuIG9uZQ0KPiBpdGVtIGluIGEgYnVja2V0Lg0KPiANCg0KR29vZCBncmllZi4gSG93IGRpZCBJ
IG1pc3MgdGhhdD8hIEZpeCBjb21pbmcgc2hvcnRseS4NCg0KICBQYXVsDQoNCj4gLS0NCj4gUmFm
YcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRw
czovL3d3dy5xdWJlcy1vcy5vcmcvDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWls
bWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 08:36:13 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 08:36:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZxL1-0007yB-SA; Thu, 10 Sep 2015 08:36:11 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=688e4faf5=Paul.Durrant@citrix.com>)
	id 1ZZxL0-0007y5-UI
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 08:36:11 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	3E/B1-13905-AF041F55; Thu, 10 Sep 2015 08:36:10 +0000
X-Env-Sender: prvs=688e4faf5=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-206.messagelabs.com!1441874168!34088756!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 23724 invoked from network); 10 Sep 2015 08:36:09 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 08:36:09 -0000
X-IronPort-AV: E=Sophos;i="5.17,503,1437436800"; 
   d="scan'208";a="2627630"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Xenbus hashtable usage
Thread-Index: AQHQ6pixpwwGOpOAhkabpk7HcI9/Cp4z3wkw///q3oCAACHKsIAACRdQ///gt4CAADPWcIAAn06AgADF1BA=
Date: Thu, 10 Sep 2015 08:36:07 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BCA68@AMSPEX01CL01.citrite.net>
References: <55EF80D8.1090304@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B97FB@AMSPEX01CL01.citrite.net>
	<55EFF919.9080702@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9A4C@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9B46@AMSPEX01CL01.citrite.net>
	<55F002D3.70103@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B9D8B@AMSPEX01CL01.citrite.net>
	<55F0B3F1.3010906@invisiblethingslab.com>
In-Reply-To: <55F0B3F1.3010906@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Xenbus hashtable usage
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBSYWZhxYIgV29qZHnFgmEgW21h
aWx0bzpvbWVnQGludmlzaWJsZXRoaW5nc2xhYi5jb21dDQo+IFNlbnQ6IDA5IFNlcHRlbWJlciAy
MDE1IDIzOjM0DQo+IFRvOiBQYXVsIER1cnJhbnQ7IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWGVuYnVzIGhhc2h0YWJsZSB1
c2FnZQ0KPiANCj4gRm91bmQgYW5vdGhlciBidWcgOikNCj4gTGlzdCB0cmF2ZXJzYWwgbG9vcHMg
aW4gSGFzaFRhYmxlTG9va3VwKCkgYW5kIEhhc2hUYWJsZVJlbW92ZSgpIGRvbid0DQo+IGl0ZXJh
dGUgdG8gdGhlIG5leHQgZWxlbWVudCwgc28gdGhleSBsb2NrIHVwIGlmIHRoZXJlJ3MgbW9yZSB0
aGFuIG9uZQ0KPiBpdGVtIGluIGEgYnVja2V0Lg0KPiANCg0KR29vZCBncmllZi4gSG93IGRpZCBJ
IG1pc3MgdGhhdD8hIEZpeCBjb21pbmcgc2hvcnRseS4NCg0KICBQYXVsDQoNCj4gLS0NCj4gUmFm
YcWCIFdvamR5xYJhDQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRw
czovL3d3dy5xdWJlcy1vcy5vcmcvDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWls
bWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 09:08:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 09:08:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZxqk-0003Wk-Up; Thu, 10 Sep 2015 09:08:58 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZxqj-0003Wf-Os
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 09:08:57 +0000
Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id
	CC/91-16965-8A841F55; Thu, 10 Sep 2015 09:08:56 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441876109!43139285!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14490 invoked from network); 10 Sep 2015 09:08:30 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 09:08:30 -0000
Received: by wiclk2 with SMTP id lk2so19931947wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=eU2FNcrkGOvzwc0MVvt0W4lr/KIE4ccW5R3lOaI4eBo=;
	b=kuGHF26rBvJso/5qtJ2trPfVAYSEDElqeXVv2DG+D9RppZvyGt7eE8y4cmBvC9SeJG
	JNiLgKqUTtO/F9Jpr+f0zyF8raXvwrwt1BENGYKWDLmfF1K2vEg+xeRLU4zz/FBFr1fC
	tXaOQ66tHRPlZjuoW9ATW9AgXTaC85OplqGm5Vj930eNZn00HQcJotxcrzA1QAHGhQMT
	sLS7+qeBFFm3Rmj+Wdo+z2GH4r2FZtFQ9z+6snPJKbNG1u2N7AmoZmYjl+EmQnvj8dXT
	+72pAV+agFeqDyn1OqnKPPmTDQ3Cib8k4+36sIq6weAgGWAAKYQaIfYpoy1nEod12RaR
	Wvng==
X-Received: by 10.194.121.34 with SMTP id lh2mr68601470wjb.101.1441876109597; 
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id go5sm8162161wib.3.2015.09.10.02.08.28
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 10 Sep 2015 10:08:20 +0100
Message-Id: <1441876100-8884-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix list walking in hash_table.c
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Neither HashTableLookup() nor HashTableRemove() update the iterator in their
attempted list walks, leading to an endless spin. This patch changes the
while loops to for loops and fixes the problem.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Reported-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 src/xenbus/hash_table.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
index c7c6101..b271abd 100644
--- a/src/xenbus/hash_table.c
+++ b/src/xenbus/hash_table.c
@@ -249,8 +249,9 @@ HashTableRemove(
     
     HashTableBucketLock(Bucket, TRUE, &Irql);
 
-    ListEntry = Bucket->List.Flink;
-    while (ListEntry != &Bucket->List) {
+    for (ListEntry = Bucket->List.Flink;
+         ListEntry != &Bucket->List;
+         ListEntry = ListEntry->Flink) {
         Node = CONTAINING_RECORD(ListEntry, XENBUS_HASH_TABLE_NODE, ListEntry);
 
         if (Node->Key == Key)
@@ -294,8 +295,9 @@ HashTableLookup(
     
     HashTableBucketLock(Bucket, FALSE, &Irql);
 
-    ListEntry = Bucket->List.Flink;
-    while (ListEntry != &Bucket->List) {
+    for (ListEntry = Bucket->List.Flink;
+         ListEntry != &Bucket->List;
+         ListEntry = ListEntry->Flink) {
         Node = CONTAINING_RECORD(ListEntry, XENBUS_HASH_TABLE_NODE, ListEntry);
 
         if (Node->Key == Key)
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 09:08:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 09:08:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZZxqk-0003Wk-Up; Thu, 10 Sep 2015 09:08:58 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZZxqj-0003Wf-Os
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 09:08:57 +0000
Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id
	CC/91-16965-8A841F55; Thu, 10 Sep 2015 09:08:56 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441876109!43139285!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14490 invoked from network); 10 Sep 2015 09:08:30 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 09:08:30 -0000
Received: by wiclk2 with SMTP id lk2so19931947wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=eU2FNcrkGOvzwc0MVvt0W4lr/KIE4ccW5R3lOaI4eBo=;
	b=kuGHF26rBvJso/5qtJ2trPfVAYSEDElqeXVv2DG+D9RppZvyGt7eE8y4cmBvC9SeJG
	JNiLgKqUTtO/F9Jpr+f0zyF8raXvwrwt1BENGYKWDLmfF1K2vEg+xeRLU4zz/FBFr1fC
	tXaOQ66tHRPlZjuoW9ATW9AgXTaC85OplqGm5Vj930eNZn00HQcJotxcrzA1QAHGhQMT
	sLS7+qeBFFm3Rmj+Wdo+z2GH4r2FZtFQ9z+6snPJKbNG1u2N7AmoZmYjl+EmQnvj8dXT
	+72pAV+agFeqDyn1OqnKPPmTDQ3Cib8k4+36sIq6weAgGWAAKYQaIfYpoy1nEod12RaR
	Wvng==
X-Received: by 10.194.121.34 with SMTP id lh2mr68601470wjb.101.1441876109597; 
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id go5sm8162161wib.3.2015.09.10.02.08.28
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 10 Sep 2015 02:08:29 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Thu, 10 Sep 2015 10:08:20 +0100
Message-Id: <1441876100-8884-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix list walking in hash_table.c
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Neither HashTableLookup() nor HashTableRemove() update the iterator in their
attempted list walks, leading to an endless spin. This patch changes the
while loops to for loops and fixes the problem.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Reported-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 src/xenbus/hash_table.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/xenbus/hash_table.c b/src/xenbus/hash_table.c
index c7c6101..b271abd 100644
--- a/src/xenbus/hash_table.c
+++ b/src/xenbus/hash_table.c
@@ -249,8 +249,9 @@ HashTableRemove(
     
     HashTableBucketLock(Bucket, TRUE, &Irql);
 
-    ListEntry = Bucket->List.Flink;
-    while (ListEntry != &Bucket->List) {
+    for (ListEntry = Bucket->List.Flink;
+         ListEntry != &Bucket->List;
+         ListEntry = ListEntry->Flink) {
         Node = CONTAINING_RECORD(ListEntry, XENBUS_HASH_TABLE_NODE, ListEntry);
 
         if (Node->Key == Key)
@@ -294,8 +295,9 @@ HashTableLookup(
     
     HashTableBucketLock(Bucket, FALSE, &Irql);
 
-    ListEntry = Bucket->List.Flink;
-    while (ListEntry != &Bucket->List) {
+    for (ListEntry = Bucket->List.Flink;
+         ListEntry != &Bucket->List;
+         ListEntry = ListEntry->Flink) {
         Node = CONTAINING_RECORD(ListEntry, XENBUS_HASH_TABLE_NODE, ListEntry);
 
         if (Node->Key == Key)
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 14:36:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 14:36:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Za2xn-0007wk-Nh; Thu, 10 Sep 2015 14:36:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Za2xl-0007wM-Um
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 14:36:34 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	B3/E5-09570-17591F55; Thu, 10 Sep 2015 14:36:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-31.messagelabs.com!1441895786!12041707!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=2.4 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16727 invoked from network); 10 Sep 2015 14:36:26 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-2.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 14:36:26 -0000
Received: by wicfx3 with SMTP id fx3so30772621wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 07:36:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=U8dSSA/03N0fdCsTBBYtpxqr7su4hfjEDh6ISCsIbB0=;
	b=nHyJPpKOY+qdSLApZB5Qb/0K0PWouuICDpfTvy3NETPrqjHnjWB2Ct+pBUFeZ53FbH
	tOSKG1/PvSCJ07ulbi0ib/urCFvjN4d5ZR/F533eBHUU5bvoDzmc4zg29vE0LPTlqU1R
	kZZanSlWLUmhMg+Q/Az0s75+qwWja1VMO4h/ekAzbe8HIR9Gd3QDkCow8TpXOSeohUeD
	BQJhg/GjDMvCsnsdLL2TNc+5oWOHMdg5/P2sd7R8iRpsjuAOfZzKgugumhsr9IL7Wb+X
	xEE8dMzlc31Pok664mAfE55azmORQYZyNeCz0+WwdSrZEhTd3Q7n1F6LtZS61deTsO8x
	FG9Q==
X-Gm-Message-State: ALoCoQlq5FgnIlvjkQ7a6Pk8GTmmxb2ALoDp8Vd80AcFt5hKrKQ5FbFFkoXSCeFllWTYIOeBavhc
X-Received: by 10.194.190.79 with SMTP id go15mr68181242wjc.80.1441895785589; 
	Thu, 10 Sep 2015 07:36:25 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	db8sm16004455wjb.41.2015.09.10.07.36.18
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 10 Sep 2015 07:36:24 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F1956B.4070201@m2r.biz>
Date: Thu, 10 Sep 2015 16:36:27 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------000909010101030501040802"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------000909010101030501040802
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 26009
Content-Transfer-Encoding: quoted-printable

Il 07/09/2015 16:41, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 07 September 2015 14:01
>> To: Paul Durrant; Stefano Stabellini
>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>
>> Il 07/09/2015 13:57, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 07 September 2015 11:33
>>>> To: Paul Durrant; Stefano Stabellini
>>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>>
>>>> Il 07/09/2015 11:26, Paul Durrant ha scritto:
>>>>> Fabio,
>>>>>
>>>>>      Can you confirm that you don't see any problem if you use standard
>> IDE
>>>> emulated disks=3F I certainly don't.
>>>>>      Paul
>>>> WIth ide instead ahci was with same results but about udev problem now
>>>> seems I found the cause, seems the dom0 kernel.
>>>> With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy
>>>> repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64
>>>> version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
>>>> Initially new pv drivers was with network not working with kernel <3.14
>>>> but after seems was solved (I don't know the exactly commit) but seems
>>>> that xen without udev file a newer kernel is still needed.
>>>> With 3.16 kernel I had other problems instead, for example with
>>>> balloning (even if should not be used).
>>>> With second test with kernel 3.16 I tried to remove a workaround of
>>>> balloning problem (dom0_mem=3D2G,max:3G in grub.cfg instead
>>>> dom0_mem=3D2G,max:2G), I nomore saw kern.log spam but W7 domU
>>>> crashed at boot.
>>>> Another strange things is even if with trace enabled don't show pv
>>>> drivers debug lines with 3.16 kernel (on older tests with 3.16 did if I
>>>> remember good)
>>>> In attachment the windows minidump.
>>> That yielded:
>>>
>>> 0: kd> !analyze -v
>>>
>> **********************************************************
>> *********************
>>> *                                                                             *
>>> *                        Bugcheck Analysis                                    *
>>> *                                                                             *
>>>
>> **********************************************************
>> *********************
>>> SYSTEM_SERVICE_EXCEPTION (3b)
>>> An exception happened while executing a system service routine.
>>> Arguments:
>>> Arg1: 00000000c0000005, Exception code that caused the bugcheck
>>> Arg2: fffff80002a8a7c5, Address of the instruction which caused the
>> bugcheck
>>> Arg3: fffff88001e86c00, Address of the context record for the exception
>> that caused the bugcheck
>>> Arg4: 0000000000000000, zero.
>>>
>>> Debugging Details:
>>> ------------------
>>>
>>>
>>> EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx
>> referenced memory at 0x%08lx. The memory could not be %s.
>>> FAULTING_IP:
>>> nt!ExpInterlockedPopEntrySListFault16+0
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>
>>> CONTEXT:  fffff88001e86c00 -- (.cxr 0xfffff88001e86c00;r)
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Last set context:
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Resetting default scope
>>>
>>> CUSTOMER_CRASH_COUNT:  1
>>>
>>> DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT
>>>
>>> BUGCHECK_STR:  0x3B
>>>
>>> PROCESS_NAME:  lsass.exe
>>>
>>> CURRENT_IRQL:  0
>>>
>>> ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) x86fre
>>>
>>> LAST_CONTROL_TRANSFER:  from 0000000000000000 to fffff80002a8a7c5
>>>
>>> STACK_TEXT:
>>> fffff880`01e875e0 00000000`00000000 : 00000000`00000000
>> 00000000`00000000 00000000`00000000 00000000`00000000 :
>> nt!ExpInterlockedPopEntrySListFault16
>>>
>>> FOLLOWUP_IP:
>>> nt!ExpInterlockedPopEntrySListFault16+0
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>
>>> SYMBOL_STACK_INDEX:  0
>>>
>>> SYMBOL_NAME:  nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> FOLLOWUP_NAME:  MachineOwner
>>>
>>> MODULE_NAME: nt
>>>
>>> IMAGE_NAME:  ntkrnlmp.exe
>>>
>>> DEBUG_FLR_IMAGE_TIMESTAMP:  556356e8
>>>
>>> IMAGE_VERSION:  6.1.7601.18869
>>>
>>> STACK_COMMAND:  .cxr 0xfffff88001e86c00 ; kb
>>>
>>> FAILURE_BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> ANALYSIS_SOURCE:  KM
>>>
>>> FAILURE_ID_HASH_STRING:
>> km:x64_0x3b_nt!expinterlockedpopentryslistfault16+0
>>> FAILURE_ID_HASH:  {b390bf2a-9c11-079f-34b0-5dffcabffe4b}
>>>
>>> Followup: MachineOwner
>>> ---------
>>>
>>> 0: kd> .cxr 0xfffff88001e86c00;r
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Last set context:
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> That's pretty strange. I'd say something is probably corrupt.
>> The corruption I saw for sure about disks are using btrfs as dom0 fs (in
>> rare cases) and with qcow2 overlay.
>> These tests are instead with ext4 and raw domUs disk.
>> About others corruptions (not only disks) I don't know.
> I'm just using a single layer qcow2.
>
>>>> I'm going crazy with these too many problems and haven't time to do all
>>>> useful tests :(
>>> Too many moving parts I'd say. I've been running with a  4.2-rc dom0
>> kernel, a Xen from about 3 weeks ago and upstream qemu from Xen's
>> upstream tag (again from about 3 weeks ago) and I'm not seeing any
>> problems. I do have a fairly standard config though; ide disks and std-vga
>> graphics.
>>>     Paul
>> About dom0 kernel, are you using build from a package o custom build=3F
>> Can be useful for me try kernel 4.2 instead=3F
>>
> I'm building my own. I'm on a wheezy base but 3.2 is much too old a kernel for me.
>
>    Paul

I tried with kernel 4.1.6 on dom0 built with make-kpkg with config from 
Sid (that use same version) except 2 small changes (in attachment), xen 
updated based on 4.6.0-rc3.
I did some tests and domUs with new pv drivers seems ok also without 
udev file (seems related to old dom0 kernels with new win pv drivers).
I also tried a qcow2 overlay for some hours without saw errors or leak 
on check (I'll keep tested further).
Persist the very strange thing of qemu's xen trace not working even if 
built with debug and domU's setting is the same.
I tried also to remove the new pv driver from a W10 domU (for install 
the new one), I removed them from control panel and I rebooted windows 
but on reboot it hang on windows start.
Nothing useful on qemu log, I did a xl destroy completed successfull but 
it didn't kill qemu.
The domU's xl cfg in attachment.
> cat /etc/xen/qemu-trace-options
> xen_platform_log


> xl list
> Name                                        ID   Mem VCPUs State   Time(s)
> Domain-0                                     0  2048     8 r-----     
> 799.0
> (null)                                       5   196     2 
> --p--d       4.8

In syslog I found this:
> Sep 10 15:53:27 testVS01OU kernel: [11777.639088] BUG: unable to 
> handle kernel paging request at ffff8800159b56c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.639133] IP: 
> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.639169] PGD 1810067 PUD 
> 1811067 PMD 7fe68067 PTE 80100000159b5065
> Sep 10 15:53:27 testVS01OU kernel: [11777.639210] Oops: 0003 [#1] SMP
> Sep 10 15:53:27 testVS01OU kernel: [11777.639229] Modules linked in: 
> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn 
> xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core 
> ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi nfsd 
> auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc bridge 
> stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button processor 
> wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 dm_mod sd_mod 
> sg sr_mod cdrom hid_generic ata_generic usbhid hid crc32c_intel 
> ata_piix libata ehci_pci ehci_hcd bnx2 usbcore usb_common mpt2sas 
> raid_class scsi_transport_sas scsi_mod
> Sep 10 15:53:27 testVS01OU kernel: [11777.639686] CPU: 2 PID: 5782 
> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
> Sep 10 15:53:27 testVS01OU kernel: [11777.639721] Hardware name: Dell 
> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
> Sep 10 15:53:27 testVS01OU kernel: [11777.639755] task: 
> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
> Sep 10 15:53:27 testVS01OU kernel: [11777.639787] RIP: 
> e030:[<ffffffff81069b7b>]  [<ffffffff81069b7b>] 
> ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.639830] RSP: 
> e02b:ffff88001d52fb08  EFLAGS: 00010202
> Sep 10 15:53:27 testVS01OU kernel: [11777.639855] RAX: 
> 0000000002020202 RBX: 0000000000000001 RCX: 8000000318bf2b67
> Sep 10 15:53:27 testVS01OU kernel: [11777.639887] RDX: 
> ffff8800159b56c0 RSI: 00007ffab42d8000 RDI: ffff8800040232f8
> Sep 10 15:53:27 testVS01OU kernel: [11777.639918] RBP: 
> ffffea0000566d70 R08: 0000000000000001 R09: 8000000318bf2b01
> Sep 10 15:53:27 testVS01OU kernel: [11777.639950] R10: 
> 0000000000007ff0 R11: ffff8800000006c0 R12: ffff88003260cd08
> Sep 10 15:53:27 testVS01OU kernel: [11777.639982] R13: 
> ffff8800040232f8 R14: ffff8800703f7480 R15: 0000000000000015
> Sep 10 15:53:27 testVS01OU kernel: [11777.640021] FS: 
> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.640058] CS:  e033 DS: 0000 
> ES: 0000 CR0: 000000008005003b
> Sep 10 15:53:27 testVS01OU kernel: [11777.640084] CR2: 
> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
> Sep 10 15:53:27 testVS01OU kernel: [11777.640113] Stack:
> Sep 10 15:53:27 testVS01OU kernel: [11777.640120] 00007ffab42d8000 
> ffffffff811927fd ffff880072dae350 ffff88007c88a2f0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640145] ffff88001d530000 
> ffff8800703f74e8 fffffffeffffffff ffff8800703f7500
> Sep 10 15:53:27 testVS01OU kernel: [11777.640169] 8000000318bf2327 
> ffff8800159b56c0 ffffffff815910cf ffff880072dae350
> Sep 10 15:53:27 testVS01OU kernel: [11777.640193] Call Trace:
> Sep 10 15:53:27 testVS01OU kernel: [11777.640207] [<ffffffff811927fd>] 
> =3F handle_mm_fault+0x28d/0x1700
> Sep 10 15:53:27 testVS01OU kernel: [11777.640226] [<ffffffff815910cf>] 
> =3F schedule+0x2f/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.640245] [<ffffffff812f8e24>] 
> =3F call_rwsem_down_read_failed+0x14/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.640266] [<ffffffff81064499>] 
> =3F __do_page_fault+0x1b9/0x510
> Sep 10 15:53:27 testVS01OU kernel: [11777.640285] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.640302] [<ffffffff812fe903>] 
> =3F copy_page_to_iter+0x83/0x320
> Sep 10 15:53:27 testVS01OU kernel: [11777.640321] [<ffffffff81166e20>] 
> =3F generic_file_read_iter+0x2c0/0x5c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640341] [<ffffffff8159491c>] 
> =3F _raw_spin_lock_irq+0xc/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.640360] [<ffffffff81212835>] 
> =3F fsnotify+0x335/0x4b0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640378] [<ffffffff811d302f>] 
> =3F __vfs_read+0xaf/0xe0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640395] [<ffffffff811d43ed>] 
> =3F vfs_read+0x8d/0x150
> Sep 10 15:53:27 testVS01OU kernel: [11777.640411] [<ffffffff811d46ab>] 
> =3F SyS_pread64+0x9b/0xb0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640428] [<ffffffff81594eb2>] 
> =3F system_call_fastpath+0x16/0x75
> Sep 10 15:53:27 testVS01OU kernel: [11777.640446] Code: c4 18 e9 99 30 
> 10 00 66 0f 1f 84 00 00 00 00 00 66 66 66 66 90 53 48 3b 0a 41 0f 95 
> c1 45 85 c0 41 0f b6 d9 74 13 45 84 c9 74 0e <48> 89 0a 48 8b 7f 40 66 
> 66 66 90 66 66 90 89 d8 5b c3 0f 1f 00
> Sep 10 15:53:27 testVS01OU kernel: [11777.641970] RIP 
> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.642711]  RSP <ffff88001d52fb08>
> Sep 10 15:53:27 testVS01OU kernel: [11777.643450] CR2: ffff8800159b56c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.647305] ------------[ cut 
> here ]------------
> Sep 10 15:53:27 testVS01OU kernel: [11777.648042] kernel BUG at 
> arch/x86/mm/pageattr.c:214!
> Sep 10 15:53:27 testVS01OU kernel: [11777.648764] invalid opcode: 0000 
> [#2] SMP
> Sep 10 15:53:27 testVS01OU kernel: [11777.649483] Modules linked in: 
> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn 
> xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core 
> ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi nfsd 
> auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc bridge 
> stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button processor 
> wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 dm_mod sd_mod 
> sg sr_mod cdrom hid_generic ata_generic usbhid hid crc32c_intel 
> ata_piix libata ehci_pci ehci_hcd bnx2 usbcore usb_common mpt2sas 
> raid_class scsi_transport_sas scsi_mod
> Sep 10 15:53:27 testVS01OU kernel: [11777.654889] CPU: 2 PID: 5782 
> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
> Sep 10 15:53:27 testVS01OU kernel: [11777.655624] Hardware name: Dell 
> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
> Sep 10 15:53:27 testVS01OU kernel: [11777.656353] task: 
> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
> Sep 10 15:53:27 testVS01OU kernel: [11777.657082] RIP: 
> e030:[<ffffffff8106749c>]  [<ffffffff8106749c>] 
> change_page_attr_set_clr+0x44c/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.657824] RSP: 
> e02b:ffff88001d52e9d8  EFLAGS: 00010046
> Sep 10 15:53:27 testVS01OU kernel: [11777.658552] RAX: 
> 201008001fc900f5 RBX: 0000000000000000 RCX: 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.659280] RDX: 
> 0000000000000000 RSI: 0000000000000000 RDI: ffff88001d52ea08
> Sep 10 15:53:27 testVS01OU kernel: [11777.660004] RBP: 
> 0000000000000000 R08: 0000000000000001 R09: ffff880000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.660724] R10: 
> 00000000deadbeef R11: 0000000000000000 R12: 0000000000000200
> Sep 10 15:53:27 testVS01OU kernel: [11777.661437] R13: 
> 0000000000000001 R14: 0000000000000000 R15: 0000000000000005
> Sep 10 15:53:27 testVS01OU kernel: [11777.662148] FS: 
> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.662863] CS:  e033 DS: 0000 
> ES: 0000 CR0: 000000008005003b
> Sep 10 15:53:27 testVS01OU kernel: [11777.663570] CR2: 
> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
> Sep 10 15:53:27 testVS01OU kernel: [11777.664280] Stack:
> Sep 10 15:53:27 testVS01OU kernel: [11777.665004] 0000000000000004 
> ffff880000000000 0000000000000000 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.665722] 0000001000000040 
> 0000000000000001 0000000000000000 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.666428] 0000000000000010 
> 0000000000000000 0000000500000001 000000000002348b
> Sep 10 15:53:27 testVS01OU kernel: [11777.667143] Call Trace:
> Sep 10 15:53:27 testVS01OU kernel: [11777.667834] [<ffffffff8106760f>] 
> =3F _set_pages_array+0xdf/0x130
> Sep 10 15:53:27 testVS01OU kernel: [11777.668534] [<ffffffffa036ef9e>] 
> =3F ttm_set_pages_caching+0x4e/0x80 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.669237] [<ffffffffa036f0d0>] 
> =3F ttm_alloc_new_pages.isra.5+0xb0/0x170 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.669952] [<ffffffffa036fb06>] 
> =3F ttm_pool_populate+0x3c6/0x4c0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.670656] [<ffffffffa036c262>] 
> =3F ttm_bo_move_memcpy+0x582/0x620 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.671355] [<ffffffff811a2558>] 
> =3F __vmalloc_node_range+0x198/0x2a0
> Sep 10 15:53:27 testVS01OU kernel: [11777.672057] [<ffffffffa0369c77>] 
> =3F ttm_bo_handle_move_mem+0x267/0x5e0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.672763] [<ffffffff810052f9>] 
> =3F __raw_callee_save_xen_pmd_val+0x11/0x1e
> Sep 10 15:53:27 testVS01OU kernel: [11777.673472] [<ffffffffa036a8bb>] 
> =3F ttm_bo_mem_space+0xeb/0x360 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.674182] [<ffffffffa036ad0f>] 
> =3F ttm_bo_validate+0x1df/0x1f0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.674886] [<ffffffff8119fdfa>] 
> =3F lazy_max_pages+0x1a/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.675592] [<ffffffff811a095d>] 
> =3F free_vmap_area_noflush+0x2d/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.676305] [<ffffffffa0354b72>] 
> =3F mgag200_bo_push_sysram+0x82/0xc0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.677025] [<ffffffffa034f9c1>] 
> =3F mga_crtc_do_set_base.isra.8.constprop.20+0x81/0x3f0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.677755] [<ffffffff813221c8>] 
> =3F pci_bus_write_config_dword+0x78/0x90
> Sep 10 15:53:27 testVS01OU kernel: [11777.678471] [<ffffffffa03511ca>] 
> =3F mga_crtc_mode_set+0x149a/0x25d0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.679178] [<ffffffff812eb827>] 
> =3F idr_get_empty_slot+0x187/0x3e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.679872] [<ffffffff812eb427>] 
> =3F idr_mark_full+0x57/0x70
> Sep 10 15:53:27 testVS01OU kernel: [11777.680562] [<ffffffff812ebd66>] 
> =3F idr_alloc+0x76/0xd0
> Sep 10 15:53:27 testVS01OU kernel: [11777.681251] [<ffffffffa0388939>] 
> =3F drm_crtc_helper_set_mode+0x309/0x540 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.681954] [<ffffffffa0389969>] 
> =3F drm_crtc_helper_set_config+0x8d9/0xb00 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.682654] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.683358] [<ffffffffa0317998>] 
> =3F drm_mode_set_config_internal+0x68/0x100 [drm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.684050] [<ffffffffa03947cf>] 
> =3F drm_fb_helper_pan_display+0x9f/0xe0 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.684726] [<ffffffff8135ba81>] 
> =3F fb_pan_display+0xc1/0x180
> Sep 10 15:53:27 testVS01OU kernel: [11777.685384] [<ffffffff81356166>] 
> =3F bit_update_start+0x26/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.686021] [<ffffffff81355b01>] 
> =3F fbcon_switch+0x391/0x540
> Sep 10 15:53:27 testVS01OU kernel: [11777.686641] [<ffffffff813cd31f>] 
> =3F redraw_screen+0x15f/0x240
> Sep 10 15:53:27 testVS01OU kernel: [11777.687240] [<ffffffff813542aa>] 
> =3F fbcon_blank+0x23a/0x2f0
> Sep 10 15:53:27 testVS01OU kernel: [11777.687819] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.688391] [<ffffffff810c923e>] 
> =3F console_unlock+0x1ee/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.688956] [<ffffffff81150919>] 
> =3F irq_work_queue+0x9/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.689510] [<ffffffff810c9042>] 
> =3F wake_up_klogd+0x32/0x40
> Sep 10 15:53:27 testVS01OU kernel: [11777.690054] [<ffffffff810c9dd0>] 
> =3F vprintk_emit+0x2b0/0x4e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.690584] [<ffffffff81594af7>] 
> =3F _raw_spin_lock_irqsave+0x17/0x70
> Sep 10 15:53:27 testVS01OU kernel: [11777.691112] [<ffffffff810da4e6>] 
> =3F internal_add_timer+0x36/0xa0
> Sep 10 15:53:27 testVS01OU kernel: [11777.691639] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.692173] [<ffffffff810dc7d4>] 
> =3F mod_timer+0x154/0x1d0
> Sep 10 15:53:27 testVS01OU kernel: [11777.692708] [<ffffffff813cde81>] 
> =3F do_unblank_screen+0xb1/0x1e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.693247] [<ffffffff812fa209>] 
> =3F bust_spinlocks+0x19/0x40
> Sep 10 15:53:27 testVS01OU kernel: [11777.693779] [<ffffffff810196a1>] 
> =3F oops_end+0x41/0x120
> Sep 10 15:53:27 testVS01OU kernel: [11777.694304] [<ffffffff8158b86d>] 
> =3F no_context+0x2fc/0x336
> Sep 10 15:53:27 testVS01OU kernel: [11777.694821] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.695330] [<ffffffff81069b7b>] 
> =3F ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.695834] [<ffffffff811927fd>] 
> =3F handle_mm_fault+0x28d/0x1700
> Sep 10 15:53:27 testVS01OU kernel: [11777.696343] [<ffffffff815910cf>] 
> =3F schedule+0x2f/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.696854] [<ffffffff812f8e24>] 
> =3F call_rwsem_down_read_failed+0x14/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.697363] [<ffffffff81064499>] 
> =3F __do_page_fault+0x1b9/0x510
> Sep 10 15:53:27 testVS01OU kernel: [11777.697896] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.698398] [<ffffffff812fe903>] 
> =3F copy_page_to_iter+0x83/0x320
> Sep 10 15:53:27 testVS01OU kernel: [11777.698901] [<ffffffff81166e20>] 
> =3F generic_file_read_iter+0x2c0/0x5c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.699407] [<ffffffff8159491c>] 
> =3F _raw_spin_lock_irq+0xc/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.699910] [<ffffffff81212835>] 
> =3F fsnotify+0x335/0x4b0
> Sep 10 15:53:27 testVS01OU kernel: [11777.700411] [<ffffffff811d302f>] 
> =3F __vfs_read+0xaf/0xe0
> Sep 10 15:53:27 testVS01OU kernel: [11777.700904] [<ffffffff811d43ed>] 
> =3F vfs_read+0x8d/0x150
> Sep 10 15:53:27 testVS01OU kernel: [11777.701393] [<ffffffff811d46ab>] 
> =3F SyS_pread64+0x9b/0xb0
> Sep 10 15:53:27 testVS01OU kernel: [11777.701877] [<ffffffff81594eb2>] 
> =3F system_call_fastpath+0x16/0x75
> Sep 10 15:53:27 testVS01OU kernel: [11777.702365] Code: f7 00 00 e9 25 
> ff ff ff 0f 0b 4c 89 e8 49 c1 ed 05 48 c1 e8 03 83 e0 03 4c 09 e8 80 
> b8 44 c9 82 81 00 41 0f 95 c5 e9 19 fd ff ff <0f> 0b 0f 0b 66 66 66 66 
> 90 41 55 45 31 c0 31 d2 41 b9 04 00 00
> Sep 10 15:53:27 testVS01OU kernel: [11777.703486] RIP 
> [<ffffffff8106749c>] change_page_attr_set_clr+0x44c/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.704013]  RSP <ffff88001d52e9d8>
> Sep 10 15:53:27 testVS01OU kernel: [11777.704528] ---[ end trace 
> 0371e8f24f53a075 ]---

If you need other informations/tests tell me and I'll post them.
Any help is appreciated.

Thanks for any reply and sorry for my bad english.

--------------000909010101030501040802
Content-Type: text/plain; charset=UTF-8;
 name=".config"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=".config"

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4
L3g4NiA0LjEuNiBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR182NEJJVD15CkNPTkZJ
R19YODZfNjQ9eQpDT05GSUdfWDg2PXkKQ09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpD
T05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFPXkKQ09ORklHX09VVFBVVF9GT1JNQVQ9
ImVsZjY0LXg4Ni02NCIKQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdz
L3g4Nl82NF9kZWZjb25maWciCkNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpDT05GSUdfU1RB
Q0tUUkFDRV9TVVBQT1JUPXkKQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQ09O
RklHX01NVT15CkNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQpDT05GSUdfTkVFRF9TR19E
TUFfTEVOR1RIPXkKQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0JV
Rz15CkNPTkZJR19HRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUz15CkNPTkZJR19HRU5F
UklDX0hXRUlHSFQ9eQpDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQpDT05GSUdfUldT
RU1fWENIR0FERF9BTEdPUklUSE09eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9
eQpDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJ
TkVfU0laRT15CkNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CkNPTkZJR19ORUVE
X1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0Vf
RklSU1RfQ0hVTks9eQpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CkNPTkZJ
R19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0hVR0VfUE1EX1NI
QVJFPXkKQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEI9eQpDT05GSUdfWk9ORV9E
TUEzMj15CkNPTkZJR19BVURJVF9BUkNIPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1J
WkVEX0lOTElOSU5HPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkK
Q09ORklHX0hBVkVfSU5URUxfVFhUPXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfWDg2
X0hUPXkKQ09ORklHX0FSQ0hfSFdFSUdIVF9DRkxBR1M9Ii1mY2FsbC1zYXZlZC1yZGkgLWZj
YWxsLXNhdmVkLXJzaSAtZmNhbGwtc2F2ZWQtcmR4IC1mY2FsbC1zYXZlZC1yY3ggLWZjYWxs
LXNhdmVkLXI4IC1mY2FsbC1zYXZlZC1yOSAtZmNhbGwtc2F2ZWQtcjEwIC1mY2FsbC1zYXZl
ZC1yMTEiCkNPTkZJR19BUkNIX1NVUFBPUlRTX1VQUk9CRVM9eQpDT05GSUdfRklYX0VBUkxZ
Q09OX01FTT15CkNPTkZJR19QR1RBQkxFX0xFVkVMUz00CkNPTkZJR19ERUZDT05GSUdfTElT
VD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkNPTkZJR19JUlFfV09S
Sz15CkNPTkZJR19CVUlMRFRJTUVfRVhUQUJMRV9TT1JUPXkKCiMKIyBHZW5lcmFsIHNldHVw
CiMKQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgpDT05GSUdfQ1JPU1NfQ09NUElMRT0i
IgojIENPTkZJR19DT01QSUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfTE9DQUxWRVJTSU9O
PSIiCiMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVf
S0VSTkVMX0daSVA9eQpDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQpDT05GSUdfSEFWRV9L
RVJORUxfTFpNQT15CkNPTkZJR19IQVZFX0tFUk5FTF9YWj15CkNPTkZJR19IQVZFX0tFUk5F
TF9MWk89eQpDT05GSUdfSEFWRV9LRVJORUxfTFo0PXkKIyBDT05GSUdfS0VSTkVMX0daSVAg
aXMgbm90IHNldAojIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAojIENPTkZJR19L
RVJORUxfTFpNQSBpcyBub3Qgc2V0CkNPTkZJR19LRVJORUxfWFo9eQojIENPTkZJR19LRVJO
RUxfTFpPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xaNCBpcyBub3Qgc2V0CkNPTkZJ
R19ERUZBVUxUX0hPU1ROQU1FPSIobm9uZSkiCkNPTkZJR19TV0FQPXkKQ09ORklHX1NZU1ZJ
UEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09O
RklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQpDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSD15
CkNPTkZJR19GSEFORExFPXkKQ09ORklHX1VTRUxJQj15CkNPTkZJR19BVURJVD15CkNPTkZJ
R19IQVZFX0FSQ0hfQVVESVRTWVNDQUxMPXkKQ09ORklHX0FVRElUU1lTQ0FMTD15CkNPTkZJ
R19BVURJVF9XQVRDSD15CkNPTkZJR19BVURJVF9UUkVFPXkKCiMKIyBJUlEgc3Vic3lzdGVt
CiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9
eQpDT05GSUdfR0VORVJJQ19JUlFfTEVHQUNZX0FMTE9DX0hXSVJRPXkKQ09ORklHX0dFTkVS
SUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfQ0hJUD15CkNPTkZJR19JUlFf
RE9NQUlOPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CiMgQ09ORklHX0lSUV9ET01BSU5f
REVCVUcgaXMgbm90IHNldApDT05GSUdfSVJRX0ZPUkNFRF9USFJFQURJTkc9eQpDT05GSUdf
U1BBUlNFX0lSUT15CkNPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRz15CkNPTkZJR19BUkNI
X0NMT0NLU09VUkNFX0RBVEE9eQpDT05GSUdfQ0xPQ0tTT1VSQ0VfVkFMSURBVEVfTEFTVF9D
WUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQpDT05GSUdfR0VORVJJQ19D
TE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVD15CkNP
TkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05GSUdfR0VORVJJQ19D
TU9TX1VQREFURT15CgojCiMgVGltZXJzIHN1YnN5c3RlbQojCkNPTkZJR19USUNLX09ORVNI
T1Q9eQpDT05GSUdfTk9fSFpfQ09NTU9OPXkKIyBDT05GSUdfSFpfUEVSSU9ESUMgaXMgbm90
IHNldApDT05GSUdfTk9fSFpfSURMRT15CiMgQ09ORklHX05PX0haX0ZVTEwgaXMgbm90IHNl
dAojIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkNPTkZJR19ISUdIX1JFU19USU1FUlM9eQoK
IwojIENQVS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElDS19D
UFVfQUNDT1VOVElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19C
U0RfUFJPQ0VTU19BQ0NUPXkKQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQpDT05GSUdf
VEFTS1NUQVRTPXkKQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CkNPTkZJR19UQVNLX1hBQ0NU
PXkKQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNP
TkZJR19UUkVFX1JDVT15CkNPTkZJR19TUkNVPXkKIyBDT05GSUdfVEFTS1NfUkNVIGlzIG5v
dCBzZXQKQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQojIENPTkZJR19SQ1VfVVNFUl9RUyBp
cyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFOT1VUPTY0CkNPTkZJR19SQ1VfRkFOT1VUX0xFQUY9
MTYKIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFT
VF9OT19IWj15CiMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9LVEhSRUFEX1BSSU89MAojIENPTkZJR19SQ1VfTk9DQl9DUFUgaXMgbm90IHNldAojIENP
TkZJR19SQ1VfRVhQRURJVEVfQk9PVCBpcyBub3Qgc2V0CkNPTkZJR19CVUlMRF9CSU4yQz15
CiMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcK
Q09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0xMgpDT05GSUdfSEFWRV9VTlNUQUJMRV9T
Q0hFRF9DTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HPXkKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4PXkKQ09ORklHX05VTUFfQkFMQU5DSU5HPXkKIyBD
T05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEIGlzIG5vdCBzZXQKQ09ORklH
X0NHUk9VUFM9eQojIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldApDT05GSUdfQ0dS
T1VQX0ZSRUVaRVI9eQpDT05GSUdfQ0dST1VQX0RFVklDRT15CkNPTkZJR19DUFVTRVRTPXkK
Q09ORklHX1BST0NfUElEX0NQVVNFVD15CkNPTkZJR19DR1JPVVBfQ1BVQUNDVD15CkNPTkZJ
R19QQUdFX0NPVU5URVI9eQpDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfU1dBUD15CiMg
Q09ORklHX01FTUNHX1NXQVBfRU5BQkxFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTUNHX0tN
RU0gaXMgbm90IHNldAojIENPTkZJR19DR1JPVVBfSFVHRVRMQiBpcyBub3Qgc2V0CkNPTkZJ
R19DR1JPVVBfUEVSRj15CkNPTkZJR19DR1JPVVBfU0NIRUQ9eQpDT05GSUdfRkFJUl9HUk9V
UF9TQ0hFRD15CiMgQ09ORklHX0NGU19CQU5EV0lEVEggaXMgbm90IHNldAojIENPTkZJR19S
VF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfQ0dST1VQPXkKIyBDT05GSUdf
REVCVUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkU9
eQpDT05GSUdfTkFNRVNQQUNFUz15CkNPTkZJR19VVFNfTlM9eQpDT05GSUdfSVBDX05TPXkK
Q09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05TPXkKQ09ORklHX05FVF9OUz15CkNPTkZJ
R19TQ0hFRF9BVVRPR1JPVVA9eQojIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBz
ZXQKQ09ORklHX1JFTEFZPXkKQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQ09ORklHX0lOSVRS
QU1GU19TT1VSQ0U9IiIKQ09ORklHX1JEX0daSVA9eQpDT05GSUdfUkRfQlpJUDI9eQpDT05G
SUdfUkRfTFpNQT15CkNPTkZJR19SRF9YWj15CkNPTkZJR19SRF9MWk89eQpDT05GSUdfUkRf
TFo0PXkKIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApDT05GSUdf
U1lTQ1RMPXkKQ09ORklHX0FOT05fSU5PREVTPXkKQ09ORklHX0hBVkVfVUlEMTY9eQpDT05G
SUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CUEY9eQpDT05GSUdfRVhQRVJUPXkKQ09ORklHX1VJRDE2PXkKQ09ORklH
X01VTFRJVVNFUj15CkNPTkZJR19TR0VUTUFTS19TWVNDQUxMPXkKQ09ORklHX1NZU0ZTX1NZ
U0NBTEw9eQojIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkNPTkZJR19LQUxM
U1lNUz15CiMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19QUklOVEs9
eQpDT05GSUdfQlVHPXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CQVNFX0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKIyBD
T05GSUdfQlBGX1NZU0NBTEwgaXMgbm90IHNldApDT05GSUdfU0hNRU09eQpDT05GSUdfQUlP
PXkKQ09ORklHX0FEVklTRV9TWVNDQUxMUz15CkNPTkZJR19QQ0lfUVVJUktTPXkKIyBDT05G
SUdfRU1CRURERUQgaXMgbm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CgojCiMg
S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdfUEVSRl9F
VkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKQ09O
RklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0
CkNPTkZJR19TTEFCPXkKIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiMgQ09ORklHX1NMT0Ig
aXMgbm90IHNldAojIENPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlSSU5HIGlzIG5vdCBzZXQK
Q09ORklHX1BST0ZJTElORz15CkNPTkZJR19UUkFDRVBPSU5UUz15CkNPTkZJR19PUFJPRklM
RT1tCiMgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWCBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX09QUk9GSUxFPXkKQ09ORklHX09QUk9GSUxFX05NSV9USU1FUj15CkNPTkZJR19L
UFJPQkVTPXkKQ09ORklHX0pVTVBfTEFCRUw9eQpDT05GSUdfT1BUUFJPQkVTPXkKQ09ORklH
X0tQUk9CRVNfT05fRlRSQUNFPXkKQ09ORklHX1VQUk9CRVM9eQojIENPTkZJR19IQVZFXzY0
QklUX0FMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VO
QUxJR05FRF9BQ0NFU1M9eQpDT05GSUdfQVJDSF9VU0VfQlVJTFRJTl9CU1dBUD15CkNPTkZJ
R19LUkVUUFJPQkVTPXkKQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSPXkKQ09ORklHX0hB
VkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JFUz15CkNPTkZJR19IQVZFX0tS
RVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05GSUdfSEFWRV9LUFJPQkVT
X09OX0ZUUkFDRT15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKQ09ORklHX0hBVkVf
RE1BX0FUVFJTPXkKQ09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJ
Q19TTVBfSURMRV9USFJFQUQ9eQpDT05GSUdfSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1Nf
QVBJPXkKQ09ORklHX0hBVkVfQ0xLPXkKQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CkNP
TkZJR19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5U
U19SRUdTPXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFW
RV9QRVJGX0VWRU5UU19OTUk9eQpDT05GSUdfSEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFW
RV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15
CkNPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRz15CkNPTkZJR19IQVZFX0NNUFhD
SEdfTE9DQUw9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0RPVUJMRT15CkNPTkZJR19BUkNIX1dB
TlRfQ09NUEFUX0lQQ19QQVJTRV9WRVJTSU9OPXkKQ09ORklHX0FSQ0hfV0FOVF9PTERfQ09N
UEFUX0lQQz15CkNPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVI9eQpDT05GSUdfU0VD
Q09NUF9GSUxURVI9eQpDT05GSUdfSEFWRV9DQ19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19D
Q19TVEFDS1BST1RFQ1RPUj15CiMgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX05PTkUgaXMg
bm90IHNldApDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfUkVHVUxBUj15CiMgQ09ORklHX0ND
X1NUQUNLUFJPVEVDVE9SX1NUUk9ORyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0NPTlRFWFRf
VFJBQ0tJTkc9eQpDT05GSUdfSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTj15CkNPTkZJ
R19IQVZFX0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFS
RU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVA9eQpDT05GSUdfSEFW
RV9BUkNIX1NPRlRfRElSVFk9eQpDT05GSUdfTU9EVUxFU19VU0VfRUxGX1JFTEE9eQpDT05G
SUdfSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0s9eQpDT05GSUdfQVJDSF9IQVNfRUxGX1JB
TkRPTUlaRT15CkNPTkZJR19PTERfU0lHU1VTUEVORDM9eQpDT05GSUdfQ09NUEFUX09MRF9T
SUdBQ1RJT049eQoKIwojIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwojCiMgQ09ORklH
X0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFTX0dDT1ZfUFJPRklMRV9B
TEw9eQojIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKQ09O
RklHX1NMQUJJTkZPPXkKQ09ORklHX1JUX01VVEVYRVM9eQpDT05GSUdfQkFTRV9TTUFMTD0w
CkNPTkZJR19NT0RVTEVTPXkKQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKQ09ORklHX01P
RFVMRV9VTkxPQUQ9eQpDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CkNPTkZJR19NT0RW
RVJTSU9OUz15CiMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PRFVMRV9TSUcgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQ09NUFJFU1Mg
aXMgbm90IHNldApDT05GSUdfU1RPUF9NQUNISU5FPXkKQ09ORklHX0JMT0NLPXkKQ09ORklH
X0JMS19ERVZfQlNHPXkKQ09ORklHX0JMS19ERVZfQlNHTElCPXkKQ09ORklHX0JMS19ERVZf
SU5URUdSSVRZPXkKQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiMgQ09ORklHX0JMS19D
TURMSU5FX1BBUlNFUiBpcyBub3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKQ09ORklH
X1BBUlRJVElPTl9BRFZBTkNFRD15CkNPTkZJR19BQ09STl9QQVJUSVRJT049eQojIENPTkZJ
R19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNPUk5fUEFS
VElUSU9OX0VFU09YIGlzIG5vdCBzZXQKQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQoj
IENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDT1JO
X1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CkNPTkZJR19BQ09STl9QQVJUSVRJT05f
UklTQ0lYPXkKIyBDT05GSUdfQUlYX1BBUlRJVElPTiBpcyBub3Qgc2V0CkNPTkZJR19PU0Zf
UEFSVElUSU9OPXkKQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CkNPTkZJR19BVEFSSV9QQVJU
SVRJT049eQpDT05GSUdfTUFDX1BBUlRJVElPTj15CkNPTkZJR19NU0RPU19QQVJUSVRJT049
eQpDT05GSUdfQlNEX0RJU0tMQUJFTD15CkNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQpD
T05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJF
TD15CkNPTkZJR19MRE1fUEFSVElUSU9OPXkKIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX1NHSV9QQVJUSVRJT049eQpDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CkNP
TkZJR19TVU5fUEFSVElUSU9OPXkKQ09ORklHX0tBUk1BX1BBUlRJVElPTj15CkNPTkZJR19F
RklfUEFSVElUSU9OPXkKIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NNRExJTkVfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0JMT0NLX0NPTVBB
VD15CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19JT1NDSEVEX05PT1A9eQpDT05GSUdf
SU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19JT1NDSEVEX0NGUT15CkNPTkZJR19DRlFfR1JP
VVBfSU9TQ0hFRD15CiMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9DRlE9eQojIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCkNPTkZJR19QUkVFTVBUX05PVElGSUVSUz15CkNP
TkZJR19QQURBVEE9eQpDT05GSUdfVU5JTkxJTkVfU1BJTl9VTkxPQ0s9eQpDT05GSUdfSU5M
SU5FX1NQSU5fVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQpDT05G
SUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NL
PXkKQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKQ09ORklHX0FSQ0hfU1VQUE9S
VFNfQVRPTUlDX1JNVz15CkNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKQ09ORklHX1JX
U0VNX1NQSU5fT05fT1dORVI9eQpDT05GSUdfTE9DS19TUElOX09OX09XTkVSPXkKQ09ORklH
X0FSQ0hfVVNFX1FVRVVFX1JXTE9DSz15CkNPTkZJR19RVUVVRV9SV0xPQ0s9eQpDT05GSUdf
RlJFRVpFUj15CgojCiMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiMKQ09ORklHX1pP
TkVfRE1BPXkKQ09ORklHX1NNUD15CkNPTkZJR19YODZfRkVBVFVSRV9OQU1FUz15CkNPTkZJ
R19YODZfWDJBUElDPXkKQ09ORklHX1g4Nl9NUFBBUlNFPXkKIyBDT05GSUdfWDg2X0VYVEVO
REVEX1BMQVRGT1JNIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9MUFNTPXkKIyBDT05G
SUdfWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UgaXMgbm90IHNldApDT05GSUdfSU9TRl9NQkk9
bQojIENPTkZJR19JT1NGX01CSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19YODZfU1VQUE9S
VFNfTUVNT1JZX0ZBSUxVUkU9eQpDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkK
Q09ORklHX0hZUEVSVklTT1JfR1VFU1Q9eQpDT05GSUdfUEFSQVZJUlQ9eQojIENPTkZJR19Q
QVJBVklSVF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpD
T05GSUdfWEVOPXkKQ09ORklHX1hFTl9ET00wPXkKQ09ORklHX1hFTl9QVkhWTT15CkNPTkZJ
R19YRU5fTUFYX0RPTUFJTl9NRU1PUlk9NTAwCkNPTkZJR19YRU5fU0FWRV9SRVNUT1JFPXkK
IyBDT05GSUdfWEVOX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9QVkg9eQpDT05G
SUdfS1ZNX0dVRVNUPXkKIyBDT05GSUdfS1ZNX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklHX1BBUkFWSVJU
X0NMT0NLPXkKQ09ORklHX05PX0JPT1RNRU09eQojIENPTkZJR19NSzggaXMgbm90IHNldAoj
IENPTkZJR19NUFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNPUkUyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUFUT00gaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFU9eQpDT05GSUdfWDg2
X0lOVEVSTk9ERV9DQUNIRV9TSElGVD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpD
T05GSUdfWDg2X1RTQz15CkNPTkZJR19YODZfQ01QWENIRzY0PXkKQ09ORklHX1g4Nl9DTU9W
PXkKQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKQ09ORklHX1g4Nl9ERUJVR0NU
TE1TUj15CiMgQ09ORklHX1BST0NFU1NPUl9TRUxFQ1QgaXMgbm90IHNldApDT05GSUdfQ1BV
X1NVUF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CkNPTkZJR19DUFVfU1VQX0NFTlRB
VVI9eQpDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VNVUxBVEVfUlRDPXkKQ09O
RklHX0RNST15CkNPTkZJR19HQVJUX0lPTU1VPXkKQ09ORklHX0NBTEdBUllfSU9NTVU9eQpD
T05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQpDT05GSUdfU1dJT1RM
Qj15CkNPTkZJR19JT01NVV9IRUxQRVI9eQojIENPTkZJR19NQVhTTVAgaXMgbm90IHNldApD
T05GSUdfTlJfQ1BVUz01MTIKQ09ORklHX1NDSEVEX1NNVD15CkNPTkZJR19TQ0hFRF9NQz15
CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNPTkZJR19QUkVFTVBUX1ZPTFVO
VEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05GSUdfWDg2X0xPQ0FMX0FQ
SUM9eQpDT05GSUdfWDg2X0lPX0FQSUM9eQpDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tF
Tl9CT09UX0lSUVM9eQpDT05GSUdfWDg2X01DRT15CkNPTkZJR19YODZfTUNFX0lOVEVMPXkK
Q09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKQ09ORklH
X1g4Nl9NQ0VfSU5KRUNUPW0KQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUj15CkNPTkZJR19Y
ODZfMTZCSVQ9eQpDT05GSUdfWDg2X0VTUEZJWDY0PXkKQ09ORklHX1g4Nl9WU1lTQ0FMTF9F
TVVMQVRJT049eQpDT05GSUdfSThLPW0KQ09ORklHX01JQ1JPQ09ERT15CkNPTkZJR19NSUNS
T0NPREVfSU5URUw9eQpDT05GSUdfTUlDUk9DT0RFX0FNRD15CkNPTkZJR19NSUNST0NPREVf
T0xEX0lOVEVSRkFDRT15CkNPTkZJR19NSUNST0NPREVfSU5URUxfRUFSTFk9eQpDT05GSUdf
TUlDUk9DT0RFX0FNRF9FQVJMWT15CkNPTkZJR19NSUNST0NPREVfRUFSTFk9eQpDT05GSUdf
WDg2X01TUj1tCkNPTkZJR19YODZfQ1BVSUQ9bQpDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82
NEJJVD15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpDT05GSUdfWDg2X0RJUkVD
VF9HQlBBR0VTPXkKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2
XzY0X0FDUElfTlVNQT15CkNPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKQ09ORklH
X05VTUFfRU1VPXkKQ09ORklHX05PREVTX1NISUZUPTYKQ09ORklHX0FSQ0hfU1BBUlNFTUVN
X0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQ09ORklHX0FSQ0hf
U0VMRUNUX01FTU9SWV9NT0RFTD15CiMgQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFIGlzIG5v
dCBzZXQKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9J
TlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKQ09ORklHX1NFTEVDVF9NRU1PUllfTU9E
RUw9eQpDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CkNPTkZJR19TUEFSU0VNRU09eQpDT05G
SUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CkNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkK
Q09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VO
QUJMRT15CkNPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUj15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19IQVZFX01FTUJMT0NLPXkKQ09ORklHX0hB
VkVfTUVNQkxPQ0tfTk9ERV9NQVA9eQpDT05GSUdfQVJDSF9ESVNDQVJEX01FTUJMT0NLPXkK
Q09ORklHX01FTU9SWV9JU09MQVRJT049eQojIENPTkZJR19NT1ZBQkxFX05PREUgaXMgbm90
IHNldApDT05GSUdfSEFWRV9CT09UTUVNX0lORk9fTk9ERT15CkNPTkZJR19NRU1PUllfSE9U
UExVRz15CkNPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQpDT05GSUdfTUVNT1JZX0hP
VFJFTU9WRT15CkNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQpDT05GSUdfU1BMSVRfUFRM
T0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19NRU1PUllfQkFMTE9PTj15CkNPTkZJR19CQUxMT09OX0NPTVBBQ1RJT049eQpDT05GSUdf
Q09NUEFDVElPTj15CkNPTkZJR19NSUdSQVRJT049eQpDT05GSUdfQVJDSF9FTkFCTEVfSFVH
RVBBR0VfTUlHUkFUSU9OPXkKQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQ09ORklHX1pP
TkVfRE1BX0ZMQUc9MQpDT05GSUdfQk9VTkNFPXkKQ09ORklHX1ZJUlRfVE9fQlVTPXkKQ09O
RklHX01NVV9OT1RJRklFUj15CkNPTkZJR19LU009eQpDT05GSUdfREVGQVVMVF9NTUFQX01J
Tl9BRERSPTY1NTM2CkNPTkZJR19BUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFPXkKQ09O
RklHX01FTU9SWV9GQUlMVVJFPXkKQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tCkNPTkZJR19U
UkFOU1BBUkVOVF9IVUdFUEFHRT15CiMgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FM
V0FZUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFPXkK
IyBDT05GSUdfQ0xFQU5DQUNIRSBpcyBub3Qgc2V0CkNPTkZJR19GUk9OVFNXQVA9eQojIENP
TkZJR19DTUEgaXMgbm90IHNldApDT05GSUdfTUVNX1NPRlRfRElSVFk9eQpDT05GSUdfWlNX
QVA9eQpDT05GSUdfWlBPT0w9eQpDT05GSUdfWkJVRD1tCkNPTkZJR19aU01BTExPQz1tCiMg
Q09ORklHX1BHVEFCTEVfTUFQUElORyBpcyBub3Qgc2V0CiMgQ09ORklHX1pTTUFMTE9DX1NU
QVQgaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKQ09ORklHX1g4
Nl9QTUVNX0xFR0FDWT15CiMgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04gaXMg
bm90IHNldApDT05GSUdfWDg2X1JFU0VSVkVfTE9XPTY0CkNPTkZJR19NVFJSPXkKQ09ORklH
X01UUlJfU0FOSVRJWkVSPXkKQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxU
PTAKQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUPTEKQ09ORklH
X1g4Nl9QQVQ9eQpDT05GSUdfQVJDSF9VU0VTX1BHX1VOQ0FDSEVEPXkKQ09ORklHX0FSQ0hf
UkFORE9NPXkKQ09ORklHX1g4Nl9TTUFQPXkKIyBDT05GSUdfWDg2X0lOVEVMX01QWCBpcyBu
b3Qgc2V0CkNPTkZJR19FRkk9eQpDT05GSUdfRUZJX1NUVUI9eQpDT05GSUdfRUZJX01JWEVE
PXkKQ09ORklHX1NFQ0NPTVA9eQojIENPTkZJR19IWl8xMDAgaXMgbm90IHNldApDT05GSUdf
SFpfMjUwPXkKIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSFpfMTAwMCBp
cyBub3Qgc2V0CkNPTkZJR19IWj0yNTAKQ09ORklHX1NDSEVEX0hSVElDSz15CkNPTkZJR19L
RVhFQz15CkNPTkZJR19DUkFTSF9EVU1QPXkKIyBDT05GSUdfS0VYRUNfSlVNUCBpcyBub3Qg
c2V0CkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKQ09ORklHX1JFTE9DQVRBQkxF
PXkKIyBDT05GSUdfUkFORE9NSVpFX0JBU0UgaXMgbm90IHNldApDT05GSUdfUEhZU0lDQUxf
QUxJR049MHgyMDAwMDAKQ09ORklHX0hPVFBMVUdfQ1BVPXkKIyBDT05GSUdfQk9PVFBBUkFN
X0hPVFBMVUdfQ1BVMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0hPVFBMVUdfQ1BVMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ01E
TElORV9CT09MIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTElWRVBBVENIPXkKQ09ORklHX0FS
Q0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9I
T1RSRU1PVkU9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9eQoKIwojIFBvd2Vy
IG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwojCkNPTkZJR19BUkNIX0hJQkVSTkFUSU9O
X0hFQURFUj15CkNPTkZJR19TVVNQRU5EPXkKQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CkNP
TkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTPXkKQ09ORklHX0hJQkVSTkFUSU9OPXkKQ09ORklH
X1BNX1NURF9QQVJUSVRJT049IiIKQ09ORklHX1BNX1NMRUVQPXkKQ09ORklHX1BNX1NMRUVQ
X1NNUD15CiMgQ09ORklHX1BNX0FVVE9TTEVFUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNX1dB
S0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9ERUJVRz15CkNPTkZJ
R19QTV9BRFZBTkNFRF9ERUJVRz15CiMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qg
c2V0CkNPTkZJR19QTV9TTEVFUF9ERUJVRz15CiMgQ09ORklHX0RQTV9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1BNX1RSQUNFX1JUQyBpcyBub3Qgc2V0CkNPTkZJR19QTV9DTEs9
eQojIENPTkZJR19XUV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CkNPTkZJ
R19BQ1BJPXkKQ09ORklHX0FDUElfTEVHQUNZX1RBQkxFU19MT09LVVA9eQpDT05GSUdfQVJD
SF9NSUdIVF9IQVZFX0FDUElfUERDPXkKQ09ORklHX0FDUElfU1lTVEVNX1BPV0VSX1NUQVRF
U19TVVBQT1JUPXkKQ09ORklHX0FDUElfU0xFRVA9eQojIENPTkZJR19BQ1BJX1BST0NGU19Q
T1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRUNfREVCVUdGUyBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX0FDPW0KQ09ORklHX0FDUElfQkFUVEVSWT1tCkNPTkZJR19BQ1BJX0JVVFRP
Tj1tCkNPTkZJR19BQ1BJX1ZJREVPPW0KQ09ORklHX0FDUElfRkFOPW0KQ09ORklHX0FDUElf
RE9DSz15CkNPTkZJR19BQ1BJX1BST0NFU1NPUj1tCkNPTkZJR19BQ1BJX0lQTUk9bQpDT05G
SUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9S
PW0KQ09ORklHX0FDUElfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX05VTUE9eQojIENPTkZJR19B
Q1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfSU5JVFJEX1RBQkxFX09W
RVJSSURFPXkKIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1BJX1BD
SV9TTE9UPXkKQ09ORklHX1g4Nl9QTV9USU1FUj15CkNPTkZJR19BQ1BJX0NPTlRBSU5FUj15
CkNPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXkKQ09ORklHX0FDUElfSE9UUExVR19JT0FQ
SUM9eQpDT05GSUdfQUNQSV9TQlM9bQpDT05GSUdfQUNQSV9IRUQ9eQojIENPTkZJR19BQ1BJ
X0NVU1RPTV9NRVRIT0QgaXMgbm90IHNldApDT05GSUdfQUNQSV9CR1JUPXkKIyBDT05GSUdf
QUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldApDT05GSUdfSEFWRV9BQ1BJ
X0FQRUk9eQpDT05GSUdfSEFWRV9BQ1BJX0FQRUlfTk1JPXkKQ09ORklHX0FDUElfQVBFST15
CkNPTkZJR19BQ1BJX0FQRUlfR0hFUz15CkNPTkZJR19BQ1BJX0FQRUlfUENJRUFFUj15CkNP
TkZJR19BQ1BJX0FQRUlfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19BQ1BJX0FQRUlfRUlO
SiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfQVBFSV9FUlNUX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX0FDUElfRVhUTE9HPXkKIyBDT05GSUdfUE1JQ19PUFJFR0lPTiBpcyBub3Qgc2V0
CkNPTkZJR19TRkk9eQoKIwojIENQVSBGcmVxdWVuY3kgc2NhbGluZwojCkNPTkZJR19DUFVf
RlJFUT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfQ09NTU9OPXkKQ09ORklHX0NQVV9GUkVRX1NU
QVQ9bQojIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAojIENPTkZJ
R19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NQ
VV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJF
UV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09W
X0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFO
Q0U9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCkNPTkZJR19DUFVfRlJFUV9H
T1ZfVVNFUlNQQUNFPW0KQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CkNPTkZJR19D
UFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KCiMKIyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcg
ZHJpdmVycwojCkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKQ09ORklHX1g4Nl9QQ0NfQ1BV
RlJFUT1tCkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPW0KQ09ORklHX1g4Nl9BQ1BJX0NQVUZS
RVFfQ1BCPXkKQ09ORklHX1g4Nl9QT1dFUk5PV19LOD1tCkNPTkZJR19YODZfQU1EX0ZSRVFf
U0VOU0lUSVZJVFk9bQpDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTz1tCkNPTkZJR19Y
ODZfUDRfQ0xPQ0tNT0Q9bQoKIwojIHNoYXJlZCBvcHRpb25zCiMKQ09ORklHX1g4Nl9TUEVF
RFNURVBfTElCPW0KCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CkNPTkZJR19D
UFVfSURMRV9HT1ZfTEFEREVSPXkKQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIyBDT05G
SUdfQVJDSF9ORUVEU19DUFVfSURMRV9DT1VQTEVEIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVM
X0lETEU9eQoKIwojIE1lbW9yeSBwb3dlciBzYXZpbmdzCiMKQ09ORklHX0k3MzAwX0lETEVf
SU9BVF9DSEFOTkVMPXkKQ09ORklHX0k3MzAwX0lETEU9bQoKIwojIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKIwpDT05GSUdfUENJPXkKQ09ORklHX1BDSV9ESVJFQ1Q9eQpDT05GSUdfUENJ
X01NQ09ORklHPXkKQ09ORklHX1BDSV9YRU49eQpDT05GSUdfUENJX0RPTUFJTlM9eQojIENP
TkZJR19QQ0lfQ05CMjBMRV9RVUlSSyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lFUE9SVEJVUz15
CkNPTkZJR19IT1RQTFVHX1BDSV9QQ0lFPXkKQ09ORklHX1BDSUVBRVI9eQojIENPTkZJR19Q
Q0lFX0VDUkMgaXMgbm90IHNldApDT05GSUdfUENJRUFFUl9JTkpFQ1Q9bQpDT05GSUdfUENJ
RUFTUE09eQojIENPTkZJR19QQ0lFQVNQTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lF
QVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05GSUdfUENJRV9Q
TUU9eQpDT05GSUdfUENJX0JVU19BRERSX1RfNjRCSVQ9eQpDT05GSUdfUENJX01TST15CiMg
Q09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfUkVBTExPQ19FTkFCTEVf
QVVUTz15CkNPTkZJR19QQ0lfU1RVQj1tCkNPTkZJR19YRU5fUENJREVWX0ZST05URU5EPW0K
Q09ORklHX0hUX0lSUT15CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9JT1Y9eQpDT05G
SUdfUENJX1BSST15CkNPTkZJR19QQ0lfUEFTSUQ9eQpDT05GSUdfUENJX0xBQkVMPXkKCiMK
IyBQQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfSVNBX0RNQV9BUEk9eQpD
T05GSUdfQU1EX05CPXkKQ09ORklHX1BDQ0FSRD1tCkNPTkZJR19QQ01DSUE9bQpDT05GSUdf
UENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRCVVM9eQoKIwojIFBDLWNhcmQgYnJpZGdl
cwojCkNPTkZJR19ZRU5UQT1tCkNPTkZJR19ZRU5UQV9PMj15CkNPTkZJR19ZRU5UQV9SSUNP
SD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9FTkVfVFVORT15CkNPTkZJR19Z
RU5UQV9UT1NISUJBPXkKQ09ORklHX1BENjcyOT1tCkNPTkZJR19JODIwOTI9bQpDT05GSUdf
UENDQVJEX05PTlNUQVRJQz15CkNPTkZJR19IT1RQTFVHX1BDST15CkNPTkZJR19IT1RQTFVH
X1BDSV9BQ1BJPXkKQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNPW0KQ09ORklHX0hPVFBM
VUdfUENJX0NQQ0k9eQpDT05GSUdfSE9UUExVR19QQ0lfQ1BDSV9aVDU1NTA9bQpDT05GSUdf
SE9UUExVR19QQ0lfQ1BDSV9HRU5FUklDPW0KQ09ORklHX0hPVFBMVUdfUENJX1NIUEM9bQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9TWVNGQj15CgojCiMgRXhl
Y3V0YWJsZSBmaWxlIGZvcm1hdHMgLyBFbXVsYXRpb25zCiMKQ09ORklHX0JJTkZNVF9FTEY9
eQpDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQpDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRf
RUxGX0hFQURFUlM9eQpDT05GSUdfQklORk1UX1NDUklQVD15CiMgQ09ORklHX0hBVkVfQU9V
VCBpcyBub3Qgc2V0CkNPTkZJR19CSU5GTVRfTUlTQz1tCkNPTkZJR19DT1JFRFVNUD15CkNP
TkZJR19JQTMyX0VNVUxBVElPTj15CkNPTkZJR19JQTMyX0FPVVQ9eQpDT05GSUdfWDg2X1gz
Mj15CkNPTkZJR19DT01QQVQ9eQpDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkK
Q09ORklHX1NZU1ZJUENfQ09NUEFUPXkKQ09ORklHX0tFWVNfQ09NUEFUPXkKQ09ORklHX1g4
Nl9ERVZfRE1BX09QUz15CkNPTkZJR19QTUNfQVRPTT15CkNPTkZJR19ORVQ9eQpDT05GSUdf
Q09NUEFUX05FVExJTktfTUVTU0FHRVM9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCkNP
TkZJR19QQUNLRVQ9eQpDT05GSUdfUEFDS0VUX0RJQUc9bQpDT05GSUdfVU5JWD15CkNPTkZJ
R19VTklYX0RJQUc9bQpDT05GSUdfWEZSTT15CkNPTkZJR19YRlJNX0FMR089bQpDT05GSUdf
WEZSTV9VU0VSPW0KQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CkNPTkZJR19YRlJNX01JR1JB
VEU9eQojIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldApDT05GSUdfWEZSTV9J
UENPTVA9bQpDT05GSUdfTkVUX0tFWT1tCkNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQpDT05G
SUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5DRURfUk9V
VEVSPXkKQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTPXkKQ09ORklHX0lQX01VTFRJUExFX1RB
QkxFUz15CkNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQpDT05GSUdfSVBfUk9VVEVfVkVS
Qk9TRT15CkNPTkZJR19JUF9ST1VURV9DTEFTU0lEPXkKIyBDT05GSUdfSVBfUE5QIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9JUElQPW0KQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCkNPTkZJ
R19ORVRfSVBfVFVOTkVMPW0KQ09ORklHX05FVF9JUEdSRT1tCkNPTkZJR19ORVRfSVBHUkVf
QlJPQURDQVNUPXkKQ09ORklHX0lQX01ST1VURT15CkNPTkZJR19JUF9NUk9VVEVfTVVMVElQ
TEVfVEFCTEVTPXkKQ09ORklHX0lQX1BJTVNNX1YxPXkKQ09ORklHX0lQX1BJTVNNX1YyPXkK
Q09ORklHX1NZTl9DT09LSUVTPXkKQ09ORklHX05FVF9JUFZUST1tCkNPTkZJR19ORVRfVURQ
X1RVTk5FTD1tCkNPTkZJR19ORVRfRk9VPW0KQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15
CkNPTkZJR19HRU5FVkU9bQpDT05GSUdfSU5FVF9BSD1tCkNPTkZJR19JTkVUX0VTUD1tCkNP
TkZJR19JTkVUX0lQQ09NUD1tCkNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KQ09ORklHX0lO
RVRfVFVOTkVMPW0KQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCkNPTkZJR19J
TkVUX1hGUk1fTU9ERV9UVU5ORUw9bQpDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCkNP
TkZJR19JTkVUX0xSTz1tCkNPTkZJR19JTkVUX0RJQUc9bQpDT05GSUdfSU5FVF9UQ1BfRElB
Rz1tCkNPTkZJR19JTkVUX1VEUF9ESUFHPW0KQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkK
Q09ORklHX1RDUF9DT05HX0JJQz1tCkNPTkZJR19UQ1BfQ09OR19DVUJJQz15CkNPTkZJR19U
Q1BfQ09OR19XRVNUV09PRD1tCkNPTkZJR19UQ1BfQ09OR19IVENQPW0KQ09ORklHX1RDUF9D
T05HX0hTVENQPW0KQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KQ09ORklHX1RDUF9DT05HX1ZF
R0FTPW0KQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KQ09ORklHX1RDUF9DT05HX0xQPW0K
Q09ORklHX1RDUF9DT05HX1ZFTk89bQpDT05GSUdfVENQX0NPTkdfWUVBSD1tCkNPTkZJR19U
Q1BfQ09OR19JTExJTk9JUz1tCkNPTkZJR19UQ1BfQ09OR19EQ1RDUD1tCkNPTkZJR19ERUZB
VUxUX0NVQklDPXkKIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKQ09ORklHX0RF
RkFVTFRfVENQX0NPTkc9ImN1YmljIgpDT05GSUdfVENQX01ENVNJRz15CkNPTkZJR19JUFY2
PXkKQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkK
Q09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQpDT05GSUdfSU5FVDZfQUg9bQpDT05GSUdf
SU5FVDZfRVNQPW0KQ09ORklHX0lORVQ2X0lQQ09NUD1tCkNPTkZJR19JUFY2X01JUDY9eQpD
T05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQpDT05GSUdfSU5FVDZfVFVOTkVMPW0KQ09ORklH
X0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQpDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RV
Tk5FTD1tCkNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCkNPTkZJR19JTkVUNl9YRlJN
X01PREVfUk9VVEVPUFRJTUlaQVRJT049bQpDT05GSUdfSVBWNl9WVEk9bQpDT05GSUdfSVBW
Nl9TSVQ9bQpDT05GSUdfSVBWNl9TSVRfNlJEPXkKQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZ
UEU9eQpDT05GSUdfSVBWNl9UVU5ORUw9bQpDT05GSUdfSVBWNl9HUkU9bQpDT05GSUdfSVBW
Nl9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9TVUJUUkVFUz15CkNPTkZJR19JUFY2
X01ST1VURT15CkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdf
SVBWNl9QSU1TTV9WMj15CiMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKQ09ORklHX05F
VFdPUktfU0VDTUFSSz15CkNPTkZJR19ORVRfUFRQX0NMQVNTSUZZPXkKIyBDT05GSUdfTkVU
V09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUj15CiMg
Q09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfQURW
QU5DRUQ9eQpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tCgojCiMgQ29yZSBOZXRmaWx0ZXIg
Q29uZmlndXJhdGlvbgojCkNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCkNPTkZJR19ORVRG
SUxURVJfTkVUTElOS19BQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0K
Q09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCkNPTkZJR19ORl9DT05OVFJBQ0s9bQpD
T05GSUdfTkZfTE9HX0NPTU1PTj1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CkNPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVM9eQpD
T05GSUdfTkZfQ09OTlRSQUNLX1BST0NGUz15CkNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRT
PXkKQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUPXkKQ09ORklHX05GX0NPTk5UUkFDS19U
SU1FU1RBTVA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUz15CkNPTkZJR19ORl9DVF9Q
Uk9UT19EQ0NQPW0KQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCkNPTkZJR19ORl9DVF9QUk9U
T19TQ1RQPW0KQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0FNQU5EQT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KQ09ORklHX05GX0NPTk5U
UkFDS19IMzIzPW0KQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0JST0FEQ0FTVD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU05NUD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0FORT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KQ09ORklH
X05GX0NPTk5UUkFDS19URlRQPW0KQ09ORklHX05GX0NUX05FVExJTks9bQpDT05GSUdfTkZf
Q1RfTkVUTElOS19USU1FT1VUPW0KQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSPW0KQ09O
RklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFX0NUPXkKQ09ORklHX05GX05BVD1tCkNPTkZJ
R19ORl9OQVRfTkVFREVEPXkKQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KQ09ORklHX05G
X05BVF9QUk9UT19VRFBMSVRFPW0KQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KQ09ORklH
X05GX05BVF9BTUFOREE9bQpDT05GSUdfTkZfTkFUX0ZUUD1tCkNPTkZJR19ORl9OQVRfSVJD
PW0KQ09ORklHX05GX05BVF9TSVA9bQpDT05GSUdfTkZfTkFUX1RGVFA9bQpDT05GSUdfTkZf
TkFUX1JFRElSRUNUPW0KQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWT1tCkNPTkZJR19ORl9U
QUJMRVM9bQpDT05GSUdfTkZfVEFCTEVTX0lORVQ9bQpDT05GSUdfTkZUX0VYVEhEUj1tCkNP
TkZJR19ORlRfTUVUQT1tCkNPTkZJR19ORlRfQ1Q9bQpDT05GSUdfTkZUX1JCVFJFRT1tCkNP
TkZJR19ORlRfSEFTSD1tCkNPTkZJR19ORlRfQ09VTlRFUj1tCkNPTkZJR19ORlRfTE9HPW0K
Q09ORklHX05GVF9MSU1JVD1tCkNPTkZJR19ORlRfTUFTUT1tCkNPTkZJR19ORlRfUkVESVI9
bQpDT05GSUdfTkZUX05BVD1tCkNPTkZJR19ORlRfUVVFVUU9bQpDT05GSUdfTkZUX1JFSkVD
VD1tCkNPTkZJR19ORlRfUkVKRUNUX0lORVQ9bQpDT05GSUdfTkZUX0NPTVBBVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRBQkxFUz1tCgojCiMgWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzCiMK
Q09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFS
Sz1tCkNPTkZJR19ORVRGSUxURVJfWFRfU0VUPW0KCiMKIyBYdGFibGVzIHRhcmdldHMKIwpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVD1tCkNPTkZJR19ORVRGSUxURVJfWFRf
VEFSR0VUX0NIRUNLU1VNPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCkNPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRf
Q1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfSEw9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tCkNP
TkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX0xFRD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX05BVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX05GTE9HPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1t
CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RB
UkdFVF9SRURJUkVDVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRT1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RSQUNFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RDUE9QVFNUUklQPW0KCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklM
VEVSX1hUX01BVENIX0FERFJUWVBFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfQ0xVU1RFUj1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9DT05OTEFCRUw9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5M
SU1JVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQpDT05GSUdfTkVU
RklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
Q1BVPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9ERVZHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOPW0KQ09ORklHX05FVEZJTFRFUl9YVF9N
QVRDSF9FU1A9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9ITD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZT
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQPW0KQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9MRU5HVEg9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQ09O
RklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCkNPTkZJR19O
RVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9P
U0Y9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9QT0xJQ1k9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQpDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX1FVT1RBPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkNPTkZJR19ORVRGSUxURVJfWFRf
TUFUQ0hfUkVDRU5UPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X1NUQVRFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpDT05GSUdf
TkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
VENQTVNTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9VMzI9bQpDT05GSUdfSVBfU0VUPW0KQ09ORklHX0lQX1NFVF9NQVg9
MjU2CkNPTkZJR19JUF9TRVRfQklUTUFQX0lQPW0KQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBN
QUM9bQpDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQ
PW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCkNPTkZJR19JUF9TRVRfSEFTSF9JUFBP
UlQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQpDT05GSUdfSVBfU0VUX0hBU0hf
SVBQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCkNPTkZJR19JUF9TRVRfSEFT
SF9ORVRQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCkNPTkZJR19JUF9TRVRf
SEFTSF9ORVRORVQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVD1tCkNPTkZJR19JUF9T
RVRfSEFTSF9ORVRJRkFDRT1tCkNPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQpDT05GSUdfSVBf
VlM9bQpDT05GSUdfSVBfVlNfSVBWNj15CiMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCgojCiMgSVBWUyB0cmFuc3BvcnQgcHJvdG9j
b2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAojCkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQpD
T05GSUdfSVBfVlNfUFJPVE9fVURQPXkKQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CkNP
TkZJR19JUF9WU19QUk9UT19FU1A9eQpDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQpDT05GSUdf
SVBfVlNfUFJPVE9fU0NUUD15CgojCiMgSVBWUyBzY2hlZHVsZXIKIwpDT05GSUdfSVBfVlNf
UlI9bQpDT05GSUdfSVBfVlNfV1JSPW0KQ09ORklHX0lQX1ZTX0xDPW0KQ09ORklHX0lQX1ZT
X1dMQz1tCkNPTkZJR19JUF9WU19GTz1tCkNPTkZJR19JUF9WU19MQkxDPW0KQ09ORklHX0lQ
X1ZTX0xCTENSPW0KQ09ORklHX0lQX1ZTX0RIPW0KQ09ORklHX0lQX1ZTX1NIPW0KQ09ORklH
X0lQX1ZTX1NFRD1tCkNPTkZJR19JUF9WU19OUT1tCgojCiMgSVBWUyBTSCBzY2hlZHVsZXIK
IwpDT05GSUdfSVBfVlNfU0hfVEFCX0JJVFM9OAoKIwojIElQVlMgYXBwbGljYXRpb24gaGVs
cGVyCiMKQ09ORklHX0lQX1ZTX0ZUUD1tCkNPTkZJR19JUF9WU19ORkNUPXkKQ09ORklHX0lQ
X1ZTX1BFX1NJUD1tCgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklH
X05GX0RFRlJBR19JUFY0PW0KQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KQ09ORklHX05G
X0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CkNPTkZJR19ORl9UQUJMRVNfSVBWND1tCkNPTkZJ
R19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCkNPTkZJR19ORlRfUkVKRUNUX0lQVjQ9bQpDT05G
SUdfTkZfVEFCTEVTX0FSUD1tCkNPTkZJR19ORl9MT0dfQVJQPW0KQ09ORklHX05GX0xPR19J
UFY0PW0KQ09ORklHX05GX1JFSkVDVF9JUFY0PW0KQ09ORklHX05GX05BVF9JUFY0PW0KQ09O
RklHX05GVF9DSEFJTl9OQVRfSVBWND1tCkNPTkZJR19ORl9OQVRfTUFTUVVFUkFERV9JUFY0
PW0KQ09ORklHX05GVF9NQVNRX0lQVjQ9bQojIENPTkZJR19ORlRfUkVESVJfSVBWNCBpcyBu
b3Qgc2V0CkNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCkNPTkZJR19ORl9OQVRfUFJPVE9f
R1JFPW0KQ09ORklHX05GX05BVF9QUFRQPW0KQ09ORklHX05GX05BVF9IMzIzPW0KQ09ORklH
X0lQX05GX0lQVEFCTEVTPW0KQ09ORklHX0lQX05GX01BVENIX0FIPW0KQ09ORklHX0lQX05G
X01BVENIX0VDTj1tCkNPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUj1tCkNPTkZJR19JUF9O
Rl9NQVRDSF9UVEw9bQpDT05GSUdfSVBfTkZfRklMVEVSPW0KQ09ORklHX0lQX05GX1RBUkdF
VF9SRUpFQ1Q9bQpDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KQ09ORklHX0lQX05G
X05BVD1tCkNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19JUF9ORl9U
QVJHRVRfTkVUTUFQPW0KQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkNPTkZJR19J
UF9ORl9NQU5HTEU9bQpDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCkNPTkZJR19J
UF9ORl9UQVJHRVRfRUNOPW0KQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQpDT05GSUdfSVBf
TkZfUkFXPW0KQ09ORklHX0lQX05GX1NFQ1VSSVRZPW0KQ09ORklHX0lQX05GX0FSUFRBQkxF
Uz1tCkNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQpDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1t
CgojCiMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KIwpDT05GSUdfTkZfREVGUkFH
X0lQVjY9bQpDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQpDT05GSUdfTkZfVEFCTEVTX0lQ
VjY9bQpDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQpDT05GSUdfTkZUX1JFSkVDVF9J
UFY2PW0KQ09ORklHX05GX1JFSkVDVF9JUFY2PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09O
RklHX05GX05BVF9JUFY2PW0KQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCkNPTkZJR19O
Rl9OQVRfTUFTUVVFUkFERV9JUFY2PW0KQ09ORklHX05GVF9NQVNRX0lQVjY9bQojIENPTkZJ
R19ORlRfUkVESVJfSVBWNiBpcyBub3Qgc2V0CkNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpD
T05GSUdfSVA2X05GX01BVENIX0FIPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfSEw9bQpDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9
bQpDT05GSUdfSVA2X05GX01BVENIX01IPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRF
Uj1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1t
CkNPTkZJR19JUDZfTkZfRklMVEVSPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0K
Q09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQpDT05GSUdfSVA2X05GX01BTkdMRT1t
CkNPTkZJR19JUDZfTkZfUkFXPW0KQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCkNPTkZJR19J
UDZfTkZfTkFUPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19J
UDZfTkZfVEFSR0VUX05QVD1tCgojCiMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlv
bgojCkNPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCkNPTkZJR19ORl9UQUJMRVNfQlJJ
REdFPW0KQ09ORklHX05GVF9CUklER0VfTUVUQT1tCkNPTkZJR19ORlRfQlJJREdFX1JFSkVD
VD1tCkNPTkZJR19ORl9MT0dfQlJJREdFPW0KQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1t
CkNPTkZJR19CUklER0VfRUJUX0JST1VURT1tCkNPTkZJR19CUklER0VfRUJUX1RfRklMVEVS
PW0KQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQpDT05GSUdfQlJJREdFX0VCVF84MDJfMz1t
CkNPTkZJR19CUklER0VfRUJUX0FNT05HPW0KQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KQ09O
RklHX0JSSURHRV9FQlRfSVA9bQpDT05GSUdfQlJJREdFX0VCVF9JUDY9bQpDT05GSUdfQlJJ
REdFX0VCVF9MSU1JVD1tCkNPTkZJR19CUklER0VfRUJUX01BUks9bQpDT05GSUdfQlJJREdF
X0VCVF9QS1RUWVBFPW0KQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KQ09ORklHX0JSSURHRV9F
QlRfVkxBTj1tCkNPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KQ09ORklHX0JSSURHRV9F
QlRfRE5BVD1tCkNPTkZJR19CUklER0VfRUJUX01BUktfVD1tCkNPTkZJR19CUklER0VfRUJU
X1JFRElSRUNUPW0KQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCkNPTkZJR19CUklER0VfRUJU
X0xPRz1tCkNPTkZJR19CUklER0VfRUJUX05GTE9HPW0KQ09ORklHX0lQX0RDQ1A9bQpDT05G
SUdfSU5FVF9EQ0NQX0RJQUc9bQoKIwojIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbgojCiMg
Q09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldApDT05GSUdfSVBfRENDUF9D
Q0lEMz15CiMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldApDT05GSUdf
SVBfRENDUF9URlJDX0xJQj15CgojCiMgRENDUCBLZXJuZWwgSGFja2luZwojCiMgQ09ORklH
X0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldApDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCkNPTkZJ
R19JUF9TQ1RQPW0KQ09ORklHX05FVF9TQ1RQUFJPQkU9bQojIENPTkZJR19TQ1RQX0RCR19P
QkpDTlQgaXMgbm90IHNldApDT05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX01ENT15
CiMgQ09ORklHX1NDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEExIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkUgaXMgbm90IHNldApDT05GSUdf
U0NUUF9DT09LSUVfSE1BQ19NRDU9eQpDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkK
Q09ORklHX1JEUz1tCkNPTkZJR19SRFNfUkRNQT1tCkNPTkZJR19SRFNfVENQPW0KIyBDT05G
SUdfUkRTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1RJUEM9bQpDT05GSUdfVElQQ19NRURJ
QV9JQj15CkNPTkZJR19USVBDX01FRElBX1VEUD15CkNPTkZJR19BVE09bQpDT05GSUdfQVRN
X0NMSVA9bQojIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKQ09ORklHX0FU
TV9MQU5FPW0KQ09ORklHX0FUTV9NUE9BPW0KQ09ORklHX0FUTV9CUjI2ODQ9bQojIENPTkZJ
R19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKQ09ORklHX0wyVFA9bQpDT05GSUdf
TDJUUF9ERUJVR0ZTPW0KQ09ORklHX0wyVFBfVjM9eQpDT05GSUdfTDJUUF9JUD1tCkNPTkZJ
R19MMlRQX0VUSD1tCkNPTkZJR19TVFA9bQpDT05GSUdfR0FSUD1tCkNPTkZJR19NUlA9bQpD
T05GSUdfQlJJREdFPW0KQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKQ09ORklHX0JS
SURHRV9WTEFOX0ZJTFRFUklORz15CkNPTkZJR19IQVZFX05FVF9EU0E9eQpDT05GSUdfVkxB
Tl84MDIxUT1tCkNPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQpDT05GSUdfVkxBTl84MDIxUV9N
VlJQPXkKQ09ORklHX0RFQ05FVD1tCiMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNl
dApDT05GSUdfTExDPW0KQ09ORklHX0xMQzI9bQpDT05GSUdfSVBYPW0KIyBDT05GSUdfSVBY
X0lOVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19BVEFMSz1tCkNPTkZJR19ERVZfQVBQTEVUQUxL
PW0KQ09ORklHX0lQRERQPW0KQ09ORklHX0lQRERQX0VOQ0FQPXkKIyBDT05GSUdfWDI1IGlz
IG5vdCBzZXQKQ09ORklHX0xBUEI9bQpDT05GSUdfUEhPTkVUPW0KQ09ORklHXzZMT1dQQU49
bQpDT05GSUdfNkxPV1BBTl9OSEM9bQpDT05GSUdfNkxPV1BBTl9OSENfREVTVD1tCkNPTkZJ
R182TE9XUEFOX05IQ19GUkFHTUVOVD1tCkNPTkZJR182TE9XUEFOX05IQ19IT1A9bQpDT05G
SUdfNkxPV1BBTl9OSENfSVBWNj1tCkNPTkZJR182TE9XUEFOX05IQ19NT0JJTElUWT1tCkNP
TkZJR182TE9XUEFOX05IQ19ST1VUSU5HPW0KQ09ORklHXzZMT1dQQU5fTkhDX1VEUD1tCkNP
TkZJR19JRUVFODAyMTU0PW0KQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUPW0KQ09ORklHX0lF
RUU4MDIxNTRfNkxPV1BBTj1tCiMgQ09ORklHX01BQzgwMjE1NCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfU0NIRUQ9eQoKIwojIFF1ZXVlaW5nL1NjaGVkdWxpbmcKIwpDT05GSUdfTkVUX1ND
SF9DQlE9bQpDT05GSUdfTkVUX1NDSF9IVEI9bQpDT05GSUdfTkVUX1NDSF9IRlNDPW0KQ09O
RklHX05FVF9TQ0hfQVRNPW0KQ09ORklHX05FVF9TQ0hfUFJJTz1tCkNPTkZJR19ORVRfU0NI
X01VTFRJUT1tCkNPTkZJR19ORVRfU0NIX1JFRD1tCkNPTkZJR19ORVRfU0NIX1NGQj1tCkNP
TkZJR19ORVRfU0NIX1NGUT1tCkNPTkZJR19ORVRfU0NIX1RFUUw9bQpDT05GSUdfTkVUX1ND
SF9UQkY9bQpDT05GSUdfTkVUX1NDSF9HUkVEPW0KQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0K
Q09ORklHX05FVF9TQ0hfTkVURU09bQpDT05GSUdfTkVUX1NDSF9EUlI9bQpDT05GSUdfTkVU
X1NDSF9NUVBSSU89bQpDT05GSUdfTkVUX1NDSF9DSE9LRT1tCkNPTkZJR19ORVRfU0NIX1FG
UT1tCkNPTkZJR19ORVRfU0NIX0NPREVMPW0KQ09ORklHX05FVF9TQ0hfRlFfQ09ERUw9bQpD
T05GSUdfTkVUX1NDSF9GUT1tCkNPTkZJR19ORVRfU0NIX0hIRj1tCkNPTkZJR19ORVRfU0NI
X1BJRT1tCkNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQpDT05GSUdfTkVUX1NDSF9QTFVHPW0K
CiMKIyBDbGFzc2lmaWNhdGlvbgojCkNPTkZJR19ORVRfQ0xTPXkKQ09ORklHX05FVF9DTFNf
QkFTSUM9bQpDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KQ09ORklHX05FVF9DTFNfUk9VVEU0
PW0KQ09ORklHX05FVF9DTFNfRlc9bQpDT05GSUdfTkVUX0NMU19VMzI9bQpDT05GSUdfQ0xT
X1UzMl9QRVJGPXkKQ09ORklHX0NMU19VMzJfTUFSSz15CkNPTkZJR19ORVRfQ0xTX1JTVlA9
bQpDT05GSUdfTkVUX0NMU19SU1ZQNj1tCkNPTkZJR19ORVRfQ0xTX0ZMT1c9bQpDT05GSUdf
TkVUX0NMU19DR1JPVVA9bQpDT05GSUdfTkVUX0NMU19CUEY9bQpDT05GSUdfTkVUX0VNQVRD
SD15CkNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCkNPTkZJR19ORVRfRU1BVENIX0NNUD1t
CkNPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KQ09O
RklHX05FVF9FTUFUQ0hfTUVUQT1tCkNPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQpDT05GSUdf
TkVUX0VNQVRDSF9DQU5JRD1tCkNPTkZJR19ORVRfRU1BVENIX0lQU0VUPW0KQ09ORklHX05F
VF9DTFNfQUNUPXkKQ09ORklHX05FVF9BQ1RfUE9MSUNFPW0KQ09ORklHX05FVF9BQ1RfR0FD
VD1tCkNPTkZJR19HQUNUX1BST0I9eQpDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQpDT05GSUdf
TkVUX0FDVF9JUFQ9bQpDT05GSUdfTkVUX0FDVF9OQVQ9bQpDT05GSUdfTkVUX0FDVF9QRURJ
VD1tCkNPTkZJR19ORVRfQUNUX1NJTVA9bQpDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KQ09O
RklHX05FVF9BQ1RfQ1NVTT1tCkNPTkZJR19ORVRfQUNUX1ZMQU49bQpDT05GSUdfTkVUX0FD
VF9CUEY9bQpDT05GSUdfTkVUX0FDVF9DT05OTUFSSz1tCkNPTkZJR19ORVRfQ0xTX0lORD15
CkNPTkZJR19ORVRfU0NIX0ZJRk89eQpDT05GSUdfRENCPXkKQ09ORklHX0ROU19SRVNPTFZF
Uj1tCkNPTkZJR19CQVRNQU5fQURWPW0KQ09ORklHX0JBVE1BTl9BRFZfQkxBPXkKQ09ORklH
X0JBVE1BTl9BRFZfREFUPXkKQ09ORklHX0JBVE1BTl9BRFZfTkM9eQpDT05GSUdfQkFUTUFO
X0FEVl9NQ0FTVD15CiMgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgaXMgbm90IHNldApDT05G
SUdfT1BFTlZTV0lUQ0g9bQpDT05GSUdfT1BFTlZTV0lUQ0hfR1JFPW0KQ09ORklHX09QRU5W
U1dJVENIX1ZYTEFOPW0KQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRT1tCkNPTkZJR19WU09D
S0VUUz1tCkNPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUz1tCkNPTkZJR19ORVRMSU5LX01N
QVA9eQpDT05GSUdfTkVUTElOS19ESUFHPW0KQ09ORklHX01QTFM9eQpDT05GSUdfTkVUX01Q
TFNfR1NPPXkKQ09ORklHX01QTFNfUk9VVElORz1tCiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90IHNldApDT05GSUdfUlBTPXkKQ09ORklH
X1JGU19BQ0NFTD15CkNPTkZJR19YUFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09O
RklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09O
RklHX0JRTD15CkNPTkZJR19CUEZfSklUPXkKQ09ORklHX05FVF9GTE9XX0xJTUlUPXkKCiMK
IyBOZXR3b3JrIHRlc3RpbmcKIwpDT05GSUdfTkVUX1BLVEdFTj1tCiMgQ09ORklHX05FVF9U
Q1BQUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfRFJPUF9NT05JVE9SPW0KQ09ORklHX0hB
TVJBRElPPXkKCiMKIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCiMKQ09ORklHX0FYMjU9bQoj
IENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldApDT05GSUdfTkVUUk9NPW0KQ09O
RklHX1JPU0U9bQoKIwojIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdf
TUtJU1M9bQpDT05GSUdfNlBBQ0s9bQpDT05GSUdfQlBRRVRIRVI9bQpDT05GSUdfQkFZQ09N
X1NFUl9GRFg9bQpDT05GSUdfQkFZQ09NX1NFUl9IRFg9bQpDT05GSUdfQkFZQ09NX1BBUj1t
CkNPTkZJR19ZQU09bQpDT05GSUdfQ0FOPW0KQ09ORklHX0NBTl9SQVc9bQpDT05GSUdfQ0FO
X0JDTT1tCkNPTkZJR19DQU5fR1c9bQoKIwojIENBTiBEZXZpY2UgRHJpdmVycwojCkNPTkZJ
R19DQU5fVkNBTj1tCkNPTkZJR19DQU5fU0xDQU49bQpDT05GSUdfQ0FOX0RFVj1tCkNPTkZJ
R19DQU5fQ0FMQ19CSVRUSU1JTkc9eQojIENPTkZJR19DQU5fTEVEUyBpcyBub3Qgc2V0CkNP
TkZJR19DQU5fU0pBMTAwMD1tCkNPTkZJR19DQU5fU0pBMTAwMF9JU0E9bQojIENPTkZJR19D
QU5fU0pBMTAwMF9QTEFURk9STSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fRU1TX1BDTUNJQT1t
CkNPTkZJR19DQU5fRU1TX1BDST1tCkNPTkZJR19DQU5fUEVBS19QQ01DSUE9bQpDT05GSUdf
Q0FOX1BFQUtfUENJPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVDPXkKQ09ORklHX0NBTl9LVkFT
RVJfUENJPW0KQ09ORklHX0NBTl9QTFhfUENJPW0KIyBDT05GSUdfQ0FOX0NfQ0FOIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FOX01fQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0NDNzcw
IGlzIG5vdCBzZXQKCiMKIyBDQU4gU1BJIGludGVyZmFjZXMKIwojIENPTkZJR19DQU5fTUNQ
MjUxWCBpcyBub3Qgc2V0CgojCiMgQ0FOIFVTQiBpbnRlcmZhY2VzCiMKQ09ORklHX0NBTl9F
TVNfVVNCPW0KQ09ORklHX0NBTl9FU0RfVVNCMj1tCkNPTkZJR19DQU5fR1NfVVNCPW0KQ09O
RklHX0NBTl9LVkFTRVJfVVNCPW0KQ09ORklHX0NBTl9QRUFLX1VTQj1tCkNPTkZJR19DQU5f
OERFVl9VU0I9bQpDT05GSUdfQ0FOX1NPRlRJTkc9bQpDT05GSUdfQ0FOX1NPRlRJTkdfQ1M9
bQojIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19JUkRBPW0K
CiMKIyBJckRBIHByb3RvY29scwojCkNPTkZJR19JUkxBTj1tCkNPTkZJR19JUk5FVD1tCkNP
TkZJR19JUkNPTU09bQojIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKCiMKIyBJckRB
IG9wdGlvbnMKIwpDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQpDT05GSUdfSVJEQV9G
QVNUX1JSPXkKIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CgojCiMgSW5mcmFyZWQt
cG9ydCBkZXZpY2UgZHJpdmVycwojCgojCiMgU0lSIGRldmljZSBkcml2ZXJzCiMKQ09ORklH
X0lSVFRZX1NJUj1tCgojCiMgRG9uZ2xlIHN1cHBvcnQKIwpDT05GSUdfRE9OR0xFPXkKQ09O
RklHX0VTSV9ET05HTEU9bQpDT05GSUdfQUNUSVNZU19ET05HTEU9bQpDT05GSUdfVEVLUkFN
X0RPTkdMRT1tCkNPTkZJR19UT0lNMzIzMl9ET05HTEU9bQpDT05GSUdfTElURUxJTktfRE9O
R0xFPW0KQ09ORklHX01BNjAwX0RPTkdMRT1tCkNPTkZJR19HSVJCSUxfRE9OR0xFPW0KQ09O
RklHX01DUDIxMjBfRE9OR0xFPW0KQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KQ09ORklH
X0FDVDIwMExfRE9OR0xFPW0KQ09ORklHX0tJTkdTVU5fRE9OR0xFPW0KQ09ORklHX0tTREFa
WkxFX0RPTkdMRT1tCkNPTkZJR19LUzk1OV9ET05HTEU9bQoKIwojIEZJUiBkZXZpY2UgZHJp
dmVycwojCkNPTkZJR19VU0JfSVJEQT1tCkNPTkZJR19TSUdNQVRFTF9GSVI9bQpDT05GSUdf
TlNDX0ZJUj1tCkNPTkZJR19XSU5CT05EX0ZJUj1tCkNPTkZJR19TTUNfSVJDQ19GSVI9bQpD
T05GSUdfQUxJX0ZJUj1tCkNPTkZJR19WTFNJX0ZJUj1tCkNPTkZJR19WSUFfRklSPW0KQ09O
RklHX01DU19GSVI9bQpDT05GSUdfQlQ9bQpDT05GSUdfQlRfQlJFRFI9eQpDT05GSUdfQlRf
UkZDT01NPW0KQ09ORklHX0JUX1JGQ09NTV9UVFk9eQpDT05GSUdfQlRfQk5FUD1tCkNPTkZJ
R19CVF9CTkVQX01DX0ZJTFRFUj15CkNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CkNP
TkZJR19CVF9DTVRQPW0KQ09ORklHX0JUX0hJRFA9bQpDT05GSUdfQlRfTEU9eQpDT05GSUdf
QlRfNkxPV1BBTj1tCiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0JU
X0RFQlVHRlM9eQoKIwojIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwojCkNPTkZJR19CVF9J
TlRFTD1tCkNPTkZJR19CVF9CQ009bQpDT05GSUdfQlRfSENJQlRVU0I9bQpDT05GSUdfQlRf
SENJQlRVU0JfQkNNPXkKQ09ORklHX0JUX0hDSUJUU0RJTz1tCkNPTkZJR19CVF9IQ0lVQVJU
PW0KQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQpDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQ09O
RklHX0JUX0hDSVVBUlRfQVRIM0s9eQpDT05GSUdfQlRfSENJVUFSVF9MTD15CkNPTkZJR19C
VF9IQ0lVQVJUXzNXSVJFPXkKQ09ORklHX0JUX0hDSVVBUlRfSU5URUw9eQpDT05GSUdfQlRf
SENJVUFSVF9CQ009eQpDT05GSUdfQlRfSENJQkNNMjAzWD1tCkNPTkZJR19CVF9IQ0lCUEEx
MFg9bQpDT05GSUdfQlRfSENJQkZVU0I9bQpDT05GSUdfQlRfSENJRFRMMT1tCkNPTkZJR19C
VF9IQ0lCVDNDPW0KQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIyBDT05GSUdfQlRfSENJQlRV
QVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hDSVZIQ0k9bQpDT05GSUdfQlRfTVJWTD1tCkNP
TkZJR19CVF9NUlZMX1NESU89bQpDT05GSUdfQlRfQVRIM0s9bQpDT05GSUdfQUZfUlhSUEM9
bQojIENPTkZJR19BRl9SWFJQQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SWEtBRD1tCkNP
TkZJR19GSUJfUlVMRVM9eQpDT05GSUdfV0lSRUxFU1M9eQpDT05GSUdfV0lSRUxFU1NfRVhU
PXkKQ09ORklHX1dFWFRfQ09SRT15CkNPTkZJR19XRVhUX1BST0M9eQpDT05GSUdfV0VYVF9T
UFk9eQpDT05GSUdfV0VYVF9QUklWPXkKQ09ORklHX0NGRzgwMjExPW0KIyBDT05GSUdfTkw4
MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9X
QVJOSU5HUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qg
c2V0CiMgQ09ORklHX0NGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUyBpcyBub3Qgc2V0CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIGlzIG5vdCBzZXQK
Q09ORklHX0NGRzgwMjExX1dFWFQ9eQpDT05GSUdfQ0ZHODAyMTFfV0VYVF9FWFBPUlQ9eQpD
T05GSUdfTElCODAyMTE9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfV0VQPW0KQ09ORklHX0xJ
QjgwMjExX0NSWVBUX0NDTVA9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCiMgQ09O
RklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExPW0KQ09ORklH
X01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CkNPTkZJ
R19NQUM4MDIxMV9SQ19NSU5TVFJFTF9IVD15CiMgQ09ORklHX01BQzgwMjExX1JDX01JTlNU
UkVMX1ZIVCBpcyBub3Qgc2V0CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVM
PXkKQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgpDT05GSUdfTUFD
ODAyMTFfTUVTSD15CkNPTkZJR19NQUM4MDIxMV9MRURTPXkKIyBDT05GSUdfTUFDODAyMTFf
REVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBp
cyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05G
SUdfV0lNQVg9bQpDT05GSUdfV0lNQVhfREVCVUdfTEVWRUw9OApDT05GSUdfUkZLSUxMPW0K
Q09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JG
S0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05FVF85UD1tCkNPTkZJR19ORVRfOVBfVklS
VElPPW0KQ09ORklHX05FVF85UF9SRE1BPW0KIyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FJRiBpcyBub3Qgc2V0CkNPTkZJR19DRVBIX0xJQj1tCiMgQ09O
RklHX0NFUEhfTElCX1BSRVRUWURFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9MSUJf
VVNFX0ROU19SRVNPTFZFUiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9bQpDT05GSUdfTkZDX0RJ
R0lUQUw9bQojIENPTkZJR19ORkNfTkNJIGlzIG5vdCBzZXQKQ09ORklHX05GQ19IQ0k9bQoj
IENPTkZJR19ORkNfU0hETEMgaXMgbm90IHNldAoKIwojIE5lYXIgRmllbGQgQ29tbXVuaWNh
dGlvbiAoTkZDKSBkZXZpY2VzCiMKQ09ORklHX05GQ19QTjUzMz1tCiMgQ09ORklHX05GQ19U
UkY3OTcwQSBpcyBub3Qgc2V0CkNPTkZJR19ORkNfTUVJX1BIWT1tCkNPTkZJR19ORkNfU0lN
PW0KQ09ORklHX05GQ19QT1JUMTAwPW0KQ09ORklHX05GQ19QTjU0ND1tCkNPTkZJR19ORkNf
UE41NDRfTUVJPW0KIyBDT05GSUdfTkZDX01JQ1JPUkVBRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05GQ19TVDIxTkZDQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0JQRl9KSVQ9eQoKIwojIERl
dmljZSBEcml2ZXJzCiMKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMKQ09ORklHX1VF
VkVOVF9IRUxQRVI9eQpDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCkNPTkZJR19ERVZU
TVBGUz15CiMgQ09ORklHX0RFVlRNUEZTX01PVU5UIGlzIG5vdCBzZXQKQ09ORklHX1NUQU5E
QUxPTkU9eQpDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CkNPTkZJR19GV19MT0FE
RVI9eQojIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfRVhU
UkFfRklSTVdBUkU9IiIKQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj15CiMgQ09ORklH
X0ZXX0xPQURFUl9VU0VSX0hFTFBFUl9GQUxMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19XQU5U
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19BTExPV19ERVZfQ09SRURVTVA9eQpDT05GSUdfREVW
X0NPUkVEVU1QPXkKIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfREVWUkVTIGlzIG5vdCBzZXQKQ09ORklHX1NZU19IWVBFUlZJU09SPXkKIyBDT05G
SUdfR0VORVJJQ19DUFVfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19HRU5FUklDX0NQVV9B
VVRPUFJPQkU9eQpDT05GSUdfUkVHTUFQPXkKQ09ORklHX1JFR01BUF9JMkM9bQpDT05GSUdf
UkVHTUFQX1NQST1tCkNPTkZJR19ETUFfU0hBUkVEX0JVRkZFUj15CiMgQ09ORklHX0ZFTkNF
X1RSQUNFIGlzIG5vdCBzZXQKCiMKIyBCdXMgZGV2aWNlcwojCkNPTkZJR19DT05ORUNUT1I9
eQpDT05GSUdfUFJPQ19FVkVOVFM9eQpDT05GSUdfTVREPW0KIyBDT05GSUdfTVREX1RFU1RT
IGlzIG5vdCBzZXQKQ09ORklHX01URF9SRURCT09UX1BBUlRTPW0KQ09ORklHX01URF9SRURC
T09UX0RJUkVDVE9SWV9CTE9DSz0tMQojIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFM
TE9DQVRFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldApDT05G
SUdfTVREX0FSN19QQVJUUz1tCgojCiMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBM
YXllcnMKIwpDT05GSUdfTVREX0JMS0RFVlM9bQpDT05GSUdfTVREX0JMT0NLPW0KQ09ORklH
X01URF9CTE9DS19STz1tCkNPTkZJR19GVEw9bQpDT05GSUdfTkZUTD1tCkNPTkZJR19ORlRM
X1JXPXkKQ09ORklHX0lORlRMPW0KQ09ORklHX1JGRF9GVEw9bQpDT05GSUdfU1NGREM9bQoj
IENPTkZJR19TTV9GVEwgaXMgbm90IHNldApDT05GSUdfTVREX09PUFM9bQpDT05GSUdfTVRE
X1NXQVA9bQojIENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSIGlzIG5vdCBzZXQKCiMK
IyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwojCkNPTkZJR19NVERfQ0ZJPW0KQ09ORklH
X01URF9KRURFQ1BST0JFPW0KQ09ORklHX01URF9HRU5fUFJPQkU9bQojIENPTkZJR19NVERf
Q0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8x
PXkKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKQ09ORklHX01URF9NQVBfQkFOS19X
SURUSF80PXkKIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAojIENP
TkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAojIENPTkZJR19NVERfTUFQ
X0JBTktfV0lEVEhfMzIgaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JMT15CkNPTkZJR19N
VERfQ0ZJX0kyPXkKIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9DRklfSTggaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCkNPTkZJR19N
VERfQ0ZJX0FNRFNURD1tCkNPTkZJR19NVERfQ0ZJX1NUQUE9bQpDT05GSUdfTVREX0NGSV9V
VElMPW0KQ09ORklHX01URF9SQU09bQpDT05GSUdfTVREX1JPTT1tCkNPTkZJR19NVERfQUJT
RU5UPW0KCiMKIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiMKQ09ORklHX01U
RF9DT01QTEVYX01BUFBJTkdTPXkKQ09ORklHX01URF9QSFlTTUFQPW0KIyBDT05GSUdfTVRE
X1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX01URF9TQkNfR1hYPW0KIyBDT05G
SUdfTVREX0FNRDc2WFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9JQ0hYUk9NIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX0VTQjJST00gaXMgbm90IHNldAojIENPTkZJR19NVERfQ0s4
MDRYUk9NIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1NDQjJfRkxBU0ggaXMgbm90IHNldApD
T05GSUdfTVREX05FVHRlbD1tCiMgQ09ORklHX01URF9MNDQwR1ggaXMgbm90IHNldApDT05G
SUdfTVREX1BDST1tCkNPTkZJR19NVERfUENNQ0lBPW0KIyBDT05GSUdfTVREX1BDTUNJQV9B
Tk9OWU1PVVMgaXMgbm90IHNldAojIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQK
Q09ORklHX01URF9JTlRFTF9WUl9OT1I9bQpDT05GSUdfTVREX1BMQVRSQU09bQojIENPTkZJ
R19NVERfTEFUQ0hfQUREUiBpcyBub3Qgc2V0CgojCiMgU2VsZi1jb250YWluZWQgTVREIGRl
dmljZSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CkNPTkZJR19N
VERfREFUQUZMQVNIPW0KIyBDT05GSUdfTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgaXMg
bm90IHNldAojIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CkNPTkZJR19N
VERfTTI1UDgwPW0KQ09ORklHX01URF9TU1QyNUw9bQpDT05GSUdfTVREX1NMUkFNPW0KQ09O
RklHX01URF9QSFJBTT1tCkNPTkZJR19NVERfTVREUkFNPW0KQ09ORklHX01URFJBTV9UT1RB
TF9TSVpFPTQwOTYKQ09ORklHX01URFJBTV9FUkFTRV9TSVpFPTEyOApDT05GSUdfTVREX0JM
T0NLMk1URD1tCgojCiMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCiMKIyBDT05GSUdf
TVREX0RPQ0czIGlzIG5vdCBzZXQKQ09ORklHX01URF9OQU5EX0VDQz1tCiMgQ09ORklHX01U
RF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldApDT05GSUdfTVREX05BTkQ9bQpDT05GSUdfTVRE
X05BTkRfQkNIPW0KQ09ORklHX01URF9OQU5EX0VDQ19CQ0g9eQpDT05GSUdfTVREX1NNX0NP
TU1PTj1tCiMgQ09ORklHX01URF9OQU5EX0RFTkFMSSBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9OQU5EX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NVERfTkFORF9PTUFQX0JDSF9CVUlM
RCBpcyBub3Qgc2V0CkNPTkZJR19NVERfTkFORF9JRFM9bQpDT05GSUdfTVREX05BTkRfUklD
T0g9bQpDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCiMgQ09ORklHX01URF9OQU5EX0RJ
U0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfRElT
S09OQ0hJUF9QUk9CRV9BRERSRVNTPTAKIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9C
QlRXUklURSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX0RPQ0c0IGlzIG5vdCBzZXQK
Q09ORklHX01URF9OQU5EX0NBRkU9bQpDT05GSUdfTVREX05BTkRfTkFORFNJTT1tCiMgQ09O
RklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfSElT
STUwNCBpcyBub3Qgc2V0CkNPTkZJR19NVERfT05FTkFORD1tCkNPTkZJR19NVERfT05FTkFO
RF9WRVJJRllfV1JJVEU9eQojIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKQ09ORklHX01URF9PTkVO
QU5EXzJYX1BST0dSQU09eQoKIwojIExQRERSICYgTFBERFIyIFBDTSBtZW1vcnkgZHJpdmVy
cwojCkNPTkZJR19NVERfTFBERFI9bQpDT05GSUdfTVREX1FJTkZPX1BST0JFPW0KQ09ORklH
X01URF9TUElfTk9SPW0KQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTPXkKQ09O
RklHX01URF9VQkk9bQpDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgpDT05GSUdf
TVREX1VCSV9CRUJfTElNSVQ9MjAKIyBDT05GSUdfTVREX1VCSV9GQVNUTUFQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldApDT05GSUdfTVREX1VCSV9C
TE9DSz15CkNPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQ
T1JUPW0KQ09ORklHX1BBUlBPUlRfUEM9bQpDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQojIENP
TkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAojIENPTkZJR19QQVJQT1JUX1BDX1NV
UEVSSU8gaXMgbm90IHNldApDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQojIENPTkZJR19Q
QVJQT1JUX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qg
c2V0CkNPTkZJR19QQVJQT1JUXzEyODQ9eQpDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQpDT05G
SUdfUE5QPXkKIyBDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIGlzIG5vdCBzZXQKCiMKIyBQ
cm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVWPXkKQ09ORklHX0JM
S19ERVZfTlVMTF9CTEs9bQpDT05GSUdfQkxLX0RFVl9GRD1tCiMgQ09ORklHX1BBUklERSBp
cyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJUDMyWFg9bQpDT05GSUdfWlJB
TT1tCkNPTkZJR19aUkFNX0xaNF9DT01QUkVTUz15CiMgQ09ORklHX1pSQU1fREVCVUcgaXMg
bm90IHNldApDT05GSUdfQkxLX0NQUV9DSVNTX0RBPW0KQ09ORklHX0NJU1NfU0NTSV9UQVBF
PXkKQ09ORklHX0JMS19ERVZfREFDOTYwPW0KQ09ORklHX0JMS19ERVZfVU1FTT1tCiMgQ09O
RklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xPT1A9
bQpDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVD04CiMgQ09ORklHX0JMS19ERVZfQ1JZ
UFRPTE9PUCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0RSQkQ9bQojIENPTkZJR19EUkJE
X0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX05CRD1tCkNPTkZJ
R19CTEtfREVWX05WTUU9bQpDT05GSUdfQkxLX0RFVl9TS0Q9bQpDT05GSUdfQkxLX0RFVl9P
U0Q9bQpDT05GSUdfQkxLX0RFVl9TWDg9bQpDT05GSUdfQkxLX0RFVl9SQU09bQpDT05GSUdf
QkxLX0RFVl9SQU1fQ09VTlQ9MTYKQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQ09O
RklHX0JMS19ERVZfUE1FTT1tCkNPTkZJR19DRFJPTV9QS1RDRFZEPW0KQ09ORklHX0NEUk9N
X1BLVENEVkRfQlVGRkVSUz04CiMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5v
dCBzZXQKQ09ORklHX0FUQV9PVkVSX0VUSD1tCkNPTkZJR19YRU5fQkxLREVWX0ZST05URU5E
PW0KQ09ORklHX1hFTl9CTEtERVZfQkFDS0VORD1tCkNPTkZJR19WSVJUSU9fQkxLPW0KIyBD
T05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1JCRD1tCkNPTkZJ
R19CTEtfREVWX1JTWFg9bQoKIwojIE1pc2MgZGV2aWNlcwojCkNPTkZJR19TRU5TT1JTX0xJ
UzNMVjAyRD1tCkNPTkZJR19BRDUyNVhfRFBPVD1tCkNPTkZJR19BRDUyNVhfRFBPVF9JMkM9
bQpDT05GSUdfQUQ1MjVYX0RQT1RfU1BJPW0KIyBDT05GSUdfRFVNTVlfSVJRIGlzIG5vdCBz
ZXQKQ09ORklHX0lCTV9BU009bQpDT05GSUdfUEhBTlRPTT1tCkNPTkZJR19TR0lfSU9DND1t
CkNPTkZJR19USUZNX0NPUkU9bQpDT05GSUdfVElGTV83WFgxPW0KQ09ORklHX0lDUzkzMlM0
MDE9bQpDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTPW0KQ09ORklHX0hQX0lMTz1tCkNPTkZJ
R19BUERTOTgwMkFMUz1tCkNPTkZJR19JU0wyOTAwMz1tCkNPTkZJR19JU0wyOTAyMD1tCkNP
TkZJR19TRU5TT1JTX1RTTDI1NTA9bQpDT05GSUdfU0VOU09SU19CSDE3ODA9bQpDT05GSUdf
U0VOU09SU19CSDE3NzA9bQpDT05GSUdfU0VOU09SU19BUERTOTkwWD1tCkNPTkZJR19ITUM2
MzUyPW0KQ09ORklHX0RTMTY4Mj1tCkNPTkZJR19USV9EQUM3NTEyPW0KQ09ORklHX1ZNV0FS
RV9CQUxMT09OPW0KIyBDT05GSUdfQk1QMDg1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JN
UDA4NV9TUEkgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1dJVENIX0ZTQTk0ODAgaXMgbm90
IHNldAojIENPTkZJR19MQVRUSUNFX0VDUDNfQ09ORklHIGlzIG5vdCBzZXQKIyBDT05GSUdf
U1JBTSBpcyBub3Qgc2V0CkNPTkZJR19DMlBPUlQ9bQpDT05GSUdfQzJQT1JUX0RVUkFNQVJf
MjE1MD1tCgojCiMgRUVQUk9NIHN1cHBvcnQKIwpDT05GSUdfRUVQUk9NX0FUMjQ9bQpDT05G
SUdfRUVQUk9NX0FUMjU9bQpDT05GSUdfRUVQUk9NX0xFR0FDWT1tCkNPTkZJR19FRVBST01f
TUFYNjg3NT1tCkNPTkZJR19FRVBST01fOTNDWDY9bQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKQ09ORklHX0NCNzEwX0NPUkU9bQojIENPTkZJR19DQjcxMF9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19DQjcxMF9ERUJVR19BU1NVTVBUSU9OUz15CgojCiMgVGV4YXMg
SW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUKIwojIENPTkZJ
R19USV9TVCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX0xJUzNfSTJDPW0KCiMKIyBBbHRl
cmEgRlBHQSBmaXJtd2FyZSBkb3dubG9hZCBtb2R1bGUKIwpDT05GSUdfQUxURVJBX1NUQVBM
PW0KQ09ORklHX0lOVEVMX01FST1tCkNPTkZJR19JTlRFTF9NRUlfTUU9bQojIENPTkZJR19J
TlRFTF9NRUlfVFhFIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9WTUNJPW0KCiMKIyBJbnRl
bCBNSUMgQnVzIERyaXZlcgojCkNPTkZJR19JTlRFTF9NSUNfQlVTPW0KCiMKIyBJbnRlbCBN
SUMgSG9zdCBEcml2ZXIKIwpDT05GSUdfSU5URUxfTUlDX0hPU1Q9bQoKIwojIEludGVsIE1J
QyBDYXJkIERyaXZlcgojCiMgQ09ORklHX0lOVEVMX01JQ19DQVJEIGlzIG5vdCBzZXQKIyBD
T05GSUdfR0VOV1FFIGlzIG5vdCBzZXQKIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NYTF9CQVNFIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfSURFPXkKIyBDT05GSUdfSURF
IGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX1NDU0lfTU9E
PW0KQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST1tCkNPTkZJR19TQ1NJX0RNQT15
CkNPTkZJR19TQ1NJX05FVExJTks9eQojIENPTkZJR19TQ1NJX01RX0RFRkFVTFQgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAoKIwojIFNDU0kgc3VwcG9y
dCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9bQpDT05G
SUdfQ0hSX0RFVl9TVD1tCkNPTkZJR19DSFJfREVWX09TU1Q9bQpDT05GSUdfQkxLX0RFVl9T
Uj1tCkNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CkNPTkZJR19DSFJfREVWX1NHPW0KQ09O
RklHX0NIUl9ERVZfU0NIPW0KQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KQ09ORklHX1NDU0lf
Q09OU1RBTlRTPXkKQ09ORklHX1NDU0lfTE9HR0lORz15CkNPTkZJR19TQ1NJX1NDQU5fQVNZ
TkM9eQoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCkNP
TkZJR19TQ1NJX0ZDX0FUVFJTPW0KQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQpDT05GSUdf
U0NTSV9TQVNfQVRUUlM9bQpDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KQ09ORklHX1NDU0lf
U0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CkNPTkZJR19TQ1NJX1NSUF9B
VFRSUz1tCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQ09ORklHX0lTQ1NJX1RDUD1tCkNPTkZJ
R19JU0NTSV9CT09UX1NZU0ZTPW0KQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0k9bQpDT05GSUdf
U0NTSV9DWEdCNF9JU0NTST1tCkNPTkZJR19TQ1NJX0JOWDJfSVNDU0k9bQpDT05GSUdfU0NT
SV9CTlgyWF9GQ09FPW0KQ09ORklHX0JFMklTQ1NJPW0KQ09ORklHX0JMS19ERVZfM1dfWFhY
WF9SQUlEPW0KQ09ORklHX1NDU0lfSFBTQT1tCkNPTkZJR19TQ1NJXzNXXzlYWFg9bQpDT05G
SUdfU0NTSV8zV19TQVM9bQpDT05GSUdfU0NTSV9BQ0FSRD1tCkNPTkZJR19TQ1NJX0FBQ1JB
SUQ9bQpDT05GSUdfU0NTSV9BSUM3WFhYPW0KQ09ORklHX0FJQzdYWFhfQ01EU19QRVJfREVW
SUNFPTgKQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQ09ORklHX0FJQzdY
WFhfREVCVUdfRU5BQkxFPXkKQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCkNPTkZJR19B
SUM3WFhYX1JFR19QUkVUVFlfUFJJTlQ9eQpDT05GSUdfU0NTSV9BSUM3OVhYPW0KQ09ORklH
X0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCkNPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZ
X01TPTE1MDAwCkNPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRT15CkNPTkZJR19BSUM3OVhY
X0RFQlVHX01BU0s9MApDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UPXkKQ09ORklH
X1NDU0lfQUlDOTRYWD1tCiMgQ09ORklHX0FJQzk0WFhfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU0NTSV9NVlNBUz1tCiMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQgaXMgbm90IHNldApDT05GSUdfU0NTSV9NVlVN
ST1tCkNPTkZJR19TQ1NJX0RQVF9JMk89bQpDT05GSUdfU0NTSV9BRFZBTlNZUz1tCkNPTkZJ
R19TQ1NJX0FSQ01TUj1tCkNPTkZJR19TQ1NJX0VTQVMyUj1tCkNPTkZJR19NRUdBUkFJRF9O
RVdHRU49eQpDT05GSUdfTUVHQVJBSURfTU09bQpDT05GSUdfTUVHQVJBSURfTUFJTEJPWD1t
CkNPTkZJR19NRUdBUkFJRF9MRUdBQ1k9bQpDT05GSUdfTUVHQVJBSURfU0FTPW0KQ09ORklH
X1NDU0lfTVBUMlNBUz1tCkNPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRT0xMjgKIyBDT05G
SUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldApDT05GSUdfU0NTSV9NUFQzU0FT
PW0KQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOAojIENPTkZJR19TQ1NJX01QVDNT
QVNfTE9HR0lORyBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU0hDRD1tCkNPTkZJR19TQ1NJ
X1VGU0hDRF9QQ0k9bQojIENPTkZJR19TQ1NJX1VGU0hDRF9QTEFURk9STSBpcyBub3Qgc2V0
CkNPTkZJR19TQ1NJX0hQVElPUD1tCkNPTkZJR19TQ1NJX0JVU0xPR0lDPW0KIyBDT05GSUdf
U0NTSV9GTEFTSFBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9QVlNDU0k9bQpDT05G
SUdfWEVOX1NDU0lfRlJPTlRFTkQ9bQpDT05GSUdfSFlQRVJWX1NUT1JBR0U9bQpDT05GSUdf
TElCRkM9bQpDT05GSUdfTElCRkNPRT1tCkNPTkZJR19GQ09FPW0KQ09ORklHX0ZDT0VfRk5J
Qz1tCkNPTkZJR19TQ1NJX0RNWDMxOTFEPW0KQ09ORklHX1NDU0lfRUFUQT1tCkNPTkZJR19T
Q1NJX0VBVEFfVEFHR0VEX1FVRVVFPXkKQ09ORklHX1NDU0lfRUFUQV9MSU5LRURfQ09NTUFO
RFM9eQpDT05GSUdfU0NTSV9FQVRBX01BWF9UQUdTPTE2CkNPTkZJR19TQ1NJX0ZVVFVSRV9E
T01BSU49bQpDT05GSUdfU0NTSV9HRFRIPW0KQ09ORklHX1NDU0lfSVNDST1tCkNPTkZJR19T
Q1NJX0lQUz1tCkNPTkZJR19TQ1NJX0lOSVRJTz1tCkNPTkZJR19TQ1NJX0lOSUExMDA9bQoj
IENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBz
ZXQKQ09ORklHX1NDU0lfU1RFWD1tCkNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPW0KQ09ORklH
X1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQpDT05GSUdfU0NTSV9TWU01
M0M4WFhfREVGQVVMVF9UQUdTPTE2CkNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02
NApDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CkNPTkZJR19TQ1NJX0lQUj1tCiMgQ09O
RklHX1NDU0lfSVBSX1RSQUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JUFJfRFVNUCBp
cyBub3Qgc2V0CkNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPW0KQ09ORklHX1NDU0lfUUxBX0ZD
PW0KQ09ORklHX1RDTV9RTEEyWFhYPW0KQ09ORklHX1NDU0lfUUxBX0lTQ1NJPW0KQ09ORklH
X1NDU0lfTFBGQz1tCiMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CkNP
TkZJR19TQ1NJX0RDMzk1eD1tCkNPTkZJR19TQ1NJX0FNNTNDOTc0PW0KQ09ORklHX1NDU0lf
V0Q3MTlYPW0KQ09ORklHX1NDU0lfREVCVUc9bQpDT05GSUdfU0NTSV9QTUNSQUlEPW0KQ09O
RklHX1NDU0lfUE04MDAxPW0KQ09ORklHX1NDU0lfQkZBX0ZDPW0KQ09ORklHX1NDU0lfVklS
VElPPW0KQ09ORklHX1NDU0lfQ0hFTFNJT19GQ09FPW0KQ09ORklHX1NDU0lfTE9XTEVWRUxf
UENNQ0lBPXkKQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KQ09ORklHX1BDTUNJQV9GRE9NQUlO
PW0KQ09ORklHX1BDTUNJQV9RTE9HSUM9bQpDT05GSUdfUENNQ0lBX1NZTTUzQzUwMD1tCkNP
TkZJR19TQ1NJX0RIPW0KQ09ORklHX1NDU0lfREhfUkRBQz1tCkNPTkZJR19TQ1NJX0RIX0hQ
X1NXPW0KQ09ORklHX1NDU0lfREhfRU1DPW0KQ09ORklHX1NDU0lfREhfQUxVQT1tCkNPTkZJ
R19TQ1NJX09TRF9JTklUSUFUT1I9bQpDT05GSUdfU0NTSV9PU0RfVUxEPW0KQ09ORklHX1ND
U0lfT1NEX0RQUklOVF9TRU5TRT0xCiMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0FUQT1tCiMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CkNP
TkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfQUNQST15CkNPTkZJR19TQVRB
X1pQT0REPXkKQ09ORklHX1NBVEFfUE1QPXkKCiMKIyBDb250cm9sbGVycyB3aXRoIG5vbi1T
RkYgbmF0aXZlIGludGVyZmFjZQojCkNPTkZJR19TQVRBX0FIQ0k9bQojIENPTkZJR19TQVRB
X0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5v
dCBzZXQKQ09ORklHX1NBVEFfQUNBUkRfQUhDST1tCkNPTkZJR19TQVRBX1NJTDI0PW0KQ09O
RklHX0FUQV9TRkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50
ZXJmYWNlCiMKQ09ORklHX1BEQ19BRE1BPW0KQ09ORklHX1NBVEFfUVNUT1I9bQpDT05GSUdf
U0FUQV9TWDQ9bQpDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRBIFNGRiBjb250cm9sbGVy
cyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPW0KQ09ORklHX1NBVEFfTVY9bQpDT05G
SUdfU0FUQV9OVj1tCkNPTkZJR19TQVRBX1BST01JU0U9bQpDT05GSUdfU0FUQV9TSUw9bQpD
T05GSUdfU0FUQV9TSVM9bQpDT05GSUdfU0FUQV9TVlc9bQpDT05GSUdfU0FUQV9VTEk9bQpD
T05GSUdfU0FUQV9WSUE9bQpDT05GSUdfU0FUQV9WSVRFU1NFPW0KCiMKIyBQQVRBIFNGRiBj
b250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX1BBVEFfQUxJPW0KQ09ORklHX1BBVEFf
QU1EPW0KQ09ORklHX1BBVEFfQVJUT1A9bQpDT05GSUdfUEFUQV9BVElJWFA9bQpDT05GSUdf
UEFUQV9BVFA4NjdYPW0KQ09ORklHX1BBVEFfQ01ENjRYPW0KIyBDT05GSUdfUEFUQV9DWVBS
RVNTIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfRUZBUj1tCkNPTkZJR19QQVRBX0hQVDM2Nj1t
CkNPTkZJR19QQVRBX0hQVDM3WD1tCiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfSVQ4MjEzPW0K
Q09ORklHX1BBVEFfSVQ4MjFYPW0KQ09ORklHX1BBVEFfSk1JQ1JPTj1tCkNPTkZJR19QQVRB
X01BUlZFTEw9bQpDT05GSUdfUEFUQV9ORVRDRUxMPW0KQ09ORklHX1BBVEFfTklOSkEzMj1t
CkNPTkZJR19QQVRBX05TODc0MTU9bQpDT05GSUdfUEFUQV9PTERQSUlYPW0KIyBDT05GSUdf
UEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfUERDMjAyN1g9bQpDT05GSUdf
UEFUQV9QRENfT0xEPW0KIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKQ09ORklH
X1BBVEFfUkRDPW0KQ09ORklHX1BBVEFfU0NIPW0KQ09ORklHX1BBVEFfU0VSVkVSV09SS1M9
bQpDT05GSUdfUEFUQV9TSUw2ODA9bQpDT05GSUdfUEFUQV9TSVM9bQpDT05GSUdfUEFUQV9U
T1NISUJBPW0KQ09ORklHX1BBVEFfVFJJRkxFWD1tCkNPTkZJR19QQVRBX1ZJQT1tCiMgQ09O
RklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CgojCiMgUElPLW9ubHkgU0ZGIGNvbnRyb2xs
ZXJzCiMKIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFf
TVBJSVg9bQpDT05GSUdfUEFUQV9OUzg3NDEwPW0KIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5v
dCBzZXQKQ09ORklHX1BBVEFfUENNQ0lBPW0KIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBu
b3Qgc2V0CkNPTkZJR19QQVRBX1JaMTAwMD1tCgojCiMgR2VuZXJpYyBmYWxsYmFjayAvIGxl
Z2FjeSBkcml2ZXJzCiMKIyBDT05GSUdfUEFUQV9BQ1BJIGlzIG5vdCBzZXQKQ09ORklHX0FU
QV9HRU5FUklDPW0KIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9
eQpDT05GSUdfQkxLX0RFVl9NRD1tCkNPTkZJR19NRF9MSU5FQVI9bQpDT05GSUdfTURfUkFJ
RDA9bQpDT05GSUdfTURfUkFJRDE9bQpDT05GSUdfTURfUkFJRDEwPW0KQ09ORklHX01EX1JB
SUQ0NTY9bQpDT05GSUdfTURfTVVMVElQQVRIPW0KQ09ORklHX01EX0ZBVUxUWT1tCiMgQ09O
RklHX01EX0NMVVNURVIgaXMgbm90IHNldApDT05GSUdfQkNBQ0hFPW0KIyBDT05GSUdfQkNB
Q0hFX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFX0NMT1NVUkVTX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CkNPTkZJR19CTEtfREVWX0RN
PW0KIyBDT05GSUdfRE1fTVFfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX0RNX0JVRklPPW0KQ09ORklHX0RNX0JJT19QUklTT049bQpD
T05GSUdfRE1fUEVSU0lTVEVOVF9EQVRBPW0KIyBDT05GSUdfRE1fREVCVUdfQkxPQ0tfU1RB
Q0tfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19ETV9DUllQVD1tCkNPTkZJR19ETV9TTkFQ
U0hPVD1tCkNPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCkNPTkZJR19ETV9DQUNIRT1t
CkNPTkZJR19ETV9DQUNIRV9NUT1tCkNPTkZJR19ETV9DQUNIRV9DTEVBTkVSPW0KQ09ORklH
X0RNX0VSQT1tCkNPTkZJR19ETV9NSVJST1I9bQpDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1t
CkNPTkZJR19ETV9SQUlEPW0KQ09ORklHX0RNX1pFUk89bQpDT05GSUdfRE1fTVVMVElQQVRI
PW0KQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCkNPTkZJR19ETV9NVUxUSVBBVEhfU1Q9bQpD
T05GSUdfRE1fREVMQVk9bQpDT05GSUdfRE1fVUVWRU5UPXkKQ09ORklHX0RNX0ZMQUtFWT1t
CkNPTkZJR19ETV9WRVJJVFk9bQpDT05GSUdfRE1fU1dJVENIPW0KQ09ORklHX0RNX0xPR19X
UklURVM9bQpDT05GSUdfVEFSR0VUX0NPUkU9bQpDT05GSUdfVENNX0lCTE9DSz1tCkNPTkZJ
R19UQ01fRklMRUlPPW0KQ09ORklHX1RDTV9QU0NTST1tCiMgQ09ORklHX1RDTV9VU0VSMiBp
cyBub3Qgc2V0CkNPTkZJR19MT09QQkFDS19UQVJHRVQ9bQpDT05GSUdfVENNX0ZDPW0KQ09O
RklHX0lTQ1NJX1RBUkdFVD1tCkNPTkZJR19TQlBfVEFSR0VUPW0KQ09ORklHX0ZVU0lPTj15
CkNPTkZJR19GVVNJT05fU1BJPW0KQ09ORklHX0ZVU0lPTl9GQz1tCkNPTkZJR19GVVNJT05f
U0FTPW0KQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOApDT05GSUdfRlVTSU9OX0NUTD1tCkNP
TkZJR19GVVNJT05fTEFOPW0KIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAoK
IwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKIwpDT05GSUdfRklSRVdJUkU9bQpD
T05GSUdfRklSRVdJUkVfT0hDST1tCkNPTkZJR19GSVJFV0lSRV9TQlAyPW0KQ09ORklHX0ZJ
UkVXSVJFX05FVD1tCkNPTkZJR19GSVJFV0lSRV9OT1NZPW0KQ09ORklHX01BQ0lOVE9TSF9E
UklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkK
Q09ORklHX01JST1tCkNPTkZJR19ORVRfQ09SRT15CkNPTkZJR19CT05ESU5HPW0KQ09ORklH
X0RVTU1ZPW0KQ09ORklHX0VRVUFMSVpFUj1tCkNPTkZJR19ORVRfRkM9eQpDT05GSUdfSUZC
PW0KQ09ORklHX05FVF9URUFNPW0KQ09ORklHX05FVF9URUFNX01PREVfQlJPQURDQVNUPW0K
Q09ORklHX05FVF9URUFNX01PREVfUk9VTkRST0JJTj1tCkNPTkZJR19ORVRfVEVBTV9NT0RF
X1JBTkRPTT1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCkNPTkZJR19O
RVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KQ09ORklHX01BQ1ZMQU49bQpDT05GSUdfTUFD
VlRBUD1tCkNPTkZJR19JUFZMQU49bQpDT05GSUdfVlhMQU49bQpDT05GSUdfTkVUQ09OU09M
RT1tCkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpDT05GSUdfTkVUUE9MTD15CkNPTkZJ
R19ORVRfUE9MTF9DT05UUk9MTEVSPXkKQ09ORklHX1RVTj1tCkNPTkZJR19WRVRIPW0KQ09O
RklHX1ZJUlRJT19ORVQ9bQpDT05GSUdfTkxNT049bQpDT05GSUdfU1VOR0VNX1BIWT1tCkNP
TkZJR19BUkNORVQ9bQpDT05GSUdfQVJDTkVUXzEyMDE9bQpDT05GSUdfQVJDTkVUXzEwNTE9
bQpDT05GSUdfQVJDTkVUX1JBVz1tCkNPTkZJR19BUkNORVRfQ0FQPW0KQ09ORklHX0FSQ05F
VF9DT005MHh4PW0KQ09ORklHX0FSQ05FVF9DT005MHh4SU89bQpDT05GSUdfQVJDTkVUX1JJ
TV9JPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMD1tCkNPTkZJR19BUkNORVRfQ09NMjAwMjBf
UENJPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DUz1tCkNPTkZJR19BVE1fRFJJVkVSUz15
CkNPTkZJR19BVE1fRFVNTVk9bQpDT05GSUdfQVRNX1RDUD1tCkNPTkZJR19BVE1fTEFOQUk9
bQpDT05GSUdfQVRNX0VOST1tCiMgQ09ORklHX0FUTV9FTklfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19BVE1fRU5JX1RVTkVfQlVSU1QgaXMgbm90IHNldApDT05GSUdfQVRNX0ZJUkVT
VFJFQU09bQpDT05GSUdfQVRNX1pBVE09bQojIENPTkZJR19BVE1fWkFUTV9ERUJVRyBpcyBu
b3Qgc2V0CkNPTkZJR19BVE1fTklDU1RBUj1tCkNPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VO
ST15CkNPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDU9eQpDT05GSUdfQVRNX0lEVDc3
MjUyPW0KIyBDT05GSUdfQVRNX0lEVDc3MjUyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldApDT05GSUdfQVRNX0lEVDc3MjUyX1VT
RV9TVU5JPXkKQ09ORklHX0FUTV9BTUJBU1NBRE9SPW0KIyBDT05GSUdfQVRNX0FNQkFTU0FE
T1JfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0hPUklaT049bQojIENPTkZJR19BVE1f
SE9SSVpPTl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fSUE9bQojIENPTkZJR19BVE1f
SUFfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0ZPUkUyMDBFPW0KIyBDT05GSUdfQVRN
X0ZPUkUyMDBFX1VTRV9UQVNLTEVUIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9GT1JFMjAwRV9U
WF9SRVRSWT0xNgpDT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKQ09ORklHX0FUTV9IRT1t
CkNPTkZJR19BVE1fSEVfVVNFX1NVTkk9eQpDT05GSUdfQVRNX1NPTE9TPW0KCiMKIyBDQUlG
IHRyYW5zcG9ydCBkcml2ZXJzCiMKQ09ORklHX1ZIT1NUX05FVD1tCkNPTkZJR19WSE9TVF9T
Q1NJPW0KQ09ORklHX1ZIT1NUX1JJTkc9bQpDT05GSUdfVkhPU1Q9bQoKIwojIERpc3RyaWJ1
dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVycwojCiMgQ09ORklHX05FVF9EU0FfTVY4
OEU2WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUg
aXMgbm90IHNldApDT05GSUdfRVRIRVJORVQ9eQpDT05GSUdfTURJTz1tCkNPTkZJR19ORVRf
VkVORE9SXzNDT009eQpDT05GSUdfUENNQ0lBXzNDNTc0PW0KQ09ORklHX1BDTUNJQV8zQzU4
OT1tCkNPTkZJR19WT1JURVg9bQpDT05GSUdfVFlQSE9PTj1tCkNPTkZJR19ORVRfVkVORE9S
X0FEQVBURUM9eQpDT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCkNPTkZJR19ORVRfVkVORE9S
X0FHRVJFPXkKQ09ORklHX0VUMTMxWD1tCkNPTkZJR19ORVRfVkVORE9SX0FMVEVPTj15CkNP
TkZJR19BQ0VOSUM9bQojIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQK
IyBDT05GSUdfQUxURVJBX1RTRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FNRD15
CkNPTkZJR19BTUQ4MTExX0VUSD1tCkNPTkZJR19QQ05FVDMyPW0KQ09ORklHX1BDTUNJQV9O
TUNMQU49bQojIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0FUSEVST1M9eQpDT05GSUdfQVRMMj1tCkNPTkZJR19BVEwxPW0KQ09ORklHX0FU
TDFFPW0KQ09ORklHX0FUTDFDPW0KQ09ORklHX0FMWD1tCkNPTkZJR19ORVRfQ0FERU5DRT15
CiMgQ09ORklHX01BQ0IgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTT15
CkNPTkZJR19CNDQ9bQpDT05GSUdfQjQ0X1BDSV9BVVRPU0VMRUNUPXkKQ09ORklHX0I0NF9Q
Q0lDT1JFX0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQ0X1BDST15CiMgQ09ORklHX0JDTUdFTkVU
IGlzIG5vdCBzZXQKQ09ORklHX0JOWDI9bQpDT05GSUdfQ05JQz1tCkNPTkZJR19USUdPTjM9
bQpDT05GSUdfQk5YMlg9bQpDT05GSUdfQk5YMlhfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRP
Ul9CUk9DQURFPXkKQ09ORklHX0JOQT1tCkNPTkZJR19ORVRfVkVORE9SX0NIRUxTSU89eQpD
T05GSUdfQ0hFTFNJT19UMT1tCkNPTkZJR19DSEVMU0lPX1QxXzFHPXkKQ09ORklHX0NIRUxT
SU9fVDM9bQpDT05GSUdfQ0hFTFNJT19UND1tCkNPTkZJR19DSEVMU0lPX1Q0X0RDQj15CiMg
Q09ORklHX0NIRUxTSU9fVDRfRkNPRSBpcyBub3Qgc2V0CkNPTkZJR19DSEVMU0lPX1Q0VkY9
bQpDT05GSUdfTkVUX1ZFTkRPUl9DSVNDTz15CkNPTkZJR19FTklDPW0KIyBDT05GSUdfQ1hf
RUNBVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9ERUM9eQpDT05GSUdfTkVUX1RVTElQPXkKQ09ORklHX0RFMjEwNFg9bQpDT05GSUdf
REUyMTA0WF9EU0w9MApDT05GSUdfVFVMSVA9bQojIENPTkZJR19UVUxJUF9NV0kgaXMgbm90
IHNldAojIENPTkZJR19UVUxJUF9NTUlPIGlzIG5vdCBzZXQKQ09ORklHX1RVTElQX05BUEk9
eQpDT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKIyBDT05GSUdfREU0WDUgaXMg
bm90IHNldApDT05GSUdfV0lOQk9ORF84NDA9bQpDT05GSUdfRE05MTAyPW0KQ09ORklHX1VM
STUyNlg9bQpDT05GSUdfUENNQ0lBX1hJUkNPTT1tCkNPTkZJR19ORVRfVkVORE9SX0RMSU5L
PXkKQ09ORklHX0RMMks9bQpDT05GSUdfU1VOREFOQ0U9bQojIENPTkZJR19TVU5EQU5DRV9N
TUlPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRU1VTEVYPXkKQ09ORklHX0JFMk5F
VD1tCkNPTkZJR19CRTJORVRfVlhMQU49eQpDT05GSUdfTkVUX1ZFTkRPUl9FWEFSPXkKQ09O
RklHX1MySU89bQpDT05GSUdfVlhHRT1tCiMgQ09ORklHX1ZYR0VfREVCVUdfVFJBQ0VfQUxM
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRlVKSVRTVT15CkNPTkZJR19QQ01DSUFf
Rk1WSjE4WD1tCkNPTkZJR19ORVRfVkVORE9SX0hQPXkKQ09ORklHX0hQMTAwPW0KQ09ORklH
X05FVF9WRU5ET1JfSU5URUw9eQpDT05GSUdfRTEwMD1tCkNPTkZJR19FMTAwMD1tCkNPTkZJ
R19FMTAwMEU9bQpDT05GSUdfSUdCPW0KQ09ORklHX0lHQl9IV01PTj15CkNPTkZJR19JR0Jf
RENBPXkKQ09ORklHX0lHQlZGPW0KQ09ORklHX0lYR0I9bQpDT05GSUdfSVhHQkU9bQpDT05G
SUdfSVhHQkVfVlhMQU49eQpDT05GSUdfSVhHQkVfSFdNT049eQpDT05GSUdfSVhHQkVfRENB
PXkKQ09ORklHX0lYR0JFX0RDQj15CkNPTkZJR19JWEdCRVZGPW0KQ09ORklHX0k0MEU9bQpD
T05GSUdfSTQwRV9WWExBTj15CkNPTkZJR19JNDBFX0RDQj15CkNPTkZJR19JNDBFX0ZDT0U9
eQpDT05GSUdfSTQwRVZGPW0KIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldApDT05GSUdfTkVU
X1ZFTkRPUl9JODI1WFg9eQpDT05GSUdfSVAxMDAwPW0KQ09ORklHX0pNRT1tCkNPTkZJR19O
RVRfVkVORE9SX01BUlZFTEw9eQojIENPTkZJR19NVk1ESU8gaXMgbm90IHNldApDT05GSUdf
U0tHRT1tCiMgQ09ORklHX1NLR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0tHRV9HRU5F
U0lTPXkKQ09ORklHX1NLWTI9bQojIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfTUVMTEFOT1g9eQpDT05GSUdfTUxYNF9FTj1tCkNPTkZJR19NTFg0
X0VOX0RDQj15CkNPTkZJR19NTFg0X0VOX1ZYTEFOPXkKQ09ORklHX01MWDRfQ09SRT1tCkNP
TkZJR19NTFg0X0RFQlVHPXkKQ09ORklHX01MWDVfQ09SRT1tCkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldApDT05GSUdfS1NaODg0
WF9QQ0k9bQpDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVA9eQojIENPTkZJR19FTkMyOEo2
MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQpDT05GSUdfTVlSSTEwR0U9
bQpDT05GSUdfTVlSSTEwR0VfRENBPXkKQ09ORklHX0ZFQUxOWD1tCkNPTkZJR19ORVRfVkVO
RE9SX05BVFNFTUk9eQpDT05GSUdfTkFUU0VNST1tCkNPTkZJR19OUzgzODIwPW0KQ09ORklH
X05FVF9WRU5ET1JfODM5MD15CkNPTkZJR19QQ01DSUFfQVhORVQ9bQpDT05GSUdfTkUyS19Q
Q0k9bQpDT05GSUdfUENNQ0lBX1BDTkVUPW0KQ09ORklHX05FVF9WRU5ET1JfTlZJRElBPXkK
Q09ORklHX0ZPUkNFREVUSD1tCkNPTkZJR19ORVRfVkVORE9SX09LST15CiMgQ09ORklHX0VU
SE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9QQUNLRVRfRU5HSU5FPXkKQ09ORklHX0hBTUFD
SEk9bQpDT05GSUdfWUVMTE9XRklOPW0KQ09ORklHX05FVF9WRU5ET1JfUUxPR0lDPXkKQ09O
RklHX1FMQTNYWFg9bQpDT05GSUdfUUxDTklDPW0KQ09ORklHX1FMQ05JQ19TUklPVj15CkNP
TkZJR19RTENOSUNfRENCPXkKQ09ORklHX1FMQ05JQ19WWExBTj15CkNPTkZJR19RTENOSUNf
SFdNT049eQpDT05GSUdfUUxHRT1tCkNPTkZJR19ORVRYRU5fTklDPW0KQ09ORklHX05FVF9W
RU5ET1JfUVVBTENPTU09eQpDT05GSUdfTkVUX1ZFTkRPUl9SRUFMVEVLPXkKIyBDT05GSUdf
QVRQIGlzIG5vdCBzZXQKQ09ORklHXzgxMzlDUD1tCkNPTkZJR184MTM5VE9PPW0KIyBDT05G
SUdfODEzOVRPT19QSU8gaXMgbm90IHNldApDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9
eQpDT05GSUdfODEzOVRPT184MTI5PXkKIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMg
bm90IHNldApDT05GSUdfUjgxNjk9bQpDT05GSUdfTkVUX1ZFTkRPUl9SREM9eQpDT05GSUdf
UjYwNDA9bQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9T
QU1TVU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZF
TkRPUl9TRUVRIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0lMQU49eQpDT05GSUdf
U0M5MjAzMT1tCkNPTkZJR19ORVRfVkVORE9SX1NJUz15CkNPTkZJR19TSVM5MDA9bQpDT05G
SUdfU0lTMTkwPW0KQ09ORklHX1NGQz1tCkNPTkZJR19TRkNfTVREPXkKQ09ORklHX1NGQ19N
Q0RJX01PTj15CkNPTkZJR19TRkNfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkK
Q09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCkNPTkZJR19FUElDMTAwPW0KIyBDT05GSUdfU01T
QzkxMVggaXMgbm90IHNldApDT05GSUdfU01TQzk0MjA9bQpDT05GSUdfTkVUX1ZFTkRPUl9T
VE1JQ1JPPXkKIyBDT05GSUdfU1RNTUFDX0VUSCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX1NVTj15CkNPTkZJR19IQVBQWU1FQUw9bQpDT05GSUdfU1VOR0VNPW0KQ09ORklHX0NB
U1NJTkk9bQpDT05GSUdfTklVPW0KQ09ORklHX05FVF9WRU5ET1JfVEVIVVRJPXkKQ09ORklH
X1RFSFVUST1tCkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05GSUdfVElfQ1BTV19BTEUg
aXMgbm90IHNldApDT05GSUdfVExBTj1tCkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CkNPTkZJ
R19WSUFfUkhJTkU9bQojIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSUFfVkVMT0NJVFk9bQpDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19X
SVpORVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT009eQpDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQpD
T05GSUdfRkREST15CkNPTkZJR19ERUZYWD1tCiMgQ09ORklHX0RFRlhYX01NSU8gaXMgbm90
IHNldApDT05GSUdfU0tGUD1tCkNPTkZJR19ISVBQST15CkNPTkZJR19ST0FEUlVOTkVSPW0K
IyBDT05GSUdfUk9BRFJVTk5FUl9MQVJHRV9SSU5HUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
U0IxMDAwPW0KQ09ORklHX1BIWUxJQj1tCgojCiMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwoj
CkNPTkZJR19BVDgwM1hfUEhZPW0KQ09ORklHX0FNRF9QSFk9bQpDT05GSUdfTUFSVkVMTF9Q
SFk9bQpDT05GSUdfREFWSUNPTV9QSFk9bQpDT05GSUdfUVNFTUlfUEhZPW0KQ09ORklHX0xY
VF9QSFk9bQpDT05GSUdfQ0lDQURBX1BIWT1tCkNPTkZJR19WSVRFU1NFX1BIWT1tCkNPTkZJ
R19TTVNDX1BIWT1tCkNPTkZJR19CUk9BRENPTV9QSFk9bQojIENPTkZJR19CQ003WFhYX1BI
WSBpcyBub3Qgc2V0CkNPTkZJR19CQ004N1hYX1BIWT1tCkNPTkZJR19JQ1BMVVNfUEhZPW0K
Q09ORklHX1JFQUxURUtfUEhZPW0KQ09ORklHX05BVElPTkFMX1BIWT1tCkNPTkZJR19TVEUx
MFhQPW0KQ09ORklHX0xTSV9FVDEwMTFDX1BIWT1tCkNPTkZJR19NSUNSRUxfUEhZPW0KIyBD
T05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5v
dCBzZXQKIyBDT05GSUdfTURJT19CQ01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUlD
UkVMX0tTODk5NU1BIGlzIG5vdCBzZXQKQ09ORklHX1BMSVA9bQpDT05GSUdfUFBQPW0KQ09O
RklHX1BQUF9CU0RDT01QPW0KQ09ORklHX1BQUF9ERUZMQVRFPW0KQ09ORklHX1BQUF9GSUxU
RVI9eQpDT05GSUdfUFBQX01QUEU9bQpDT05GSUdfUFBQX01VTFRJTElOSz15CkNPTkZJR19Q
UFBPQVRNPW0KQ09ORklHX1BQUE9FPW0KQ09ORklHX1BQVFA9bQpDT05GSUdfUFBQT0wyVFA9
bQpDT05GSUdfUFBQX0FTWU5DPW0KQ09ORklHX1BQUF9TWU5DX1RUWT1tCkNPTkZJR19TTElQ
PW0KQ09ORklHX1NMSEM9bQpDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKQ09ORklHX1NMSVBf
U01BUlQ9eQpDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKCiMKIyBIb3N0LXNpZGUgVVNCIHN1
cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnQKIwpDT05G
SUdfVVNCX05FVF9EUklWRVJTPW0KQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdF
VEg9bQpDT05GSUdfVVNCX1BFR0FTVVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdf
VVNCX1JUTDgxNTI9bQpDT05GSUdfVVNCX1VTQk5FVD1tCkNPTkZJR19VU0JfTkVUX0FYODgx
N1g9bQpDT05GSUdfVVNCX05FVF9BWDg4MTc5XzE3OEE9bQpDT05GSUdfVVNCX05FVF9DRENF
VEhFUj1tCkNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQpDT05GSUdfVVNCX05FVF9DRENfTkNN
PW0KQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ009bQpDT05GSUdfVVNCX05FVF9DRENf
TUJJTT1tCkNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCkNPTkZJR19VU0JfTkVUX1NSOTcwMD1t
CkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3NVhYPW0KQ09O
RklHX1VTQl9ORVRfU01TQzk1WFg9bQpDT05GSUdfVVNCX05FVF9HTDYyMEE9bQpDT05GSUdf
VVNCX05FVF9ORVQxMDgwPW0KQ09ORklHX1VTQl9ORVRfUExVU0I9bQpDT05GSUdfVVNCX05F
VF9NQ1M3ODMwPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCkNPTkZJR19VU0JfTkVU
X0NEQ19TVUJTRVQ9bQpDT05GSUdfVVNCX0FMSV9NNTYzMj15CkNPTkZJR19VU0JfQU4yNzIw
PXkKQ09ORklHX1VTQl9CRUxLSU49eQpDT05GSUdfVVNCX0FSTUxJTlVYPXkKQ09ORklHX1VT
Ql9FUFNPTjI4ODg9eQpDT05GSUdfVVNCX0tDMjE5MD15CkNPTkZJR19VU0JfTkVUX1pBVVJV
Uz1tCkNPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIPW0KQ09ORklHX1VTQl9ORVRfS0FMTUlB
PW0KQ09ORklHX1VTQl9ORVRfUU1JX1dXQU49bQpDT05GSUdfVVNCX0hTTz1tCkNPTkZJR19V
U0JfTkVUX0lOVDUxWDE9bQpDT05GSUdfVVNCX0NEQ19QSE9ORVQ9bQpDT05GSUdfVVNCX0lQ
SEVUSD1tCkNPTkZJR19VU0JfU0lFUlJBX05FVD1tCkNPTkZJR19VU0JfVkw2MDA9bQpDT05G
SUdfV0xBTj15CkNPTkZJR19QQ01DSUFfUkFZQ1M9bQpDT05GSUdfTElCRVJUQVNfVEhJTkZJ
Uk09bQojIENPTkZJR19MSUJFUlRBU19USElORklSTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJ
R19MSUJFUlRBU19USElORklSTV9VU0I9bQpDT05GSUdfQUlSTz1tCkNPTkZJR19BVE1FTD1t
CkNPTkZJR19QQ0lfQVRNRUw9bQpDT05GSUdfUENNQ0lBX0FUTUVMPW0KQ09ORklHX0FUNzZD
NTBYX1VTQj1tCkNPTkZJR19BSVJPX0NTPW0KQ09ORklHX1BDTUNJQV9XTDM1MDE9bQojIENP
TkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9aRDEyMDE9bQpDT05GSUdfVVNC
X05FVF9STkRJU19XTEFOPW0KQ09ORklHX1JUTDgxODA9bQpDT05GSUdfUlRMODE4Nz1tCkNP
TkZJR19SVEw4MTg3X0xFRFM9eQpDT05GSUdfQURNODIxMT1tCkNPTkZJR19NQUM4MDIxMV9I
V1NJTT1tCkNPTkZJR19NV0w4Sz1tCkNPTkZJR19BVEhfQ09NTU9OPW0KQ09ORklHX0FUSF9D
QVJEUz1tCiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVEg1Sz1tCiMg
Q09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINUtfVFJBQ0VSIGlz
IG5vdCBzZXQKQ09ORklHX0FUSDVLX1BDST15CkNPTkZJR19BVEg5S19IVz1tCkNPTkZJR19B
VEg5S19DT01NT049bQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBPUlQ9eQpDT05GSUdfQVRI
OUs9bQpDT05GSUdfQVRIOUtfUENJPXkKIyBDT05GSUdfQVRIOUtfQUhCIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIOUtfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFD
SyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CkNPTkZJR19BVEg5
S19SRktJTEw9eQojIENPTkZJR19BVEg5S19DSEFOTkVMX0NPTlRFWFQgaXMgbm90IHNldApD
T05GSUdfQVRIOUtfUENPRU09eQpDT05GSUdfQVRIOUtfSFRDPW0KIyBDT05GSUdfQVRIOUtf
SFRDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdfQ0FSTDkxNzA9bQpDT05GSUdfQ0FSTDkx
NzBfTEVEUz15CkNPTkZJR19DQVJMOTE3MF9XUEM9eQojIENPTkZJR19DQVJMOTE3MF9IV1JO
RyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0w9bQpDT05GSUdfQVRINktMX1NESU89bQpDT05G
SUdfQVRINktMX1VTQj1tCiMgQ09ORklHX0FUSDZLTF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FUSDZLTF9UUkFDSU5HIGlzIG5vdCBzZXQKQ09ORklHX0FSNTUyMz1tCkNPTkZJR19X
SUw2MjEwPW0KQ09ORklHX1dJTDYyMTBfSVNSX0NPUj15CkNPTkZJR19XSUw2MjEwX1RSQUNJ
Tkc9eQpDT05GSUdfQVRIMTBLPW0KQ09ORklHX0FUSDEwS19QQ0k9bQojIENPTkZJR19BVEgx
MEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVCVUdGUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0NOMzZYWCBp
cyBub3Qgc2V0CkNPTkZJR19CNDM9bQpDT05GSUdfQjQzX0JDTUE9eQpDT05GSUdfQjQzX1NT
Qj15CkNPTkZJR19CNDNfQlVTRVNfQkNNQV9BTkRfU1NCPXkKIyBDT05GSUdfQjQzX0JVU0VT
X0JDTUEgaXMgbm90IHNldAojIENPTkZJR19CNDNfQlVTRVNfU1NCIGlzIG5vdCBzZXQKQ09O
RklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkNPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNU
PXkKQ09ORklHX0I0M19QQ01DSUE9eQpDT05GSUdfQjQzX1NESU89eQpDT05GSUdfQjQzX0JD
TUFfUElPPXkKQ09ORklHX0I0M19QSU89eQpDT05GSUdfQjQzX1BIWV9HPXkKQ09ORklHX0I0
M19QSFlfTj15CkNPTkZJR19CNDNfUEhZX0xQPXkKQ09ORklHX0I0M19QSFlfSFQ9eQpDT05G
SUdfQjQzX0xFRFM9eQpDT05GSUdfQjQzX0hXUk5HPXkKIyBDT05GSUdfQjQzX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0I0M0xFR0FDWT1tCkNPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9T
RUxFQ1Q9eQpDT05GSUdfQjQzTEVHQUNZX1BDSUNPUkVfQVVUT1NFTEVDVD15CkNPTkZJR19C
NDNMRUdBQ1lfTEVEUz15CkNPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQpDT05GSUdfQjQzTEVH
QUNZX0RFQlVHPXkKQ09ORklHX0I0M0xFR0FDWV9ETUE9eQpDT05GSUdfQjQzTEVHQUNZX1BJ
Tz15CkNPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CiMgQ09ORklHX0I0M0xF
R0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0I0M0xFR0FDWV9QSU9fTU9ERSBp
cyBub3Qgc2V0CkNPTkZJR19CUkNNVVRJTD1tCkNPTkZJR19CUkNNU01BQz1tCkNPTkZJR19C
UkNNRk1BQz1tCkNPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDPXkKQ09ORklHX0JSQ01GTUFD
X1BST1RPX01TR0JVRj15CkNPTkZJR19CUkNNRk1BQ19TRElPPXkKQ09ORklHX0JSQ01GTUFD
X1VTQj15CkNPTkZJR19CUkNNRk1BQ19QQ0lFPXkKIyBDT05GSUdfQlJDTV9UUkFDSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNPTkZJR19IT1NUQVA9bQpD
T05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKIyBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFN
IGlzIG5vdCBzZXQKQ09ORklHX0hPU1RBUF9QTFg9bQpDT05GSUdfSE9TVEFQX1BDST1tCkNP
TkZJR19IT1NUQVBfQ1M9bQojIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKQ09ORklHX0lQ
VzIyMDA9bQpDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKQ09ORklHX0lQVzIyMDBfUkFESU9U
QVA9eQpDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUz15CkNPTkZJR19JUFcyMjAwX1FPUz15
CiMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfTElCSVBXPW0KIyBD
T05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lXTFdJRkk9bQpDT05GSUdf
SVdMV0lGSV9MRURTPXkKQ09ORklHX0lXTERWTT1tCkNPTkZJR19JV0xNVk09bQpDT05GSUdf
SVdMV0lGSV9PUE1PREVfTU9EVUxBUj15CiMgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVS
SU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMV0lGSV9VQVBTRCBpcyBub3Qgc2V0CgojCiMg
RGVidWdnaW5nIE9wdGlvbnMKIwojIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19JV0xF
R0FDWT1tCkNPTkZJR19JV0w0OTY1PW0KQ09ORklHX0lXTDM5NDU9bQoKIwojIGl3bDM5NDUg
LyBpd2w0OTY1IERlYnVnZ2luZyBPcHRpb25zCiMKIyBDT05GSUdfSVdMRUdBQ1lfREVCVUcg
aXMgbm90IHNldApDT05GSUdfTElCRVJUQVM9bQpDT05GSUdfTElCRVJUQVNfVVNCPW0KQ09O
RklHX0xJQkVSVEFTX0NTPW0KQ09ORklHX0xJQkVSVEFTX1NESU89bQojIENPTkZJR19MSUJF
UlRBU19TUEkgaXMgbm90IHNldAojIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19MSUJFUlRBU19NRVNIPXkKQ09ORklHX0hFUk1FUz1tCiMgQ09ORklHX0hFUk1F
U19QUklTTSBpcyBub3Qgc2V0CkNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CkNP
TkZJR19QTFhfSEVSTUVTPW0KQ09ORklHX1RNRF9IRVJNRVM9bQpDT05GSUdfTk9SVEVMX0hF
Uk1FUz1tCkNPTkZJR19QQ01DSUFfSEVSTUVTPW0KQ09ORklHX1BDTUNJQV9TUEVDVFJVTT1t
CkNPTkZJR19PUklOT0NPX1VTQj1tCkNPTkZJR19QNTRfQ09NTU9OPW0KQ09ORklHX1A1NF9V
U0I9bQpDT05GSUdfUDU0X1BDST1tCiMgQ09ORklHX1A1NF9TUEkgaXMgbm90IHNldApDT05G
SUdfUDU0X0xFRFM9eQpDT05GSUdfUlQyWDAwPW0KQ09ORklHX1JUMjQwMFBDST1tCkNPTkZJ
R19SVDI1MDBQQ0k9bQpDT05GSUdfUlQ2MVBDST1tCkNPTkZJR19SVDI4MDBQQ0k9bQpDT05G
SUdfUlQyODAwUENJX1JUMzNYWD15CkNPTkZJR19SVDI4MDBQQ0lfUlQzNVhYPXkKQ09ORklH
X1JUMjgwMFBDSV9SVDUzWFg9eQpDT05GSUdfUlQyODAwUENJX1JUMzI5MD15CkNPTkZJR19S
VDI1MDBVU0I9bQpDT05GSUdfUlQ3M1VTQj1tCkNPTkZJR19SVDI4MDBVU0I9bQpDT05GSUdf
UlQyODAwVVNCX1JUMzNYWD15CkNPTkZJR19SVDI4MDBVU0JfUlQzNVhYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDM1NzM9eQpDT05GSUdfUlQyODAwVVNCX1JUNTNYWD15CkNPTkZJR19SVDI4
MDBVU0JfUlQ1NVhYPXkKIyBDT05GSUdfUlQyODAwVVNCX1VOS05PV04gaXMgbm90IHNldApD
T05GSUdfUlQyODAwX0xJQj1tCkNPTkZJR19SVDI4MDBfTElCX01NSU89bQpDT05GSUdfUlQy
WDAwX0xJQl9NTUlPPW0KQ09ORklHX1JUMlgwMF9MSUJfUENJPW0KQ09ORklHX1JUMlgwMF9M
SUJfVVNCPW0KQ09ORklHX1JUMlgwMF9MSUI9bQpDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FS
RT15CkNPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15CkNPTkZJR19SVDJYMDBfTElCX0xFRFM9
eQojIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfUlRMX0NBUkRTPW0K
Q09ORklHX1JUTDgxOTJDRT1tCkNPTkZJR19SVEw4MTkyU0U9bQpDT05GSUdfUlRMODE5MkRF
PW0KQ09ORklHX1JUTDg3MjNBRT1tCkNPTkZJR19SVEw4NzIzQkU9bQpDT05GSUdfUlRMODE4
OEVFPW0KQ09ORklHX1JUTDgxOTJFRT1tCkNPTkZJR19SVEw4ODIxQUU9bQpDT05GSUdfUlRM
ODE5MkNVPW0KQ09ORklHX1JUTFdJRkk9bQpDT05GSUdfUlRMV0lGSV9QQ0k9bQpDT05GSUdf
UlRMV0lGSV9VU0I9bQojIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1JUTDgxOTJDX0NPTU1PTj1tCkNPTkZJR19SVEw4NzIzX0NPTU1PTj1tCkNPTkZJR19SVExC
VENPRVhJU1Q9bQojIENPTkZJR19XTF9USSBpcyBub3Qgc2V0CkNPTkZJR19aRDEyMTFSVz1t
CiMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVg9bQpD
T05GSUdfTVdJRklFWF9TRElPPW0KQ09ORklHX01XSUZJRVhfUENJRT1tCkNPTkZJR19NV0lG
SUVYX1VTQj1tCiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19SU0lfOTFYPW0K
Q09ORklHX1JTSV9ERUJVR0ZTPXkKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApDT05G
SUdfUlNJX1VTQj1tCgojCiMgV2lNQVggV2lyZWxlc3MgQnJvYWRiYW5kIGRldmljZXMKIwpD
T05GSUdfV0lNQVhfSTI0MDBNPW0KQ09ORklHX1dJTUFYX0kyNDAwTV9VU0I9bQpDT05GSUdf
V0lNQVhfSTI0MDBNX0RFQlVHX0xFVkVMPTgKQ09ORklHX1dBTj15CkNPTkZJR19MQU5NRURJ
QT1tCkNPTkZJR19IRExDPW0KQ09ORklHX0hETENfUkFXPW0KQ09ORklHX0hETENfUkFXX0VU
SD1tCkNPTkZJR19IRExDX0NJU0NPPW0KQ09ORklHX0hETENfRlI9bQpDT05GSUdfSERMQ19Q
UFA9bQojIENPTkZJR19IRExDX1gyNSBpcyBub3Qgc2V0CkNPTkZJR19QQ0kyMDBTWU49bQpD
T05GSUdfV0FOWEw9bQojIENPTkZJR19QQzMwMFRPTyBpcyBub3Qgc2V0CkNPTkZJR19GQVJT
WU5DPW0KQ09ORklHX0RTQ0M0PW0KQ09ORklHX0RTQ0M0X1BDSVNZTkM9eQpDT05GSUdfRFND
QzRfUENJX1JTVD15CkNPTkZJR19ETENJPW0KQ09ORklHX0RMQ0lfTUFYPTgKIyBDT05GSUdf
U0JOSSBpcyBub3Qgc2V0CkNPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9bQpDT05GSUdfWEVO
X05FVERFVl9GUk9OVEVORD1tCkNPTkZJR19YRU5fTkVUREVWX0JBQ0tFTkQ9bQpDT05GSUdf
Vk1YTkVUMz1tCkNPTkZJR19IWVBFUlZfTkVUPW0KQ09ORklHX0lTRE49eQojIENPTkZJR19J
U0ROX0k0TCBpcyBub3Qgc2V0CkNPTkZJR19JU0ROX0NBUEk9bQpDT05GSUdfQ0FQSV9UUkFD
RT15CkNPTkZJR19JU0ROX0NBUElfQ0FQSTIwPW0KQ09ORklHX0lTRE5fQ0FQSV9NSURETEVX
QVJFPXkKCiMKIyBDQVBJIGhhcmR3YXJlIGRyaXZlcnMKIwpDT05GSUdfQ0FQSV9BVk09eQpD
T05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0k9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQ
Q0lWND15CkNPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCkNPTkZJR19JU0ROX0RS
Vl9BVk1CMV9BVk1fQ1M9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfVDFQQ0k9bQpDT05GSUdf
SVNETl9EUlZfQVZNQjFfQzQ9bQpDT05GSUdfQ0FQSV9FSUNPTj15CkNPTkZJR19JU0ROX0RJ
VkFTPW0KQ09ORklHX0lTRE5fRElWQVNfQlJJUENJPXkKQ09ORklHX0lTRE5fRElWQVNfUFJJ
UENJPXkKQ09ORklHX0lTRE5fRElWQVNfRElWQUNBUEk9bQpDT05GSUdfSVNETl9ESVZBU19V
U0VSSURJPW0KQ09ORklHX0lTRE5fRElWQVNfTUFJTlQ9bQpDT05GSUdfSVNETl9EUlZfR0lH
QVNFVD1tCkNPTkZJR19HSUdBU0VUX0NBUEk9eQojIENPTkZJR19HSUdBU0VUX0RVTU1ZTEwg
aXMgbm90IHNldApDT05GSUdfR0lHQVNFVF9CQVNFPW0KQ09ORklHX0dJR0FTRVRfTTEwNT1t
CkNPTkZJR19HSUdBU0VUX00xMDE9bQojIENPTkZJR19HSUdBU0VUX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0hZU0ROPW0KQ09ORklHX0hZU0ROX0NBUEk9eQpDT05GSUdfTUlTRE49bQpD
T05GSUdfTUlTRE5fRFNQPW0KQ09ORklHX01JU0ROX0wxT0lQPW0KCiMKIyBtSVNETiBoYXJk
d2FyZSBkcml2ZXJzCiMKQ09ORklHX01JU0ROX0hGQ1BDST1tCkNPTkZJR19NSVNETl9IRkNN
VUxUST1tCkNPTkZJR19NSVNETl9IRkNVU0I9bQpDT05GSUdfTUlTRE5fQVZNRlJJVFo9bQpD
T05GSUdfTUlTRE5fU1BFRURGQVg9bQpDT05GSUdfTUlTRE5fSU5GSU5FT049bQpDT05GSUdf
TUlTRE5fVzY2OTI9bQojIENPTkZJR19NSVNETl9ORVRKRVQgaXMgbm90IHNldApDT05GSUdf
TUlTRE5fSVBBQz1tCkNPTkZJR19NSVNETl9JU0FSPW0KCiMKIyBJbnB1dCBkZXZpY2Ugc3Vw
cG9ydAojCkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KQ09ORklH
X0lOUFVUX1BPTExERVY9bQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD1tCiMgQ09ORklHX0lO
UFVUX01BVFJJWEtNQVAgaXMgbm90IHNldAoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwpD
T05GSUdfSU5QVVRfTU9VU0VERVY9eQpDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQpD
T05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNApDT05GSUdfSU5QVVRfTU9VU0VE
RVZfU0NSRUVOX1k9NzY4CkNPTkZJR19JTlBVVF9KT1lERVY9bQpDT05GSUdfSU5QVVRfRVZE
RVY9bQojIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNl
IERyaXZlcnMKIwpDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQURQ
NTU4OD1tCiMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODkgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfQVRLQkQ9eQojIENPTkZJR19LRVlCT0FSRF9RVDEwNzAgaXMgbm90IHNldApDT05G
SUdfS0VZQk9BUkRfUVQyMTYwPW0KQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KIyBDT05GSUdf
S0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0dQSU9fUE9MTEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0tFWUJPQVJEX1RDQTg0MTggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NQVRS
SVggaXMgbm90IHNldApDT05GSUdfS0VZQk9BUkRfTE04MzIzPW0KIyBDT05GSUdfS0VZQk9B
UkRfTE04MzMzIGlzIG5vdCBzZXQKQ09ORklHX0tFWUJPQVJEX01BWDczNTk9bQojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMg
bm90IHNldApDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KQ09ORklHX0tFWUJPQVJEX09QRU5D
T1JFUz1tCiMgQ09ORklHX0tFWUJPQVJEX1NBTVNVTkcgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfU1RPV0FXQVk9bQpDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KQ09ORklHX0tFWUJP
QVJEX1hUS0JEPW0KQ09ORklHX0lOUFVUX01PVVNFPXkKQ09ORklHX01PVVNFX1BTMj1tCkNP
TkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKQ09O
RklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQpDT05GSUdfTU9VU0VfUFMyX0NZUFJFU1M9eQpD
T05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5U
PXkKQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSD15CkNPTkZJR19NT1VTRV9QUzJfU0VOVEVM
SUM9eQojIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldApDT05GSUdfTU9V
U0VfUFMyX0ZPQ0FMVEVDSD15CiMgQ09ORklHX01PVVNFX1BTMl9WTU1PVVNFIGlzIG5vdCBz
ZXQKQ09ORklHX01PVVNFX1NFUklBTD1tCkNPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KQ09O
RklHX01PVVNFX0JDTTU5NzQ9bQpDT05GSUdfTU9VU0VfQ1lBUEE9bQojIENPTkZJR19NT1VT
RV9FTEFOX0kyQyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9WU1hYWEFBPW0KIyBDT05GSUdf
TU9VU0VfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDPW0KQ09O
RklHX01PVVNFX1NZTkFQVElDU19VU0I9bQpDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQpDT05G
SUdfSk9ZU1RJQ0tfQU5BTE9HPW0KQ09ORklHX0pPWVNUSUNLX0EzRD1tCkNPTkZJR19KT1lT
VElDS19BREk9bQpDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQpDT05GSUdfSk9ZU1RJQ0tfR0Yy
Sz1tCkNPTkZJR19KT1lTVElDS19HUklQPW0KQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQpD
T05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UPW0KQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUPW0K
Q09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQpDT05GSUdfSk9ZU1RJQ0tfVE1EQz1tCkNP
TkZJR19KT1lTVElDS19JRk9SQ0U9bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CkNP
TkZJR19KT1lTVElDS19JRk9SQ0VfMjMyPXkKQ09ORklHX0pPWVNUSUNLX1dBUlJJT1I9bQpD
T05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQpDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkI9bQpD
T05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQpD
T05GSUdfSk9ZU1RJQ0tfVFdJREpPWT1tCkNPTkZJR19KT1lTVElDS19aSEVOSFVBPW0KQ09O
RklHX0pPWVNUSUNLX0RCOT1tCkNPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KQ09ORklHX0pP
WVNUSUNLX1RVUkJPR1JBRlg9bQojIENPTkZJR19KT1lTVElDS19BUzUwMTEgaXMgbm90IHNl
dApDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVNUD1tCkNPTkZJR19KT1lTVElDS19YUEFEPW0KQ09O
RklHX0pPWVNUSUNLX1hQQURfRkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKQ09O
RklHX0pPWVNUSUNLX1dBTEtFUkEwNzAxPW0KQ09ORklHX0lOUFVUX1RBQkxFVD15CkNPTkZJ
R19UQUJMRVRfVVNCX0FDRUNBRD1tCkNPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCkNPTkZJ
R19UQUJMRVRfVVNCX0dUQ089bQpDT05GSUdfVEFCTEVUX1VTQl9IQU5XQU5HPW0KQ09ORklH
X1RBQkxFVF9VU0JfS0JUQUI9bQpDT05GSUdfVEFCTEVUX1NFUklBTF9XQUNPTTQ9bQpDT05G
SUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQpDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj1tCkNP
TkZJR19UT1VDSFNDUkVFTl9BRDc4Nzc9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5PW0K
Q09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkM9bQojIENPTkZJR19UT1VDSFNDUkVFTl9B
RDc4NzlfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCiMg
Q09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIgaXMgbm90IHNldAojIENPTkZJR19UT1VD
SFNDUkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RN
RzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JFIGlzIG5vdCBzZXQKQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk89bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJF
PW0KQ09ORklHX1RPVUNIU0NSRUVOX0VFVEk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRT
VT1tCiMgQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0lMSTIxMFggaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9
bQojIENPTkZJR19UT1VDSFNDUkVFTl9FTEFOIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NS
RUVOX0VMTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMT1tCiMgQ09ORklHX1RP
VUNIU0NSRUVOX1dBQ09NX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX01B
WDExODAxIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDA9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9NTVMxMTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fTVRP
VUNIPW0KQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9N
SzcxMj1tCkNPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVD1tCiMgQ09ORklHX1RPVUNIU0NS
RUVOX0VEVF9GVDVYMDYgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdI
VD1tCkNPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCiMgQ09ORklHX1RPVUNIU0NSRUVO
X1BJWENJUiBpcyBub3Qgc2V0CkNPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQpDT05GSUdf
VE9VQ0hTQ1JFRU5fV005NzA1PXkKQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15CkNPTkZJ
R19UT1VDSFNDUkVFTl9XTTk3MTM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lU
RT1tCkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkKQ09ORklHX1RPVUNI
U0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJCTz15CkNPTkZJ
R19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0RNQ19U
U0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VDSFND
UkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNP
TkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5f
VVNCX05FWElPPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQpDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCkNPTkZJR19UT1VDSFNDUkVFTl9UU0NfU0VSSU89
bQojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1IGlzIG5vdCBzZXQKQ09ORklHX1RPVUNI
U0NSRUVOX1RTQzIwMDc9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIgaXMgbm90IHNl
dApDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSNDA9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TWDg2
NTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1g9bQojIENPTkZJR19U
T1VDSFNDUkVFTl9aRk9SQ0UgaXMgbm90IHNldApDT05GSUdfSU5QVVRfTUlTQz15CiMgQ09O
RklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0JNQTE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lO
UFVUX1BDU1BLUj1tCiMgQ09ORklHX0lOUFVUX01NQTg0NTAgaXMgbm90IHNldAojIENPTkZJ
R19JTlBVVF9NUFUzMDUwIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FQQU5FTD1tCiMgQ09O
RklHX0lOUFVUX0dQMkEgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX0JFRVBFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVElMVF9QT0xMRUQgaXMgbm90IHNldApD
T05GSUdfSU5QVVRfQVRMQVNfQlROUz1tCkNPTkZJR19JTlBVVF9BVElfUkVNT1RFMj1tCkNP
TkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URT1tCiMgQ09ORklHX0lOUFVUX0tYVEo5IGlzIG5v
dCBzZXQKQ09ORklHX0lOUFVUX1BPV0VSTUFURT1tCkNPTkZJR19JTlBVVF9ZRUFMSU5LPW0K
Q09ORklHX0lOUFVUX0NNMTA5PW0KQ09ORklHX0lOUFVUX1VJTlBVVD1tCiMgQ09ORklHX0lO
UFVUX1BDRjg1NzQgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNP
REVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOUFVUX0lNU19QQ1UgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9DTUEzMDAwIGlz
IG5vdCBzZXQKQ09ORklHX0lOUFVUX1hFTl9LQkRERVZfRlJPTlRFTkQ9eQpDT05GSUdfSU5Q
VVRfSURFQVBBRF9TTElERUJBUj1tCiMgQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RSVjI2NjdfSEFQVElDUyBpcyBub3Qgc2V0Cgoj
CiMgSGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkKQ09ORklHX0FSQ0hfTUlH
SFRfSEFWRV9QQ19TRVJJTz15CkNPTkZJR19TRVJJT19JODA0Mj15CkNPTkZJR19TRVJJT19T
RVJQT1JUPW0KQ09ORklHX1NFUklPX0NUODJDNzEwPW0KQ09ORklHX1NFUklPX1BBUktCRD1t
CkNPTkZJR19TRVJJT19QQ0lQUzI9bQpDT05GSUdfU0VSSU9fTElCUFMyPXkKQ09ORklHX1NF
UklPX1JBVz1tCkNPTkZJR19TRVJJT19BTFRFUkFfUFMyPW0KIyBDT05GSUdfU0VSSU9fUFMy
TVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0FSQ19QUzIgaXMgbm90IHNldApDT05G
SUdfSFlQRVJWX0tFWUJPQVJEPW0KQ09ORklHX0dBTUVQT1JUPW0KQ09ORklHX0dBTUVQT1JU
X05TNTU4PW0KQ09ORklHX0dBTUVQT1JUX0w0PW0KQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9
bQpDT05GSUdfR0FNRVBPUlRfRk04MDE9bQoKIwojIENoYXJhY3RlciBkZXZpY2VzCiMKQ09O
RklHX1RUWT15CkNPTkZJR19WVD15CkNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CkNP
TkZJR19WVF9DT05TT0xFPXkKQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVA9eQpDT05GSUdfSFdf
Q09OU09MRT15CkNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQpDT05GSUdfVU5JWDk4
X1BUWVM9eQpDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiMgQ09ORklHX0xF
R0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CkNPTkZJ
R19ST0NLRVRQT1JUPW0KQ09ORklHX0NZQ0xBREVTPW0KIyBDT05GSUdfQ1laX0lOVFIgaXMg
bm90IHNldApDT05GSUdfTU9YQV9JTlRFTExJTz1tCkNPTkZJR19NT1hBX1NNQVJUSU89bQpD
T05GSUdfU1lOQ0xJTks9bQpDT05GSUdfU1lOQ0xJTktNUD1tCkNPTkZJR19TWU5DTElOS19H
VD1tCkNPTkZJR19OT1pPTUk9bQpDT05GSUdfSVNJPW0KQ09ORklHX05fSERMQz1tCkNPTkZJ
R19OX0dTTT1tCiMgQ09ORklHX1RSQUNFX1NJTksgaXMgbm90IHNldApDT05GSUdfREVWTUVN
PXkKIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpD
T05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09ORklHX1NFUklBTF84MjUwPXkKIyBDT05GSUdf
U0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF84MjUwX1BOUD15CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklHX1NFUklB
TF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFMXzgy
NTBfQ1M9bQpDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84
MjUwX1JVTlRJTUVfVUFSVFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05G
SUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CkNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9J
UlE9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EVz15CkNPTkZJR19TRVJJ
QUxfODI1MF9GSU5URUs9bQoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwoj
IENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgz
MTBYIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JF
X0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX0pTTT1tCiMgQ09ORklHX1NFUklBTF9TQ0NOWFAg
aXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9B
TFRFUkFfVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9JRlg2WDYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VSSUFMX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfUlAyPW0K
Q09ORklHX1NFUklBTF9SUDJfTlJfVUFSVFM9MzIKIyBDT05GSUdfU0VSSUFMX0ZTTF9MUFVB
UlQgaXMgbm90IHNldAojIENPTkZJR19UVFlfUFJJTlRLIGlzIG5vdCBzZXQKQ09ORklHX1BS
SU5URVI9bQojIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKQ09ORklHX1BQREVWPW0K
Q09ORklHX0hWQ19EUklWRVI9eQpDT05GSUdfSFZDX0lSUT15CkNPTkZJR19IVkNfWEVOPXkK
Q09ORklHX0hWQ19YRU5fRlJPTlRFTkQ9eQpDT05GSUdfVklSVElPX0NPTlNPTEU9bQpDT05G
SUdfSVBNSV9IQU5ETEVSPW0KIyBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCBpcyBub3Qgc2V0
CkNPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQpDT05GSUdfSVBNSV9TST1tCiMgQ09O
RklHX0lQTUlfU0lfUFJPQkVfREVGQVVMVFMgaXMgbm90IHNldAojIENPTkZJR19JUE1JX1NT
SUYgaXMgbm90IHNldApDT05GSUdfSVBNSV9XQVRDSERPRz1tCkNPTkZJR19JUE1JX1BPV0VS
T0ZGPW0KQ09ORklHX0hXX1JBTkRPTT1tCiMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVN
IGlzIG5vdCBzZXQKQ09ORklHX0hXX1JBTkRPTV9JTlRFTD1tCkNPTkZJR19IV19SQU5ET01f
QU1EPW0KQ09ORklHX0hXX1JBTkRPTV9WSUE9bQpDT05GSUdfSFdfUkFORE9NX1ZJUlRJTz1t
CkNPTkZJR19IV19SQU5ET01fVFBNPW0KQ09ORklHX05WUkFNPW0KQ09ORklHX1IzOTY0PW0K
Q09ORklHX0FQUExJQ09NPW0KCiMKIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKIwpDT05G
SUdfU1lOQ0xJTktfQ1M9bQpDT05GSUdfQ0FSRE1BTl80MDAwPW0KQ09ORklHX0NBUkRNQU5f
NDA0MD1tCkNPTkZJR19JUFdJUkVMRVNTPW0KQ09ORklHX01XQVZFPW0KQ09ORklHX1JBV19E
UklWRVI9bQpDT05GSUdfTUFYX1JBV19ERVZTPTI1NgpDT05GSUdfSFBFVD15CkNPTkZJR19I
UEVUX01NQVA9eQpDT05GSUdfSFBFVF9NTUFQX0RFRkFVTFQ9eQpDT05GSUdfSEFOR0NIRUNL
X1RJTUVSPW0KQ09ORklHX1RDR19UUE09bQpDT05GSUdfVENHX1RJUz1tCkNPTkZJR19UQ0df
VElTX0kyQ19BVE1FTD1tCkNPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTj1tCkNPTkZJR19U
Q0dfVElTX0kyQ19OVVZPVE9OPW0KQ09ORklHX1RDR19OU0M9bQpDT05GSUdfVENHX0FUTUVM
PW0KQ09ORklHX1RDR19JTkZJTkVPTj1tCkNPTkZJR19UQ0dfWEVOPW0KQ09ORklHX1RDR19D
UkI9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyND1tCkNPTkZJR19UQ0dfVElTX1NUMzNaUDI0
X0kyQz1tCiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfU1BJIGlzIG5vdCBzZXQKQ09ORklH
X1RFTENMT0NLPW0KQ09ORklHX0RFVlBPUlQ9eQojIENPTkZJR19YSUxMWUJVUyBpcyBub3Qg
c2V0CgojCiMgSTJDIHN1cHBvcnQKIwpDT05GSUdfSTJDPXkKQ09ORklHX0FDUElfSTJDX09Q
UkVHSU9OPXkKQ09ORklHX0kyQ19CT0FSRElORk89eQpDT05GSUdfSTJDX0NPTVBBVD15CkNP
TkZJR19JMkNfQ0hBUkRFVj1tCkNPTkZJR19JMkNfTVVYPW0KCiMKIyBNdWx0aXBsZXhlciBJ
MkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX01VWF9HUElPIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJDX01VWF9QQ0E5NTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QQ0E5
NTR4IGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QSU5DVFJMIGlzIG5vdCBzZXQKQ09O
RklHX0kyQ19IRUxQRVJfQVVUTz15CkNPTkZJR19JMkNfU01CVVM9bQpDT05GSUdfSTJDX0FM
R09CSVQ9bQpDT05GSUdfSTJDX0FMR09QQ0E9bQoKIwojIEkyQyBIYXJkd2FyZSBCdXMgc3Vw
cG9ydAojCgojCiMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0FMSTE1MzU9bQpDT05GSUdfSTJDX0FMSTE1NjM9bQpDT05GSUdfSTJDX0FMSTE1WDM9
bQpDT05GSUdfSTJDX0FNRDc1Nj1tCkNPTkZJR19JMkNfQU1ENzU2X1M0ODgyPW0KQ09ORklH
X0kyQ19BTUQ4MTExPW0KQ09ORklHX0kyQ19JODAxPW0KQ09ORklHX0kyQ19JU0NIPW0KQ09O
RklHX0kyQ19JU01UPW0KQ09ORklHX0kyQ19QSUlYND1tCkNPTkZJR19JMkNfTkZPUkNFMj1t
CkNPTkZJR19JMkNfTkZPUkNFMl9TNDk4NT1tCkNPTkZJR19JMkNfU0lTNTU5NT1tCkNPTkZJ
R19JMkNfU0lTNjMwPW0KQ09ORklHX0kyQ19TSVM5Nlg9bQpDT05GSUdfSTJDX1ZJQT1tCkNP
TkZJR19JMkNfVklBUFJPPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NDTUk9
bQoKIwojIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3Rl
bS1vbi1jaGlwKQojCiMgQ09ORklHX0kyQ19DQlVTX0dQSU8gaXMgbm90IHNldApDT05GSUdf
STJDX0RFU0lHTldBUkVfQ09SRT1tCkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT1t
CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QQ0k9bQojIENPTkZJR19JMkNfR1BJTyBpcyBub3Qg
c2V0CkNPTkZJR19JMkNfS0VNUExEPW0KQ09ORklHX0kyQ19PQ09SRVM9bQpDT05GSUdfSTJD
X1BDQV9QTEFURk9STT1tCiMgQ09ORklHX0kyQ19QWEFfUENJIGlzIG5vdCBzZXQKQ09ORklH
X0kyQ19TSU1URUM9bQojIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBFeHRl
cm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiMKQ09ORklHX0kyQ19ESU9MQU5fVTJD
PW0KQ09ORklHX0kyQ19QQVJQT1JUPW0KQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KQ09O
RklHX0kyQ19ST0JPVEZVWlpfT1NJRj1tCkNPTkZJR19JMkNfVEFPU19FVk09bQpDT05GSUdf
STJDX1RJTllfVVNCPW0KQ09ORklHX0kyQ19WSVBFUkJPQVJEPW0KCiMKIyBPdGhlciBJMkMv
U01CdXMgYnVzIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NUVUI9bQojIENPTkZJR19JMkNfU0xB
VkUgaXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApD
T05GSUdfU1BJX01BU1RFUj15CgojCiMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMK
IwojIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9CSVRCQU5HPW0K
Q09ORklHX1NQSV9CVVRURVJGTFk9bQojIENPTkZJR19TUElfQ0FERU5DRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9MTTcwX0xMUD1tCiMg
Q09ORklHX1NQSV9PQ19USU5ZIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9QWEEyWFhfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJ
X1NDMThJUzYwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9YQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAojIENPTkZJR19TUElfREVTSUdOV0FSRSBp
cyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1hc3RlcnMKIwojIENPTkZJR19TUElfU1BJ
REVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAojIENPTkZJ
R19TUE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSFNJIGlzIG5vdCBzZXQKCiMKIyBQUFMgc3Vw
cG9ydAojCkNPTkZJR19QUFM9bQojIENPTkZJR19QUFNfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19OVFBfUFBTIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBD
T05GSUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldApDT05GSUdfUFBTX0NMSUVOVF9M
RElTQz1tCkNPTkZJR19QUFNfQ0xJRU5UX1BBUlBPUlQ9bQojIENPTkZJR19QUFNfQ0xJRU5U
X0dQSU8gaXMgbm90IHNldAoKIwojIFBQUyBnZW5lcmF0b3JzIHN1cHBvcnQKIwoKIwojIFBU
UCBjbG9jayBzdXBwb3J0CiMKQ09ORklHX1BUUF8xNTg4X0NMT0NLPW0KCiMKIyBFbmFibGUg
UEhZTElCIGFuZCBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgdG8gc2VlIHRoZSBhZGRpdGlv
bmFsIGNsb2Nrcy4KIwpDT05GSUdfUElOQ1RSTD15CgojCiMgUGluIGNvbnRyb2xsZXJzCiMK
IyBDT05GSUdfREVCVUdfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfQU1E
IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9CQVlUUkFJTCBpcyBub3Qgc2V0CiMgQ09O
RklHX1BJTkNUUkxfQ0hFUlJZVklFVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VO
UklTRVBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElC
PXkKQ09ORklHX0dQSU9MSUI9eQpDT05GSUdfR1BJT19ERVZSRVM9eQpDT05GSUdfR1BJT19B
Q1BJPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU1lT
RlMgaXMgbm90IHNldAoKIwojIE1lbW9yeSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05G
SUdfR1BJT19EV0FQQiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fRjcxODhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19JQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAoj
IENPTkZJR19HUElPX0xZTlhQT0lOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TQ0gzMTFYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19WWDg1NSBpcyBub3Qgc2V0CgojCiMgSTJDIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5
NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05G
SUdfR1BJT19TWDE1MFggaXMgbm90IHNldAoKIwojIE1GRCBHUElPIGV4cGFuZGVycwojCkNP
TkZJR19HUElPX0tFTVBMRD1tCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19JTlRFTF9NSUQgaXMgbm90
IHNldApDT05GSUdfR1BJT19NTF9JT0g9bQojIENPTkZJR19HUElPX1JEQzMyMVggaXMgbm90
IHNldAoKIwojIFNQSSBHUElPIGV4cGFuZGVycwojCiMgQ09ORklHX0dQSU9fTUFYNzMwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAojIENPTkZJR19H
UElPX01DMzM4ODAgaXMgbm90IHNldAoKIwojIFVTQiBHUElPIGV4cGFuZGVycwojCkNPTkZJ
R19HUElPX1ZJUEVSQk9BUkQ9bQpDT05GSUdfVzE9bQpDT05GSUdfVzFfQ09OPXkKCiMKIyAx
LXdpcmUgQnVzIE1hc3RlcnMKIwpDT05GSUdfVzFfTUFTVEVSX01BVFJPWD1tCkNPTkZJR19X
MV9NQVNURVJfRFMyNDkwPW0KQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQojIENPTkZJR19X
MV9NQVNURVJfRFMxV00gaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBu
b3Qgc2V0CgojCiMgMS13aXJlIFNsYXZlcwojCkNPTkZJR19XMV9TTEFWRV9USEVSTT1tCkNP
TkZJR19XMV9TTEFWRV9TTUVNPW0KIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBz
ZXQKQ09ORklHX1cxX1NMQVZFX0RTMjQzMT1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQoj
IENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyOEUwNCBpcyBub3Qgc2V0CkNPTkZJR19XMV9TTEFWRV9CUTI3MDAwPW0KQ09ORklH
X1BPV0VSX1NVUFBMWT15CiMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVSSUNfQURDX0JB
VFRFUlkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BPV0VSIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKQ09ORklHX0JB
VFRFUllfU0JTPW0KIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcw
NDIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX01BWDg5MDMgaXMgbm90IHNldAojIENP
TkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDE1WCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNDE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVQg
aXMgbm90IHNldAojIENPTkZJR19QT1dFUl9BVlMgaXMgbm90IHNldApDT05GSUdfSFdNT049
eQpDT05GSUdfSFdNT05fVklEPW0KIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qg
c2V0CgojCiMgTmF0aXZlIGRyaXZlcnMKIwpDT05GSUdfU0VOU09SU19BQklUVUdVUlU9bQpD
T05GSUdfU0VOU09SU19BQklUVUdVUlUzPW0KIyBDT05GSUdfU0VOU09SU19BRDczMTQgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRDc0MTQ9bQpDT05GSUdfU0VOU09SU19BRDc0MTg9
bQpDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCkNP
TkZJR19TRU5TT1JTX0FETTEwMjY9bQpDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KQ09ORklH
X1NFTlNPUlNfQURNMTAzMT1tCkNPTkZJR19TRU5TT1JTX0FETTkyNDA9bQojIENPTkZJR19T
RU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTAgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRFQ3NDExPW0KQ09ORklHX1NFTlNPUlNfQURUNzQ2
Mj1tCkNPTkZJR19TRU5TT1JTX0FEVDc0NzA9bQpDT05GSUdfU0VOU09SU19BRFQ3NDc1PW0K
Q09ORklHX1NFTlNPUlNfQVNDNzYyMT1tCkNPTkZJR19TRU5TT1JTX0s4VEVNUD1tCkNPTkZJ
R19TRU5TT1JTX0sxMFRFTVA9bQpDT05GSUdfU0VOU09SU19GQU0xNUhfUE9XRVI9bQpDT05G
SUdfU0VOU09SU19BUFBMRVNNQz1tCkNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCkNPTkZJR19T
RU5TT1JTX0FUWFAxPW0KQ09ORklHX1NFTlNPUlNfRFM2MjA9bQpDT05GSUdfU0VOU09SU19E
UzE2MjE9bQpDT05GSUdfU0VOU09SU19JNUtfQU1CPW0KQ09ORklHX1NFTlNPUlNfRjcxODA1
Rj1tCkNPTkZJR19TRU5TT1JTX0Y3MTg4MkZHPW0KQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1t
CkNPTkZJR19TRU5TT1JTX0ZTQ0hNRD1tCkNPTkZJR19TRU5TT1JTX0dMNTE4U009bQpDT05G
SUdfU0VOU09SU19HTDUyMFNNPW0KQ09ORklHX1NFTlNPUlNfRzc2MEE9bQojIENPTkZJR19T
RU5TT1JTX0c3NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0dQSU9fRkFOIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19ISUg2MTMwIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNP
UlNfSUJNQUVNPW0KQ09ORklHX1NFTlNPUlNfSUJNUEVYPW0KIyBDT05GSUdfU0VOU09SU19J
SU9fSFdNT04gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1NTAwIGlzIG5vdCBzZXQK
Q09ORklHX1NFTlNPUlNfQ09SRVRFTVA9bQpDT05GSUdfU0VOU09SU19JVDg3PW0KQ09ORklH
X1NFTlNPUlNfSkM0Mj1tCiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldApD
T05GSUdfU0VOU09SU19MSU5FQUdFPW0KIyBDT05GSUdfU0VOU09SU19MVEMyOTQ1IGlzIG5v
dCBzZXQKQ09ORklHX1NFTlNPUlNfTFRDNDE1MT1tCkNPTkZJR19TRU5TT1JTX0xUQzQyMTU9
bQojIENPTkZJR19TRU5TT1JTX0xUQzQyMjIgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19M
VEM0MjQ1PW0KIyBDT05GSUdfU0VOU09SU19MVEM0MjYwIGlzIG5vdCBzZXQKQ09ORklHX1NF
TlNPUlNfTFRDNDI2MT1tCkNPTkZJR19TRU5TT1JTX01BWDExMTE9bQpDT05GSUdfU0VOU09S
U19NQVgxNjA2NT1tCkNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQpDT05GSUdfU0VOU09SU19N
QVgxNjY4PW0KIyBDT05GSUdfU0VOU09SU19NQVgxOTcgaXMgbm90IHNldApDT05GSUdfU0VO
U09SU19NQVg2NjM5PW0KQ09ORklHX1NFTlNPUlNfTUFYNjY0Mj1tCkNPTkZJR19TRU5TT1JT
X01BWDY2NTA9bQojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0hUVTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQ1AzMDIxIGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTUVORjIxQk1DX0hXTU9OPW0KQ09ORklHX1NFTlNP
UlNfQURDWFg9bQpDT05GSUdfU0VOU09SU19MTTYzPW0KQ09ORklHX1NFTlNPUlNfTE03MD1t
CkNPTkZJR19TRU5TT1JTX0xNNzM9bQpDT05GSUdfU0VOU09SU19MTTc1PW0KQ09ORklHX1NF
TlNPUlNfTE03Nz1tCkNPTkZJR19TRU5TT1JTX0xNNzg9bQpDT05GSUdfU0VOU09SU19MTTgw
PW0KQ09ORklHX1NFTlNPUlNfTE04Mz1tCkNPTkZJR19TRU5TT1JTX0xNODU9bQpDT05GSUdf
U0VOU09SU19MTTg3PW0KQ09ORklHX1NFTlNPUlNfTE05MD1tCkNPTkZJR19TRU5TT1JTX0xN
OTI9bQpDT05GSUdfU0VOU09SU19MTTkzPW0KIyBDT05GSUdfU0VOU09SU19MTTk1MjM0IGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTE05NTI0MT1tCkNPTkZJR19TRU5TT1JTX0xNOTUy
NDU9bQpDT05GSUdfU0VOU09SU19QQzg3MzYwPW0KQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1t
CkNPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SPW0KQ09ORklHX1NFTlNPUlNfTkNUNjY4
Mz1tCkNPTkZJR19TRU5TT1JTX05DVDY3NzU9bQojIENPTkZJR19TRU5TT1JTX05DVDc4MDIg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX05DVDc5MDQgaXMgbm90IHNldApDT05GSUdf
U0VOU09SU19QQ0Y4NTkxPW0KIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0hUMjE9bQojIENPTkZJ
R19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0lTNTU5NT1tCkNP
TkZJR19TRU5TT1JTX0RNRTE3Mzc9bQpDT05GSUdfU0VOU09SU19FTUMxNDAzPW0KQ09ORklH
X1NFTlNPUlNfRU1DMjEwMz1tCkNPTkZJR19TRU5TT1JTX0VNQzZXMjAxPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3TTE9bQpDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3QjM5Nz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2WFhfQ09NTU9OPW0KQ09O
RklHX1NFTlNPUlNfU0NINTYyNz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2MzY9bQpDT05GSUdf
U0VOU09SU19TTU02NjU9bQojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNl
dApDT05GSUdfU0VOU09SU19BRFMxMDE1PW0KQ09ORklHX1NFTlNPUlNfQURTNzgyOD1tCkNP
TkZJR19TRU5TT1JTX0FEUzc4NzE9bQpDT05GSUdfU0VOU09SU19BTUM2ODIxPW0KIyBDT05G
SUdfU0VOU09SU19JTkEyMDkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lOQTJYWCBp
cyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1RITUM1MD1tCkNPTkZJR19TRU5TT1JTX1RNUDEw
Mj1tCiMgQ09ORklHX1NFTlNPUlNfVE1QMTAzIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNf
VE1QNDAxPW0KQ09ORklHX1NFTlNPUlNfVE1QNDIxPW0KQ09ORklHX1NFTlNPUlNfVklBX0NQ
VVRFTVA9bQpDT05GSUdfU0VOU09SU19WSUE2ODZBPW0KQ09ORklHX1NFTlNPUlNfVlQxMjEx
PW0KQ09ORklHX1NFTlNPUlNfVlQ4MjMxPW0KQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCkNP
TkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQpDT05GSUdfU0VOU09SU19XODM3OTJEPW0KQ09ORklH
X1NFTlNPUlNfVzgzNzkzPW0KQ09ORklHX1NFTlNPUlNfVzgzNzk1PW0KIyBDT05GSUdfU0VO
U09SU19XODM3OTVfRkFOQ1RSTCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1c4M0w3ODVU
Uz1tCkNPTkZJR19TRU5TT1JTX1c4M0w3ODZORz1tCkNPTkZJR19TRU5TT1JTX1c4MzYyN0hG
PW0KQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05G
SUdfU0VOU09SU19BQ1BJX1BPV0VSPW0KQ09ORklHX1NFTlNPUlNfQVRLMDExMD1tCkNPTkZJ
R19USEVSTUFMPW0KQ09ORklHX1RIRVJNQUxfSFdNT049eQpDT05GSUdfVEhFUk1BTF9ERUZB
VUxUX0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJf
U0hBUkUgaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BB
Q0UgaXMgbm90IHNldApDT05GSUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CkNPTkZJR19U
SEVSTUFMX0dPVl9TVEVQX1dJU0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HPXkK
Q09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0U9eQojIENPTkZJR19USEVSTUFMX0VNVUxB
VElPTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9QT1dFUkNMQU1QPW0KQ09ORklHX1g4Nl9Q
S0dfVEVNUF9USEVSTUFMPW0KIyBDT05GSUdfSU5URUxfU09DX0RUU19USEVSTUFMIGlzIG5v
dCBzZXQKQ09ORklHX0lOVDM0MFhfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX1RIRVJNQUxfUkVM
PW0KCiMKIyBUZXhhcyBJbnN0cnVtZW50cyB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfV0FU
Q0hET0c9eQpDT05GSUdfV0FUQ0hET0dfQ09SRT15CiMgQ09ORklHX1dBVENIRE9HX05PV0FZ
T1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19T
T0ZUX1dBVENIRE9HPW0KQ09ORklHX01FTkYyMUJNQ19XQVRDSERPRz1tCiMgQ09ORklHX1hJ
TElOWF9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBREVOQ0VfV0FUQ0hET0cgaXMg
bm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1FVSVJF
X1dEVD1tCkNPTkZJR19BRFZBTlRFQ0hfV0RUPW0KQ09ORklHX0FMSU0xNTM1X1dEVD1tCkNP
TkZJR19BTElNNzEwMV9XRFQ9bQpDT05GSUdfRjcxODA4RV9XRFQ9bQpDT05GSUdfU1A1MTAw
X1RDTz1tCkNPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HPW0KQ09ORklHX0VVUk9URUNIX1dE
VD1tCkNPTkZJR19JQjcwMF9XRFQ9bQpDT05GSUdfSUJNQVNSPW0KQ09ORklHX1dBRkVSX1dE
VD1tCkNPTkZJR19JNjMwMEVTQl9XRFQ9bQpDT05GSUdfSUU2WFhfV0RUPW0KQ09ORklHX0lU
Q09fV0RUPW0KQ09ORklHX0lUQ09fVkVORE9SX1NVUFBPUlQ9eQpDT05GSUdfSVQ4NzEyRl9X
RFQ9bQpDT05GSUdfSVQ4N19XRFQ9bQpDT05GSUdfSFBfV0FUQ0hET0c9bQpDT05GSUdfS0VN
UExEX1dEVD1tCkNPTkZJR19IUFdEVF9OTUlfREVDT0RJTkc9eQpDT05GSUdfU0MxMjAwX1dE
VD1tCkNPTkZJR19QQzg3NDEzX1dEVD1tCkNPTkZJR19OVl9UQ089bQpDT05GSUdfNjBYWF9X
RFQ9bQpDT05GSUdfQ1BVNV9XRFQ9bQpDT05GSUdfU01TQ19TQ0gzMTFYX1dEVD1tCkNPTkZJ
R19TTVNDMzdCNzg3X1dEVD1tCkNPTkZJR19WSUFfV0RUPW0KQ09ORklHX1c4MzYyN0hGX1dE
VD1tCkNPTkZJR19XODM4NzdGX1dEVD1tCkNPTkZJR19XODM5NzdGX1dEVD1tCkNPTkZJR19N
QUNIWl9XRFQ9bQpDT05GSUdfU0JDX0VQWF9DM19XQVRDSERPRz1tCiMgQ09ORklHX01FTl9B
MjFfV0RUIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9XRFQ9bQoKIwojIFBDSS1iYXNlZCBXYXRj
aGRvZyBDYXJkcwojCkNPTkZJR19QQ0lQQ1dBVENIRE9HPW0KQ09ORklHX1dEVFBDST1tCgoj
CiMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiMKQ09ORklHX1VTQlBDV0FUQ0hET0c9bQpD
T05GSUdfU1NCX1BPU1NJQkxFPXkKCiMKIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKIwpD
T05GSUdfU1NCPW0KQ09ORklHX1NTQl9TUFJPTT15CkNPTkZJR19TU0JfQkxPQ0tJTz15CkNP
TkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15CkNPTkZJR19TU0JfUENJSE9TVD15CkNPTkZJ
R19TU0JfQjQzX1BDSV9CUklER0U9eQpDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9
eQpDT05GSUdfU1NCX1BDTUNJQUhPU1Q9eQpDT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxF
PXkKQ09ORklHX1NTQl9TRElPSE9TVD15CiMgQ09ORklHX1NTQl9TSUxFTlQgaXMgbm90IHNl
dAojIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldApDT05GSUdfU1NCX0RSSVZFUl9QQ0lD
T1JFX1BPU1NJQkxFPXkKQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15CiMgQ09ORklHX1NT
Ql9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19CQ01BX1BPU1NJQkxFPXkKCiMKIyBC
cm9hZGNvbSBzcGVjaWZpYyBBTUJBCiMKQ09ORklHX0JDTUE9bQpDT05GSUdfQkNNQV9CTE9D
S0lPPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQpDT05GSUdfQkNNQV9IT1NU
X1BDST15CiMgQ09ORklHX0JDTUFfSE9TVF9TT0MgaXMgbm90IHNldApDT05GSUdfQkNNQV9E
UklWRVJfUENJPXkKIyBDT05GSUdfQkNNQV9EUklWRVJfR01BQ19DTU4gaXMgbm90IHNldAoj
IENPTkZJR19CQ01BX0RSSVZFUl9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9ERUJV
RyBpcyBub3Qgc2V0CgojCiMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwojCkNPTkZJ
R19NRkRfQ09SRT1tCiMgQ09ORklHX01GRF9BUzM3MTEgaXMgbm90IHNldAojIENPTkZJR19Q
TUlDX0FEUDU1MjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQUFUMjg3MF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX0JDTTU5MFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FY
UDIwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9DUk9TX0VDIGlzIG5vdCBzZXQKIyBDT05G
SUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAojIENPTkZJR19NRkRfREE5MDUyX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X0RBOTA1NSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RMTjIgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUMxM1hYWF9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUMx
M1hYWF9JMkMgaXMgbm90IHNldAojIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKIyBD
T05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9JTlRFTF9RVUFSS19J
MkNfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19MUENfSUNIPW0KQ09ORklHX0xQQ19TQ0g9bQoj
IENPTkZJR19JTlRFTF9TT0NfUE1JQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9KQU5aX0NN
T0RJTyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfS0VNUExEPW0KIyBDT05GSUdfTUZEXzg4UE04
MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTgwNSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg3NzY5MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg3
Nzg0MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTA3IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg4OTk4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01UNjM5
NyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfTUVORjIxQk1DPW0KIyBDT05GSUdfRVpYX1BDQVAg
aXMgbm90IHNldApDT05GSUdfTUZEX1ZJUEVSQk9BUkQ9bQojIENPTkZJR19NRkRfUkVUVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1VD
QjE0MDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQK
Q09ORklHX01GRF9SVFNYX1BDST1tCiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldApD
T05GSUdfTUZEX1JUU1hfVVNCPW0KIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk41VDYxOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TRUNfQ09SRSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9TSTQ3NlhfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9TTTUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TS1k4MTQ1MiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9TTVNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMg
bm90IHNldAojIENPTkZJR19NRkRfU1lTQ09OIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJ
X0FNMzM1WF9UU0NBREMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTFAzOTQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQUxNQVMg
aXMgbm90IHNldAojIENPTkZJR19UUFM2MTA1WCBpcyBub3Qgc2V0CiMgQ09ORklHX1RQUzY1
MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjUwOTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjUyMTcgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfVFBTNjUyMTggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU4
NlggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfVFBTNjU5MTIgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTJfSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9UUFM4MDAzMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1RXTDYwNDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTDEy
NzNfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MTTM1MzMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9WWDg1NSBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUkla
T05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAojIENP
TkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTgzMVhfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQK
Q09ORklHX01FRElBX1NVUFBPUlQ9bQoKIwojIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiMK
Q09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUPXkKQ09ORklHX01FRElBX0FOQUxPR19UVl9T
VVBQT1JUPXkKQ09ORklHX01FRElBX0RJR0lUQUxfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJ
QV9SQURJT19TVVBQT1JUPXkKQ09ORklHX01FRElBX1NEUl9TVVBQT1JUPXkKQ09ORklHX01F
RElBX1JDX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQ09OVFJPTExFUj15CkNPTkZJR19WSURF
T19ERVY9bQojIENPTkZJR19WSURFT19WNEwyX1NVQkRFVl9BUEkgaXMgbm90IHNldApDT05G
SUdfVklERU9fVjRMMj1tCiMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19UVU5FUj1tCkNPTkZJR19WSURFT0JVRl9HRU49bQpDT05GSUdfVklERU9CVUZfRE1BX1NH
PW0KQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQpDT05GSUdfVklERU9CVUZfRFZCPW0KQ09O
RklHX1ZJREVPQlVGMl9DT1JFPW0KQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9bQpDT05GSUdf
VklERU9CVUYyX0RNQV9DT05USUc9bQpDT05GSUdfVklERU9CVUYyX1ZNQUxMT0M9bQpDT05G
SUdfVklERU9CVUYyX0RNQV9TRz1tCkNPTkZJR19WSURFT0JVRjJfRFZCPW0KQ09ORklHX0RW
Ql9DT1JFPW0KQ09ORklHX0RWQl9ORVQ9eQpDT05GSUdfVFRQQ0lfRUVQUk9NPW0KQ09ORklH
X0RWQl9NQVhfQURBUFRFUlM9OApDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTPXkKCiMKIyBN
ZWRpYSBkcml2ZXJzCiMKQ09ORklHX1JDX0NPUkU9bQpDT05GSUdfUkNfTUFQPW0KQ09ORklH
X1JDX0RFQ09ERVJTPXkKQ09ORklHX0xJUkM9bQpDT05GSUdfSVJfTElSQ19DT0RFQz1tCkNP
TkZJR19JUl9ORUNfREVDT0RFUj1tCkNPTkZJR19JUl9SQzVfREVDT0RFUj1tCkNPTkZJR19J
Ul9SQzZfREVDT0RFUj1tCkNPTkZJR19JUl9KVkNfREVDT0RFUj1tCkNPTkZJR19JUl9TT05Z
X0RFQ09ERVI9bQpDT05GSUdfSVJfU0FOWU9fREVDT0RFUj1tCkNPTkZJR19JUl9TSEFSUF9E
RUNPREVSPW0KQ09ORklHX0lSX01DRV9LQkRfREVDT0RFUj1tCkNPTkZJR19JUl9YTVBfREVD
T0RFUj1tCkNPTkZJR19SQ19ERVZJQ0VTPXkKQ09ORklHX1JDX0FUSV9SRU1PVEU9bQpDT05G
SUdfSVJfRU5FPW0KIyBDT05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9J
TU9OPW0KQ09ORklHX0lSX01DRVVTQj1tCkNPTkZJR19JUl9JVEVfQ0lSPW0KQ09ORklHX0lS
X0ZJTlRFSz1tCkNPTkZJR19JUl9OVVZPVE9OPW0KQ09ORklHX0lSX1JFRFJBVDM9bQpDT05G
SUdfSVJfU1RSRUFNWkFQPW0KQ09ORklHX0lSX1dJTkJPTkRfQ0lSPW0KQ09ORklHX0lSX0lH
T1JQTFVHVVNCPW0KQ09ORklHX0lSX0lHVUFOQT1tCkNPTkZJR19JUl9UVFVTQklSPW0KQ09O
RklHX1JDX0xPT1BCQUNLPW0KIyBDT05GSUdfSVJfR1BJT19DSVIgaXMgbm90IHNldApDT05G
SUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09ORklHX1VT
Ql9WSURFT19DTEFTUz1tCkNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQpD
T05GSUdfVVNCX0dTUENBPW0KQ09ORklHX1VTQl9NNTYwMj1tCkNPTkZJR19VU0JfU1RWMDZY
WD1tCkNPTkZJR19VU0JfR0w4NjA9bQpDT05GSUdfVVNCX0dTUENBX0JFTlE9bQpDT05GSUdf
VVNCX0dTUENBX0NPTkVYPW0KQ09ORklHX1VTQl9HU1BDQV9DUElBMT1tCkNPTkZJR19VU0Jf
R1NQQ0FfRFRDUzAzMz1tCkNPTkZJR19VU0JfR1NQQ0FfRVRPTVM9bQpDT05GSUdfVVNCX0dT
UENBX0ZJTkVQSVg9bQpDT05GSUdfVVNCX0dTUENBX0pFSUxJTko9bQpDT05GSUdfVVNCX0dT
UENBX0pMMjAwNUJDRD1tCkNPTkZJR19VU0JfR1NQQ0FfS0lORUNUPW0KQ09ORklHX1VTQl9H
U1BDQV9LT05JQ0E9bQpDT05GSUdfVVNCX0dTUENBX01BUlM9bQpDT05GSUdfVVNCX0dTUENB
X01SOTczMTBBPW0KQ09ORklHX1VTQl9HU1BDQV9OVzgwWD1tCkNPTkZJR19VU0JfR1NQQ0Ff
T1Y1MTk9bQpDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KQ09ORklHX1VTQl9HU1BDQV9PVjUz
NF85PW0KQ09ORklHX1VTQl9HU1BDQV9QQUMyMDc9bQpDT05GSUdfVVNCX0dTUENBX1BBQzcz
MDI9bQpDT05GSUdfVVNCX0dTUENBX1BBQzczMTE9bQpDT05GSUdfVVNCX0dTUENBX1NFNDAx
PW0KQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOD1tCkNPTkZJR19VU0JfR1NQQ0FfU045QzIw
WD1tCkNPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDA9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDU9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0ExNTI4PW0KQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1t
CkNPTkZJR19VU0JfR1NQQ0FfU1E5MDVDPW0KQ09ORklHX1VTQl9HU1BDQV9TUTkzMFg9bQpD
T05GSUdfVVNCX0dTUENBX1NUSzAxND1tCkNPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNT1tCkNP
TkZJR19VU0JfR1NQQ0FfU1RWMDY4MD1tCkNPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCkNP
TkZJR19VU0JfR1NQQ0FfVDYxMz1tCkNPTkZJR19VU0JfR1NQQ0FfVE9QUk89bQojIENPTkZJ
R19VU0JfR1NQQ0FfVE9VUFRFSyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMy
PW0KQ09ORklHX1VTQl9HU1BDQV9WQzAzMlg9bQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPW0K
Q09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJVD1tCkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9
bQpDT05GSUdfVVNCX1BXQz1tCiMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldApD
T05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CkNPTkZJR19WSURFT19DUElBMj1tCkNPTkZJ
R19VU0JfWlIzNjRYWD1tCkNPTkZJR19VU0JfU1RLV0VCQ0FNPW0KQ09ORklHX1VTQl9TMjI1
NT1tCkNPTkZJR19WSURFT19VU0JUVj1tCgojCiMgQW5hbG9nIFRWIFVTQiBkZXZpY2VzCiMK
Q09ORklHX1ZJREVPX1BWUlVTQjI9bQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNP
TkZJR19WSURFT19QVlJVU0IyX0RWQj15CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJ
RkMgaXMgbm90IHNldApDT05GSUdfVklERU9fSERQVlI9bQpDT05GSUdfVklERU9fVVNCVklT
SU9OPW0KQ09ORklHX1ZJREVPX1NUSzExNjBfQ09NTU9OPW0KQ09ORklHX1ZJREVPX1NUSzEx
NjBfQUM5Nz15CkNPTkZJR19WSURFT19TVEsxMTYwPW0KIyBDT05GSUdfVklERU9fR083MDA3
IGlzIG5vdCBzZXQKCiMKIyBBbmFsb2cvZGlnaXRhbCBUViBVU0IgZGV2aWNlcwojCkNPTkZJ
R19WSURFT19BVTA4Mjg9bQpDT05GSUdfVklERU9fQVUwODI4X1Y0TDI9eQpDT05GSUdfVklE
RU9fQVUwODI4X1JDPXkKQ09ORklHX1ZJREVPX0NYMjMxWFg9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYX0FMU0E9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9EVkI9bQpDT05GSUdfVklERU9fVE02MDAwPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9B
TFNBPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9EVkI9bQoKIwojIERpZ2l0YWwgVFYgVVNCIGRl
dmljZXMKIwpDT05GSUdfRFZCX1VTQj1tCiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90
IHNldApDT05GSUdfRFZCX1VTQl9BODAwPW0KQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0K
Q09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWT15CkNPTkZJR19EVkJfVVNCX0RJQlVT
Ql9NQz1tCkNPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQpDT05GSUdfRFZCX1VTQl9VTVRfMDEw
PW0KQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQpDT05GSUdfRFZCX1VTQl9NOTIwWD1tCkNPTkZJ
R19EVkJfVVNCX0RJR0lUVj1tCkNPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCkNPTkZJR19EVkJf
VVNCX1ZQNzAyWD1tCkNPTkZJR19EVkJfVVNCX0dQOFBTSz1tCkNPTkZJR19EVkJfVVNCX05P
VkFfVF9VU0IyPW0KQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KQ09ORklHX0RWQl9VU0JfRFRU
MjAwVT1tCkNPTkZJR19EVkJfVVNCX09QRVJBMT1tCkNPTkZJR19EVkJfVVNCX0FGOTAwNT1t
CkNPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQpDT05GSUdfRFZCX1VTQl9QQ1RWNDUy
RT1tCkNPTkZJR19EVkJfVVNCX0RXMjEwMj1tCkNPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDI9
bQpDT05GSUdfRFZCX1VTQl9EVFY1MTAwPW0KQ09ORklHX0RWQl9VU0JfRlJJSU89bQpDT05G
SUdfRFZCX1VTQl9BWjYwMjc9bQpDT05GSUdfRFZCX1VTQl9URUNITklTQVRfVVNCMj1tCkNP
TkZJR19EVkJfVVNCX1YyPW0KQ09ORklHX0RWQl9VU0JfQUY5MDE1PW0KQ09ORklHX0RWQl9V
U0JfQUY5MDM1PW0KQ09ORklHX0RWQl9VU0JfQU5ZU0VFPW0KQ09ORklHX0RWQl9VU0JfQVU2
NjEwPW0KQ09ORklHX0RWQl9VU0JfQVo2MDA3PW0KQ09ORklHX0RWQl9VU0JfQ0U2MjMwPW0K
Q09ORklHX0RWQl9VU0JfRUMxNjg9bQpDT05GSUdfRFZCX1VTQl9HTDg2MT1tCkNPTkZJR19E
VkJfVVNCX0xNRTI1MTA9bQpDT05GSUdfRFZCX1VTQl9NWEwxMTFTRj1tCkNPTkZJR19EVkJf
VVNCX1JUTDI4WFhVPW0KQ09ORklHX0RWQl9VU0JfRFZCU0tZPW0KQ09ORklHX0RWQl9UVFVT
Ql9CVURHRVQ9bQpDT05GSUdfRFZCX1RUVVNCX0RFQz1tCkNPTkZJR19TTVNfVVNCX0RSVj1t
CkNPTkZJR19EVkJfQjJDMl9GTEVYQ09QX1VTQj1tCiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhD
T1BfVVNCX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BUzEwMj1tCgojCiMgV2ViY2Ft
LCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVTQiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhY
WD1tCkNPTkZJR19WSURFT19FTTI4WFhfVjRMMj1tCkNPTkZJR19WSURFT19FTTI4WFhfQUxT
QT1tCkNPTkZJR19WSURFT19FTTI4WFhfRFZCPW0KQ09ORklHX1ZJREVPX0VNMjhYWF9SQz1t
CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0IgZGV2aWNlcwojCkNPTkZJR19VU0Jf
QUlSU1BZPW0KQ09ORklHX1VTQl9IQUNLUkY9bQpDT05GSUdfVVNCX01TSTI1MDA9bQpDT05G
SUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1cmUgc3VwcG9ydAojCkNP
TkZJR19WSURFT19NRVlFPW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0
CiMKQ09ORklHX1ZJREVPX0lWVFY9bQpDT05GSUdfVklERU9fSVZUVl9BTFNBPW0KQ09ORklH
X1ZJREVPX0ZCX0lWVFY9bQpDT05GSUdfVklERU9fWk9SQU49bQpDT05GSUdfVklERU9fWk9S
QU5fREMzMD1tCkNPTkZJR19WSURFT19aT1JBTl9aUjM2MDYwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0JVWj1tCkNPTkZJR19WSURFT19aT1JBTl9EQzEwPW0KQ09ORklHX1ZJREVPX1pPUkFO
X0xNTDMzPW0KQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzUjEwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0FWUzZFWUVTPW0KQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkk9bQpDT05GSUdfVklE
RU9fSEVYSVVNX09SSU9OPW0KQ09ORklHX1ZJREVPX01YQj1tCkNPTkZJR19WSURFT19TT0xP
NlgxMD1tCkNPTkZJR19WSURFT19UVzY4PW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZy9o
eWJyaWQgVFYgc3VwcG9ydAojCkNPTkZJR19WSURFT19DWDE4PW0KQ09ORklHX1ZJREVPX0NY
MThfQUxTQT1tCkNPTkZJR19WSURFT19DWDIzODg1PW0KQ09ORklHX01FRElBX0FMVEVSQV9D
ST1tCiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldApDT05GSUdfVklERU9fQ1g4
OD1tCkNPTkZJR19WSURFT19DWDg4X0FMU0E9bQpDT05GSUdfVklERU9fQ1g4OF9CTEFDS0JJ
UkQ9bQpDT05GSUdfVklERU9fQ1g4OF9EVkI9bQpDT05GSUdfVklERU9fQ1g4OF9FTkFCTEVf
VlAzMDU0PXkKQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KQ09ORklHX1ZJREVPX0NYODhf
TVBFRz1tCkNPTkZJR19WSURFT19CVDg0OD1tCkNPTkZJR19EVkJfQlQ4WFg9bQpDT05GSUdf
VklERU9fU0FBNzEzND1tCkNPTkZJR19WSURFT19TQUE3MTM0X0FMU0E9bQpDT05GSUdfVklE
RU9fU0FBNzEzNF9SQz15CkNPTkZJR19WSURFT19TQUE3MTM0X0RWQj1tCkNPTkZJR19WSURF
T19TQUE3MTY0PW0KCiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJ
R19EVkJfQVY3MTEwX0lSPXkKQ09ORklHX0RWQl9BVjcxMTA9bQpDT05GSUdfRFZCX0FWNzEx
MF9PU0Q9eQpDT05GSUdfRFZCX0JVREdFVF9DT1JFPW0KQ09ORklHX0RWQl9CVURHRVQ9bQpD
T05GSUdfRFZCX0JVREdFVF9DST1tCkNPTkZJR19EVkJfQlVER0VUX0FWPW0KQ09ORklHX0RW
Ql9CVURHRVRfUEFUQ0g9bQpDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQojIENPTkZJ
R19EVkJfQjJDMl9GTEVYQ09QX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUExV
VE8yPW0KQ09ORklHX0RWQl9ETTExMDU9bQpDT05GSUdfRFZCX1BUMT1tCkNPTkZJR19EVkJf
UFQzPW0KQ09ORklHX01BTlRJU19DT1JFPW0KQ09ORklHX0RWQl9NQU5USVM9bQpDT05GSUdf
RFZCX0hPUFBFUj1tCkNPTkZJR19EVkJfTkdFTkU9bQpDT05GSUdfRFZCX0REQlJJREdFPW0K
Q09ORklHX0RWQl9TTUlQQ0lFPW0KQ09ORklHX1Y0TF9QTEFURk9STV9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX0NBRkVfQ0NJQz1tCkNPTkZJR19WSURFT19WSUFfQ0FNRVJBPW0KIyBDT05G
SUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CkNPTkZJR19WNExfTUVNMk1FTV9EUklWRVJTPXkK
IyBDT05GSUdfVklERU9fTUVNMk1FTV9ERUlOVEVSTEFDRSBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX1NIX1ZFVSBpcyBub3Qgc2V0CkNPTkZJR19WNExfVEVTVF9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX1ZJVklEPW0KIyBDT05GSUdfVklERU9fVklNMk0gaXMgbm90IHNldAoKIwoj
IFN1cHBvcnRlZCBNTUMvU0RJTyBhZGFwdGVycwojCkNPTkZJR19TTVNfU0RJT19EUlY9bQpD
T05GSUdfUkFESU9fQURBUFRFUlM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD1tCkNPTkZJR19S
QURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD1tCiMgQ09ORklHX0kyQ19TSTQ3MFgg
aXMgbm90IHNldAojIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldApDT05GSUdfVVNC
X01SODAwPW0KQ09ORklHX1VTQl9EU0JSPW0KQ09ORklHX1JBRElPX01BWElSQURJTz1tCkNP
TkZJR19SQURJT19TSEFSSz1tCkNPTkZJR19SQURJT19TSEFSSzI9bQpDT05GSUdfVVNCX0tF
RU5FPW0KQ09ORklHX1VTQl9SQVJFTU9OTz1tCkNPTkZJR19VU0JfTUE5MDE9bQojIENPTkZJ
R19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fU0FBNzcwNkggaXMg
bm90IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFE
SU9fV0wxMjczIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBXTDEyOHggRk0g
ZHJpdmVyIChTVCBiYXNlZCkKIwoKIwojIFN1cHBvcnRlZCBGaXJlV2lyZSAoSUVFRSAxMzk0
KSBBZGFwdGVycwojCkNPTkZJR19EVkJfRklSRURUVj1tCkNPTkZJR19EVkJfRklSRURUVl9J
TlBVVD15CkNPTkZJR19NRURJQV9DT01NT05fT1BUSU9OUz15CgojCiMgY29tbW9uIGRyaXZl
ciBvcHRpb25zCiMKQ09ORklHX1ZJREVPX0NYMjM0MVg9bQpDT05GSUdfVklERU9fVFZFRVBS
T009bQpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT1tCkNPTkZJR19EVkJfQjJDMl9GTEVYQ09Q
PW0KQ09ORklHX1ZJREVPX1NBQTcxNDY9bQpDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCkNP
TkZJR19TTVNfU0lBTk9fTURUVj1tCkNPTkZJR19TTVNfU0lBTk9fUkM9eQojIENPTkZJR19T
TVNfU0lBTk9fREVCVUdGUyBpcyBub3Qgc2V0CgojCiMgTWVkaWEgYW5jaWxsYXJ5IGRyaXZl
cnMgKHR1bmVycywgc2Vuc29ycywgaTJjLCBmcm9udGVuZHMpCiMKQ09ORklHX01FRElBX1NV
QkRSVl9BVVRPU0VMRUNUPXkKQ09ORklHX01FRElBX0FUVEFDSD15CkNPTkZJR19WSURFT19J
Ul9JMkM9bQoKIwojIEF1ZGlvIGRlY29kZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKIwpD
T05GSUdfVklERU9fVFZBVURJTz1tCkNPTkZJR19WSURFT19UREE3NDMyPW0KQ09ORklHX1ZJ
REVPX1REQTk4NDA9bQpDT05GSUdfVklERU9fVEVBNjQxNUM9bQpDT05GSUdfVklERU9fVEVB
NjQyMD1tCkNPTkZJR19WSURFT19NU1AzNDAwPW0KQ09ORklHX1ZJREVPX0NTNTM0NT1tCkNP
TkZJR19WSURFT19DUzUzTDMyQT1tCkNPTkZJR19WSURFT19XTTg3NzU9bQpDT05GSUdfVklE
RU9fV004NzM5PW0KQ09ORklHX1ZJREVPX1ZQMjdTTVBYPW0KCiMKIyBSRFMgZGVjb2RlcnMK
IwpDT05GSUdfVklERU9fU0FBNjU4OD1tCgojCiMgVmlkZW8gZGVjb2RlcnMKIwpDT05GSUdf
VklERU9fQlQ4MTk9bQpDT05GSUdfVklERU9fQlQ4NTY9bQpDT05GSUdfVklERU9fQlQ4NjY9
bQpDT05GSUdfVklERU9fS1MwMTI3PW0KQ09ORklHX1ZJREVPX1NBQTcxMTA9bQpDT05GSUdf
VklERU9fU0FBNzExWD1tCkNPTkZJR19WSURFT19UVlA1MTUwPW0KQ09ORklHX1ZJREVPX1ZQ
WDMyMjA9bQoKIwojIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwojCkNPTkZJR19WSURFT19T
QUE3MTdYPW0KQ09ORklHX1ZJREVPX0NYMjU4NDA9bQoKIwojIFZpZGVvIGVuY29kZXJzCiMK
Q09ORklHX1ZJREVPX1NBQTcxMjc9bQpDT05GSUdfVklERU9fU0FBNzE4NT1tCkNPTkZJR19W
SURFT19BRFY3MTcwPW0KQ09ORklHX1ZJREVPX0FEVjcxNzU9bQoKIwojIENhbWVyYSBzZW5z
b3IgZGV2aWNlcwojCkNPTkZJR19WSURFT19PVjc2NzA9bQpDT05GSUdfVklERU9fTVQ5VjAx
MT1tCgojCiMgRmxhc2ggZGV2aWNlcwojCgojCiMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMK
IwpDT05GSUdfVklERU9fVVBENjQwMzFBPW0KQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KCiMK
IyBBdWRpby9WaWRlbyBjb21wcmVzc2lvbiBjaGlwcwojCkNPTkZJR19WSURFT19TQUE2NzUy
SFM9bQoKIwojIE1pc2NlbGxhbmVvdXMgaGVscGVyIGNoaXBzCiMKQ09ORklHX1ZJREVPX001
Mjc5MD1tCgojCiMgU2Vuc29ycyB1c2VkIG9uIHNvY19jYW1lcmEgZHJpdmVyCiMKQ09ORklH
X01FRElBX1RVTkVSPW0KQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCkNPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwPW0KQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQpDT05GSUdf
TUVESUFfVFVORVJfVERBMTgyNzE9bQpDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCkNP
TkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9
bQpDT05GSUdfTUVESUFfVFVORVJfTVNJMDAxPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjBY
WD1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQpDT05GSUdfTUVESUFfVFVORVJfTVQy
MDYzPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCkNPTkZJR19NRURJQV9UVU5FUl9N
VDIxMzE9bQpDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KQ09ORklHX01FRElBX1RVTkVS
X1hDMjAyOD1tCkNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05GSUdfTUVESUFfVFVO
RVJfWEM0MDAwPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDUwMDdUPW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KQ09ORklH
X01FRElBX1RVTkVSX01BWDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9bQpD
T05GSUdfTUVESUFfVFVORVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1t
CkNPTkZJR19NRURJQV9UVU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgy
MTI9bQpDT05GSUdfTUVESUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMy
NTgwPW0KQ09ORklHX01FRElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVO
RVJfVFVBOTAwMT1tCkNPTkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFf
VFVORVJfSVQ5MTNYPW0KQ09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDMwMVJGPW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQoKIwoj
IE11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TVEIw
ODk5PW0KQ09ORklHX0RWQl9TVEI2MTAwPW0KQ09ORklHX0RWQl9TVFYwOTB4PW0KQ09ORklH
X0RWQl9TVFY2MTEweD1tCkNPTkZJR19EVkJfTTg4RFMzMTAzPW0KCiMKIyBNdWx0aXN0YW5k
YXJkIChjYWJsZSArIHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0RSWEs9
bQpDT05GSUdfRFZCX1REQTE4MjcxQzJERD1tCkNPTkZJR19EVkJfU0kyMTY1PW0KCiMKIyBE
VkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0NYMjQxMTA9bQpDT05G
SUdfRFZCX0NYMjQxMjM9bQpDT05GSUdfRFZCX01UMzEyPW0KQ09ORklHX0RWQl9aTDEwMDM2
PW0KQ09ORklHX0RWQl9aTDEwMDM5PW0KQ09ORklHX0RWQl9TNUgxNDIwPW0KQ09ORklHX0RW
Ql9TVFYwMjg4PW0KQ09ORklHX0RWQl9TVEI2MDAwPW0KQ09ORklHX0RWQl9TVFYwMjk5PW0K
Q09ORklHX0RWQl9TVFY2MTEwPW0KQ09ORklHX0RWQl9TVFYwOTAwPW0KQ09ORklHX0RWQl9U
REE4MDgzPW0KQ09ORklHX0RWQl9UREExMDA4Nj1tCkNPTkZJR19EVkJfVERBODI2MT1tCkNP
TkZJR19EVkJfVkVTMVg5Mz1tCkNPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCkNPTkZJR19E
VkJfVFVORVJfQ1gyNDExMz1tCkNPTkZJR19EVkJfVERBODI2WD1tCkNPTkZJR19EVkJfVFVB
NjEwMD1tCkNPTkZJR19EVkJfQ1gyNDExNj1tCkNPTkZJR19EVkJfQ1gyNDExNz1tCkNPTkZJ
R19EVkJfU0kyMVhYPW0KQ09ORklHX0RWQl9UUzIwMjA9bQpDT05GSUdfRFZCX0RTMzAwMD1t
CkNPTkZJR19EVkJfTUI4NkExNj1tCkNPTkZJR19EVkJfVERBMTAwNzE9bQoKIwojIERWQi1U
ICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TUDg4NzA9bQpDT05GSUdf
RFZCX1NQODg3WD1tCkNPTkZJR19EVkJfQ1gyMjcwMD1tCkNPTkZJR19EVkJfQ1gyMjcwMj1t
CkNPTkZJR19EVkJfRFJYRD1tCkNPTkZJR19EVkJfTDY0NzgxPW0KQ09ORklHX0RWQl9UREEx
MDA0WD1tCkNPTkZJR19EVkJfTlhUNjAwMD1tCkNPTkZJR19EVkJfTVQzNTI9bQpDT05GSUdf
RFZCX1pMMTAzNTM9bQpDT05GSUdfRFZCX0RJQjMwMDBNQj1tCkNPTkZJR19EVkJfRElCMzAw
ME1DPW0KQ09ORklHX0RWQl9ESUI3MDAwTT1tCkNPTkZJR19EVkJfRElCNzAwMFA9bQpDT05G
SUdfRFZCX1REQTEwMDQ4PW0KQ09ORklHX0RWQl9BRjkwMTM9bQpDT05GSUdfRFZCX0VDMTAw
PW0KQ09ORklHX0RWQl9TVFYwMzY3PW0KQ09ORklHX0RWQl9DWEQyODIwUj1tCkNPTkZJR19E
VkJfUlRMMjgzMD1tCkNPTkZJR19EVkJfUlRMMjgzMj1tCkNPTkZJR19EVkJfUlRMMjgzMl9T
RFI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfQVMxMDJfRkU9bQoKIwojIERW
Qi1DIChjYWJsZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9WRVMxODIwPW0KQ09ORklHX0RW
Ql9UREExMDAyMT1tCkNPTkZJR19EVkJfVERBMTAwMjM9bQpDT05GSUdfRFZCX1NUVjAyOTc9
bQoKIwojIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBE
VFYpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfTlhUMjAwWD1tCkNPTkZJR19EVkJfT1I1MTIx
MT1tCkNPTkZJR19EVkJfT1I1MTEzMj1tCkNPTkZJR19EVkJfQkNNMzUxMD1tCkNPTkZJR19E
VkJfTEdEVDMzMFg9bQpDT05GSUdfRFZCX0xHRFQzMzA1PW0KQ09ORklHX0RWQl9MR0RUMzMw
NkE9bQpDT05GSUdfRFZCX0xHMjE2MD1tCkNPTkZJR19EVkJfUzVIMTQwOT1tCkNPTkZJR19E
VkJfQVU4NTIyPW0KQ09ORklHX0RWQl9BVTg1MjJfRFRWPW0KQ09ORklHX0RWQl9BVTg1MjJf
VjRMPW0KQ09ORklHX0RWQl9TNUgxNDExPW0KCiMKIyBJU0RCLVQgKHRlcnJlc3RyaWFsKSBm
cm9udGVuZHMKIwpDT05GSUdfRFZCX1M5MjE9bQpDT05GSUdfRFZCX0RJQjgwMDA9bQpDT05G
SUdfRFZCX01CODZBMjBTPW0KCiMKIyBJU0RCLVMgKHNhdGVsbGl0ZSkgJiBJU0RCLVQgKHRl
cnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1RDOTA1MjI9bQoKIwojIERpZ2l0
YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCiMKQ09ORklHX0RWQl9QTEw9bQpDT05G
SUdfRFZCX1RVTkVSX0RJQjAwNzA9bQpDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTA9bQoKIwoj
IFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKQ09ORklHX0RWQl9EUlgzOVhZSj1t
CkNPTkZJR19EVkJfTE5CUDIxPW0KQ09ORklHX0RWQl9MTkJQMjI9bQpDT05GSUdfRFZCX0lT
TDY0MDU9bQpDT05GSUdfRFZCX0lTTDY0MjE9bQpDT05GSUdfRFZCX0lTTDY0MjM9bQpDT05G
SUdfRFZCX0E4MjkzPW0KQ09ORklHX0RWQl9TUDI9bQpDT05GSUdfRFZCX0xHUzhHWFg9bQpD
T05GSUdfRFZCX0FUQk04ODMwPW0KQ09ORklHX0RWQl9UREE2NjV4PW0KQ09ORklHX0RWQl9J
WDI1MDVWPW0KQ09ORklHX0RWQl9NODhSUzIwMDA9bQpDT05GSUdfRFZCX0FGOTAzMz1tCgoj
CiMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1Z
X0ZFIGlzIG5vdCBzZXQKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09ORklHX0FHUD15CkNP
TkZJR19BR1BfQU1ENjQ9eQpDT05GSUdfQUdQX0lOVEVMPXkKQ09ORklHX0FHUF9TSVM9eQpD
T05GSUdfQUdQX1ZJQT15CkNPTkZJR19JTlRFTF9HVFQ9eQpDT05GSUdfVkdBX0FSQj15CkNP
TkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CkNPTkZJR19WR0FfU1dJVENIRVJPTz15CgojCiMg
RGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyCiMKQ09ORklHX0RSTT1tCkNPTkZJR19EUk1fTUlQ
SV9EU0k9eQpDT05GSUdfRFJNX0tNU19IRUxQRVI9bQpDT05GSUdfRFJNX0tNU19GQl9IRUxQ
RVI9eQpDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRT15CkNPTkZJR19EUk1fVFRNPW0K
CiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwojIENPTkZJR19EUk1fSTJDX0FE
Vjc1MTEgaXMgbm90IHNldApDT05GSUdfRFJNX0kyQ19DSDcwMDY9bQpDT05GSUdfRFJNX0ky
Q19TSUwxNjQ9bQojIENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYIGlzIG5vdCBzZXQKQ09O
RklHX0RSTV9UREZYPW0KQ09ORklHX0RSTV9SMTI4PW0KQ09ORklHX0RSTV9SQURFT049bQoj
IENPTkZJR19EUk1fUkFERU9OX1VTRVJQVFIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUkFE
RU9OX1VNUyBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTk9VVkVBVT1tCkNPTkZJR19OT1VWRUFV
X0RFQlVHPTUKQ09ORklHX05PVVZFQVVfREVCVUdfREVGQVVMVD0zCkNPTkZJR19EUk1fTk9V
VkVBVV9CQUNLTElHSFQ9eQojIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fSTkxNT1tCkNPTkZJR19EUk1fSTkxNV9LTVM9eQpDT05GSUdfRFJNX0k5MTVfRkJERVY9
eQojIENPTkZJR19EUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQT1JUIGlzIG5vdCBzZXQK
Q09ORklHX0RSTV9NR0E9bQpDT05GSUdfRFJNX1NJUz1tCkNPTkZJR19EUk1fVklBPW0KQ09O
RklHX0RSTV9TQVZBR0U9bQpDT05GSUdfRFJNX1ZHRU09bQpDT05GSUdfRFJNX1ZNV0dGWD1t
CkNPTkZJR19EUk1fVk1XR0ZYX0ZCQ09OPXkKQ09ORklHX0RSTV9HTUE1MDA9bQpDT05GSUdf
RFJNX0dNQTYwMD15CkNPTkZJR19EUk1fR01BMzYwMD15CkNPTkZJR19EUk1fVURMPW0KQ09O
RklHX0RSTV9BU1Q9bQpDT05GSUdfRFJNX01HQUcyMDA9bQpDT05GSUdfRFJNX0NJUlJVU19R
RU1VPW0KQ09ORklHX0RSTV9RWEw9bQpDT05GSUdfRFJNX0JPQ0hTPW0KQ09ORklHX0RSTV9Q
QU5FTD15CgojCiMgRGlzcGxheSBQYW5lbHMKIwojIENPTkZJR19IU0FfQU1EIGlzIG5vdCBz
ZXQKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwojCkNPTkZJR19GQj15CkNPTkZJR19GSVJN
V0FSRV9FRElEPXkKQ09ORklHX0ZCX0NNRExJTkU9eQpDT05GSUdfRkJfRERDPW0KQ09ORklH
X0ZCX0JPT1RfVkVTQV9TVVBQT1JUPXkKQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CkNPTkZJ
R19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldApDT05GSUdfRkJfU1lTX0ZJ
TExSRUNUPXkKQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15CkNPTkZJR19GQl9TWVNfSU1BR0VC
TElUPXkKIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldApDT05GSUdfRkJf
U1lTX0ZPUFM9eQpDT05GSUdfRkJfREVGRVJSRURfSU89eQpDT05GSUdfRkJfSEVDVUJBPW0K
Q09ORklHX0ZCX1NWR0FMSUI9bQojIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CkNP
TkZJR19GQl9CQUNLTElHSFQ9eQpDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1RJTEVCTElUVElORz15CgojCiMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKIwpD
T05GSUdfRkJfQ0lSUlVTPW0KQ09ORklHX0ZCX1BNMj1tCkNPTkZJR19GQl9QTTJfRklGT19E
SVNDT05ORUNUPXkKQ09ORklHX0ZCX0NZQkVSMjAwMD1tCkNPTkZJR19GQl9DWUJFUjIwMDBf
RERDPXkKQ09ORklHX0ZCX0FSQz1tCiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldApDT05GSUdfRkJfVkdBMTY9bQpDT05GSUdf
RkJfVVZFU0E9bQpDT05GSUdfRkJfVkVTQT15CkNPTkZJR19GQl9FRkk9eQpDT05GSUdfRkJf
TjQxMT1tCkNPTkZJR19GQl9IR0E9bQojIENPTkZJR19GQl9PUEVOQ09SRVMgaXMgbm90IHNl
dAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX05WSURJQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAojIENPTkZJR19GQl9JNzQw
IGlzIG5vdCBzZXQKQ09ORklHX0ZCX0xFODA1Nzg9bQpDT05GSUdfRkJfQ0FSSUxMT19SQU5D
SD1tCiMgQ09ORklHX0ZCX0lOVEVMIGlzIG5vdCBzZXQKQ09ORklHX0ZCX01BVFJPWD1tCkNP
TkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15
CkNPTkZJR19GQl9NQVRST1hfRz15CkNPTkZJR19GQl9NQVRST1hfSTJDPW0KQ09ORklHX0ZC
X01BVFJPWF9NQVZFTj1tCkNPTkZJR19GQl9SQURFT049bQpDT05GSUdfRkJfUkFERU9OX0ky
Qz15CkNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKIyBDT05GSUdfRkJfUkFERU9OX0RF
QlVHIGlzIG5vdCBzZXQKQ09ORklHX0ZCX0FUWTEyOD1tCkNPTkZJR19GQl9BVFkxMjhfQkFD
S0xJR0hUPXkKQ09ORklHX0ZCX0FUWT1tCkNPTkZJR19GQl9BVFlfQ1Q9eQojIENPTkZJR19G
Ql9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldApDT05GSUdfRkJfQVRZX0dYPXkKQ09ORklH
X0ZCX0FUWV9CQUNLTElHSFQ9eQpDT05GSUdfRkJfUzM9bQpDT05GSUdfRkJfUzNfRERDPXkK
Q09ORklHX0ZCX1NBVkFHRT1tCiMgQ09ORklHX0ZCX1NBVkFHRV9JMkMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0VfQUNDRUwgaXMgbm90IHNldApDT05GSUdfRkJfU0lTPW0KQ09O
RklHX0ZCX1NJU18zMDA9eQpDT05GSUdfRkJfU0lTXzMxNT15CkNPTkZJR19GQl9WSUE9bQoj
IENPTkZJR19GQl9WSUFfRElSRUNUX1BST0NGUyBpcyBub3Qgc2V0CkNPTkZJR19GQl9WSUFf
WF9DT01QQVRJQklMSVRZPXkKQ09ORklHX0ZCX05FT01BR0lDPW0KQ09ORklHX0ZCX0tZUk89
bQpDT05GSUdfRkJfM0RGWD1tCiMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldApD
T05GSUdfRkJfM0RGWF9JMkM9eQpDT05GSUdfRkJfVk9PRE9PMT1tCkNPTkZJR19GQl9WVDg2
MjM9bQpDT05GSUdfRkJfVFJJREVOVD1tCkNPTkZJR19GQl9BUks9bQpDT05GSUdfRkJfUE0z
PW0KIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CkNPTkZJR19GQl9TTVNDVUZYPW0K
Q09ORklHX0ZCX1VETD1tCkNPTkZJR19GQl9WSVJUVUFMPW0KQ09ORklHX1hFTl9GQkRFVl9G
Uk9OVEVORD15CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkNPTkZJR19GQl9N
Qjg2MlhYPW0KQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQz15CkNPTkZJR19GQl9NQjg2MlhY
X0kyQz15CiMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAojIENPTkZJR19GQl9B
VU9fSzE5MFggaXMgbm90IHNldApDT05GSUdfRkJfSFlQRVJWPW0KQ09ORklHX0ZCX1NJTVBM
RT15CkNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQojIENPTkZJR19MQ0RfQ0xBU1Nf
REVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENP
TkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CkNPTkZJR19CQUNLTElHSFRfQVBQ
TEU9bQojIENPTkZJR19CQUNLTElHSFRfU0FIQVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFD
S0xJR0hUX0FEUDg4NjAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MTTM2MzkgaXMgbm90IHNldAojIENPTkZJ
R19CQUNLTElHSFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdM
UCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldApDT05G
SUdfVkdBU1RBVEU9bQpDT05GSUdfSERNST15CgojCiMgQ29uc29sZSBkaXNwbGF5IGRyaXZl
ciBzdXBwb3J0CiMKQ09ORklHX1ZHQV9DT05TT0xFPXkKIyBDT05GSUdfVkdBQ09OX1NPRlRf
U0NST0xMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19EVU1NWV9DT05TT0xFPXkKQ09ORklHX0RV
TU1ZX0NPTlNPTEVfQ09MVU1OUz04MApDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTPTI1CkNP
TkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVf
REVURUNUX1BSSU1BUlk9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15
CiMgQ09ORklHX0xPR08gaXMgbm90IHNldApDT05GSUdfU09VTkQ9bQpDT05GSUdfU09VTkRf
T1NTX0NPUkU9eQojIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBpcyBub3Qgc2V0
CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NORF9QQ009bQpDT05G
SUdfU05EX0hXREVQPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9DT01QUkVT
U19PRkZMT0FEPW0KQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9TRVFVRU5DRVI9bQpD
T05GSUdfU05EX1NFUV9EVU1NWT1tCkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRf
TUlYRVJfT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BM
VUdJTlM9eQojIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfSFJUSU1FUj1tCkNPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CkNPTkZJR19T
TkRfRFlOQU1JQ19NSU5PUlM9eQpDT05GSUdfU05EX01BWF9DQVJEUz0zMgpDT05GSUdfU05E
X1NVUFBPUlRfT0xEX0FQST15CkNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQojIENPTkZJ
R19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVCVUcgaXMg
bm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05GSUdfU05EX0tDVExfSkFDSz15CkNP
TkZJR19TTkRfRE1BX1NHQlVGPXkKQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCkNPTkZJR19T
TkRfT1BMM19MSUJfU0VRPW0KIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldApDT05GSUdfU05EX0VNVTEwSzFf
U0VRPW0KQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCkNPTkZJR19TTkRfT1BMM19MSUI9bQpD
T05GSUdfU05EX1ZYX0xJQj1tCkNPTkZJR19TTkRfQUM5N19DT0RFQz1tCkNPTkZJR19TTkRf
RFJJVkVSUz15CkNPTkZJR19TTkRfUENTUD1tCkNPTkZJR19TTkRfRFVNTVk9bQpDT05GSUdf
U05EX0FMT09QPW0KQ09ORklHX1NORF9WSVJNSURJPW0KQ09ORklHX1NORF9NVFBBVj1tCkNP
TkZJR19TTkRfTVRTNjQ9bQpDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQpDT05GSUdfU05E
X01QVTQwMT1tCkNPTkZJR19TTkRfUE9SVE1BTjJYND1tCkNPTkZJR19TTkRfQUM5N19QT1dF
Ul9TQVZFPXkKQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0wCkNPTkZJR19T
TkRfU0JfQ09NTU9OPW0KQ09ORklHX1NORF9QQ0k9eQpDT05GSUdfU05EX0FEMTg4OT1tCkNP
TkZJR19TTkRfQUxTMzAwPW0KQ09ORklHX1NORF9BTFM0MDAwPW0KQ09ORklHX1NORF9BTEk1
NDUxPW0KQ09ORklHX1NORF9BU0lIUEk9bQpDT05GSUdfU05EX0FUSUlYUD1tCkNPTkZJR19T
TkRfQVRJSVhQX01PREVNPW0KQ09ORklHX1NORF9BVTg4MTA9bQpDT05GSUdfU05EX0FVODgy
MD1tCkNPTkZJR19TTkRfQVU4ODMwPW0KIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CkNP
TkZJR19TTkRfQVpUMzMyOD1tCkNPTkZJR19TTkRfQlQ4N1g9bQojIENPTkZJR19TTkRfQlQ4
N1hfT1ZFUkNMT0NLIGlzIG5vdCBzZXQKQ09ORklHX1NORF9DQTAxMDY9bQpDT05GSUdfU05E
X0NNSVBDST1tCkNPTkZJR19TTkRfT1hZR0VOX0xJQj1tCkNPTkZJR19TTkRfT1hZR0VOPW0K
Q09ORklHX1NORF9DUzQyODE9bQpDT05GSUdfU05EX0NTNDZYWD1tCkNPTkZJR19TTkRfQ1M0
NlhYX05FV19EU1A9eQpDT05GSUdfU05EX0NUWEZJPW0KQ09ORklHX1NORF9EQVJMQTIwPW0K
Q09ORklHX1NORF9HSU5BMjA9bQpDT05GSUdfU05EX0xBWUxBMjA9bQpDT05GSUdfU05EX0RB
UkxBMjQ9bQpDT05GSUdfU05EX0dJTkEyND1tCkNPTkZJR19TTkRfTEFZTEEyND1tCkNPTkZJ
R19TTkRfTU9OQT1tCkNPTkZJR19TTkRfTUlBPW0KQ09ORklHX1NORF9FQ0hPM0c9bQpDT05G
SUdfU05EX0lORElHTz1tCkNPTkZJR19TTkRfSU5ESUdPSU89bQpDT05GSUdfU05EX0lORElH
T0RKPW0KQ09ORklHX1NORF9JTkRJR09JT1g9bQpDT05GSUdfU05EX0lORElHT0RKWD1tCkNP
TkZJR19TTkRfRU1VMTBLMT1tCkNPTkZJR19TTkRfRU1VMTBLMVg9bQpDT05GSUdfU05EX0VO
UzEzNzA9bQpDT05GSUdfU05EX0VOUzEzNzE9bQpDT05GSUdfU05EX0VTMTkzOD1tCkNPTkZJ
R19TTkRfRVMxOTY4PW0KQ09ORklHX1NORF9FUzE5NjhfSU5QVVQ9eQpDT05GSUdfU05EX0VT
MTk2OF9SQURJTz15CkNPTkZJR19TTkRfRk04MDE9bQpDT05GSUdfU05EX0ZNODAxX1RFQTU3
NVhfQk9PTD15CkNPTkZJR19TTkRfSERTUD1tCkNPTkZJR19TTkRfSERTUE09bQpDT05GSUdf
U05EX0lDRTE3MTI9bQpDT05GSUdfU05EX0lDRTE3MjQ9bQpDT05GSUdfU05EX0lOVEVMOFgw
PW0KQ09ORklHX1NORF9JTlRFTDhYME09bQpDT05GSUdfU05EX0tPUkcxMjEyPW0KQ09ORklH
X1NORF9MT0xBPW0KQ09ORklHX1NORF9MWDY0NjRFUz1tCkNPTkZJR19TTkRfTUFFU1RSTzM9
bQpDT05GSUdfU05EX01BRVNUUk8zX0lOUFVUPXkKQ09ORklHX1NORF9NSVhBUlQ9bQpDT05G
SUdfU05EX05NMjU2PW0KQ09ORklHX1NORF9QQ1hIUj1tCkNPTkZJR19TTkRfUklQVElERT1t
CkNPTkZJR19TTkRfUk1FMzI9bQpDT05GSUdfU05EX1JNRTk2PW0KQ09ORklHX1NORF9STUU5
NjUyPW0KQ09ORklHX1NORF9TT05JQ1ZJQkVTPW0KQ09ORklHX1NORF9UUklERU5UPW0KQ09O
RklHX1NORF9WSUE4MlhYPW0KQ09ORklHX1NORF9WSUE4MlhYX01PREVNPW0KQ09ORklHX1NO
RF9WSVJUVU9TTz1tCkNPTkZJR19TTkRfVlgyMjI9bQpDT05GSUdfU05EX1lNRlBDST1tCgoj
CiMgSEQtQXVkaW8KIwpDT05GSUdfU05EX0hEQT1tCkNPTkZJR19TTkRfSERBX0lOVEVMPW0K
Q09ORklHX1NORF9IREFfRFNQX0xPQURFUj15CkNPTkZJR19TTkRfSERBX1BSRUFMTE9DX1NJ
WkU9NjQKQ09ORklHX1NORF9IREFfSFdERVA9eQpDT05GSUdfU05EX0hEQV9SRUNPTkZJRz15
CkNPTkZJR19TTkRfSERBX0lOUFVUX0JFRVA9eQpDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQ
X01PREU9MQpDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLPXkKQ09ORklHX1NORF9IREFfUEFU
Q0hfTE9BREVSPXkKQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz1tCkNPTkZJR19TTkRf
SERBX0NPREVDX0FOQUxPRz1tCkNPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPW0KQ09O
RklHX1NORF9IREFfQ09ERUNfVklBPW0KQ09ORklHX1NORF9IREFfQ09ERUNfSERNST1tCkNP
TkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DSVJSVVM9bQpDT05G
SUdfU05EX0hEQV9DT0RFQ19DT05FWEFOVD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEx
MD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEzMj1tCkNPTkZJR19TTkRfSERBX0NPREVD
X0NBMDEzMl9EU1A9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DTUVESUE9bQpDT05GSUdfU05E
X0hEQV9DT0RFQ19TSTMwNTQ9bQpDT05GSUdfU05EX0hEQV9HRU5FUklDPW0KQ09ORklHX1NO
RF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKQ09ORklHX1NORF9IREFfQ09SRT1tCkNPTkZJ
R19TTkRfU1BJPXkKQ09ORklHX1NORF9VU0I9eQpDT05GSUdfU05EX1VTQl9BVURJTz1tCkNP
TkZJR19TTkRfVVNCX1VBMTAxPW0KQ09ORklHX1NORF9VU0JfVVNYMlk9bQpDT05GSUdfU05E
X1VTQl9DQUlBUT1tCkNPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKQ09ORklHX1NORF9V
U0JfVVMxMjJMPW0KQ09ORklHX1NORF9VU0JfNkZJUkU9bQpDT05GSUdfU05EX1VTQl9ISUZB
Q0U9bQpDT05GSUdfU05EX0JDRDIwMDA9bQpDT05GSUdfU05EX1VTQl9MSU5FNj1tCkNPTkZJ
R19TTkRfVVNCX1BPRD1tCkNPTkZJR19TTkRfVVNCX1BPREhEPW0KQ09ORklHX1NORF9VU0Jf
VE9ORVBPUlQ9bQpDT05GSUdfU05EX1VTQl9WQVJJQVg9bQpDT05GSUdfU05EX0ZJUkVXSVJF
PXkKQ09ORklHX1NORF9GSVJFV0lSRV9MSUI9bQpDT05GSUdfU05EX0RJQ0U9bQpDT05GSUdf
U05EX09YRlc9bQpDT05GSUdfU05EX0lTSUdIVD1tCkNPTkZJR19TTkRfU0NTMVg9bQpDT05G
SUdfU05EX0ZJUkVXT1JLUz1tCkNPTkZJR19TTkRfQkVCT0I9bQpDT05GSUdfU05EX1BDTUNJ
QT15CkNPTkZJR19TTkRfVlhQT0NLRVQ9bQpDT05GSUdfU05EX1BEQVVESU9DRj1tCkNPTkZJ
R19TTkRfU09DPW0KIyBDT05GSUdfU05EX0FUTUVMX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9ERVNJR05XQVJFX0kyUyBpcyBub3Qgc2V0CgojCiMgU29DIEF1ZGlvIGZvciBGcmVl
c2NhbGUgQ1BVcwojCgojCiMgQ29tbW9uIFNvQyBBdWRpbyBvcHRpb25zIGZvciBGcmVlc2Nh
bGUgQ1BVczoKIwojIENPTkZJR19TTkRfU09DX0ZTTF9BU1JDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19GU0xfU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1BESUYgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX0ZTTF9FU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19JTVhf
QVVETVVYIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfSU5URUxfU1NUPW0KQ09ORklHX1NO
RF9TT0NfSU5URUxfU1NUX0FDUEk9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9IQVNXRUxMPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQkFZVFJBSUw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9I
QVNXRUxMX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRfUlQ1NjQwX01BQ0g9bQpD
T05GSUdfU05EX1NPQ19JTlRFTF9CWVRfTUFYOTgwOTBfTUFDSD1tCkNPTkZJR19TTkRfU09D
X0lOVEVMX0JST0FEV0VMTF9NQUNIPW0KIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9S
VDU2NDBfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NzJfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NDVfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUUNPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfWFRGUEdBX0kyUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0kyQ19BTkRfU1BJPW0KCiMKIyBDT0RFQyBkcml2ZXJzCiMKIyBDT05GSUdfU05EX1NPQ19B
REFVMTcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs0MTA0IGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19BSzQ1NTQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0FL
NDY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs1Mzg2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19BTEM1NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzM1
TDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDUxX0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
Q1M0Mkw1NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw3MyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0MjY1IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19D
UzQyNzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX0NTNDJYWDhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19IRE1JX0NPREVD
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19FUzgzMjggaXMgbm90IHNldApDT05GSUdf
U05EX1NPQ19NQVg5ODA5MD1tCiMgQ09ORklHX1NORF9TT0NfUENNMTY4MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfUENNMTc5MkEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09D
X1BDTTUxMnhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCkNPTkZJR19TTkRfU09DX1JUMjg2
PW0KIyBDT05GSUdfU05EX1NPQ19SVDU2MzEgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19S
VDU2NDA9bQojIENPTkZJR19TTkRfU09DX1JUNTY3N19TUEkgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1NHVEw1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TSVJGX0FV
RElPX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TUERJRiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TU000NTY3IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TVEEzMlggaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1NUQTM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjU1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTNTA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfVEZBOTg3OSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19TUEkgaXMgbm90
IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzMxWFggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UUzNB
MjI3RSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NTEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19XTTg1MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODU4
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19XTTg3MjggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODczMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XTTg3NDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19XTTg3NzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc3NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfV004ODA0X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfV004ODA0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg5NjIgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1dNODk3OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NJTVBMRV9DQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdf
U09VTkRfUFJJTUUgaXMgbm90IHNldApDT05GSUdfQUM5N19CVVM9bQoKIwojIEhJRCBzdXBw
b3J0CiMKQ09ORklHX0hJRD1tCkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJ
R19ISURSQVc9eQpDT05GSUdfVUhJRD1tCkNPTkZJR19ISURfR0VORVJJQz1tCgojCiMgU3Bl
Y2lhbCBISUQgZHJpdmVycwojCkNPTkZJR19ISURfQTRURUNIPW0KQ09ORklHX0hJRF9BQ1JV
WD1tCkNPTkZJR19ISURfQUNSVVhfRkY9eQpDT05GSUdfSElEX0FQUExFPW0KQ09ORklHX0hJ
RF9BUFBMRUlSPW0KQ09ORklHX0hJRF9BVVJFQUw9bQpDT05GSUdfSElEX0JFTEtJTj1tCiMg
Q09ORklHX0hJRF9CRVRPUF9GRiBpcyBub3Qgc2V0CkNPTkZJR19ISURfQ0hFUlJZPW0KQ09O
RklHX0hJRF9DSElDT05ZPW0KQ09ORklHX0hJRF9QUk9ESUtFWVM9bQpDT05GSUdfSElEX0NQ
MjExMj1tCkNPTkZJR19ISURfQ1lQUkVTUz1tCkNPTkZJR19ISURfRFJBR09OUklTRT1tCkNP
TkZJR19EUkFHT05SSVNFX0ZGPXkKQ09ORklHX0hJRF9FTVNfRkY9bQpDT05GSUdfSElEX0VM
RUNPTT1tCkNPTkZJR19ISURfRUxPPW0KQ09ORklHX0hJRF9FWktFWT1tCkNPTkZJR19ISURf
SE9MVEVLPW0KQ09ORklHX0hPTFRFS19GRj15CiMgQ09ORklHX0hJRF9HVDY4M1IgaXMgbm90
IHNldApDT05GSUdfSElEX0tFWVRPVUNIPW0KQ09ORklHX0hJRF9LWUU9bQpDT05GSUdfSElE
X1VDTE9HSUM9bQpDT05GSUdfSElEX1dBTFRPUD1tCkNPTkZJR19ISURfR1lSQVRJT049bQpD
T05GSUdfSElEX0lDQURFPW0KQ09ORklHX0hJRF9UV0lOSEFOPW0KQ09ORklHX0hJRF9LRU5T
SU5HVE9OPW0KQ09ORklHX0hJRF9MQ1BPV0VSPW0KQ09ORklHX0hJRF9MRU5PVk89bQpDT05G
SUdfSElEX0xPR0lURUNIPW0KQ09ORklHX0hJRF9MT0dJVEVDSF9ESj1tCkNPTkZJR19ISURf
TE9HSVRFQ0hfSElEUFA9bQpDT05GSUdfTE9HSVRFQ0hfRkY9eQpDT05GSUdfTE9HSVJVTUJM
RVBBRDJfRkY9eQpDT05GSUdfTE9HSUc5NDBfRkY9eQpDT05GSUdfTE9HSVdIRUVMU19GRj15
CkNPTkZJR19ISURfTUFHSUNNT1VTRT1tCkNPTkZJR19ISURfTUlDUk9TT0ZUPW0KQ09ORklH
X0hJRF9NT05URVJFWT1tCkNPTkZJR19ISURfTVVMVElUT1VDSD1tCkNPTkZJR19ISURfTlRS
SUc9bQpDT05GSUdfSElEX09SVEVLPW0KQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCkNPTkZJ
R19QQU5USEVSTE9SRF9GRj15CkNPTkZJR19ISURfUEVOTU9VTlQ9bQpDT05GSUdfSElEX1BF
VEFMWU5YPW0KQ09ORklHX0hJRF9QSUNPTENEPW0KQ09ORklHX0hJRF9QSUNPTENEX0ZCPXkK
Q09ORklHX0hJRF9QSUNPTENEX0JBQ0tMSUdIVD15CkNPTkZJR19ISURfUElDT0xDRF9MRURT
PXkKQ09ORklHX0hJRF9QSUNPTENEX0NJUj15CiMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBp
cyBub3Qgc2V0CkNPTkZJR19ISURfUFJJTUFYPW0KQ09ORklHX0hJRF9ST0NDQVQ9bQpDT05G
SUdfSElEX1NBSVRFSz1tCkNPTkZJR19ISURfU0FNU1VORz1tCkNPTkZJR19ISURfU09OWT1t
CkNPTkZJR19TT05ZX0ZGPXkKQ09ORklHX0hJRF9TUEVFRExJTks9bQpDT05GSUdfSElEX1NU
RUVMU0VSSUVTPW0KQ09ORklHX0hJRF9TVU5QTFVTPW0KQ09ORklHX0hJRF9STUk9bQpDT05G
SUdfSElEX0dSRUVOQVNJQT1tCkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElEX0hZ
UEVSVl9NT1VTRT1tCkNPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KQ09ORklHX1NNQVJUSk9Z
UExVU19GRj15CkNPTkZJR19ISURfVElWTz1tCkNPTkZJR19ISURfVE9QU0VFRD1tCkNPTkZJ
R19ISURfVEhJTkdNPW0KQ09ORklHX0hJRF9USFJVU1RNQVNURVI9bQpDT05GSUdfVEhSVVNU
TUFTVEVSX0ZGPXkKQ09ORklHX0hJRF9XQUNPTT1tCkNPTkZJR19ISURfV0lJTU9URT1tCkNP
TkZJR19ISURfWElOTU89bQpDT05GSUdfSElEX1pFUk9QTFVTPW0KQ09ORklHX1pFUk9QTFVT
X0ZGPXkKQ09ORklHX0hJRF9aWURBQ1JPTj1tCkNPTkZJR19ISURfU0VOU09SX0hVQj1tCiMg
Q09ORklHX0hJRF9TRU5TT1JfQ1VTVE9NX1NFTlNPUiBpcyBub3Qgc2V0CgojCiMgVVNCIEhJ
RCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9bQpDT05GSUdfSElEX1BJRD15CkNPTkZJR19V
U0JfSElEREVWPXkKCiMKIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwojCiMgQ09O
RklHX1VTQl9LQkQgaXMgbm90IHNldAojIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAoK
IwojIEkyQyBISUQgc3VwcG9ydAojCkNPTkZJR19JMkNfSElEPW0KQ09ORklHX1VTQl9PSENJ
X0xJVFRMRV9FTkRJQU49eQpDT05GSUdfVVNCX1NVUFBPUlQ9eQpDT05GSUdfVVNCX0NPTU1P
Tj1tCkNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQ09ORklHX1VTQj1tCkNPTkZJR19VU0Jf
QU5OT1VOQ0VfTkVXX0RFVklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMK
IwpDT05GSUdfVVNCX0RFRkFVTFRfUEVSU0lTVD15CkNPTkZJR19VU0JfRFlOQU1JQ19NSU5P
UlM9eQojIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX09UR19XSElU
RUxJU1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90
IHNldAojIENPTkZJR19VU0JfT1RHX0ZTTSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTU9OPW0K
Q09ORklHX1VTQl9XVVNCPW0KQ09ORklHX1VTQl9XVVNCX0NCQUY9bQojIENPTkZJR19VU0Jf
V1VTQl9DQkFGX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERy
aXZlcnMKIwojIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
WEhDSV9IQ0Q9bQpDT05GSUdfVVNCX1hIQ0lfUENJPW0KQ09ORklHX1VTQl9FSENJX0hDRD1t
CkNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CkNPTkZJR19VU0JfRUhDSV9UVF9ORVdT
Q0hFRD15CkNPTkZJR19VU0JfRUhDSV9QQ0k9bQojIENPTkZJR19VU0JfRUhDSV9IQ0RfUExB
VEZPUk0gaXMgbm90IHNldAojIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTUDEz
NjJfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0ZVU0JIMjAwX0hDRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NQVgz
NDIxX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfT0hDSV9IQ0Q9bQpDT05GSUdfVVNCX09I
Q0lfSENEX1BDST1tCiMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAojIENP
TkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0gaXMgbm90IHNldApDT05GSUdfVVNCX1VIQ0lf
SENEPW0KQ09ORklHX1VTQl9VMTMyX0hDRD1tCkNPTkZJR19VU0JfU0w4MTFfSENEPW0KIyBD
T05GSUdfVVNCX1NMODExX0hDRF9JU08gaXMgbm90IHNldApDT05GSUdfVVNCX1NMODExX0NT
PW0KIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfV0hD
SV9IQ0Q9bQpDT05GSUdfVVNCX0hXQV9IQ0Q9bQojIENPTkZJR19VU0JfSENEX0JDTUEgaXMg
bm90IHNldAojIENPTkZJR19VU0JfSENEX1NTQiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9I
Q0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKCiMKIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMK
IwpDT05GSUdfVVNCX0FDTT1tCkNPTkZJR19VU0JfUFJJTlRFUj1tCkNPTkZJR19VU0JfV0RN
PW0KQ09ORklHX1VTQl9UTUM9bQoKIwojIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24g
U0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKIwoKIwojIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNC
X1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiMKQ09ORklHX1VTQl9TVE9SQUdFPW0KIyBD
T05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfVVNCX1NUT1JBR0Vf
UkVBTFRFSz1tCkNPTkZJR19SRUFMVEVLX0FVVE9QTT15CkNPTkZJR19VU0JfU1RPUkFHRV9E
QVRBRkFCPW0KQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQpDT05GSUdfVVNCX1NUT1JB
R0VfSVNEMjAwPW0KQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KQ09ORklHX1VTQl9TVE9S
QUdFX1NERFIwOT1tCkNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQpDT05GSUdfVVNCX1NU
T1JBR0VfSlVNUFNIT1Q9bQpDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPW0KQ09ORklHX1VT
Ql9TVE9SQUdFX09ORVRPVUNIPW0KQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPW0KQ09ORklH
X1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0I9bQpDT05GSUdfVVNCX1NUT1JBR0VfRU5FX1VC
NjI1MD1tCkNPTkZJR19VU0JfVUFTPW0KCiMKIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKQ09O
RklHX1VTQl9NREM4MDA9bQpDT05GSUdfVVNCX01JQ1JPVEVLPW0KQ09ORklHX1VTQklQX0NP
UkU9bQpDT05GSUdfVVNCSVBfVkhDSV9IQ0Q9bQpDT05GSUdfVVNCSVBfSE9TVD1tCiMgQ09O
RklHX1VTQklQX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzIg
aXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUEgaXMgbm90IHNldAojIENPTkZJR19V
U0JfSVNQMTc2MCBpcyBub3Qgc2V0CgojCiMgVVNCIHBvcnQgZHJpdmVycwojCkNPTkZJR19V
U0JfVVNTNzIwPW0KQ09ORklHX1VTQl9TRVJJQUw9bQpDT05GSUdfVVNCX1NFUklBTF9HRU5F
UklDPXkKQ09ORklHX1VTQl9TRVJJQUxfU0lNUExFPW0KQ09ORklHX1VTQl9TRVJJQUxfQUlS
Q0FCTEU9bQpDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KQ09ORklHX1VTQl9TRVJJQUxf
QkVMS0lOPW0KQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDE9bQpDT05GSUdfVVNCX1NFUklBTF9X
SElURUhFQVQ9bQpDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9DUDIxMFg9bQpDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KQ09O
RklHX1VTQl9TRVJJQUxfRU1QRUc9bQpDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCkNP
TkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lSPW0KQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9FREdFUE9SVF9UST1tCkNPTkZJR19VU0JfU0VSSUFMX0Y4MTIzMj1tCkNP
TkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCkNPTkZJR19VU0JfU0VSSUFMX0lQVz1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lVVT1tCkNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KQ09O
RklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCkNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQpDT05G
SUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQpDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1t
CkNPTkZJR19VU0JfU0VSSUFMX01FVFJPPW0KQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1t
CkNPTkZJR19VU0JfU0VSSUFMX01PUzc3MTVfUEFSUE9SVD15CkNPTkZJR19VU0JfU0VSSUFM
X01PUzc4NDA9bQpDT05GSUdfVVNCX1NFUklBTF9NWFVQT1JUPW0KQ09ORklHX1VTQl9TRVJJ
QUxfTkFWTUFOPW0KQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KQ09ORklHX1VTQl9TRVJJ
QUxfT1RJNjg1OD1tCkNPTkZJR19VU0JfU0VSSUFMX1FDQVVYPW0KQ09ORklHX1VTQl9TRVJJ
QUxfUVVBTENPTU09bQpDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KQ09ORklHX1VTQl9T
RVJJQUxfU0FGRT1tCiMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNl
dApDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUz1tCkNPTkZJR19VU0JfU0VSSUFM
X1NZTUJPTD1tCkNPTkZJR19VU0JfU0VSSUFMX1RJPW0KQ09ORklHX1VTQl9TRVJJQUxfQ1lC
RVJKQUNLPW0KQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KQ09ORklHX1VTQl9TRVJJQUxf
V1dBTj1tCkNPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCkNPTkZJR19VU0JfU0VSSUFMX09N
TklORVQ9bQpDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KQ09ORklHX1VTQl9TRVJJQUxf
WFNFTlNfTVQ9bQpDT05GSUdfVVNCX1NFUklBTF9XSVNIQk9ORT1tCkNPTkZJR19VU0JfU0VS
SUFMX1NTVTEwMD1tCkNPTkZJR19VU0JfU0VSSUFMX1FUMj1tCkNPTkZJR19VU0JfU0VSSUFM
X0RFQlVHPW0KCiMKIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiMKQ09ORklHX1VTQl9F
TUk2Mj1tCkNPTkZJR19VU0JfRU1JMjY9bQpDT05GSUdfVVNCX0FEVVRVWD1tCkNPTkZJR19V
U0JfU0VWU0VHPW0KQ09ORklHX1VTQl9SSU81MDA9bQpDT05GSUdfVVNCX0xFR09UT1dFUj1t
CkNPTkZJR19VU0JfTENEPW0KQ09ORklHX1VTQl9MRUQ9bQpDT05GSUdfVVNCX0NZUFJFU1Nf
Q1k3QzYzPW0KQ09ORklHX1VTQl9DWVRIRVJNPW0KQ09ORklHX1VTQl9JRE1PVVNFPW0KQ09O
RklHX1VTQl9GVERJX0VMQU49bQpDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCkNPTkZJR19V
U0JfU0lTVVNCVkdBPW0KQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKQ09ORklHX1VTQl9M
RD1tCkNPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQpDT05GSUdfVVNCX0lPV0FSUklPUj1t
CkNPTkZJR19VU0JfVEVTVD1tCkNPTkZJR19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFPW0KQ09O
RklHX1VTQl9JU0lHSFRGVz1tCkNPTkZJR19VU0JfWVVSRVg9bQpDT05GSUdfVVNCX0VaVVNC
X0ZYMj1tCiMgQ09ORklHX1VTQl9IU0lDX1VTQjM1MDMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NIQU9TS0VZIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9BVE09bQpDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQpDT05G
SUdfVVNCX0NYQUNSVT1tCkNPTkZJR19VU0JfVUVBR0xFQVRNPW0KQ09ORklHX1VTQl9YVVNC
QVRNPW0KCiMKIyBVU0IgUGh5c2ljYWwgTGF5ZXIgZHJpdmVycwojCiMgQ09ORklHX1VTQl9Q
SFkgaXMgbm90IHNldAojIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxMzAxIGlzIG5v
dCBzZXQKQ09ORklHX1VTQl9HQURHRVQ9bQojIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0dBREdF
VF9WQlVTX0RSQVc9MgpDT05GSUdfVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTPTIK
CiMKIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCiMKIyBDT05GSUdfVVNCX0ZPVEcyMTBf
VURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dSX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9SOEE2NjU5NyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9QWEEyN1ggaXMgbm90IHNl
dAojIENPTkZJR19VU0JfTVZfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01WX1UzRCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
QkRDX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9BTUQ1NTM2VURDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX05FVDIyNzIgaXMgbm90IHNldApDT05GSUdfVVNCX05FVDIyODA9bQoj
IENPTkZJR19VU0JfR09LVSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRUcyMFQ9bQojIENPTkZJ
R19VU0JfRFVNTVlfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENPTkZJR19VU0JfQVVESU8g
aXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0df
TkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19TVE9SQUdF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAojIENP
TkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9H
X01VTFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dfREJHUCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfTEVEX1RSSUc9eQpDT05GSUdfVVdCPW0KQ09ORklHX1VXQl9IV0E9
bQpDT05GSUdfVVdCX1dIQ0k9bQpDT05GSUdfVVdCX0kxNDgwVT1tCkNPTkZJR19NTUM9bQoj
IENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfQ0xLR0FURSBpcyBu
b3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiMKQ09ORklHX01NQ19CTE9D
Sz1tCkNPTkZJR19NTUNfQkxPQ0tfTUlOT1JTPTI1NgpDT05GSUdfTU1DX0JMT0NLX0JPVU5D
RT15CkNPTkZJR19TRElPX1VBUlQ9bQojIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Cgoj
CiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfTU1DX1NE
SENJPW0KQ09ORklHX01NQ19TREhDSV9QQ0k9bQpDT05GSUdfTU1DX1JJQ09IX01NQz15CkNP
TkZJR19NTUNfU0RIQ0lfQUNQST1tCiMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qg
c2V0CkNPTkZJR19NTUNfV0JTRD1tCkNPTkZJR19NTUNfVElGTV9TRD1tCiMgQ09ORklHX01N
Q19TUEkgaXMgbm90IHNldApDT05GSUdfTU1DX1NEUklDT0hfQ1M9bQpDT05GSUdfTU1DX0NC
NzEwPW0KQ09ORklHX01NQ19WSUFfU0RNTUM9bQpDT05GSUdfTU1DX1ZVQjMwMD1tCkNPTkZJ
R19NTUNfVVNIQz1tCiMgQ09ORklHX01NQ19VU0RISTZST0wwIGlzIG5vdCBzZXQKQ09ORklH
X01NQ19SRUFMVEVLX1BDST1tCkNPTkZJR19NTUNfUkVBTFRFS19VU0I9bQpDT05GSUdfTU1D
X1RPU0hJQkFfUENJPW0KQ09ORklHX01FTVNUSUNLPW0KIyBDT05GSUdfTUVNU1RJQ0tfREVC
VUcgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIGRyaXZlcnMKIwojIENPTkZJR19NRU1T
VElDS19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKQ09ORklHX01TUFJPX0JMT0NLPW0KIyBD
T05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIEhvc3QgQ29udHJv
bGxlciBEcml2ZXJzCiMKQ09ORklHX01FTVNUSUNLX1RJRk1fTVM9bQpDT05GSUdfTUVNU1RJ
Q0tfSk1JQ1JPTl8zOFg9bQpDT05GSUdfTUVNU1RJQ0tfUjU5Mj1tCkNPTkZJR19NRU1TVElD
S19SRUFMVEVLX1BDST1tCkNPTkZJR19NRU1TVElDS19SRUFMVEVLX1VTQj1tCkNPTkZJR19O
RVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdfTEVEU19DTEFTU19GTEFT
SCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlcnMKIwojIENPTkZJR19MRURTX0xNMzUzMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19QQ0E5NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKQ09O
RklHX0xFRFNfTFAzOTQ0PW0KIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0xQNTUyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1NTYyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19MUDg1MDEgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xQ
ODg2MCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX0NMRVZPX01BSUw9bQpDT05GSUdfTEVEU19Q
Q0E5NTVYPW0KIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5vdCBzZXQKQ09ORklHX0xFRFNf
REFDMTI0UzA4NT1tCkNPTkZJR19MRURTX0JEMjgwMj1tCkNPTkZJR19MRURTX0lOVEVMX1NT
NDIwMD1tCkNPTkZJR19MRURTX0xUMzU5Mz1tCkNPTkZJR19MRURTX0RFTExfTkVUQk9PS1M9
bQojIENPTkZJR19MRURTX1RDQTY1MDcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1
eCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX01FTkYyMUJNQz1tCgojCiMgTEVEIGRyaXZlciBm
b3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAo
SElEX1RISU5HTSkKIwojIENPTkZJR19MRURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfUE04OTQxX1dMRUQgaXMgbm90IHNldAoKIwojIExFRCBUcmlnZ2VycwojCkNPTkZJ
R19MRURTX1RSSUdHRVJTPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCkNPTkZJR19M
RURTX1RSSUdHRVJfT05FU0hPVD1tCkNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0K
Q09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQpDT05GSUdfTEVEU19UUklHR0VSX0NQ
VT15CkNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCkNPTkZJR19MRURTX1RSSUdHRVJfREVG
QVVMVF9PTj1tCgojCiMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29u
ZmlnIChMRUQgdGFyZ2V0KQojCkNPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UPW0KQ09O
RklHX0xFRFNfVFJJR0dFUl9DQU1FUkE9bQpDT05GSUdfQUNDRVNTSUJJTElUWT15CkNPTkZJ
R19BMTFZX0JSQUlMTEVfQ09OU09MRT15CkNPTkZJR19JTkZJTklCQU5EPW0KQ09ORklHX0lO
RklOSUJBTkRfVVNFUl9NQUQ9bQpDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCkNP
TkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5E
X1BBR0lORz15CkNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQpDT05GSUdfSU5GSU5J
QkFORF9NVEhDQT1tCkNPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKQ09ORklHX0lO
RklOSUJBTkRfSVBBVEg9bQpDT05GSUdfSU5GSU5JQkFORF9RSUI9bQpDT05GSUdfSU5GSU5J
QkFORF9RSUJfRENBPXkKQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDA9bQojIENPTkZJR19J
TkZJTklCQU5EX0FNU08xMTAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRf
Q1hHQjM9bQojIENPTkZJR19JTkZJTklCQU5EX0NYR0IzX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX0lORklOSUJBTkRfQ1hHQjQ9bQpDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KQ09ORklH
X01MWDVfSU5GSU5JQkFORD1tCkNPTkZJR19JTkZJTklCQU5EX05FUz1tCiMgQ09ORklHX0lO
RklOSUJBTkRfTkVTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRfT0NSRE1B
PW0KIyBDT05GSUdfSU5GSU5JQkFORF9VU05JQyBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklC
QU5EX0lQT0lCPW0KQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQpDT05GSUdfSU5GSU5J
QkFORF9JUE9JQl9ERUJVRz15CiMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFU
QSBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklCQU5EX1NSUD1tCkNPTkZJR19JTkZJTklCQU5E
X1NSUFQ9bQpDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KQ09ORklHX0lORklOSUJBTkRfSVNF
UlQ9bQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FDWV9TWVNGUz15CiMgQ09ORklH
X0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19ERUNPREVfTUNFPW0KIyBDT05G
SUdfRURBQ19NQ0VfSU5KIGlzIG5vdCBzZXQKQ09ORklHX0VEQUNfTU1fRURBQz1tCkNPTkZJ
R19FREFDX0FNRDY0PW0KIyBDT05GSUdfRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04gaXMg
bm90IHNldApDT05GSUdfRURBQ19FNzUyWD1tCkNPTkZJR19FREFDX0k4Mjk3NVg9bQpDT05G
SUdfRURBQ19JMzAwMD1tCkNPTkZJR19FREFDX0kzMjAwPW0KQ09ORklHX0VEQUNfSUUzMTIw
MD1tCkNPTkZJR19FREFDX1gzOD1tCkNPTkZJR19FREFDX0k1NDAwPW0KQ09ORklHX0VEQUNf
STdDT1JFPW0KQ09ORklHX0VEQUNfSTUwMDA9bQpDT05GSUdfRURBQ19JNTEwMD1tCkNPTkZJ
R19FREFDX0k3MzAwPW0KQ09ORklHX0VEQUNfU0JSSURHRT1tCkNPTkZJR19SVENfTElCPXkK
Q09ORklHX1JUQ19DTEFTUz15CkNPTkZJR19SVENfSENUT1NZUz15CkNPTkZJR19SVENfU1lT
VE9IQz15CkNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiMgQ09ORklHX1JUQ19E
RUJVRyBpcyBub3Qgc2V0CgojCiMgUlRDIGludGVyZmFjZXMKIwpDT05GSUdfUlRDX0lOVEZf
U1lTRlM9eQpDT05GSUdfUlRDX0lOVEZfUFJPQz15CkNPTkZJR19SVENfSU5URl9ERVY9eQoj
IENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX1RFU1QgaXMgbm90IHNldAoKIwojIEkyQyBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JU
Q19EUlZfQUJCNVpFUzMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgwWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9NQVg2OTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwNTcgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0YyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTIzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0Y4NTA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9CUTMySyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMw
MjlDMiBpcyBub3Qgc2V0CgojCiMgU1BJIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RS
Vl9NNDFUOTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9E
UzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2
OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjM0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9SWDQ1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX01DUDc5NSBp
cyBub3Qgc2V0CgojCiMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl9D
TU9TPXkKIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX0RTMTUxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE2ODVfRkFNSUxZIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMjQwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX01TTTYyNDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9WMzAyMCBpcyBub3Qgc2V0CgojCiMgb24tQ1BVIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdf
UlRDX0RSVl9YR0VORSBpcyBub3Qgc2V0CgojCiMgSElEIFNlbnNvciBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FIGlzIG5vdCBzZXQKQ09ORklHX0RN
QURFVklDRVM9eQojIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBE
TUEgRGV2aWNlcwojCiMgQ09ORklHX0lOVEVMX01JQ19YMTAwX0RNQSBpcyBub3Qgc2V0CkNP
TkZJR19JTlRFTF9JT0FURE1BPW0KQ09ORklHX0RXX0RNQUNfQ09SRT1tCkNPTkZJR19EV19E
TUFDPW0KIyBDT05GSUdfRFdfRE1BQ19QQ0kgaXMgbm90IHNldAojIENPTkZJR19IU1VfRE1B
X1BDSSBpcyBub3Qgc2V0CkNPTkZJR19ETUFfRU5HSU5FPXkKQ09ORklHX0RNQV9BQ1BJPXkK
CiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19BU1lOQ19UWF9ETUE9eQojIENPTkZJR19ETUFU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX0RNQV9FTkdJTkVfUkFJRD15CkNPTkZJR19EQ0E9bQoj
IENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKQ09ORklHX1VJTz1tCkNPTkZJR19VSU9f
Q0lGPW0KIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKIyBDT05GSUdfVUlP
X0RNRU1fR0VOSVJRIGlzIG5vdCBzZXQKQ09ORklHX1VJT19BRUM9bQpDT05GSUdfVUlPX1NF
UkNPUzM9bQpDT05GSUdfVUlPX1BDSV9HRU5FUklDPW0KQ09ORklHX1VJT19ORVRYPW0KQ09O
RklHX1VJT19NRjYyND1tCkNPTkZJR19WRklPX0lPTU1VX1RZUEUxPW0KQ09ORklHX1ZGSU9f
VklSUUZEPW0KQ09ORklHX1ZGSU89bQpDT05GSUdfVkZJT19QQ0k9bQpDT05GSUdfVkZJT19Q
Q0lfVkdBPXkKQ09ORklHX1ZGSU9fUENJX01NQVA9eQpDT05GSUdfVkZJT19QQ0lfSU5UWD15
CkNPTkZJR19WSVJUX0RSSVZFUlM9eQpDT05GSUdfVklSVElPPW0KCiMKIyBWaXJ0aW8gZHJp
dmVycwojCkNPTkZJR19WSVJUSU9fUENJPW0KQ09ORklHX1ZJUlRJT19QQ0lfTEVHQUNZPXkK
Q09ORklHX1ZJUlRJT19CQUxMT09OPW0KQ09ORklHX1ZJUlRJT19JTlBVVD1tCiMgQ09ORklH
X1ZJUlRJT19NTUlPIGlzIG5vdCBzZXQKCiMKIyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBz
dXBwb3J0CiMKQ09ORklHX0hZUEVSVj1tCkNPTkZJR19IWVBFUlZfVVRJTFM9bQpDT05GSUdf
SFlQRVJWX0JBTExPT049bQoKIwojIFhlbiBkcml2ZXIgc3VwcG9ydAojCkNPTkZJR19YRU5f
QkFMTE9PTj15CiMgQ09ORklHX1hFTl9CQUxMT09OX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBz
ZXQKQ09ORklHX1hFTl9TQ1JVQl9QQUdFUz15CkNPTkZJR19YRU5fREVWX0VWVENITj1tCkNP
TkZJR19YRU5fQkFDS0VORD15CkNPTkZJR19YRU5GUz1tCkNPTkZJR19YRU5fQ09NUEFUX1hF
TkZTPXkKQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19YRU5fWEVOQlVTX0ZS
T05URU5EPXkKQ09ORklHX1hFTl9HTlRERVY9bQpDT05GSUdfWEVOX0dSQU5UX0RFVl9BTExP
Qz1tCkNPTkZJR19TV0lPVExCX1hFTj15CkNPTkZJR19YRU5fVE1FTT1tCkNPTkZJR19YRU5f
UENJREVWX0JBQ0tFTkQ9bQpDT05GSUdfWEVOX1NDU0lfQkFDS0VORD1tCkNPTkZJR19YRU5f
UFJJVkNNRD1tCkNPTkZJR19YRU5fQUNQSV9QUk9DRVNTT1I9bQpDT05GSUdfWEVOX01DRV9M
T0c9eQpDT05GSUdfWEVOX0hBVkVfUFZNTVU9eQpDT05GSUdfWEVOX0VGST15CkNPTkZJR19Y
RU5fQVVUT19YTEFURT15CkNPTkZJR19YRU5fQUNQST15CkNPTkZJR19TVEFHSU5HPXkKIyBD
T05GSUdfU0xJQ09TUyBpcyBub3Qgc2V0CkNPTkZJR19QUklTTTJfVVNCPW0KQ09ORklHX0NP
TUVEST1tCiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElf
REVGQVVMVF9CVUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFY
U0laRV9LQj0yMDQ4MApDT05GSUdfQ09NRURJX01JU0NfRFJJVkVSUz15CkNPTkZJR19DT01F
RElfQk9ORD1tCkNPTkZJR19DT01FRElfVEVTVD1tCkNPTkZJR19DT01FRElfUEFSUE9SVD1t
CkNPTkZJR19DT01FRElfU0VSSUFMMjAwMj1tCiMgQ09ORklHX0NPTUVESV9JU0FfRFJJVkVS
UyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfUENJX0RSSVZFUlM9bQpDT05GSUdfQ09NRURJ
XzgyNTVfUENJPW0KQ09ORklHX0NPTUVESV9BRERJX1dBVENIRE9HPW0KQ09ORklHX0NPTUVE
SV9BRERJX0FQQ0lfMTAzMj1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE1MDA9bQpDT05G
SUdfQ09NRURJX0FERElfQVBDSV8xNTE2PW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMTU2
ND1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE2WFg9bQpDT05GSUdfQ09NRURJX0FERElf
QVBDSV8yMDMyPW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMjIwMD1tCkNPTkZJR19DT01F
RElfQURESV9BUENJXzMxMjA9bQpDT05GSUdfQ09NRURJX0FERElfQVBDSV8zNTAxPW0KQ09O
RklHX0NPTUVESV9BRERJX0FQQ0lfM1hYWD1tCkNPTkZJR19DT01FRElfQURMX1BDSTYyMDg9
bQpDT05GSUdfQ09NRURJX0FETF9QQ0k3WDNYPW0KQ09ORklHX0NPTUVESV9BRExfUENJODE2
ND1tCkNPTkZJR19DT01FRElfQURMX1BDSTkxMTE9bQpDT05GSUdfQ09NRURJX0FETF9QQ0k5
MTE4PW0KQ09ORklHX0NPTUVESV9BRFZfUENJMTcxMD1tCkNPTkZJR19DT01FRElfQURWX1BD
STE3MjM9bQpDT05GSUdfQ09NRURJX0FEVl9QQ0kxNzI0PW0KQ09ORklHX0NPTUVESV9BRFZf
UENJX0RJTz1tCkNPTkZJR19DT01FRElfQU1QTENfRElPMjAwX1BDST1tCkNPTkZJR19DT01F
RElfQU1QTENfUEMyMzZfUENJPW0KQ09ORklHX0NPTUVESV9BTVBMQ19QQzI2M19QQ0k9bQpD
T05GSUdfQ09NRURJX0FNUExDX1BDSTIyND1tCkNPTkZJR19DT01FRElfQU1QTENfUENJMjMw
PW0KQ09ORklHX0NPTUVESV9DT05URUNfUENJX0RJTz1tCkNPTkZJR19DT01FRElfREFTMDhf
UENJPW0KQ09ORklHX0NPTUVESV9EVDMwMDA9bQpDT05GSUdfQ09NRURJX0RZTkFfUENJMTBY
WD1tCkNPTkZJR19DT01FRElfR1NDX0hQREk9bQpDT05GSUdfQ09NRURJX01GNlg0PW0KQ09O
RklHX0NPTUVESV9JQ1BfTVVMVEk9bQpDT05GSUdfQ09NRURJX0RBUUJPQVJEMjAwMD1tCkNP
TkZJR19DT01FRElfSlIzX1BDST1tCkNPTkZJR19DT01FRElfS0VfQ09VTlRFUj1tCkNPTkZJ
R19DT01FRElfQ0JfUENJREFTNjQ9bQpDT05GSUdfQ09NRURJX0NCX1BDSURBUz1tCkNPTkZJ
R19DT01FRElfQ0JfUENJRERBPW0KQ09ORklHX0NPTUVESV9DQl9QQ0lNREFTPW0KQ09ORklH
X0NPTUVESV9DQl9QQ0lNRERBPW0KQ09ORklHX0NPTUVESV9NRTQwMDA9bQpDT05GSUdfQ09N
RURJX01FX0RBUT1tCkNPTkZJR19DT01FRElfTklfNjUyNz1tCkNPTkZJR19DT01FRElfTklf
NjVYWD1tCkNPTkZJR19DT01FRElfTklfNjYwWD1tCkNPTkZJR19DT01FRElfTklfNjcwWD1t
CkNPTkZJR19DT01FRElfTklfTEFCUENfUENJPW0KQ09ORklHX0NPTUVESV9OSV9QQ0lESU89
bQpDT05GSUdfQ09NRURJX05JX1BDSU1JTz1tCkNPTkZJR19DT01FRElfUlRENTIwPW0KQ09O
RklHX0NPTUVESV9TNjI2PW0KQ09ORklHX0NPTUVESV9NSVRFPW0KQ09ORklHX0NPTUVESV9O
SV9USU9DTUQ9bQpDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTPW0KQ09ORklHX0NPTUVE
SV9DQl9EQVMxNl9DUz1tCkNPTkZJR19DT01FRElfREFTMDhfQ1M9bQpDT05GSUdfQ09NRURJ
X05JX0RBUV83MDBfQ1M9bQpDT05GSUdfQ09NRURJX05JX0RBUV9ESU8yNF9DUz1tCkNPTkZJ
R19DT01FRElfTklfTEFCUENfQ1M9bQpDT05GSUdfQ09NRURJX05JX01JT19DUz1tCkNPTkZJ
R19DT01FRElfUVVBVEVDSF9EQVFQX0NTPW0KQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz1t
CkNPTkZJR19DT01FRElfRFQ5ODEyPW0KQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPW0KQ09O
RklHX0NPTUVESV9VU0JEVVg9bQpDT05GSUdfQ09NRURJX1VTQkRVWEZBU1Q9bQpDT05GSUdf
Q09NRURJX1VTQkRVWFNJR01BPW0KQ09ORklHX0NPTUVESV9WTUs4MFhYPW0KQ09ORklHX0NP
TUVESV84MjU0PW0KQ09ORklHX0NPTUVESV84MjU1PW0KQ09ORklHX0NPTUVESV9LQ09NRURJ
TElCPW0KQ09ORklHX0NPTUVESV9BTVBMQ19ESU8yMDA9bQpDT05GSUdfQ09NRURJX0FNUExD
X1BDMjM2PW0KQ09ORklHX0NPTUVESV9EQVMwOD1tCkNPTkZJR19DT01FRElfTklfTEFCUEM9
bQpDT05GSUdfQ09NRURJX05JX1RJTz1tCiMgQ09ORklHX1BBTkVMIGlzIG5vdCBzZXQKQ09O
RklHX1JUTDgxOTJVPW0KQ09ORklHX1JUTExJQj1tCkNPTkZJR19SVExMSUJfQ1JZUFRPX0ND
TVA9bQpDT05GSUdfUlRMTElCX0NSWVBUT19US0lQPW0KQ09ORklHX1JUTExJQl9DUllQVE9f
V0VQPW0KQ09ORklHX1JUTDgxOTJFPW0KQ09ORklHX1I4NzEyVT1tCkNPTkZJR19SODE4OEVV
PW0KQ09ORklHXzg4RVVfQVBfTU9ERT15CkNPTkZJR19SODcyM0FVPW0KQ09ORklHXzg3MjNB
VV9BUF9NT0RFPXkKQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUPXkKQ09ORklHX1JUUzUyMDg9
bQojIENPTkZJR19WVDY2NTUgaXMgbm90IHNldApDT05GSUdfVlQ2NjU2PW0KCiMKIyBJSU8g
c3RhZ2luZyBkcml2ZXJzCiMKCiMKIyBBY2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMx
NjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjIwNCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwOSBpcyBub3Qgc2V0CiMg
Q09ORklHX0FESVMxNjIyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjI0MCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xJUzNMMDJEUSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDQTMwMDAgaXMg
bm90IHNldAoKIwojIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19B
RDc2MDYgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19B
RDc4MTYgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNldAojIENPTkZJR19B
RDcyODAgaXMgbm90IHNldAoKIwojIEFuYWxvZyBkaWdpdGFsIGJpLWRpcmVjdGlvbiBjb252
ZXJ0ZXJzCiMKIyBDT05GSUdfQURUNzMxNiBpcyBub3Qgc2V0CgojCiMgQ2FwYWNpdGFuY2Ug
dG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ3MTUwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3MTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzQ2IGlzIG5vdCBzZXQKCiMK
IyBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNl
dAojIENPTkZJR19BRDk4MzQgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgZ3lyb3Njb3BlIHNl
bnNvcnMKIwojIENPTkZJR19BRElTMTYwNjAgaXMgbm90IHNldAoKIwojIE5ldHdvcmsgQW5h
bHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ1OTMzIGlzIG5vdCBz
ZXQKCiMKIyBMaWdodCBzZW5zb3JzCiMKQ09ORklHX1NFTlNPUlNfSVNMMjkwMTg9bQojIENP
TkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKQ09ORklHX1RTTDI1ODM9bQojIENP
TkZJR19UU0wyeDd4IGlzIG5vdCBzZXQKCiMKIyBNYWduZXRvbWV0ZXIgc2Vuc29ycwojCiMg
Q09ORklHX1NFTlNPUlNfSE1DNTg0M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hNQzU4NDNfU1BJIGlzIG5vdCBzZXQKCiMKIyBBY3RpdmUgZW5lcmd5IG1ldGVyaW5nIElD
CiMKIyBDT05GSUdfQURFNzc1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0FERTc3NTQgaXMgbm90
IHNldAojIENPTkZJR19BREU3NzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfQURFNzc1OSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FERTc4NTQgaXMgbm90IHNldAoKIwojIFJlc29sdmVyIHRvIGRp
Z2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19QRVJJT0RJQ19SVENfVFJJ
R0dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TSU1QTEVfRFVNTVkgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfWEdJIGlzIG5vdCBzZXQKIyBDT05GSUdfRlQxMDAwIGlzIG5vdCBz
ZXQKCiMKIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCiMKQ09ORklHX1NQRUFLVVA9bQpDT05G
SUdfU1BFQUtVUF9TWU5USF9BQ05UU0E9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BUE9MTE89
bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BVURQVFI9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9C
TlM9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9ERUNUTEs9bQpDT05GSUdfU1BFQUtVUF9TWU5U
SF9ERUNFWFQ9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9MVExLPW0KQ09ORklHX1NQRUFLVVBf
U1lOVEhfU09GVD1tCkNPTkZJR19TUEVBS1VQX1NZTlRIX1NQS09VVD1tCkNPTkZJR19TUEVB
S1VQX1NZTlRIX1RYUFJUPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfRFVNTVk9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9TWU5BUFRJQ1NfSTJDX1JNSTQgaXMgbm90IHNldApDT05GSUdfU1RB
R0lOR19NRURJQT15CiMgQ09ORklHX0kyQ19CQ00yMDQ4IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0NYRDIwOTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EVDMxNTUgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfTU44ODQ3MiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NTjg4NDcz
IGlzIG5vdCBzZXQKQ09ORklHX0xJUkNfU1RBR0lORz15CkNPTkZJR19MSVJDX0JUODI5PW0K
Q09ORklHX0xJUkNfSU1PTj1tCiMgQ09ORklHX0xJUkNfUEFSQUxMRUwgaXMgbm90IHNldApD
T05GSUdfTElSQ19TQVNFTT1tCkNPTkZJR19MSVJDX1NFUklBTD1tCkNPTkZJR19MSVJDX1NF
UklBTF9UUkFOU01JVFRFUj15CkNPTkZJR19MSVJDX1NJUj1tCkNPTkZJR19MSVJDX1pJTE9H
PW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfVVNCX1dQQU5fSENEIGlzIG5vdCBzZXQKQ09O
RklHX1dJTUFYX0dETTcyWFg9bQojIENPTkZJR19XSU1BWF9HRE03MlhYX1FPUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1dJTUFYX0dETTcyWFhfS19NT0RFIGlzIG5vdCBzZXQKIyBDT05GSUdf
V0lNQVhfR0RNNzJYWF9XSU1BWDIgaXMgbm90IHNldApDT05GSUdfV0lNQVhfR0RNNzJYWF9V
U0I9eQojIENPTkZJR19XSU1BWF9HRE03MlhYX1NESU8gaXMgbm90IHNldApDT05GSUdfV0lN
QVhfR0RNNzJYWF9VU0JfUE09eQojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJUkVXSVJFX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TUElOQU5E
X01UMjlGIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9GUz1tCkNPTkZJR19MVVNUUkVfT0JE
X01BWF9JT0NUTF9CVUZGRVI9ODE5MgojIENPTkZJR19MVVNUUkVfREVCVUdfRVhQRU5TSVZF
X0NIRUNLIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9MTElURV9MTE9PUD1tCkNPTkZJR19M
TkVUPW0KQ09ORklHX0xORVRfTUFYX1BBWUxPQUQ9MTA0ODU3NgojIENPTkZJR19MTkVUX1NF
TEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0xORVRfWFBSVF9JQj1tCiMgQ09ORklHX0RHTkMg
aXMgbm90IHNldAojIENPTkZJR19ER0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfR1NfRlBHQUJP
T1QgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU0tFSU4gaXMgbm90IHNldAojIENPTkZJ
R19VTklTWVNTUEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVEZUIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09O
RklHX0FDRVJfV01JPW0KQ09ORklHX0FDRVJIREY9bQpDT05GSUdfQUxJRU5XQVJFX1dNST1t
CkNPTkZJR19BU1VTX0xBUFRPUD1tCkNPTkZJR19ERUxMX0xBUFRPUD1tCkNPTkZJR19ERUxM
X1dNST1tCkNPTkZJR19ERUxMX1dNSV9BSU89bQpDT05GSUdfREVMTF9TTU84ODAwPW0KQ09O
RklHX0ZVSklUU1VfTEFQVE9QPW0KIyBDT05GSUdfRlVKSVRTVV9MQVBUT1BfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlVKSVRTVV9UQUJMRVQ9bQpDT05GSUdfQU1JTE9fUkZLSUxMPW0K
Q09ORklHX0hQX0FDQ0VMPW0KQ09ORklHX0hQX1dJUkVMRVNTPW0KQ09ORklHX0hQX1dNST1t
CkNPTkZJR19NU0lfTEFQVE9QPW0KQ09ORklHX1BBTkFTT05JQ19MQVBUT1A9bQpDT05GSUdf
Q09NUEFMX0xBUFRPUD1tCkNPTkZJR19TT05ZX0xBUFRPUD1tCkNPTkZJR19TT05ZUElfQ09N
UEFUPXkKQ09ORklHX0lERUFQQURfTEFQVE9QPW0KQ09ORklHX1RISU5LUEFEX0FDUEk9bQpD
T05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQ9eQojIENPTkZJR19USElOS1BBRF9B
Q1BJX0RFQlVHRkFDSUxJVElFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RISU5LUEFEX0FDUElf
REVCVUcgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTIGlz
IG5vdCBzZXQKQ09ORklHX1RISU5LUEFEX0FDUElfVklERU89eQpDT05GSUdfVEhJTktQQURf
QUNQSV9IT1RLRVlfUE9MTD15CkNPTkZJR19TRU5TT1JTX0hEQVBTPW0KIyBDT05GSUdfSU5U
RUxfTUVOTE9XIGlzIG5vdCBzZXQKQ09ORklHX0VFRVBDX0xBUFRPUD1tCkNPTkZJR19BU1VT
X1dNST1tCkNPTkZJR19BU1VTX05CX1dNST1tCkNPTkZJR19FRUVQQ19XTUk9bQpDT05GSUdf
QUNQSV9XTUk9bQpDT05GSUdfTVNJX1dNST1tCkNPTkZJR19UT1BTVEFSX0xBUFRPUD1tCkNP
TkZJR19BQ1BJX1RPU0hJQkE9bQpDT05GSUdfVE9TSElCQV9CVF9SRktJTEw9bQpDT05GSUdf
VE9TSElCQV9IQVBTPW0KQ09ORklHX0FDUElfQ01QQz1tCkNPTkZJR19JTlRFTF9JUFM9bQpD
T05GSUdfSUJNX1JUTD1tCkNPTkZJR19TQU1TVU5HX0xBUFRPUD1tCkNPTkZJR19NWE1fV01J
PW0KQ09ORklHX0lOVEVMX09BS1RSQUlMPW0KQ09ORklHX1NBTVNVTkdfUTEwPW0KQ09ORklH
X0FQUExFX0dNVVg9bQpDT05GSUdfSU5URUxfUlNUPW0KQ09ORklHX0lOVEVMX1NNQVJUQ09O
TkVDVD1tCkNPTkZJR19QVlBBTklDPW0KQ09ORklHX0NIUk9NRV9QTEFURk9STVM9eQpDT05G
SUdfQ0hST01FT1NfTEFQVE9QPW0KQ09ORklHX0NIUk9NRU9TX1BTVE9SRT1tCkNPTkZJR19D
TEtERVZfTE9PS1VQPXkKQ09ORklHX0hBVkVfQ0xLX1BSRVBBUkU9eQpDT05GSUdfQ09NTU9O
X0NMSz15CgojCiMgQ29tbW9uIENsb2NrIEZyYW1ld29yawojCiMgQ09ORklHX0NPTU1PTl9D
TEtfU0k1MzUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19QWEEgaXMgbm90IHNl
dAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAoKIwojIEhhcmR3YXJl
IFNwaW5sb2NrIGRyaXZlcnMKIwoKIwojIENsb2NrIFNvdXJjZSBkcml2ZXJzCiMKQ09ORklH
X0NMS0VWVF9JODI1Mz15CkNPTkZJR19JODI1M19MT0NLPXkKQ09ORklHX0NMS0JMRF9JODI1
Mz15CiMgQ09ORklHX0FUTUVMX1BJVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX0NN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX01UVTIgaXMgbm90IHNldAojIENPTkZJ
R19TSF9USU1FUl9UTVUgaXMgbm90IHNldAojIENPTkZJR19FTV9USU1FUl9TVEkgaXMgbm90
IHNldAojIENPTkZJR19NQUlMQk9YIGlzIG5vdCBzZXQKQ09ORklHX0lPTU1VX0FQST15CkNP
TkZJR19JT01NVV9TVVBQT1JUPXkKCiMKIyBHZW5lcmljIElPTU1VIFBhZ2V0YWJsZSBTdXBw
b3J0CiMKQ09ORklHX0lPTU1VX0lPVkE9eQpDT05GSUdfQU1EX0lPTU1VPXkKIyBDT05GSUdf
QU1EX0lPTU1VX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0FNRF9JT01NVV9WMj15CkNPTkZJ
R19ETUFSX1RBQkxFPXkKQ09ORklHX0lOVEVMX0lPTU1VPXkKIyBDT05GSUdfSU5URUxfSU9N
TVVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9JT01NVV9GTE9QUFlfV0E9
eQpDT05GSUdfSVJRX1JFTUFQPXkKCiMKIyBSZW1vdGVwcm9jIGRyaXZlcnMKIwojIENPTkZJ
R19TVEVfTU9ERU1fUlBST0MgaXMgbm90IHNldAoKIwojIFJwbXNnIGRyaXZlcnMKIwoKIwoj
IFNPQyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmljIERyaXZlcnMKIwojIENPTkZJR19TT0Nf
VEkgaXMgbm90IHNldApDT05GSUdfUE1fREVWRlJFUT15CgojCiMgREVWRlJFUSBHb3Zlcm5v
cnMKIwpDT05GSUdfREVWRlJFUV9HT1ZfU0lNUExFX09OREVNQU5EPW0KIyBDT05GSUdfREVW
RlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9Q
T1dFUlNBVkUgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9VU0VSU1BBQ0UgaXMg
bm90IHNldAoKIwojIERFVkZSRVEgRHJpdmVycwojCiMgQ09ORklHX1BNX0RFVkZSRVFfRVZF
TlQgaXMgbm90IHNldAojIENPTkZJR19FWFRDT04gaXMgbm90IHNldApDT05GSUdfTUVNT1JZ
PXkKQ09ORklHX0lJTz1tCkNPTkZJR19JSU9fQlVGRkVSPXkKIyBDT05GSUdfSUlPX0JVRkZF
Ul9DQiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklH
R0VSRURfQlVGRkVSPW0KQ09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1F
UlNfUEVSX1RSSUdHRVI9MgoKIwojIEFjY2VsZXJvbWV0ZXJzCiMKIyBDT05GSUdfQk1BMTgw
IGlzIG5vdCBzZXQKQ09ORklHX0JNQzE1MF9BQ0NFTD1tCkNPTkZJR19ISURfU0VOU09SX0FD
Q0VMXzNEPW0KIyBDT05GSUdfSUlPX1NUX0FDQ0VMXzNBWElTIGlzIG5vdCBzZXQKIyBDT05G
SUdfS1hTRDkgaXMgbm90IHNldAojIENPTkZJR19NTUE4NDUyIGlzIG5vdCBzZXQKQ09ORklH
X0tYQ0pLMTAxMz1tCkNPTkZJR19NTUE5NTUxX0NPUkU9bQpDT05GSUdfTU1BOTU1MT1tCkNP
TkZJR19NTUE5NTUzPW0KCiMKIyBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBD
T05GSUdfQUQ3MjY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MjkxIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3Mjk4IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NDc2IGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3NzkxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzkzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3ODg3IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3OTIzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3OTlYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTAyNyBpcyBub3Qgc2V0CiMg
Q09ORklHX01BWDEzNjMgaXMgbm90IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUNQMzQyMiBpcyBub3Qgc2V0CiMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNl
dAojIENPTkZJR19USV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTI4UzA1
MiBpcyBub3Qgc2V0CkNPTkZJR19WSVBFUkJPQVJEX0FEQz1tCgojCiMgQW1wbGlmaWVycwoj
CiMgQ09ORklHX0FEODM2NiBpcyBub3Qgc2V0CgojCiMgSGlkIFNlbnNvciBJSU8gQ29tbW9u
CiMKQ09ORklHX0hJRF9TRU5TT1JfSUlPX0NPTU1PTj1tCkNPTkZJR19ISURfU0VOU09SX0lJ
T19UUklHR0VSPW0KCiMKIyBTU1AgU2Vuc29yIENvbW1vbgojCiMgQ09ORklHX0lJT19TU1Bf
U0VOU09SSFVCIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXJz
CiMKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NTA0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NjI0Ul9TUEkgaXMg
bm90IHNldAojIENPTkZJR19BRDU2ODYgaXMgbm90IHNldAojIENPTkZJR19BRDU3NTUgaXMg
bm90IHNldAojIENPTkZJR19BRDU3NjQgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMg
bm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAojIENPTkZJR19NQVg1MTcgaXMg
bm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDkyMiBp
cyBub3Qgc2V0CgojCiMgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBD
bG9jayBHZW5lcmF0b3IvRGlzdHJpYnV0aW9uCiMKIyBDT05GSUdfQUQ5NTIzIGlzIG5vdCBz
ZXQKCiMKIyBQaGFzZS1Mb2NrZWQgTG9vcCAoUExMKSBmcmVxdWVuY3kgc3ludGhlc2l6ZXJz
CiMKIyBDT05GSUdfQURGNDM1MCBpcyBub3Qgc2V0CgojCiMgRGlnaXRhbCBneXJvc2NvcGUg
c2Vuc29ycwojCiMgQ09ORklHX0FESVMxNjA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMx
NjEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWFJTNDUwIGlzIG5vdCBzZXQKQ09O
RklHX0JNRzE2MD1tCkNPTkZJR19ISURfU0VOU09SX0dZUk9fM0Q9bQojIENPTkZJR19JSU9f
U1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAgaXMgbm90IHNldAoK
IwojIEh1bWlkaXR5IHNlbnNvcnMKIwojIENPTkZJR19ESFQxMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CgojCiMg
SW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKIwojIENPTkZJR19BRElTMTY0MDAgaXMgbm90
IHNldAojIENPTkZJR19BRElTMTY0ODAgaXMgbm90IHNldApDT05GSUdfS01YNjE9bQpDT05G
SUdfSU5WX01QVTYwNTBfSUlPPW0KCiMKIyBMaWdodCBzZW5zb3JzCiMKIyBDT05GSUdfQURK
RF9TMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FQRFM5MzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAyMEEwMEYgaXMgbm90IHNl
dAojIENPTkZJR19JU0wyOTEyNSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX0FMUz1t
CkNPTkZJR19ISURfU0VOU09SX1BST1g9bQpDT05GSUdfSlNBMTIxMj1tCiMgQ09ORklHX0xU
UjUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUzM0MTQgaXMgbm90IHNldAojIENPTkZJR19U
Q1MzNDcyIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfVFNMMjU2Mz1tCiMgQ09ORklHX1RT
TDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAwMCBpcyBub3Qgc2V0CgojCiMgTWFn
bmV0b21ldGVyIHNlbnNvcnMKIwpDT05GSUdfQUs4OTc1PW0KIyBDT05GSUdfQUswOTkxMSBp
cyBub3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNP
Ul9NQUdORVRPTUVURVJfM0Q9bQojIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qg
c2V0CgojCiMgSW5jbGlub21ldGVyIHNlbnNvcnMKIwpDT05GSUdfSElEX1NFTlNPUl9JTkNM
SU5PTUVURVJfM0Q9bQpDT05GSUdfSElEX1NFTlNPUl9ERVZJQ0VfUk9UQVRJT049bQoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dF
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TWVNGU19UUklHR0VSIGlzIG5vdCBzZXQKCiMK
IyBQcmVzc3VyZSBzZW5zb3JzCiMKQ09ORklHX0JNUDI4MD1tCkNPTkZJR19ISURfU0VOU09S
X1BSRVNTPW0KIyBDT05GSUdfTVBMMTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMzExNSBp
cyBub3Qgc2V0CiMgQ09ORklHX01TNTYxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9Q
UkVTUyBpcyBub3Qgc2V0CiMgQ09ORklHX1Q1NDAzIGlzIG5vdCBzZXQKCiMKIyBMaWdodG5p
bmcgc2Vuc29ycwojCiMgQ09ORklHX0FTMzkzNSBpcyBub3Qgc2V0CgojCiMgUHJveGltaXR5
IHNlbnNvcnMKIwpDT05GSUdfU1g5NTAwPW0KCiMKIyBUZW1wZXJhdHVyZSBzZW5zb3JzCiMK
IyBDT05GSUdfTUxYOTA2MTQgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNl
dAojIENPTkZJR19OVEIgaXMgbm90IHNldAojIENPTkZJR19WTUVfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUFdNIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBBQ0tfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVTRVRfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZNQyBpcyBu
b3Qgc2V0CgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09O
RklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSQ0FQPXkKQ09O
RklHX0lOVEVMX1JBUEw9bQojIENPTkZJR19NQ0IgaXMgbm90IHNldApDT05GSUdfUkFTPXkK
Q09ORklHX1RIVU5ERVJCT0xUPW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfQU5EUk9JRCBp
cyBub3Qgc2V0CgojCiMgRmlybXdhcmUgRHJpdmVycwojCkNPTkZJR19FREQ9bQojIENPTkZJ
R19FRERfT0ZGIGlzIG5vdCBzZXQKQ09ORklHX0ZJUk1XQVJFX01FTU1BUD15CkNPTkZJR19E
RUxMX1JCVT1tCkNPTkZJR19EQ0RCQVM9bQpDT05GSUdfRE1JSUQ9eQpDT05GSUdfRE1JX1NZ
U0ZTPXkKQ09ORklHX0RNSV9TQ0FOX01BQ0hJTkVfTk9OX0VGSV9GQUxMQkFDSz15CkNPTkZJ
R19JU0NTSV9JQkZUX0ZJTkQ9eQpDT05GSUdfSVNDU0lfSUJGVD1tCiMgQ09ORklHX0dPT0dM
RV9GSVJNV0FSRSBpcyBub3Qgc2V0CgojCiMgRUZJIChFeHRlbnNpYmxlIEZpcm13YXJlIElu
dGVyZmFjZSkgU3VwcG9ydAojCkNPTkZJR19FRklfVkFSUz1tCkNPTkZJR19FRklfVkFSU19Q
U1RPUkU9bQojIENPTkZJR19FRklfVkFSU19QU1RPUkVfREVGQVVMVF9ESVNBQkxFIGlzIG5v
dCBzZXQKQ09ORklHX0VGSV9SVU5USU1FX01BUD15CkNPTkZJR19FRklfUlVOVElNRV9XUkFQ
UEVSUz15CkNPTkZJR19VRUZJX0NQRVI9eQoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19E
Q0FDSEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUM19GUyBpcyBub3Qgc2V0CkNPTkZJR19FWFQ0X0ZTPW0KQ09ORklHX0VYVDRfVVNF
X0ZPUl9FWFQyMz15CkNPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CkNPTkZJR19FWFQ0X0ZT
X1NFQ1VSSVRZPXkKIyBDT05GSUdfRVhUNF9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19KQkQyPW0KIyBDT05GSUdfSkJEMl9E
RUJVRyBpcyBub3Qgc2V0CkNPTkZJR19GU19NQkNBQ0hFPW0KQ09ORklHX1JFSVNFUkZTX0ZT
PW0KIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19SRUlTRVJG
U19QUk9DX0lORk8gaXMgbm90IHNldApDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQpDT05G
SUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZ
PXkKQ09ORklHX0pGU19GUz1tCkNPTkZJR19KRlNfUE9TSVhfQUNMPXkKQ09ORklHX0pGU19T
RUNVUklUWT15CiMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0pGU19T
VEFUSVNUSUNTIGlzIG5vdCBzZXQKQ09ORklHX1hGU19GUz1tCkNPTkZJR19YRlNfUVVPVEE9
eQpDT05GSUdfWEZTX1BPU0lYX0FDTD15CkNPTkZJR19YRlNfUlQ9eQojIENPTkZJR19YRlNf
V0FSTiBpcyBub3Qgc2V0CiMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19H
RlMyX0ZTPW0KQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09eQpDT05GSUdfT0NGUzJfRlM9
bQpDT05GSUdfT0NGUzJfRlNfTzJDQj1tCkNPTkZJR19PQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xV
U1RFUj1tCkNPTkZJR19PQ0ZTMl9GU19TVEFUUz15CkNPTkZJR19PQ0ZTMl9ERUJVR19NQVNL
TE9HPXkKIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfQlRSRlNf
RlM9bQpDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIyBDT05GSUdfQlRSRlNfRlNfQ0hF
Q0tfSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRSRlNfRlNfUlVOX1NBTklUWV9U
RVNUUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUUkZTX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRSRlNfQVNTRVJUIGlzIG5vdCBzZXQKQ09ORklHX05JTEZTMl9GUz1tCkNPTkZJR19G
MkZTX0ZTPW0KQ09ORklHX0YyRlNfU1RBVF9GUz15CkNPTkZJR19GMkZTX0ZTX1hBVFRSPXkK
Q09ORklHX0YyRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0YyRlNfRlNfU0VDVVJJVFk9eQoj
IENPTkZJR19GMkZTX0NIRUNLX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRjJGU19JT19UUkFD
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19GU19QT1NJ
WF9BQ0w9eQpDT05GSUdfRVhQT1JURlM9eQpDT05GSUdfRklMRV9MT0NLSU5HPXkKQ09ORklH
X0ZTTk9USUZZPXkKQ09ORklHX0ROT1RJRlk9eQpDT05GSUdfSU5PVElGWV9VU0VSPXkKQ09O
RklHX0ZBTk9USUZZPXkKIyBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TIGlz
IG5vdCBzZXQKQ09ORklHX1FVT1RBPXkKQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNF
PXkKQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQojIENPTkZJR19RVU9UQV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19RVU9UQV9UUkVFPW0KQ09ORklHX1FGTVRfVjE9bQpDT05GSUdf
UUZNVF9WMj1tCkNPTkZJR19RVU9UQUNUTD15CkNPTkZJR19RVU9UQUNUTF9DT01QQVQ9eQpD
T05GSUdfQVVUT0ZTNF9GUz1tCkNPTkZJR19GVVNFX0ZTPW0KQ09ORklHX0NVU0U9bQpDT05G
SUdfT1ZFUkxBWV9GUz1tCgojCiMgQ2FjaGVzCiMKQ09ORklHX0ZTQ0FDSEU9bQpDT05GSUdf
RlNDQUNIRV9TVEFUUz15CiMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTQ0FDSEVfT0JK
RUNUX0xJU1QgaXMgbm90IHNldApDT05GSUdfQ0FDSEVGSUxFUz1tCiMgQ09ORklHX0NBQ0hF
RklMRVNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBp
cyBub3Qgc2V0CgojCiMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYw
X0ZTPW0KQ09ORklHX0pPTElFVD15CkNPTkZJR19aSVNPRlM9eQpDT05GSUdfVURGX0ZTPW0K
Q09ORklHX1VERl9OTFM9eQoKIwojIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKIwpDT05GSUdf
RkFUX0ZTPW0KQ09ORklHX01TRE9TX0ZTPW0KQ09ORklHX1ZGQVRfRlM9bQpDT05GSUdfRkFU
X0RFRkFVTFRfQ09ERVBBR0U9NDM3CkNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9InV0
ZjgiCkNPTkZJR19OVEZTX0ZTPW0KIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19OVEZTX1JXPXkKCiMKIyBQc2V1ZG8gZmlsZXN5c3RlbXMKIwpDT05GSUdfUFJPQ19G
Uz15CkNPTkZJR19QUk9DX0tDT1JFPXkKQ09ORklHX1BST0NfVk1DT1JFPXkKQ09ORklHX1BS
T0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKQ09ORklHX0tFUk5GUz15
CkNPTkZJR19TWVNGUz15CkNPTkZJR19UTVBGUz15CkNPTkZJR19UTVBGU19QT1NJWF9BQ0w9
eQpDT05GSUdfVE1QRlNfWEFUVFI9eQpDT05GSUdfSFVHRVRMQkZTPXkKQ09ORklHX0hVR0VU
TEJfUEFHRT15CkNPTkZJR19DT05GSUdGU19GUz1tCkNPTkZJR19FRklWQVJfRlM9bQpDT05G
SUdfTUlTQ19GSUxFU1lTVEVNUz15CkNPTkZJR19BREZTX0ZTPW0KIyBDT05GSUdfQURGU19G
U19SVyBpcyBub3Qgc2V0CkNPTkZJR19BRkZTX0ZTPW0KQ09ORklHX0VDUllQVF9GUz1tCkNP
TkZJR19FQ1JZUFRfRlNfTUVTU0FHSU5HPXkKQ09ORklHX0hGU19GUz1tCkNPTkZJR19IRlNQ
TFVTX0ZTPW0KIyBDT05GSUdfSEZTUExVU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApDT05G
SUdfQkVGU19GUz1tCiMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfQkZT
X0ZTPW0KQ09ORklHX0VGU19GUz1tCkNPTkZJR19KRkZTMl9GUz1tCkNPTkZJR19KRkZTMl9G
U19ERUJVRz0wCkNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiMgQ09ORklHX0pGRlMy
X0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKQ09ORklHX0pGRlMyX1NVTU1BUlk9eQpDT05G
SUdfSkZGUzJfRlNfWEFUVFI9eQpDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKQ09ORklH
X0pGRlMyX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9
eQpDT05GSUdfSkZGUzJfWkxJQj15CkNPTkZJR19KRkZTMl9MWk89eQpDT05GSUdfSkZGUzJf
UlRJTUU9eQojIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiMgQ09ORklHX0pGRlMy
X0NNT0RFX05PTkUgaXMgbm90IHNldApDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQoj
IENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKIyBDT05GSUdfSkZGUzJfQ01P
REVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKQ09ORklHX1VCSUZTX0ZTPW0KQ09ORklHX1VCSUZT
X0ZTX0FEVkFOQ0VEX0NPTVBSPXkKQ09ORklHX1VCSUZTX0ZTX0xaTz15CkNPTkZJR19VQklG
U19GU19aTElCPXkKQ09ORklHX0xPR0ZTPW0KQ09ORklHX0NSQU1GUz1tCkNPTkZJR19TUVVB
U0hGUz1tCkNPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFPXkKIyBDT05GSUdfU1FVQVNIRlNf
RklMRV9ESVJFQ1QgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRT15
CiMgQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNf
WEFUVFI9eQpDT05GSUdfU1FVQVNIRlNfWkxJQj15CiMgQ09ORklHX1NRVUFTSEZTX0xaNCBp
cyBub3Qgc2V0CkNPTkZJR19TUVVBU0hGU19MWk89eQpDT05GSUdfU1FVQVNIRlNfWFo9eQoj
IENPTkZJR19TUVVBU0hGU180S19ERVZCTEtfU0laRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NB
Q0hFX1NJWkU9MwpDT05GSUdfVlhGU19GUz1tCkNPTkZJR19NSU5JWF9GUz1tCkNPTkZJR19P
TUZTX0ZTPW0KIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkNPTkZJR19RTlg0RlNfRlM9
bQpDT05GSUdfUU5YNkZTX0ZTPW0KIyBDT05GSUdfUU5YNkZTX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX1JPTUZTX0ZTPW0KIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLIGlzIG5v
dCBzZXQKIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CkNPTkZJR19S
T01GU19CQUNLRURfQllfQk9USD15CkNPTkZJR19ST01GU19PTl9CTE9DSz15CkNPTkZJR19S
T01GU19PTl9NVEQ9eQpDT05GSUdfUFNUT1JFPXkKIyBDT05GSUdfUFNUT1JFX0NPTlNPTEUg
aXMgbm90IHNldAojIENPTkZJR19QU1RPUkVfUE1TRyBpcyBub3Qgc2V0CiMgQ09ORklHX1BT
VE9SRV9GVFJBQ0UgaXMgbm90IHNldApDT05GSUdfUFNUT1JFX1JBTT1tCkNPTkZJR19TWVNW
X0ZTPW0KQ09ORklHX1VGU19GUz1tCiMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19FWE9GU19GUz1tCiMgQ09O
RklHX0VYT0ZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX09SRT1tCkNPTkZJR19ORVRXT1JL
X0ZJTEVTWVNURU1TPXkKQ09ORklHX05GU19GUz1tCkNPTkZJR19ORlNfVjI9bQpDT05GSUdf
TkZTX1YzPW0KQ09ORklHX05GU19WM19BQ0w9eQpDT05GSUdfTkZTX1Y0PW0KQ09ORklHX05G
U19TV0FQPXkKQ09ORklHX05GU19WNF8xPXkKQ09ORklHX05GU19WNF8yPXkKQ09ORklHX1BO
RlNfRklMRV9MQVlPVVQ9bQpDT05GSUdfUE5GU19CTE9DSz1tCkNPTkZJR19QTkZTX09CSkxB
WU9VVD1tCkNPTkZJR19QTkZTX0ZMRVhGSUxFX0xBWU9VVD1tCkNPTkZJR19ORlNfVjRfMV9J
TVBMRU1FTlRBVElPTl9JRF9ET01BSU49Imtlcm5lbC5vcmciCiMgQ09ORklHX05GU19WNF8x
X01JR1JBVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORlNfVjRfU0VDVVJJVFlfTEFCRUw9eQpD
T05GSUdfTkZTX0ZTQ0FDSEU9eQojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90
IHNldApDT05GSUdfTkZTX1VTRV9LRVJORUxfRE5TPXkKQ09ORklHX05GU19ERUJVRz15CkNP
TkZJR19ORlNEPW0KQ09ORklHX05GU0RfVjJfQUNMPXkKQ09ORklHX05GU0RfVjM9eQpDT05G
SUdfTkZTRF9WM19BQ0w9eQpDT05GSUdfTkZTRF9WND15CiMgQ09ORklHX05GU0RfUE5GUyBp
cyBub3Qgc2V0CkNPTkZJR19ORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMPXkKIyBDT05GSUdfTkZT
RF9GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfR1JBQ0VfUEVSSU9EPW0KQ09O
RklHX0xPQ0tEPW0KQ09ORklHX0xPQ0tEX1Y0PXkKQ09ORklHX05GU19BQ0xfU1VQUE9SVD1t
CkNPTkZJR19ORlNfQ09NTU9OPXkKQ09ORklHX1NVTlJQQz1tCkNPTkZJR19TVU5SUENfR1NT
PW0KQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTD15CkNPTkZJR19TVU5SUENfU1dBUD15CkNP
TkZJR19SUENTRUNfR1NTX0tSQjU9bQpDT05GSUdfU1VOUlBDX0RFQlVHPXkKQ09ORklHX1NV
TlJQQ19YUFJUX1JETUFfQ0xJRU5UPW0KQ09ORklHX1NVTlJQQ19YUFJUX1JETUFfU0VSVkVS
PW0KQ09ORklHX0NFUEhfRlM9bQpDT05GSUdfQ0VQSF9GU0NBQ0hFPXkKQ09ORklHX0NFUEhf
RlNfUE9TSVhfQUNMPXkKQ09ORklHX0NJRlM9bQojIENPTkZJR19DSUZTX1NUQVRTIGlzIG5v
dCBzZXQKQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKQ09ORklHX0NJRlNfVVBDQUxMPXkK
Q09ORklHX0NJRlNfWEFUVFI9eQpDT05GSUdfQ0lGU19QT1NJWD15CkNPTkZJR19DSUZTX0FD
TD15CkNPTkZJR19DSUZTX0RFQlVHPXkKIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNl
dApDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKQ09ORklHX0NJRlNfU01CMj15CkNPTkZJR19D
SUZTX0ZTQ0FDSEU9eQpDT05GSUdfTkNQX0ZTPW0KQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdO
SU5HPXkKQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQpDT05GSUdfTkNQRlNfU1RST05H
PXkKQ09ORklHX05DUEZTX05GU19OUz15CkNPTkZJR19OQ1BGU19PUzJfTlM9eQojIENPTkZJ
R19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CkNPTkZJR19OQ1BGU19OTFM9eQpDT05GSUdf
TkNQRlNfRVhUUkFTPXkKQ09ORklHX0NPREFfRlM9bQpDT05GSUdfQUZTX0ZTPW0KIyBDT05G
SUdfQUZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FGU19GU0NBQ0hFPXkKQ09ORklHXzlQ
X0ZTPW0KQ09ORklHXzlQX0ZTQ0FDSEU9eQpDT05GSUdfOVBfRlNfUE9TSVhfQUNMPXkKQ09O
RklHXzlQX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0i
dXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzcz
Nz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQ09ORklHX05MU19DT0RFUEFHRV84NTA9
bQpDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0K
Q09ORklHX05MU19DT0RFUEFHRV84NTc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCkNP
TkZJR19OTFNfQ09ERVBBR0VfODYxPW0KQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQpDT05G
SUdfTkxTX0NPREVQQUdFXzg2Mz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KQ09ORklH
X05MU19DT0RFUEFHRV84NjU9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCkNPTkZJR19O
TFNfQ09ERVBBR0VfODY5PW0KQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQpDT05GSUdfTkxT
X0NPREVQQUdFXzk1MD1tCkNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KQ09ORklHX05MU19D
T0RFUEFHRV85NDk9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCkNPTkZJR19OTFNfSVNP
ODg1OV84PW0KQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KQ09ORklHX05MU19DT0RFUEFH
RV8xMjUxPW0KQ09ORklHX05MU19BU0NJST1tCkNPTkZJR19OTFNfSVNPODg1OV8xPW0KQ09O
RklHX05MU19JU084ODU5XzI9bQpDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkNPTkZJR19OTFNf
SVNPODg1OV80PW0KQ09ORklHX05MU19JU084ODU5XzU9bQpDT05GSUdfTkxTX0lTTzg4NTlf
Nj1tCkNPTkZJR19OTFNfSVNPODg1OV83PW0KQ09ORklHX05MU19JU084ODU5Xzk9bQpDT05G
SUdfTkxTX0lTTzg4NTlfMTM9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQpDT05GSUdfTkxT
X0lTTzg4NTlfMTU9bQpDT05GSUdfTkxTX0tPSThfUj1tCkNPTkZJR19OTFNfS09JOF9VPW0K
Q09ORklHX05MU19NQUNfUk9NQU49bQpDT05GSUdfTkxTX01BQ19DRUxUSUM9bQpDT05GSUdf
TkxTX01BQ19DRU5URVVSTz1tCkNPTkZJR19OTFNfTUFDX0NST0FUSUFOPW0KQ09ORklHX05M
U19NQUNfQ1lSSUxMSUM9bQpDT05GSUdfTkxTX01BQ19HQUVMSUM9bQpDT05GSUdfTkxTX01B
Q19HUkVFSz1tCkNPTkZJR19OTFNfTUFDX0lDRUxBTkQ9bQpDT05GSUdfTkxTX01BQ19JTlVJ
VD1tCkNPTkZJR19OTFNfTUFDX1JPTUFOSUFOPW0KQ09ORklHX05MU19NQUNfVFVSS0lTSD1t
CkNPTkZJR19OTFNfVVRGOD1tCkNPTkZJR19ETE09bQpDT05GSUdfRExNX0RFQlVHPXkKCiMK
IyBLZXJuZWwgaGFja2luZwojCkNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKCiMK
IyBwcmludGsgYW5kIGRtZXNnIG9wdGlvbnMKIwpDT05GSUdfUFJJTlRLX1RJTUU9eQpDT05G
SUdfTUVTU0FHRV9MT0dMRVZFTF9ERUZBVUxUPTQKQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZ
PXkKQ09ORklHX0RZTkFNSUNfREVCVUc9eQoKIwojIENvbXBpbGUtdGltZSBjaGVja3MgYW5k
IGNvbXBpbGVyIG9wdGlvbnMKIwpDT05GSUdfREVCVUdfSU5GTz15CiMgQ09ORklHX0RFQlVH
X0lORk9fUkVEVUNFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMg
bm90IHNldAojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNCBpcyBub3Qgc2V0CiMgQ09ORklH
X0dEQl9TQ1JJUFRTIGlzIG5vdCBzZXQKQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9
eQpDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQpDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CkNP
TkZJR19TVFJJUF9BU01fU1lNUz15CiMgQ09ORklHX1JFQURBQkxFX0FTTSBpcyBub3Qgc2V0
CkNPTkZJR19VTlVTRURfU1lNQk9MUz15CiMgQ09ORklHX1BBR0VfT1dORVIgaXMgbm90IHNl
dApDT05GSUdfREVCVUdfRlM9eQojIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1dBTlRfRlJBTUVfUE9JTlRFUlM9eQojIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKQ09ORklH
X01BR0lDX1NZU1JRPXkKQ09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFPTB4MDFi
NgpDT05GSUdfREVCVUdfS0VSTkVMPXkKCiMKIyBNZW1vcnkgRGVidWdnaW5nCiMKIyBDT05G
SUdfUEFHRV9FWFRFTlNJT04gaXMgbm90IHNldAojIENPTkZJR19ERUJVR19QQUdFQUxMT0Mg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfU0xBQiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVHX0tNRU1MRUFLPXkKIyBD
T05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TVEFDS19V
U0FHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiMg
Q09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVH
X1NUQUNLT1ZFUkZMT1c9eQojIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBz
ZXQKQ09ORklHX0hBVkVfQVJDSF9LTUVNQ0hFQ0s9eQpDT05GSUdfSEFWRV9BUkNIX0tBU0FO
PXkKQ09ORklHX0tBU0FOX1NIQURPV19PRkZTRVQ9MHhkZmZmZmMwMDAwMDAwMDAwCiMgQ09O
RklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKCiMKIyBEZWJ1ZyBMb2NrdXBzIGFuZCBIYW5n
cwojCkNPTkZJR19MT0NLVVBfREVURUNUT1I9eQpDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RP
Uj15CiMgQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKQ09O
RklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVFPTAKIyBDT05GSUdfQk9PVFBB
UkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldApDT05GSUdfQk9PVFBBUkFNX1NPRlRM
T0NLVVBfUEFOSUNfVkFMVUU9MApDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CkNPTkZJR19E
RUZBVUxUX0hVTkdfVEFTS19USU1FT1VUPTEyMAojIENPTkZJR19CT09UUEFSQU1fSFVOR19U
QVNLX1BBTklDIGlzIG5vdCBzZXQKQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNf
VkFMVUU9MAojIENPTkZJR19QQU5JQ19PTl9PT1BTIGlzIG5vdCBzZXQKQ09ORklHX1BBTklD
X09OX09PUFNfVkFMVUU9MApDT05GSUdfUEFOSUNfVElNRU9VVD0wCkNPTkZJR19TQ0hFRF9E
RUJVRz15CiMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAojIENPTkZJR19TQ0hFRF9T
VEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19USU1FS0VFUElORyBp
cyBub3Qgc2V0CkNPTkZJR19USU1FUl9TVEFUUz15CgojCiMgTG9jayBEZWJ1Z2dpbmcgKHNw
aW5sb2NrcywgbXV0ZXhlcywgZXRjLi4uKQojCiMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19XV19NVVRFWF9TTE9X
UEFUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAoj
IENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9DS19TVEFUIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQIGlzIG5vdCBzZXQKIyBDT05G
SUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9D
S19UT1JUVVJFX1RFU1QgaXMgbm90IHNldApDT05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklH
X0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CkNP
TkZJR19ERUJVR19MSVNUPXkKIyBDT05GSUdfREVCVUdfUElfTElTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAoKIwojIFJD
VSBEZWJ1Z2dpbmcKIwojIENPTkZJR19QUk9WRV9SQ1UgaXMgbm90IHNldAojIENPTkZJR19T
UEFSU0VfUkNVX1BPSU5URVIgaXMgbm90IHNldAojIENPTkZJR19UT1JUVVJFX1RFU1QgaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9DUFVfU1RBTExfVElNRU9VVD0yMQojIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19C
TE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiMgQ09ORklHX05PVElGSUVSX0VSUk9SX0lOSkVD
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfU1RS
SUNUX1VTRVJfQ09QWV9DSEVDS1M9eQojIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZ
X0NIRUNLUyBpcyBub3Qgc2V0CkNPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkNP
TkZJR19OT1BfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQ09ORklH
X0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JB
UEhfRlBfVEVTVD15CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQ09ORklHX0hBVkVf
RFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9S
RUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQ09ORklHX0hBVkVf
RkVOVFJZPXkKQ09ORklHX0hBVkVfQ19SRUNPUkRNQ09VTlQ9eQpDT05GSUdfVFJBQ0VSX01B
WF9UUkFDRT15CkNPTkZJR19UUkFDRV9DTE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNP
TkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNP
TkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKQ09ORklHX1RSQUNJTkc9eQpDT05GSUdf
R0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQ09ORklHX0ZUUkFD
RT15CkNPTkZJR19GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJB
Q0VSPXkKIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TQ0hF
RF9UUkFDRVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX1NZU0NBTExTPXkKQ09ORklHX1RS
QUNFUl9TTkFQU0hPVD15CiMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVAg
aXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJ
TEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJPRklMRV9BTExf
QlJBTkNIRVMgaXMgbm90IHNldApDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKQ09ORklHX0JMS19E
RVZfSU9fVFJBQ0U9eQpDT05GSUdfS1BST0JFX0VWRU5UPXkKQ09ORklHX1VQUk9CRV9FVkVO
VD15CkNPTkZJR19QUk9CRV9FVkVOVFM9eQpDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQpDT05G
SUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKIyBDT05GSUdfRlVOQ1RJT05fUFJPRklM
RVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQojIENPTkZJR19G
VFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09ORklHX01NSU9UUkFDRT15CiMgQ09O
RklHX01NSU9UUkFDRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJBQ0VQT0lOVF9CRU5D
SE1BUksgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90
IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENP
TkZJR19UUkFDRV9FTlVNX01BUF9GSUxFIGlzIG5vdCBzZXQKCiMKIyBSdW50aW1lIFRlc3Rp
bmcKIwojIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JU
IGlzIG5vdCBzZXQKIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SQlRSRUVf
VEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BFUkNQVV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlDNjRfU0VM
RlRFU1QgaXMgbm90IHNldAojIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9IRVhEVU1QIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9TVFJJTkdf
SEVMUEVSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfS1NUUlRPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfUkhBU0hUQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1BST1ZJREVfT0hD
STEzOTRfRE1BX0lOSVQgaXMgbm90IHNldAojIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfVEVTVF9MS00gaXMgbm90IHNldAojIENPTkZJR19URVNUX1VTRVJf
Q09QWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQlBGIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9GSVJNV0FSRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBz
ZXQKQ09ORklHX01FTVRFU1Q9eQojIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKQ09ORklH
X0hBVkVfQVJDSF9LR0RCPXkKIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkNPTkZJR19TVFJJ
Q1RfREVWTUVNPXkKIyBDT05GSUdfWDg2X1ZFUkJPU0VfQk9PVFVQIGlzIG5vdCBzZXQKQ09O
RklHX0VBUkxZX1BSSU5USz15CiMgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQIGlzIG5vdCBz
ZXQKQ09ORklHX0VBUkxZX1BSSU5US19FRkk9eQojIENPTkZJR19YODZfUFREVU1QIGlzIG5v
dCBzZXQKQ09ORklHX0RFQlVHX1JPREFUQT15CiMgQ09ORklHX0RFQlVHX1JPREFUQV9URVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWD15CiMgQ09ORklHX0RF
QlVHX05YX1RFU1QgaXMgbm90IHNldApDT05GSUdfRE9VQkxFRkFVTFQ9eQojIENPTkZJR19E
RUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lPTU1VX0RFQlVHIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU9NTVVfU1RSRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTU1JT1RS
QUNFX1NVUFBPUlQ9eQojIENPTkZJR19YODZfREVDT0RFUl9TRUxGVEVTVCBpcyBub3Qgc2V0
CkNPTkZJR19JT19ERUxBWV9UWVBFXzBYODA9MApDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVE
PTEKQ09ORklHX0lPX0RFTEFZX1RZUEVfVURFTEFZPTIKQ09ORklHX0lPX0RFTEFZX1RZUEVf
Tk9ORT0zCkNPTkZJR19JT19ERUxBWV8wWDgwPXkKIyBDT05GSUdfSU9fREVMQVlfMFhFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0lPX0RFTEFZX1VERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lPX0RFTEFZX05PTkUgaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBF
PTAKIyBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMgaXMgbm90IHNldAojIENPTkZJR19DUEFf
REVCVUcgaXMgbm90IHNldApDT05GSUdfT1BUSU1JWkVfSU5MSU5JTkc9eQojIENPTkZJR19E
RUJVR19OTUlfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19YODZfREVCVUdfU1RBVElD
X0NQVV9IQVMgaXMgbm90IHNldAoKIwojIFNlY3VyaXR5IG9wdGlvbnMKIwpDT05GSUdfS0VZ
Uz15CiMgQ09ORklHX1BFUlNJU1RFTlRfS0VZUklOR1MgaXMgbm90IHNldAojIENPTkZJR19C
SUdfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSVVNURURfS0VZUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0VOQ1JZUFRFRF9LRVlTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfRE1F
U0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFk9eQpDT05GSUdfU0VDVVJJ
VFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklHX1NFQ1VSSVRZX05FVFdP
UktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdfSU5URUxfVFhUIGlz
IG5vdCBzZXQKQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CkNPTkZJR19TRUNVUklU
WV9TRUxJTlVYPXkKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU0gaXMgbm90
IHNldAojIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhf
QVZDX1NUQVRTPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVF
PTEKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWT0y
MDQ4CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FVRElUX0xPRz0xMDI0CiMgQ09ORklH
X1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVIgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVI9Ii9zYmluL3RvbW95by1pbml0IgpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUj0iL3NiaW4vaW5pdCIK
Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXkKQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0JP
T1RQQVJBTV9WQUxVRT0xCkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIPXkKQ09ORklH
X1NFQ1VSSVRZX1lBTUE9eQpDT05GSUdfU0VDVVJJVFlfWUFNQV9TVEFDS0VEPXkKQ09ORklH
X0lOVEVHUklUWT15CiMgQ09ORklHX0lOVEVHUklUWV9TSUdOQVRVUkUgaXMgbm90IHNldApD
T05GSUdfSU5URUdSSVRZX0FVRElUPXkKIyBDT05GSUdfSU1BIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVZNIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAoj
IENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVGQVVMVF9TRUNVUklUWV9ZQU1BIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJ
VFlfREFDPXkKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKQ09ORklHX1hPUl9CTE9DS1M9
bQpDT05GSUdfQVNZTkNfQ09SRT1tCkNPTkZJR19BU1lOQ19NRU1DUFk9bQpDT05GSUdfQVNZ
TkNfWE9SPW0KQ09ORklHX0FTWU5DX1BRPW0KQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0K
Q09ORklHX0NSWVBUTz15CgojCiMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiMKQ09ORklHX0NS
WVBUT19BTEdBUEk9eQpDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQpDT05GSUdfQ1JZUFRPX0FF
QUQ9bQpDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQpD
T05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdf
Q1JZUFRPX0hBU0gyPXkKQ09ORklHX0NSWVBUT19STkc9bQpDT05GSUdfQ1JZUFRPX1JORzI9
eQpDT05GSUdfQ1JZUFRPX1BDT01QPW0KQ09ORklHX0NSWVBUT19QQ09NUDI9eQpDT05GSUdf
Q1JZUFRPX01BTkFHRVI9eQpDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKIyBDT05GSUdfQ1JZ
UFRPX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RF
U1RTIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCkNPTkZJR19DUllQVE9f
TlVMTD1tCkNPTkZJR19DUllQVE9fUENSWVBUPW0KQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9
eQpDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiMgQ09ORklHX0NSWVBUT19NQ1JZUFREIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KQ09ORklHX0NSWVBUT19URVNUPW0KQ09O
RklHX0NSWVBUT19BQkxLX0hFTFBFUj1tCkNPTkZJR19DUllQVE9fR0xVRV9IRUxQRVJfWDg2
PW0KCiMKIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEK
IwpDT05GSUdfQ1JZUFRPX0NDTT1tCkNPTkZJR19DUllQVE9fR0NNPW0KQ09ORklHX0NSWVBU
T19TRVFJVj1tCgojCiMgQmxvY2sgbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NCQz1tCkNPTkZJ
R19DUllQVE9fQ1RSPW0KQ09ORklHX0NSWVBUT19DVFM9bQpDT05GSUdfQ1JZUFRPX0VDQj1t
CkNPTkZJR19DUllQVE9fTFJXPW0KQ09ORklHX0NSWVBUT19QQ0JDPW0KQ09ORklHX0NSWVBU
T19YVFM9bQoKIwojIEhhc2ggbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NNQUM9bQpDT05GSUdf
Q1JZUFRPX0hNQUM9bQpDT05GSUdfQ1JZUFRPX1hDQkM9bQpDT05GSUdfQ1JZUFRPX1ZNQUM9
bQoKIwojIERpZ2VzdAojCkNPTkZJR19DUllQVE9fQ1JDMzJDPW0KQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUw9bQpDT05GSUdfQ1JZUFRPX0NSQzMyPW0KQ09ORklHX0NSWVBUT19DUkMz
Ml9QQ0xNVUw9bQpDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRj15CkNPTkZJR19DUllQVE9fQ1JD
VDEwRElGX1BDTE1VTD1tCkNPTkZJR19DUllQVE9fR0hBU0g9bQpDT05GSUdfQ1JZUFRPX01E
ND1tCkNPTkZJR19DUllQVE9fTUQ1PXkKQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCkNP
TkZJR19DUllQVE9fUk1EMTI4PW0KQ09ORklHX0NSWVBUT19STUQxNjA9bQpDT05GSUdfQ1JZ
UFRPX1JNRDI1Nj1tCkNPTkZJR19DUllQVE9fUk1EMzIwPW0KQ09ORklHX0NSWVBUT19TSEEx
PXkKQ09ORklHX0NSWVBUT19TSEExX1NTU0UzPW0KQ09ORklHX0NSWVBUT19TSEEyNTZfU1NT
RTM9bQpDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMz1tCiMgQ09ORklHX0NSWVBUT19TSEEx
X01CIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19TSEEyNTY9bQpDT05GSUdfQ1JZUFRPX1NI
QTUxMj1tCkNPTkZJR19DUllQVE9fVEdSMTkyPW0KQ09ORklHX0NSWVBUT19XUDUxMj1tCkNP
TkZJR19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUw9bQoKIwojIENpcGhlcnMKIwpDT05G
SUdfQ1JZUFRPX0FFUz15CkNPTkZJR19DUllQVE9fQUVTX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQUVTX05JX0lOVEVMPW0KQ09ORklHX0NSWVBUT19BTlVCSVM9bQpDT05GSUdfQ1JZUFRP
X0FSQzQ9bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KQ09ORklHX0NSWVBUT19CTE9XRklT
SF9DT01NT049bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQ0FNRUxMSUE9bQpDT05GSUdfQ1JZUFRPX0NBTUVMTElBX1g4Nl82ND1tCkNPTkZJR19D
UllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fQ0FNRUxM
SUFfQUVTTklfQVZYMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX0NBU1RfQ09NTU9OPW0KQ09O
RklHX0NSWVBUT19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82ND1tCkNP
TkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQ9bQpD
T05GSUdfQ1JZUFRPX0RFUz1tCiMgQ09ORklHX0NSWVBUT19ERVMzX0VERV9YODZfNjQgaXMg
bm90IHNldApDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCkNPTkZJR19DUllQVE9fS0hBWkFEPW0K
Q09ORklHX0NSWVBUT19TQUxTQTIwPW0KQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82ND1t
CkNPTkZJR19DUllQVE9fU0VFRD1tCkNPTkZJR19DUllQVE9fU0VSUEVOVD1tCkNPTkZJR19D
UllQVE9fU0VSUEVOVF9TU0UyX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fU0VSUEVOVF9BVlhf
WDg2XzY0PW0KQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0PW0KQ09ORklHX0NS
WVBUT19URUE9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJ
U0hfQ09NTU9OPW0KQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fVFdPRklTSF9YODZfNjRfM1dBWT1tCkNPTkZJR19DUllQVE9fVFdPRklTSF9BVlhfWDg2
XzY0PW0KCiMKIyBDb21wcmVzc2lvbgojCkNPTkZJR19DUllQVE9fREVGTEFURT1tCkNPTkZJ
R19DUllQVE9fWkxJQj1tCkNPTkZJR19DUllQVE9fTFpPPXkKQ09ORklHX0NSWVBUT19MWjQ9
bQpDT05GSUdfQ1JZUFRPX0xaNEhDPW0KCiMKIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24K
IwpDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQojIENPTkZJR19DUllQVE9fRFJCR19NRU5V
IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19VU0VSX0FQST1tCkNPTkZJR19DUllQVE9fVVNF
Ul9BUElfSEFTSD1tCkNPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQojIENPTkZJ
R19DUllQVE9fVVNFUl9BUElfUk5HIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19IVz15CkNP
TkZJR19DUllQVE9fREVWX1BBRExPQ0s9bQpDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FF
Uz1tCkNPTkZJR19DUllQVE9fREVWX1BBRExPQ0tfU0hBPW0KQ09ORklHX0NSWVBUT19ERVZf
Q0NQPXkKQ09ORklHX0NSWVBUT19ERVZfQ0NQX0REPW0KQ09ORklHX0NSWVBUT19ERVZfQ0NQ
X0NSWVBUTz1tCkNPTkZJR19DUllQVE9fREVWX1FBVD1tCkNPTkZJR19DUllQVE9fREVWX1FB
VF9ESDg5NXhDQz1tCiMgQ09ORklHX0FTWU1NRVRSSUNfS0VZX1RZUEUgaXMgbm90IHNldApD
T05GSUdfSEFWRV9LVk09eQpDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUD15CkNPTkZJR19IQVZF
X0tWTV9JUlFGRD15CkNPTkZJR19IQVZFX0tWTV9JUlFfUk9VVElORz15CkNPTkZJR19IQVZF
X0tWTV9FVkVOVEZEPXkKQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRT15CkNPTkZJR19L
Vk1fTU1JTz15CkNPTkZJR19LVk1fQVNZTkNfUEY9eQpDT05GSUdfSEFWRV9LVk1fTVNJPXkK
Q09ORklHX0hBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQ9eQpDT05GSUdfS1ZNX1ZGSU89
eQpDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUPXkKQ09ORklHX0tW
TV9DT01QQVQ9eQpDT05GSUdfVklSVFVBTElaQVRJT049eQpDT05GSUdfS1ZNPW0KQ09ORklH
X0tWTV9JTlRFTD1tCkNPTkZJR19LVk1fQU1EPW0KIyBDT05GSUdfS1ZNX01NVV9BVURJVCBp
cyBub3Qgc2V0CkNPTkZJR19LVk1fREVWSUNFX0FTU0lHTk1FTlQ9eQpDT05GSUdfQklOQVJZ
X1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19SQUlENl9QUT1tCkNP
TkZJR19CSVRSRVZFUlNFPXkKIyBDT05GSUdfSEFWRV9BUkNIX0JJVFJFVkVSU0UgaXMgbm90
IHNldApDT05GSUdfUkFUSU9OQUw9eQpDT05GSUdfR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNF
Uj15CkNPTkZJR19HRU5FUklDX1NUUk5MRU5fVVNFUj15CkNPTkZJR19HRU5FUklDX05FVF9V
VElMUz15CkNPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUPXkKQ09ORklHX0dFTkVSSUNf
UENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdfR0VORVJJQ19JTz15
CkNPTkZJR19QRVJDUFVfUldTRU09eQpDT05GSUdfQVJDSF9VU0VfQ01QWENIR19MT0NLUkVG
PXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUj15CkNPTkZJR19DUkNfQ0NJVFQ9
bQpDT05GSUdfQ1JDMTY9bQpDT05GSUdfQ1JDX1QxMERJRj15CkNPTkZJR19DUkNfSVRVX1Q9
bQpDT05GSUdfQ1JDMzI9eQojIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNP
TkZJR19DUkMzMl9TTElDRUJZOD15CiMgQ09ORklHX0NSQzMyX1NMSUNFQlk0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JDMzJfU0FSV0FURSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX0JJ
VCBpcyBub3Qgc2V0CkNPTkZJR19DUkM3PW0KQ09ORklHX0xJQkNSQzMyQz1tCiMgQ09ORklH
X0NSQzggaXMgbm90IHNldAojIENPTkZJR19BVURJVF9BUkNIX0NPTVBBVF9HRU5FUklDIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
WkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0NPTVBSRVNTPW0KQ09O
RklHX0xaNEhDX0NPTVBSRVNTPW0KQ09ORklHX0xaNF9ERUNPTVBSRVNTPXkKQ09ORklHX1ha
X0RFQz15CkNPTkZJR19YWl9ERUNfWDg2PXkKIyBDT05GSUdfWFpfREVDX1BPV0VSUEMgaXMg
bm90IHNldAojIENPTkZJR19YWl9ERUNfSUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1haX0RF
Q19BUk0gaXMgbm90IHNldAojIENPTkZJR19YWl9ERUNfQVJNVEhVTUIgaXMgbm90IHNldAoj
IENPTkZJR19YWl9ERUNfU1BBUkMgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15
CkNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNP
TkZJR19ERUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RF
Q09NUFJFU1NfTFo0PXkKQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKQ09ORklHX1JFRURf
U09MT01PTj1tCkNPTkZJR19SRUVEX1NPTE9NT05fRU5DOD15CkNPTkZJR19SRUVEX1NPTE9N
T05fREVDOD15CkNPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpDT05GSUdfQkNIPW0KQ09O
RklHX1RFWFRTRUFSQ0g9eQpDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQpDT05GSUdfVEVYVFNF
QVJDSF9CTT1tCkNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCkNPTkZJR19CVFJFRT15CkNPTkZJ
R19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX0FTU09DSUFUSVZFX0FSUkFZPXkKQ09ORklHX0hB
U19JT01FTT15CkNPTkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09O
RklHX0NIRUNLX1NJR05BVFVSRT15CkNPTkZJR19DUFVfUk1BUD15CkNPTkZJR19EUUw9eQpD
T05GSUdfR0xPQj15CiMgQ09ORklHX0dMT0JfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
TkxBVFRSPXkKQ09ORklHX0FSQ0hfSEFTX0FUT01JQzY0X0RFQ19JRl9QT1NJVElWRT15CkNP
TkZJR19MUlVfQ0FDSEU9bQpDT05GSUdfQVZFUkFHRT15CkNPTkZJR19DT1JESUM9bQojIENP
TkZJR19ERFIgaXMgbm90IHNldApDT05GSUdfT0lEX1JFR0lTVFJZPW0KQ09ORklHX1VDUzJf
U1RSSU5HPXkKQ09ORklHX0ZPTlRfU1VQUE9SVD15CiMgQ09ORklHX0ZPTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0ZPTlRfOHg4PXkKQ09ORklHX0ZPTlRfOHgxNj15CkNPTkZJR19BUkNIX0hB
U19TR19DSEFJTj15Cg==
--------------000909010101030501040802
Content-Type: text/plain; charset=UTF-8;
 name="W10.cfg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="W10.cfg"

bmFtZT0nVzEwJwpidWlsZGVyPSJodm0iCiNkZXZpY2VfbW9kZWxfb3ZlcnJpZGU9Ii91c3Iv
bGliL3hlbi9iaW4vcWVtdS1nZGIiCm1lbW9yeT00MDk2CnZjcHVzPTIKYWNwaV9zMz0wCmFj
cGlfczQ9MApoZHR5cGU9ImFoY2kiCnZpZj1bJ2JyaWRnZT14ZW5icjAsbWFjPTAwOjE2OjNl
OmZlOjdhOmI5J10KI2Rpc2s9WycvbW50L3ZtL2Rpc2tzL1cxMC5kaXNrMS54bSxyYXcsaGRh
LHJ3JywnLHJhdyxoZGIscm8sY2Ryb20nXQpkaXNrPVsnL21udC92bS9kaXNrcy9XMTAuZGlz
azEuY293LXNuMSxxY293MixoZGEscncnLCcscmF3LGhkYixybyxjZHJvbSddCmJvb3Q9J2Nk
JwpkZXZpY2VfbW9kZWxfdmVyc2lvbj0icWVtdS14ZW4iCnZpcmlkaWFuPTEKeGVuX3BsYXRm
b3JtX3BjaT0xCnZuYz0wCiN2bmN1bnVzZWQ9MQojdm5jbGlzdGVuPSIwLjAuMC4wIgprZXlt
YXA9Iml0Igpvbl9jcmFzaD0iZGVzdHJveSIKdmdhPSJxeGwiCnNwaWNlPTEKc3BpY2Vob3N0
PScwLjAuMC4wJwpzcGljZXBvcnQ9NjAwMApzcGljZWRpc2FibGVfdGlja2V0aW5nPTEKc3Bp
Y2V2ZGFnZW50PTEKc3BpY2VfY2xpcGJvYXJkX3NoYXJpbmc9MAojc3BpY2VfaW1hZ2VfY29t
cHJlc3Npb249Imx6NCIKI3NwaWNlX3N0cmVhbWluZ192aWRlbz0ib2ZmIgojc3BpY2Vfc3Ry
ZWFtaW5nX3ZpZGVvPSJhbGwiCiNzcGljZV92aWRlb19jb2RlY3M9ImdzdHJlYW1lcjp2cDgi
CnNwaWNldXNicmVkaXJlY3Rpb249NApzb3VuZGh3PSJoZGEiCmxvY2FsdGltZT0xCiN1c2J2
ZXJzaW9uPTMKbXNfdm1fZ2VuaWQ9ImdlbmVyYXRlIgoKZGV2aWNlX21vZGVsX2FyZ3M9WyIt
dHJhY2UiLCJldmVudHM9L2V0Yy94ZW4vcWVtdS10cmFjZS1vcHRpb25zIl0KCg==
--------------000909010101030501040802
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------000909010101030501040802--


From win-pv-devel-bounces@lists.xenproject.org Thu Sep 10 14:36:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 10 Sep 2015 14:36:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Za2xn-0007wk-Nh; Thu, 10 Sep 2015 14:36:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Za2xl-0007wM-Um
	for win-pv-devel@lists.xenproject.org; Thu, 10 Sep 2015 14:36:34 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	B3/E5-09570-17591F55; Thu, 10 Sep 2015 14:36:33 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-2.tower-31.messagelabs.com!1441895786!12041707!1
X-Originating-IP: [209.85.212.179]
X-SpamReason: No, hits=2.4 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 16727 invoked from network); 10 Sep 2015 14:36:26 -0000
Received: from mail-wi0-f179.google.com (HELO mail-wi0-f179.google.com)
	(209.85.212.179)
	by server-2.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	10 Sep 2015 14:36:26 -0000
Received: by wicfx3 with SMTP id fx3so30772621wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 07:36:25 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=U8dSSA/03N0fdCsTBBYtpxqr7su4hfjEDh6ISCsIbB0=;
	b=nHyJPpKOY+qdSLApZB5Qb/0K0PWouuICDpfTvy3NETPrqjHnjWB2Ct+pBUFeZ53FbH
	tOSKG1/PvSCJ07ulbi0ib/urCFvjN4d5ZR/F533eBHUU5bvoDzmc4zg29vE0LPTlqU1R
	kZZanSlWLUmhMg+Q/Az0s75+qwWja1VMO4h/ekAzbe8HIR9Gd3QDkCow8TpXOSeohUeD
	BQJhg/GjDMvCsnsdLL2TNc+5oWOHMdg5/P2sd7R8iRpsjuAOfZzKgugumhsr9IL7Wb+X
	xEE8dMzlc31Pok664mAfE55azmORQYZyNeCz0+WwdSrZEhTd3Q7n1F6LtZS61deTsO8x
	FG9Q==
X-Gm-Message-State: ALoCoQlq5FgnIlvjkQ7a6Pk8GTmmxb2ALoDp8Vd80AcFt5hKrKQ5FbFFkoXSCeFllWTYIOeBavhc
X-Received: by 10.194.190.79 with SMTP id go15mr68181242wjc.80.1441895785589; 
	Thu, 10 Sep 2015 07:36:25 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	db8sm16004455wjb.41.2015.09.10.07.36.18
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Thu, 10 Sep 2015 07:36:24 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F1956B.4070201@m2r.biz>
Date: Thu, 10 Sep 2015 16:36:27 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
Content-Type: multipart/mixed; boundary="------------000909010101030501040802"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: Re: [win-pv-devel] Problems with xenvbd
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------000909010101030501040802
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 26009
Content-Transfer-Encoding: quoted-printable

Il 07/09/2015 16:41, Paul Durrant ha scritto:
>> -----Original Message-----
>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>> Sent: 07 September 2015 14:01
>> To: Paul Durrant; Stefano Stabellini
>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>
>> Il 07/09/2015 13:57, Paul Durrant ha scritto:
>>>> -----Original Message-----
>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>> Sent: 07 September 2015 11:33
>>>> To: Paul Durrant; Stefano Stabellini
>>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>>
>>>> Il 07/09/2015 11:26, Paul Durrant ha scritto:
>>>>> Fabio,
>>>>>
>>>>>      Can you confirm that you don't see any problem if you use standard
>> IDE
>>>> emulated disks=3F I certainly don't.
>>>>>      Paul
>>>> WIth ide instead ahci was with same results but about udev problem now
>>>> seems I found the cause, seems the dom0 kernel.
>>>> With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy
>>>> repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64
>>>> version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
>>>> Initially new pv drivers was with network not working with kernel <3.14
>>>> but after seems was solved (I don't know the exactly commit) but seems
>>>> that xen without udev file a newer kernel is still needed.
>>>> With 3.16 kernel I had other problems instead, for example with
>>>> balloning (even if should not be used).
>>>> With second test with kernel 3.16 I tried to remove a workaround of
>>>> balloning problem (dom0_mem=3D2G,max:3G in grub.cfg instead
>>>> dom0_mem=3D2G,max:2G), I nomore saw kern.log spam but W7 domU
>>>> crashed at boot.
>>>> Another strange things is even if with trace enabled don't show pv
>>>> drivers debug lines with 3.16 kernel (on older tests with 3.16 did if I
>>>> remember good)
>>>> In attachment the windows minidump.
>>> That yielded:
>>>
>>> 0: kd> !analyze -v
>>>
>> **********************************************************
>> *********************
>>> *                                                                             *
>>> *                        Bugcheck Analysis                                    *
>>> *                                                                             *
>>>
>> **********************************************************
>> *********************
>>> SYSTEM_SERVICE_EXCEPTION (3b)
>>> An exception happened while executing a system service routine.
>>> Arguments:
>>> Arg1: 00000000c0000005, Exception code that caused the bugcheck
>>> Arg2: fffff80002a8a7c5, Address of the instruction which caused the
>> bugcheck
>>> Arg3: fffff88001e86c00, Address of the context record for the exception
>> that caused the bugcheck
>>> Arg4: 0000000000000000, zero.
>>>
>>> Debugging Details:
>>> ------------------
>>>
>>>
>>> EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx
>> referenced memory at 0x%08lx. The memory could not be %s.
>>> FAULTING_IP:
>>> nt!ExpInterlockedPopEntrySListFault16+0
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>
>>> CONTEXT:  fffff88001e86c00 -- (.cxr 0xfffff88001e86c00;r)
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Last set context:
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Resetting default scope
>>>
>>> CUSTOMER_CRASH_COUNT:  1
>>>
>>> DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT
>>>
>>> BUGCHECK_STR:  0x3B
>>>
>>> PROCESS_NAME:  lsass.exe
>>>
>>> CURRENT_IRQL:  0
>>>
>>> ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) x86fre
>>>
>>> LAST_CONTROL_TRANSFER:  from 0000000000000000 to fffff80002a8a7c5
>>>
>>> STACK_TEXT:
>>> fffff880`01e875e0 00000000`00000000 : 00000000`00000000
>> 00000000`00000000 00000000`00000000 00000000`00000000 :
>> nt!ExpInterlockedPopEntrySListFault16
>>>
>>> FOLLOWUP_IP:
>>> nt!ExpInterlockedPopEntrySListFault16+0
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>
>>> SYMBOL_STACK_INDEX:  0
>>>
>>> SYMBOL_NAME:  nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> FOLLOWUP_NAME:  MachineOwner
>>>
>>> MODULE_NAME: nt
>>>
>>> IMAGE_NAME:  ntkrnlmp.exe
>>>
>>> DEBUG_FLR_IMAGE_TIMESTAMP:  556356e8
>>>
>>> IMAGE_VERSION:  6.1.7601.18869
>>>
>>> STACK_COMMAND:  .cxr 0xfffff88001e86c00 ; kb
>>>
>>> FAILURE_BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>
>>> ANALYSIS_SOURCE:  KM
>>>
>>> FAILURE_ID_HASH_STRING:
>> km:x64_0x3b_nt!expinterlockedpopentryslistfault16+0
>>> FAILURE_ID_HASH:  {b390bf2a-9c11-079f-34b0-5dffcabffe4b}
>>>
>>> Followup: MachineOwner
>>> ---------
>>>
>>> 0: kd> .cxr 0xfffff88001e86c00;r
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> Last set context:
>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>> r14=3D0000000000000000 r15=3D0000000000001000
>>> iopl=3D0         nv up ei pl nz na pe nc
>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053  gs=3D002b             efl=3D00010202
>>> nt!ExpInterlockedPopEntrySListFault16:
>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>> That's pretty strange. I'd say something is probably corrupt.
>> The corruption I saw for sure about disks are using btrfs as dom0 fs (in
>> rare cases) and with qcow2 overlay.
>> These tests are instead with ext4 and raw domUs disk.
>> About others corruptions (not only disks) I don't know.
> I'm just using a single layer qcow2.
>
>>>> I'm going crazy with these too many problems and haven't time to do all
>>>> useful tests :(
>>> Too many moving parts I'd say. I've been running with a  4.2-rc dom0
>> kernel, a Xen from about 3 weeks ago and upstream qemu from Xen's
>> upstream tag (again from about 3 weeks ago) and I'm not seeing any
>> problems. I do have a fairly standard config though; ide disks and std-vga
>> graphics.
>>>     Paul
>> About dom0 kernel, are you using build from a package o custom build=3F
>> Can be useful for me try kernel 4.2 instead=3F
>>
> I'm building my own. I'm on a wheezy base but 3.2 is much too old a kernel for me.
>
>    Paul

I tried with kernel 4.1.6 on dom0 built with make-kpkg with config from 
Sid (that use same version) except 2 small changes (in attachment), xen 
updated based on 4.6.0-rc3.
I did some tests and domUs with new pv drivers seems ok also without 
udev file (seems related to old dom0 kernels with new win pv drivers).
I also tried a qcow2 overlay for some hours without saw errors or leak 
on check (I'll keep tested further).
Persist the very strange thing of qemu's xen trace not working even if 
built with debug and domU's setting is the same.
I tried also to remove the new pv driver from a W10 domU (for install 
the new one), I removed them from control panel and I rebooted windows 
but on reboot it hang on windows start.
Nothing useful on qemu log, I did a xl destroy completed successfull but 
it didn't kill qemu.
The domU's xl cfg in attachment.
> cat /etc/xen/qemu-trace-options
> xen_platform_log


> xl list
> Name                                        ID   Mem VCPUs State   Time(s)
> Domain-0                                     0  2048     8 r-----     
> 799.0
> (null)                                       5   196     2 
> --p--d       4.8

In syslog I found this:
> Sep 10 15:53:27 testVS01OU kernel: [11777.639088] BUG: unable to 
> handle kernel paging request at ffff8800159b56c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.639133] IP: 
> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.639169] PGD 1810067 PUD 
> 1811067 PMD 7fe68067 PTE 80100000159b5065
> Sep 10 15:53:27 testVS01OU kernel: [11777.639210] Oops: 0003 [#1] SMP
> Sep 10 15:53:27 testVS01OU kernel: [11777.639229] Modules linked in: 
> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn 
> xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core 
> ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi nfsd 
> auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc bridge 
> stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button processor 
> wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 dm_mod sd_mod 
> sg sr_mod cdrom hid_generic ata_generic usbhid hid crc32c_intel 
> ata_piix libata ehci_pci ehci_hcd bnx2 usbcore usb_common mpt2sas 
> raid_class scsi_transport_sas scsi_mod
> Sep 10 15:53:27 testVS01OU kernel: [11777.639686] CPU: 2 PID: 5782 
> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
> Sep 10 15:53:27 testVS01OU kernel: [11777.639721] Hardware name: Dell 
> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
> Sep 10 15:53:27 testVS01OU kernel: [11777.639755] task: 
> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
> Sep 10 15:53:27 testVS01OU kernel: [11777.639787] RIP: 
> e030:[<ffffffff81069b7b>]  [<ffffffff81069b7b>] 
> ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.639830] RSP: 
> e02b:ffff88001d52fb08  EFLAGS: 00010202
> Sep 10 15:53:27 testVS01OU kernel: [11777.639855] RAX: 
> 0000000002020202 RBX: 0000000000000001 RCX: 8000000318bf2b67
> Sep 10 15:53:27 testVS01OU kernel: [11777.639887] RDX: 
> ffff8800159b56c0 RSI: 00007ffab42d8000 RDI: ffff8800040232f8
> Sep 10 15:53:27 testVS01OU kernel: [11777.639918] RBP: 
> ffffea0000566d70 R08: 0000000000000001 R09: 8000000318bf2b01
> Sep 10 15:53:27 testVS01OU kernel: [11777.639950] R10: 
> 0000000000007ff0 R11: ffff8800000006c0 R12: ffff88003260cd08
> Sep 10 15:53:27 testVS01OU kernel: [11777.639982] R13: 
> ffff8800040232f8 R14: ffff8800703f7480 R15: 0000000000000015
> Sep 10 15:53:27 testVS01OU kernel: [11777.640021] FS: 
> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.640058] CS:  e033 DS: 0000 
> ES: 0000 CR0: 000000008005003b
> Sep 10 15:53:27 testVS01OU kernel: [11777.640084] CR2: 
> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
> Sep 10 15:53:27 testVS01OU kernel: [11777.640113] Stack:
> Sep 10 15:53:27 testVS01OU kernel: [11777.640120] 00007ffab42d8000 
> ffffffff811927fd ffff880072dae350 ffff88007c88a2f0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640145] ffff88001d530000 
> ffff8800703f74e8 fffffffeffffffff ffff8800703f7500
> Sep 10 15:53:27 testVS01OU kernel: [11777.640169] 8000000318bf2327 
> ffff8800159b56c0 ffffffff815910cf ffff880072dae350
> Sep 10 15:53:27 testVS01OU kernel: [11777.640193] Call Trace:
> Sep 10 15:53:27 testVS01OU kernel: [11777.640207] [<ffffffff811927fd>] 
> =3F handle_mm_fault+0x28d/0x1700
> Sep 10 15:53:27 testVS01OU kernel: [11777.640226] [<ffffffff815910cf>] 
> =3F schedule+0x2f/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.640245] [<ffffffff812f8e24>] 
> =3F call_rwsem_down_read_failed+0x14/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.640266] [<ffffffff81064499>] 
> =3F __do_page_fault+0x1b9/0x510
> Sep 10 15:53:27 testVS01OU kernel: [11777.640285] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.640302] [<ffffffff812fe903>] 
> =3F copy_page_to_iter+0x83/0x320
> Sep 10 15:53:27 testVS01OU kernel: [11777.640321] [<ffffffff81166e20>] 
> =3F generic_file_read_iter+0x2c0/0x5c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640341] [<ffffffff8159491c>] 
> =3F _raw_spin_lock_irq+0xc/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.640360] [<ffffffff81212835>] 
> =3F fsnotify+0x335/0x4b0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640378] [<ffffffff811d302f>] 
> =3F __vfs_read+0xaf/0xe0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640395] [<ffffffff811d43ed>] 
> =3F vfs_read+0x8d/0x150
> Sep 10 15:53:27 testVS01OU kernel: [11777.640411] [<ffffffff811d46ab>] 
> =3F SyS_pread64+0x9b/0xb0
> Sep 10 15:53:27 testVS01OU kernel: [11777.640428] [<ffffffff81594eb2>] 
> =3F system_call_fastpath+0x16/0x75
> Sep 10 15:53:27 testVS01OU kernel: [11777.640446] Code: c4 18 e9 99 30 
> 10 00 66 0f 1f 84 00 00 00 00 00 66 66 66 66 90 53 48 3b 0a 41 0f 95 
> c1 45 85 c0 41 0f b6 d9 74 13 45 84 c9 74 0e <48> 89 0a 48 8b 7f 40 66 
> 66 66 90 66 66 90 89 d8 5b c3 0f 1f 00
> Sep 10 15:53:27 testVS01OU kernel: [11777.641970] RIP 
> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.642711]  RSP <ffff88001d52fb08>
> Sep 10 15:53:27 testVS01OU kernel: [11777.643450] CR2: ffff8800159b56c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.647305] ------------[ cut 
> here ]------------
> Sep 10 15:53:27 testVS01OU kernel: [11777.648042] kernel BUG at 
> arch/x86/mm/pageattr.c:214!
> Sep 10 15:53:27 testVS01OU kernel: [11777.648764] invalid opcode: 0000 
> [#2] SMP
> Sep 10 15:53:27 testVS01OU kernel: [11777.649483] Modules linked in: 
> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev xen_evtchn 
> xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad ib_core 
> ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi nfsd 
> auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc bridge 
> stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button processor 
> wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 dm_mod sd_mod 
> sg sr_mod cdrom hid_generic ata_generic usbhid hid crc32c_intel 
> ata_piix libata ehci_pci ehci_hcd bnx2 usbcore usb_common mpt2sas 
> raid_class scsi_transport_sas scsi_mod
> Sep 10 15:53:27 testVS01OU kernel: [11777.654889] CPU: 2 PID: 5782 
> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
> Sep 10 15:53:27 testVS01OU kernel: [11777.655624] Hardware name: Dell 
> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
> Sep 10 15:53:27 testVS01OU kernel: [11777.656353] task: 
> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
> Sep 10 15:53:27 testVS01OU kernel: [11777.657082] RIP: 
> e030:[<ffffffff8106749c>]  [<ffffffff8106749c>] 
> change_page_attr_set_clr+0x44c/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.657824] RSP: 
> e02b:ffff88001d52e9d8  EFLAGS: 00010046
> Sep 10 15:53:27 testVS01OU kernel: [11777.658552] RAX: 
> 201008001fc900f5 RBX: 0000000000000000 RCX: 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.659280] RDX: 
> 0000000000000000 RSI: 0000000000000000 RDI: ffff88001d52ea08
> Sep 10 15:53:27 testVS01OU kernel: [11777.660004] RBP: 
> 0000000000000000 R08: 0000000000000001 R09: ffff880000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.660724] R10: 
> 00000000deadbeef R11: 0000000000000000 R12: 0000000000000200
> Sep 10 15:53:27 testVS01OU kernel: [11777.661437] R13: 
> 0000000000000001 R14: 0000000000000000 R15: 0000000000000005
> Sep 10 15:53:27 testVS01OU kernel: [11777.662148] FS: 
> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.662863] CS:  e033 DS: 0000 
> ES: 0000 CR0: 000000008005003b
> Sep 10 15:53:27 testVS01OU kernel: [11777.663570] CR2: 
> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
> Sep 10 15:53:27 testVS01OU kernel: [11777.664280] Stack:
> Sep 10 15:53:27 testVS01OU kernel: [11777.665004] 0000000000000004 
> ffff880000000000 0000000000000000 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.665722] 0000001000000040 
> 0000000000000001 0000000000000000 0000000000000000
> Sep 10 15:53:27 testVS01OU kernel: [11777.666428] 0000000000000010 
> 0000000000000000 0000000500000001 000000000002348b
> Sep 10 15:53:27 testVS01OU kernel: [11777.667143] Call Trace:
> Sep 10 15:53:27 testVS01OU kernel: [11777.667834] [<ffffffff8106760f>] 
> =3F _set_pages_array+0xdf/0x130
> Sep 10 15:53:27 testVS01OU kernel: [11777.668534] [<ffffffffa036ef9e>] 
> =3F ttm_set_pages_caching+0x4e/0x80 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.669237] [<ffffffffa036f0d0>] 
> =3F ttm_alloc_new_pages.isra.5+0xb0/0x170 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.669952] [<ffffffffa036fb06>] 
> =3F ttm_pool_populate+0x3c6/0x4c0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.670656] [<ffffffffa036c262>] 
> =3F ttm_bo_move_memcpy+0x582/0x620 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.671355] [<ffffffff811a2558>] 
> =3F __vmalloc_node_range+0x198/0x2a0
> Sep 10 15:53:27 testVS01OU kernel: [11777.672057] [<ffffffffa0369c77>] 
> =3F ttm_bo_handle_move_mem+0x267/0x5e0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.672763] [<ffffffff810052f9>] 
> =3F __raw_callee_save_xen_pmd_val+0x11/0x1e
> Sep 10 15:53:27 testVS01OU kernel: [11777.673472] [<ffffffffa036a8bb>] 
> =3F ttm_bo_mem_space+0xeb/0x360 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.674182] [<ffffffffa036ad0f>] 
> =3F ttm_bo_validate+0x1df/0x1f0 [ttm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.674886] [<ffffffff8119fdfa>] 
> =3F lazy_max_pages+0x1a/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.675592] [<ffffffff811a095d>] 
> =3F free_vmap_area_noflush+0x2d/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.676305] [<ffffffffa0354b72>] 
> =3F mgag200_bo_push_sysram+0x82/0xc0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.677025] [<ffffffffa034f9c1>] 
> =3F mga_crtc_do_set_base.isra.8.constprop.20+0x81/0x3f0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.677755] [<ffffffff813221c8>] 
> =3F pci_bus_write_config_dword+0x78/0x90
> Sep 10 15:53:27 testVS01OU kernel: [11777.678471] [<ffffffffa03511ca>] 
> =3F mga_crtc_mode_set+0x149a/0x25d0 [mgag200]
> Sep 10 15:53:27 testVS01OU kernel: [11777.679178] [<ffffffff812eb827>] 
> =3F idr_get_empty_slot+0x187/0x3e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.679872] [<ffffffff812eb427>] 
> =3F idr_mark_full+0x57/0x70
> Sep 10 15:53:27 testVS01OU kernel: [11777.680562] [<ffffffff812ebd66>] 
> =3F idr_alloc+0x76/0xd0
> Sep 10 15:53:27 testVS01OU kernel: [11777.681251] [<ffffffffa0388939>] 
> =3F drm_crtc_helper_set_mode+0x309/0x540 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.681954] [<ffffffffa0389969>] 
> =3F drm_crtc_helper_set_config+0x8d9/0xb00 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.682654] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.683358] [<ffffffffa0317998>] 
> =3F drm_mode_set_config_internal+0x68/0x100 [drm]
> Sep 10 15:53:27 testVS01OU kernel: [11777.684050] [<ffffffffa03947cf>] 
> =3F drm_fb_helper_pan_display+0x9f/0xe0 [drm_kms_helper]
> Sep 10 15:53:27 testVS01OU kernel: [11777.684726] [<ffffffff8135ba81>] 
> =3F fb_pan_display+0xc1/0x180
> Sep 10 15:53:27 testVS01OU kernel: [11777.685384] [<ffffffff81356166>] 
> =3F bit_update_start+0x26/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.686021] [<ffffffff81355b01>] 
> =3F fbcon_switch+0x391/0x540
> Sep 10 15:53:27 testVS01OU kernel: [11777.686641] [<ffffffff813cd31f>] 
> =3F redraw_screen+0x15f/0x240
> Sep 10 15:53:27 testVS01OU kernel: [11777.687240] [<ffffffff813542aa>] 
> =3F fbcon_blank+0x23a/0x2f0
> Sep 10 15:53:27 testVS01OU kernel: [11777.687819] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.688391] [<ffffffff810c923e>] 
> =3F console_unlock+0x1ee/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.688956] [<ffffffff81150919>] 
> =3F irq_work_queue+0x9/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.689510] [<ffffffff810c9042>] 
> =3F wake_up_klogd+0x32/0x40
> Sep 10 15:53:27 testVS01OU kernel: [11777.690054] [<ffffffff810c9dd0>] 
> =3F vprintk_emit+0x2b0/0x4e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.690584] [<ffffffff81594af7>] 
> =3F _raw_spin_lock_irqsave+0x17/0x70
> Sep 10 15:53:27 testVS01OU kernel: [11777.691112] [<ffffffff810da4e6>] 
> =3F internal_add_timer+0x36/0xa0
> Sep 10 15:53:27 testVS01OU kernel: [11777.691639] [<ffffffff81594b9c>] 
> =3F _raw_spin_unlock_irqrestore+0x1c/0x50
> Sep 10 15:53:27 testVS01OU kernel: [11777.692173] [<ffffffff810dc7d4>] 
> =3F mod_timer+0x154/0x1d0
> Sep 10 15:53:27 testVS01OU kernel: [11777.692708] [<ffffffff813cde81>] 
> =3F do_unblank_screen+0xb1/0x1e0
> Sep 10 15:53:27 testVS01OU kernel: [11777.693247] [<ffffffff812fa209>] 
> =3F bust_spinlocks+0x19/0x40
> Sep 10 15:53:27 testVS01OU kernel: [11777.693779] [<ffffffff810196a1>] 
> =3F oops_end+0x41/0x120
> Sep 10 15:53:27 testVS01OU kernel: [11777.694304] [<ffffffff8158b86d>] 
> =3F no_context+0x2fc/0x336
> Sep 10 15:53:27 testVS01OU kernel: [11777.694821] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.695330] [<ffffffff81069b7b>] 
> =3F ptep_set_access_flags+0x1b/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.695834] [<ffffffff811927fd>] 
> =3F handle_mm_fault+0x28d/0x1700
> Sep 10 15:53:27 testVS01OU kernel: [11777.696343] [<ffffffff815910cf>] 
> =3F schedule+0x2f/0x80
> Sep 10 15:53:27 testVS01OU kernel: [11777.696854] [<ffffffff812f8e24>] 
> =3F call_rwsem_down_read_failed+0x14/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.697363] [<ffffffff81064499>] 
> =3F __do_page_fault+0x1b9/0x510
> Sep 10 15:53:27 testVS01OU kernel: [11777.697896] [<ffffffff81596e58>] 
> =3F page_fault+0x28/0x30
> Sep 10 15:53:27 testVS01OU kernel: [11777.698398] [<ffffffff812fe903>] 
> =3F copy_page_to_iter+0x83/0x320
> Sep 10 15:53:27 testVS01OU kernel: [11777.698901] [<ffffffff81166e20>] 
> =3F generic_file_read_iter+0x2c0/0x5c0
> Sep 10 15:53:27 testVS01OU kernel: [11777.699407] [<ffffffff8159491c>] 
> =3F _raw_spin_lock_irq+0xc/0x60
> Sep 10 15:53:27 testVS01OU kernel: [11777.699910] [<ffffffff81212835>] 
> =3F fsnotify+0x335/0x4b0
> Sep 10 15:53:27 testVS01OU kernel: [11777.700411] [<ffffffff811d302f>] 
> =3F __vfs_read+0xaf/0xe0
> Sep 10 15:53:27 testVS01OU kernel: [11777.700904] [<ffffffff811d43ed>] 
> =3F vfs_read+0x8d/0x150
> Sep 10 15:53:27 testVS01OU kernel: [11777.701393] [<ffffffff811d46ab>] 
> =3F SyS_pread64+0x9b/0xb0
> Sep 10 15:53:27 testVS01OU kernel: [11777.701877] [<ffffffff81594eb2>] 
> =3F system_call_fastpath+0x16/0x75
> Sep 10 15:53:27 testVS01OU kernel: [11777.702365] Code: f7 00 00 e9 25 
> ff ff ff 0f 0b 4c 89 e8 49 c1 ed 05 48 c1 e8 03 83 e0 03 4c 09 e8 80 
> b8 44 c9 82 81 00 41 0f 95 c5 e9 19 fd ff ff <0f> 0b 0f 0b 66 66 66 66 
> 90 41 55 45 31 c0 31 d2 41 b9 04 00 00
> Sep 10 15:53:27 testVS01OU kernel: [11777.703486] RIP 
> [<ffffffff8106749c>] change_page_attr_set_clr+0x44c/0x450
> Sep 10 15:53:27 testVS01OU kernel: [11777.704013]  RSP <ffff88001d52e9d8>
> Sep 10 15:53:27 testVS01OU kernel: [11777.704528] ---[ end trace 
> 0371e8f24f53a075 ]---

If you need other informations/tests tell me and I'll post them.
Any help is appreciated.

Thanks for any reply and sorry for my bad english.

--------------000909010101030501040802
Content-Type: text/plain; charset=UTF-8;
 name=".config"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=".config"

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4
L3g4NiA0LjEuNiBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR182NEJJVD15CkNPTkZJ
R19YODZfNjQ9eQpDT05GSUdfWDg2PXkKQ09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpD
T05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFPXkKQ09ORklHX09VVFBVVF9GT1JNQVQ9
ImVsZjY0LXg4Ni02NCIKQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdz
L3g4Nl82NF9kZWZjb25maWciCkNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpDT05GSUdfU1RB
Q0tUUkFDRV9TVVBQT1JUPXkKQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQ09O
RklHX01NVT15CkNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQpDT05GSUdfTkVFRF9TR19E
TUFfTEVOR1RIPXkKQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0JV
Rz15CkNPTkZJR19HRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUz15CkNPTkZJR19HRU5F
UklDX0hXRUlHSFQ9eQpDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQpDT05GSUdfUldT
RU1fWENIR0FERF9BTEdPUklUSE09eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9
eQpDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJ
TkVfU0laRT15CkNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CkNPTkZJR19ORUVE
X1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0Vf
RklSU1RfQ0hVTks9eQpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CkNPTkZJ
R19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0hVR0VfUE1EX1NI
QVJFPXkKQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEI9eQpDT05GSUdfWk9ORV9E
TUEzMj15CkNPTkZJR19BVURJVF9BUkNIPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1J
WkVEX0lOTElOSU5HPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkK
Q09ORklHX0hBVkVfSU5URUxfVFhUPXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfWDg2
X0hUPXkKQ09ORklHX0FSQ0hfSFdFSUdIVF9DRkxBR1M9Ii1mY2FsbC1zYXZlZC1yZGkgLWZj
YWxsLXNhdmVkLXJzaSAtZmNhbGwtc2F2ZWQtcmR4IC1mY2FsbC1zYXZlZC1yY3ggLWZjYWxs
LXNhdmVkLXI4IC1mY2FsbC1zYXZlZC1yOSAtZmNhbGwtc2F2ZWQtcjEwIC1mY2FsbC1zYXZl
ZC1yMTEiCkNPTkZJR19BUkNIX1NVUFBPUlRTX1VQUk9CRVM9eQpDT05GSUdfRklYX0VBUkxZ
Q09OX01FTT15CkNPTkZJR19QR1RBQkxFX0xFVkVMUz00CkNPTkZJR19ERUZDT05GSUdfTElT
VD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkNPTkZJR19JUlFfV09S
Sz15CkNPTkZJR19CVUlMRFRJTUVfRVhUQUJMRV9TT1JUPXkKCiMKIyBHZW5lcmFsIHNldHVw
CiMKQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgpDT05GSUdfQ1JPU1NfQ09NUElMRT0i
IgojIENPTkZJR19DT01QSUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfTE9DQUxWRVJTSU9O
PSIiCiMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVf
S0VSTkVMX0daSVA9eQpDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQpDT05GSUdfSEFWRV9L
RVJORUxfTFpNQT15CkNPTkZJR19IQVZFX0tFUk5FTF9YWj15CkNPTkZJR19IQVZFX0tFUk5F
TF9MWk89eQpDT05GSUdfSEFWRV9LRVJORUxfTFo0PXkKIyBDT05GSUdfS0VSTkVMX0daSVAg
aXMgbm90IHNldAojIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAojIENPTkZJR19L
RVJORUxfTFpNQSBpcyBub3Qgc2V0CkNPTkZJR19LRVJORUxfWFo9eQojIENPTkZJR19LRVJO
RUxfTFpPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xaNCBpcyBub3Qgc2V0CkNPTkZJ
R19ERUZBVUxUX0hPU1ROQU1FPSIobm9uZSkiCkNPTkZJR19TV0FQPXkKQ09ORklHX1NZU1ZJ
UEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09O
RklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQpDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSD15
CkNPTkZJR19GSEFORExFPXkKQ09ORklHX1VTRUxJQj15CkNPTkZJR19BVURJVD15CkNPTkZJ
R19IQVZFX0FSQ0hfQVVESVRTWVNDQUxMPXkKQ09ORklHX0FVRElUU1lTQ0FMTD15CkNPTkZJ
R19BVURJVF9XQVRDSD15CkNPTkZJR19BVURJVF9UUkVFPXkKCiMKIyBJUlEgc3Vic3lzdGVt
CiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9
eQpDT05GSUdfR0VORVJJQ19JUlFfTEVHQUNZX0FMTE9DX0hXSVJRPXkKQ09ORklHX0dFTkVS
SUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfQ0hJUD15CkNPTkZJR19JUlFf
RE9NQUlOPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CiMgQ09ORklHX0lSUV9ET01BSU5f
REVCVUcgaXMgbm90IHNldApDT05GSUdfSVJRX0ZPUkNFRF9USFJFQURJTkc9eQpDT05GSUdf
U1BBUlNFX0lSUT15CkNPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRz15CkNPTkZJR19BUkNI
X0NMT0NLU09VUkNFX0RBVEE9eQpDT05GSUdfQ0xPQ0tTT1VSQ0VfVkFMSURBVEVfTEFTVF9D
WUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQpDT05GSUdfR0VORVJJQ19D
TE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVD15CkNP
TkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05GSUdfR0VORVJJQ19D
TU9TX1VQREFURT15CgojCiMgVGltZXJzIHN1YnN5c3RlbQojCkNPTkZJR19USUNLX09ORVNI
T1Q9eQpDT05GSUdfTk9fSFpfQ09NTU9OPXkKIyBDT05GSUdfSFpfUEVSSU9ESUMgaXMgbm90
IHNldApDT05GSUdfTk9fSFpfSURMRT15CiMgQ09ORklHX05PX0haX0ZVTEwgaXMgbm90IHNl
dAojIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkNPTkZJR19ISUdIX1JFU19USU1FUlM9eQoK
IwojIENQVS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElDS19D
UFVfQUNDT1VOVElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19C
U0RfUFJPQ0VTU19BQ0NUPXkKQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQpDT05GSUdf
VEFTS1NUQVRTPXkKQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CkNPTkZJR19UQVNLX1hBQ0NU
PXkKQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNP
TkZJR19UUkVFX1JDVT15CkNPTkZJR19TUkNVPXkKIyBDT05GSUdfVEFTS1NfUkNVIGlzIG5v
dCBzZXQKQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQojIENPTkZJR19SQ1VfVVNFUl9RUyBp
cyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFOT1VUPTY0CkNPTkZJR19SQ1VfRkFOT1VUX0xFQUY9
MTYKIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFT
VF9OT19IWj15CiMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9LVEhSRUFEX1BSSU89MAojIENPTkZJR19SQ1VfTk9DQl9DUFUgaXMgbm90IHNldAojIENP
TkZJR19SQ1VfRVhQRURJVEVfQk9PVCBpcyBub3Qgc2V0CkNPTkZJR19CVUlMRF9CSU4yQz15
CiMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcK
Q09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0xMgpDT05GSUdfSEFWRV9VTlNUQUJMRV9T
Q0hFRF9DTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HPXkKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4PXkKQ09ORklHX05VTUFfQkFMQU5DSU5HPXkKIyBD
T05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEIGlzIG5vdCBzZXQKQ09ORklH
X0NHUk9VUFM9eQojIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldApDT05GSUdfQ0dS
T1VQX0ZSRUVaRVI9eQpDT05GSUdfQ0dST1VQX0RFVklDRT15CkNPTkZJR19DUFVTRVRTPXkK
Q09ORklHX1BST0NfUElEX0NQVVNFVD15CkNPTkZJR19DR1JPVVBfQ1BVQUNDVD15CkNPTkZJ
R19QQUdFX0NPVU5URVI9eQpDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfU1dBUD15CiMg
Q09ORklHX01FTUNHX1NXQVBfRU5BQkxFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTUNHX0tN
RU0gaXMgbm90IHNldAojIENPTkZJR19DR1JPVVBfSFVHRVRMQiBpcyBub3Qgc2V0CkNPTkZJ
R19DR1JPVVBfUEVSRj15CkNPTkZJR19DR1JPVVBfU0NIRUQ9eQpDT05GSUdfRkFJUl9HUk9V
UF9TQ0hFRD15CiMgQ09ORklHX0NGU19CQU5EV0lEVEggaXMgbm90IHNldAojIENPTkZJR19S
VF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfQ0dST1VQPXkKIyBDT05GSUdf
REVCVUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkU9
eQpDT05GSUdfTkFNRVNQQUNFUz15CkNPTkZJR19VVFNfTlM9eQpDT05GSUdfSVBDX05TPXkK
Q09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05TPXkKQ09ORklHX05FVF9OUz15CkNPTkZJ
R19TQ0hFRF9BVVRPR1JPVVA9eQojIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBz
ZXQKQ09ORklHX1JFTEFZPXkKQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQ09ORklHX0lOSVRS
QU1GU19TT1VSQ0U9IiIKQ09ORklHX1JEX0daSVA9eQpDT05GSUdfUkRfQlpJUDI9eQpDT05G
SUdfUkRfTFpNQT15CkNPTkZJR19SRF9YWj15CkNPTkZJR19SRF9MWk89eQpDT05GSUdfUkRf
TFo0PXkKIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApDT05GSUdf
U1lTQ1RMPXkKQ09ORklHX0FOT05fSU5PREVTPXkKQ09ORklHX0hBVkVfVUlEMTY9eQpDT05G
SUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CUEY9eQpDT05GSUdfRVhQRVJUPXkKQ09ORklHX1VJRDE2PXkKQ09ORklH
X01VTFRJVVNFUj15CkNPTkZJR19TR0VUTUFTS19TWVNDQUxMPXkKQ09ORklHX1NZU0ZTX1NZ
U0NBTEw9eQojIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkNPTkZJR19LQUxM
U1lNUz15CiMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19QUklOVEs9
eQpDT05GSUdfQlVHPXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CQVNFX0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKIyBD
T05GSUdfQlBGX1NZU0NBTEwgaXMgbm90IHNldApDT05GSUdfU0hNRU09eQpDT05GSUdfQUlP
PXkKQ09ORklHX0FEVklTRV9TWVNDQUxMUz15CkNPTkZJR19QQ0lfUVVJUktTPXkKIyBDT05G
SUdfRU1CRURERUQgaXMgbm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CgojCiMg
S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdfUEVSRl9F
VkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKQ09O
RklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0
CkNPTkZJR19TTEFCPXkKIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiMgQ09ORklHX1NMT0Ig
aXMgbm90IHNldAojIENPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlSSU5HIGlzIG5vdCBzZXQK
Q09ORklHX1BST0ZJTElORz15CkNPTkZJR19UUkFDRVBPSU5UUz15CkNPTkZJR19PUFJPRklM
RT1tCiMgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWCBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX09QUk9GSUxFPXkKQ09ORklHX09QUk9GSUxFX05NSV9USU1FUj15CkNPTkZJR19L
UFJPQkVTPXkKQ09ORklHX0pVTVBfTEFCRUw9eQpDT05GSUdfT1BUUFJPQkVTPXkKQ09ORklH
X0tQUk9CRVNfT05fRlRSQUNFPXkKQ09ORklHX1VQUk9CRVM9eQojIENPTkZJR19IQVZFXzY0
QklUX0FMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VO
QUxJR05FRF9BQ0NFU1M9eQpDT05GSUdfQVJDSF9VU0VfQlVJTFRJTl9CU1dBUD15CkNPTkZJ
R19LUkVUUFJPQkVTPXkKQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSPXkKQ09ORklHX0hB
VkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JFUz15CkNPTkZJR19IQVZFX0tS
RVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05GSUdfSEFWRV9LUFJPQkVT
X09OX0ZUUkFDRT15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKQ09ORklHX0hBVkVf
RE1BX0FUVFJTPXkKQ09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJ
Q19TTVBfSURMRV9USFJFQUQ9eQpDT05GSUdfSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1Nf
QVBJPXkKQ09ORklHX0hBVkVfQ0xLPXkKQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CkNP
TkZJR19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5U
U19SRUdTPXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFW
RV9QRVJGX0VWRU5UU19OTUk9eQpDT05GSUdfSEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFW
RV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15
CkNPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRz15CkNPTkZJR19IQVZFX0NNUFhD
SEdfTE9DQUw9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0RPVUJMRT15CkNPTkZJR19BUkNIX1dB
TlRfQ09NUEFUX0lQQ19QQVJTRV9WRVJTSU9OPXkKQ09ORklHX0FSQ0hfV0FOVF9PTERfQ09N
UEFUX0lQQz15CkNPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVI9eQpDT05GSUdfU0VD
Q09NUF9GSUxURVI9eQpDT05GSUdfSEFWRV9DQ19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19D
Q19TVEFDS1BST1RFQ1RPUj15CiMgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX05PTkUgaXMg
bm90IHNldApDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfUkVHVUxBUj15CiMgQ09ORklHX0ND
X1NUQUNLUFJPVEVDVE9SX1NUUk9ORyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0NPTlRFWFRf
VFJBQ0tJTkc9eQpDT05GSUdfSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTj15CkNPTkZJ
R19IQVZFX0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFS
RU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVA9eQpDT05GSUdfSEFW
RV9BUkNIX1NPRlRfRElSVFk9eQpDT05GSUdfTU9EVUxFU19VU0VfRUxGX1JFTEE9eQpDT05G
SUdfSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0s9eQpDT05GSUdfQVJDSF9IQVNfRUxGX1JB
TkRPTUlaRT15CkNPTkZJR19PTERfU0lHU1VTUEVORDM9eQpDT05GSUdfQ09NUEFUX09MRF9T
SUdBQ1RJT049eQoKIwojIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwojCiMgQ09ORklH
X0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFTX0dDT1ZfUFJPRklMRV9B
TEw9eQojIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKQ09O
RklHX1NMQUJJTkZPPXkKQ09ORklHX1JUX01VVEVYRVM9eQpDT05GSUdfQkFTRV9TTUFMTD0w
CkNPTkZJR19NT0RVTEVTPXkKQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKQ09ORklHX01P
RFVMRV9VTkxPQUQ9eQpDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CkNPTkZJR19NT0RW
RVJTSU9OUz15CiMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PRFVMRV9TSUcgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQ09NUFJFU1Mg
aXMgbm90IHNldApDT05GSUdfU1RPUF9NQUNISU5FPXkKQ09ORklHX0JMT0NLPXkKQ09ORklH
X0JMS19ERVZfQlNHPXkKQ09ORklHX0JMS19ERVZfQlNHTElCPXkKQ09ORklHX0JMS19ERVZf
SU5URUdSSVRZPXkKQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiMgQ09ORklHX0JMS19D
TURMSU5FX1BBUlNFUiBpcyBub3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKQ09ORklH
X1BBUlRJVElPTl9BRFZBTkNFRD15CkNPTkZJR19BQ09STl9QQVJUSVRJT049eQojIENPTkZJ
R19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNPUk5fUEFS
VElUSU9OX0VFU09YIGlzIG5vdCBzZXQKQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQoj
IENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDT1JO
X1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CkNPTkZJR19BQ09STl9QQVJUSVRJT05f
UklTQ0lYPXkKIyBDT05GSUdfQUlYX1BBUlRJVElPTiBpcyBub3Qgc2V0CkNPTkZJR19PU0Zf
UEFSVElUSU9OPXkKQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CkNPTkZJR19BVEFSSV9QQVJU
SVRJT049eQpDT05GSUdfTUFDX1BBUlRJVElPTj15CkNPTkZJR19NU0RPU19QQVJUSVRJT049
eQpDT05GSUdfQlNEX0RJU0tMQUJFTD15CkNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQpD
T05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJF
TD15CkNPTkZJR19MRE1fUEFSVElUSU9OPXkKIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX1NHSV9QQVJUSVRJT049eQpDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CkNP
TkZJR19TVU5fUEFSVElUSU9OPXkKQ09ORklHX0tBUk1BX1BBUlRJVElPTj15CkNPTkZJR19F
RklfUEFSVElUSU9OPXkKIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NNRExJTkVfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0JMT0NLX0NPTVBB
VD15CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19JT1NDSEVEX05PT1A9eQpDT05GSUdf
SU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19JT1NDSEVEX0NGUT15CkNPTkZJR19DRlFfR1JP
VVBfSU9TQ0hFRD15CiMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9DRlE9eQojIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCkNPTkZJR19QUkVFTVBUX05PVElGSUVSUz15CkNP
TkZJR19QQURBVEE9eQpDT05GSUdfVU5JTkxJTkVfU1BJTl9VTkxPQ0s9eQpDT05GSUdfSU5M
SU5FX1NQSU5fVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQpDT05G
SUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NL
PXkKQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKQ09ORklHX0FSQ0hfU1VQUE9S
VFNfQVRPTUlDX1JNVz15CkNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKQ09ORklHX1JX
U0VNX1NQSU5fT05fT1dORVI9eQpDT05GSUdfTE9DS19TUElOX09OX09XTkVSPXkKQ09ORklH
X0FSQ0hfVVNFX1FVRVVFX1JXTE9DSz15CkNPTkZJR19RVUVVRV9SV0xPQ0s9eQpDT05GSUdf
RlJFRVpFUj15CgojCiMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiMKQ09ORklHX1pP
TkVfRE1BPXkKQ09ORklHX1NNUD15CkNPTkZJR19YODZfRkVBVFVSRV9OQU1FUz15CkNPTkZJ
R19YODZfWDJBUElDPXkKQ09ORklHX1g4Nl9NUFBBUlNFPXkKIyBDT05GSUdfWDg2X0VYVEVO
REVEX1BMQVRGT1JNIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9MUFNTPXkKIyBDT05G
SUdfWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UgaXMgbm90IHNldApDT05GSUdfSU9TRl9NQkk9
bQojIENPTkZJR19JT1NGX01CSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19YODZfU1VQUE9S
VFNfTUVNT1JZX0ZBSUxVUkU9eQpDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkK
Q09ORklHX0hZUEVSVklTT1JfR1VFU1Q9eQpDT05GSUdfUEFSQVZJUlQ9eQojIENPTkZJR19Q
QVJBVklSVF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpD
T05GSUdfWEVOPXkKQ09ORklHX1hFTl9ET00wPXkKQ09ORklHX1hFTl9QVkhWTT15CkNPTkZJ
R19YRU5fTUFYX0RPTUFJTl9NRU1PUlk9NTAwCkNPTkZJR19YRU5fU0FWRV9SRVNUT1JFPXkK
IyBDT05GSUdfWEVOX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9QVkg9eQpDT05G
SUdfS1ZNX0dVRVNUPXkKIyBDT05GSUdfS1ZNX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklHX1BBUkFWSVJU
X0NMT0NLPXkKQ09ORklHX05PX0JPT1RNRU09eQojIENPTkZJR19NSzggaXMgbm90IHNldAoj
IENPTkZJR19NUFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNPUkUyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUFUT00gaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFU9eQpDT05GSUdfWDg2
X0lOVEVSTk9ERV9DQUNIRV9TSElGVD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpD
T05GSUdfWDg2X1RTQz15CkNPTkZJR19YODZfQ01QWENIRzY0PXkKQ09ORklHX1g4Nl9DTU9W
PXkKQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKQ09ORklHX1g4Nl9ERUJVR0NU
TE1TUj15CiMgQ09ORklHX1BST0NFU1NPUl9TRUxFQ1QgaXMgbm90IHNldApDT05GSUdfQ1BV
X1NVUF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CkNPTkZJR19DUFVfU1VQX0NFTlRB
VVI9eQpDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VNVUxBVEVfUlRDPXkKQ09O
RklHX0RNST15CkNPTkZJR19HQVJUX0lPTU1VPXkKQ09ORklHX0NBTEdBUllfSU9NTVU9eQpD
T05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQpDT05GSUdfU1dJT1RM
Qj15CkNPTkZJR19JT01NVV9IRUxQRVI9eQojIENPTkZJR19NQVhTTVAgaXMgbm90IHNldApD
T05GSUdfTlJfQ1BVUz01MTIKQ09ORklHX1NDSEVEX1NNVD15CkNPTkZJR19TQ0hFRF9NQz15
CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNPTkZJR19QUkVFTVBUX1ZPTFVO
VEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05GSUdfWDg2X0xPQ0FMX0FQ
SUM9eQpDT05GSUdfWDg2X0lPX0FQSUM9eQpDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tF
Tl9CT09UX0lSUVM9eQpDT05GSUdfWDg2X01DRT15CkNPTkZJR19YODZfTUNFX0lOVEVMPXkK
Q09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKQ09ORklH
X1g4Nl9NQ0VfSU5KRUNUPW0KQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUj15CkNPTkZJR19Y
ODZfMTZCSVQ9eQpDT05GSUdfWDg2X0VTUEZJWDY0PXkKQ09ORklHX1g4Nl9WU1lTQ0FMTF9F
TVVMQVRJT049eQpDT05GSUdfSThLPW0KQ09ORklHX01JQ1JPQ09ERT15CkNPTkZJR19NSUNS
T0NPREVfSU5URUw9eQpDT05GSUdfTUlDUk9DT0RFX0FNRD15CkNPTkZJR19NSUNST0NPREVf
T0xEX0lOVEVSRkFDRT15CkNPTkZJR19NSUNST0NPREVfSU5URUxfRUFSTFk9eQpDT05GSUdf
TUlDUk9DT0RFX0FNRF9FQVJMWT15CkNPTkZJR19NSUNST0NPREVfRUFSTFk9eQpDT05GSUdf
WDg2X01TUj1tCkNPTkZJR19YODZfQ1BVSUQ9bQpDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82
NEJJVD15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpDT05GSUdfWDg2X0RJUkVD
VF9HQlBBR0VTPXkKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2
XzY0X0FDUElfTlVNQT15CkNPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKQ09ORklH
X05VTUFfRU1VPXkKQ09ORklHX05PREVTX1NISUZUPTYKQ09ORklHX0FSQ0hfU1BBUlNFTUVN
X0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQ09ORklHX0FSQ0hf
U0VMRUNUX01FTU9SWV9NT0RFTD15CiMgQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFIGlzIG5v
dCBzZXQKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9J
TlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKQ09ORklHX1NFTEVDVF9NRU1PUllfTU9E
RUw9eQpDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CkNPTkZJR19TUEFSU0VNRU09eQpDT05G
SUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CkNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkK
Q09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VO
QUJMRT15CkNPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUj15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19IQVZFX01FTUJMT0NLPXkKQ09ORklHX0hB
VkVfTUVNQkxPQ0tfTk9ERV9NQVA9eQpDT05GSUdfQVJDSF9ESVNDQVJEX01FTUJMT0NLPXkK
Q09ORklHX01FTU9SWV9JU09MQVRJT049eQojIENPTkZJR19NT1ZBQkxFX05PREUgaXMgbm90
IHNldApDT05GSUdfSEFWRV9CT09UTUVNX0lORk9fTk9ERT15CkNPTkZJR19NRU1PUllfSE9U
UExVRz15CkNPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQpDT05GSUdfTUVNT1JZX0hP
VFJFTU9WRT15CkNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQpDT05GSUdfU1BMSVRfUFRM
T0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19NRU1PUllfQkFMTE9PTj15CkNPTkZJR19CQUxMT09OX0NPTVBBQ1RJT049eQpDT05GSUdf
Q09NUEFDVElPTj15CkNPTkZJR19NSUdSQVRJT049eQpDT05GSUdfQVJDSF9FTkFCTEVfSFVH
RVBBR0VfTUlHUkFUSU9OPXkKQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQ09ORklHX1pP
TkVfRE1BX0ZMQUc9MQpDT05GSUdfQk9VTkNFPXkKQ09ORklHX1ZJUlRfVE9fQlVTPXkKQ09O
RklHX01NVV9OT1RJRklFUj15CkNPTkZJR19LU009eQpDT05GSUdfREVGQVVMVF9NTUFQX01J
Tl9BRERSPTY1NTM2CkNPTkZJR19BUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFPXkKQ09O
RklHX01FTU9SWV9GQUlMVVJFPXkKQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tCkNPTkZJR19U
UkFOU1BBUkVOVF9IVUdFUEFHRT15CiMgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FM
V0FZUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFPXkK
IyBDT05GSUdfQ0xFQU5DQUNIRSBpcyBub3Qgc2V0CkNPTkZJR19GUk9OVFNXQVA9eQojIENP
TkZJR19DTUEgaXMgbm90IHNldApDT05GSUdfTUVNX1NPRlRfRElSVFk9eQpDT05GSUdfWlNX
QVA9eQpDT05GSUdfWlBPT0w9eQpDT05GSUdfWkJVRD1tCkNPTkZJR19aU01BTExPQz1tCiMg
Q09ORklHX1BHVEFCTEVfTUFQUElORyBpcyBub3Qgc2V0CiMgQ09ORklHX1pTTUFMTE9DX1NU
QVQgaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKQ09ORklHX1g4
Nl9QTUVNX0xFR0FDWT15CiMgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04gaXMg
bm90IHNldApDT05GSUdfWDg2X1JFU0VSVkVfTE9XPTY0CkNPTkZJR19NVFJSPXkKQ09ORklH
X01UUlJfU0FOSVRJWkVSPXkKQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxU
PTAKQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUPTEKQ09ORklH
X1g4Nl9QQVQ9eQpDT05GSUdfQVJDSF9VU0VTX1BHX1VOQ0FDSEVEPXkKQ09ORklHX0FSQ0hf
UkFORE9NPXkKQ09ORklHX1g4Nl9TTUFQPXkKIyBDT05GSUdfWDg2X0lOVEVMX01QWCBpcyBu
b3Qgc2V0CkNPTkZJR19FRkk9eQpDT05GSUdfRUZJX1NUVUI9eQpDT05GSUdfRUZJX01JWEVE
PXkKQ09ORklHX1NFQ0NPTVA9eQojIENPTkZJR19IWl8xMDAgaXMgbm90IHNldApDT05GSUdf
SFpfMjUwPXkKIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSFpfMTAwMCBp
cyBub3Qgc2V0CkNPTkZJR19IWj0yNTAKQ09ORklHX1NDSEVEX0hSVElDSz15CkNPTkZJR19L
RVhFQz15CkNPTkZJR19DUkFTSF9EVU1QPXkKIyBDT05GSUdfS0VYRUNfSlVNUCBpcyBub3Qg
c2V0CkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKQ09ORklHX1JFTE9DQVRBQkxF
PXkKIyBDT05GSUdfUkFORE9NSVpFX0JBU0UgaXMgbm90IHNldApDT05GSUdfUEhZU0lDQUxf
QUxJR049MHgyMDAwMDAKQ09ORklHX0hPVFBMVUdfQ1BVPXkKIyBDT05GSUdfQk9PVFBBUkFN
X0hPVFBMVUdfQ1BVMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0hPVFBMVUdfQ1BVMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ01E
TElORV9CT09MIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTElWRVBBVENIPXkKQ09ORklHX0FS
Q0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9I
T1RSRU1PVkU9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9eQoKIwojIFBvd2Vy
IG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwojCkNPTkZJR19BUkNIX0hJQkVSTkFUSU9O
X0hFQURFUj15CkNPTkZJR19TVVNQRU5EPXkKQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CkNP
TkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTPXkKQ09ORklHX0hJQkVSTkFUSU9OPXkKQ09ORklH
X1BNX1NURF9QQVJUSVRJT049IiIKQ09ORklHX1BNX1NMRUVQPXkKQ09ORklHX1BNX1NMRUVQ
X1NNUD15CiMgQ09ORklHX1BNX0FVVE9TTEVFUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNX1dB
S0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9ERUJVRz15CkNPTkZJ
R19QTV9BRFZBTkNFRF9ERUJVRz15CiMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qg
c2V0CkNPTkZJR19QTV9TTEVFUF9ERUJVRz15CiMgQ09ORklHX0RQTV9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1BNX1RSQUNFX1JUQyBpcyBub3Qgc2V0CkNPTkZJR19QTV9DTEs9
eQojIENPTkZJR19XUV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CkNPTkZJ
R19BQ1BJPXkKQ09ORklHX0FDUElfTEVHQUNZX1RBQkxFU19MT09LVVA9eQpDT05GSUdfQVJD
SF9NSUdIVF9IQVZFX0FDUElfUERDPXkKQ09ORklHX0FDUElfU1lTVEVNX1BPV0VSX1NUQVRF
U19TVVBQT1JUPXkKQ09ORklHX0FDUElfU0xFRVA9eQojIENPTkZJR19BQ1BJX1BST0NGU19Q
T1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRUNfREVCVUdGUyBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX0FDPW0KQ09ORklHX0FDUElfQkFUVEVSWT1tCkNPTkZJR19BQ1BJX0JVVFRP
Tj1tCkNPTkZJR19BQ1BJX1ZJREVPPW0KQ09ORklHX0FDUElfRkFOPW0KQ09ORklHX0FDUElf
RE9DSz15CkNPTkZJR19BQ1BJX1BST0NFU1NPUj1tCkNPTkZJR19BQ1BJX0lQTUk9bQpDT05G
SUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9S
PW0KQ09ORklHX0FDUElfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX05VTUE9eQojIENPTkZJR19B
Q1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfSU5JVFJEX1RBQkxFX09W
RVJSSURFPXkKIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1BJX1BD
SV9TTE9UPXkKQ09ORklHX1g4Nl9QTV9USU1FUj15CkNPTkZJR19BQ1BJX0NPTlRBSU5FUj15
CkNPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXkKQ09ORklHX0FDUElfSE9UUExVR19JT0FQ
SUM9eQpDT05GSUdfQUNQSV9TQlM9bQpDT05GSUdfQUNQSV9IRUQ9eQojIENPTkZJR19BQ1BJ
X0NVU1RPTV9NRVRIT0QgaXMgbm90IHNldApDT05GSUdfQUNQSV9CR1JUPXkKIyBDT05GSUdf
QUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldApDT05GSUdfSEFWRV9BQ1BJ
X0FQRUk9eQpDT05GSUdfSEFWRV9BQ1BJX0FQRUlfTk1JPXkKQ09ORklHX0FDUElfQVBFST15
CkNPTkZJR19BQ1BJX0FQRUlfR0hFUz15CkNPTkZJR19BQ1BJX0FQRUlfUENJRUFFUj15CkNP
TkZJR19BQ1BJX0FQRUlfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19BQ1BJX0FQRUlfRUlO
SiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfQVBFSV9FUlNUX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX0FDUElfRVhUTE9HPXkKIyBDT05GSUdfUE1JQ19PUFJFR0lPTiBpcyBub3Qgc2V0
CkNPTkZJR19TRkk9eQoKIwojIENQVSBGcmVxdWVuY3kgc2NhbGluZwojCkNPTkZJR19DUFVf
RlJFUT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfQ09NTU9OPXkKQ09ORklHX0NQVV9GUkVRX1NU
QVQ9bQojIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAojIENPTkZJ
R19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NQ
VV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJF
UV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09W
X0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFO
Q0U9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCkNPTkZJR19DUFVfRlJFUV9H
T1ZfVVNFUlNQQUNFPW0KQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CkNPTkZJR19D
UFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KCiMKIyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcg
ZHJpdmVycwojCkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKQ09ORklHX1g4Nl9QQ0NfQ1BV
RlJFUT1tCkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPW0KQ09ORklHX1g4Nl9BQ1BJX0NQVUZS
RVFfQ1BCPXkKQ09ORklHX1g4Nl9QT1dFUk5PV19LOD1tCkNPTkZJR19YODZfQU1EX0ZSRVFf
U0VOU0lUSVZJVFk9bQpDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTz1tCkNPTkZJR19Y
ODZfUDRfQ0xPQ0tNT0Q9bQoKIwojIHNoYXJlZCBvcHRpb25zCiMKQ09ORklHX1g4Nl9TUEVF
RFNURVBfTElCPW0KCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CkNPTkZJR19D
UFVfSURMRV9HT1ZfTEFEREVSPXkKQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIyBDT05G
SUdfQVJDSF9ORUVEU19DUFVfSURMRV9DT1VQTEVEIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVM
X0lETEU9eQoKIwojIE1lbW9yeSBwb3dlciBzYXZpbmdzCiMKQ09ORklHX0k3MzAwX0lETEVf
SU9BVF9DSEFOTkVMPXkKQ09ORklHX0k3MzAwX0lETEU9bQoKIwojIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKIwpDT05GSUdfUENJPXkKQ09ORklHX1BDSV9ESVJFQ1Q9eQpDT05GSUdfUENJ
X01NQ09ORklHPXkKQ09ORklHX1BDSV9YRU49eQpDT05GSUdfUENJX0RPTUFJTlM9eQojIENP
TkZJR19QQ0lfQ05CMjBMRV9RVUlSSyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lFUE9SVEJVUz15
CkNPTkZJR19IT1RQTFVHX1BDSV9QQ0lFPXkKQ09ORklHX1BDSUVBRVI9eQojIENPTkZJR19Q
Q0lFX0VDUkMgaXMgbm90IHNldApDT05GSUdfUENJRUFFUl9JTkpFQ1Q9bQpDT05GSUdfUENJ
RUFTUE09eQojIENPTkZJR19QQ0lFQVNQTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lF
QVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05GSUdfUENJRV9Q
TUU9eQpDT05GSUdfUENJX0JVU19BRERSX1RfNjRCSVQ9eQpDT05GSUdfUENJX01TST15CiMg
Q09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfUkVBTExPQ19FTkFCTEVf
QVVUTz15CkNPTkZJR19QQ0lfU1RVQj1tCkNPTkZJR19YRU5fUENJREVWX0ZST05URU5EPW0K
Q09ORklHX0hUX0lSUT15CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9JT1Y9eQpDT05G
SUdfUENJX1BSST15CkNPTkZJR19QQ0lfUEFTSUQ9eQpDT05GSUdfUENJX0xBQkVMPXkKCiMK
IyBQQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfSVNBX0RNQV9BUEk9eQpD
T05GSUdfQU1EX05CPXkKQ09ORklHX1BDQ0FSRD1tCkNPTkZJR19QQ01DSUE9bQpDT05GSUdf
UENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRCVVM9eQoKIwojIFBDLWNhcmQgYnJpZGdl
cwojCkNPTkZJR19ZRU5UQT1tCkNPTkZJR19ZRU5UQV9PMj15CkNPTkZJR19ZRU5UQV9SSUNP
SD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9FTkVfVFVORT15CkNPTkZJR19Z
RU5UQV9UT1NISUJBPXkKQ09ORklHX1BENjcyOT1tCkNPTkZJR19JODIwOTI9bQpDT05GSUdf
UENDQVJEX05PTlNUQVRJQz15CkNPTkZJR19IT1RQTFVHX1BDST15CkNPTkZJR19IT1RQTFVH
X1BDSV9BQ1BJPXkKQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNPW0KQ09ORklHX0hPVFBM
VUdfUENJX0NQQ0k9eQpDT05GSUdfSE9UUExVR19QQ0lfQ1BDSV9aVDU1NTA9bQpDT05GSUdf
SE9UUExVR19QQ0lfQ1BDSV9HRU5FUklDPW0KQ09ORklHX0hPVFBMVUdfUENJX1NIUEM9bQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9TWVNGQj15CgojCiMgRXhl
Y3V0YWJsZSBmaWxlIGZvcm1hdHMgLyBFbXVsYXRpb25zCiMKQ09ORklHX0JJTkZNVF9FTEY9
eQpDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQpDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRf
RUxGX0hFQURFUlM9eQpDT05GSUdfQklORk1UX1NDUklQVD15CiMgQ09ORklHX0hBVkVfQU9V
VCBpcyBub3Qgc2V0CkNPTkZJR19CSU5GTVRfTUlTQz1tCkNPTkZJR19DT1JFRFVNUD15CkNP
TkZJR19JQTMyX0VNVUxBVElPTj15CkNPTkZJR19JQTMyX0FPVVQ9eQpDT05GSUdfWDg2X1gz
Mj15CkNPTkZJR19DT01QQVQ9eQpDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkK
Q09ORklHX1NZU1ZJUENfQ09NUEFUPXkKQ09ORklHX0tFWVNfQ09NUEFUPXkKQ09ORklHX1g4
Nl9ERVZfRE1BX09QUz15CkNPTkZJR19QTUNfQVRPTT15CkNPTkZJR19ORVQ9eQpDT05GSUdf
Q09NUEFUX05FVExJTktfTUVTU0FHRVM9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCkNP
TkZJR19QQUNLRVQ9eQpDT05GSUdfUEFDS0VUX0RJQUc9bQpDT05GSUdfVU5JWD15CkNPTkZJ
R19VTklYX0RJQUc9bQpDT05GSUdfWEZSTT15CkNPTkZJR19YRlJNX0FMR089bQpDT05GSUdf
WEZSTV9VU0VSPW0KQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CkNPTkZJR19YRlJNX01JR1JB
VEU9eQojIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldApDT05GSUdfWEZSTV9J
UENPTVA9bQpDT05GSUdfTkVUX0tFWT1tCkNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQpDT05G
SUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5DRURfUk9V
VEVSPXkKQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTPXkKQ09ORklHX0lQX01VTFRJUExFX1RB
QkxFUz15CkNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQpDT05GSUdfSVBfUk9VVEVfVkVS
Qk9TRT15CkNPTkZJR19JUF9ST1VURV9DTEFTU0lEPXkKIyBDT05GSUdfSVBfUE5QIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9JUElQPW0KQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCkNPTkZJ
R19ORVRfSVBfVFVOTkVMPW0KQ09ORklHX05FVF9JUEdSRT1tCkNPTkZJR19ORVRfSVBHUkVf
QlJPQURDQVNUPXkKQ09ORklHX0lQX01ST1VURT15CkNPTkZJR19JUF9NUk9VVEVfTVVMVElQ
TEVfVEFCTEVTPXkKQ09ORklHX0lQX1BJTVNNX1YxPXkKQ09ORklHX0lQX1BJTVNNX1YyPXkK
Q09ORklHX1NZTl9DT09LSUVTPXkKQ09ORklHX05FVF9JUFZUST1tCkNPTkZJR19ORVRfVURQ
X1RVTk5FTD1tCkNPTkZJR19ORVRfRk9VPW0KQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15
CkNPTkZJR19HRU5FVkU9bQpDT05GSUdfSU5FVF9BSD1tCkNPTkZJR19JTkVUX0VTUD1tCkNP
TkZJR19JTkVUX0lQQ09NUD1tCkNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KQ09ORklHX0lO
RVRfVFVOTkVMPW0KQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCkNPTkZJR19J
TkVUX1hGUk1fTU9ERV9UVU5ORUw9bQpDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCkNP
TkZJR19JTkVUX0xSTz1tCkNPTkZJR19JTkVUX0RJQUc9bQpDT05GSUdfSU5FVF9UQ1BfRElB
Rz1tCkNPTkZJR19JTkVUX1VEUF9ESUFHPW0KQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkK
Q09ORklHX1RDUF9DT05HX0JJQz1tCkNPTkZJR19UQ1BfQ09OR19DVUJJQz15CkNPTkZJR19U
Q1BfQ09OR19XRVNUV09PRD1tCkNPTkZJR19UQ1BfQ09OR19IVENQPW0KQ09ORklHX1RDUF9D
T05HX0hTVENQPW0KQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KQ09ORklHX1RDUF9DT05HX1ZF
R0FTPW0KQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KQ09ORklHX1RDUF9DT05HX0xQPW0K
Q09ORklHX1RDUF9DT05HX1ZFTk89bQpDT05GSUdfVENQX0NPTkdfWUVBSD1tCkNPTkZJR19U
Q1BfQ09OR19JTExJTk9JUz1tCkNPTkZJR19UQ1BfQ09OR19EQ1RDUD1tCkNPTkZJR19ERUZB
VUxUX0NVQklDPXkKIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKQ09ORklHX0RF
RkFVTFRfVENQX0NPTkc9ImN1YmljIgpDT05GSUdfVENQX01ENVNJRz15CkNPTkZJR19JUFY2
PXkKQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkK
Q09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQpDT05GSUdfSU5FVDZfQUg9bQpDT05GSUdf
SU5FVDZfRVNQPW0KQ09ORklHX0lORVQ2X0lQQ09NUD1tCkNPTkZJR19JUFY2X01JUDY9eQpD
T05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQpDT05GSUdfSU5FVDZfVFVOTkVMPW0KQ09ORklH
X0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQpDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RV
Tk5FTD1tCkNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCkNPTkZJR19JTkVUNl9YRlJN
X01PREVfUk9VVEVPUFRJTUlaQVRJT049bQpDT05GSUdfSVBWNl9WVEk9bQpDT05GSUdfSVBW
Nl9TSVQ9bQpDT05GSUdfSVBWNl9TSVRfNlJEPXkKQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZ
UEU9eQpDT05GSUdfSVBWNl9UVU5ORUw9bQpDT05GSUdfSVBWNl9HUkU9bQpDT05GSUdfSVBW
Nl9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9TVUJUUkVFUz15CkNPTkZJR19JUFY2
X01ST1VURT15CkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdf
SVBWNl9QSU1TTV9WMj15CiMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKQ09ORklHX05F
VFdPUktfU0VDTUFSSz15CkNPTkZJR19ORVRfUFRQX0NMQVNTSUZZPXkKIyBDT05GSUdfTkVU
V09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUj15CiMg
Q09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfQURW
QU5DRUQ9eQpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tCgojCiMgQ29yZSBOZXRmaWx0ZXIg
Q29uZmlndXJhdGlvbgojCkNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCkNPTkZJR19ORVRG
SUxURVJfTkVUTElOS19BQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0K
Q09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCkNPTkZJR19ORl9DT05OVFJBQ0s9bQpD
T05GSUdfTkZfTE9HX0NPTU1PTj1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CkNPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVM9eQpD
T05GSUdfTkZfQ09OTlRSQUNLX1BST0NGUz15CkNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRT
PXkKQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUPXkKQ09ORklHX05GX0NPTk5UUkFDS19U
SU1FU1RBTVA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUz15CkNPTkZJR19ORl9DVF9Q
Uk9UT19EQ0NQPW0KQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCkNPTkZJR19ORl9DVF9QUk9U
T19TQ1RQPW0KQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0FNQU5EQT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KQ09ORklHX05GX0NPTk5U
UkFDS19IMzIzPW0KQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0JST0FEQ0FTVD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU05NUD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0FORT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KQ09ORklH
X05GX0NPTk5UUkFDS19URlRQPW0KQ09ORklHX05GX0NUX05FVExJTks9bQpDT05GSUdfTkZf
Q1RfTkVUTElOS19USU1FT1VUPW0KQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSPW0KQ09O
RklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFX0NUPXkKQ09ORklHX05GX05BVD1tCkNPTkZJ
R19ORl9OQVRfTkVFREVEPXkKQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KQ09ORklHX05G
X05BVF9QUk9UT19VRFBMSVRFPW0KQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KQ09ORklH
X05GX05BVF9BTUFOREE9bQpDT05GSUdfTkZfTkFUX0ZUUD1tCkNPTkZJR19ORl9OQVRfSVJD
PW0KQ09ORklHX05GX05BVF9TSVA9bQpDT05GSUdfTkZfTkFUX1RGVFA9bQpDT05GSUdfTkZf
TkFUX1JFRElSRUNUPW0KQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWT1tCkNPTkZJR19ORl9U
QUJMRVM9bQpDT05GSUdfTkZfVEFCTEVTX0lORVQ9bQpDT05GSUdfTkZUX0VYVEhEUj1tCkNP
TkZJR19ORlRfTUVUQT1tCkNPTkZJR19ORlRfQ1Q9bQpDT05GSUdfTkZUX1JCVFJFRT1tCkNP
TkZJR19ORlRfSEFTSD1tCkNPTkZJR19ORlRfQ09VTlRFUj1tCkNPTkZJR19ORlRfTE9HPW0K
Q09ORklHX05GVF9MSU1JVD1tCkNPTkZJR19ORlRfTUFTUT1tCkNPTkZJR19ORlRfUkVESVI9
bQpDT05GSUdfTkZUX05BVD1tCkNPTkZJR19ORlRfUVVFVUU9bQpDT05GSUdfTkZUX1JFSkVD
VD1tCkNPTkZJR19ORlRfUkVKRUNUX0lORVQ9bQpDT05GSUdfTkZUX0NPTVBBVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRBQkxFUz1tCgojCiMgWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzCiMK
Q09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFS
Sz1tCkNPTkZJR19ORVRGSUxURVJfWFRfU0VUPW0KCiMKIyBYdGFibGVzIHRhcmdldHMKIwpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVD1tCkNPTkZJR19ORVRGSUxURVJfWFRf
VEFSR0VUX0NIRUNLU1VNPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCkNPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRf
Q1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfSEw9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tCkNP
TkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX0xFRD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX05BVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX05GTE9HPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1t
CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RB
UkdFVF9SRURJUkVDVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRT1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RSQUNFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RDUE9QVFNUUklQPW0KCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklM
VEVSX1hUX01BVENIX0FERFJUWVBFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfQ0xVU1RFUj1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9DT05OTEFCRUw9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5M
SU1JVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQpDT05GSUdfTkVU
RklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
Q1BVPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9ERVZHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOPW0KQ09ORklHX05FVEZJTFRFUl9YVF9N
QVRDSF9FU1A9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9ITD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZT
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQPW0KQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9MRU5HVEg9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQ09O
RklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCkNPTkZJR19O
RVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9P
U0Y9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9QT0xJQ1k9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQpDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX1FVT1RBPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkNPTkZJR19ORVRGSUxURVJfWFRf
TUFUQ0hfUkVDRU5UPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X1NUQVRFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpDT05GSUdf
TkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
VENQTVNTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9VMzI9bQpDT05GSUdfSVBfU0VUPW0KQ09ORklHX0lQX1NFVF9NQVg9
MjU2CkNPTkZJR19JUF9TRVRfQklUTUFQX0lQPW0KQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBN
QUM9bQpDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQ
PW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCkNPTkZJR19JUF9TRVRfSEFTSF9JUFBP
UlQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQpDT05GSUdfSVBfU0VUX0hBU0hf
SVBQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCkNPTkZJR19JUF9TRVRfSEFT
SF9ORVRQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCkNPTkZJR19JUF9TRVRf
SEFTSF9ORVRORVQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVD1tCkNPTkZJR19JUF9T
RVRfSEFTSF9ORVRJRkFDRT1tCkNPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQpDT05GSUdfSVBf
VlM9bQpDT05GSUdfSVBfVlNfSVBWNj15CiMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCgojCiMgSVBWUyB0cmFuc3BvcnQgcHJvdG9j
b2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAojCkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQpD
T05GSUdfSVBfVlNfUFJPVE9fVURQPXkKQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CkNP
TkZJR19JUF9WU19QUk9UT19FU1A9eQpDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQpDT05GSUdf
SVBfVlNfUFJPVE9fU0NUUD15CgojCiMgSVBWUyBzY2hlZHVsZXIKIwpDT05GSUdfSVBfVlNf
UlI9bQpDT05GSUdfSVBfVlNfV1JSPW0KQ09ORklHX0lQX1ZTX0xDPW0KQ09ORklHX0lQX1ZT
X1dMQz1tCkNPTkZJR19JUF9WU19GTz1tCkNPTkZJR19JUF9WU19MQkxDPW0KQ09ORklHX0lQ
X1ZTX0xCTENSPW0KQ09ORklHX0lQX1ZTX0RIPW0KQ09ORklHX0lQX1ZTX1NIPW0KQ09ORklH
X0lQX1ZTX1NFRD1tCkNPTkZJR19JUF9WU19OUT1tCgojCiMgSVBWUyBTSCBzY2hlZHVsZXIK
IwpDT05GSUdfSVBfVlNfU0hfVEFCX0JJVFM9OAoKIwojIElQVlMgYXBwbGljYXRpb24gaGVs
cGVyCiMKQ09ORklHX0lQX1ZTX0ZUUD1tCkNPTkZJR19JUF9WU19ORkNUPXkKQ09ORklHX0lQ
X1ZTX1BFX1NJUD1tCgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklH
X05GX0RFRlJBR19JUFY0PW0KQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KQ09ORklHX05G
X0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CkNPTkZJR19ORl9UQUJMRVNfSVBWND1tCkNPTkZJ
R19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCkNPTkZJR19ORlRfUkVKRUNUX0lQVjQ9bQpDT05G
SUdfTkZfVEFCTEVTX0FSUD1tCkNPTkZJR19ORl9MT0dfQVJQPW0KQ09ORklHX05GX0xPR19J
UFY0PW0KQ09ORklHX05GX1JFSkVDVF9JUFY0PW0KQ09ORklHX05GX05BVF9JUFY0PW0KQ09O
RklHX05GVF9DSEFJTl9OQVRfSVBWND1tCkNPTkZJR19ORl9OQVRfTUFTUVVFUkFERV9JUFY0
PW0KQ09ORklHX05GVF9NQVNRX0lQVjQ9bQojIENPTkZJR19ORlRfUkVESVJfSVBWNCBpcyBu
b3Qgc2V0CkNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCkNPTkZJR19ORl9OQVRfUFJPVE9f
R1JFPW0KQ09ORklHX05GX05BVF9QUFRQPW0KQ09ORklHX05GX05BVF9IMzIzPW0KQ09ORklH
X0lQX05GX0lQVEFCTEVTPW0KQ09ORklHX0lQX05GX01BVENIX0FIPW0KQ09ORklHX0lQX05G
X01BVENIX0VDTj1tCkNPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUj1tCkNPTkZJR19JUF9O
Rl9NQVRDSF9UVEw9bQpDT05GSUdfSVBfTkZfRklMVEVSPW0KQ09ORklHX0lQX05GX1RBUkdF
VF9SRUpFQ1Q9bQpDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KQ09ORklHX0lQX05G
X05BVD1tCkNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19JUF9ORl9U
QVJHRVRfTkVUTUFQPW0KQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkNPTkZJR19J
UF9ORl9NQU5HTEU9bQpDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCkNPTkZJR19J
UF9ORl9UQVJHRVRfRUNOPW0KQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQpDT05GSUdfSVBf
TkZfUkFXPW0KQ09ORklHX0lQX05GX1NFQ1VSSVRZPW0KQ09ORklHX0lQX05GX0FSUFRBQkxF
Uz1tCkNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQpDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1t
CgojCiMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KIwpDT05GSUdfTkZfREVGUkFH
X0lQVjY9bQpDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQpDT05GSUdfTkZfVEFCTEVTX0lQ
VjY9bQpDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQpDT05GSUdfTkZUX1JFSkVDVF9J
UFY2PW0KQ09ORklHX05GX1JFSkVDVF9JUFY2PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09O
RklHX05GX05BVF9JUFY2PW0KQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCkNPTkZJR19O
Rl9OQVRfTUFTUVVFUkFERV9JUFY2PW0KQ09ORklHX05GVF9NQVNRX0lQVjY9bQojIENPTkZJ
R19ORlRfUkVESVJfSVBWNiBpcyBub3Qgc2V0CkNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpD
T05GSUdfSVA2X05GX01BVENIX0FIPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfSEw9bQpDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9
bQpDT05GSUdfSVA2X05GX01BVENIX01IPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRF
Uj1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1t
CkNPTkZJR19JUDZfTkZfRklMVEVSPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0K
Q09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQpDT05GSUdfSVA2X05GX01BTkdMRT1t
CkNPTkZJR19JUDZfTkZfUkFXPW0KQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCkNPTkZJR19J
UDZfTkZfTkFUPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19J
UDZfTkZfVEFSR0VUX05QVD1tCgojCiMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlv
bgojCkNPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCkNPTkZJR19ORl9UQUJMRVNfQlJJ
REdFPW0KQ09ORklHX05GVF9CUklER0VfTUVUQT1tCkNPTkZJR19ORlRfQlJJREdFX1JFSkVD
VD1tCkNPTkZJR19ORl9MT0dfQlJJREdFPW0KQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1t
CkNPTkZJR19CUklER0VfRUJUX0JST1VURT1tCkNPTkZJR19CUklER0VfRUJUX1RfRklMVEVS
PW0KQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQpDT05GSUdfQlJJREdFX0VCVF84MDJfMz1t
CkNPTkZJR19CUklER0VfRUJUX0FNT05HPW0KQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KQ09O
RklHX0JSSURHRV9FQlRfSVA9bQpDT05GSUdfQlJJREdFX0VCVF9JUDY9bQpDT05GSUdfQlJJ
REdFX0VCVF9MSU1JVD1tCkNPTkZJR19CUklER0VfRUJUX01BUks9bQpDT05GSUdfQlJJREdF
X0VCVF9QS1RUWVBFPW0KQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KQ09ORklHX0JSSURHRV9F
QlRfVkxBTj1tCkNPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KQ09ORklHX0JSSURHRV9F
QlRfRE5BVD1tCkNPTkZJR19CUklER0VfRUJUX01BUktfVD1tCkNPTkZJR19CUklER0VfRUJU
X1JFRElSRUNUPW0KQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCkNPTkZJR19CUklER0VfRUJU
X0xPRz1tCkNPTkZJR19CUklER0VfRUJUX05GTE9HPW0KQ09ORklHX0lQX0RDQ1A9bQpDT05G
SUdfSU5FVF9EQ0NQX0RJQUc9bQoKIwojIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbgojCiMg
Q09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldApDT05GSUdfSVBfRENDUF9D
Q0lEMz15CiMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldApDT05GSUdf
SVBfRENDUF9URlJDX0xJQj15CgojCiMgRENDUCBLZXJuZWwgSGFja2luZwojCiMgQ09ORklH
X0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldApDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCkNPTkZJ
R19JUF9TQ1RQPW0KQ09ORklHX05FVF9TQ1RQUFJPQkU9bQojIENPTkZJR19TQ1RQX0RCR19P
QkpDTlQgaXMgbm90IHNldApDT05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX01ENT15
CiMgQ09ORklHX1NDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEExIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkUgaXMgbm90IHNldApDT05GSUdf
U0NUUF9DT09LSUVfSE1BQ19NRDU9eQpDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkK
Q09ORklHX1JEUz1tCkNPTkZJR19SRFNfUkRNQT1tCkNPTkZJR19SRFNfVENQPW0KIyBDT05G
SUdfUkRTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1RJUEM9bQpDT05GSUdfVElQQ19NRURJ
QV9JQj15CkNPTkZJR19USVBDX01FRElBX1VEUD15CkNPTkZJR19BVE09bQpDT05GSUdfQVRN
X0NMSVA9bQojIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKQ09ORklHX0FU
TV9MQU5FPW0KQ09ORklHX0FUTV9NUE9BPW0KQ09ORklHX0FUTV9CUjI2ODQ9bQojIENPTkZJ
R19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKQ09ORklHX0wyVFA9bQpDT05GSUdf
TDJUUF9ERUJVR0ZTPW0KQ09ORklHX0wyVFBfVjM9eQpDT05GSUdfTDJUUF9JUD1tCkNPTkZJ
R19MMlRQX0VUSD1tCkNPTkZJR19TVFA9bQpDT05GSUdfR0FSUD1tCkNPTkZJR19NUlA9bQpD
T05GSUdfQlJJREdFPW0KQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKQ09ORklHX0JS
SURHRV9WTEFOX0ZJTFRFUklORz15CkNPTkZJR19IQVZFX05FVF9EU0E9eQpDT05GSUdfVkxB
Tl84MDIxUT1tCkNPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQpDT05GSUdfVkxBTl84MDIxUV9N
VlJQPXkKQ09ORklHX0RFQ05FVD1tCiMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNl
dApDT05GSUdfTExDPW0KQ09ORklHX0xMQzI9bQpDT05GSUdfSVBYPW0KIyBDT05GSUdfSVBY
X0lOVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19BVEFMSz1tCkNPTkZJR19ERVZfQVBQTEVUQUxL
PW0KQ09ORklHX0lQRERQPW0KQ09ORklHX0lQRERQX0VOQ0FQPXkKIyBDT05GSUdfWDI1IGlz
IG5vdCBzZXQKQ09ORklHX0xBUEI9bQpDT05GSUdfUEhPTkVUPW0KQ09ORklHXzZMT1dQQU49
bQpDT05GSUdfNkxPV1BBTl9OSEM9bQpDT05GSUdfNkxPV1BBTl9OSENfREVTVD1tCkNPTkZJ
R182TE9XUEFOX05IQ19GUkFHTUVOVD1tCkNPTkZJR182TE9XUEFOX05IQ19IT1A9bQpDT05G
SUdfNkxPV1BBTl9OSENfSVBWNj1tCkNPTkZJR182TE9XUEFOX05IQ19NT0JJTElUWT1tCkNP
TkZJR182TE9XUEFOX05IQ19ST1VUSU5HPW0KQ09ORklHXzZMT1dQQU5fTkhDX1VEUD1tCkNP
TkZJR19JRUVFODAyMTU0PW0KQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUPW0KQ09ORklHX0lF
RUU4MDIxNTRfNkxPV1BBTj1tCiMgQ09ORklHX01BQzgwMjE1NCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfU0NIRUQ9eQoKIwojIFF1ZXVlaW5nL1NjaGVkdWxpbmcKIwpDT05GSUdfTkVUX1ND
SF9DQlE9bQpDT05GSUdfTkVUX1NDSF9IVEI9bQpDT05GSUdfTkVUX1NDSF9IRlNDPW0KQ09O
RklHX05FVF9TQ0hfQVRNPW0KQ09ORklHX05FVF9TQ0hfUFJJTz1tCkNPTkZJR19ORVRfU0NI
X01VTFRJUT1tCkNPTkZJR19ORVRfU0NIX1JFRD1tCkNPTkZJR19ORVRfU0NIX1NGQj1tCkNP
TkZJR19ORVRfU0NIX1NGUT1tCkNPTkZJR19ORVRfU0NIX1RFUUw9bQpDT05GSUdfTkVUX1ND
SF9UQkY9bQpDT05GSUdfTkVUX1NDSF9HUkVEPW0KQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0K
Q09ORklHX05FVF9TQ0hfTkVURU09bQpDT05GSUdfTkVUX1NDSF9EUlI9bQpDT05GSUdfTkVU
X1NDSF9NUVBSSU89bQpDT05GSUdfTkVUX1NDSF9DSE9LRT1tCkNPTkZJR19ORVRfU0NIX1FG
UT1tCkNPTkZJR19ORVRfU0NIX0NPREVMPW0KQ09ORklHX05FVF9TQ0hfRlFfQ09ERUw9bQpD
T05GSUdfTkVUX1NDSF9GUT1tCkNPTkZJR19ORVRfU0NIX0hIRj1tCkNPTkZJR19ORVRfU0NI
X1BJRT1tCkNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQpDT05GSUdfTkVUX1NDSF9QTFVHPW0K
CiMKIyBDbGFzc2lmaWNhdGlvbgojCkNPTkZJR19ORVRfQ0xTPXkKQ09ORklHX05FVF9DTFNf
QkFTSUM9bQpDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KQ09ORklHX05FVF9DTFNfUk9VVEU0
PW0KQ09ORklHX05FVF9DTFNfRlc9bQpDT05GSUdfTkVUX0NMU19VMzI9bQpDT05GSUdfQ0xT
X1UzMl9QRVJGPXkKQ09ORklHX0NMU19VMzJfTUFSSz15CkNPTkZJR19ORVRfQ0xTX1JTVlA9
bQpDT05GSUdfTkVUX0NMU19SU1ZQNj1tCkNPTkZJR19ORVRfQ0xTX0ZMT1c9bQpDT05GSUdf
TkVUX0NMU19DR1JPVVA9bQpDT05GSUdfTkVUX0NMU19CUEY9bQpDT05GSUdfTkVUX0VNQVRD
SD15CkNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCkNPTkZJR19ORVRfRU1BVENIX0NNUD1t
CkNPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KQ09O
RklHX05FVF9FTUFUQ0hfTUVUQT1tCkNPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQpDT05GSUdf
TkVUX0VNQVRDSF9DQU5JRD1tCkNPTkZJR19ORVRfRU1BVENIX0lQU0VUPW0KQ09ORklHX05F
VF9DTFNfQUNUPXkKQ09ORklHX05FVF9BQ1RfUE9MSUNFPW0KQ09ORklHX05FVF9BQ1RfR0FD
VD1tCkNPTkZJR19HQUNUX1BST0I9eQpDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQpDT05GSUdf
TkVUX0FDVF9JUFQ9bQpDT05GSUdfTkVUX0FDVF9OQVQ9bQpDT05GSUdfTkVUX0FDVF9QRURJ
VD1tCkNPTkZJR19ORVRfQUNUX1NJTVA9bQpDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KQ09O
RklHX05FVF9BQ1RfQ1NVTT1tCkNPTkZJR19ORVRfQUNUX1ZMQU49bQpDT05GSUdfTkVUX0FD
VF9CUEY9bQpDT05GSUdfTkVUX0FDVF9DT05OTUFSSz1tCkNPTkZJR19ORVRfQ0xTX0lORD15
CkNPTkZJR19ORVRfU0NIX0ZJRk89eQpDT05GSUdfRENCPXkKQ09ORklHX0ROU19SRVNPTFZF
Uj1tCkNPTkZJR19CQVRNQU5fQURWPW0KQ09ORklHX0JBVE1BTl9BRFZfQkxBPXkKQ09ORklH
X0JBVE1BTl9BRFZfREFUPXkKQ09ORklHX0JBVE1BTl9BRFZfTkM9eQpDT05GSUdfQkFUTUFO
X0FEVl9NQ0FTVD15CiMgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgaXMgbm90IHNldApDT05G
SUdfT1BFTlZTV0lUQ0g9bQpDT05GSUdfT1BFTlZTV0lUQ0hfR1JFPW0KQ09ORklHX09QRU5W
U1dJVENIX1ZYTEFOPW0KQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRT1tCkNPTkZJR19WU09D
S0VUUz1tCkNPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUz1tCkNPTkZJR19ORVRMSU5LX01N
QVA9eQpDT05GSUdfTkVUTElOS19ESUFHPW0KQ09ORklHX01QTFM9eQpDT05GSUdfTkVUX01Q
TFNfR1NPPXkKQ09ORklHX01QTFNfUk9VVElORz1tCiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90IHNldApDT05GSUdfUlBTPXkKQ09ORklH
X1JGU19BQ0NFTD15CkNPTkZJR19YUFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09O
RklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09O
RklHX0JRTD15CkNPTkZJR19CUEZfSklUPXkKQ09ORklHX05FVF9GTE9XX0xJTUlUPXkKCiMK
IyBOZXR3b3JrIHRlc3RpbmcKIwpDT05GSUdfTkVUX1BLVEdFTj1tCiMgQ09ORklHX05FVF9U
Q1BQUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfRFJPUF9NT05JVE9SPW0KQ09ORklHX0hB
TVJBRElPPXkKCiMKIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCiMKQ09ORklHX0FYMjU9bQoj
IENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldApDT05GSUdfTkVUUk9NPW0KQ09O
RklHX1JPU0U9bQoKIwojIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdf
TUtJU1M9bQpDT05GSUdfNlBBQ0s9bQpDT05GSUdfQlBRRVRIRVI9bQpDT05GSUdfQkFZQ09N
X1NFUl9GRFg9bQpDT05GSUdfQkFZQ09NX1NFUl9IRFg9bQpDT05GSUdfQkFZQ09NX1BBUj1t
CkNPTkZJR19ZQU09bQpDT05GSUdfQ0FOPW0KQ09ORklHX0NBTl9SQVc9bQpDT05GSUdfQ0FO
X0JDTT1tCkNPTkZJR19DQU5fR1c9bQoKIwojIENBTiBEZXZpY2UgRHJpdmVycwojCkNPTkZJ
R19DQU5fVkNBTj1tCkNPTkZJR19DQU5fU0xDQU49bQpDT05GSUdfQ0FOX0RFVj1tCkNPTkZJ
R19DQU5fQ0FMQ19CSVRUSU1JTkc9eQojIENPTkZJR19DQU5fTEVEUyBpcyBub3Qgc2V0CkNP
TkZJR19DQU5fU0pBMTAwMD1tCkNPTkZJR19DQU5fU0pBMTAwMF9JU0E9bQojIENPTkZJR19D
QU5fU0pBMTAwMF9QTEFURk9STSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fRU1TX1BDTUNJQT1t
CkNPTkZJR19DQU5fRU1TX1BDST1tCkNPTkZJR19DQU5fUEVBS19QQ01DSUE9bQpDT05GSUdf
Q0FOX1BFQUtfUENJPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVDPXkKQ09ORklHX0NBTl9LVkFT
RVJfUENJPW0KQ09ORklHX0NBTl9QTFhfUENJPW0KIyBDT05GSUdfQ0FOX0NfQ0FOIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FOX01fQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0NDNzcw
IGlzIG5vdCBzZXQKCiMKIyBDQU4gU1BJIGludGVyZmFjZXMKIwojIENPTkZJR19DQU5fTUNQ
MjUxWCBpcyBub3Qgc2V0CgojCiMgQ0FOIFVTQiBpbnRlcmZhY2VzCiMKQ09ORklHX0NBTl9F
TVNfVVNCPW0KQ09ORklHX0NBTl9FU0RfVVNCMj1tCkNPTkZJR19DQU5fR1NfVVNCPW0KQ09O
RklHX0NBTl9LVkFTRVJfVVNCPW0KQ09ORklHX0NBTl9QRUFLX1VTQj1tCkNPTkZJR19DQU5f
OERFVl9VU0I9bQpDT05GSUdfQ0FOX1NPRlRJTkc9bQpDT05GSUdfQ0FOX1NPRlRJTkdfQ1M9
bQojIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19JUkRBPW0K
CiMKIyBJckRBIHByb3RvY29scwojCkNPTkZJR19JUkxBTj1tCkNPTkZJR19JUk5FVD1tCkNP
TkZJR19JUkNPTU09bQojIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKCiMKIyBJckRB
IG9wdGlvbnMKIwpDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQpDT05GSUdfSVJEQV9G
QVNUX1JSPXkKIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CgojCiMgSW5mcmFyZWQt
cG9ydCBkZXZpY2UgZHJpdmVycwojCgojCiMgU0lSIGRldmljZSBkcml2ZXJzCiMKQ09ORklH
X0lSVFRZX1NJUj1tCgojCiMgRG9uZ2xlIHN1cHBvcnQKIwpDT05GSUdfRE9OR0xFPXkKQ09O
RklHX0VTSV9ET05HTEU9bQpDT05GSUdfQUNUSVNZU19ET05HTEU9bQpDT05GSUdfVEVLUkFN
X0RPTkdMRT1tCkNPTkZJR19UT0lNMzIzMl9ET05HTEU9bQpDT05GSUdfTElURUxJTktfRE9O
R0xFPW0KQ09ORklHX01BNjAwX0RPTkdMRT1tCkNPTkZJR19HSVJCSUxfRE9OR0xFPW0KQ09O
RklHX01DUDIxMjBfRE9OR0xFPW0KQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KQ09ORklH
X0FDVDIwMExfRE9OR0xFPW0KQ09ORklHX0tJTkdTVU5fRE9OR0xFPW0KQ09ORklHX0tTREFa
WkxFX0RPTkdMRT1tCkNPTkZJR19LUzk1OV9ET05HTEU9bQoKIwojIEZJUiBkZXZpY2UgZHJp
dmVycwojCkNPTkZJR19VU0JfSVJEQT1tCkNPTkZJR19TSUdNQVRFTF9GSVI9bQpDT05GSUdf
TlNDX0ZJUj1tCkNPTkZJR19XSU5CT05EX0ZJUj1tCkNPTkZJR19TTUNfSVJDQ19GSVI9bQpD
T05GSUdfQUxJX0ZJUj1tCkNPTkZJR19WTFNJX0ZJUj1tCkNPTkZJR19WSUFfRklSPW0KQ09O
RklHX01DU19GSVI9bQpDT05GSUdfQlQ9bQpDT05GSUdfQlRfQlJFRFI9eQpDT05GSUdfQlRf
UkZDT01NPW0KQ09ORklHX0JUX1JGQ09NTV9UVFk9eQpDT05GSUdfQlRfQk5FUD1tCkNPTkZJ
R19CVF9CTkVQX01DX0ZJTFRFUj15CkNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CkNP
TkZJR19CVF9DTVRQPW0KQ09ORklHX0JUX0hJRFA9bQpDT05GSUdfQlRfTEU9eQpDT05GSUdf
QlRfNkxPV1BBTj1tCiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0JU
X0RFQlVHRlM9eQoKIwojIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwojCkNPTkZJR19CVF9J
TlRFTD1tCkNPTkZJR19CVF9CQ009bQpDT05GSUdfQlRfSENJQlRVU0I9bQpDT05GSUdfQlRf
SENJQlRVU0JfQkNNPXkKQ09ORklHX0JUX0hDSUJUU0RJTz1tCkNPTkZJR19CVF9IQ0lVQVJU
PW0KQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQpDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQ09O
RklHX0JUX0hDSVVBUlRfQVRIM0s9eQpDT05GSUdfQlRfSENJVUFSVF9MTD15CkNPTkZJR19C
VF9IQ0lVQVJUXzNXSVJFPXkKQ09ORklHX0JUX0hDSVVBUlRfSU5URUw9eQpDT05GSUdfQlRf
SENJVUFSVF9CQ009eQpDT05GSUdfQlRfSENJQkNNMjAzWD1tCkNPTkZJR19CVF9IQ0lCUEEx
MFg9bQpDT05GSUdfQlRfSENJQkZVU0I9bQpDT05GSUdfQlRfSENJRFRMMT1tCkNPTkZJR19C
VF9IQ0lCVDNDPW0KQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIyBDT05GSUdfQlRfSENJQlRV
QVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hDSVZIQ0k9bQpDT05GSUdfQlRfTVJWTD1tCkNP
TkZJR19CVF9NUlZMX1NESU89bQpDT05GSUdfQlRfQVRIM0s9bQpDT05GSUdfQUZfUlhSUEM9
bQojIENPTkZJR19BRl9SWFJQQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SWEtBRD1tCkNP
TkZJR19GSUJfUlVMRVM9eQpDT05GSUdfV0lSRUxFU1M9eQpDT05GSUdfV0lSRUxFU1NfRVhU
PXkKQ09ORklHX1dFWFRfQ09SRT15CkNPTkZJR19XRVhUX1BST0M9eQpDT05GSUdfV0VYVF9T
UFk9eQpDT05GSUdfV0VYVF9QUklWPXkKQ09ORklHX0NGRzgwMjExPW0KIyBDT05GSUdfTkw4
MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9X
QVJOSU5HUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qg
c2V0CiMgQ09ORklHX0NGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUyBpcyBub3Qgc2V0CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIGlzIG5vdCBzZXQK
Q09ORklHX0NGRzgwMjExX1dFWFQ9eQpDT05GSUdfQ0ZHODAyMTFfV0VYVF9FWFBPUlQ9eQpD
T05GSUdfTElCODAyMTE9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfV0VQPW0KQ09ORklHX0xJ
QjgwMjExX0NSWVBUX0NDTVA9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCiMgQ09O
RklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExPW0KQ09ORklH
X01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CkNPTkZJ
R19NQUM4MDIxMV9SQ19NSU5TVFJFTF9IVD15CiMgQ09ORklHX01BQzgwMjExX1JDX01JTlNU
UkVMX1ZIVCBpcyBub3Qgc2V0CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVM
PXkKQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgpDT05GSUdfTUFD
ODAyMTFfTUVTSD15CkNPTkZJR19NQUM4MDIxMV9MRURTPXkKIyBDT05GSUdfTUFDODAyMTFf
REVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBp
cyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05G
SUdfV0lNQVg9bQpDT05GSUdfV0lNQVhfREVCVUdfTEVWRUw9OApDT05GSUdfUkZLSUxMPW0K
Q09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JG
S0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05FVF85UD1tCkNPTkZJR19ORVRfOVBfVklS
VElPPW0KQ09ORklHX05FVF85UF9SRE1BPW0KIyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FJRiBpcyBub3Qgc2V0CkNPTkZJR19DRVBIX0xJQj1tCiMgQ09O
RklHX0NFUEhfTElCX1BSRVRUWURFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9MSUJf
VVNFX0ROU19SRVNPTFZFUiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9bQpDT05GSUdfTkZDX0RJ
R0lUQUw9bQojIENPTkZJR19ORkNfTkNJIGlzIG5vdCBzZXQKQ09ORklHX05GQ19IQ0k9bQoj
IENPTkZJR19ORkNfU0hETEMgaXMgbm90IHNldAoKIwojIE5lYXIgRmllbGQgQ29tbXVuaWNh
dGlvbiAoTkZDKSBkZXZpY2VzCiMKQ09ORklHX05GQ19QTjUzMz1tCiMgQ09ORklHX05GQ19U
UkY3OTcwQSBpcyBub3Qgc2V0CkNPTkZJR19ORkNfTUVJX1BIWT1tCkNPTkZJR19ORkNfU0lN
PW0KQ09ORklHX05GQ19QT1JUMTAwPW0KQ09ORklHX05GQ19QTjU0ND1tCkNPTkZJR19ORkNf
UE41NDRfTUVJPW0KIyBDT05GSUdfTkZDX01JQ1JPUkVBRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05GQ19TVDIxTkZDQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0JQRl9KSVQ9eQoKIwojIERl
dmljZSBEcml2ZXJzCiMKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMKQ09ORklHX1VF
VkVOVF9IRUxQRVI9eQpDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCkNPTkZJR19ERVZU
TVBGUz15CiMgQ09ORklHX0RFVlRNUEZTX01PVU5UIGlzIG5vdCBzZXQKQ09ORklHX1NUQU5E
QUxPTkU9eQpDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CkNPTkZJR19GV19MT0FE
RVI9eQojIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfRVhU
UkFfRklSTVdBUkU9IiIKQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj15CiMgQ09ORklH
X0ZXX0xPQURFUl9VU0VSX0hFTFBFUl9GQUxMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19XQU5U
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19BTExPV19ERVZfQ09SRURVTVA9eQpDT05GSUdfREVW
X0NPUkVEVU1QPXkKIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfREVWUkVTIGlzIG5vdCBzZXQKQ09ORklHX1NZU19IWVBFUlZJU09SPXkKIyBDT05G
SUdfR0VORVJJQ19DUFVfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19HRU5FUklDX0NQVV9B
VVRPUFJPQkU9eQpDT05GSUdfUkVHTUFQPXkKQ09ORklHX1JFR01BUF9JMkM9bQpDT05GSUdf
UkVHTUFQX1NQST1tCkNPTkZJR19ETUFfU0hBUkVEX0JVRkZFUj15CiMgQ09ORklHX0ZFTkNF
X1RSQUNFIGlzIG5vdCBzZXQKCiMKIyBCdXMgZGV2aWNlcwojCkNPTkZJR19DT05ORUNUT1I9
eQpDT05GSUdfUFJPQ19FVkVOVFM9eQpDT05GSUdfTVREPW0KIyBDT05GSUdfTVREX1RFU1RT
IGlzIG5vdCBzZXQKQ09ORklHX01URF9SRURCT09UX1BBUlRTPW0KQ09ORklHX01URF9SRURC
T09UX0RJUkVDVE9SWV9CTE9DSz0tMQojIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFM
TE9DQVRFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldApDT05G
SUdfTVREX0FSN19QQVJUUz1tCgojCiMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBM
YXllcnMKIwpDT05GSUdfTVREX0JMS0RFVlM9bQpDT05GSUdfTVREX0JMT0NLPW0KQ09ORklH
X01URF9CTE9DS19STz1tCkNPTkZJR19GVEw9bQpDT05GSUdfTkZUTD1tCkNPTkZJR19ORlRM
X1JXPXkKQ09ORklHX0lORlRMPW0KQ09ORklHX1JGRF9GVEw9bQpDT05GSUdfU1NGREM9bQoj
IENPTkZJR19TTV9GVEwgaXMgbm90IHNldApDT05GSUdfTVREX09PUFM9bQpDT05GSUdfTVRE
X1NXQVA9bQojIENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSIGlzIG5vdCBzZXQKCiMK
IyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwojCkNPTkZJR19NVERfQ0ZJPW0KQ09ORklH
X01URF9KRURFQ1BST0JFPW0KQ09ORklHX01URF9HRU5fUFJPQkU9bQojIENPTkZJR19NVERf
Q0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8x
PXkKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKQ09ORklHX01URF9NQVBfQkFOS19X
SURUSF80PXkKIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAojIENP
TkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAojIENPTkZJR19NVERfTUFQ
X0JBTktfV0lEVEhfMzIgaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JMT15CkNPTkZJR19N
VERfQ0ZJX0kyPXkKIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9DRklfSTggaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCkNPTkZJR19N
VERfQ0ZJX0FNRFNURD1tCkNPTkZJR19NVERfQ0ZJX1NUQUE9bQpDT05GSUdfTVREX0NGSV9V
VElMPW0KQ09ORklHX01URF9SQU09bQpDT05GSUdfTVREX1JPTT1tCkNPTkZJR19NVERfQUJT
RU5UPW0KCiMKIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiMKQ09ORklHX01U
RF9DT01QTEVYX01BUFBJTkdTPXkKQ09ORklHX01URF9QSFlTTUFQPW0KIyBDT05GSUdfTVRE
X1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX01URF9TQkNfR1hYPW0KIyBDT05G
SUdfTVREX0FNRDc2WFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9JQ0hYUk9NIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX0VTQjJST00gaXMgbm90IHNldAojIENPTkZJR19NVERfQ0s4
MDRYUk9NIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1NDQjJfRkxBU0ggaXMgbm90IHNldApD
T05GSUdfTVREX05FVHRlbD1tCiMgQ09ORklHX01URF9MNDQwR1ggaXMgbm90IHNldApDT05G
SUdfTVREX1BDST1tCkNPTkZJR19NVERfUENNQ0lBPW0KIyBDT05GSUdfTVREX1BDTUNJQV9B
Tk9OWU1PVVMgaXMgbm90IHNldAojIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQK
Q09ORklHX01URF9JTlRFTF9WUl9OT1I9bQpDT05GSUdfTVREX1BMQVRSQU09bQojIENPTkZJ
R19NVERfTEFUQ0hfQUREUiBpcyBub3Qgc2V0CgojCiMgU2VsZi1jb250YWluZWQgTVREIGRl
dmljZSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CkNPTkZJR19N
VERfREFUQUZMQVNIPW0KIyBDT05GSUdfTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgaXMg
bm90IHNldAojIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CkNPTkZJR19N
VERfTTI1UDgwPW0KQ09ORklHX01URF9TU1QyNUw9bQpDT05GSUdfTVREX1NMUkFNPW0KQ09O
RklHX01URF9QSFJBTT1tCkNPTkZJR19NVERfTVREUkFNPW0KQ09ORklHX01URFJBTV9UT1RB
TF9TSVpFPTQwOTYKQ09ORklHX01URFJBTV9FUkFTRV9TSVpFPTEyOApDT05GSUdfTVREX0JM
T0NLMk1URD1tCgojCiMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCiMKIyBDT05GSUdf
TVREX0RPQ0czIGlzIG5vdCBzZXQKQ09ORklHX01URF9OQU5EX0VDQz1tCiMgQ09ORklHX01U
RF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldApDT05GSUdfTVREX05BTkQ9bQpDT05GSUdfTVRE
X05BTkRfQkNIPW0KQ09ORklHX01URF9OQU5EX0VDQ19CQ0g9eQpDT05GSUdfTVREX1NNX0NP
TU1PTj1tCiMgQ09ORklHX01URF9OQU5EX0RFTkFMSSBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9OQU5EX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NVERfTkFORF9PTUFQX0JDSF9CVUlM
RCBpcyBub3Qgc2V0CkNPTkZJR19NVERfTkFORF9JRFM9bQpDT05GSUdfTVREX05BTkRfUklD
T0g9bQpDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCiMgQ09ORklHX01URF9OQU5EX0RJ
U0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfRElT
S09OQ0hJUF9QUk9CRV9BRERSRVNTPTAKIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9C
QlRXUklURSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX0RPQ0c0IGlzIG5vdCBzZXQK
Q09ORklHX01URF9OQU5EX0NBRkU9bQpDT05GSUdfTVREX05BTkRfTkFORFNJTT1tCiMgQ09O
RklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfSElT
STUwNCBpcyBub3Qgc2V0CkNPTkZJR19NVERfT05FTkFORD1tCkNPTkZJR19NVERfT05FTkFO
RF9WRVJJRllfV1JJVEU9eQojIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKQ09ORklHX01URF9PTkVO
QU5EXzJYX1BST0dSQU09eQoKIwojIExQRERSICYgTFBERFIyIFBDTSBtZW1vcnkgZHJpdmVy
cwojCkNPTkZJR19NVERfTFBERFI9bQpDT05GSUdfTVREX1FJTkZPX1BST0JFPW0KQ09ORklH
X01URF9TUElfTk9SPW0KQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTPXkKQ09O
RklHX01URF9VQkk9bQpDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgpDT05GSUdf
TVREX1VCSV9CRUJfTElNSVQ9MjAKIyBDT05GSUdfTVREX1VCSV9GQVNUTUFQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldApDT05GSUdfTVREX1VCSV9C
TE9DSz15CkNPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQ
T1JUPW0KQ09ORklHX1BBUlBPUlRfUEM9bQpDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQojIENP
TkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAojIENPTkZJR19QQVJQT1JUX1BDX1NV
UEVSSU8gaXMgbm90IHNldApDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQojIENPTkZJR19Q
QVJQT1JUX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qg
c2V0CkNPTkZJR19QQVJQT1JUXzEyODQ9eQpDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQpDT05G
SUdfUE5QPXkKIyBDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIGlzIG5vdCBzZXQKCiMKIyBQ
cm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVWPXkKQ09ORklHX0JM
S19ERVZfTlVMTF9CTEs9bQpDT05GSUdfQkxLX0RFVl9GRD1tCiMgQ09ORklHX1BBUklERSBp
cyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJUDMyWFg9bQpDT05GSUdfWlJB
TT1tCkNPTkZJR19aUkFNX0xaNF9DT01QUkVTUz15CiMgQ09ORklHX1pSQU1fREVCVUcgaXMg
bm90IHNldApDT05GSUdfQkxLX0NQUV9DSVNTX0RBPW0KQ09ORklHX0NJU1NfU0NTSV9UQVBF
PXkKQ09ORklHX0JMS19ERVZfREFDOTYwPW0KQ09ORklHX0JMS19ERVZfVU1FTT1tCiMgQ09O
RklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xPT1A9
bQpDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVD04CiMgQ09ORklHX0JMS19ERVZfQ1JZ
UFRPTE9PUCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0RSQkQ9bQojIENPTkZJR19EUkJE
X0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX05CRD1tCkNPTkZJ
R19CTEtfREVWX05WTUU9bQpDT05GSUdfQkxLX0RFVl9TS0Q9bQpDT05GSUdfQkxLX0RFVl9P
U0Q9bQpDT05GSUdfQkxLX0RFVl9TWDg9bQpDT05GSUdfQkxLX0RFVl9SQU09bQpDT05GSUdf
QkxLX0RFVl9SQU1fQ09VTlQ9MTYKQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQ09O
RklHX0JMS19ERVZfUE1FTT1tCkNPTkZJR19DRFJPTV9QS1RDRFZEPW0KQ09ORklHX0NEUk9N
X1BLVENEVkRfQlVGRkVSUz04CiMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5v
dCBzZXQKQ09ORklHX0FUQV9PVkVSX0VUSD1tCkNPTkZJR19YRU5fQkxLREVWX0ZST05URU5E
PW0KQ09ORklHX1hFTl9CTEtERVZfQkFDS0VORD1tCkNPTkZJR19WSVJUSU9fQkxLPW0KIyBD
T05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1JCRD1tCkNPTkZJ
R19CTEtfREVWX1JTWFg9bQoKIwojIE1pc2MgZGV2aWNlcwojCkNPTkZJR19TRU5TT1JTX0xJ
UzNMVjAyRD1tCkNPTkZJR19BRDUyNVhfRFBPVD1tCkNPTkZJR19BRDUyNVhfRFBPVF9JMkM9
bQpDT05GSUdfQUQ1MjVYX0RQT1RfU1BJPW0KIyBDT05GSUdfRFVNTVlfSVJRIGlzIG5vdCBz
ZXQKQ09ORklHX0lCTV9BU009bQpDT05GSUdfUEhBTlRPTT1tCkNPTkZJR19TR0lfSU9DND1t
CkNPTkZJR19USUZNX0NPUkU9bQpDT05GSUdfVElGTV83WFgxPW0KQ09ORklHX0lDUzkzMlM0
MDE9bQpDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTPW0KQ09ORklHX0hQX0lMTz1tCkNPTkZJ
R19BUERTOTgwMkFMUz1tCkNPTkZJR19JU0wyOTAwMz1tCkNPTkZJR19JU0wyOTAyMD1tCkNP
TkZJR19TRU5TT1JTX1RTTDI1NTA9bQpDT05GSUdfU0VOU09SU19CSDE3ODA9bQpDT05GSUdf
U0VOU09SU19CSDE3NzA9bQpDT05GSUdfU0VOU09SU19BUERTOTkwWD1tCkNPTkZJR19ITUM2
MzUyPW0KQ09ORklHX0RTMTY4Mj1tCkNPTkZJR19USV9EQUM3NTEyPW0KQ09ORklHX1ZNV0FS
RV9CQUxMT09OPW0KIyBDT05GSUdfQk1QMDg1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JN
UDA4NV9TUEkgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1dJVENIX0ZTQTk0ODAgaXMgbm90
IHNldAojIENPTkZJR19MQVRUSUNFX0VDUDNfQ09ORklHIGlzIG5vdCBzZXQKIyBDT05GSUdf
U1JBTSBpcyBub3Qgc2V0CkNPTkZJR19DMlBPUlQ9bQpDT05GSUdfQzJQT1JUX0RVUkFNQVJf
MjE1MD1tCgojCiMgRUVQUk9NIHN1cHBvcnQKIwpDT05GSUdfRUVQUk9NX0FUMjQ9bQpDT05G
SUdfRUVQUk9NX0FUMjU9bQpDT05GSUdfRUVQUk9NX0xFR0FDWT1tCkNPTkZJR19FRVBST01f
TUFYNjg3NT1tCkNPTkZJR19FRVBST01fOTNDWDY9bQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKQ09ORklHX0NCNzEwX0NPUkU9bQojIENPTkZJR19DQjcxMF9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19DQjcxMF9ERUJVR19BU1NVTVBUSU9OUz15CgojCiMgVGV4YXMg
SW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUKIwojIENPTkZJ
R19USV9TVCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX0xJUzNfSTJDPW0KCiMKIyBBbHRl
cmEgRlBHQSBmaXJtd2FyZSBkb3dubG9hZCBtb2R1bGUKIwpDT05GSUdfQUxURVJBX1NUQVBM
PW0KQ09ORklHX0lOVEVMX01FST1tCkNPTkZJR19JTlRFTF9NRUlfTUU9bQojIENPTkZJR19J
TlRFTF9NRUlfVFhFIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9WTUNJPW0KCiMKIyBJbnRl
bCBNSUMgQnVzIERyaXZlcgojCkNPTkZJR19JTlRFTF9NSUNfQlVTPW0KCiMKIyBJbnRlbCBN
SUMgSG9zdCBEcml2ZXIKIwpDT05GSUdfSU5URUxfTUlDX0hPU1Q9bQoKIwojIEludGVsIE1J
QyBDYXJkIERyaXZlcgojCiMgQ09ORklHX0lOVEVMX01JQ19DQVJEIGlzIG5vdCBzZXQKIyBD
T05GSUdfR0VOV1FFIGlzIG5vdCBzZXQKIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NYTF9CQVNFIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfSURFPXkKIyBDT05GSUdfSURF
IGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX1NDU0lfTU9E
PW0KQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST1tCkNPTkZJR19TQ1NJX0RNQT15
CkNPTkZJR19TQ1NJX05FVExJTks9eQojIENPTkZJR19TQ1NJX01RX0RFRkFVTFQgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAoKIwojIFNDU0kgc3VwcG9y
dCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9bQpDT05G
SUdfQ0hSX0RFVl9TVD1tCkNPTkZJR19DSFJfREVWX09TU1Q9bQpDT05GSUdfQkxLX0RFVl9T
Uj1tCkNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CkNPTkZJR19DSFJfREVWX1NHPW0KQ09O
RklHX0NIUl9ERVZfU0NIPW0KQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KQ09ORklHX1NDU0lf
Q09OU1RBTlRTPXkKQ09ORklHX1NDU0lfTE9HR0lORz15CkNPTkZJR19TQ1NJX1NDQU5fQVNZ
TkM9eQoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCkNP
TkZJR19TQ1NJX0ZDX0FUVFJTPW0KQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQpDT05GSUdf
U0NTSV9TQVNfQVRUUlM9bQpDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KQ09ORklHX1NDU0lf
U0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CkNPTkZJR19TQ1NJX1NSUF9B
VFRSUz1tCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQ09ORklHX0lTQ1NJX1RDUD1tCkNPTkZJ
R19JU0NTSV9CT09UX1NZU0ZTPW0KQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0k9bQpDT05GSUdf
U0NTSV9DWEdCNF9JU0NTST1tCkNPTkZJR19TQ1NJX0JOWDJfSVNDU0k9bQpDT05GSUdfU0NT
SV9CTlgyWF9GQ09FPW0KQ09ORklHX0JFMklTQ1NJPW0KQ09ORklHX0JMS19ERVZfM1dfWFhY
WF9SQUlEPW0KQ09ORklHX1NDU0lfSFBTQT1tCkNPTkZJR19TQ1NJXzNXXzlYWFg9bQpDT05G
SUdfU0NTSV8zV19TQVM9bQpDT05GSUdfU0NTSV9BQ0FSRD1tCkNPTkZJR19TQ1NJX0FBQ1JB
SUQ9bQpDT05GSUdfU0NTSV9BSUM3WFhYPW0KQ09ORklHX0FJQzdYWFhfQ01EU19QRVJfREVW
SUNFPTgKQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQ09ORklHX0FJQzdY
WFhfREVCVUdfRU5BQkxFPXkKQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCkNPTkZJR19B
SUM3WFhYX1JFR19QUkVUVFlfUFJJTlQ9eQpDT05GSUdfU0NTSV9BSUM3OVhYPW0KQ09ORklH
X0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCkNPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZ
X01TPTE1MDAwCkNPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRT15CkNPTkZJR19BSUM3OVhY
X0RFQlVHX01BU0s9MApDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UPXkKQ09ORklH
X1NDU0lfQUlDOTRYWD1tCiMgQ09ORklHX0FJQzk0WFhfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU0NTSV9NVlNBUz1tCiMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQgaXMgbm90IHNldApDT05GSUdfU0NTSV9NVlVN
ST1tCkNPTkZJR19TQ1NJX0RQVF9JMk89bQpDT05GSUdfU0NTSV9BRFZBTlNZUz1tCkNPTkZJ
R19TQ1NJX0FSQ01TUj1tCkNPTkZJR19TQ1NJX0VTQVMyUj1tCkNPTkZJR19NRUdBUkFJRF9O
RVdHRU49eQpDT05GSUdfTUVHQVJBSURfTU09bQpDT05GSUdfTUVHQVJBSURfTUFJTEJPWD1t
CkNPTkZJR19NRUdBUkFJRF9MRUdBQ1k9bQpDT05GSUdfTUVHQVJBSURfU0FTPW0KQ09ORklH
X1NDU0lfTVBUMlNBUz1tCkNPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRT0xMjgKIyBDT05G
SUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldApDT05GSUdfU0NTSV9NUFQzU0FT
PW0KQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOAojIENPTkZJR19TQ1NJX01QVDNT
QVNfTE9HR0lORyBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU0hDRD1tCkNPTkZJR19TQ1NJ
X1VGU0hDRF9QQ0k9bQojIENPTkZJR19TQ1NJX1VGU0hDRF9QTEFURk9STSBpcyBub3Qgc2V0
CkNPTkZJR19TQ1NJX0hQVElPUD1tCkNPTkZJR19TQ1NJX0JVU0xPR0lDPW0KIyBDT05GSUdf
U0NTSV9GTEFTSFBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9QVlNDU0k9bQpDT05G
SUdfWEVOX1NDU0lfRlJPTlRFTkQ9bQpDT05GSUdfSFlQRVJWX1NUT1JBR0U9bQpDT05GSUdf
TElCRkM9bQpDT05GSUdfTElCRkNPRT1tCkNPTkZJR19GQ09FPW0KQ09ORklHX0ZDT0VfRk5J
Qz1tCkNPTkZJR19TQ1NJX0RNWDMxOTFEPW0KQ09ORklHX1NDU0lfRUFUQT1tCkNPTkZJR19T
Q1NJX0VBVEFfVEFHR0VEX1FVRVVFPXkKQ09ORklHX1NDU0lfRUFUQV9MSU5LRURfQ09NTUFO
RFM9eQpDT05GSUdfU0NTSV9FQVRBX01BWF9UQUdTPTE2CkNPTkZJR19TQ1NJX0ZVVFVSRV9E
T01BSU49bQpDT05GSUdfU0NTSV9HRFRIPW0KQ09ORklHX1NDU0lfSVNDST1tCkNPTkZJR19T
Q1NJX0lQUz1tCkNPTkZJR19TQ1NJX0lOSVRJTz1tCkNPTkZJR19TQ1NJX0lOSUExMDA9bQoj
IENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBz
ZXQKQ09ORklHX1NDU0lfU1RFWD1tCkNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPW0KQ09ORklH
X1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQpDT05GSUdfU0NTSV9TWU01
M0M4WFhfREVGQVVMVF9UQUdTPTE2CkNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02
NApDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CkNPTkZJR19TQ1NJX0lQUj1tCiMgQ09O
RklHX1NDU0lfSVBSX1RSQUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JUFJfRFVNUCBp
cyBub3Qgc2V0CkNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPW0KQ09ORklHX1NDU0lfUUxBX0ZD
PW0KQ09ORklHX1RDTV9RTEEyWFhYPW0KQ09ORklHX1NDU0lfUUxBX0lTQ1NJPW0KQ09ORklH
X1NDU0lfTFBGQz1tCiMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CkNP
TkZJR19TQ1NJX0RDMzk1eD1tCkNPTkZJR19TQ1NJX0FNNTNDOTc0PW0KQ09ORklHX1NDU0lf
V0Q3MTlYPW0KQ09ORklHX1NDU0lfREVCVUc9bQpDT05GSUdfU0NTSV9QTUNSQUlEPW0KQ09O
RklHX1NDU0lfUE04MDAxPW0KQ09ORklHX1NDU0lfQkZBX0ZDPW0KQ09ORklHX1NDU0lfVklS
VElPPW0KQ09ORklHX1NDU0lfQ0hFTFNJT19GQ09FPW0KQ09ORklHX1NDU0lfTE9XTEVWRUxf
UENNQ0lBPXkKQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KQ09ORklHX1BDTUNJQV9GRE9NQUlO
PW0KQ09ORklHX1BDTUNJQV9RTE9HSUM9bQpDT05GSUdfUENNQ0lBX1NZTTUzQzUwMD1tCkNP
TkZJR19TQ1NJX0RIPW0KQ09ORklHX1NDU0lfREhfUkRBQz1tCkNPTkZJR19TQ1NJX0RIX0hQ
X1NXPW0KQ09ORklHX1NDU0lfREhfRU1DPW0KQ09ORklHX1NDU0lfREhfQUxVQT1tCkNPTkZJ
R19TQ1NJX09TRF9JTklUSUFUT1I9bQpDT05GSUdfU0NTSV9PU0RfVUxEPW0KQ09ORklHX1ND
U0lfT1NEX0RQUklOVF9TRU5TRT0xCiMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0FUQT1tCiMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CkNP
TkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfQUNQST15CkNPTkZJR19TQVRB
X1pQT0REPXkKQ09ORklHX1NBVEFfUE1QPXkKCiMKIyBDb250cm9sbGVycyB3aXRoIG5vbi1T
RkYgbmF0aXZlIGludGVyZmFjZQojCkNPTkZJR19TQVRBX0FIQ0k9bQojIENPTkZJR19TQVRB
X0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5v
dCBzZXQKQ09ORklHX1NBVEFfQUNBUkRfQUhDST1tCkNPTkZJR19TQVRBX1NJTDI0PW0KQ09O
RklHX0FUQV9TRkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50
ZXJmYWNlCiMKQ09ORklHX1BEQ19BRE1BPW0KQ09ORklHX1NBVEFfUVNUT1I9bQpDT05GSUdf
U0FUQV9TWDQ9bQpDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRBIFNGRiBjb250cm9sbGVy
cyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPW0KQ09ORklHX1NBVEFfTVY9bQpDT05G
SUdfU0FUQV9OVj1tCkNPTkZJR19TQVRBX1BST01JU0U9bQpDT05GSUdfU0FUQV9TSUw9bQpD
T05GSUdfU0FUQV9TSVM9bQpDT05GSUdfU0FUQV9TVlc9bQpDT05GSUdfU0FUQV9VTEk9bQpD
T05GSUdfU0FUQV9WSUE9bQpDT05GSUdfU0FUQV9WSVRFU1NFPW0KCiMKIyBQQVRBIFNGRiBj
b250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX1BBVEFfQUxJPW0KQ09ORklHX1BBVEFf
QU1EPW0KQ09ORklHX1BBVEFfQVJUT1A9bQpDT05GSUdfUEFUQV9BVElJWFA9bQpDT05GSUdf
UEFUQV9BVFA4NjdYPW0KQ09ORklHX1BBVEFfQ01ENjRYPW0KIyBDT05GSUdfUEFUQV9DWVBS
RVNTIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfRUZBUj1tCkNPTkZJR19QQVRBX0hQVDM2Nj1t
CkNPTkZJR19QQVRBX0hQVDM3WD1tCiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfSVQ4MjEzPW0K
Q09ORklHX1BBVEFfSVQ4MjFYPW0KQ09ORklHX1BBVEFfSk1JQ1JPTj1tCkNPTkZJR19QQVRB
X01BUlZFTEw9bQpDT05GSUdfUEFUQV9ORVRDRUxMPW0KQ09ORklHX1BBVEFfTklOSkEzMj1t
CkNPTkZJR19QQVRBX05TODc0MTU9bQpDT05GSUdfUEFUQV9PTERQSUlYPW0KIyBDT05GSUdf
UEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfUERDMjAyN1g9bQpDT05GSUdf
UEFUQV9QRENfT0xEPW0KIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKQ09ORklH
X1BBVEFfUkRDPW0KQ09ORklHX1BBVEFfU0NIPW0KQ09ORklHX1BBVEFfU0VSVkVSV09SS1M9
bQpDT05GSUdfUEFUQV9TSUw2ODA9bQpDT05GSUdfUEFUQV9TSVM9bQpDT05GSUdfUEFUQV9U
T1NISUJBPW0KQ09ORklHX1BBVEFfVFJJRkxFWD1tCkNPTkZJR19QQVRBX1ZJQT1tCiMgQ09O
RklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CgojCiMgUElPLW9ubHkgU0ZGIGNvbnRyb2xs
ZXJzCiMKIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFf
TVBJSVg9bQpDT05GSUdfUEFUQV9OUzg3NDEwPW0KIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5v
dCBzZXQKQ09ORklHX1BBVEFfUENNQ0lBPW0KIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBu
b3Qgc2V0CkNPTkZJR19QQVRBX1JaMTAwMD1tCgojCiMgR2VuZXJpYyBmYWxsYmFjayAvIGxl
Z2FjeSBkcml2ZXJzCiMKIyBDT05GSUdfUEFUQV9BQ1BJIGlzIG5vdCBzZXQKQ09ORklHX0FU
QV9HRU5FUklDPW0KIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9
eQpDT05GSUdfQkxLX0RFVl9NRD1tCkNPTkZJR19NRF9MSU5FQVI9bQpDT05GSUdfTURfUkFJ
RDA9bQpDT05GSUdfTURfUkFJRDE9bQpDT05GSUdfTURfUkFJRDEwPW0KQ09ORklHX01EX1JB
SUQ0NTY9bQpDT05GSUdfTURfTVVMVElQQVRIPW0KQ09ORklHX01EX0ZBVUxUWT1tCiMgQ09O
RklHX01EX0NMVVNURVIgaXMgbm90IHNldApDT05GSUdfQkNBQ0hFPW0KIyBDT05GSUdfQkNB
Q0hFX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFX0NMT1NVUkVTX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CkNPTkZJR19CTEtfREVWX0RN
PW0KIyBDT05GSUdfRE1fTVFfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX0RNX0JVRklPPW0KQ09ORklHX0RNX0JJT19QUklTT049bQpD
T05GSUdfRE1fUEVSU0lTVEVOVF9EQVRBPW0KIyBDT05GSUdfRE1fREVCVUdfQkxPQ0tfU1RB
Q0tfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19ETV9DUllQVD1tCkNPTkZJR19ETV9TTkFQ
U0hPVD1tCkNPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCkNPTkZJR19ETV9DQUNIRT1t
CkNPTkZJR19ETV9DQUNIRV9NUT1tCkNPTkZJR19ETV9DQUNIRV9DTEVBTkVSPW0KQ09ORklH
X0RNX0VSQT1tCkNPTkZJR19ETV9NSVJST1I9bQpDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1t
CkNPTkZJR19ETV9SQUlEPW0KQ09ORklHX0RNX1pFUk89bQpDT05GSUdfRE1fTVVMVElQQVRI
PW0KQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCkNPTkZJR19ETV9NVUxUSVBBVEhfU1Q9bQpD
T05GSUdfRE1fREVMQVk9bQpDT05GSUdfRE1fVUVWRU5UPXkKQ09ORklHX0RNX0ZMQUtFWT1t
CkNPTkZJR19ETV9WRVJJVFk9bQpDT05GSUdfRE1fU1dJVENIPW0KQ09ORklHX0RNX0xPR19X
UklURVM9bQpDT05GSUdfVEFSR0VUX0NPUkU9bQpDT05GSUdfVENNX0lCTE9DSz1tCkNPTkZJ
R19UQ01fRklMRUlPPW0KQ09ORklHX1RDTV9QU0NTST1tCiMgQ09ORklHX1RDTV9VU0VSMiBp
cyBub3Qgc2V0CkNPTkZJR19MT09QQkFDS19UQVJHRVQ9bQpDT05GSUdfVENNX0ZDPW0KQ09O
RklHX0lTQ1NJX1RBUkdFVD1tCkNPTkZJR19TQlBfVEFSR0VUPW0KQ09ORklHX0ZVU0lPTj15
CkNPTkZJR19GVVNJT05fU1BJPW0KQ09ORklHX0ZVU0lPTl9GQz1tCkNPTkZJR19GVVNJT05f
U0FTPW0KQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOApDT05GSUdfRlVTSU9OX0NUTD1tCkNP
TkZJR19GVVNJT05fTEFOPW0KIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAoK
IwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKIwpDT05GSUdfRklSRVdJUkU9bQpD
T05GSUdfRklSRVdJUkVfT0hDST1tCkNPTkZJR19GSVJFV0lSRV9TQlAyPW0KQ09ORklHX0ZJ
UkVXSVJFX05FVD1tCkNPTkZJR19GSVJFV0lSRV9OT1NZPW0KQ09ORklHX01BQ0lOVE9TSF9E
UklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkK
Q09ORklHX01JST1tCkNPTkZJR19ORVRfQ09SRT15CkNPTkZJR19CT05ESU5HPW0KQ09ORklH
X0RVTU1ZPW0KQ09ORklHX0VRVUFMSVpFUj1tCkNPTkZJR19ORVRfRkM9eQpDT05GSUdfSUZC
PW0KQ09ORklHX05FVF9URUFNPW0KQ09ORklHX05FVF9URUFNX01PREVfQlJPQURDQVNUPW0K
Q09ORklHX05FVF9URUFNX01PREVfUk9VTkRST0JJTj1tCkNPTkZJR19ORVRfVEVBTV9NT0RF
X1JBTkRPTT1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCkNPTkZJR19O
RVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KQ09ORklHX01BQ1ZMQU49bQpDT05GSUdfTUFD
VlRBUD1tCkNPTkZJR19JUFZMQU49bQpDT05GSUdfVlhMQU49bQpDT05GSUdfTkVUQ09OU09M
RT1tCkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpDT05GSUdfTkVUUE9MTD15CkNPTkZJ
R19ORVRfUE9MTF9DT05UUk9MTEVSPXkKQ09ORklHX1RVTj1tCkNPTkZJR19WRVRIPW0KQ09O
RklHX1ZJUlRJT19ORVQ9bQpDT05GSUdfTkxNT049bQpDT05GSUdfU1VOR0VNX1BIWT1tCkNP
TkZJR19BUkNORVQ9bQpDT05GSUdfQVJDTkVUXzEyMDE9bQpDT05GSUdfQVJDTkVUXzEwNTE9
bQpDT05GSUdfQVJDTkVUX1JBVz1tCkNPTkZJR19BUkNORVRfQ0FQPW0KQ09ORklHX0FSQ05F
VF9DT005MHh4PW0KQ09ORklHX0FSQ05FVF9DT005MHh4SU89bQpDT05GSUdfQVJDTkVUX1JJ
TV9JPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMD1tCkNPTkZJR19BUkNORVRfQ09NMjAwMjBf
UENJPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DUz1tCkNPTkZJR19BVE1fRFJJVkVSUz15
CkNPTkZJR19BVE1fRFVNTVk9bQpDT05GSUdfQVRNX1RDUD1tCkNPTkZJR19BVE1fTEFOQUk9
bQpDT05GSUdfQVRNX0VOST1tCiMgQ09ORklHX0FUTV9FTklfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19BVE1fRU5JX1RVTkVfQlVSU1QgaXMgbm90IHNldApDT05GSUdfQVRNX0ZJUkVT
VFJFQU09bQpDT05GSUdfQVRNX1pBVE09bQojIENPTkZJR19BVE1fWkFUTV9ERUJVRyBpcyBu
b3Qgc2V0CkNPTkZJR19BVE1fTklDU1RBUj1tCkNPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VO
ST15CkNPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDU9eQpDT05GSUdfQVRNX0lEVDc3
MjUyPW0KIyBDT05GSUdfQVRNX0lEVDc3MjUyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldApDT05GSUdfQVRNX0lEVDc3MjUyX1VT
RV9TVU5JPXkKQ09ORklHX0FUTV9BTUJBU1NBRE9SPW0KIyBDT05GSUdfQVRNX0FNQkFTU0FE
T1JfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0hPUklaT049bQojIENPTkZJR19BVE1f
SE9SSVpPTl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fSUE9bQojIENPTkZJR19BVE1f
SUFfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0ZPUkUyMDBFPW0KIyBDT05GSUdfQVRN
X0ZPUkUyMDBFX1VTRV9UQVNLTEVUIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9GT1JFMjAwRV9U
WF9SRVRSWT0xNgpDT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKQ09ORklHX0FUTV9IRT1t
CkNPTkZJR19BVE1fSEVfVVNFX1NVTkk9eQpDT05GSUdfQVRNX1NPTE9TPW0KCiMKIyBDQUlG
IHRyYW5zcG9ydCBkcml2ZXJzCiMKQ09ORklHX1ZIT1NUX05FVD1tCkNPTkZJR19WSE9TVF9T
Q1NJPW0KQ09ORklHX1ZIT1NUX1JJTkc9bQpDT05GSUdfVkhPU1Q9bQoKIwojIERpc3RyaWJ1
dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVycwojCiMgQ09ORklHX05FVF9EU0FfTVY4
OEU2WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUg
aXMgbm90IHNldApDT05GSUdfRVRIRVJORVQ9eQpDT05GSUdfTURJTz1tCkNPTkZJR19ORVRf
VkVORE9SXzNDT009eQpDT05GSUdfUENNQ0lBXzNDNTc0PW0KQ09ORklHX1BDTUNJQV8zQzU4
OT1tCkNPTkZJR19WT1JURVg9bQpDT05GSUdfVFlQSE9PTj1tCkNPTkZJR19ORVRfVkVORE9S
X0FEQVBURUM9eQpDT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCkNPTkZJR19ORVRfVkVORE9S
X0FHRVJFPXkKQ09ORklHX0VUMTMxWD1tCkNPTkZJR19ORVRfVkVORE9SX0FMVEVPTj15CkNP
TkZJR19BQ0VOSUM9bQojIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQK
IyBDT05GSUdfQUxURVJBX1RTRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FNRD15
CkNPTkZJR19BTUQ4MTExX0VUSD1tCkNPTkZJR19QQ05FVDMyPW0KQ09ORklHX1BDTUNJQV9O
TUNMQU49bQojIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0FUSEVST1M9eQpDT05GSUdfQVRMMj1tCkNPTkZJR19BVEwxPW0KQ09ORklHX0FU
TDFFPW0KQ09ORklHX0FUTDFDPW0KQ09ORklHX0FMWD1tCkNPTkZJR19ORVRfQ0FERU5DRT15
CiMgQ09ORklHX01BQ0IgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTT15
CkNPTkZJR19CNDQ9bQpDT05GSUdfQjQ0X1BDSV9BVVRPU0VMRUNUPXkKQ09ORklHX0I0NF9Q
Q0lDT1JFX0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQ0X1BDST15CiMgQ09ORklHX0JDTUdFTkVU
IGlzIG5vdCBzZXQKQ09ORklHX0JOWDI9bQpDT05GSUdfQ05JQz1tCkNPTkZJR19USUdPTjM9
bQpDT05GSUdfQk5YMlg9bQpDT05GSUdfQk5YMlhfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRP
Ul9CUk9DQURFPXkKQ09ORklHX0JOQT1tCkNPTkZJR19ORVRfVkVORE9SX0NIRUxTSU89eQpD
T05GSUdfQ0hFTFNJT19UMT1tCkNPTkZJR19DSEVMU0lPX1QxXzFHPXkKQ09ORklHX0NIRUxT
SU9fVDM9bQpDT05GSUdfQ0hFTFNJT19UND1tCkNPTkZJR19DSEVMU0lPX1Q0X0RDQj15CiMg
Q09ORklHX0NIRUxTSU9fVDRfRkNPRSBpcyBub3Qgc2V0CkNPTkZJR19DSEVMU0lPX1Q0VkY9
bQpDT05GSUdfTkVUX1ZFTkRPUl9DSVNDTz15CkNPTkZJR19FTklDPW0KIyBDT05GSUdfQ1hf
RUNBVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9ERUM9eQpDT05GSUdfTkVUX1RVTElQPXkKQ09ORklHX0RFMjEwNFg9bQpDT05GSUdf
REUyMTA0WF9EU0w9MApDT05GSUdfVFVMSVA9bQojIENPTkZJR19UVUxJUF9NV0kgaXMgbm90
IHNldAojIENPTkZJR19UVUxJUF9NTUlPIGlzIG5vdCBzZXQKQ09ORklHX1RVTElQX05BUEk9
eQpDT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKIyBDT05GSUdfREU0WDUgaXMg
bm90IHNldApDT05GSUdfV0lOQk9ORF84NDA9bQpDT05GSUdfRE05MTAyPW0KQ09ORklHX1VM
STUyNlg9bQpDT05GSUdfUENNQ0lBX1hJUkNPTT1tCkNPTkZJR19ORVRfVkVORE9SX0RMSU5L
PXkKQ09ORklHX0RMMks9bQpDT05GSUdfU1VOREFOQ0U9bQojIENPTkZJR19TVU5EQU5DRV9N
TUlPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRU1VTEVYPXkKQ09ORklHX0JFMk5F
VD1tCkNPTkZJR19CRTJORVRfVlhMQU49eQpDT05GSUdfTkVUX1ZFTkRPUl9FWEFSPXkKQ09O
RklHX1MySU89bQpDT05GSUdfVlhHRT1tCiMgQ09ORklHX1ZYR0VfREVCVUdfVFJBQ0VfQUxM
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRlVKSVRTVT15CkNPTkZJR19QQ01DSUFf
Rk1WSjE4WD1tCkNPTkZJR19ORVRfVkVORE9SX0hQPXkKQ09ORklHX0hQMTAwPW0KQ09ORklH
X05FVF9WRU5ET1JfSU5URUw9eQpDT05GSUdfRTEwMD1tCkNPTkZJR19FMTAwMD1tCkNPTkZJ
R19FMTAwMEU9bQpDT05GSUdfSUdCPW0KQ09ORklHX0lHQl9IV01PTj15CkNPTkZJR19JR0Jf
RENBPXkKQ09ORklHX0lHQlZGPW0KQ09ORklHX0lYR0I9bQpDT05GSUdfSVhHQkU9bQpDT05G
SUdfSVhHQkVfVlhMQU49eQpDT05GSUdfSVhHQkVfSFdNT049eQpDT05GSUdfSVhHQkVfRENB
PXkKQ09ORklHX0lYR0JFX0RDQj15CkNPTkZJR19JWEdCRVZGPW0KQ09ORklHX0k0MEU9bQpD
T05GSUdfSTQwRV9WWExBTj15CkNPTkZJR19JNDBFX0RDQj15CkNPTkZJR19JNDBFX0ZDT0U9
eQpDT05GSUdfSTQwRVZGPW0KIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldApDT05GSUdfTkVU
X1ZFTkRPUl9JODI1WFg9eQpDT05GSUdfSVAxMDAwPW0KQ09ORklHX0pNRT1tCkNPTkZJR19O
RVRfVkVORE9SX01BUlZFTEw9eQojIENPTkZJR19NVk1ESU8gaXMgbm90IHNldApDT05GSUdf
U0tHRT1tCiMgQ09ORklHX1NLR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0tHRV9HRU5F
U0lTPXkKQ09ORklHX1NLWTI9bQojIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfTUVMTEFOT1g9eQpDT05GSUdfTUxYNF9FTj1tCkNPTkZJR19NTFg0
X0VOX0RDQj15CkNPTkZJR19NTFg0X0VOX1ZYTEFOPXkKQ09ORklHX01MWDRfQ09SRT1tCkNP
TkZJR19NTFg0X0RFQlVHPXkKQ09ORklHX01MWDVfQ09SRT1tCkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldApDT05GSUdfS1NaODg0
WF9QQ0k9bQpDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVA9eQojIENPTkZJR19FTkMyOEo2
MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQpDT05GSUdfTVlSSTEwR0U9
bQpDT05GSUdfTVlSSTEwR0VfRENBPXkKQ09ORklHX0ZFQUxOWD1tCkNPTkZJR19ORVRfVkVO
RE9SX05BVFNFTUk9eQpDT05GSUdfTkFUU0VNST1tCkNPTkZJR19OUzgzODIwPW0KQ09ORklH
X05FVF9WRU5ET1JfODM5MD15CkNPTkZJR19QQ01DSUFfQVhORVQ9bQpDT05GSUdfTkUyS19Q
Q0k9bQpDT05GSUdfUENNQ0lBX1BDTkVUPW0KQ09ORklHX05FVF9WRU5ET1JfTlZJRElBPXkK
Q09ORklHX0ZPUkNFREVUSD1tCkNPTkZJR19ORVRfVkVORE9SX09LST15CiMgQ09ORklHX0VU
SE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9QQUNLRVRfRU5HSU5FPXkKQ09ORklHX0hBTUFD
SEk9bQpDT05GSUdfWUVMTE9XRklOPW0KQ09ORklHX05FVF9WRU5ET1JfUUxPR0lDPXkKQ09O
RklHX1FMQTNYWFg9bQpDT05GSUdfUUxDTklDPW0KQ09ORklHX1FMQ05JQ19TUklPVj15CkNP
TkZJR19RTENOSUNfRENCPXkKQ09ORklHX1FMQ05JQ19WWExBTj15CkNPTkZJR19RTENOSUNf
SFdNT049eQpDT05GSUdfUUxHRT1tCkNPTkZJR19ORVRYRU5fTklDPW0KQ09ORklHX05FVF9W
RU5ET1JfUVVBTENPTU09eQpDT05GSUdfTkVUX1ZFTkRPUl9SRUFMVEVLPXkKIyBDT05GSUdf
QVRQIGlzIG5vdCBzZXQKQ09ORklHXzgxMzlDUD1tCkNPTkZJR184MTM5VE9PPW0KIyBDT05G
SUdfODEzOVRPT19QSU8gaXMgbm90IHNldApDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9
eQpDT05GSUdfODEzOVRPT184MTI5PXkKIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMg
bm90IHNldApDT05GSUdfUjgxNjk9bQpDT05GSUdfTkVUX1ZFTkRPUl9SREM9eQpDT05GSUdf
UjYwNDA9bQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9T
QU1TVU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZF
TkRPUl9TRUVRIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0lMQU49eQpDT05GSUdf
U0M5MjAzMT1tCkNPTkZJR19ORVRfVkVORE9SX1NJUz15CkNPTkZJR19TSVM5MDA9bQpDT05G
SUdfU0lTMTkwPW0KQ09ORklHX1NGQz1tCkNPTkZJR19TRkNfTVREPXkKQ09ORklHX1NGQ19N
Q0RJX01PTj15CkNPTkZJR19TRkNfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkK
Q09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCkNPTkZJR19FUElDMTAwPW0KIyBDT05GSUdfU01T
QzkxMVggaXMgbm90IHNldApDT05GSUdfU01TQzk0MjA9bQpDT05GSUdfTkVUX1ZFTkRPUl9T
VE1JQ1JPPXkKIyBDT05GSUdfU1RNTUFDX0VUSCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX1NVTj15CkNPTkZJR19IQVBQWU1FQUw9bQpDT05GSUdfU1VOR0VNPW0KQ09ORklHX0NB
U1NJTkk9bQpDT05GSUdfTklVPW0KQ09ORklHX05FVF9WRU5ET1JfVEVIVVRJPXkKQ09ORklH
X1RFSFVUST1tCkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05GSUdfVElfQ1BTV19BTEUg
aXMgbm90IHNldApDT05GSUdfVExBTj1tCkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CkNPTkZJ
R19WSUFfUkhJTkU9bQojIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSUFfVkVMT0NJVFk9bQpDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19X
SVpORVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT009eQpDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQpD
T05GSUdfRkREST15CkNPTkZJR19ERUZYWD1tCiMgQ09ORklHX0RFRlhYX01NSU8gaXMgbm90
IHNldApDT05GSUdfU0tGUD1tCkNPTkZJR19ISVBQST15CkNPTkZJR19ST0FEUlVOTkVSPW0K
IyBDT05GSUdfUk9BRFJVTk5FUl9MQVJHRV9SSU5HUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
U0IxMDAwPW0KQ09ORklHX1BIWUxJQj1tCgojCiMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwoj
CkNPTkZJR19BVDgwM1hfUEhZPW0KQ09ORklHX0FNRF9QSFk9bQpDT05GSUdfTUFSVkVMTF9Q
SFk9bQpDT05GSUdfREFWSUNPTV9QSFk9bQpDT05GSUdfUVNFTUlfUEhZPW0KQ09ORklHX0xY
VF9QSFk9bQpDT05GSUdfQ0lDQURBX1BIWT1tCkNPTkZJR19WSVRFU1NFX1BIWT1tCkNPTkZJ
R19TTVNDX1BIWT1tCkNPTkZJR19CUk9BRENPTV9QSFk9bQojIENPTkZJR19CQ003WFhYX1BI
WSBpcyBub3Qgc2V0CkNPTkZJR19CQ004N1hYX1BIWT1tCkNPTkZJR19JQ1BMVVNfUEhZPW0K
Q09ORklHX1JFQUxURUtfUEhZPW0KQ09ORklHX05BVElPTkFMX1BIWT1tCkNPTkZJR19TVEUx
MFhQPW0KQ09ORklHX0xTSV9FVDEwMTFDX1BIWT1tCkNPTkZJR19NSUNSRUxfUEhZPW0KIyBD
T05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5v
dCBzZXQKIyBDT05GSUdfTURJT19CQ01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUlD
UkVMX0tTODk5NU1BIGlzIG5vdCBzZXQKQ09ORklHX1BMSVA9bQpDT05GSUdfUFBQPW0KQ09O
RklHX1BQUF9CU0RDT01QPW0KQ09ORklHX1BQUF9ERUZMQVRFPW0KQ09ORklHX1BQUF9GSUxU
RVI9eQpDT05GSUdfUFBQX01QUEU9bQpDT05GSUdfUFBQX01VTFRJTElOSz15CkNPTkZJR19Q
UFBPQVRNPW0KQ09ORklHX1BQUE9FPW0KQ09ORklHX1BQVFA9bQpDT05GSUdfUFBQT0wyVFA9
bQpDT05GSUdfUFBQX0FTWU5DPW0KQ09ORklHX1BQUF9TWU5DX1RUWT1tCkNPTkZJR19TTElQ
PW0KQ09ORklHX1NMSEM9bQpDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKQ09ORklHX1NMSVBf
U01BUlQ9eQpDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKCiMKIyBIb3N0LXNpZGUgVVNCIHN1
cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnQKIwpDT05G
SUdfVVNCX05FVF9EUklWRVJTPW0KQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdF
VEg9bQpDT05GSUdfVVNCX1BFR0FTVVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdf
VVNCX1JUTDgxNTI9bQpDT05GSUdfVVNCX1VTQk5FVD1tCkNPTkZJR19VU0JfTkVUX0FYODgx
N1g9bQpDT05GSUdfVVNCX05FVF9BWDg4MTc5XzE3OEE9bQpDT05GSUdfVVNCX05FVF9DRENF
VEhFUj1tCkNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQpDT05GSUdfVVNCX05FVF9DRENfTkNN
PW0KQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ009bQpDT05GSUdfVVNCX05FVF9DRENf
TUJJTT1tCkNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCkNPTkZJR19VU0JfTkVUX1NSOTcwMD1t
CkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3NVhYPW0KQ09O
RklHX1VTQl9ORVRfU01TQzk1WFg9bQpDT05GSUdfVVNCX05FVF9HTDYyMEE9bQpDT05GSUdf
VVNCX05FVF9ORVQxMDgwPW0KQ09ORklHX1VTQl9ORVRfUExVU0I9bQpDT05GSUdfVVNCX05F
VF9NQ1M3ODMwPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCkNPTkZJR19VU0JfTkVU
X0NEQ19TVUJTRVQ9bQpDT05GSUdfVVNCX0FMSV9NNTYzMj15CkNPTkZJR19VU0JfQU4yNzIw
PXkKQ09ORklHX1VTQl9CRUxLSU49eQpDT05GSUdfVVNCX0FSTUxJTlVYPXkKQ09ORklHX1VT
Ql9FUFNPTjI4ODg9eQpDT05GSUdfVVNCX0tDMjE5MD15CkNPTkZJR19VU0JfTkVUX1pBVVJV
Uz1tCkNPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIPW0KQ09ORklHX1VTQl9ORVRfS0FMTUlB
PW0KQ09ORklHX1VTQl9ORVRfUU1JX1dXQU49bQpDT05GSUdfVVNCX0hTTz1tCkNPTkZJR19V
U0JfTkVUX0lOVDUxWDE9bQpDT05GSUdfVVNCX0NEQ19QSE9ORVQ9bQpDT05GSUdfVVNCX0lQ
SEVUSD1tCkNPTkZJR19VU0JfU0lFUlJBX05FVD1tCkNPTkZJR19VU0JfVkw2MDA9bQpDT05G
SUdfV0xBTj15CkNPTkZJR19QQ01DSUFfUkFZQ1M9bQpDT05GSUdfTElCRVJUQVNfVEhJTkZJ
Uk09bQojIENPTkZJR19MSUJFUlRBU19USElORklSTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJ
R19MSUJFUlRBU19USElORklSTV9VU0I9bQpDT05GSUdfQUlSTz1tCkNPTkZJR19BVE1FTD1t
CkNPTkZJR19QQ0lfQVRNRUw9bQpDT05GSUdfUENNQ0lBX0FUTUVMPW0KQ09ORklHX0FUNzZD
NTBYX1VTQj1tCkNPTkZJR19BSVJPX0NTPW0KQ09ORklHX1BDTUNJQV9XTDM1MDE9bQojIENP
TkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9aRDEyMDE9bQpDT05GSUdfVVNC
X05FVF9STkRJU19XTEFOPW0KQ09ORklHX1JUTDgxODA9bQpDT05GSUdfUlRMODE4Nz1tCkNP
TkZJR19SVEw4MTg3X0xFRFM9eQpDT05GSUdfQURNODIxMT1tCkNPTkZJR19NQUM4MDIxMV9I
V1NJTT1tCkNPTkZJR19NV0w4Sz1tCkNPTkZJR19BVEhfQ09NTU9OPW0KQ09ORklHX0FUSF9D
QVJEUz1tCiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVEg1Sz1tCiMg
Q09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINUtfVFJBQ0VSIGlz
IG5vdCBzZXQKQ09ORklHX0FUSDVLX1BDST15CkNPTkZJR19BVEg5S19IVz1tCkNPTkZJR19B
VEg5S19DT01NT049bQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBPUlQ9eQpDT05GSUdfQVRI
OUs9bQpDT05GSUdfQVRIOUtfUENJPXkKIyBDT05GSUdfQVRIOUtfQUhCIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIOUtfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFD
SyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CkNPTkZJR19BVEg5
S19SRktJTEw9eQojIENPTkZJR19BVEg5S19DSEFOTkVMX0NPTlRFWFQgaXMgbm90IHNldApD
T05GSUdfQVRIOUtfUENPRU09eQpDT05GSUdfQVRIOUtfSFRDPW0KIyBDT05GSUdfQVRIOUtf
SFRDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdfQ0FSTDkxNzA9bQpDT05GSUdfQ0FSTDkx
NzBfTEVEUz15CkNPTkZJR19DQVJMOTE3MF9XUEM9eQojIENPTkZJR19DQVJMOTE3MF9IV1JO
RyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0w9bQpDT05GSUdfQVRINktMX1NESU89bQpDT05G
SUdfQVRINktMX1VTQj1tCiMgQ09ORklHX0FUSDZLTF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FUSDZLTF9UUkFDSU5HIGlzIG5vdCBzZXQKQ09ORklHX0FSNTUyMz1tCkNPTkZJR19X
SUw2MjEwPW0KQ09ORklHX1dJTDYyMTBfSVNSX0NPUj15CkNPTkZJR19XSUw2MjEwX1RSQUNJ
Tkc9eQpDT05GSUdfQVRIMTBLPW0KQ09ORklHX0FUSDEwS19QQ0k9bQojIENPTkZJR19BVEgx
MEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVCVUdGUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0NOMzZYWCBp
cyBub3Qgc2V0CkNPTkZJR19CNDM9bQpDT05GSUdfQjQzX0JDTUE9eQpDT05GSUdfQjQzX1NT
Qj15CkNPTkZJR19CNDNfQlVTRVNfQkNNQV9BTkRfU1NCPXkKIyBDT05GSUdfQjQzX0JVU0VT
X0JDTUEgaXMgbm90IHNldAojIENPTkZJR19CNDNfQlVTRVNfU1NCIGlzIG5vdCBzZXQKQ09O
RklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkNPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNU
PXkKQ09ORklHX0I0M19QQ01DSUE9eQpDT05GSUdfQjQzX1NESU89eQpDT05GSUdfQjQzX0JD
TUFfUElPPXkKQ09ORklHX0I0M19QSU89eQpDT05GSUdfQjQzX1BIWV9HPXkKQ09ORklHX0I0
M19QSFlfTj15CkNPTkZJR19CNDNfUEhZX0xQPXkKQ09ORklHX0I0M19QSFlfSFQ9eQpDT05G
SUdfQjQzX0xFRFM9eQpDT05GSUdfQjQzX0hXUk5HPXkKIyBDT05GSUdfQjQzX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0I0M0xFR0FDWT1tCkNPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9T
RUxFQ1Q9eQpDT05GSUdfQjQzTEVHQUNZX1BDSUNPUkVfQVVUT1NFTEVDVD15CkNPTkZJR19C
NDNMRUdBQ1lfTEVEUz15CkNPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQpDT05GSUdfQjQzTEVH
QUNZX0RFQlVHPXkKQ09ORklHX0I0M0xFR0FDWV9ETUE9eQpDT05GSUdfQjQzTEVHQUNZX1BJ
Tz15CkNPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CiMgQ09ORklHX0I0M0xF
R0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0I0M0xFR0FDWV9QSU9fTU9ERSBp
cyBub3Qgc2V0CkNPTkZJR19CUkNNVVRJTD1tCkNPTkZJR19CUkNNU01BQz1tCkNPTkZJR19C
UkNNRk1BQz1tCkNPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDPXkKQ09ORklHX0JSQ01GTUFD
X1BST1RPX01TR0JVRj15CkNPTkZJR19CUkNNRk1BQ19TRElPPXkKQ09ORklHX0JSQ01GTUFD
X1VTQj15CkNPTkZJR19CUkNNRk1BQ19QQ0lFPXkKIyBDT05GSUdfQlJDTV9UUkFDSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNPTkZJR19IT1NUQVA9bQpD
T05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKIyBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFN
IGlzIG5vdCBzZXQKQ09ORklHX0hPU1RBUF9QTFg9bQpDT05GSUdfSE9TVEFQX1BDST1tCkNP
TkZJR19IT1NUQVBfQ1M9bQojIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKQ09ORklHX0lQ
VzIyMDA9bQpDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKQ09ORklHX0lQVzIyMDBfUkFESU9U
QVA9eQpDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUz15CkNPTkZJR19JUFcyMjAwX1FPUz15
CiMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfTElCSVBXPW0KIyBD
T05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lXTFdJRkk9bQpDT05GSUdf
SVdMV0lGSV9MRURTPXkKQ09ORklHX0lXTERWTT1tCkNPTkZJR19JV0xNVk09bQpDT05GSUdf
SVdMV0lGSV9PUE1PREVfTU9EVUxBUj15CiMgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVS
SU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMV0lGSV9VQVBTRCBpcyBub3Qgc2V0CgojCiMg
RGVidWdnaW5nIE9wdGlvbnMKIwojIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19JV0xF
R0FDWT1tCkNPTkZJR19JV0w0OTY1PW0KQ09ORklHX0lXTDM5NDU9bQoKIwojIGl3bDM5NDUg
LyBpd2w0OTY1IERlYnVnZ2luZyBPcHRpb25zCiMKIyBDT05GSUdfSVdMRUdBQ1lfREVCVUcg
aXMgbm90IHNldApDT05GSUdfTElCRVJUQVM9bQpDT05GSUdfTElCRVJUQVNfVVNCPW0KQ09O
RklHX0xJQkVSVEFTX0NTPW0KQ09ORklHX0xJQkVSVEFTX1NESU89bQojIENPTkZJR19MSUJF
UlRBU19TUEkgaXMgbm90IHNldAojIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19MSUJFUlRBU19NRVNIPXkKQ09ORklHX0hFUk1FUz1tCiMgQ09ORklHX0hFUk1F
U19QUklTTSBpcyBub3Qgc2V0CkNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CkNP
TkZJR19QTFhfSEVSTUVTPW0KQ09ORklHX1RNRF9IRVJNRVM9bQpDT05GSUdfTk9SVEVMX0hF
Uk1FUz1tCkNPTkZJR19QQ01DSUFfSEVSTUVTPW0KQ09ORklHX1BDTUNJQV9TUEVDVFJVTT1t
CkNPTkZJR19PUklOT0NPX1VTQj1tCkNPTkZJR19QNTRfQ09NTU9OPW0KQ09ORklHX1A1NF9V
U0I9bQpDT05GSUdfUDU0X1BDST1tCiMgQ09ORklHX1A1NF9TUEkgaXMgbm90IHNldApDT05G
SUdfUDU0X0xFRFM9eQpDT05GSUdfUlQyWDAwPW0KQ09ORklHX1JUMjQwMFBDST1tCkNPTkZJ
R19SVDI1MDBQQ0k9bQpDT05GSUdfUlQ2MVBDST1tCkNPTkZJR19SVDI4MDBQQ0k9bQpDT05G
SUdfUlQyODAwUENJX1JUMzNYWD15CkNPTkZJR19SVDI4MDBQQ0lfUlQzNVhYPXkKQ09ORklH
X1JUMjgwMFBDSV9SVDUzWFg9eQpDT05GSUdfUlQyODAwUENJX1JUMzI5MD15CkNPTkZJR19S
VDI1MDBVU0I9bQpDT05GSUdfUlQ3M1VTQj1tCkNPTkZJR19SVDI4MDBVU0I9bQpDT05GSUdf
UlQyODAwVVNCX1JUMzNYWD15CkNPTkZJR19SVDI4MDBVU0JfUlQzNVhYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDM1NzM9eQpDT05GSUdfUlQyODAwVVNCX1JUNTNYWD15CkNPTkZJR19SVDI4
MDBVU0JfUlQ1NVhYPXkKIyBDT05GSUdfUlQyODAwVVNCX1VOS05PV04gaXMgbm90IHNldApD
T05GSUdfUlQyODAwX0xJQj1tCkNPTkZJR19SVDI4MDBfTElCX01NSU89bQpDT05GSUdfUlQy
WDAwX0xJQl9NTUlPPW0KQ09ORklHX1JUMlgwMF9MSUJfUENJPW0KQ09ORklHX1JUMlgwMF9M
SUJfVVNCPW0KQ09ORklHX1JUMlgwMF9MSUI9bQpDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FS
RT15CkNPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15CkNPTkZJR19SVDJYMDBfTElCX0xFRFM9
eQojIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfUlRMX0NBUkRTPW0K
Q09ORklHX1JUTDgxOTJDRT1tCkNPTkZJR19SVEw4MTkyU0U9bQpDT05GSUdfUlRMODE5MkRF
PW0KQ09ORklHX1JUTDg3MjNBRT1tCkNPTkZJR19SVEw4NzIzQkU9bQpDT05GSUdfUlRMODE4
OEVFPW0KQ09ORklHX1JUTDgxOTJFRT1tCkNPTkZJR19SVEw4ODIxQUU9bQpDT05GSUdfUlRM
ODE5MkNVPW0KQ09ORklHX1JUTFdJRkk9bQpDT05GSUdfUlRMV0lGSV9QQ0k9bQpDT05GSUdf
UlRMV0lGSV9VU0I9bQojIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1JUTDgxOTJDX0NPTU1PTj1tCkNPTkZJR19SVEw4NzIzX0NPTU1PTj1tCkNPTkZJR19SVExC
VENPRVhJU1Q9bQojIENPTkZJR19XTF9USSBpcyBub3Qgc2V0CkNPTkZJR19aRDEyMTFSVz1t
CiMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVg9bQpD
T05GSUdfTVdJRklFWF9TRElPPW0KQ09ORklHX01XSUZJRVhfUENJRT1tCkNPTkZJR19NV0lG
SUVYX1VTQj1tCiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19SU0lfOTFYPW0K
Q09ORklHX1JTSV9ERUJVR0ZTPXkKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApDT05G
SUdfUlNJX1VTQj1tCgojCiMgV2lNQVggV2lyZWxlc3MgQnJvYWRiYW5kIGRldmljZXMKIwpD
T05GSUdfV0lNQVhfSTI0MDBNPW0KQ09ORklHX1dJTUFYX0kyNDAwTV9VU0I9bQpDT05GSUdf
V0lNQVhfSTI0MDBNX0RFQlVHX0xFVkVMPTgKQ09ORklHX1dBTj15CkNPTkZJR19MQU5NRURJ
QT1tCkNPTkZJR19IRExDPW0KQ09ORklHX0hETENfUkFXPW0KQ09ORklHX0hETENfUkFXX0VU
SD1tCkNPTkZJR19IRExDX0NJU0NPPW0KQ09ORklHX0hETENfRlI9bQpDT05GSUdfSERMQ19Q
UFA9bQojIENPTkZJR19IRExDX1gyNSBpcyBub3Qgc2V0CkNPTkZJR19QQ0kyMDBTWU49bQpD
T05GSUdfV0FOWEw9bQojIENPTkZJR19QQzMwMFRPTyBpcyBub3Qgc2V0CkNPTkZJR19GQVJT
WU5DPW0KQ09ORklHX0RTQ0M0PW0KQ09ORklHX0RTQ0M0X1BDSVNZTkM9eQpDT05GSUdfRFND
QzRfUENJX1JTVD15CkNPTkZJR19ETENJPW0KQ09ORklHX0RMQ0lfTUFYPTgKIyBDT05GSUdf
U0JOSSBpcyBub3Qgc2V0CkNPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9bQpDT05GSUdfWEVO
X05FVERFVl9GUk9OVEVORD1tCkNPTkZJR19YRU5fTkVUREVWX0JBQ0tFTkQ9bQpDT05GSUdf
Vk1YTkVUMz1tCkNPTkZJR19IWVBFUlZfTkVUPW0KQ09ORklHX0lTRE49eQojIENPTkZJR19J
U0ROX0k0TCBpcyBub3Qgc2V0CkNPTkZJR19JU0ROX0NBUEk9bQpDT05GSUdfQ0FQSV9UUkFD
RT15CkNPTkZJR19JU0ROX0NBUElfQ0FQSTIwPW0KQ09ORklHX0lTRE5fQ0FQSV9NSURETEVX
QVJFPXkKCiMKIyBDQVBJIGhhcmR3YXJlIGRyaXZlcnMKIwpDT05GSUdfQ0FQSV9BVk09eQpD
T05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0k9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQ
Q0lWND15CkNPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCkNPTkZJR19JU0ROX0RS
Vl9BVk1CMV9BVk1fQ1M9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfVDFQQ0k9bQpDT05GSUdf
SVNETl9EUlZfQVZNQjFfQzQ9bQpDT05GSUdfQ0FQSV9FSUNPTj15CkNPTkZJR19JU0ROX0RJ
VkFTPW0KQ09ORklHX0lTRE5fRElWQVNfQlJJUENJPXkKQ09ORklHX0lTRE5fRElWQVNfUFJJ
UENJPXkKQ09ORklHX0lTRE5fRElWQVNfRElWQUNBUEk9bQpDT05GSUdfSVNETl9ESVZBU19V
U0VSSURJPW0KQ09ORklHX0lTRE5fRElWQVNfTUFJTlQ9bQpDT05GSUdfSVNETl9EUlZfR0lH
QVNFVD1tCkNPTkZJR19HSUdBU0VUX0NBUEk9eQojIENPTkZJR19HSUdBU0VUX0RVTU1ZTEwg
aXMgbm90IHNldApDT05GSUdfR0lHQVNFVF9CQVNFPW0KQ09ORklHX0dJR0FTRVRfTTEwNT1t
CkNPTkZJR19HSUdBU0VUX00xMDE9bQojIENPTkZJR19HSUdBU0VUX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0hZU0ROPW0KQ09ORklHX0hZU0ROX0NBUEk9eQpDT05GSUdfTUlTRE49bQpD
T05GSUdfTUlTRE5fRFNQPW0KQ09ORklHX01JU0ROX0wxT0lQPW0KCiMKIyBtSVNETiBoYXJk
d2FyZSBkcml2ZXJzCiMKQ09ORklHX01JU0ROX0hGQ1BDST1tCkNPTkZJR19NSVNETl9IRkNN
VUxUST1tCkNPTkZJR19NSVNETl9IRkNVU0I9bQpDT05GSUdfTUlTRE5fQVZNRlJJVFo9bQpD
T05GSUdfTUlTRE5fU1BFRURGQVg9bQpDT05GSUdfTUlTRE5fSU5GSU5FT049bQpDT05GSUdf
TUlTRE5fVzY2OTI9bQojIENPTkZJR19NSVNETl9ORVRKRVQgaXMgbm90IHNldApDT05GSUdf
TUlTRE5fSVBBQz1tCkNPTkZJR19NSVNETl9JU0FSPW0KCiMKIyBJbnB1dCBkZXZpY2Ugc3Vw
cG9ydAojCkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KQ09ORklH
X0lOUFVUX1BPTExERVY9bQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD1tCiMgQ09ORklHX0lO
UFVUX01BVFJJWEtNQVAgaXMgbm90IHNldAoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwpD
T05GSUdfSU5QVVRfTU9VU0VERVY9eQpDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQpD
T05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNApDT05GSUdfSU5QVVRfTU9VU0VE
RVZfU0NSRUVOX1k9NzY4CkNPTkZJR19JTlBVVF9KT1lERVY9bQpDT05GSUdfSU5QVVRfRVZE
RVY9bQojIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNl
IERyaXZlcnMKIwpDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQURQ
NTU4OD1tCiMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODkgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfQVRLQkQ9eQojIENPTkZJR19LRVlCT0FSRF9RVDEwNzAgaXMgbm90IHNldApDT05G
SUdfS0VZQk9BUkRfUVQyMTYwPW0KQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KIyBDT05GSUdf
S0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0dQSU9fUE9MTEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0tFWUJPQVJEX1RDQTg0MTggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NQVRS
SVggaXMgbm90IHNldApDT05GSUdfS0VZQk9BUkRfTE04MzIzPW0KIyBDT05GSUdfS0VZQk9B
UkRfTE04MzMzIGlzIG5vdCBzZXQKQ09ORklHX0tFWUJPQVJEX01BWDczNTk9bQojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMg
bm90IHNldApDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KQ09ORklHX0tFWUJPQVJEX09QRU5D
T1JFUz1tCiMgQ09ORklHX0tFWUJPQVJEX1NBTVNVTkcgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfU1RPV0FXQVk9bQpDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KQ09ORklHX0tFWUJP
QVJEX1hUS0JEPW0KQ09ORklHX0lOUFVUX01PVVNFPXkKQ09ORklHX01PVVNFX1BTMj1tCkNP
TkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKQ09O
RklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQpDT05GSUdfTU9VU0VfUFMyX0NZUFJFU1M9eQpD
T05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5U
PXkKQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSD15CkNPTkZJR19NT1VTRV9QUzJfU0VOVEVM
SUM9eQojIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldApDT05GSUdfTU9V
U0VfUFMyX0ZPQ0FMVEVDSD15CiMgQ09ORklHX01PVVNFX1BTMl9WTU1PVVNFIGlzIG5vdCBz
ZXQKQ09ORklHX01PVVNFX1NFUklBTD1tCkNPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KQ09O
RklHX01PVVNFX0JDTTU5NzQ9bQpDT05GSUdfTU9VU0VfQ1lBUEE9bQojIENPTkZJR19NT1VT
RV9FTEFOX0kyQyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9WU1hYWEFBPW0KIyBDT05GSUdf
TU9VU0VfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDPW0KQ09O
RklHX01PVVNFX1NZTkFQVElDU19VU0I9bQpDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQpDT05G
SUdfSk9ZU1RJQ0tfQU5BTE9HPW0KQ09ORklHX0pPWVNUSUNLX0EzRD1tCkNPTkZJR19KT1lT
VElDS19BREk9bQpDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQpDT05GSUdfSk9ZU1RJQ0tfR0Yy
Sz1tCkNPTkZJR19KT1lTVElDS19HUklQPW0KQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQpD
T05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UPW0KQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUPW0K
Q09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQpDT05GSUdfSk9ZU1RJQ0tfVE1EQz1tCkNP
TkZJR19KT1lTVElDS19JRk9SQ0U9bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CkNP
TkZJR19KT1lTVElDS19JRk9SQ0VfMjMyPXkKQ09ORklHX0pPWVNUSUNLX1dBUlJJT1I9bQpD
T05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQpDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkI9bQpD
T05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQpD
T05GSUdfSk9ZU1RJQ0tfVFdJREpPWT1tCkNPTkZJR19KT1lTVElDS19aSEVOSFVBPW0KQ09O
RklHX0pPWVNUSUNLX0RCOT1tCkNPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KQ09ORklHX0pP
WVNUSUNLX1RVUkJPR1JBRlg9bQojIENPTkZJR19KT1lTVElDS19BUzUwMTEgaXMgbm90IHNl
dApDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVNUD1tCkNPTkZJR19KT1lTVElDS19YUEFEPW0KQ09O
RklHX0pPWVNUSUNLX1hQQURfRkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKQ09O
RklHX0pPWVNUSUNLX1dBTEtFUkEwNzAxPW0KQ09ORklHX0lOUFVUX1RBQkxFVD15CkNPTkZJ
R19UQUJMRVRfVVNCX0FDRUNBRD1tCkNPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCkNPTkZJ
R19UQUJMRVRfVVNCX0dUQ089bQpDT05GSUdfVEFCTEVUX1VTQl9IQU5XQU5HPW0KQ09ORklH
X1RBQkxFVF9VU0JfS0JUQUI9bQpDT05GSUdfVEFCTEVUX1NFUklBTF9XQUNPTTQ9bQpDT05G
SUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQpDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj1tCkNP
TkZJR19UT1VDSFNDUkVFTl9BRDc4Nzc9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5PW0K
Q09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkM9bQojIENPTkZJR19UT1VDSFNDUkVFTl9B
RDc4NzlfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCiMg
Q09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIgaXMgbm90IHNldAojIENPTkZJR19UT1VD
SFNDUkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RN
RzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JFIGlzIG5vdCBzZXQKQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk89bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJF
PW0KQ09ORklHX1RPVUNIU0NSRUVOX0VFVEk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRT
VT1tCiMgQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0lMSTIxMFggaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9
bQojIENPTkZJR19UT1VDSFNDUkVFTl9FTEFOIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NS
RUVOX0VMTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMT1tCiMgQ09ORklHX1RP
VUNIU0NSRUVOX1dBQ09NX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX01B
WDExODAxIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDA9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9NTVMxMTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fTVRP
VUNIPW0KQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9N
SzcxMj1tCkNPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVD1tCiMgQ09ORklHX1RPVUNIU0NS
RUVOX0VEVF9GVDVYMDYgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdI
VD1tCkNPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCiMgQ09ORklHX1RPVUNIU0NSRUVO
X1BJWENJUiBpcyBub3Qgc2V0CkNPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQpDT05GSUdf
VE9VQ0hTQ1JFRU5fV005NzA1PXkKQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15CkNPTkZJ
R19UT1VDSFNDUkVFTl9XTTk3MTM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lU
RT1tCkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkKQ09ORklHX1RPVUNI
U0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJCTz15CkNPTkZJ
R19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0RNQ19U
U0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VDSFND
UkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNP
TkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5f
VVNCX05FWElPPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQpDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCkNPTkZJR19UT1VDSFNDUkVFTl9UU0NfU0VSSU89
bQojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1IGlzIG5vdCBzZXQKQ09ORklHX1RPVUNI
U0NSRUVOX1RTQzIwMDc9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIgaXMgbm90IHNl
dApDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSNDA9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TWDg2
NTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1g9bQojIENPTkZJR19U
T1VDSFNDUkVFTl9aRk9SQ0UgaXMgbm90IHNldApDT05GSUdfSU5QVVRfTUlTQz15CiMgQ09O
RklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0JNQTE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lO
UFVUX1BDU1BLUj1tCiMgQ09ORklHX0lOUFVUX01NQTg0NTAgaXMgbm90IHNldAojIENPTkZJ
R19JTlBVVF9NUFUzMDUwIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FQQU5FTD1tCiMgQ09O
RklHX0lOUFVUX0dQMkEgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX0JFRVBFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVElMVF9QT0xMRUQgaXMgbm90IHNldApD
T05GSUdfSU5QVVRfQVRMQVNfQlROUz1tCkNPTkZJR19JTlBVVF9BVElfUkVNT1RFMj1tCkNP
TkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URT1tCiMgQ09ORklHX0lOUFVUX0tYVEo5IGlzIG5v
dCBzZXQKQ09ORklHX0lOUFVUX1BPV0VSTUFURT1tCkNPTkZJR19JTlBVVF9ZRUFMSU5LPW0K
Q09ORklHX0lOUFVUX0NNMTA5PW0KQ09ORklHX0lOUFVUX1VJTlBVVD1tCiMgQ09ORklHX0lO
UFVUX1BDRjg1NzQgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNP
REVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOUFVUX0lNU19QQ1UgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9DTUEzMDAwIGlz
IG5vdCBzZXQKQ09ORklHX0lOUFVUX1hFTl9LQkRERVZfRlJPTlRFTkQ9eQpDT05GSUdfSU5Q
VVRfSURFQVBBRF9TTElERUJBUj1tCiMgQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RSVjI2NjdfSEFQVElDUyBpcyBub3Qgc2V0Cgoj
CiMgSGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkKQ09ORklHX0FSQ0hfTUlH
SFRfSEFWRV9QQ19TRVJJTz15CkNPTkZJR19TRVJJT19JODA0Mj15CkNPTkZJR19TRVJJT19T
RVJQT1JUPW0KQ09ORklHX1NFUklPX0NUODJDNzEwPW0KQ09ORklHX1NFUklPX1BBUktCRD1t
CkNPTkZJR19TRVJJT19QQ0lQUzI9bQpDT05GSUdfU0VSSU9fTElCUFMyPXkKQ09ORklHX1NF
UklPX1JBVz1tCkNPTkZJR19TRVJJT19BTFRFUkFfUFMyPW0KIyBDT05GSUdfU0VSSU9fUFMy
TVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0FSQ19QUzIgaXMgbm90IHNldApDT05G
SUdfSFlQRVJWX0tFWUJPQVJEPW0KQ09ORklHX0dBTUVQT1JUPW0KQ09ORklHX0dBTUVQT1JU
X05TNTU4PW0KQ09ORklHX0dBTUVQT1JUX0w0PW0KQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9
bQpDT05GSUdfR0FNRVBPUlRfRk04MDE9bQoKIwojIENoYXJhY3RlciBkZXZpY2VzCiMKQ09O
RklHX1RUWT15CkNPTkZJR19WVD15CkNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CkNP
TkZJR19WVF9DT05TT0xFPXkKQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVA9eQpDT05GSUdfSFdf
Q09OU09MRT15CkNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQpDT05GSUdfVU5JWDk4
X1BUWVM9eQpDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiMgQ09ORklHX0xF
R0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CkNPTkZJ
R19ST0NLRVRQT1JUPW0KQ09ORklHX0NZQ0xBREVTPW0KIyBDT05GSUdfQ1laX0lOVFIgaXMg
bm90IHNldApDT05GSUdfTU9YQV9JTlRFTExJTz1tCkNPTkZJR19NT1hBX1NNQVJUSU89bQpD
T05GSUdfU1lOQ0xJTks9bQpDT05GSUdfU1lOQ0xJTktNUD1tCkNPTkZJR19TWU5DTElOS19H
VD1tCkNPTkZJR19OT1pPTUk9bQpDT05GSUdfSVNJPW0KQ09ORklHX05fSERMQz1tCkNPTkZJ
R19OX0dTTT1tCiMgQ09ORklHX1RSQUNFX1NJTksgaXMgbm90IHNldApDT05GSUdfREVWTUVN
PXkKIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpD
T05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09ORklHX1NFUklBTF84MjUwPXkKIyBDT05GSUdf
U0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF84MjUwX1BOUD15CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklHX1NFUklB
TF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFMXzgy
NTBfQ1M9bQpDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84
MjUwX1JVTlRJTUVfVUFSVFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05G
SUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CkNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9J
UlE9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EVz15CkNPTkZJR19TRVJJ
QUxfODI1MF9GSU5URUs9bQoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwoj
IENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgz
MTBYIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JF
X0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX0pTTT1tCiMgQ09ORklHX1NFUklBTF9TQ0NOWFAg
aXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9B
TFRFUkFfVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9JRlg2WDYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VSSUFMX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfUlAyPW0K
Q09ORklHX1NFUklBTF9SUDJfTlJfVUFSVFM9MzIKIyBDT05GSUdfU0VSSUFMX0ZTTF9MUFVB
UlQgaXMgbm90IHNldAojIENPTkZJR19UVFlfUFJJTlRLIGlzIG5vdCBzZXQKQ09ORklHX1BS
SU5URVI9bQojIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKQ09ORklHX1BQREVWPW0K
Q09ORklHX0hWQ19EUklWRVI9eQpDT05GSUdfSFZDX0lSUT15CkNPTkZJR19IVkNfWEVOPXkK
Q09ORklHX0hWQ19YRU5fRlJPTlRFTkQ9eQpDT05GSUdfVklSVElPX0NPTlNPTEU9bQpDT05G
SUdfSVBNSV9IQU5ETEVSPW0KIyBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCBpcyBub3Qgc2V0
CkNPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQpDT05GSUdfSVBNSV9TST1tCiMgQ09O
RklHX0lQTUlfU0lfUFJPQkVfREVGQVVMVFMgaXMgbm90IHNldAojIENPTkZJR19JUE1JX1NT
SUYgaXMgbm90IHNldApDT05GSUdfSVBNSV9XQVRDSERPRz1tCkNPTkZJR19JUE1JX1BPV0VS
T0ZGPW0KQ09ORklHX0hXX1JBTkRPTT1tCiMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVN
IGlzIG5vdCBzZXQKQ09ORklHX0hXX1JBTkRPTV9JTlRFTD1tCkNPTkZJR19IV19SQU5ET01f
QU1EPW0KQ09ORklHX0hXX1JBTkRPTV9WSUE9bQpDT05GSUdfSFdfUkFORE9NX1ZJUlRJTz1t
CkNPTkZJR19IV19SQU5ET01fVFBNPW0KQ09ORklHX05WUkFNPW0KQ09ORklHX1IzOTY0PW0K
Q09ORklHX0FQUExJQ09NPW0KCiMKIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKIwpDT05G
SUdfU1lOQ0xJTktfQ1M9bQpDT05GSUdfQ0FSRE1BTl80MDAwPW0KQ09ORklHX0NBUkRNQU5f
NDA0MD1tCkNPTkZJR19JUFdJUkVMRVNTPW0KQ09ORklHX01XQVZFPW0KQ09ORklHX1JBV19E
UklWRVI9bQpDT05GSUdfTUFYX1JBV19ERVZTPTI1NgpDT05GSUdfSFBFVD15CkNPTkZJR19I
UEVUX01NQVA9eQpDT05GSUdfSFBFVF9NTUFQX0RFRkFVTFQ9eQpDT05GSUdfSEFOR0NIRUNL
X1RJTUVSPW0KQ09ORklHX1RDR19UUE09bQpDT05GSUdfVENHX1RJUz1tCkNPTkZJR19UQ0df
VElTX0kyQ19BVE1FTD1tCkNPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTj1tCkNPTkZJR19U
Q0dfVElTX0kyQ19OVVZPVE9OPW0KQ09ORklHX1RDR19OU0M9bQpDT05GSUdfVENHX0FUTUVM
PW0KQ09ORklHX1RDR19JTkZJTkVPTj1tCkNPTkZJR19UQ0dfWEVOPW0KQ09ORklHX1RDR19D
UkI9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyND1tCkNPTkZJR19UQ0dfVElTX1NUMzNaUDI0
X0kyQz1tCiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfU1BJIGlzIG5vdCBzZXQKQ09ORklH
X1RFTENMT0NLPW0KQ09ORklHX0RFVlBPUlQ9eQojIENPTkZJR19YSUxMWUJVUyBpcyBub3Qg
c2V0CgojCiMgSTJDIHN1cHBvcnQKIwpDT05GSUdfSTJDPXkKQ09ORklHX0FDUElfSTJDX09Q
UkVHSU9OPXkKQ09ORklHX0kyQ19CT0FSRElORk89eQpDT05GSUdfSTJDX0NPTVBBVD15CkNP
TkZJR19JMkNfQ0hBUkRFVj1tCkNPTkZJR19JMkNfTVVYPW0KCiMKIyBNdWx0aXBsZXhlciBJ
MkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX01VWF9HUElPIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJDX01VWF9QQ0E5NTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QQ0E5
NTR4IGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QSU5DVFJMIGlzIG5vdCBzZXQKQ09O
RklHX0kyQ19IRUxQRVJfQVVUTz15CkNPTkZJR19JMkNfU01CVVM9bQpDT05GSUdfSTJDX0FM
R09CSVQ9bQpDT05GSUdfSTJDX0FMR09QQ0E9bQoKIwojIEkyQyBIYXJkd2FyZSBCdXMgc3Vw
cG9ydAojCgojCiMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0FMSTE1MzU9bQpDT05GSUdfSTJDX0FMSTE1NjM9bQpDT05GSUdfSTJDX0FMSTE1WDM9
bQpDT05GSUdfSTJDX0FNRDc1Nj1tCkNPTkZJR19JMkNfQU1ENzU2X1M0ODgyPW0KQ09ORklH
X0kyQ19BTUQ4MTExPW0KQ09ORklHX0kyQ19JODAxPW0KQ09ORklHX0kyQ19JU0NIPW0KQ09O
RklHX0kyQ19JU01UPW0KQ09ORklHX0kyQ19QSUlYND1tCkNPTkZJR19JMkNfTkZPUkNFMj1t
CkNPTkZJR19JMkNfTkZPUkNFMl9TNDk4NT1tCkNPTkZJR19JMkNfU0lTNTU5NT1tCkNPTkZJ
R19JMkNfU0lTNjMwPW0KQ09ORklHX0kyQ19TSVM5Nlg9bQpDT05GSUdfSTJDX1ZJQT1tCkNP
TkZJR19JMkNfVklBUFJPPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NDTUk9
bQoKIwojIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3Rl
bS1vbi1jaGlwKQojCiMgQ09ORklHX0kyQ19DQlVTX0dQSU8gaXMgbm90IHNldApDT05GSUdf
STJDX0RFU0lHTldBUkVfQ09SRT1tCkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT1t
CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QQ0k9bQojIENPTkZJR19JMkNfR1BJTyBpcyBub3Qg
c2V0CkNPTkZJR19JMkNfS0VNUExEPW0KQ09ORklHX0kyQ19PQ09SRVM9bQpDT05GSUdfSTJD
X1BDQV9QTEFURk9STT1tCiMgQ09ORklHX0kyQ19QWEFfUENJIGlzIG5vdCBzZXQKQ09ORklH
X0kyQ19TSU1URUM9bQojIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBFeHRl
cm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiMKQ09ORklHX0kyQ19ESU9MQU5fVTJD
PW0KQ09ORklHX0kyQ19QQVJQT1JUPW0KQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KQ09O
RklHX0kyQ19ST0JPVEZVWlpfT1NJRj1tCkNPTkZJR19JMkNfVEFPU19FVk09bQpDT05GSUdf
STJDX1RJTllfVVNCPW0KQ09ORklHX0kyQ19WSVBFUkJPQVJEPW0KCiMKIyBPdGhlciBJMkMv
U01CdXMgYnVzIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NUVUI9bQojIENPTkZJR19JMkNfU0xB
VkUgaXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApD
T05GSUdfU1BJX01BU1RFUj15CgojCiMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMK
IwojIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9CSVRCQU5HPW0K
Q09ORklHX1NQSV9CVVRURVJGTFk9bQojIENPTkZJR19TUElfQ0FERU5DRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9MTTcwX0xMUD1tCiMg
Q09ORklHX1NQSV9PQ19USU5ZIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9QWEEyWFhfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJ
X1NDMThJUzYwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9YQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAojIENPTkZJR19TUElfREVTSUdOV0FSRSBp
cyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1hc3RlcnMKIwojIENPTkZJR19TUElfU1BJ
REVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAojIENPTkZJ
R19TUE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSFNJIGlzIG5vdCBzZXQKCiMKIyBQUFMgc3Vw
cG9ydAojCkNPTkZJR19QUFM9bQojIENPTkZJR19QUFNfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19OVFBfUFBTIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBD
T05GSUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldApDT05GSUdfUFBTX0NMSUVOVF9M
RElTQz1tCkNPTkZJR19QUFNfQ0xJRU5UX1BBUlBPUlQ9bQojIENPTkZJR19QUFNfQ0xJRU5U
X0dQSU8gaXMgbm90IHNldAoKIwojIFBQUyBnZW5lcmF0b3JzIHN1cHBvcnQKIwoKIwojIFBU
UCBjbG9jayBzdXBwb3J0CiMKQ09ORklHX1BUUF8xNTg4X0NMT0NLPW0KCiMKIyBFbmFibGUg
UEhZTElCIGFuZCBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgdG8gc2VlIHRoZSBhZGRpdGlv
bmFsIGNsb2Nrcy4KIwpDT05GSUdfUElOQ1RSTD15CgojCiMgUGluIGNvbnRyb2xsZXJzCiMK
IyBDT05GSUdfREVCVUdfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfQU1E
IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9CQVlUUkFJTCBpcyBub3Qgc2V0CiMgQ09O
RklHX1BJTkNUUkxfQ0hFUlJZVklFVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VO
UklTRVBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElC
PXkKQ09ORklHX0dQSU9MSUI9eQpDT05GSUdfR1BJT19ERVZSRVM9eQpDT05GSUdfR1BJT19B
Q1BJPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU1lT
RlMgaXMgbm90IHNldAoKIwojIE1lbW9yeSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05G
SUdfR1BJT19EV0FQQiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fRjcxODhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19JQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAoj
IENPTkZJR19HUElPX0xZTlhQT0lOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TQ0gzMTFYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19WWDg1NSBpcyBub3Qgc2V0CgojCiMgSTJDIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5
NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05G
SUdfR1BJT19TWDE1MFggaXMgbm90IHNldAoKIwojIE1GRCBHUElPIGV4cGFuZGVycwojCkNP
TkZJR19HUElPX0tFTVBMRD1tCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19JTlRFTF9NSUQgaXMgbm90
IHNldApDT05GSUdfR1BJT19NTF9JT0g9bQojIENPTkZJR19HUElPX1JEQzMyMVggaXMgbm90
IHNldAoKIwojIFNQSSBHUElPIGV4cGFuZGVycwojCiMgQ09ORklHX0dQSU9fTUFYNzMwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAojIENPTkZJR19H
UElPX01DMzM4ODAgaXMgbm90IHNldAoKIwojIFVTQiBHUElPIGV4cGFuZGVycwojCkNPTkZJ
R19HUElPX1ZJUEVSQk9BUkQ9bQpDT05GSUdfVzE9bQpDT05GSUdfVzFfQ09OPXkKCiMKIyAx
LXdpcmUgQnVzIE1hc3RlcnMKIwpDT05GSUdfVzFfTUFTVEVSX01BVFJPWD1tCkNPTkZJR19X
MV9NQVNURVJfRFMyNDkwPW0KQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQojIENPTkZJR19X
MV9NQVNURVJfRFMxV00gaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBu
b3Qgc2V0CgojCiMgMS13aXJlIFNsYXZlcwojCkNPTkZJR19XMV9TTEFWRV9USEVSTT1tCkNP
TkZJR19XMV9TTEFWRV9TTUVNPW0KIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBz
ZXQKQ09ORklHX1cxX1NMQVZFX0RTMjQzMT1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQoj
IENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyOEUwNCBpcyBub3Qgc2V0CkNPTkZJR19XMV9TTEFWRV9CUTI3MDAwPW0KQ09ORklH
X1BPV0VSX1NVUFBMWT15CiMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVSSUNfQURDX0JB
VFRFUlkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BPV0VSIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKQ09ORklHX0JB
VFRFUllfU0JTPW0KIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcw
NDIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX01BWDg5MDMgaXMgbm90IHNldAojIENP
TkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDE1WCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNDE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVQg
aXMgbm90IHNldAojIENPTkZJR19QT1dFUl9BVlMgaXMgbm90IHNldApDT05GSUdfSFdNT049
eQpDT05GSUdfSFdNT05fVklEPW0KIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qg
c2V0CgojCiMgTmF0aXZlIGRyaXZlcnMKIwpDT05GSUdfU0VOU09SU19BQklUVUdVUlU9bQpD
T05GSUdfU0VOU09SU19BQklUVUdVUlUzPW0KIyBDT05GSUdfU0VOU09SU19BRDczMTQgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRDc0MTQ9bQpDT05GSUdfU0VOU09SU19BRDc0MTg9
bQpDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCkNP
TkZJR19TRU5TT1JTX0FETTEwMjY9bQpDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KQ09ORklH
X1NFTlNPUlNfQURNMTAzMT1tCkNPTkZJR19TRU5TT1JTX0FETTkyNDA9bQojIENPTkZJR19T
RU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTAgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRFQ3NDExPW0KQ09ORklHX1NFTlNPUlNfQURUNzQ2
Mj1tCkNPTkZJR19TRU5TT1JTX0FEVDc0NzA9bQpDT05GSUdfU0VOU09SU19BRFQ3NDc1PW0K
Q09ORklHX1NFTlNPUlNfQVNDNzYyMT1tCkNPTkZJR19TRU5TT1JTX0s4VEVNUD1tCkNPTkZJ
R19TRU5TT1JTX0sxMFRFTVA9bQpDT05GSUdfU0VOU09SU19GQU0xNUhfUE9XRVI9bQpDT05G
SUdfU0VOU09SU19BUFBMRVNNQz1tCkNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCkNPTkZJR19T
RU5TT1JTX0FUWFAxPW0KQ09ORklHX1NFTlNPUlNfRFM2MjA9bQpDT05GSUdfU0VOU09SU19E
UzE2MjE9bQpDT05GSUdfU0VOU09SU19JNUtfQU1CPW0KQ09ORklHX1NFTlNPUlNfRjcxODA1
Rj1tCkNPTkZJR19TRU5TT1JTX0Y3MTg4MkZHPW0KQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1t
CkNPTkZJR19TRU5TT1JTX0ZTQ0hNRD1tCkNPTkZJR19TRU5TT1JTX0dMNTE4U009bQpDT05G
SUdfU0VOU09SU19HTDUyMFNNPW0KQ09ORklHX1NFTlNPUlNfRzc2MEE9bQojIENPTkZJR19T
RU5TT1JTX0c3NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0dQSU9fRkFOIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19ISUg2MTMwIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNP
UlNfSUJNQUVNPW0KQ09ORklHX1NFTlNPUlNfSUJNUEVYPW0KIyBDT05GSUdfU0VOU09SU19J
SU9fSFdNT04gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1NTAwIGlzIG5vdCBzZXQK
Q09ORklHX1NFTlNPUlNfQ09SRVRFTVA9bQpDT05GSUdfU0VOU09SU19JVDg3PW0KQ09ORklH
X1NFTlNPUlNfSkM0Mj1tCiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldApD
T05GSUdfU0VOU09SU19MSU5FQUdFPW0KIyBDT05GSUdfU0VOU09SU19MVEMyOTQ1IGlzIG5v
dCBzZXQKQ09ORklHX1NFTlNPUlNfTFRDNDE1MT1tCkNPTkZJR19TRU5TT1JTX0xUQzQyMTU9
bQojIENPTkZJR19TRU5TT1JTX0xUQzQyMjIgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19M
VEM0MjQ1PW0KIyBDT05GSUdfU0VOU09SU19MVEM0MjYwIGlzIG5vdCBzZXQKQ09ORklHX1NF
TlNPUlNfTFRDNDI2MT1tCkNPTkZJR19TRU5TT1JTX01BWDExMTE9bQpDT05GSUdfU0VOU09S
U19NQVgxNjA2NT1tCkNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQpDT05GSUdfU0VOU09SU19N
QVgxNjY4PW0KIyBDT05GSUdfU0VOU09SU19NQVgxOTcgaXMgbm90IHNldApDT05GSUdfU0VO
U09SU19NQVg2NjM5PW0KQ09ORklHX1NFTlNPUlNfTUFYNjY0Mj1tCkNPTkZJR19TRU5TT1JT
X01BWDY2NTA9bQojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0hUVTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQ1AzMDIxIGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTUVORjIxQk1DX0hXTU9OPW0KQ09ORklHX1NFTlNP
UlNfQURDWFg9bQpDT05GSUdfU0VOU09SU19MTTYzPW0KQ09ORklHX1NFTlNPUlNfTE03MD1t
CkNPTkZJR19TRU5TT1JTX0xNNzM9bQpDT05GSUdfU0VOU09SU19MTTc1PW0KQ09ORklHX1NF
TlNPUlNfTE03Nz1tCkNPTkZJR19TRU5TT1JTX0xNNzg9bQpDT05GSUdfU0VOU09SU19MTTgw
PW0KQ09ORklHX1NFTlNPUlNfTE04Mz1tCkNPTkZJR19TRU5TT1JTX0xNODU9bQpDT05GSUdf
U0VOU09SU19MTTg3PW0KQ09ORklHX1NFTlNPUlNfTE05MD1tCkNPTkZJR19TRU5TT1JTX0xN
OTI9bQpDT05GSUdfU0VOU09SU19MTTkzPW0KIyBDT05GSUdfU0VOU09SU19MTTk1MjM0IGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTE05NTI0MT1tCkNPTkZJR19TRU5TT1JTX0xNOTUy
NDU9bQpDT05GSUdfU0VOU09SU19QQzg3MzYwPW0KQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1t
CkNPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SPW0KQ09ORklHX1NFTlNPUlNfTkNUNjY4
Mz1tCkNPTkZJR19TRU5TT1JTX05DVDY3NzU9bQojIENPTkZJR19TRU5TT1JTX05DVDc4MDIg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX05DVDc5MDQgaXMgbm90IHNldApDT05GSUdf
U0VOU09SU19QQ0Y4NTkxPW0KIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0hUMjE9bQojIENPTkZJ
R19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0lTNTU5NT1tCkNP
TkZJR19TRU5TT1JTX0RNRTE3Mzc9bQpDT05GSUdfU0VOU09SU19FTUMxNDAzPW0KQ09ORklH
X1NFTlNPUlNfRU1DMjEwMz1tCkNPTkZJR19TRU5TT1JTX0VNQzZXMjAxPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3TTE9bQpDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3QjM5Nz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2WFhfQ09NTU9OPW0KQ09O
RklHX1NFTlNPUlNfU0NINTYyNz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2MzY9bQpDT05GSUdf
U0VOU09SU19TTU02NjU9bQojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNl
dApDT05GSUdfU0VOU09SU19BRFMxMDE1PW0KQ09ORklHX1NFTlNPUlNfQURTNzgyOD1tCkNP
TkZJR19TRU5TT1JTX0FEUzc4NzE9bQpDT05GSUdfU0VOU09SU19BTUM2ODIxPW0KIyBDT05G
SUdfU0VOU09SU19JTkEyMDkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lOQTJYWCBp
cyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1RITUM1MD1tCkNPTkZJR19TRU5TT1JTX1RNUDEw
Mj1tCiMgQ09ORklHX1NFTlNPUlNfVE1QMTAzIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNf
VE1QNDAxPW0KQ09ORklHX1NFTlNPUlNfVE1QNDIxPW0KQ09ORklHX1NFTlNPUlNfVklBX0NQ
VVRFTVA9bQpDT05GSUdfU0VOU09SU19WSUE2ODZBPW0KQ09ORklHX1NFTlNPUlNfVlQxMjEx
PW0KQ09ORklHX1NFTlNPUlNfVlQ4MjMxPW0KQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCkNP
TkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQpDT05GSUdfU0VOU09SU19XODM3OTJEPW0KQ09ORklH
X1NFTlNPUlNfVzgzNzkzPW0KQ09ORklHX1NFTlNPUlNfVzgzNzk1PW0KIyBDT05GSUdfU0VO
U09SU19XODM3OTVfRkFOQ1RSTCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1c4M0w3ODVU
Uz1tCkNPTkZJR19TRU5TT1JTX1c4M0w3ODZORz1tCkNPTkZJR19TRU5TT1JTX1c4MzYyN0hG
PW0KQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05G
SUdfU0VOU09SU19BQ1BJX1BPV0VSPW0KQ09ORklHX1NFTlNPUlNfQVRLMDExMD1tCkNPTkZJ
R19USEVSTUFMPW0KQ09ORklHX1RIRVJNQUxfSFdNT049eQpDT05GSUdfVEhFUk1BTF9ERUZB
VUxUX0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJf
U0hBUkUgaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BB
Q0UgaXMgbm90IHNldApDT05GSUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CkNPTkZJR19U
SEVSTUFMX0dPVl9TVEVQX1dJU0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HPXkK
Q09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0U9eQojIENPTkZJR19USEVSTUFMX0VNVUxB
VElPTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9QT1dFUkNMQU1QPW0KQ09ORklHX1g4Nl9Q
S0dfVEVNUF9USEVSTUFMPW0KIyBDT05GSUdfSU5URUxfU09DX0RUU19USEVSTUFMIGlzIG5v
dCBzZXQKQ09ORklHX0lOVDM0MFhfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX1RIRVJNQUxfUkVM
PW0KCiMKIyBUZXhhcyBJbnN0cnVtZW50cyB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfV0FU
Q0hET0c9eQpDT05GSUdfV0FUQ0hET0dfQ09SRT15CiMgQ09ORklHX1dBVENIRE9HX05PV0FZ
T1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19T
T0ZUX1dBVENIRE9HPW0KQ09ORklHX01FTkYyMUJNQ19XQVRDSERPRz1tCiMgQ09ORklHX1hJ
TElOWF9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBREVOQ0VfV0FUQ0hET0cgaXMg
bm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1FVSVJF
X1dEVD1tCkNPTkZJR19BRFZBTlRFQ0hfV0RUPW0KQ09ORklHX0FMSU0xNTM1X1dEVD1tCkNP
TkZJR19BTElNNzEwMV9XRFQ9bQpDT05GSUdfRjcxODA4RV9XRFQ9bQpDT05GSUdfU1A1MTAw
X1RDTz1tCkNPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HPW0KQ09ORklHX0VVUk9URUNIX1dE
VD1tCkNPTkZJR19JQjcwMF9XRFQ9bQpDT05GSUdfSUJNQVNSPW0KQ09ORklHX1dBRkVSX1dE
VD1tCkNPTkZJR19JNjMwMEVTQl9XRFQ9bQpDT05GSUdfSUU2WFhfV0RUPW0KQ09ORklHX0lU
Q09fV0RUPW0KQ09ORklHX0lUQ09fVkVORE9SX1NVUFBPUlQ9eQpDT05GSUdfSVQ4NzEyRl9X
RFQ9bQpDT05GSUdfSVQ4N19XRFQ9bQpDT05GSUdfSFBfV0FUQ0hET0c9bQpDT05GSUdfS0VN
UExEX1dEVD1tCkNPTkZJR19IUFdEVF9OTUlfREVDT0RJTkc9eQpDT05GSUdfU0MxMjAwX1dE
VD1tCkNPTkZJR19QQzg3NDEzX1dEVD1tCkNPTkZJR19OVl9UQ089bQpDT05GSUdfNjBYWF9X
RFQ9bQpDT05GSUdfQ1BVNV9XRFQ9bQpDT05GSUdfU01TQ19TQ0gzMTFYX1dEVD1tCkNPTkZJ
R19TTVNDMzdCNzg3X1dEVD1tCkNPTkZJR19WSUFfV0RUPW0KQ09ORklHX1c4MzYyN0hGX1dE
VD1tCkNPTkZJR19XODM4NzdGX1dEVD1tCkNPTkZJR19XODM5NzdGX1dEVD1tCkNPTkZJR19N
QUNIWl9XRFQ9bQpDT05GSUdfU0JDX0VQWF9DM19XQVRDSERPRz1tCiMgQ09ORklHX01FTl9B
MjFfV0RUIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9XRFQ9bQoKIwojIFBDSS1iYXNlZCBXYXRj
aGRvZyBDYXJkcwojCkNPTkZJR19QQ0lQQ1dBVENIRE9HPW0KQ09ORklHX1dEVFBDST1tCgoj
CiMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiMKQ09ORklHX1VTQlBDV0FUQ0hET0c9bQpD
T05GSUdfU1NCX1BPU1NJQkxFPXkKCiMKIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKIwpD
T05GSUdfU1NCPW0KQ09ORklHX1NTQl9TUFJPTT15CkNPTkZJR19TU0JfQkxPQ0tJTz15CkNP
TkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15CkNPTkZJR19TU0JfUENJSE9TVD15CkNPTkZJ
R19TU0JfQjQzX1BDSV9CUklER0U9eQpDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9
eQpDT05GSUdfU1NCX1BDTUNJQUhPU1Q9eQpDT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxF
PXkKQ09ORklHX1NTQl9TRElPSE9TVD15CiMgQ09ORklHX1NTQl9TSUxFTlQgaXMgbm90IHNl
dAojIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldApDT05GSUdfU1NCX0RSSVZFUl9QQ0lD
T1JFX1BPU1NJQkxFPXkKQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15CiMgQ09ORklHX1NT
Ql9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19CQ01BX1BPU1NJQkxFPXkKCiMKIyBC
cm9hZGNvbSBzcGVjaWZpYyBBTUJBCiMKQ09ORklHX0JDTUE9bQpDT05GSUdfQkNNQV9CTE9D
S0lPPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQpDT05GSUdfQkNNQV9IT1NU
X1BDST15CiMgQ09ORklHX0JDTUFfSE9TVF9TT0MgaXMgbm90IHNldApDT05GSUdfQkNNQV9E
UklWRVJfUENJPXkKIyBDT05GSUdfQkNNQV9EUklWRVJfR01BQ19DTU4gaXMgbm90IHNldAoj
IENPTkZJR19CQ01BX0RSSVZFUl9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9ERUJV
RyBpcyBub3Qgc2V0CgojCiMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwojCkNPTkZJ
R19NRkRfQ09SRT1tCiMgQ09ORklHX01GRF9BUzM3MTEgaXMgbm90IHNldAojIENPTkZJR19Q
TUlDX0FEUDU1MjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQUFUMjg3MF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX0JDTTU5MFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FY
UDIwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9DUk9TX0VDIGlzIG5vdCBzZXQKIyBDT05G
SUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAojIENPTkZJR19NRkRfREE5MDUyX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X0RBOTA1NSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RMTjIgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUMxM1hYWF9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUMx
M1hYWF9JMkMgaXMgbm90IHNldAojIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKIyBD
T05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9JTlRFTF9RVUFSS19J
MkNfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19MUENfSUNIPW0KQ09ORklHX0xQQ19TQ0g9bQoj
IENPTkZJR19JTlRFTF9TT0NfUE1JQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9KQU5aX0NN
T0RJTyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfS0VNUExEPW0KIyBDT05GSUdfTUZEXzg4UE04
MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTgwNSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg3NzY5MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg3
Nzg0MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTA3IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg4OTk4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01UNjM5
NyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfTUVORjIxQk1DPW0KIyBDT05GSUdfRVpYX1BDQVAg
aXMgbm90IHNldApDT05GSUdfTUZEX1ZJUEVSQk9BUkQ9bQojIENPTkZJR19NRkRfUkVUVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1VD
QjE0MDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQK
Q09ORklHX01GRF9SVFNYX1BDST1tCiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldApD
T05GSUdfTUZEX1JUU1hfVVNCPW0KIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk41VDYxOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TRUNfQ09SRSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9TSTQ3NlhfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9TTTUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TS1k4MTQ1MiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9TTVNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMg
bm90IHNldAojIENPTkZJR19NRkRfU1lTQ09OIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJ
X0FNMzM1WF9UU0NBREMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTFAzOTQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQUxNQVMg
aXMgbm90IHNldAojIENPTkZJR19UUFM2MTA1WCBpcyBub3Qgc2V0CiMgQ09ORklHX1RQUzY1
MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjUwOTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjUyMTcgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfVFBTNjUyMTggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU4
NlggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfVFBTNjU5MTIgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTJfSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9UUFM4MDAzMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1RXTDYwNDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTDEy
NzNfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MTTM1MzMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9WWDg1NSBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUkla
T05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAojIENP
TkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTgzMVhfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQK
Q09ORklHX01FRElBX1NVUFBPUlQ9bQoKIwojIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiMK
Q09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUPXkKQ09ORklHX01FRElBX0FOQUxPR19UVl9T
VVBQT1JUPXkKQ09ORklHX01FRElBX0RJR0lUQUxfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJ
QV9SQURJT19TVVBQT1JUPXkKQ09ORklHX01FRElBX1NEUl9TVVBQT1JUPXkKQ09ORklHX01F
RElBX1JDX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQ09OVFJPTExFUj15CkNPTkZJR19WSURF
T19ERVY9bQojIENPTkZJR19WSURFT19WNEwyX1NVQkRFVl9BUEkgaXMgbm90IHNldApDT05G
SUdfVklERU9fVjRMMj1tCiMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19UVU5FUj1tCkNPTkZJR19WSURFT0JVRl9HRU49bQpDT05GSUdfVklERU9CVUZfRE1BX1NH
PW0KQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQpDT05GSUdfVklERU9CVUZfRFZCPW0KQ09O
RklHX1ZJREVPQlVGMl9DT1JFPW0KQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9bQpDT05GSUdf
VklERU9CVUYyX0RNQV9DT05USUc9bQpDT05GSUdfVklERU9CVUYyX1ZNQUxMT0M9bQpDT05G
SUdfVklERU9CVUYyX0RNQV9TRz1tCkNPTkZJR19WSURFT0JVRjJfRFZCPW0KQ09ORklHX0RW
Ql9DT1JFPW0KQ09ORklHX0RWQl9ORVQ9eQpDT05GSUdfVFRQQ0lfRUVQUk9NPW0KQ09ORklH
X0RWQl9NQVhfQURBUFRFUlM9OApDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTPXkKCiMKIyBN
ZWRpYSBkcml2ZXJzCiMKQ09ORklHX1JDX0NPUkU9bQpDT05GSUdfUkNfTUFQPW0KQ09ORklH
X1JDX0RFQ09ERVJTPXkKQ09ORklHX0xJUkM9bQpDT05GSUdfSVJfTElSQ19DT0RFQz1tCkNP
TkZJR19JUl9ORUNfREVDT0RFUj1tCkNPTkZJR19JUl9SQzVfREVDT0RFUj1tCkNPTkZJR19J
Ul9SQzZfREVDT0RFUj1tCkNPTkZJR19JUl9KVkNfREVDT0RFUj1tCkNPTkZJR19JUl9TT05Z
X0RFQ09ERVI9bQpDT05GSUdfSVJfU0FOWU9fREVDT0RFUj1tCkNPTkZJR19JUl9TSEFSUF9E
RUNPREVSPW0KQ09ORklHX0lSX01DRV9LQkRfREVDT0RFUj1tCkNPTkZJR19JUl9YTVBfREVD
T0RFUj1tCkNPTkZJR19SQ19ERVZJQ0VTPXkKQ09ORklHX1JDX0FUSV9SRU1PVEU9bQpDT05G
SUdfSVJfRU5FPW0KIyBDT05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9J
TU9OPW0KQ09ORklHX0lSX01DRVVTQj1tCkNPTkZJR19JUl9JVEVfQ0lSPW0KQ09ORklHX0lS
X0ZJTlRFSz1tCkNPTkZJR19JUl9OVVZPVE9OPW0KQ09ORklHX0lSX1JFRFJBVDM9bQpDT05G
SUdfSVJfU1RSRUFNWkFQPW0KQ09ORklHX0lSX1dJTkJPTkRfQ0lSPW0KQ09ORklHX0lSX0lH
T1JQTFVHVVNCPW0KQ09ORklHX0lSX0lHVUFOQT1tCkNPTkZJR19JUl9UVFVTQklSPW0KQ09O
RklHX1JDX0xPT1BCQUNLPW0KIyBDT05GSUdfSVJfR1BJT19DSVIgaXMgbm90IHNldApDT05G
SUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09ORklHX1VT
Ql9WSURFT19DTEFTUz1tCkNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQpD
T05GSUdfVVNCX0dTUENBPW0KQ09ORklHX1VTQl9NNTYwMj1tCkNPTkZJR19VU0JfU1RWMDZY
WD1tCkNPTkZJR19VU0JfR0w4NjA9bQpDT05GSUdfVVNCX0dTUENBX0JFTlE9bQpDT05GSUdf
VVNCX0dTUENBX0NPTkVYPW0KQ09ORklHX1VTQl9HU1BDQV9DUElBMT1tCkNPTkZJR19VU0Jf
R1NQQ0FfRFRDUzAzMz1tCkNPTkZJR19VU0JfR1NQQ0FfRVRPTVM9bQpDT05GSUdfVVNCX0dT
UENBX0ZJTkVQSVg9bQpDT05GSUdfVVNCX0dTUENBX0pFSUxJTko9bQpDT05GSUdfVVNCX0dT
UENBX0pMMjAwNUJDRD1tCkNPTkZJR19VU0JfR1NQQ0FfS0lORUNUPW0KQ09ORklHX1VTQl9H
U1BDQV9LT05JQ0E9bQpDT05GSUdfVVNCX0dTUENBX01BUlM9bQpDT05GSUdfVVNCX0dTUENB
X01SOTczMTBBPW0KQ09ORklHX1VTQl9HU1BDQV9OVzgwWD1tCkNPTkZJR19VU0JfR1NQQ0Ff
T1Y1MTk9bQpDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KQ09ORklHX1VTQl9HU1BDQV9PVjUz
NF85PW0KQ09ORklHX1VTQl9HU1BDQV9QQUMyMDc9bQpDT05GSUdfVVNCX0dTUENBX1BBQzcz
MDI9bQpDT05GSUdfVVNCX0dTUENBX1BBQzczMTE9bQpDT05GSUdfVVNCX0dTUENBX1NFNDAx
PW0KQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOD1tCkNPTkZJR19VU0JfR1NQQ0FfU045QzIw
WD1tCkNPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDA9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDU9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0ExNTI4PW0KQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1t
CkNPTkZJR19VU0JfR1NQQ0FfU1E5MDVDPW0KQ09ORklHX1VTQl9HU1BDQV9TUTkzMFg9bQpD
T05GSUdfVVNCX0dTUENBX1NUSzAxND1tCkNPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNT1tCkNP
TkZJR19VU0JfR1NQQ0FfU1RWMDY4MD1tCkNPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCkNP
TkZJR19VU0JfR1NQQ0FfVDYxMz1tCkNPTkZJR19VU0JfR1NQQ0FfVE9QUk89bQojIENPTkZJ
R19VU0JfR1NQQ0FfVE9VUFRFSyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMy
PW0KQ09ORklHX1VTQl9HU1BDQV9WQzAzMlg9bQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPW0K
Q09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJVD1tCkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9
bQpDT05GSUdfVVNCX1BXQz1tCiMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldApD
T05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CkNPTkZJR19WSURFT19DUElBMj1tCkNPTkZJ
R19VU0JfWlIzNjRYWD1tCkNPTkZJR19VU0JfU1RLV0VCQ0FNPW0KQ09ORklHX1VTQl9TMjI1
NT1tCkNPTkZJR19WSURFT19VU0JUVj1tCgojCiMgQW5hbG9nIFRWIFVTQiBkZXZpY2VzCiMK
Q09ORklHX1ZJREVPX1BWUlVTQjI9bQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNP
TkZJR19WSURFT19QVlJVU0IyX0RWQj15CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJ
RkMgaXMgbm90IHNldApDT05GSUdfVklERU9fSERQVlI9bQpDT05GSUdfVklERU9fVVNCVklT
SU9OPW0KQ09ORklHX1ZJREVPX1NUSzExNjBfQ09NTU9OPW0KQ09ORklHX1ZJREVPX1NUSzEx
NjBfQUM5Nz15CkNPTkZJR19WSURFT19TVEsxMTYwPW0KIyBDT05GSUdfVklERU9fR083MDA3
IGlzIG5vdCBzZXQKCiMKIyBBbmFsb2cvZGlnaXRhbCBUViBVU0IgZGV2aWNlcwojCkNPTkZJ
R19WSURFT19BVTA4Mjg9bQpDT05GSUdfVklERU9fQVUwODI4X1Y0TDI9eQpDT05GSUdfVklE
RU9fQVUwODI4X1JDPXkKQ09ORklHX1ZJREVPX0NYMjMxWFg9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYX0FMU0E9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9EVkI9bQpDT05GSUdfVklERU9fVE02MDAwPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9B
TFNBPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9EVkI9bQoKIwojIERpZ2l0YWwgVFYgVVNCIGRl
dmljZXMKIwpDT05GSUdfRFZCX1VTQj1tCiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90
IHNldApDT05GSUdfRFZCX1VTQl9BODAwPW0KQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0K
Q09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWT15CkNPTkZJR19EVkJfVVNCX0RJQlVT
Ql9NQz1tCkNPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQpDT05GSUdfRFZCX1VTQl9VTVRfMDEw
PW0KQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQpDT05GSUdfRFZCX1VTQl9NOTIwWD1tCkNPTkZJ
R19EVkJfVVNCX0RJR0lUVj1tCkNPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCkNPTkZJR19EVkJf
VVNCX1ZQNzAyWD1tCkNPTkZJR19EVkJfVVNCX0dQOFBTSz1tCkNPTkZJR19EVkJfVVNCX05P
VkFfVF9VU0IyPW0KQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KQ09ORklHX0RWQl9VU0JfRFRU
MjAwVT1tCkNPTkZJR19EVkJfVVNCX09QRVJBMT1tCkNPTkZJR19EVkJfVVNCX0FGOTAwNT1t
CkNPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQpDT05GSUdfRFZCX1VTQl9QQ1RWNDUy
RT1tCkNPTkZJR19EVkJfVVNCX0RXMjEwMj1tCkNPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDI9
bQpDT05GSUdfRFZCX1VTQl9EVFY1MTAwPW0KQ09ORklHX0RWQl9VU0JfRlJJSU89bQpDT05G
SUdfRFZCX1VTQl9BWjYwMjc9bQpDT05GSUdfRFZCX1VTQl9URUNITklTQVRfVVNCMj1tCkNP
TkZJR19EVkJfVVNCX1YyPW0KQ09ORklHX0RWQl9VU0JfQUY5MDE1PW0KQ09ORklHX0RWQl9V
U0JfQUY5MDM1PW0KQ09ORklHX0RWQl9VU0JfQU5ZU0VFPW0KQ09ORklHX0RWQl9VU0JfQVU2
NjEwPW0KQ09ORklHX0RWQl9VU0JfQVo2MDA3PW0KQ09ORklHX0RWQl9VU0JfQ0U2MjMwPW0K
Q09ORklHX0RWQl9VU0JfRUMxNjg9bQpDT05GSUdfRFZCX1VTQl9HTDg2MT1tCkNPTkZJR19E
VkJfVVNCX0xNRTI1MTA9bQpDT05GSUdfRFZCX1VTQl9NWEwxMTFTRj1tCkNPTkZJR19EVkJf
VVNCX1JUTDI4WFhVPW0KQ09ORklHX0RWQl9VU0JfRFZCU0tZPW0KQ09ORklHX0RWQl9UVFVT
Ql9CVURHRVQ9bQpDT05GSUdfRFZCX1RUVVNCX0RFQz1tCkNPTkZJR19TTVNfVVNCX0RSVj1t
CkNPTkZJR19EVkJfQjJDMl9GTEVYQ09QX1VTQj1tCiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhD
T1BfVVNCX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BUzEwMj1tCgojCiMgV2ViY2Ft
LCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVTQiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhY
WD1tCkNPTkZJR19WSURFT19FTTI4WFhfVjRMMj1tCkNPTkZJR19WSURFT19FTTI4WFhfQUxT
QT1tCkNPTkZJR19WSURFT19FTTI4WFhfRFZCPW0KQ09ORklHX1ZJREVPX0VNMjhYWF9SQz1t
CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0IgZGV2aWNlcwojCkNPTkZJR19VU0Jf
QUlSU1BZPW0KQ09ORklHX1VTQl9IQUNLUkY9bQpDT05GSUdfVVNCX01TSTI1MDA9bQpDT05G
SUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1cmUgc3VwcG9ydAojCkNP
TkZJR19WSURFT19NRVlFPW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0
CiMKQ09ORklHX1ZJREVPX0lWVFY9bQpDT05GSUdfVklERU9fSVZUVl9BTFNBPW0KQ09ORklH
X1ZJREVPX0ZCX0lWVFY9bQpDT05GSUdfVklERU9fWk9SQU49bQpDT05GSUdfVklERU9fWk9S
QU5fREMzMD1tCkNPTkZJR19WSURFT19aT1JBTl9aUjM2MDYwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0JVWj1tCkNPTkZJR19WSURFT19aT1JBTl9EQzEwPW0KQ09ORklHX1ZJREVPX1pPUkFO
X0xNTDMzPW0KQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzUjEwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0FWUzZFWUVTPW0KQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkk9bQpDT05GSUdfVklE
RU9fSEVYSVVNX09SSU9OPW0KQ09ORklHX1ZJREVPX01YQj1tCkNPTkZJR19WSURFT19TT0xP
NlgxMD1tCkNPTkZJR19WSURFT19UVzY4PW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZy9o
eWJyaWQgVFYgc3VwcG9ydAojCkNPTkZJR19WSURFT19DWDE4PW0KQ09ORklHX1ZJREVPX0NY
MThfQUxTQT1tCkNPTkZJR19WSURFT19DWDIzODg1PW0KQ09ORklHX01FRElBX0FMVEVSQV9D
ST1tCiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldApDT05GSUdfVklERU9fQ1g4
OD1tCkNPTkZJR19WSURFT19DWDg4X0FMU0E9bQpDT05GSUdfVklERU9fQ1g4OF9CTEFDS0JJ
UkQ9bQpDT05GSUdfVklERU9fQ1g4OF9EVkI9bQpDT05GSUdfVklERU9fQ1g4OF9FTkFCTEVf
VlAzMDU0PXkKQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KQ09ORklHX1ZJREVPX0NYODhf
TVBFRz1tCkNPTkZJR19WSURFT19CVDg0OD1tCkNPTkZJR19EVkJfQlQ4WFg9bQpDT05GSUdf
VklERU9fU0FBNzEzND1tCkNPTkZJR19WSURFT19TQUE3MTM0X0FMU0E9bQpDT05GSUdfVklE
RU9fU0FBNzEzNF9SQz15CkNPTkZJR19WSURFT19TQUE3MTM0X0RWQj1tCkNPTkZJR19WSURF
T19TQUE3MTY0PW0KCiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJ
R19EVkJfQVY3MTEwX0lSPXkKQ09ORklHX0RWQl9BVjcxMTA9bQpDT05GSUdfRFZCX0FWNzEx
MF9PU0Q9eQpDT05GSUdfRFZCX0JVREdFVF9DT1JFPW0KQ09ORklHX0RWQl9CVURHRVQ9bQpD
T05GSUdfRFZCX0JVREdFVF9DST1tCkNPTkZJR19EVkJfQlVER0VUX0FWPW0KQ09ORklHX0RW
Ql9CVURHRVRfUEFUQ0g9bQpDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQojIENPTkZJ
R19EVkJfQjJDMl9GTEVYQ09QX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUExV
VE8yPW0KQ09ORklHX0RWQl9ETTExMDU9bQpDT05GSUdfRFZCX1BUMT1tCkNPTkZJR19EVkJf
UFQzPW0KQ09ORklHX01BTlRJU19DT1JFPW0KQ09ORklHX0RWQl9NQU5USVM9bQpDT05GSUdf
RFZCX0hPUFBFUj1tCkNPTkZJR19EVkJfTkdFTkU9bQpDT05GSUdfRFZCX0REQlJJREdFPW0K
Q09ORklHX0RWQl9TTUlQQ0lFPW0KQ09ORklHX1Y0TF9QTEFURk9STV9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX0NBRkVfQ0NJQz1tCkNPTkZJR19WSURFT19WSUFfQ0FNRVJBPW0KIyBDT05G
SUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CkNPTkZJR19WNExfTUVNMk1FTV9EUklWRVJTPXkK
IyBDT05GSUdfVklERU9fTUVNMk1FTV9ERUlOVEVSTEFDRSBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX1NIX1ZFVSBpcyBub3Qgc2V0CkNPTkZJR19WNExfVEVTVF9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX1ZJVklEPW0KIyBDT05GSUdfVklERU9fVklNMk0gaXMgbm90IHNldAoKIwoj
IFN1cHBvcnRlZCBNTUMvU0RJTyBhZGFwdGVycwojCkNPTkZJR19TTVNfU0RJT19EUlY9bQpD
T05GSUdfUkFESU9fQURBUFRFUlM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD1tCkNPTkZJR19S
QURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD1tCiMgQ09ORklHX0kyQ19TSTQ3MFgg
aXMgbm90IHNldAojIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldApDT05GSUdfVVNC
X01SODAwPW0KQ09ORklHX1VTQl9EU0JSPW0KQ09ORklHX1JBRElPX01BWElSQURJTz1tCkNP
TkZJR19SQURJT19TSEFSSz1tCkNPTkZJR19SQURJT19TSEFSSzI9bQpDT05GSUdfVVNCX0tF
RU5FPW0KQ09ORklHX1VTQl9SQVJFTU9OTz1tCkNPTkZJR19VU0JfTUE5MDE9bQojIENPTkZJ
R19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fU0FBNzcwNkggaXMg
bm90IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFE
SU9fV0wxMjczIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBXTDEyOHggRk0g
ZHJpdmVyIChTVCBiYXNlZCkKIwoKIwojIFN1cHBvcnRlZCBGaXJlV2lyZSAoSUVFRSAxMzk0
KSBBZGFwdGVycwojCkNPTkZJR19EVkJfRklSRURUVj1tCkNPTkZJR19EVkJfRklSRURUVl9J
TlBVVD15CkNPTkZJR19NRURJQV9DT01NT05fT1BUSU9OUz15CgojCiMgY29tbW9uIGRyaXZl
ciBvcHRpb25zCiMKQ09ORklHX1ZJREVPX0NYMjM0MVg9bQpDT05GSUdfVklERU9fVFZFRVBS
T009bQpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT1tCkNPTkZJR19EVkJfQjJDMl9GTEVYQ09Q
PW0KQ09ORklHX1ZJREVPX1NBQTcxNDY9bQpDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCkNP
TkZJR19TTVNfU0lBTk9fTURUVj1tCkNPTkZJR19TTVNfU0lBTk9fUkM9eQojIENPTkZJR19T
TVNfU0lBTk9fREVCVUdGUyBpcyBub3Qgc2V0CgojCiMgTWVkaWEgYW5jaWxsYXJ5IGRyaXZl
cnMgKHR1bmVycywgc2Vuc29ycywgaTJjLCBmcm9udGVuZHMpCiMKQ09ORklHX01FRElBX1NV
QkRSVl9BVVRPU0VMRUNUPXkKQ09ORklHX01FRElBX0FUVEFDSD15CkNPTkZJR19WSURFT19J
Ul9JMkM9bQoKIwojIEF1ZGlvIGRlY29kZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKIwpD
T05GSUdfVklERU9fVFZBVURJTz1tCkNPTkZJR19WSURFT19UREE3NDMyPW0KQ09ORklHX1ZJ
REVPX1REQTk4NDA9bQpDT05GSUdfVklERU9fVEVBNjQxNUM9bQpDT05GSUdfVklERU9fVEVB
NjQyMD1tCkNPTkZJR19WSURFT19NU1AzNDAwPW0KQ09ORklHX1ZJREVPX0NTNTM0NT1tCkNP
TkZJR19WSURFT19DUzUzTDMyQT1tCkNPTkZJR19WSURFT19XTTg3NzU9bQpDT05GSUdfVklE
RU9fV004NzM5PW0KQ09ORklHX1ZJREVPX1ZQMjdTTVBYPW0KCiMKIyBSRFMgZGVjb2RlcnMK
IwpDT05GSUdfVklERU9fU0FBNjU4OD1tCgojCiMgVmlkZW8gZGVjb2RlcnMKIwpDT05GSUdf
VklERU9fQlQ4MTk9bQpDT05GSUdfVklERU9fQlQ4NTY9bQpDT05GSUdfVklERU9fQlQ4NjY9
bQpDT05GSUdfVklERU9fS1MwMTI3PW0KQ09ORklHX1ZJREVPX1NBQTcxMTA9bQpDT05GSUdf
VklERU9fU0FBNzExWD1tCkNPTkZJR19WSURFT19UVlA1MTUwPW0KQ09ORklHX1ZJREVPX1ZQ
WDMyMjA9bQoKIwojIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwojCkNPTkZJR19WSURFT19T
QUE3MTdYPW0KQ09ORklHX1ZJREVPX0NYMjU4NDA9bQoKIwojIFZpZGVvIGVuY29kZXJzCiMK
Q09ORklHX1ZJREVPX1NBQTcxMjc9bQpDT05GSUdfVklERU9fU0FBNzE4NT1tCkNPTkZJR19W
SURFT19BRFY3MTcwPW0KQ09ORklHX1ZJREVPX0FEVjcxNzU9bQoKIwojIENhbWVyYSBzZW5z
b3IgZGV2aWNlcwojCkNPTkZJR19WSURFT19PVjc2NzA9bQpDT05GSUdfVklERU9fTVQ5VjAx
MT1tCgojCiMgRmxhc2ggZGV2aWNlcwojCgojCiMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMK
IwpDT05GSUdfVklERU9fVVBENjQwMzFBPW0KQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KCiMK
IyBBdWRpby9WaWRlbyBjb21wcmVzc2lvbiBjaGlwcwojCkNPTkZJR19WSURFT19TQUE2NzUy
SFM9bQoKIwojIE1pc2NlbGxhbmVvdXMgaGVscGVyIGNoaXBzCiMKQ09ORklHX1ZJREVPX001
Mjc5MD1tCgojCiMgU2Vuc29ycyB1c2VkIG9uIHNvY19jYW1lcmEgZHJpdmVyCiMKQ09ORklH
X01FRElBX1RVTkVSPW0KQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCkNPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwPW0KQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQpDT05GSUdf
TUVESUFfVFVORVJfVERBMTgyNzE9bQpDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCkNP
TkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9
bQpDT05GSUdfTUVESUFfVFVORVJfTVNJMDAxPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjBY
WD1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQpDT05GSUdfTUVESUFfVFVORVJfTVQy
MDYzPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCkNPTkZJR19NRURJQV9UVU5FUl9N
VDIxMzE9bQpDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KQ09ORklHX01FRElBX1RVTkVS
X1hDMjAyOD1tCkNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05GSUdfTUVESUFfVFVO
RVJfWEM0MDAwPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDUwMDdUPW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KQ09ORklH
X01FRElBX1RVTkVSX01BWDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9bQpD
T05GSUdfTUVESUFfVFVORVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1t
CkNPTkZJR19NRURJQV9UVU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgy
MTI9bQpDT05GSUdfTUVESUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMy
NTgwPW0KQ09ORklHX01FRElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVO
RVJfVFVBOTAwMT1tCkNPTkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFf
VFVORVJfSVQ5MTNYPW0KQ09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDMwMVJGPW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQoKIwoj
IE11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TVEIw
ODk5PW0KQ09ORklHX0RWQl9TVEI2MTAwPW0KQ09ORklHX0RWQl9TVFYwOTB4PW0KQ09ORklH
X0RWQl9TVFY2MTEweD1tCkNPTkZJR19EVkJfTTg4RFMzMTAzPW0KCiMKIyBNdWx0aXN0YW5k
YXJkIChjYWJsZSArIHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0RSWEs9
bQpDT05GSUdfRFZCX1REQTE4MjcxQzJERD1tCkNPTkZJR19EVkJfU0kyMTY1PW0KCiMKIyBE
VkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0NYMjQxMTA9bQpDT05G
SUdfRFZCX0NYMjQxMjM9bQpDT05GSUdfRFZCX01UMzEyPW0KQ09ORklHX0RWQl9aTDEwMDM2
PW0KQ09ORklHX0RWQl9aTDEwMDM5PW0KQ09ORklHX0RWQl9TNUgxNDIwPW0KQ09ORklHX0RW
Ql9TVFYwMjg4PW0KQ09ORklHX0RWQl9TVEI2MDAwPW0KQ09ORklHX0RWQl9TVFYwMjk5PW0K
Q09ORklHX0RWQl9TVFY2MTEwPW0KQ09ORklHX0RWQl9TVFYwOTAwPW0KQ09ORklHX0RWQl9U
REE4MDgzPW0KQ09ORklHX0RWQl9UREExMDA4Nj1tCkNPTkZJR19EVkJfVERBODI2MT1tCkNP
TkZJR19EVkJfVkVTMVg5Mz1tCkNPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCkNPTkZJR19E
VkJfVFVORVJfQ1gyNDExMz1tCkNPTkZJR19EVkJfVERBODI2WD1tCkNPTkZJR19EVkJfVFVB
NjEwMD1tCkNPTkZJR19EVkJfQ1gyNDExNj1tCkNPTkZJR19EVkJfQ1gyNDExNz1tCkNPTkZJ
R19EVkJfU0kyMVhYPW0KQ09ORklHX0RWQl9UUzIwMjA9bQpDT05GSUdfRFZCX0RTMzAwMD1t
CkNPTkZJR19EVkJfTUI4NkExNj1tCkNPTkZJR19EVkJfVERBMTAwNzE9bQoKIwojIERWQi1U
ICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TUDg4NzA9bQpDT05GSUdf
RFZCX1NQODg3WD1tCkNPTkZJR19EVkJfQ1gyMjcwMD1tCkNPTkZJR19EVkJfQ1gyMjcwMj1t
CkNPTkZJR19EVkJfRFJYRD1tCkNPTkZJR19EVkJfTDY0NzgxPW0KQ09ORklHX0RWQl9UREEx
MDA0WD1tCkNPTkZJR19EVkJfTlhUNjAwMD1tCkNPTkZJR19EVkJfTVQzNTI9bQpDT05GSUdf
RFZCX1pMMTAzNTM9bQpDT05GSUdfRFZCX0RJQjMwMDBNQj1tCkNPTkZJR19EVkJfRElCMzAw
ME1DPW0KQ09ORklHX0RWQl9ESUI3MDAwTT1tCkNPTkZJR19EVkJfRElCNzAwMFA9bQpDT05G
SUdfRFZCX1REQTEwMDQ4PW0KQ09ORklHX0RWQl9BRjkwMTM9bQpDT05GSUdfRFZCX0VDMTAw
PW0KQ09ORklHX0RWQl9TVFYwMzY3PW0KQ09ORklHX0RWQl9DWEQyODIwUj1tCkNPTkZJR19E
VkJfUlRMMjgzMD1tCkNPTkZJR19EVkJfUlRMMjgzMj1tCkNPTkZJR19EVkJfUlRMMjgzMl9T
RFI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfQVMxMDJfRkU9bQoKIwojIERW
Qi1DIChjYWJsZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9WRVMxODIwPW0KQ09ORklHX0RW
Ql9UREExMDAyMT1tCkNPTkZJR19EVkJfVERBMTAwMjM9bQpDT05GSUdfRFZCX1NUVjAyOTc9
bQoKIwojIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBE
VFYpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfTlhUMjAwWD1tCkNPTkZJR19EVkJfT1I1MTIx
MT1tCkNPTkZJR19EVkJfT1I1MTEzMj1tCkNPTkZJR19EVkJfQkNNMzUxMD1tCkNPTkZJR19E
VkJfTEdEVDMzMFg9bQpDT05GSUdfRFZCX0xHRFQzMzA1PW0KQ09ORklHX0RWQl9MR0RUMzMw
NkE9bQpDT05GSUdfRFZCX0xHMjE2MD1tCkNPTkZJR19EVkJfUzVIMTQwOT1tCkNPTkZJR19E
VkJfQVU4NTIyPW0KQ09ORklHX0RWQl9BVTg1MjJfRFRWPW0KQ09ORklHX0RWQl9BVTg1MjJf
VjRMPW0KQ09ORklHX0RWQl9TNUgxNDExPW0KCiMKIyBJU0RCLVQgKHRlcnJlc3RyaWFsKSBm
cm9udGVuZHMKIwpDT05GSUdfRFZCX1M5MjE9bQpDT05GSUdfRFZCX0RJQjgwMDA9bQpDT05G
SUdfRFZCX01CODZBMjBTPW0KCiMKIyBJU0RCLVMgKHNhdGVsbGl0ZSkgJiBJU0RCLVQgKHRl
cnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1RDOTA1MjI9bQoKIwojIERpZ2l0
YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCiMKQ09ORklHX0RWQl9QTEw9bQpDT05G
SUdfRFZCX1RVTkVSX0RJQjAwNzA9bQpDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTA9bQoKIwoj
IFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKQ09ORklHX0RWQl9EUlgzOVhZSj1t
CkNPTkZJR19EVkJfTE5CUDIxPW0KQ09ORklHX0RWQl9MTkJQMjI9bQpDT05GSUdfRFZCX0lT
TDY0MDU9bQpDT05GSUdfRFZCX0lTTDY0MjE9bQpDT05GSUdfRFZCX0lTTDY0MjM9bQpDT05G
SUdfRFZCX0E4MjkzPW0KQ09ORklHX0RWQl9TUDI9bQpDT05GSUdfRFZCX0xHUzhHWFg9bQpD
T05GSUdfRFZCX0FUQk04ODMwPW0KQ09ORklHX0RWQl9UREE2NjV4PW0KQ09ORklHX0RWQl9J
WDI1MDVWPW0KQ09ORklHX0RWQl9NODhSUzIwMDA9bQpDT05GSUdfRFZCX0FGOTAzMz1tCgoj
CiMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1Z
X0ZFIGlzIG5vdCBzZXQKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09ORklHX0FHUD15CkNP
TkZJR19BR1BfQU1ENjQ9eQpDT05GSUdfQUdQX0lOVEVMPXkKQ09ORklHX0FHUF9TSVM9eQpD
T05GSUdfQUdQX1ZJQT15CkNPTkZJR19JTlRFTF9HVFQ9eQpDT05GSUdfVkdBX0FSQj15CkNP
TkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CkNPTkZJR19WR0FfU1dJVENIRVJPTz15CgojCiMg
RGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyCiMKQ09ORklHX0RSTT1tCkNPTkZJR19EUk1fTUlQ
SV9EU0k9eQpDT05GSUdfRFJNX0tNU19IRUxQRVI9bQpDT05GSUdfRFJNX0tNU19GQl9IRUxQ
RVI9eQpDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRT15CkNPTkZJR19EUk1fVFRNPW0K
CiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwojIENPTkZJR19EUk1fSTJDX0FE
Vjc1MTEgaXMgbm90IHNldApDT05GSUdfRFJNX0kyQ19DSDcwMDY9bQpDT05GSUdfRFJNX0ky
Q19TSUwxNjQ9bQojIENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYIGlzIG5vdCBzZXQKQ09O
RklHX0RSTV9UREZYPW0KQ09ORklHX0RSTV9SMTI4PW0KQ09ORklHX0RSTV9SQURFT049bQoj
IENPTkZJR19EUk1fUkFERU9OX1VTRVJQVFIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUkFE
RU9OX1VNUyBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTk9VVkVBVT1tCkNPTkZJR19OT1VWRUFV
X0RFQlVHPTUKQ09ORklHX05PVVZFQVVfREVCVUdfREVGQVVMVD0zCkNPTkZJR19EUk1fTk9V
VkVBVV9CQUNLTElHSFQ9eQojIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fSTkxNT1tCkNPTkZJR19EUk1fSTkxNV9LTVM9eQpDT05GSUdfRFJNX0k5MTVfRkJERVY9
eQojIENPTkZJR19EUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQT1JUIGlzIG5vdCBzZXQK
Q09ORklHX0RSTV9NR0E9bQpDT05GSUdfRFJNX1NJUz1tCkNPTkZJR19EUk1fVklBPW0KQ09O
RklHX0RSTV9TQVZBR0U9bQpDT05GSUdfRFJNX1ZHRU09bQpDT05GSUdfRFJNX1ZNV0dGWD1t
CkNPTkZJR19EUk1fVk1XR0ZYX0ZCQ09OPXkKQ09ORklHX0RSTV9HTUE1MDA9bQpDT05GSUdf
RFJNX0dNQTYwMD15CkNPTkZJR19EUk1fR01BMzYwMD15CkNPTkZJR19EUk1fVURMPW0KQ09O
RklHX0RSTV9BU1Q9bQpDT05GSUdfRFJNX01HQUcyMDA9bQpDT05GSUdfRFJNX0NJUlJVU19R
RU1VPW0KQ09ORklHX0RSTV9RWEw9bQpDT05GSUdfRFJNX0JPQ0hTPW0KQ09ORklHX0RSTV9Q
QU5FTD15CgojCiMgRGlzcGxheSBQYW5lbHMKIwojIENPTkZJR19IU0FfQU1EIGlzIG5vdCBz
ZXQKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwojCkNPTkZJR19GQj15CkNPTkZJR19GSVJN
V0FSRV9FRElEPXkKQ09ORklHX0ZCX0NNRExJTkU9eQpDT05GSUdfRkJfRERDPW0KQ09ORklH
X0ZCX0JPT1RfVkVTQV9TVVBQT1JUPXkKQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CkNPTkZJ
R19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldApDT05GSUdfRkJfU1lTX0ZJ
TExSRUNUPXkKQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15CkNPTkZJR19GQl9TWVNfSU1BR0VC
TElUPXkKIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldApDT05GSUdfRkJf
U1lTX0ZPUFM9eQpDT05GSUdfRkJfREVGRVJSRURfSU89eQpDT05GSUdfRkJfSEVDVUJBPW0K
Q09ORklHX0ZCX1NWR0FMSUI9bQojIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CkNP
TkZJR19GQl9CQUNLTElHSFQ9eQpDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1RJTEVCTElUVElORz15CgojCiMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKIwpD
T05GSUdfRkJfQ0lSUlVTPW0KQ09ORklHX0ZCX1BNMj1tCkNPTkZJR19GQl9QTTJfRklGT19E
SVNDT05ORUNUPXkKQ09ORklHX0ZCX0NZQkVSMjAwMD1tCkNPTkZJR19GQl9DWUJFUjIwMDBf
RERDPXkKQ09ORklHX0ZCX0FSQz1tCiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldApDT05GSUdfRkJfVkdBMTY9bQpDT05GSUdf
RkJfVVZFU0E9bQpDT05GSUdfRkJfVkVTQT15CkNPTkZJR19GQl9FRkk9eQpDT05GSUdfRkJf
TjQxMT1tCkNPTkZJR19GQl9IR0E9bQojIENPTkZJR19GQl9PUEVOQ09SRVMgaXMgbm90IHNl
dAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX05WSURJQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAojIENPTkZJR19GQl9JNzQw
IGlzIG5vdCBzZXQKQ09ORklHX0ZCX0xFODA1Nzg9bQpDT05GSUdfRkJfQ0FSSUxMT19SQU5D
SD1tCiMgQ09ORklHX0ZCX0lOVEVMIGlzIG5vdCBzZXQKQ09ORklHX0ZCX01BVFJPWD1tCkNP
TkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15
CkNPTkZJR19GQl9NQVRST1hfRz15CkNPTkZJR19GQl9NQVRST1hfSTJDPW0KQ09ORklHX0ZC
X01BVFJPWF9NQVZFTj1tCkNPTkZJR19GQl9SQURFT049bQpDT05GSUdfRkJfUkFERU9OX0ky
Qz15CkNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKIyBDT05GSUdfRkJfUkFERU9OX0RF
QlVHIGlzIG5vdCBzZXQKQ09ORklHX0ZCX0FUWTEyOD1tCkNPTkZJR19GQl9BVFkxMjhfQkFD
S0xJR0hUPXkKQ09ORklHX0ZCX0FUWT1tCkNPTkZJR19GQl9BVFlfQ1Q9eQojIENPTkZJR19G
Ql9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldApDT05GSUdfRkJfQVRZX0dYPXkKQ09ORklH
X0ZCX0FUWV9CQUNLTElHSFQ9eQpDT05GSUdfRkJfUzM9bQpDT05GSUdfRkJfUzNfRERDPXkK
Q09ORklHX0ZCX1NBVkFHRT1tCiMgQ09ORklHX0ZCX1NBVkFHRV9JMkMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0VfQUNDRUwgaXMgbm90IHNldApDT05GSUdfRkJfU0lTPW0KQ09O
RklHX0ZCX1NJU18zMDA9eQpDT05GSUdfRkJfU0lTXzMxNT15CkNPTkZJR19GQl9WSUE9bQoj
IENPTkZJR19GQl9WSUFfRElSRUNUX1BST0NGUyBpcyBub3Qgc2V0CkNPTkZJR19GQl9WSUFf
WF9DT01QQVRJQklMSVRZPXkKQ09ORklHX0ZCX05FT01BR0lDPW0KQ09ORklHX0ZCX0tZUk89
bQpDT05GSUdfRkJfM0RGWD1tCiMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldApD
T05GSUdfRkJfM0RGWF9JMkM9eQpDT05GSUdfRkJfVk9PRE9PMT1tCkNPTkZJR19GQl9WVDg2
MjM9bQpDT05GSUdfRkJfVFJJREVOVD1tCkNPTkZJR19GQl9BUks9bQpDT05GSUdfRkJfUE0z
PW0KIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CkNPTkZJR19GQl9TTVNDVUZYPW0K
Q09ORklHX0ZCX1VETD1tCkNPTkZJR19GQl9WSVJUVUFMPW0KQ09ORklHX1hFTl9GQkRFVl9G
Uk9OVEVORD15CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkNPTkZJR19GQl9N
Qjg2MlhYPW0KQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQz15CkNPTkZJR19GQl9NQjg2MlhY
X0kyQz15CiMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAojIENPTkZJR19GQl9B
VU9fSzE5MFggaXMgbm90IHNldApDT05GSUdfRkJfSFlQRVJWPW0KQ09ORklHX0ZCX1NJTVBM
RT15CkNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQojIENPTkZJR19MQ0RfQ0xBU1Nf
REVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENP
TkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CkNPTkZJR19CQUNLTElHSFRfQVBQ
TEU9bQojIENPTkZJR19CQUNLTElHSFRfU0FIQVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFD
S0xJR0hUX0FEUDg4NjAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MTTM2MzkgaXMgbm90IHNldAojIENPTkZJ
R19CQUNLTElHSFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdM
UCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldApDT05G
SUdfVkdBU1RBVEU9bQpDT05GSUdfSERNST15CgojCiMgQ29uc29sZSBkaXNwbGF5IGRyaXZl
ciBzdXBwb3J0CiMKQ09ORklHX1ZHQV9DT05TT0xFPXkKIyBDT05GSUdfVkdBQ09OX1NPRlRf
U0NST0xMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19EVU1NWV9DT05TT0xFPXkKQ09ORklHX0RV
TU1ZX0NPTlNPTEVfQ09MVU1OUz04MApDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTPTI1CkNP
TkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVf
REVURUNUX1BSSU1BUlk9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15
CiMgQ09ORklHX0xPR08gaXMgbm90IHNldApDT05GSUdfU09VTkQ9bQpDT05GSUdfU09VTkRf
T1NTX0NPUkU9eQojIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBpcyBub3Qgc2V0
CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NORF9QQ009bQpDT05G
SUdfU05EX0hXREVQPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9DT01QUkVT
U19PRkZMT0FEPW0KQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9TRVFVRU5DRVI9bQpD
T05GSUdfU05EX1NFUV9EVU1NWT1tCkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRf
TUlYRVJfT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BM
VUdJTlM9eQojIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfSFJUSU1FUj1tCkNPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CkNPTkZJR19T
TkRfRFlOQU1JQ19NSU5PUlM9eQpDT05GSUdfU05EX01BWF9DQVJEUz0zMgpDT05GSUdfU05E
X1NVUFBPUlRfT0xEX0FQST15CkNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQojIENPTkZJ
R19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVCVUcgaXMg
bm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05GSUdfU05EX0tDVExfSkFDSz15CkNP
TkZJR19TTkRfRE1BX1NHQlVGPXkKQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCkNPTkZJR19T
TkRfT1BMM19MSUJfU0VRPW0KIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldApDT05GSUdfU05EX0VNVTEwSzFf
U0VRPW0KQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCkNPTkZJR19TTkRfT1BMM19MSUI9bQpD
T05GSUdfU05EX1ZYX0xJQj1tCkNPTkZJR19TTkRfQUM5N19DT0RFQz1tCkNPTkZJR19TTkRf
RFJJVkVSUz15CkNPTkZJR19TTkRfUENTUD1tCkNPTkZJR19TTkRfRFVNTVk9bQpDT05GSUdf
U05EX0FMT09QPW0KQ09ORklHX1NORF9WSVJNSURJPW0KQ09ORklHX1NORF9NVFBBVj1tCkNP
TkZJR19TTkRfTVRTNjQ9bQpDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQpDT05GSUdfU05E
X01QVTQwMT1tCkNPTkZJR19TTkRfUE9SVE1BTjJYND1tCkNPTkZJR19TTkRfQUM5N19QT1dF
Ul9TQVZFPXkKQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0wCkNPTkZJR19T
TkRfU0JfQ09NTU9OPW0KQ09ORklHX1NORF9QQ0k9eQpDT05GSUdfU05EX0FEMTg4OT1tCkNP
TkZJR19TTkRfQUxTMzAwPW0KQ09ORklHX1NORF9BTFM0MDAwPW0KQ09ORklHX1NORF9BTEk1
NDUxPW0KQ09ORklHX1NORF9BU0lIUEk9bQpDT05GSUdfU05EX0FUSUlYUD1tCkNPTkZJR19T
TkRfQVRJSVhQX01PREVNPW0KQ09ORklHX1NORF9BVTg4MTA9bQpDT05GSUdfU05EX0FVODgy
MD1tCkNPTkZJR19TTkRfQVU4ODMwPW0KIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CkNP
TkZJR19TTkRfQVpUMzMyOD1tCkNPTkZJR19TTkRfQlQ4N1g9bQojIENPTkZJR19TTkRfQlQ4
N1hfT1ZFUkNMT0NLIGlzIG5vdCBzZXQKQ09ORklHX1NORF9DQTAxMDY9bQpDT05GSUdfU05E
X0NNSVBDST1tCkNPTkZJR19TTkRfT1hZR0VOX0xJQj1tCkNPTkZJR19TTkRfT1hZR0VOPW0K
Q09ORklHX1NORF9DUzQyODE9bQpDT05GSUdfU05EX0NTNDZYWD1tCkNPTkZJR19TTkRfQ1M0
NlhYX05FV19EU1A9eQpDT05GSUdfU05EX0NUWEZJPW0KQ09ORklHX1NORF9EQVJMQTIwPW0K
Q09ORklHX1NORF9HSU5BMjA9bQpDT05GSUdfU05EX0xBWUxBMjA9bQpDT05GSUdfU05EX0RB
UkxBMjQ9bQpDT05GSUdfU05EX0dJTkEyND1tCkNPTkZJR19TTkRfTEFZTEEyND1tCkNPTkZJ
R19TTkRfTU9OQT1tCkNPTkZJR19TTkRfTUlBPW0KQ09ORklHX1NORF9FQ0hPM0c9bQpDT05G
SUdfU05EX0lORElHTz1tCkNPTkZJR19TTkRfSU5ESUdPSU89bQpDT05GSUdfU05EX0lORElH
T0RKPW0KQ09ORklHX1NORF9JTkRJR09JT1g9bQpDT05GSUdfU05EX0lORElHT0RKWD1tCkNP
TkZJR19TTkRfRU1VMTBLMT1tCkNPTkZJR19TTkRfRU1VMTBLMVg9bQpDT05GSUdfU05EX0VO
UzEzNzA9bQpDT05GSUdfU05EX0VOUzEzNzE9bQpDT05GSUdfU05EX0VTMTkzOD1tCkNPTkZJ
R19TTkRfRVMxOTY4PW0KQ09ORklHX1NORF9FUzE5NjhfSU5QVVQ9eQpDT05GSUdfU05EX0VT
MTk2OF9SQURJTz15CkNPTkZJR19TTkRfRk04MDE9bQpDT05GSUdfU05EX0ZNODAxX1RFQTU3
NVhfQk9PTD15CkNPTkZJR19TTkRfSERTUD1tCkNPTkZJR19TTkRfSERTUE09bQpDT05GSUdf
U05EX0lDRTE3MTI9bQpDT05GSUdfU05EX0lDRTE3MjQ9bQpDT05GSUdfU05EX0lOVEVMOFgw
PW0KQ09ORklHX1NORF9JTlRFTDhYME09bQpDT05GSUdfU05EX0tPUkcxMjEyPW0KQ09ORklH
X1NORF9MT0xBPW0KQ09ORklHX1NORF9MWDY0NjRFUz1tCkNPTkZJR19TTkRfTUFFU1RSTzM9
bQpDT05GSUdfU05EX01BRVNUUk8zX0lOUFVUPXkKQ09ORklHX1NORF9NSVhBUlQ9bQpDT05G
SUdfU05EX05NMjU2PW0KQ09ORklHX1NORF9QQ1hIUj1tCkNPTkZJR19TTkRfUklQVElERT1t
CkNPTkZJR19TTkRfUk1FMzI9bQpDT05GSUdfU05EX1JNRTk2PW0KQ09ORklHX1NORF9STUU5
NjUyPW0KQ09ORklHX1NORF9TT05JQ1ZJQkVTPW0KQ09ORklHX1NORF9UUklERU5UPW0KQ09O
RklHX1NORF9WSUE4MlhYPW0KQ09ORklHX1NORF9WSUE4MlhYX01PREVNPW0KQ09ORklHX1NO
RF9WSVJUVU9TTz1tCkNPTkZJR19TTkRfVlgyMjI9bQpDT05GSUdfU05EX1lNRlBDST1tCgoj
CiMgSEQtQXVkaW8KIwpDT05GSUdfU05EX0hEQT1tCkNPTkZJR19TTkRfSERBX0lOVEVMPW0K
Q09ORklHX1NORF9IREFfRFNQX0xPQURFUj15CkNPTkZJR19TTkRfSERBX1BSRUFMTE9DX1NJ
WkU9NjQKQ09ORklHX1NORF9IREFfSFdERVA9eQpDT05GSUdfU05EX0hEQV9SRUNPTkZJRz15
CkNPTkZJR19TTkRfSERBX0lOUFVUX0JFRVA9eQpDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQ
X01PREU9MQpDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLPXkKQ09ORklHX1NORF9IREFfUEFU
Q0hfTE9BREVSPXkKQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz1tCkNPTkZJR19TTkRf
SERBX0NPREVDX0FOQUxPRz1tCkNPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPW0KQ09O
RklHX1NORF9IREFfQ09ERUNfVklBPW0KQ09ORklHX1NORF9IREFfQ09ERUNfSERNST1tCkNP
TkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DSVJSVVM9bQpDT05G
SUdfU05EX0hEQV9DT0RFQ19DT05FWEFOVD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEx
MD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEzMj1tCkNPTkZJR19TTkRfSERBX0NPREVD
X0NBMDEzMl9EU1A9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DTUVESUE9bQpDT05GSUdfU05E
X0hEQV9DT0RFQ19TSTMwNTQ9bQpDT05GSUdfU05EX0hEQV9HRU5FUklDPW0KQ09ORklHX1NO
RF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKQ09ORklHX1NORF9IREFfQ09SRT1tCkNPTkZJ
R19TTkRfU1BJPXkKQ09ORklHX1NORF9VU0I9eQpDT05GSUdfU05EX1VTQl9BVURJTz1tCkNP
TkZJR19TTkRfVVNCX1VBMTAxPW0KQ09ORklHX1NORF9VU0JfVVNYMlk9bQpDT05GSUdfU05E
X1VTQl9DQUlBUT1tCkNPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKQ09ORklHX1NORF9V
U0JfVVMxMjJMPW0KQ09ORklHX1NORF9VU0JfNkZJUkU9bQpDT05GSUdfU05EX1VTQl9ISUZB
Q0U9bQpDT05GSUdfU05EX0JDRDIwMDA9bQpDT05GSUdfU05EX1VTQl9MSU5FNj1tCkNPTkZJ
R19TTkRfVVNCX1BPRD1tCkNPTkZJR19TTkRfVVNCX1BPREhEPW0KQ09ORklHX1NORF9VU0Jf
VE9ORVBPUlQ9bQpDT05GSUdfU05EX1VTQl9WQVJJQVg9bQpDT05GSUdfU05EX0ZJUkVXSVJF
PXkKQ09ORklHX1NORF9GSVJFV0lSRV9MSUI9bQpDT05GSUdfU05EX0RJQ0U9bQpDT05GSUdf
U05EX09YRlc9bQpDT05GSUdfU05EX0lTSUdIVD1tCkNPTkZJR19TTkRfU0NTMVg9bQpDT05G
SUdfU05EX0ZJUkVXT1JLUz1tCkNPTkZJR19TTkRfQkVCT0I9bQpDT05GSUdfU05EX1BDTUNJ
QT15CkNPTkZJR19TTkRfVlhQT0NLRVQ9bQpDT05GSUdfU05EX1BEQVVESU9DRj1tCkNPTkZJ
R19TTkRfU09DPW0KIyBDT05GSUdfU05EX0FUTUVMX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9ERVNJR05XQVJFX0kyUyBpcyBub3Qgc2V0CgojCiMgU29DIEF1ZGlvIGZvciBGcmVl
c2NhbGUgQ1BVcwojCgojCiMgQ29tbW9uIFNvQyBBdWRpbyBvcHRpb25zIGZvciBGcmVlc2Nh
bGUgQ1BVczoKIwojIENPTkZJR19TTkRfU09DX0ZTTF9BU1JDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19GU0xfU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1BESUYgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX0ZTTF9FU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19JTVhf
QVVETVVYIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfSU5URUxfU1NUPW0KQ09ORklHX1NO
RF9TT0NfSU5URUxfU1NUX0FDUEk9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9IQVNXRUxMPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQkFZVFJBSUw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9I
QVNXRUxMX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRfUlQ1NjQwX01BQ0g9bQpD
T05GSUdfU05EX1NPQ19JTlRFTF9CWVRfTUFYOTgwOTBfTUFDSD1tCkNPTkZJR19TTkRfU09D
X0lOVEVMX0JST0FEV0VMTF9NQUNIPW0KIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9S
VDU2NDBfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NzJfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NDVfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUUNPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfWFRGUEdBX0kyUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0kyQ19BTkRfU1BJPW0KCiMKIyBDT0RFQyBkcml2ZXJzCiMKIyBDT05GSUdfU05EX1NPQ19B
REFVMTcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs0MTA0IGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19BSzQ1NTQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0FL
NDY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs1Mzg2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19BTEM1NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzM1
TDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDUxX0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
Q1M0Mkw1NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw3MyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0MjY1IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19D
UzQyNzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX0NTNDJYWDhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19IRE1JX0NPREVD
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19FUzgzMjggaXMgbm90IHNldApDT05GSUdf
U05EX1NPQ19NQVg5ODA5MD1tCiMgQ09ORklHX1NORF9TT0NfUENNMTY4MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfUENNMTc5MkEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09D
X1BDTTUxMnhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCkNPTkZJR19TTkRfU09DX1JUMjg2
PW0KIyBDT05GSUdfU05EX1NPQ19SVDU2MzEgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19S
VDU2NDA9bQojIENPTkZJR19TTkRfU09DX1JUNTY3N19TUEkgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1NHVEw1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TSVJGX0FV
RElPX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TUERJRiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TU000NTY3IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TVEEzMlggaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1NUQTM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjU1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTNTA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfVEZBOTg3OSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19TUEkgaXMgbm90
IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzMxWFggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UUzNB
MjI3RSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NTEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19XTTg1MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODU4
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19XTTg3MjggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODczMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XTTg3NDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19XTTg3NzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc3NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfV004ODA0X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfV004ODA0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg5NjIgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1dNODk3OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NJTVBMRV9DQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdf
U09VTkRfUFJJTUUgaXMgbm90IHNldApDT05GSUdfQUM5N19CVVM9bQoKIwojIEhJRCBzdXBw
b3J0CiMKQ09ORklHX0hJRD1tCkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJ
R19ISURSQVc9eQpDT05GSUdfVUhJRD1tCkNPTkZJR19ISURfR0VORVJJQz1tCgojCiMgU3Bl
Y2lhbCBISUQgZHJpdmVycwojCkNPTkZJR19ISURfQTRURUNIPW0KQ09ORklHX0hJRF9BQ1JV
WD1tCkNPTkZJR19ISURfQUNSVVhfRkY9eQpDT05GSUdfSElEX0FQUExFPW0KQ09ORklHX0hJ
RF9BUFBMRUlSPW0KQ09ORklHX0hJRF9BVVJFQUw9bQpDT05GSUdfSElEX0JFTEtJTj1tCiMg
Q09ORklHX0hJRF9CRVRPUF9GRiBpcyBub3Qgc2V0CkNPTkZJR19ISURfQ0hFUlJZPW0KQ09O
RklHX0hJRF9DSElDT05ZPW0KQ09ORklHX0hJRF9QUk9ESUtFWVM9bQpDT05GSUdfSElEX0NQ
MjExMj1tCkNPTkZJR19ISURfQ1lQUkVTUz1tCkNPTkZJR19ISURfRFJBR09OUklTRT1tCkNP
TkZJR19EUkFHT05SSVNFX0ZGPXkKQ09ORklHX0hJRF9FTVNfRkY9bQpDT05GSUdfSElEX0VM
RUNPTT1tCkNPTkZJR19ISURfRUxPPW0KQ09ORklHX0hJRF9FWktFWT1tCkNPTkZJR19ISURf
SE9MVEVLPW0KQ09ORklHX0hPTFRFS19GRj15CiMgQ09ORklHX0hJRF9HVDY4M1IgaXMgbm90
IHNldApDT05GSUdfSElEX0tFWVRPVUNIPW0KQ09ORklHX0hJRF9LWUU9bQpDT05GSUdfSElE
X1VDTE9HSUM9bQpDT05GSUdfSElEX1dBTFRPUD1tCkNPTkZJR19ISURfR1lSQVRJT049bQpD
T05GSUdfSElEX0lDQURFPW0KQ09ORklHX0hJRF9UV0lOSEFOPW0KQ09ORklHX0hJRF9LRU5T
SU5HVE9OPW0KQ09ORklHX0hJRF9MQ1BPV0VSPW0KQ09ORklHX0hJRF9MRU5PVk89bQpDT05G
SUdfSElEX0xPR0lURUNIPW0KQ09ORklHX0hJRF9MT0dJVEVDSF9ESj1tCkNPTkZJR19ISURf
TE9HSVRFQ0hfSElEUFA9bQpDT05GSUdfTE9HSVRFQ0hfRkY9eQpDT05GSUdfTE9HSVJVTUJM
RVBBRDJfRkY9eQpDT05GSUdfTE9HSUc5NDBfRkY9eQpDT05GSUdfTE9HSVdIRUVMU19GRj15
CkNPTkZJR19ISURfTUFHSUNNT1VTRT1tCkNPTkZJR19ISURfTUlDUk9TT0ZUPW0KQ09ORklH
X0hJRF9NT05URVJFWT1tCkNPTkZJR19ISURfTVVMVElUT1VDSD1tCkNPTkZJR19ISURfTlRS
SUc9bQpDT05GSUdfSElEX09SVEVLPW0KQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCkNPTkZJ
R19QQU5USEVSTE9SRF9GRj15CkNPTkZJR19ISURfUEVOTU9VTlQ9bQpDT05GSUdfSElEX1BF
VEFMWU5YPW0KQ09ORklHX0hJRF9QSUNPTENEPW0KQ09ORklHX0hJRF9QSUNPTENEX0ZCPXkK
Q09ORklHX0hJRF9QSUNPTENEX0JBQ0tMSUdIVD15CkNPTkZJR19ISURfUElDT0xDRF9MRURT
PXkKQ09ORklHX0hJRF9QSUNPTENEX0NJUj15CiMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBp
cyBub3Qgc2V0CkNPTkZJR19ISURfUFJJTUFYPW0KQ09ORklHX0hJRF9ST0NDQVQ9bQpDT05G
SUdfSElEX1NBSVRFSz1tCkNPTkZJR19ISURfU0FNU1VORz1tCkNPTkZJR19ISURfU09OWT1t
CkNPTkZJR19TT05ZX0ZGPXkKQ09ORklHX0hJRF9TUEVFRExJTks9bQpDT05GSUdfSElEX1NU
RUVMU0VSSUVTPW0KQ09ORklHX0hJRF9TVU5QTFVTPW0KQ09ORklHX0hJRF9STUk9bQpDT05G
SUdfSElEX0dSRUVOQVNJQT1tCkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElEX0hZ
UEVSVl9NT1VTRT1tCkNPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KQ09ORklHX1NNQVJUSk9Z
UExVU19GRj15CkNPTkZJR19ISURfVElWTz1tCkNPTkZJR19ISURfVE9QU0VFRD1tCkNPTkZJ
R19ISURfVEhJTkdNPW0KQ09ORklHX0hJRF9USFJVU1RNQVNURVI9bQpDT05GSUdfVEhSVVNU
TUFTVEVSX0ZGPXkKQ09ORklHX0hJRF9XQUNPTT1tCkNPTkZJR19ISURfV0lJTU9URT1tCkNP
TkZJR19ISURfWElOTU89bQpDT05GSUdfSElEX1pFUk9QTFVTPW0KQ09ORklHX1pFUk9QTFVT
X0ZGPXkKQ09ORklHX0hJRF9aWURBQ1JPTj1tCkNPTkZJR19ISURfU0VOU09SX0hVQj1tCiMg
Q09ORklHX0hJRF9TRU5TT1JfQ1VTVE9NX1NFTlNPUiBpcyBub3Qgc2V0CgojCiMgVVNCIEhJ
RCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9bQpDT05GSUdfSElEX1BJRD15CkNPTkZJR19V
U0JfSElEREVWPXkKCiMKIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwojCiMgQ09O
RklHX1VTQl9LQkQgaXMgbm90IHNldAojIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAoK
IwojIEkyQyBISUQgc3VwcG9ydAojCkNPTkZJR19JMkNfSElEPW0KQ09ORklHX1VTQl9PSENJ
X0xJVFRMRV9FTkRJQU49eQpDT05GSUdfVVNCX1NVUFBPUlQ9eQpDT05GSUdfVVNCX0NPTU1P
Tj1tCkNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQ09ORklHX1VTQj1tCkNPTkZJR19VU0Jf
QU5OT1VOQ0VfTkVXX0RFVklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMK
IwpDT05GSUdfVVNCX0RFRkFVTFRfUEVSU0lTVD15CkNPTkZJR19VU0JfRFlOQU1JQ19NSU5P
UlM9eQojIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX09UR19XSElU
RUxJU1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90
IHNldAojIENPTkZJR19VU0JfT1RHX0ZTTSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTU9OPW0K
Q09ORklHX1VTQl9XVVNCPW0KQ09ORklHX1VTQl9XVVNCX0NCQUY9bQojIENPTkZJR19VU0Jf
V1VTQl9DQkFGX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERy
aXZlcnMKIwojIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
WEhDSV9IQ0Q9bQpDT05GSUdfVVNCX1hIQ0lfUENJPW0KQ09ORklHX1VTQl9FSENJX0hDRD1t
CkNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CkNPTkZJR19VU0JfRUhDSV9UVF9ORVdT
Q0hFRD15CkNPTkZJR19VU0JfRUhDSV9QQ0k9bQojIENPTkZJR19VU0JfRUhDSV9IQ0RfUExB
VEZPUk0gaXMgbm90IHNldAojIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTUDEz
NjJfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0ZVU0JIMjAwX0hDRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NQVgz
NDIxX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfT0hDSV9IQ0Q9bQpDT05GSUdfVVNCX09I
Q0lfSENEX1BDST1tCiMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAojIENP
TkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0gaXMgbm90IHNldApDT05GSUdfVVNCX1VIQ0lf
SENEPW0KQ09ORklHX1VTQl9VMTMyX0hDRD1tCkNPTkZJR19VU0JfU0w4MTFfSENEPW0KIyBD
T05GSUdfVVNCX1NMODExX0hDRF9JU08gaXMgbm90IHNldApDT05GSUdfVVNCX1NMODExX0NT
PW0KIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfV0hD
SV9IQ0Q9bQpDT05GSUdfVVNCX0hXQV9IQ0Q9bQojIENPTkZJR19VU0JfSENEX0JDTUEgaXMg
bm90IHNldAojIENPTkZJR19VU0JfSENEX1NTQiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9I
Q0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKCiMKIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMK
IwpDT05GSUdfVVNCX0FDTT1tCkNPTkZJR19VU0JfUFJJTlRFUj1tCkNPTkZJR19VU0JfV0RN
PW0KQ09ORklHX1VTQl9UTUM9bQoKIwojIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24g
U0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKIwoKIwojIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNC
X1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiMKQ09ORklHX1VTQl9TVE9SQUdFPW0KIyBD
T05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfVVNCX1NUT1JBR0Vf
UkVBTFRFSz1tCkNPTkZJR19SRUFMVEVLX0FVVE9QTT15CkNPTkZJR19VU0JfU1RPUkFHRV9E
QVRBRkFCPW0KQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQpDT05GSUdfVVNCX1NUT1JB
R0VfSVNEMjAwPW0KQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KQ09ORklHX1VTQl9TVE9S
QUdFX1NERFIwOT1tCkNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQpDT05GSUdfVVNCX1NU
T1JBR0VfSlVNUFNIT1Q9bQpDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPW0KQ09ORklHX1VT
Ql9TVE9SQUdFX09ORVRPVUNIPW0KQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPW0KQ09ORklH
X1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0I9bQpDT05GSUdfVVNCX1NUT1JBR0VfRU5FX1VC
NjI1MD1tCkNPTkZJR19VU0JfVUFTPW0KCiMKIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKQ09O
RklHX1VTQl9NREM4MDA9bQpDT05GSUdfVVNCX01JQ1JPVEVLPW0KQ09ORklHX1VTQklQX0NP
UkU9bQpDT05GSUdfVVNCSVBfVkhDSV9IQ0Q9bQpDT05GSUdfVVNCSVBfSE9TVD1tCiMgQ09O
RklHX1VTQklQX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzIg
aXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUEgaXMgbm90IHNldAojIENPTkZJR19V
U0JfSVNQMTc2MCBpcyBub3Qgc2V0CgojCiMgVVNCIHBvcnQgZHJpdmVycwojCkNPTkZJR19V
U0JfVVNTNzIwPW0KQ09ORklHX1VTQl9TRVJJQUw9bQpDT05GSUdfVVNCX1NFUklBTF9HRU5F
UklDPXkKQ09ORklHX1VTQl9TRVJJQUxfU0lNUExFPW0KQ09ORklHX1VTQl9TRVJJQUxfQUlS
Q0FCTEU9bQpDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KQ09ORklHX1VTQl9TRVJJQUxf
QkVMS0lOPW0KQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDE9bQpDT05GSUdfVVNCX1NFUklBTF9X
SElURUhFQVQ9bQpDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9DUDIxMFg9bQpDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KQ09O
RklHX1VTQl9TRVJJQUxfRU1QRUc9bQpDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCkNP
TkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lSPW0KQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9FREdFUE9SVF9UST1tCkNPTkZJR19VU0JfU0VSSUFMX0Y4MTIzMj1tCkNP
TkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCkNPTkZJR19VU0JfU0VSSUFMX0lQVz1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lVVT1tCkNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KQ09O
RklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCkNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQpDT05G
SUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQpDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1t
CkNPTkZJR19VU0JfU0VSSUFMX01FVFJPPW0KQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1t
CkNPTkZJR19VU0JfU0VSSUFMX01PUzc3MTVfUEFSUE9SVD15CkNPTkZJR19VU0JfU0VSSUFM
X01PUzc4NDA9bQpDT05GSUdfVVNCX1NFUklBTF9NWFVQT1JUPW0KQ09ORklHX1VTQl9TRVJJ
QUxfTkFWTUFOPW0KQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KQ09ORklHX1VTQl9TRVJJ
QUxfT1RJNjg1OD1tCkNPTkZJR19VU0JfU0VSSUFMX1FDQVVYPW0KQ09ORklHX1VTQl9TRVJJ
QUxfUVVBTENPTU09bQpDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KQ09ORklHX1VTQl9T
RVJJQUxfU0FGRT1tCiMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNl
dApDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUz1tCkNPTkZJR19VU0JfU0VSSUFM
X1NZTUJPTD1tCkNPTkZJR19VU0JfU0VSSUFMX1RJPW0KQ09ORklHX1VTQl9TRVJJQUxfQ1lC
RVJKQUNLPW0KQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KQ09ORklHX1VTQl9TRVJJQUxf
V1dBTj1tCkNPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCkNPTkZJR19VU0JfU0VSSUFMX09N
TklORVQ9bQpDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KQ09ORklHX1VTQl9TRVJJQUxf
WFNFTlNfTVQ9bQpDT05GSUdfVVNCX1NFUklBTF9XSVNIQk9ORT1tCkNPTkZJR19VU0JfU0VS
SUFMX1NTVTEwMD1tCkNPTkZJR19VU0JfU0VSSUFMX1FUMj1tCkNPTkZJR19VU0JfU0VSSUFM
X0RFQlVHPW0KCiMKIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiMKQ09ORklHX1VTQl9F
TUk2Mj1tCkNPTkZJR19VU0JfRU1JMjY9bQpDT05GSUdfVVNCX0FEVVRVWD1tCkNPTkZJR19V
U0JfU0VWU0VHPW0KQ09ORklHX1VTQl9SSU81MDA9bQpDT05GSUdfVVNCX0xFR09UT1dFUj1t
CkNPTkZJR19VU0JfTENEPW0KQ09ORklHX1VTQl9MRUQ9bQpDT05GSUdfVVNCX0NZUFJFU1Nf
Q1k3QzYzPW0KQ09ORklHX1VTQl9DWVRIRVJNPW0KQ09ORklHX1VTQl9JRE1PVVNFPW0KQ09O
RklHX1VTQl9GVERJX0VMQU49bQpDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCkNPTkZJR19V
U0JfU0lTVVNCVkdBPW0KQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKQ09ORklHX1VTQl9M
RD1tCkNPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQpDT05GSUdfVVNCX0lPV0FSUklPUj1t
CkNPTkZJR19VU0JfVEVTVD1tCkNPTkZJR19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFPW0KQ09O
RklHX1VTQl9JU0lHSFRGVz1tCkNPTkZJR19VU0JfWVVSRVg9bQpDT05GSUdfVVNCX0VaVVNC
X0ZYMj1tCiMgQ09ORklHX1VTQl9IU0lDX1VTQjM1MDMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NIQU9TS0VZIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9BVE09bQpDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQpDT05G
SUdfVVNCX0NYQUNSVT1tCkNPTkZJR19VU0JfVUVBR0xFQVRNPW0KQ09ORklHX1VTQl9YVVNC
QVRNPW0KCiMKIyBVU0IgUGh5c2ljYWwgTGF5ZXIgZHJpdmVycwojCiMgQ09ORklHX1VTQl9Q
SFkgaXMgbm90IHNldAojIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxMzAxIGlzIG5v
dCBzZXQKQ09ORklHX1VTQl9HQURHRVQ9bQojIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0dBREdF
VF9WQlVTX0RSQVc9MgpDT05GSUdfVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTPTIK
CiMKIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCiMKIyBDT05GSUdfVVNCX0ZPVEcyMTBf
VURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dSX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9SOEE2NjU5NyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9QWEEyN1ggaXMgbm90IHNl
dAojIENPTkZJR19VU0JfTVZfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01WX1UzRCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
QkRDX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9BTUQ1NTM2VURDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX05FVDIyNzIgaXMgbm90IHNldApDT05GSUdfVVNCX05FVDIyODA9bQoj
IENPTkZJR19VU0JfR09LVSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRUcyMFQ9bQojIENPTkZJ
R19VU0JfRFVNTVlfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENPTkZJR19VU0JfQVVESU8g
aXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0df
TkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19TVE9SQUdF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAojIENP
TkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9H
X01VTFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dfREJHUCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfTEVEX1RSSUc9eQpDT05GSUdfVVdCPW0KQ09ORklHX1VXQl9IV0E9
bQpDT05GSUdfVVdCX1dIQ0k9bQpDT05GSUdfVVdCX0kxNDgwVT1tCkNPTkZJR19NTUM9bQoj
IENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfQ0xLR0FURSBpcyBu
b3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiMKQ09ORklHX01NQ19CTE9D
Sz1tCkNPTkZJR19NTUNfQkxPQ0tfTUlOT1JTPTI1NgpDT05GSUdfTU1DX0JMT0NLX0JPVU5D
RT15CkNPTkZJR19TRElPX1VBUlQ9bQojIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Cgoj
CiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfTU1DX1NE
SENJPW0KQ09ORklHX01NQ19TREhDSV9QQ0k9bQpDT05GSUdfTU1DX1JJQ09IX01NQz15CkNP
TkZJR19NTUNfU0RIQ0lfQUNQST1tCiMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qg
c2V0CkNPTkZJR19NTUNfV0JTRD1tCkNPTkZJR19NTUNfVElGTV9TRD1tCiMgQ09ORklHX01N
Q19TUEkgaXMgbm90IHNldApDT05GSUdfTU1DX1NEUklDT0hfQ1M9bQpDT05GSUdfTU1DX0NC
NzEwPW0KQ09ORklHX01NQ19WSUFfU0RNTUM9bQpDT05GSUdfTU1DX1ZVQjMwMD1tCkNPTkZJ
R19NTUNfVVNIQz1tCiMgQ09ORklHX01NQ19VU0RISTZST0wwIGlzIG5vdCBzZXQKQ09ORklH
X01NQ19SRUFMVEVLX1BDST1tCkNPTkZJR19NTUNfUkVBTFRFS19VU0I9bQpDT05GSUdfTU1D
X1RPU0hJQkFfUENJPW0KQ09ORklHX01FTVNUSUNLPW0KIyBDT05GSUdfTUVNU1RJQ0tfREVC
VUcgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIGRyaXZlcnMKIwojIENPTkZJR19NRU1T
VElDS19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKQ09ORklHX01TUFJPX0JMT0NLPW0KIyBD
T05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIEhvc3QgQ29udHJv
bGxlciBEcml2ZXJzCiMKQ09ORklHX01FTVNUSUNLX1RJRk1fTVM9bQpDT05GSUdfTUVNU1RJ
Q0tfSk1JQ1JPTl8zOFg9bQpDT05GSUdfTUVNU1RJQ0tfUjU5Mj1tCkNPTkZJR19NRU1TVElD
S19SRUFMVEVLX1BDST1tCkNPTkZJR19NRU1TVElDS19SRUFMVEVLX1VTQj1tCkNPTkZJR19O
RVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdfTEVEU19DTEFTU19GTEFT
SCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlcnMKIwojIENPTkZJR19MRURTX0xNMzUzMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19QQ0E5NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKQ09O
RklHX0xFRFNfTFAzOTQ0PW0KIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0xQNTUyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1NTYyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19MUDg1MDEgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xQ
ODg2MCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX0NMRVZPX01BSUw9bQpDT05GSUdfTEVEU19Q
Q0E5NTVYPW0KIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5vdCBzZXQKQ09ORklHX0xFRFNf
REFDMTI0UzA4NT1tCkNPTkZJR19MRURTX0JEMjgwMj1tCkNPTkZJR19MRURTX0lOVEVMX1NT
NDIwMD1tCkNPTkZJR19MRURTX0xUMzU5Mz1tCkNPTkZJR19MRURTX0RFTExfTkVUQk9PS1M9
bQojIENPTkZJR19MRURTX1RDQTY1MDcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1
eCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX01FTkYyMUJNQz1tCgojCiMgTEVEIGRyaXZlciBm
b3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAo
SElEX1RISU5HTSkKIwojIENPTkZJR19MRURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfUE04OTQxX1dMRUQgaXMgbm90IHNldAoKIwojIExFRCBUcmlnZ2VycwojCkNPTkZJ
R19MRURTX1RSSUdHRVJTPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCkNPTkZJR19M
RURTX1RSSUdHRVJfT05FU0hPVD1tCkNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0K
Q09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQpDT05GSUdfTEVEU19UUklHR0VSX0NQ
VT15CkNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCkNPTkZJR19MRURTX1RSSUdHRVJfREVG
QVVMVF9PTj1tCgojCiMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29u
ZmlnIChMRUQgdGFyZ2V0KQojCkNPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UPW0KQ09O
RklHX0xFRFNfVFJJR0dFUl9DQU1FUkE9bQpDT05GSUdfQUNDRVNTSUJJTElUWT15CkNPTkZJ
R19BMTFZX0JSQUlMTEVfQ09OU09MRT15CkNPTkZJR19JTkZJTklCQU5EPW0KQ09ORklHX0lO
RklOSUJBTkRfVVNFUl9NQUQ9bQpDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCkNP
TkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5E
X1BBR0lORz15CkNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQpDT05GSUdfSU5GSU5J
QkFORF9NVEhDQT1tCkNPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKQ09ORklHX0lO
RklOSUJBTkRfSVBBVEg9bQpDT05GSUdfSU5GSU5JQkFORF9RSUI9bQpDT05GSUdfSU5GSU5J
QkFORF9RSUJfRENBPXkKQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDA9bQojIENPTkZJR19J
TkZJTklCQU5EX0FNU08xMTAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRf
Q1hHQjM9bQojIENPTkZJR19JTkZJTklCQU5EX0NYR0IzX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX0lORklOSUJBTkRfQ1hHQjQ9bQpDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KQ09ORklH
X01MWDVfSU5GSU5JQkFORD1tCkNPTkZJR19JTkZJTklCQU5EX05FUz1tCiMgQ09ORklHX0lO
RklOSUJBTkRfTkVTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRfT0NSRE1B
PW0KIyBDT05GSUdfSU5GSU5JQkFORF9VU05JQyBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklC
QU5EX0lQT0lCPW0KQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQpDT05GSUdfSU5GSU5J
QkFORF9JUE9JQl9ERUJVRz15CiMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFU
QSBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklCQU5EX1NSUD1tCkNPTkZJR19JTkZJTklCQU5E
X1NSUFQ9bQpDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KQ09ORklHX0lORklOSUJBTkRfSVNF
UlQ9bQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FDWV9TWVNGUz15CiMgQ09ORklH
X0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19ERUNPREVfTUNFPW0KIyBDT05G
SUdfRURBQ19NQ0VfSU5KIGlzIG5vdCBzZXQKQ09ORklHX0VEQUNfTU1fRURBQz1tCkNPTkZJ
R19FREFDX0FNRDY0PW0KIyBDT05GSUdfRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04gaXMg
bm90IHNldApDT05GSUdfRURBQ19FNzUyWD1tCkNPTkZJR19FREFDX0k4Mjk3NVg9bQpDT05G
SUdfRURBQ19JMzAwMD1tCkNPTkZJR19FREFDX0kzMjAwPW0KQ09ORklHX0VEQUNfSUUzMTIw
MD1tCkNPTkZJR19FREFDX1gzOD1tCkNPTkZJR19FREFDX0k1NDAwPW0KQ09ORklHX0VEQUNf
STdDT1JFPW0KQ09ORklHX0VEQUNfSTUwMDA9bQpDT05GSUdfRURBQ19JNTEwMD1tCkNPTkZJ
R19FREFDX0k3MzAwPW0KQ09ORklHX0VEQUNfU0JSSURHRT1tCkNPTkZJR19SVENfTElCPXkK
Q09ORklHX1JUQ19DTEFTUz15CkNPTkZJR19SVENfSENUT1NZUz15CkNPTkZJR19SVENfU1lT
VE9IQz15CkNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiMgQ09ORklHX1JUQ19E
RUJVRyBpcyBub3Qgc2V0CgojCiMgUlRDIGludGVyZmFjZXMKIwpDT05GSUdfUlRDX0lOVEZf
U1lTRlM9eQpDT05GSUdfUlRDX0lOVEZfUFJPQz15CkNPTkZJR19SVENfSU5URl9ERVY9eQoj
IENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX1RFU1QgaXMgbm90IHNldAoKIwojIEkyQyBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JU
Q19EUlZfQUJCNVpFUzMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgwWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9NQVg2OTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwNTcgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0YyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTIzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0Y4NTA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9CUTMySyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMw
MjlDMiBpcyBub3Qgc2V0CgojCiMgU1BJIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RS
Vl9NNDFUOTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9E
UzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2
OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjM0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9SWDQ1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX01DUDc5NSBp
cyBub3Qgc2V0CgojCiMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl9D
TU9TPXkKIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX0RTMTUxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE2ODVfRkFNSUxZIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMjQwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX01TTTYyNDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9WMzAyMCBpcyBub3Qgc2V0CgojCiMgb24tQ1BVIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdf
UlRDX0RSVl9YR0VORSBpcyBub3Qgc2V0CgojCiMgSElEIFNlbnNvciBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FIGlzIG5vdCBzZXQKQ09ORklHX0RN
QURFVklDRVM9eQojIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBE
TUEgRGV2aWNlcwojCiMgQ09ORklHX0lOVEVMX01JQ19YMTAwX0RNQSBpcyBub3Qgc2V0CkNP
TkZJR19JTlRFTF9JT0FURE1BPW0KQ09ORklHX0RXX0RNQUNfQ09SRT1tCkNPTkZJR19EV19E
TUFDPW0KIyBDT05GSUdfRFdfRE1BQ19QQ0kgaXMgbm90IHNldAojIENPTkZJR19IU1VfRE1B
X1BDSSBpcyBub3Qgc2V0CkNPTkZJR19ETUFfRU5HSU5FPXkKQ09ORklHX0RNQV9BQ1BJPXkK
CiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19BU1lOQ19UWF9ETUE9eQojIENPTkZJR19ETUFU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX0RNQV9FTkdJTkVfUkFJRD15CkNPTkZJR19EQ0E9bQoj
IENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKQ09ORklHX1VJTz1tCkNPTkZJR19VSU9f
Q0lGPW0KIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKIyBDT05GSUdfVUlP
X0RNRU1fR0VOSVJRIGlzIG5vdCBzZXQKQ09ORklHX1VJT19BRUM9bQpDT05GSUdfVUlPX1NF
UkNPUzM9bQpDT05GSUdfVUlPX1BDSV9HRU5FUklDPW0KQ09ORklHX1VJT19ORVRYPW0KQ09O
RklHX1VJT19NRjYyND1tCkNPTkZJR19WRklPX0lPTU1VX1RZUEUxPW0KQ09ORklHX1ZGSU9f
VklSUUZEPW0KQ09ORklHX1ZGSU89bQpDT05GSUdfVkZJT19QQ0k9bQpDT05GSUdfVkZJT19Q
Q0lfVkdBPXkKQ09ORklHX1ZGSU9fUENJX01NQVA9eQpDT05GSUdfVkZJT19QQ0lfSU5UWD15
CkNPTkZJR19WSVJUX0RSSVZFUlM9eQpDT05GSUdfVklSVElPPW0KCiMKIyBWaXJ0aW8gZHJp
dmVycwojCkNPTkZJR19WSVJUSU9fUENJPW0KQ09ORklHX1ZJUlRJT19QQ0lfTEVHQUNZPXkK
Q09ORklHX1ZJUlRJT19CQUxMT09OPW0KQ09ORklHX1ZJUlRJT19JTlBVVD1tCiMgQ09ORklH
X1ZJUlRJT19NTUlPIGlzIG5vdCBzZXQKCiMKIyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBz
dXBwb3J0CiMKQ09ORklHX0hZUEVSVj1tCkNPTkZJR19IWVBFUlZfVVRJTFM9bQpDT05GSUdf
SFlQRVJWX0JBTExPT049bQoKIwojIFhlbiBkcml2ZXIgc3VwcG9ydAojCkNPTkZJR19YRU5f
QkFMTE9PTj15CiMgQ09ORklHX1hFTl9CQUxMT09OX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBz
ZXQKQ09ORklHX1hFTl9TQ1JVQl9QQUdFUz15CkNPTkZJR19YRU5fREVWX0VWVENITj1tCkNP
TkZJR19YRU5fQkFDS0VORD15CkNPTkZJR19YRU5GUz1tCkNPTkZJR19YRU5fQ09NUEFUX1hF
TkZTPXkKQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19YRU5fWEVOQlVTX0ZS
T05URU5EPXkKQ09ORklHX1hFTl9HTlRERVY9bQpDT05GSUdfWEVOX0dSQU5UX0RFVl9BTExP
Qz1tCkNPTkZJR19TV0lPVExCX1hFTj15CkNPTkZJR19YRU5fVE1FTT1tCkNPTkZJR19YRU5f
UENJREVWX0JBQ0tFTkQ9bQpDT05GSUdfWEVOX1NDU0lfQkFDS0VORD1tCkNPTkZJR19YRU5f
UFJJVkNNRD1tCkNPTkZJR19YRU5fQUNQSV9QUk9DRVNTT1I9bQpDT05GSUdfWEVOX01DRV9M
T0c9eQpDT05GSUdfWEVOX0hBVkVfUFZNTVU9eQpDT05GSUdfWEVOX0VGST15CkNPTkZJR19Y
RU5fQVVUT19YTEFURT15CkNPTkZJR19YRU5fQUNQST15CkNPTkZJR19TVEFHSU5HPXkKIyBD
T05GSUdfU0xJQ09TUyBpcyBub3Qgc2V0CkNPTkZJR19QUklTTTJfVVNCPW0KQ09ORklHX0NP
TUVEST1tCiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElf
REVGQVVMVF9CVUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFY
U0laRV9LQj0yMDQ4MApDT05GSUdfQ09NRURJX01JU0NfRFJJVkVSUz15CkNPTkZJR19DT01F
RElfQk9ORD1tCkNPTkZJR19DT01FRElfVEVTVD1tCkNPTkZJR19DT01FRElfUEFSUE9SVD1t
CkNPTkZJR19DT01FRElfU0VSSUFMMjAwMj1tCiMgQ09ORklHX0NPTUVESV9JU0FfRFJJVkVS
UyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfUENJX0RSSVZFUlM9bQpDT05GSUdfQ09NRURJ
XzgyNTVfUENJPW0KQ09ORklHX0NPTUVESV9BRERJX1dBVENIRE9HPW0KQ09ORklHX0NPTUVE
SV9BRERJX0FQQ0lfMTAzMj1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE1MDA9bQpDT05G
SUdfQ09NRURJX0FERElfQVBDSV8xNTE2PW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMTU2
ND1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE2WFg9bQpDT05GSUdfQ09NRURJX0FERElf
QVBDSV8yMDMyPW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMjIwMD1tCkNPTkZJR19DT01F
RElfQURESV9BUENJXzMxMjA9bQpDT05GSUdfQ09NRURJX0FERElfQVBDSV8zNTAxPW0KQ09O
RklHX0NPTUVESV9BRERJX0FQQ0lfM1hYWD1tCkNPTkZJR19DT01FRElfQURMX1BDSTYyMDg9
bQpDT05GSUdfQ09NRURJX0FETF9QQ0k3WDNYPW0KQ09ORklHX0NPTUVESV9BRExfUENJODE2
ND1tCkNPTkZJR19DT01FRElfQURMX1BDSTkxMTE9bQpDT05GSUdfQ09NRURJX0FETF9QQ0k5
MTE4PW0KQ09ORklHX0NPTUVESV9BRFZfUENJMTcxMD1tCkNPTkZJR19DT01FRElfQURWX1BD
STE3MjM9bQpDT05GSUdfQ09NRURJX0FEVl9QQ0kxNzI0PW0KQ09ORklHX0NPTUVESV9BRFZf
UENJX0RJTz1tCkNPTkZJR19DT01FRElfQU1QTENfRElPMjAwX1BDST1tCkNPTkZJR19DT01F
RElfQU1QTENfUEMyMzZfUENJPW0KQ09ORklHX0NPTUVESV9BTVBMQ19QQzI2M19QQ0k9bQpD
T05GSUdfQ09NRURJX0FNUExDX1BDSTIyND1tCkNPTkZJR19DT01FRElfQU1QTENfUENJMjMw
PW0KQ09ORklHX0NPTUVESV9DT05URUNfUENJX0RJTz1tCkNPTkZJR19DT01FRElfREFTMDhf
UENJPW0KQ09ORklHX0NPTUVESV9EVDMwMDA9bQpDT05GSUdfQ09NRURJX0RZTkFfUENJMTBY
WD1tCkNPTkZJR19DT01FRElfR1NDX0hQREk9bQpDT05GSUdfQ09NRURJX01GNlg0PW0KQ09O
RklHX0NPTUVESV9JQ1BfTVVMVEk9bQpDT05GSUdfQ09NRURJX0RBUUJPQVJEMjAwMD1tCkNP
TkZJR19DT01FRElfSlIzX1BDST1tCkNPTkZJR19DT01FRElfS0VfQ09VTlRFUj1tCkNPTkZJ
R19DT01FRElfQ0JfUENJREFTNjQ9bQpDT05GSUdfQ09NRURJX0NCX1BDSURBUz1tCkNPTkZJ
R19DT01FRElfQ0JfUENJRERBPW0KQ09ORklHX0NPTUVESV9DQl9QQ0lNREFTPW0KQ09ORklH
X0NPTUVESV9DQl9QQ0lNRERBPW0KQ09ORklHX0NPTUVESV9NRTQwMDA9bQpDT05GSUdfQ09N
RURJX01FX0RBUT1tCkNPTkZJR19DT01FRElfTklfNjUyNz1tCkNPTkZJR19DT01FRElfTklf
NjVYWD1tCkNPTkZJR19DT01FRElfTklfNjYwWD1tCkNPTkZJR19DT01FRElfTklfNjcwWD1t
CkNPTkZJR19DT01FRElfTklfTEFCUENfUENJPW0KQ09ORklHX0NPTUVESV9OSV9QQ0lESU89
bQpDT05GSUdfQ09NRURJX05JX1BDSU1JTz1tCkNPTkZJR19DT01FRElfUlRENTIwPW0KQ09O
RklHX0NPTUVESV9TNjI2PW0KQ09ORklHX0NPTUVESV9NSVRFPW0KQ09ORklHX0NPTUVESV9O
SV9USU9DTUQ9bQpDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTPW0KQ09ORklHX0NPTUVE
SV9DQl9EQVMxNl9DUz1tCkNPTkZJR19DT01FRElfREFTMDhfQ1M9bQpDT05GSUdfQ09NRURJ
X05JX0RBUV83MDBfQ1M9bQpDT05GSUdfQ09NRURJX05JX0RBUV9ESU8yNF9DUz1tCkNPTkZJ
R19DT01FRElfTklfTEFCUENfQ1M9bQpDT05GSUdfQ09NRURJX05JX01JT19DUz1tCkNPTkZJ
R19DT01FRElfUVVBVEVDSF9EQVFQX0NTPW0KQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz1t
CkNPTkZJR19DT01FRElfRFQ5ODEyPW0KQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPW0KQ09O
RklHX0NPTUVESV9VU0JEVVg9bQpDT05GSUdfQ09NRURJX1VTQkRVWEZBU1Q9bQpDT05GSUdf
Q09NRURJX1VTQkRVWFNJR01BPW0KQ09ORklHX0NPTUVESV9WTUs4MFhYPW0KQ09ORklHX0NP
TUVESV84MjU0PW0KQ09ORklHX0NPTUVESV84MjU1PW0KQ09ORklHX0NPTUVESV9LQ09NRURJ
TElCPW0KQ09ORklHX0NPTUVESV9BTVBMQ19ESU8yMDA9bQpDT05GSUdfQ09NRURJX0FNUExD
X1BDMjM2PW0KQ09ORklHX0NPTUVESV9EQVMwOD1tCkNPTkZJR19DT01FRElfTklfTEFCUEM9
bQpDT05GSUdfQ09NRURJX05JX1RJTz1tCiMgQ09ORklHX1BBTkVMIGlzIG5vdCBzZXQKQ09O
RklHX1JUTDgxOTJVPW0KQ09ORklHX1JUTExJQj1tCkNPTkZJR19SVExMSUJfQ1JZUFRPX0ND
TVA9bQpDT05GSUdfUlRMTElCX0NSWVBUT19US0lQPW0KQ09ORklHX1JUTExJQl9DUllQVE9f
V0VQPW0KQ09ORklHX1JUTDgxOTJFPW0KQ09ORklHX1I4NzEyVT1tCkNPTkZJR19SODE4OEVV
PW0KQ09ORklHXzg4RVVfQVBfTU9ERT15CkNPTkZJR19SODcyM0FVPW0KQ09ORklHXzg3MjNB
VV9BUF9NT0RFPXkKQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUPXkKQ09ORklHX1JUUzUyMDg9
bQojIENPTkZJR19WVDY2NTUgaXMgbm90IHNldApDT05GSUdfVlQ2NjU2PW0KCiMKIyBJSU8g
c3RhZ2luZyBkcml2ZXJzCiMKCiMKIyBBY2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMx
NjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjIwNCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwOSBpcyBub3Qgc2V0CiMg
Q09ORklHX0FESVMxNjIyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjI0MCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xJUzNMMDJEUSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDQTMwMDAgaXMg
bm90IHNldAoKIwojIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19B
RDc2MDYgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19B
RDc4MTYgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNldAojIENPTkZJR19B
RDcyODAgaXMgbm90IHNldAoKIwojIEFuYWxvZyBkaWdpdGFsIGJpLWRpcmVjdGlvbiBjb252
ZXJ0ZXJzCiMKIyBDT05GSUdfQURUNzMxNiBpcyBub3Qgc2V0CgojCiMgQ2FwYWNpdGFuY2Ug
dG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ3MTUwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3MTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzQ2IGlzIG5vdCBzZXQKCiMK
IyBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNl
dAojIENPTkZJR19BRDk4MzQgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgZ3lyb3Njb3BlIHNl
bnNvcnMKIwojIENPTkZJR19BRElTMTYwNjAgaXMgbm90IHNldAoKIwojIE5ldHdvcmsgQW5h
bHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ1OTMzIGlzIG5vdCBz
ZXQKCiMKIyBMaWdodCBzZW5zb3JzCiMKQ09ORklHX1NFTlNPUlNfSVNMMjkwMTg9bQojIENP
TkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKQ09ORklHX1RTTDI1ODM9bQojIENP
TkZJR19UU0wyeDd4IGlzIG5vdCBzZXQKCiMKIyBNYWduZXRvbWV0ZXIgc2Vuc29ycwojCiMg
Q09ORklHX1NFTlNPUlNfSE1DNTg0M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hNQzU4NDNfU1BJIGlzIG5vdCBzZXQKCiMKIyBBY3RpdmUgZW5lcmd5IG1ldGVyaW5nIElD
CiMKIyBDT05GSUdfQURFNzc1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0FERTc3NTQgaXMgbm90
IHNldAojIENPTkZJR19BREU3NzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfQURFNzc1OSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FERTc4NTQgaXMgbm90IHNldAoKIwojIFJlc29sdmVyIHRvIGRp
Z2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19QRVJJT0RJQ19SVENfVFJJ
R0dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TSU1QTEVfRFVNTVkgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfWEdJIGlzIG5vdCBzZXQKIyBDT05GSUdfRlQxMDAwIGlzIG5vdCBz
ZXQKCiMKIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCiMKQ09ORklHX1NQRUFLVVA9bQpDT05G
SUdfU1BFQUtVUF9TWU5USF9BQ05UU0E9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BUE9MTE89
bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BVURQVFI9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9C
TlM9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9ERUNUTEs9bQpDT05GSUdfU1BFQUtVUF9TWU5U
SF9ERUNFWFQ9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9MVExLPW0KQ09ORklHX1NQRUFLVVBf
U1lOVEhfU09GVD1tCkNPTkZJR19TUEVBS1VQX1NZTlRIX1NQS09VVD1tCkNPTkZJR19TUEVB
S1VQX1NZTlRIX1RYUFJUPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfRFVNTVk9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9TWU5BUFRJQ1NfSTJDX1JNSTQgaXMgbm90IHNldApDT05GSUdfU1RB
R0lOR19NRURJQT15CiMgQ09ORklHX0kyQ19CQ00yMDQ4IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0NYRDIwOTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EVDMxNTUgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfTU44ODQ3MiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NTjg4NDcz
IGlzIG5vdCBzZXQKQ09ORklHX0xJUkNfU1RBR0lORz15CkNPTkZJR19MSVJDX0JUODI5PW0K
Q09ORklHX0xJUkNfSU1PTj1tCiMgQ09ORklHX0xJUkNfUEFSQUxMRUwgaXMgbm90IHNldApD
T05GSUdfTElSQ19TQVNFTT1tCkNPTkZJR19MSVJDX1NFUklBTD1tCkNPTkZJR19MSVJDX1NF
UklBTF9UUkFOU01JVFRFUj15CkNPTkZJR19MSVJDX1NJUj1tCkNPTkZJR19MSVJDX1pJTE9H
PW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfVVNCX1dQQU5fSENEIGlzIG5vdCBzZXQKQ09O
RklHX1dJTUFYX0dETTcyWFg9bQojIENPTkZJR19XSU1BWF9HRE03MlhYX1FPUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1dJTUFYX0dETTcyWFhfS19NT0RFIGlzIG5vdCBzZXQKIyBDT05GSUdf
V0lNQVhfR0RNNzJYWF9XSU1BWDIgaXMgbm90IHNldApDT05GSUdfV0lNQVhfR0RNNzJYWF9V
U0I9eQojIENPTkZJR19XSU1BWF9HRE03MlhYX1NESU8gaXMgbm90IHNldApDT05GSUdfV0lN
QVhfR0RNNzJYWF9VU0JfUE09eQojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJUkVXSVJFX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TUElOQU5E
X01UMjlGIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9GUz1tCkNPTkZJR19MVVNUUkVfT0JE
X01BWF9JT0NUTF9CVUZGRVI9ODE5MgojIENPTkZJR19MVVNUUkVfREVCVUdfRVhQRU5TSVZF
X0NIRUNLIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9MTElURV9MTE9PUD1tCkNPTkZJR19M
TkVUPW0KQ09ORklHX0xORVRfTUFYX1BBWUxPQUQ9MTA0ODU3NgojIENPTkZJR19MTkVUX1NF
TEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0xORVRfWFBSVF9JQj1tCiMgQ09ORklHX0RHTkMg
aXMgbm90IHNldAojIENPTkZJR19ER0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfR1NfRlBHQUJP
T1QgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU0tFSU4gaXMgbm90IHNldAojIENPTkZJ
R19VTklTWVNTUEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVEZUIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09O
RklHX0FDRVJfV01JPW0KQ09ORklHX0FDRVJIREY9bQpDT05GSUdfQUxJRU5XQVJFX1dNST1t
CkNPTkZJR19BU1VTX0xBUFRPUD1tCkNPTkZJR19ERUxMX0xBUFRPUD1tCkNPTkZJR19ERUxM
X1dNST1tCkNPTkZJR19ERUxMX1dNSV9BSU89bQpDT05GSUdfREVMTF9TTU84ODAwPW0KQ09O
RklHX0ZVSklUU1VfTEFQVE9QPW0KIyBDT05GSUdfRlVKSVRTVV9MQVBUT1BfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlVKSVRTVV9UQUJMRVQ9bQpDT05GSUdfQU1JTE9fUkZLSUxMPW0K
Q09ORklHX0hQX0FDQ0VMPW0KQ09ORklHX0hQX1dJUkVMRVNTPW0KQ09ORklHX0hQX1dNST1t
CkNPTkZJR19NU0lfTEFQVE9QPW0KQ09ORklHX1BBTkFTT05JQ19MQVBUT1A9bQpDT05GSUdf
Q09NUEFMX0xBUFRPUD1tCkNPTkZJR19TT05ZX0xBUFRPUD1tCkNPTkZJR19TT05ZUElfQ09N
UEFUPXkKQ09ORklHX0lERUFQQURfTEFQVE9QPW0KQ09ORklHX1RISU5LUEFEX0FDUEk9bQpD
T05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQ9eQojIENPTkZJR19USElOS1BBRF9B
Q1BJX0RFQlVHRkFDSUxJVElFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RISU5LUEFEX0FDUElf
REVCVUcgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTIGlz
IG5vdCBzZXQKQ09ORklHX1RISU5LUEFEX0FDUElfVklERU89eQpDT05GSUdfVEhJTktQQURf
QUNQSV9IT1RLRVlfUE9MTD15CkNPTkZJR19TRU5TT1JTX0hEQVBTPW0KIyBDT05GSUdfSU5U
RUxfTUVOTE9XIGlzIG5vdCBzZXQKQ09ORklHX0VFRVBDX0xBUFRPUD1tCkNPTkZJR19BU1VT
X1dNST1tCkNPTkZJR19BU1VTX05CX1dNST1tCkNPTkZJR19FRUVQQ19XTUk9bQpDT05GSUdf
QUNQSV9XTUk9bQpDT05GSUdfTVNJX1dNST1tCkNPTkZJR19UT1BTVEFSX0xBUFRPUD1tCkNP
TkZJR19BQ1BJX1RPU0hJQkE9bQpDT05GSUdfVE9TSElCQV9CVF9SRktJTEw9bQpDT05GSUdf
VE9TSElCQV9IQVBTPW0KQ09ORklHX0FDUElfQ01QQz1tCkNPTkZJR19JTlRFTF9JUFM9bQpD
T05GSUdfSUJNX1JUTD1tCkNPTkZJR19TQU1TVU5HX0xBUFRPUD1tCkNPTkZJR19NWE1fV01J
PW0KQ09ORklHX0lOVEVMX09BS1RSQUlMPW0KQ09ORklHX1NBTVNVTkdfUTEwPW0KQ09ORklH
X0FQUExFX0dNVVg9bQpDT05GSUdfSU5URUxfUlNUPW0KQ09ORklHX0lOVEVMX1NNQVJUQ09O
TkVDVD1tCkNPTkZJR19QVlBBTklDPW0KQ09ORklHX0NIUk9NRV9QTEFURk9STVM9eQpDT05G
SUdfQ0hST01FT1NfTEFQVE9QPW0KQ09ORklHX0NIUk9NRU9TX1BTVE9SRT1tCkNPTkZJR19D
TEtERVZfTE9PS1VQPXkKQ09ORklHX0hBVkVfQ0xLX1BSRVBBUkU9eQpDT05GSUdfQ09NTU9O
X0NMSz15CgojCiMgQ29tbW9uIENsb2NrIEZyYW1ld29yawojCiMgQ09ORklHX0NPTU1PTl9D
TEtfU0k1MzUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19QWEEgaXMgbm90IHNl
dAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAoKIwojIEhhcmR3YXJl
IFNwaW5sb2NrIGRyaXZlcnMKIwoKIwojIENsb2NrIFNvdXJjZSBkcml2ZXJzCiMKQ09ORklH
X0NMS0VWVF9JODI1Mz15CkNPTkZJR19JODI1M19MT0NLPXkKQ09ORklHX0NMS0JMRF9JODI1
Mz15CiMgQ09ORklHX0FUTUVMX1BJVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX0NN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX01UVTIgaXMgbm90IHNldAojIENPTkZJ
R19TSF9USU1FUl9UTVUgaXMgbm90IHNldAojIENPTkZJR19FTV9USU1FUl9TVEkgaXMgbm90
IHNldAojIENPTkZJR19NQUlMQk9YIGlzIG5vdCBzZXQKQ09ORklHX0lPTU1VX0FQST15CkNP
TkZJR19JT01NVV9TVVBQT1JUPXkKCiMKIyBHZW5lcmljIElPTU1VIFBhZ2V0YWJsZSBTdXBw
b3J0CiMKQ09ORklHX0lPTU1VX0lPVkE9eQpDT05GSUdfQU1EX0lPTU1VPXkKIyBDT05GSUdf
QU1EX0lPTU1VX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0FNRF9JT01NVV9WMj15CkNPTkZJ
R19ETUFSX1RBQkxFPXkKQ09ORklHX0lOVEVMX0lPTU1VPXkKIyBDT05GSUdfSU5URUxfSU9N
TVVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9JT01NVV9GTE9QUFlfV0E9
eQpDT05GSUdfSVJRX1JFTUFQPXkKCiMKIyBSZW1vdGVwcm9jIGRyaXZlcnMKIwojIENPTkZJ
R19TVEVfTU9ERU1fUlBST0MgaXMgbm90IHNldAoKIwojIFJwbXNnIGRyaXZlcnMKIwoKIwoj
IFNPQyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmljIERyaXZlcnMKIwojIENPTkZJR19TT0Nf
VEkgaXMgbm90IHNldApDT05GSUdfUE1fREVWRlJFUT15CgojCiMgREVWRlJFUSBHb3Zlcm5v
cnMKIwpDT05GSUdfREVWRlJFUV9HT1ZfU0lNUExFX09OREVNQU5EPW0KIyBDT05GSUdfREVW
RlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9Q
T1dFUlNBVkUgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9VU0VSU1BBQ0UgaXMg
bm90IHNldAoKIwojIERFVkZSRVEgRHJpdmVycwojCiMgQ09ORklHX1BNX0RFVkZSRVFfRVZF
TlQgaXMgbm90IHNldAojIENPTkZJR19FWFRDT04gaXMgbm90IHNldApDT05GSUdfTUVNT1JZ
PXkKQ09ORklHX0lJTz1tCkNPTkZJR19JSU9fQlVGRkVSPXkKIyBDT05GSUdfSUlPX0JVRkZF
Ul9DQiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklH
R0VSRURfQlVGRkVSPW0KQ09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1F
UlNfUEVSX1RSSUdHRVI9MgoKIwojIEFjY2VsZXJvbWV0ZXJzCiMKIyBDT05GSUdfQk1BMTgw
IGlzIG5vdCBzZXQKQ09ORklHX0JNQzE1MF9BQ0NFTD1tCkNPTkZJR19ISURfU0VOU09SX0FD
Q0VMXzNEPW0KIyBDT05GSUdfSUlPX1NUX0FDQ0VMXzNBWElTIGlzIG5vdCBzZXQKIyBDT05G
SUdfS1hTRDkgaXMgbm90IHNldAojIENPTkZJR19NTUE4NDUyIGlzIG5vdCBzZXQKQ09ORklH
X0tYQ0pLMTAxMz1tCkNPTkZJR19NTUE5NTUxX0NPUkU9bQpDT05GSUdfTU1BOTU1MT1tCkNP
TkZJR19NTUE5NTUzPW0KCiMKIyBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBD
T05GSUdfQUQ3MjY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MjkxIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3Mjk4IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NDc2IGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3NzkxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzkzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3ODg3IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3OTIzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3OTlYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTAyNyBpcyBub3Qgc2V0CiMg
Q09ORklHX01BWDEzNjMgaXMgbm90IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUNQMzQyMiBpcyBub3Qgc2V0CiMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNl
dAojIENPTkZJR19USV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTI4UzA1
MiBpcyBub3Qgc2V0CkNPTkZJR19WSVBFUkJPQVJEX0FEQz1tCgojCiMgQW1wbGlmaWVycwoj
CiMgQ09ORklHX0FEODM2NiBpcyBub3Qgc2V0CgojCiMgSGlkIFNlbnNvciBJSU8gQ29tbW9u
CiMKQ09ORklHX0hJRF9TRU5TT1JfSUlPX0NPTU1PTj1tCkNPTkZJR19ISURfU0VOU09SX0lJ
T19UUklHR0VSPW0KCiMKIyBTU1AgU2Vuc29yIENvbW1vbgojCiMgQ09ORklHX0lJT19TU1Bf
U0VOU09SSFVCIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXJz
CiMKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NTA0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NjI0Ul9TUEkgaXMg
bm90IHNldAojIENPTkZJR19BRDU2ODYgaXMgbm90IHNldAojIENPTkZJR19BRDU3NTUgaXMg
bm90IHNldAojIENPTkZJR19BRDU3NjQgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMg
bm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAojIENPTkZJR19NQVg1MTcgaXMg
bm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDkyMiBp
cyBub3Qgc2V0CgojCiMgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBD
bG9jayBHZW5lcmF0b3IvRGlzdHJpYnV0aW9uCiMKIyBDT05GSUdfQUQ5NTIzIGlzIG5vdCBz
ZXQKCiMKIyBQaGFzZS1Mb2NrZWQgTG9vcCAoUExMKSBmcmVxdWVuY3kgc3ludGhlc2l6ZXJz
CiMKIyBDT05GSUdfQURGNDM1MCBpcyBub3Qgc2V0CgojCiMgRGlnaXRhbCBneXJvc2NvcGUg
c2Vuc29ycwojCiMgQ09ORklHX0FESVMxNjA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMx
NjEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWFJTNDUwIGlzIG5vdCBzZXQKQ09O
RklHX0JNRzE2MD1tCkNPTkZJR19ISURfU0VOU09SX0dZUk9fM0Q9bQojIENPTkZJR19JSU9f
U1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAgaXMgbm90IHNldAoK
IwojIEh1bWlkaXR5IHNlbnNvcnMKIwojIENPTkZJR19ESFQxMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CgojCiMg
SW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKIwojIENPTkZJR19BRElTMTY0MDAgaXMgbm90
IHNldAojIENPTkZJR19BRElTMTY0ODAgaXMgbm90IHNldApDT05GSUdfS01YNjE9bQpDT05G
SUdfSU5WX01QVTYwNTBfSUlPPW0KCiMKIyBMaWdodCBzZW5zb3JzCiMKIyBDT05GSUdfQURK
RF9TMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FQRFM5MzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAyMEEwMEYgaXMgbm90IHNl
dAojIENPTkZJR19JU0wyOTEyNSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX0FMUz1t
CkNPTkZJR19ISURfU0VOU09SX1BST1g9bQpDT05GSUdfSlNBMTIxMj1tCiMgQ09ORklHX0xU
UjUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUzM0MTQgaXMgbm90IHNldAojIENPTkZJR19U
Q1MzNDcyIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfVFNMMjU2Mz1tCiMgQ09ORklHX1RT
TDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAwMCBpcyBub3Qgc2V0CgojCiMgTWFn
bmV0b21ldGVyIHNlbnNvcnMKIwpDT05GSUdfQUs4OTc1PW0KIyBDT05GSUdfQUswOTkxMSBp
cyBub3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNP
Ul9NQUdORVRPTUVURVJfM0Q9bQojIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qg
c2V0CgojCiMgSW5jbGlub21ldGVyIHNlbnNvcnMKIwpDT05GSUdfSElEX1NFTlNPUl9JTkNM
SU5PTUVURVJfM0Q9bQpDT05GSUdfSElEX1NFTlNPUl9ERVZJQ0VfUk9UQVRJT049bQoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dF
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TWVNGU19UUklHR0VSIGlzIG5vdCBzZXQKCiMK
IyBQcmVzc3VyZSBzZW5zb3JzCiMKQ09ORklHX0JNUDI4MD1tCkNPTkZJR19ISURfU0VOU09S
X1BSRVNTPW0KIyBDT05GSUdfTVBMMTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMzExNSBp
cyBub3Qgc2V0CiMgQ09ORklHX01TNTYxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9Q
UkVTUyBpcyBub3Qgc2V0CiMgQ09ORklHX1Q1NDAzIGlzIG5vdCBzZXQKCiMKIyBMaWdodG5p
bmcgc2Vuc29ycwojCiMgQ09ORklHX0FTMzkzNSBpcyBub3Qgc2V0CgojCiMgUHJveGltaXR5
IHNlbnNvcnMKIwpDT05GSUdfU1g5NTAwPW0KCiMKIyBUZW1wZXJhdHVyZSBzZW5zb3JzCiMK
IyBDT05GSUdfTUxYOTA2MTQgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNl
dAojIENPTkZJR19OVEIgaXMgbm90IHNldAojIENPTkZJR19WTUVfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUFdNIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBBQ0tfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVTRVRfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZNQyBpcyBu
b3Qgc2V0CgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09O
RklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSQ0FQPXkKQ09O
RklHX0lOVEVMX1JBUEw9bQojIENPTkZJR19NQ0IgaXMgbm90IHNldApDT05GSUdfUkFTPXkK
Q09ORklHX1RIVU5ERVJCT0xUPW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfQU5EUk9JRCBp
cyBub3Qgc2V0CgojCiMgRmlybXdhcmUgRHJpdmVycwojCkNPTkZJR19FREQ9bQojIENPTkZJ
R19FRERfT0ZGIGlzIG5vdCBzZXQKQ09ORklHX0ZJUk1XQVJFX01FTU1BUD15CkNPTkZJR19E
RUxMX1JCVT1tCkNPTkZJR19EQ0RCQVM9bQpDT05GSUdfRE1JSUQ9eQpDT05GSUdfRE1JX1NZ
U0ZTPXkKQ09ORklHX0RNSV9TQ0FOX01BQ0hJTkVfTk9OX0VGSV9GQUxMQkFDSz15CkNPTkZJ
R19JU0NTSV9JQkZUX0ZJTkQ9eQpDT05GSUdfSVNDU0lfSUJGVD1tCiMgQ09ORklHX0dPT0dM
RV9GSVJNV0FSRSBpcyBub3Qgc2V0CgojCiMgRUZJIChFeHRlbnNpYmxlIEZpcm13YXJlIElu
dGVyZmFjZSkgU3VwcG9ydAojCkNPTkZJR19FRklfVkFSUz1tCkNPTkZJR19FRklfVkFSU19Q
U1RPUkU9bQojIENPTkZJR19FRklfVkFSU19QU1RPUkVfREVGQVVMVF9ESVNBQkxFIGlzIG5v
dCBzZXQKQ09ORklHX0VGSV9SVU5USU1FX01BUD15CkNPTkZJR19FRklfUlVOVElNRV9XUkFQ
UEVSUz15CkNPTkZJR19VRUZJX0NQRVI9eQoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19E
Q0FDSEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUM19GUyBpcyBub3Qgc2V0CkNPTkZJR19FWFQ0X0ZTPW0KQ09ORklHX0VYVDRfVVNF
X0ZPUl9FWFQyMz15CkNPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CkNPTkZJR19FWFQ0X0ZT
X1NFQ1VSSVRZPXkKIyBDT05GSUdfRVhUNF9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19KQkQyPW0KIyBDT05GSUdfSkJEMl9E
RUJVRyBpcyBub3Qgc2V0CkNPTkZJR19GU19NQkNBQ0hFPW0KQ09ORklHX1JFSVNFUkZTX0ZT
PW0KIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19SRUlTRVJG
U19QUk9DX0lORk8gaXMgbm90IHNldApDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQpDT05G
SUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZ
PXkKQ09ORklHX0pGU19GUz1tCkNPTkZJR19KRlNfUE9TSVhfQUNMPXkKQ09ORklHX0pGU19T
RUNVUklUWT15CiMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0pGU19T
VEFUSVNUSUNTIGlzIG5vdCBzZXQKQ09ORklHX1hGU19GUz1tCkNPTkZJR19YRlNfUVVPVEE9
eQpDT05GSUdfWEZTX1BPU0lYX0FDTD15CkNPTkZJR19YRlNfUlQ9eQojIENPTkZJR19YRlNf
V0FSTiBpcyBub3Qgc2V0CiMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19H
RlMyX0ZTPW0KQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09eQpDT05GSUdfT0NGUzJfRlM9
bQpDT05GSUdfT0NGUzJfRlNfTzJDQj1tCkNPTkZJR19PQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xV
U1RFUj1tCkNPTkZJR19PQ0ZTMl9GU19TVEFUUz15CkNPTkZJR19PQ0ZTMl9ERUJVR19NQVNL
TE9HPXkKIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfQlRSRlNf
RlM9bQpDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIyBDT05GSUdfQlRSRlNfRlNfQ0hF
Q0tfSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRSRlNfRlNfUlVOX1NBTklUWV9U
RVNUUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUUkZTX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRSRlNfQVNTRVJUIGlzIG5vdCBzZXQKQ09ORklHX05JTEZTMl9GUz1tCkNPTkZJR19G
MkZTX0ZTPW0KQ09ORklHX0YyRlNfU1RBVF9GUz15CkNPTkZJR19GMkZTX0ZTX1hBVFRSPXkK
Q09ORklHX0YyRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0YyRlNfRlNfU0VDVVJJVFk9eQoj
IENPTkZJR19GMkZTX0NIRUNLX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRjJGU19JT19UUkFD
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19GU19QT1NJ
WF9BQ0w9eQpDT05GSUdfRVhQT1JURlM9eQpDT05GSUdfRklMRV9MT0NLSU5HPXkKQ09ORklH
X0ZTTk9USUZZPXkKQ09ORklHX0ROT1RJRlk9eQpDT05GSUdfSU5PVElGWV9VU0VSPXkKQ09O
RklHX0ZBTk9USUZZPXkKIyBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TIGlz
IG5vdCBzZXQKQ09ORklHX1FVT1RBPXkKQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNF
PXkKQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQojIENPTkZJR19RVU9UQV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19RVU9UQV9UUkVFPW0KQ09ORklHX1FGTVRfVjE9bQpDT05GSUdf
UUZNVF9WMj1tCkNPTkZJR19RVU9UQUNUTD15CkNPTkZJR19RVU9UQUNUTF9DT01QQVQ9eQpD
T05GSUdfQVVUT0ZTNF9GUz1tCkNPTkZJR19GVVNFX0ZTPW0KQ09ORklHX0NVU0U9bQpDT05G
SUdfT1ZFUkxBWV9GUz1tCgojCiMgQ2FjaGVzCiMKQ09ORklHX0ZTQ0FDSEU9bQpDT05GSUdf
RlNDQUNIRV9TVEFUUz15CiMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTQ0FDSEVfT0JK
RUNUX0xJU1QgaXMgbm90IHNldApDT05GSUdfQ0FDSEVGSUxFUz1tCiMgQ09ORklHX0NBQ0hF
RklMRVNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBp
cyBub3Qgc2V0CgojCiMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYw
X0ZTPW0KQ09ORklHX0pPTElFVD15CkNPTkZJR19aSVNPRlM9eQpDT05GSUdfVURGX0ZTPW0K
Q09ORklHX1VERl9OTFM9eQoKIwojIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKIwpDT05GSUdf
RkFUX0ZTPW0KQ09ORklHX01TRE9TX0ZTPW0KQ09ORklHX1ZGQVRfRlM9bQpDT05GSUdfRkFU
X0RFRkFVTFRfQ09ERVBBR0U9NDM3CkNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9InV0
ZjgiCkNPTkZJR19OVEZTX0ZTPW0KIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19OVEZTX1JXPXkKCiMKIyBQc2V1ZG8gZmlsZXN5c3RlbXMKIwpDT05GSUdfUFJPQ19G
Uz15CkNPTkZJR19QUk9DX0tDT1JFPXkKQ09ORklHX1BST0NfVk1DT1JFPXkKQ09ORklHX1BS
T0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKQ09ORklHX0tFUk5GUz15
CkNPTkZJR19TWVNGUz15CkNPTkZJR19UTVBGUz15CkNPTkZJR19UTVBGU19QT1NJWF9BQ0w9
eQpDT05GSUdfVE1QRlNfWEFUVFI9eQpDT05GSUdfSFVHRVRMQkZTPXkKQ09ORklHX0hVR0VU
TEJfUEFHRT15CkNPTkZJR19DT05GSUdGU19GUz1tCkNPTkZJR19FRklWQVJfRlM9bQpDT05G
SUdfTUlTQ19GSUxFU1lTVEVNUz15CkNPTkZJR19BREZTX0ZTPW0KIyBDT05GSUdfQURGU19G
U19SVyBpcyBub3Qgc2V0CkNPTkZJR19BRkZTX0ZTPW0KQ09ORklHX0VDUllQVF9GUz1tCkNP
TkZJR19FQ1JZUFRfRlNfTUVTU0FHSU5HPXkKQ09ORklHX0hGU19GUz1tCkNPTkZJR19IRlNQ
TFVTX0ZTPW0KIyBDT05GSUdfSEZTUExVU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApDT05G
SUdfQkVGU19GUz1tCiMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfQkZT
X0ZTPW0KQ09ORklHX0VGU19GUz1tCkNPTkZJR19KRkZTMl9GUz1tCkNPTkZJR19KRkZTMl9G
U19ERUJVRz0wCkNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiMgQ09ORklHX0pGRlMy
X0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKQ09ORklHX0pGRlMyX1NVTU1BUlk9eQpDT05G
SUdfSkZGUzJfRlNfWEFUVFI9eQpDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKQ09ORklH
X0pGRlMyX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9
eQpDT05GSUdfSkZGUzJfWkxJQj15CkNPTkZJR19KRkZTMl9MWk89eQpDT05GSUdfSkZGUzJf
UlRJTUU9eQojIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiMgQ09ORklHX0pGRlMy
X0NNT0RFX05PTkUgaXMgbm90IHNldApDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQoj
IENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKIyBDT05GSUdfSkZGUzJfQ01P
REVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKQ09ORklHX1VCSUZTX0ZTPW0KQ09ORklHX1VCSUZT
X0ZTX0FEVkFOQ0VEX0NPTVBSPXkKQ09ORklHX1VCSUZTX0ZTX0xaTz15CkNPTkZJR19VQklG
U19GU19aTElCPXkKQ09ORklHX0xPR0ZTPW0KQ09ORklHX0NSQU1GUz1tCkNPTkZJR19TUVVB
U0hGUz1tCkNPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFPXkKIyBDT05GSUdfU1FVQVNIRlNf
RklMRV9ESVJFQ1QgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRT15
CiMgQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNf
WEFUVFI9eQpDT05GSUdfU1FVQVNIRlNfWkxJQj15CiMgQ09ORklHX1NRVUFTSEZTX0xaNCBp
cyBub3Qgc2V0CkNPTkZJR19TUVVBU0hGU19MWk89eQpDT05GSUdfU1FVQVNIRlNfWFo9eQoj
IENPTkZJR19TUVVBU0hGU180S19ERVZCTEtfU0laRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NB
Q0hFX1NJWkU9MwpDT05GSUdfVlhGU19GUz1tCkNPTkZJR19NSU5JWF9GUz1tCkNPTkZJR19P
TUZTX0ZTPW0KIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkNPTkZJR19RTlg0RlNfRlM9
bQpDT05GSUdfUU5YNkZTX0ZTPW0KIyBDT05GSUdfUU5YNkZTX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX1JPTUZTX0ZTPW0KIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLIGlzIG5v
dCBzZXQKIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CkNPTkZJR19S
T01GU19CQUNLRURfQllfQk9USD15CkNPTkZJR19ST01GU19PTl9CTE9DSz15CkNPTkZJR19S
T01GU19PTl9NVEQ9eQpDT05GSUdfUFNUT1JFPXkKIyBDT05GSUdfUFNUT1JFX0NPTlNPTEUg
aXMgbm90IHNldAojIENPTkZJR19QU1RPUkVfUE1TRyBpcyBub3Qgc2V0CiMgQ09ORklHX1BT
VE9SRV9GVFJBQ0UgaXMgbm90IHNldApDT05GSUdfUFNUT1JFX1JBTT1tCkNPTkZJR19TWVNW
X0ZTPW0KQ09ORklHX1VGU19GUz1tCiMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19FWE9GU19GUz1tCiMgQ09O
RklHX0VYT0ZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX09SRT1tCkNPTkZJR19ORVRXT1JL
X0ZJTEVTWVNURU1TPXkKQ09ORklHX05GU19GUz1tCkNPTkZJR19ORlNfVjI9bQpDT05GSUdf
TkZTX1YzPW0KQ09ORklHX05GU19WM19BQ0w9eQpDT05GSUdfTkZTX1Y0PW0KQ09ORklHX05G
U19TV0FQPXkKQ09ORklHX05GU19WNF8xPXkKQ09ORklHX05GU19WNF8yPXkKQ09ORklHX1BO
RlNfRklMRV9MQVlPVVQ9bQpDT05GSUdfUE5GU19CTE9DSz1tCkNPTkZJR19QTkZTX09CSkxB
WU9VVD1tCkNPTkZJR19QTkZTX0ZMRVhGSUxFX0xBWU9VVD1tCkNPTkZJR19ORlNfVjRfMV9J
TVBMRU1FTlRBVElPTl9JRF9ET01BSU49Imtlcm5lbC5vcmciCiMgQ09ORklHX05GU19WNF8x
X01JR1JBVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORlNfVjRfU0VDVVJJVFlfTEFCRUw9eQpD
T05GSUdfTkZTX0ZTQ0FDSEU9eQojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90
IHNldApDT05GSUdfTkZTX1VTRV9LRVJORUxfRE5TPXkKQ09ORklHX05GU19ERUJVRz15CkNP
TkZJR19ORlNEPW0KQ09ORklHX05GU0RfVjJfQUNMPXkKQ09ORklHX05GU0RfVjM9eQpDT05G
SUdfTkZTRF9WM19BQ0w9eQpDT05GSUdfTkZTRF9WND15CiMgQ09ORklHX05GU0RfUE5GUyBp
cyBub3Qgc2V0CkNPTkZJR19ORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMPXkKIyBDT05GSUdfTkZT
RF9GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfR1JBQ0VfUEVSSU9EPW0KQ09O
RklHX0xPQ0tEPW0KQ09ORklHX0xPQ0tEX1Y0PXkKQ09ORklHX05GU19BQ0xfU1VQUE9SVD1t
CkNPTkZJR19ORlNfQ09NTU9OPXkKQ09ORklHX1NVTlJQQz1tCkNPTkZJR19TVU5SUENfR1NT
PW0KQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTD15CkNPTkZJR19TVU5SUENfU1dBUD15CkNP
TkZJR19SUENTRUNfR1NTX0tSQjU9bQpDT05GSUdfU1VOUlBDX0RFQlVHPXkKQ09ORklHX1NV
TlJQQ19YUFJUX1JETUFfQ0xJRU5UPW0KQ09ORklHX1NVTlJQQ19YUFJUX1JETUFfU0VSVkVS
PW0KQ09ORklHX0NFUEhfRlM9bQpDT05GSUdfQ0VQSF9GU0NBQ0hFPXkKQ09ORklHX0NFUEhf
RlNfUE9TSVhfQUNMPXkKQ09ORklHX0NJRlM9bQojIENPTkZJR19DSUZTX1NUQVRTIGlzIG5v
dCBzZXQKQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKQ09ORklHX0NJRlNfVVBDQUxMPXkK
Q09ORklHX0NJRlNfWEFUVFI9eQpDT05GSUdfQ0lGU19QT1NJWD15CkNPTkZJR19DSUZTX0FD
TD15CkNPTkZJR19DSUZTX0RFQlVHPXkKIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNl
dApDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKQ09ORklHX0NJRlNfU01CMj15CkNPTkZJR19D
SUZTX0ZTQ0FDSEU9eQpDT05GSUdfTkNQX0ZTPW0KQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdO
SU5HPXkKQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQpDT05GSUdfTkNQRlNfU1RST05H
PXkKQ09ORklHX05DUEZTX05GU19OUz15CkNPTkZJR19OQ1BGU19PUzJfTlM9eQojIENPTkZJ
R19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CkNPTkZJR19OQ1BGU19OTFM9eQpDT05GSUdf
TkNQRlNfRVhUUkFTPXkKQ09ORklHX0NPREFfRlM9bQpDT05GSUdfQUZTX0ZTPW0KIyBDT05G
SUdfQUZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FGU19GU0NBQ0hFPXkKQ09ORklHXzlQ
X0ZTPW0KQ09ORklHXzlQX0ZTQ0FDSEU9eQpDT05GSUdfOVBfRlNfUE9TSVhfQUNMPXkKQ09O
RklHXzlQX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0i
dXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzcz
Nz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQ09ORklHX05MU19DT0RFUEFHRV84NTA9
bQpDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0K
Q09ORklHX05MU19DT0RFUEFHRV84NTc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCkNP
TkZJR19OTFNfQ09ERVBBR0VfODYxPW0KQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQpDT05G
SUdfTkxTX0NPREVQQUdFXzg2Mz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KQ09ORklH
X05MU19DT0RFUEFHRV84NjU9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCkNPTkZJR19O
TFNfQ09ERVBBR0VfODY5PW0KQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQpDT05GSUdfTkxT
X0NPREVQQUdFXzk1MD1tCkNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KQ09ORklHX05MU19D
T0RFUEFHRV85NDk9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCkNPTkZJR19OTFNfSVNP
ODg1OV84PW0KQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KQ09ORklHX05MU19DT0RFUEFH
RV8xMjUxPW0KQ09ORklHX05MU19BU0NJST1tCkNPTkZJR19OTFNfSVNPODg1OV8xPW0KQ09O
RklHX05MU19JU084ODU5XzI9bQpDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkNPTkZJR19OTFNf
SVNPODg1OV80PW0KQ09ORklHX05MU19JU084ODU5XzU9bQpDT05GSUdfTkxTX0lTTzg4NTlf
Nj1tCkNPTkZJR19OTFNfSVNPODg1OV83PW0KQ09ORklHX05MU19JU084ODU5Xzk9bQpDT05G
SUdfTkxTX0lTTzg4NTlfMTM9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQpDT05GSUdfTkxT
X0lTTzg4NTlfMTU9bQpDT05GSUdfTkxTX0tPSThfUj1tCkNPTkZJR19OTFNfS09JOF9VPW0K
Q09ORklHX05MU19NQUNfUk9NQU49bQpDT05GSUdfTkxTX01BQ19DRUxUSUM9bQpDT05GSUdf
TkxTX01BQ19DRU5URVVSTz1tCkNPTkZJR19OTFNfTUFDX0NST0FUSUFOPW0KQ09ORklHX05M
U19NQUNfQ1lSSUxMSUM9bQpDT05GSUdfTkxTX01BQ19HQUVMSUM9bQpDT05GSUdfTkxTX01B
Q19HUkVFSz1tCkNPTkZJR19OTFNfTUFDX0lDRUxBTkQ9bQpDT05GSUdfTkxTX01BQ19JTlVJ
VD1tCkNPTkZJR19OTFNfTUFDX1JPTUFOSUFOPW0KQ09ORklHX05MU19NQUNfVFVSS0lTSD1t
CkNPTkZJR19OTFNfVVRGOD1tCkNPTkZJR19ETE09bQpDT05GSUdfRExNX0RFQlVHPXkKCiMK
IyBLZXJuZWwgaGFja2luZwojCkNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKCiMK
IyBwcmludGsgYW5kIGRtZXNnIG9wdGlvbnMKIwpDT05GSUdfUFJJTlRLX1RJTUU9eQpDT05G
SUdfTUVTU0FHRV9MT0dMRVZFTF9ERUZBVUxUPTQKQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZ
PXkKQ09ORklHX0RZTkFNSUNfREVCVUc9eQoKIwojIENvbXBpbGUtdGltZSBjaGVja3MgYW5k
IGNvbXBpbGVyIG9wdGlvbnMKIwpDT05GSUdfREVCVUdfSU5GTz15CiMgQ09ORklHX0RFQlVH
X0lORk9fUkVEVUNFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMg
bm90IHNldAojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNCBpcyBub3Qgc2V0CiMgQ09ORklH
X0dEQl9TQ1JJUFRTIGlzIG5vdCBzZXQKQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9
eQpDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQpDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CkNP
TkZJR19TVFJJUF9BU01fU1lNUz15CiMgQ09ORklHX1JFQURBQkxFX0FTTSBpcyBub3Qgc2V0
CkNPTkZJR19VTlVTRURfU1lNQk9MUz15CiMgQ09ORklHX1BBR0VfT1dORVIgaXMgbm90IHNl
dApDT05GSUdfREVCVUdfRlM9eQojIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1dBTlRfRlJBTUVfUE9JTlRFUlM9eQojIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKQ09ORklH
X01BR0lDX1NZU1JRPXkKQ09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFPTB4MDFi
NgpDT05GSUdfREVCVUdfS0VSTkVMPXkKCiMKIyBNZW1vcnkgRGVidWdnaW5nCiMKIyBDT05G
SUdfUEFHRV9FWFRFTlNJT04gaXMgbm90IHNldAojIENPTkZJR19ERUJVR19QQUdFQUxMT0Mg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfU0xBQiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVHX0tNRU1MRUFLPXkKIyBD
T05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TVEFDS19V
U0FHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiMg
Q09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVH
X1NUQUNLT1ZFUkZMT1c9eQojIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBz
ZXQKQ09ORklHX0hBVkVfQVJDSF9LTUVNQ0hFQ0s9eQpDT05GSUdfSEFWRV9BUkNIX0tBU0FO
PXkKQ09ORklHX0tBU0FOX1NIQURPV19PRkZTRVQ9MHhkZmZmZmMwMDAwMDAwMDAwCiMgQ09O
RklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKCiMKIyBEZWJ1ZyBMb2NrdXBzIGFuZCBIYW5n
cwojCkNPTkZJR19MT0NLVVBfREVURUNUT1I9eQpDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RP
Uj15CiMgQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKQ09O
RklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVFPTAKIyBDT05GSUdfQk9PVFBB
UkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldApDT05GSUdfQk9PVFBBUkFNX1NPRlRM
T0NLVVBfUEFOSUNfVkFMVUU9MApDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CkNPTkZJR19E
RUZBVUxUX0hVTkdfVEFTS19USU1FT1VUPTEyMAojIENPTkZJR19CT09UUEFSQU1fSFVOR19U
QVNLX1BBTklDIGlzIG5vdCBzZXQKQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNf
VkFMVUU9MAojIENPTkZJR19QQU5JQ19PTl9PT1BTIGlzIG5vdCBzZXQKQ09ORklHX1BBTklD
X09OX09PUFNfVkFMVUU9MApDT05GSUdfUEFOSUNfVElNRU9VVD0wCkNPTkZJR19TQ0hFRF9E
RUJVRz15CiMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAojIENPTkZJR19TQ0hFRF9T
VEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19USU1FS0VFUElORyBp
cyBub3Qgc2V0CkNPTkZJR19USU1FUl9TVEFUUz15CgojCiMgTG9jayBEZWJ1Z2dpbmcgKHNw
aW5sb2NrcywgbXV0ZXhlcywgZXRjLi4uKQojCiMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19XV19NVVRFWF9TTE9X
UEFUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAoj
IENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9DS19TVEFUIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQIGlzIG5vdCBzZXQKIyBDT05G
SUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9D
S19UT1JUVVJFX1RFU1QgaXMgbm90IHNldApDT05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklH
X0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CkNP
TkZJR19ERUJVR19MSVNUPXkKIyBDT05GSUdfREVCVUdfUElfTElTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAoKIwojIFJD
VSBEZWJ1Z2dpbmcKIwojIENPTkZJR19QUk9WRV9SQ1UgaXMgbm90IHNldAojIENPTkZJR19T
UEFSU0VfUkNVX1BPSU5URVIgaXMgbm90IHNldAojIENPTkZJR19UT1JUVVJFX1RFU1QgaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9DUFVfU1RBTExfVElNRU9VVD0yMQojIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19C
TE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiMgQ09ORklHX05PVElGSUVSX0VSUk9SX0lOSkVD
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfU1RS
SUNUX1VTRVJfQ09QWV9DSEVDS1M9eQojIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZ
X0NIRUNLUyBpcyBub3Qgc2V0CkNPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkNP
TkZJR19OT1BfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQ09ORklH
X0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JB
UEhfRlBfVEVTVD15CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQ09ORklHX0hBVkVf
RFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9S
RUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQ09ORklHX0hBVkVf
RkVOVFJZPXkKQ09ORklHX0hBVkVfQ19SRUNPUkRNQ09VTlQ9eQpDT05GSUdfVFJBQ0VSX01B
WF9UUkFDRT15CkNPTkZJR19UUkFDRV9DTE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNP
TkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNP
TkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKQ09ORklHX1RSQUNJTkc9eQpDT05GSUdf
R0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQ09ORklHX0ZUUkFD
RT15CkNPTkZJR19GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJB
Q0VSPXkKIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TQ0hF
RF9UUkFDRVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX1NZU0NBTExTPXkKQ09ORklHX1RS
QUNFUl9TTkFQU0hPVD15CiMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVAg
aXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJ
TEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJPRklMRV9BTExf
QlJBTkNIRVMgaXMgbm90IHNldApDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKQ09ORklHX0JMS19E
RVZfSU9fVFJBQ0U9eQpDT05GSUdfS1BST0JFX0VWRU5UPXkKQ09ORklHX1VQUk9CRV9FVkVO
VD15CkNPTkZJR19QUk9CRV9FVkVOVFM9eQpDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQpDT05G
SUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKIyBDT05GSUdfRlVOQ1RJT05fUFJPRklM
RVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQojIENPTkZJR19G
VFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09ORklHX01NSU9UUkFDRT15CiMgQ09O
RklHX01NSU9UUkFDRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJBQ0VQT0lOVF9CRU5D
SE1BUksgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90
IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENP
TkZJR19UUkFDRV9FTlVNX01BUF9GSUxFIGlzIG5vdCBzZXQKCiMKIyBSdW50aW1lIFRlc3Rp
bmcKIwojIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JU
IGlzIG5vdCBzZXQKIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SQlRSRUVf
VEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BFUkNQVV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlDNjRfU0VM
RlRFU1QgaXMgbm90IHNldAojIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9IRVhEVU1QIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9TVFJJTkdf
SEVMUEVSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfS1NUUlRPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfUkhBU0hUQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1BST1ZJREVfT0hD
STEzOTRfRE1BX0lOSVQgaXMgbm90IHNldAojIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfVEVTVF9MS00gaXMgbm90IHNldAojIENPTkZJR19URVNUX1VTRVJf
Q09QWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQlBGIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9GSVJNV0FSRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBz
ZXQKQ09ORklHX01FTVRFU1Q9eQojIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKQ09ORklH
X0hBVkVfQVJDSF9LR0RCPXkKIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkNPTkZJR19TVFJJ
Q1RfREVWTUVNPXkKIyBDT05GSUdfWDg2X1ZFUkJPU0VfQk9PVFVQIGlzIG5vdCBzZXQKQ09O
RklHX0VBUkxZX1BSSU5USz15CiMgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQIGlzIG5vdCBz
ZXQKQ09ORklHX0VBUkxZX1BSSU5US19FRkk9eQojIENPTkZJR19YODZfUFREVU1QIGlzIG5v
dCBzZXQKQ09ORklHX0RFQlVHX1JPREFUQT15CiMgQ09ORklHX0RFQlVHX1JPREFUQV9URVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWD15CiMgQ09ORklHX0RF
QlVHX05YX1RFU1QgaXMgbm90IHNldApDT05GSUdfRE9VQkxFRkFVTFQ9eQojIENPTkZJR19E
RUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lPTU1VX0RFQlVHIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU9NTVVfU1RSRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTU1JT1RS
QUNFX1NVUFBPUlQ9eQojIENPTkZJR19YODZfREVDT0RFUl9TRUxGVEVTVCBpcyBub3Qgc2V0
CkNPTkZJR19JT19ERUxBWV9UWVBFXzBYODA9MApDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVE
PTEKQ09ORklHX0lPX0RFTEFZX1RZUEVfVURFTEFZPTIKQ09ORklHX0lPX0RFTEFZX1RZUEVf
Tk9ORT0zCkNPTkZJR19JT19ERUxBWV8wWDgwPXkKIyBDT05GSUdfSU9fREVMQVlfMFhFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0lPX0RFTEFZX1VERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lPX0RFTEFZX05PTkUgaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBF
PTAKIyBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMgaXMgbm90IHNldAojIENPTkZJR19DUEFf
REVCVUcgaXMgbm90IHNldApDT05GSUdfT1BUSU1JWkVfSU5MSU5JTkc9eQojIENPTkZJR19E
RUJVR19OTUlfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19YODZfREVCVUdfU1RBVElD
X0NQVV9IQVMgaXMgbm90IHNldAoKIwojIFNlY3VyaXR5IG9wdGlvbnMKIwpDT05GSUdfS0VZ
Uz15CiMgQ09ORklHX1BFUlNJU1RFTlRfS0VZUklOR1MgaXMgbm90IHNldAojIENPTkZJR19C
SUdfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSVVNURURfS0VZUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0VOQ1JZUFRFRF9LRVlTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfRE1F
U0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFk9eQpDT05GSUdfU0VDVVJJ
VFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklHX1NFQ1VSSVRZX05FVFdP
UktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdfSU5URUxfVFhUIGlz
IG5vdCBzZXQKQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CkNPTkZJR19TRUNVUklU
WV9TRUxJTlVYPXkKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU0gaXMgbm90
IHNldAojIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhf
QVZDX1NUQVRTPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVF
PTEKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWT0y
MDQ4CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FVRElUX0xPRz0xMDI0CiMgQ09ORklH
X1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVIgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVI9Ii9zYmluL3RvbW95by1pbml0IgpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUj0iL3NiaW4vaW5pdCIK
Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXkKQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0JP
T1RQQVJBTV9WQUxVRT0xCkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIPXkKQ09ORklH
X1NFQ1VSSVRZX1lBTUE9eQpDT05GSUdfU0VDVVJJVFlfWUFNQV9TVEFDS0VEPXkKQ09ORklH
X0lOVEVHUklUWT15CiMgQ09ORklHX0lOVEVHUklUWV9TSUdOQVRVUkUgaXMgbm90IHNldApD
T05GSUdfSU5URUdSSVRZX0FVRElUPXkKIyBDT05GSUdfSU1BIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVZNIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAoj
IENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVGQVVMVF9TRUNVUklUWV9ZQU1BIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJ
VFlfREFDPXkKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKQ09ORklHX1hPUl9CTE9DS1M9
bQpDT05GSUdfQVNZTkNfQ09SRT1tCkNPTkZJR19BU1lOQ19NRU1DUFk9bQpDT05GSUdfQVNZ
TkNfWE9SPW0KQ09ORklHX0FTWU5DX1BRPW0KQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0K
Q09ORklHX0NSWVBUTz15CgojCiMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiMKQ09ORklHX0NS
WVBUT19BTEdBUEk9eQpDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQpDT05GSUdfQ1JZUFRPX0FF
QUQ9bQpDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQpD
T05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdf
Q1JZUFRPX0hBU0gyPXkKQ09ORklHX0NSWVBUT19STkc9bQpDT05GSUdfQ1JZUFRPX1JORzI9
eQpDT05GSUdfQ1JZUFRPX1BDT01QPW0KQ09ORklHX0NSWVBUT19QQ09NUDI9eQpDT05GSUdf
Q1JZUFRPX01BTkFHRVI9eQpDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKIyBDT05GSUdfQ1JZ
UFRPX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RF
U1RTIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCkNPTkZJR19DUllQVE9f
TlVMTD1tCkNPTkZJR19DUllQVE9fUENSWVBUPW0KQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9
eQpDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiMgQ09ORklHX0NSWVBUT19NQ1JZUFREIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KQ09ORklHX0NSWVBUT19URVNUPW0KQ09O
RklHX0NSWVBUT19BQkxLX0hFTFBFUj1tCkNPTkZJR19DUllQVE9fR0xVRV9IRUxQRVJfWDg2
PW0KCiMKIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEK
IwpDT05GSUdfQ1JZUFRPX0NDTT1tCkNPTkZJR19DUllQVE9fR0NNPW0KQ09ORklHX0NSWVBU
T19TRVFJVj1tCgojCiMgQmxvY2sgbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NCQz1tCkNPTkZJ
R19DUllQVE9fQ1RSPW0KQ09ORklHX0NSWVBUT19DVFM9bQpDT05GSUdfQ1JZUFRPX0VDQj1t
CkNPTkZJR19DUllQVE9fTFJXPW0KQ09ORklHX0NSWVBUT19QQ0JDPW0KQ09ORklHX0NSWVBU
T19YVFM9bQoKIwojIEhhc2ggbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NNQUM9bQpDT05GSUdf
Q1JZUFRPX0hNQUM9bQpDT05GSUdfQ1JZUFRPX1hDQkM9bQpDT05GSUdfQ1JZUFRPX1ZNQUM9
bQoKIwojIERpZ2VzdAojCkNPTkZJR19DUllQVE9fQ1JDMzJDPW0KQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUw9bQpDT05GSUdfQ1JZUFRPX0NSQzMyPW0KQ09ORklHX0NSWVBUT19DUkMz
Ml9QQ0xNVUw9bQpDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRj15CkNPTkZJR19DUllQVE9fQ1JD
VDEwRElGX1BDTE1VTD1tCkNPTkZJR19DUllQVE9fR0hBU0g9bQpDT05GSUdfQ1JZUFRPX01E
ND1tCkNPTkZJR19DUllQVE9fTUQ1PXkKQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCkNP
TkZJR19DUllQVE9fUk1EMTI4PW0KQ09ORklHX0NSWVBUT19STUQxNjA9bQpDT05GSUdfQ1JZ
UFRPX1JNRDI1Nj1tCkNPTkZJR19DUllQVE9fUk1EMzIwPW0KQ09ORklHX0NSWVBUT19TSEEx
PXkKQ09ORklHX0NSWVBUT19TSEExX1NTU0UzPW0KQ09ORklHX0NSWVBUT19TSEEyNTZfU1NT
RTM9bQpDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMz1tCiMgQ09ORklHX0NSWVBUT19TSEEx
X01CIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19TSEEyNTY9bQpDT05GSUdfQ1JZUFRPX1NI
QTUxMj1tCkNPTkZJR19DUllQVE9fVEdSMTkyPW0KQ09ORklHX0NSWVBUT19XUDUxMj1tCkNP
TkZJR19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUw9bQoKIwojIENpcGhlcnMKIwpDT05G
SUdfQ1JZUFRPX0FFUz15CkNPTkZJR19DUllQVE9fQUVTX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQUVTX05JX0lOVEVMPW0KQ09ORklHX0NSWVBUT19BTlVCSVM9bQpDT05GSUdfQ1JZUFRP
X0FSQzQ9bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KQ09ORklHX0NSWVBUT19CTE9XRklT
SF9DT01NT049bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQ0FNRUxMSUE9bQpDT05GSUdfQ1JZUFRPX0NBTUVMTElBX1g4Nl82ND1tCkNPTkZJR19D
UllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fQ0FNRUxM
SUFfQUVTTklfQVZYMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX0NBU1RfQ09NTU9OPW0KQ09O
RklHX0NSWVBUT19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82ND1tCkNP
TkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQ9bQpD
T05GSUdfQ1JZUFRPX0RFUz1tCiMgQ09ORklHX0NSWVBUT19ERVMzX0VERV9YODZfNjQgaXMg
bm90IHNldApDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCkNPTkZJR19DUllQVE9fS0hBWkFEPW0K
Q09ORklHX0NSWVBUT19TQUxTQTIwPW0KQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82ND1t
CkNPTkZJR19DUllQVE9fU0VFRD1tCkNPTkZJR19DUllQVE9fU0VSUEVOVD1tCkNPTkZJR19D
UllQVE9fU0VSUEVOVF9TU0UyX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fU0VSUEVOVF9BVlhf
WDg2XzY0PW0KQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0PW0KQ09ORklHX0NS
WVBUT19URUE9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJ
U0hfQ09NTU9OPW0KQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fVFdPRklTSF9YODZfNjRfM1dBWT1tCkNPTkZJR19DUllQVE9fVFdPRklTSF9BVlhfWDg2
XzY0PW0KCiMKIyBDb21wcmVzc2lvbgojCkNPTkZJR19DUllQVE9fREVGTEFURT1tCkNPTkZJ
R19DUllQVE9fWkxJQj1tCkNPTkZJR19DUllQVE9fTFpPPXkKQ09ORklHX0NSWVBUT19MWjQ9
bQpDT05GSUdfQ1JZUFRPX0xaNEhDPW0KCiMKIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24K
IwpDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQojIENPTkZJR19DUllQVE9fRFJCR19NRU5V
IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19VU0VSX0FQST1tCkNPTkZJR19DUllQVE9fVVNF
Ul9BUElfSEFTSD1tCkNPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQojIENPTkZJ
R19DUllQVE9fVVNFUl9BUElfUk5HIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19IVz15CkNP
TkZJR19DUllQVE9fREVWX1BBRExPQ0s9bQpDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FF
Uz1tCkNPTkZJR19DUllQVE9fREVWX1BBRExPQ0tfU0hBPW0KQ09ORklHX0NSWVBUT19ERVZf
Q0NQPXkKQ09ORklHX0NSWVBUT19ERVZfQ0NQX0REPW0KQ09ORklHX0NSWVBUT19ERVZfQ0NQ
X0NSWVBUTz1tCkNPTkZJR19DUllQVE9fREVWX1FBVD1tCkNPTkZJR19DUllQVE9fREVWX1FB
VF9ESDg5NXhDQz1tCiMgQ09ORklHX0FTWU1NRVRSSUNfS0VZX1RZUEUgaXMgbm90IHNldApD
T05GSUdfSEFWRV9LVk09eQpDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUD15CkNPTkZJR19IQVZF
X0tWTV9JUlFGRD15CkNPTkZJR19IQVZFX0tWTV9JUlFfUk9VVElORz15CkNPTkZJR19IQVZF
X0tWTV9FVkVOVEZEPXkKQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRT15CkNPTkZJR19L
Vk1fTU1JTz15CkNPTkZJR19LVk1fQVNZTkNfUEY9eQpDT05GSUdfSEFWRV9LVk1fTVNJPXkK
Q09ORklHX0hBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQ9eQpDT05GSUdfS1ZNX1ZGSU89
eQpDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUPXkKQ09ORklHX0tW
TV9DT01QQVQ9eQpDT05GSUdfVklSVFVBTElaQVRJT049eQpDT05GSUdfS1ZNPW0KQ09ORklH
X0tWTV9JTlRFTD1tCkNPTkZJR19LVk1fQU1EPW0KIyBDT05GSUdfS1ZNX01NVV9BVURJVCBp
cyBub3Qgc2V0CkNPTkZJR19LVk1fREVWSUNFX0FTU0lHTk1FTlQ9eQpDT05GSUdfQklOQVJZ
X1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19SQUlENl9QUT1tCkNP
TkZJR19CSVRSRVZFUlNFPXkKIyBDT05GSUdfSEFWRV9BUkNIX0JJVFJFVkVSU0UgaXMgbm90
IHNldApDT05GSUdfUkFUSU9OQUw9eQpDT05GSUdfR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNF
Uj15CkNPTkZJR19HRU5FUklDX1NUUk5MRU5fVVNFUj15CkNPTkZJR19HRU5FUklDX05FVF9V
VElMUz15CkNPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUPXkKQ09ORklHX0dFTkVSSUNf
UENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdfR0VORVJJQ19JTz15
CkNPTkZJR19QRVJDUFVfUldTRU09eQpDT05GSUdfQVJDSF9VU0VfQ01QWENIR19MT0NLUkVG
PXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUj15CkNPTkZJR19DUkNfQ0NJVFQ9
bQpDT05GSUdfQ1JDMTY9bQpDT05GSUdfQ1JDX1QxMERJRj15CkNPTkZJR19DUkNfSVRVX1Q9
bQpDT05GSUdfQ1JDMzI9eQojIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNP
TkZJR19DUkMzMl9TTElDRUJZOD15CiMgQ09ORklHX0NSQzMyX1NMSUNFQlk0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JDMzJfU0FSV0FURSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX0JJ
VCBpcyBub3Qgc2V0CkNPTkZJR19DUkM3PW0KQ09ORklHX0xJQkNSQzMyQz1tCiMgQ09ORklH
X0NSQzggaXMgbm90IHNldAojIENPTkZJR19BVURJVF9BUkNIX0NPTVBBVF9HRU5FUklDIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
WkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0NPTVBSRVNTPW0KQ09O
RklHX0xaNEhDX0NPTVBSRVNTPW0KQ09ORklHX0xaNF9ERUNPTVBSRVNTPXkKQ09ORklHX1ha
X0RFQz15CkNPTkZJR19YWl9ERUNfWDg2PXkKIyBDT05GSUdfWFpfREVDX1BPV0VSUEMgaXMg
bm90IHNldAojIENPTkZJR19YWl9ERUNfSUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1haX0RF
Q19BUk0gaXMgbm90IHNldAojIENPTkZJR19YWl9ERUNfQVJNVEhVTUIgaXMgbm90IHNldAoj
IENPTkZJR19YWl9ERUNfU1BBUkMgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15
CkNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNP
TkZJR19ERUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RF
Q09NUFJFU1NfTFo0PXkKQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKQ09ORklHX1JFRURf
U09MT01PTj1tCkNPTkZJR19SRUVEX1NPTE9NT05fRU5DOD15CkNPTkZJR19SRUVEX1NPTE9N
T05fREVDOD15CkNPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpDT05GSUdfQkNIPW0KQ09O
RklHX1RFWFRTRUFSQ0g9eQpDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQpDT05GSUdfVEVYVFNF
QVJDSF9CTT1tCkNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCkNPTkZJR19CVFJFRT15CkNPTkZJ
R19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX0FTU09DSUFUSVZFX0FSUkFZPXkKQ09ORklHX0hB
U19JT01FTT15CkNPTkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09O
RklHX0NIRUNLX1NJR05BVFVSRT15CkNPTkZJR19DUFVfUk1BUD15CkNPTkZJR19EUUw9eQpD
T05GSUdfR0xPQj15CiMgQ09ORklHX0dMT0JfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
TkxBVFRSPXkKQ09ORklHX0FSQ0hfSEFTX0FUT01JQzY0X0RFQ19JRl9QT1NJVElWRT15CkNP
TkZJR19MUlVfQ0FDSEU9bQpDT05GSUdfQVZFUkFHRT15CkNPTkZJR19DT1JESUM9bQojIENP
TkZJR19ERFIgaXMgbm90IHNldApDT05GSUdfT0lEX1JFR0lTVFJZPW0KQ09ORklHX1VDUzJf
U1RSSU5HPXkKQ09ORklHX0ZPTlRfU1VQUE9SVD15CiMgQ09ORklHX0ZPTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0ZPTlRfOHg4PXkKQ09ORklHX0ZPTlRfOHgxNj15CkNPTkZJR19BUkNIX0hB
U19TR19DSEFJTj15Cg==
--------------000909010101030501040802
Content-Type: text/plain; charset=UTF-8;
 name="W10.cfg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="W10.cfg"

bmFtZT0nVzEwJwpidWlsZGVyPSJodm0iCiNkZXZpY2VfbW9kZWxfb3ZlcnJpZGU9Ii91c3Iv
bGliL3hlbi9iaW4vcWVtdS1nZGIiCm1lbW9yeT00MDk2CnZjcHVzPTIKYWNwaV9zMz0wCmFj
cGlfczQ9MApoZHR5cGU9ImFoY2kiCnZpZj1bJ2JyaWRnZT14ZW5icjAsbWFjPTAwOjE2OjNl
OmZlOjdhOmI5J10KI2Rpc2s9WycvbW50L3ZtL2Rpc2tzL1cxMC5kaXNrMS54bSxyYXcsaGRh
LHJ3JywnLHJhdyxoZGIscm8sY2Ryb20nXQpkaXNrPVsnL21udC92bS9kaXNrcy9XMTAuZGlz
azEuY293LXNuMSxxY293MixoZGEscncnLCcscmF3LGhkYixybyxjZHJvbSddCmJvb3Q9J2Nk
JwpkZXZpY2VfbW9kZWxfdmVyc2lvbj0icWVtdS14ZW4iCnZpcmlkaWFuPTEKeGVuX3BsYXRm
b3JtX3BjaT0xCnZuYz0wCiN2bmN1bnVzZWQ9MQojdm5jbGlzdGVuPSIwLjAuMC4wIgprZXlt
YXA9Iml0Igpvbl9jcmFzaD0iZGVzdHJveSIKdmdhPSJxeGwiCnNwaWNlPTEKc3BpY2Vob3N0
PScwLjAuMC4wJwpzcGljZXBvcnQ9NjAwMApzcGljZWRpc2FibGVfdGlja2V0aW5nPTEKc3Bp
Y2V2ZGFnZW50PTEKc3BpY2VfY2xpcGJvYXJkX3NoYXJpbmc9MAojc3BpY2VfaW1hZ2VfY29t
cHJlc3Npb249Imx6NCIKI3NwaWNlX3N0cmVhbWluZ192aWRlbz0ib2ZmIgojc3BpY2Vfc3Ry
ZWFtaW5nX3ZpZGVvPSJhbGwiCiNzcGljZV92aWRlb19jb2RlY3M9ImdzdHJlYW1lcjp2cDgi
CnNwaWNldXNicmVkaXJlY3Rpb249NApzb3VuZGh3PSJoZGEiCmxvY2FsdGltZT0xCiN1c2J2
ZXJzaW9uPTMKbXNfdm1fZ2VuaWQ9ImdlbmVyYXRlIgoKZGV2aWNlX21vZGVsX2FyZ3M9WyIt
dHJhY2UiLCJldmVudHM9L2V0Yy94ZW4vcWVtdS10cmFjZS1vcHRpb25zIl0KCg==
--------------000909010101030501040802
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------000909010101030501040802--


From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:03:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:03:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEcp-0000dD-7b; Fri, 11 Sep 2015 03:03:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEco-0000d8-1r
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:03:42 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	E2/31-04752-D8442F55; Fri, 11 Sep 2015 03:03:41 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441940620!22151633!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4805 invoked from network); 11 Sep 2015 03:03:40 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-13.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:03:40 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id D1F01204BA
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:39 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:03:39 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=TrTnHD
	qDgE2igCIyoGXJlC9DVQhJRXL0csLtJLHeNdTNotHDcZYQCmpgme89LUTgG+Xhhj
	d97vbDovbTsAjiLAfLkQXFFROuTTTdbwjk9OS9mp6nJP3bTYfKZoM6evcGjVJwD1
	RFI5YU7n7PxAxBuqjGRO4o1ZUVlksv58yNrd4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=jbLTR
	nsYZ9LJuBxrjj8UOriRaXaIcND74V85norv7Gwpidf46WEzrYvEEbLIfJ3FZ4qKM
	NNKWLI5embwfrhNzVe3oWmuC6VphG2GlQ7mCkQqu5q/9Por21HRD6amrV+EJcTwh
	Awo+QeHgL6UmQpv6cjeAHuPGFnGGOVbLZZUJMc=
X-Sasl-enc: dRf5LXIdeQDoQIEFDM1vUIRCjdZlfL68X/Nm2/AexZa0 1441940619
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 27E756800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:38 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F24487.4090504@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:03:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch series adds some missing XENBUS APIs that are needed for full
libvchan implementation on Windows, namely mapping foreign memory pages
and setting XenStore key permissions.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:03:44 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:03:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEcp-0000dD-7b; Fri, 11 Sep 2015 03:03:43 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEco-0000d8-1r
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:03:42 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	E2/31-04752-D8442F55; Fri, 11 Sep 2015 03:03:41 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441940620!22151633!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4805 invoked from network); 11 Sep 2015 03:03:40 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-13.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:03:40 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id D1F01204BA
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:39 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:03:39 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=TrTnHD
	qDgE2igCIyoGXJlC9DVQhJRXL0csLtJLHeNdTNotHDcZYQCmpgme89LUTgG+Xhhj
	d97vbDovbTsAjiLAfLkQXFFROuTTTdbwjk9OS9mp6nJP3bTYfKZoM6evcGjVJwD1
	RFI5YU7n7PxAxBuqjGRO4o1ZUVlksv58yNrd4=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=jbLTR
	nsYZ9LJuBxrjj8UOriRaXaIcND74V85norv7Gwpidf46WEzrYvEEbLIfJ3FZ4qKM
	NNKWLI5embwfrhNzVe3oWmuC6VphG2GlQ7mCkQqu5q/9Por21HRD6amrV+EJcTwh
	Awo+QeHgL6UmQpv6cjeAHuPGFnGGOVbLZZUJMc=
X-Sasl-enc: dRf5LXIdeQDoQIEFDM1vUIRCjdZlfL68X/Nm2/AexZa0 1441940619
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 27E756800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:38 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F24487.4090504@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:03:35 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch series adds some missing XENBUS APIs that are needed for full
libvchan implementation on Windows, namely mapping foreign memory pages
and setting XenStore key permissions.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEd8-0000ds-9T; Fri, 11 Sep 2015 03:04:02 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEd6-0000dn-Hq
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:00 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	5E/9A-03819-F9442F55; Fri, 11 Sep 2015 03:03:59 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441940637!18613088!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12966 invoked from network); 11 Sep 2015 03:03:58 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-15.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 03:03:58 -0000
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43])
	by mailout.nyi.internal (Postfix) with ESMTP id 5956B2043D
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:57 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute3.internal (MEProxy); Thu, 10 Sep 2015 23:03:57 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=J/sjqTNd8WUY2/N8N0RYK7xjTY0=; b=OfjJ2Q
	gK9gtENlj6FEAOMbKS0fpzUV6DYzwXa5itIlUNbR2UiEWpJi0XQCRMoI8di/fgYf
	1Td6K2K5Ec5U3pBvJbRBR24dNMnuoSSvxIgYHPDD9Fwg4qQYqzI8olpstAAXVpEF
	927xC7euKKxwoBUfTEWf6SBZo6eD5QRCw2uW8=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=J/sjqTNd8WUY2/N8N0RYK7xjTY0=; b=V/Kbn
	VUNJ5TI+oqrtIh1CyQGJTI0aX0TZRwKOWQjAavvergYqImwf7BxMAGkvqnQRMS/r
	X5jdGRyAENOtuXgIEKCSxu2Z4q4ZU71QYVqesjZJ5+JsuK8ec3U/W0wzcDc0cDFE
	FoMQJmde+1UAUuliXqnOW0iBs66vtPyBCgDkvk=
X-Sasl-enc: SDzxCx9T2i2ScgY4spSFYvyEI40BWAiFaXAQ7PAqO0BF 1441940636
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 09B1C6800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:55 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F24499.8070802@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:03:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 20369
Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
 the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

R05UVEFCIGludGVyZmFjZSBub3cgaW5jbHVkZXMgZnVuY3Rpb25zIHRvIG1hcCBhbmQgdW5tYXAg
bWVtb3J5IHBhZ2VzCmdyYW50ZWQgYnkgYSBmb3JlaWduIGRvbWFpbi4gVGhlIHBhZ2UocykgYXJl
IG1hcHBlZCB1bmRlciBhbiBhZGRyZXNzCmFsbG9jYXRlZCBmcm9tIHRoZSBQQ0kgQkFSIHNwYWNl
LgoKU2lnbmVkLW9mZi1ieTogUmFmYcWCIFdvamR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xh
Yi5jb20+Ci0tLQogaW5jbHVkZS9nbnR0YWJfaW50ZXJmYWNlLmggfCAgNTQgKysrKysrKysrKysr
KystCiBpbmNsdWRlL3hlbi5oICAgICAgICAgICAgICB8ICAxOSArKysrKysKIHNyYy94ZW4vZ3Jh
bnRfdGFibGUuYyAgICAgIHwgMTE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNy
Yy94ZW5idXMvZ250dGFiLmMgICAgICAgIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNTIgaW5zZXJ0aW9ucygrKSwg
MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBi
L2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCmluZGV4IGQyOTQ0MGEuLmIwZjRhZGYgMTAwNjQ0
Ci0tLSBhL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvZ250dGFiX2lu
dGVyZmFjZS5oCkBAIC0xNjMsNiArMTYzLDM5IEBAIHR5cGVkZWYgVk9JRAogICAgIElOICBQWEVO
QlVTX0dOVFRBQl9DQUNIRSAgICBDYWNoZQogICAgICk7CiAKKy8qISBcdHlwZWRlZiBYRU5CVVNf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTCisgICAgXGJyaWVmIE1hcCBmb3JlaWduIG1lbW9yeSBw
YWdlcyBpbnRvIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZQorCisgICAgXHBhcmFtIEludGVyZmFj
ZSBUaGUgaW50ZXJmYWNlIGhlYWRlcgorICAgIFxwYXJhbSBEb21haW4gVGhlIGRvbWlkIG9mIHRo
ZSBmb3JlaWduIGRvbWFpbiB0aGF0IGdyYW50ZWQgdGhlIHBhZ2VzCisgICAgXHBhcmFtIE51bWJl
clBhZ2VzIE51bWJlciBvZiBwYWdlcyB0byBtYXAKKyAgICBccGFyYW0gUmVmZXJlbmNlcyBBcnJh
eSBvZiBncmFudCByZWZlcmVuY2UgbnVtYmVycyBzaGFyZWQgYnkgdGhlIGZvcmVpZ24gZG9tYWlu
CisgICAgXHBhcmFtIFJlYWRPbmx5IElmIFRSVUUsIHBhZ2VzIGFyZSBtYXBwZWQgd2l0aCByZWFk
LW9ubHkgYWNjZXNzCisgICAgXHBhcmFtIEFkZHJlc3MgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGhh
dCB0aGUgZm9yZWlnbiBwYWdlcyBhcmUgbWFwcGVkIHVuZGVyCisqLworCit0eXBlZGVmIE5UU1RB
VFVTCisoKlhFTkJVU19HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVMpKAorICAgIElOICBQSU5URVJG
QUNFICAgICAgICAgICAgICBJbnRlcmZhY2UsCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAg
ICAgIERvbWFpbiwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMs
CisgICAgSU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCisgICAgSU4gIEJP
T0xFQU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBQSFlTSUNBTF9BRERSRVNT
ICAgICAgICAqQWRkcmVzcworICAgICk7CisKKy8qISBcdHlwZWRlZiBYRU5CVVNfR05UVEFCX1VO
TUFQX0ZPUkVJR05fUEFHRVMKKyAgICBcYnJpZWYgVW5tYXAgZm9yZWlnbiBtZW1vcnkgcGFnZXMg
ZnJvbSB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UKKworICAgIFxwYXJhbSBJbnRlcmZhY2UgVGhl
IGludGVyZmFjZSBoZWFkZXIKKyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVz
cyB0aGF0IHRoZSBmb3JlaWduIHBhZ2VzIGFyZSBtYXBwZWQgdW5kZXIKKyovCit0eXBlZGVmIE5U
U1RBVFVTCisoKlhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUykoCisgICAgSU4gIFBJ
TlRFUkZBQ0UgICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVT
UyAgICAgICAgQWRkcmVzcworICAgICk7CisKIC8vIHs3NjM2NzlDNS1FNUMyLTRBNkQtOEI4OC02
QkIwMkVDNDJEOEV9CiBERUZJTkVfR1VJRChHVUlEX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAK
IDB4NzYzNjc5YzUsIDB4ZTVjMiwgMHg0YTZkLCAweDhiLCAweDg4LCAweDZiLCAweGIwLCAweDJl
LCAweGM0LCAweDJkLCAweDhlKTsKQEAgLTE4Miw3ICsyMTUsMjQgQEAgc3RydWN0IF9YRU5CVVNf
R05UVEFCX0lOVEVSRkFDRV9WMSB7CiAgICAgWEVOQlVTX0dOVFRBQl9ERVNUUk9ZX0NBQ0hFICAg
ICAgICAgR250dGFiRGVzdHJveUNhY2hlOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19H
TlRUQUJfSU5URVJGQUNFX1YxIFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFOworLyohIFxzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyCisg
ICAgXGJyaWVmIEdOVFRBQiBpbnRlcmZhY2UgdmVyc2lvbiAyCisgICAgXGluZ3JvdXAgaW50ZXJm
YWNlcworKi8KK3N0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgeworICAgIElOVEVS
RkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZTsKKyAgICBYRU5CVVNfR05U
VEFCX0FDUVVJUkUgICAgICAgICAgICAgICBHbnR0YWJBY3F1aXJlOworICAgIFhFTkJVU19HTlRU
QUJfUkVMRUFTRSAgICAgICAgICAgICAgIEdudHRhYlJlbGVhc2U7CisgICAgWEVOQlVTX0dOVFRB
Ql9DUkVBVEVfQ0FDSEUgICAgICAgICAgR250dGFiQ3JlYXRlQ2FjaGU7CisgICAgWEVOQlVTX0dO
VFRBQl9QRVJNSVRfRk9SRUlHTl9BQ0NFU1MgR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzczsKKyAg
ICBYRU5CVVNfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUyBHbnR0YWJSZXZva2VGb3JlaWdu
QWNjZXNzOworICAgIFhFTkJVU19HTlRUQUJfR0VUX1JFRkVSRU5DRSAgICAgICAgIEdudHRhYkdl
dFJlZmVyZW5jZTsKKyAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAgICAgICBHbnR0
YWJEZXN0cm95Q2FjaGU7CisgICAgWEVOQlVTX0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUyAgICAg
R250dGFiTWFwRm9yZWlnblBhZ2VzOworICAgIFhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUyAgIEdudHRhYlVubWFwRm9yZWlnblBhZ2VzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX1hF
TkJVU19HTlRUQUJfSU5URVJGQUNFX1YyIFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJV
U19HTlRUQUJfSU5URVJGQUNFOwogCiAvKiEgXGRlZiBYRU5CVVNfR05UVEFCCiAgICAgXGJyaWVm
IE1hY3JvIGF0IGFzc2lzdCBpbiBtZXRob2QgaW52b2NhdGlvbgpAQCAtMTkzLDcgKzI0Myw3IEBA
IHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMSBYRU5CVVNfR05UVEFC
X0lOVEVSRkFDRSwgKlBYRU5CVVNfR05UCiAjZW5kaWYgIC8vIF9XSU5ETEwKIAogI2RlZmluZSBY
RU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAxCi0jZGVmaW5lIFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFX1ZFUlNJT05fTUFYIDEKKyNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZB
Q0VfVkVSU0lPTl9NQVggMgogCiAjZW5kaWYgIC8vIF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9I
CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuLmggYi9pbmNsdWRlL3hlbi5oCmluZGV4IDYwMDc1
ODIuLjIzYzdhYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuLmgKKysrIGIvaW5jbHVkZS94ZW4u
aApAQCAtMjU4LDYgKzI1OCwyNSBAQCBHcmFudFRhYmxlQ29weSgKICAgICBJTiAgVUxPTkcgICAg
ICAgICAgICAgICBDb3VudAogICAgICk7CiAKK19fY2hlY2tSZXR1cm4KK1hFTl9BUEkKK05UU1RB
VFVTCitHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAg
ICAgICAgIERvbWFpbiwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgR3JhbnRSZWYs
CisgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MsCisgICAgSU4gIEJPT0xF
QU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAg
ICAgICAqSGFuZGxlCisgICAgKTsKKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRTVEFUVVMK
K0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAg
ICAgICBIYW5kbGUsCisgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MKKyAg
ICApOworCiAvLyBTQ0hFRAogCiBfX2NoZWNrUmV0dXJuCmRpZmYgLS1naXQgYS9zcmMveGVuL2dy
YW50X3RhYmxlLmMgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMKaW5kZXggNmZhY2IzZi4uNmIwMGY2
NSAxMDA2NDQKLS0tIGEvc3JjL3hlbi9ncmFudF90YWJsZS5jCisrKyBiL3NyYy94ZW4vZ3JhbnRf
dGFibGUuYwpAQCAtMzgsNiArMzgsMzUgQEAKICNpbmNsdWRlICJkYmdfcHJpbnQuaCIKICNpbmNs
dWRlICJhc3NlcnQuaCIKIAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykgICAvLyBjb25k
aXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50CisKKy8vIE1vc3Qgb2YgdGhlIEdOVFNUXyog
dmFsdWVzIGRvbid0IGhhdmUgbWVhbmluZ2Z1bCBOVFNUQVRVUyBjb3VudGVycGFydHMsCisvLyB0
aGlzIG1hY3JvIHRyYW5zbGF0ZXMgdGhvc2UgdGhhdCBkby4KKyNkZWZpbmUgR05UU1RfVE9fU1RB
VFVTKF9nbnRzdCwgX3N0YXR1cykgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHN3aXRjaCAoX2dudHN0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGNhc2UgR05UU1Rfb2theTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7ICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgR05UU1RfYmFkX2hhbmRsZTog
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RB
VFVTX0lOVkFMSURfSEFORExFOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNhc2UgR05UU1RfcGVybWlzc2lvbl9kZW5pZWQ6ICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX0FDQ0VTU19ERU5JRUQ7ICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgR05UU1RfZWFnYWluOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX1JFVFJZ
OyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBfc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfSB3aGlsZSAoRkFMU0UpCisKIHN0YXRpYyBMT05HX1BUUgogR3JhbnRUYWJs
ZU9wKAogICAgIElOICBVTE9ORyAgIENvbW1hbmQsCkBAIC0xMzEsMyArMTYwLDkwIEBAIGZhaWwx
OgogCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRT
VEFUVVMKK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgKKyAgICBJTiAgVVNIT1JUICAgICAgICAg
ICAgICAgICAgRG9tYWluLAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJl
ZiwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKKyAgICBJTiAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksCisgICAgT1VUIFVMT05HICAgICAgICAgICAg
ICAgICAgICpIYW5kbGUKKyAgICApCit7CisgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVm
IG9wOworICAgIExPTkdfUFRSICAgICAgICAgICAgICAgICAgICByYzsKKyAgICBOVFNUQVRVUyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgUnRsWmVyb01lbW9yeSgmb3AsIHNpemVv
ZihvcCkpOworICAgIG9wLmRvbSA9IERvbWFpbjsKKyAgICBvcC5yZWYgPSBHcmFudFJlZjsKKyAg
ICBvcC5mbGFncyA9IEdOVE1BUF9ob3N0X21hcDsKKyAgICBpZiAoUmVhZE9ubHkpCisgICAgICAg
IG9wLmZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKyAgICBvcC5ob3N0X2FkZHIgPSBBZGRyZXNz
LlF1YWRQYXJ0OworCisgICAgcmMgPSBHcmFudFRhYmxlT3AoR05UVEFCT1BfbWFwX2dyYW50X3Jl
ZiwgJm9wLCAxKTsKKworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgRVJSTk9fVE9fU1RBVFVT
KC1yYywgc3RhdHVzKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisKKyAgICBpZiAob3Au
c3RhdHVzICE9IEdOVFNUX29rYXkpIHsKKyAgICAgICAgR05UU1RfVE9fU1RBVFVTKG9wLnN0YXR1
cywgc3RhdHVzKTsKKyAgICAgICAgRXJyb3IoImh5cGVyY2FsbCBzdGF0dXM6ICVkXG4iLCBvcC5z
dGF0dXMpOworICAgICAgICBnb3RvIGZhaWwyOworICAgIH0KKworICAgICpIYW5kbGUgPSBvcC5o
YW5kbGU7CisKKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisKK2ZhaWwyOgorICAgIEVycm9y
KCJmYWlsMlxuIik7CitmYWlsMToKKyAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMp
OworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRT
VEFUVVMKK0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAorICAgIElOICBVTE9ORyAgICAgICAg
ICAgICAgICAgICAgIEhhbmRsZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICBB
ZGRyZXNzCisgICAgKQoreworICAgIHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9wOwor
ICAgIExPTkdfUFRSICAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIE5UU1RBVFVTICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yo
b3ApKTsKKyAgICBvcC5oYW5kbGUgPSBIYW5kbGU7CisgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVz
cy5RdWFkUGFydDsKKworICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX3VubWFwX2dyYW50
X3JlZiwgJm9wLCAxKTsKKworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgRVJSTk9fVE9fU1RB
VFVTKC1yYywgc3RhdHVzKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisKKyAgICBpZiAo
b3Auc3RhdHVzICE9IEdOVFNUX29rYXkpIHsKKyAgICAgICAgR05UU1RfVE9fU1RBVFVTKG9wLnN0
YXR1cywgc3RhdHVzKTsKKyAgICAgICAgRXJyb3IoImh5cGVyY2FsbCBzdGF0dXM6ICVkXG4iLCBv
cC5zdGF0dXMpOworICAgICAgICBnb3RvIGZhaWwyOworICAgIH0KKworICAgIHJldHVybiBTVEFU
VVNfU1VDQ0VTUzsKKworZmFpbDI6CisgICAgRXJyb3IoImZhaWwyXG4iKTsKK2ZhaWwxOgorICAg
IEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOwor
fQpkaWZmIC0tZ2l0IGEvc3JjL3hlbmJ1cy9nbnR0YWIuYyBiL3NyYy94ZW5idXMvZ250dGFiLmMK
aW5kZXggMTY1ZTM4Zi4uMzJiNDNjNyAxMDA2NDQKLS0tIGEvc3JjL3hlbmJ1cy9nbnR0YWIuYwor
KysgYi9zcmMveGVuYnVzL2dudHRhYi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiZGJn
X3ByaW50LmgiCiAjaW5jbHVkZSAiYXNzZXJ0LmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1
ZGUgImhhc2hfdGFibGUuaCIKIAogI2RlZmluZSBYRU5CVVNfR05UVEFCX01BWElNVU1fRlJBTUVf
Q09VTlQgIDMyCiAjZGVmaW5lIFhFTkJVU19HTlRUQUJfRU5UUllfUEVSX0ZSQU1FICAgICAgKFBB
R0VfU0laRSAvIHNpemVvZiAoZ3JhbnRfZW50cnlfdjFfdCkpCkBAIC02OCw2ICs2OSwxMSBAQCBz
dHJ1Y3QgX1hFTkJVU19HTlRUQUJfRU5UUlkgewogICAgIGdyYW50X2VudHJ5X3YxX3QgICAgRW50
cnk7CiB9OwogCit0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9NQVBfRU5UUlkgeworICAg
IFVMT05HICAgICAgICAgICAgICAgTnVtYmVyUGFnZXM7CisgICAgVUxPTkcgICAgICAgICAgICAg
ICBNYXBIYW5kbGVzWzFdOworfSBYRU5CVVNfR05UVEFCX01BUF9FTlRSWSwgKlBYRU5CVVNfR05U
VEFCX01BUF9FTlRSWTsKKwogc3RydWN0IF9YRU5CVVNfR05UVEFCX0NPTlRFWFQgewogICAgIFBY
RU5CVVNfRkRPICAgICAgICAgICAgICAgICBGZG87CiAgICAgS1NQSU5fTE9DSyAgICAgICAgICAg
ICAgICAgIExvY2s7CkBAIC04Miw2ICs4OCw3IEBAIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9DT05U
RVhUIHsKICAgICBQWEVOQlVTX1NVU1BFTkRfQ0FMTEJBQ0sgICAgU3VzcGVuZENhbGxiYWNrRWFy
bHk7CiAgICAgWEVOQlVTX0RFQlVHX0lOVEVSRkFDRSAgICAgIERlYnVnSW50ZXJmYWNlOwogICAg
IFBYRU5CVVNfREVCVUdfQ0FMTEJBQ0sgICAgICBEZWJ1Z0NhbGxiYWNrOworICAgIFBYRU5CVVNf
SEFTSF9UQUJMRSAgICAgICAgICBNYXBUYWJsZTsKICAgICBMSVNUX0VOVFJZICAgICAgICAgICAg
ICAgICAgTGlzdDsKIH07CiAKQEAgLTUzNCw2ICs1NDEsMTI0IEBAIEdudHRhYkdldFJlZmVyZW5j
ZSgKICAgICByZXR1cm4gKFVMT05HKUVudHJ5LT5SZWZlcmVuY2U7CiB9CiAKK3N0YXRpYyBOVFNU
QVRVUworR250dGFiTWFwRm9yZWlnblBhZ2VzKAorICAgIElOICBQSU5URVJGQUNFICAgICAgICAg
ICAgICBJbnRlcmZhY2UsCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwK
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsCisgICAgSU4gIFBV
TE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCisgICAgSU4gIEJPT0xFQU4gICAgICAg
ICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBQSFlTSUNBTF9BRERSRVNTICAgICAgICAqQWRk
cmVzcworICAgICkKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgc3RhdHVzOwor
ICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250
ZXh0OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBQYWdlSW5kZXg7CisgICAgUEhZ
U0lDQUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRyZXNzOworICAgIFBYRU5CVVNfR05UVEFC
X01BUF9FTlRSWSAgICBNYXBFbnRyeTsKKworICAgIHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFj
ZShDb250ZXh0LT5GZG8sIE51bWJlclBhZ2VzICogUEFHRV9TSVpFLCBBZGRyZXNzKTsKKyAgICBp
ZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAgIHN0YXR1
cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgIE1hcEVudHJ5ID0gX19HbnR0
YWJBbGxvY2F0ZShGSUVMRF9PRkZTRVQoWEVOQlVTX0dOVFRBQl9NQVBfRU5UUlksIE1hcEhhbmRs
ZXMpICsgTnVtYmVyUGFnZXMqc2l6ZW9mKFVMT05HKSk7CisgICAgaWYgKCFNYXBFbnRyeSkKKyAg
ICAgICAgZ290byBmYWlsMjsKKworICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0ID0gQWRkcmVzcy0+
UXVhZFBhcnQ7CisgICAgTWFwRW50cnktPk51bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7CisKKyAg
ICBmb3IgKFBhZ2VJbmRleCA9IDA7IFBhZ2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgr
KykgeworICAgICAgICBzdGF0dXMgPSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdl
SW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFk
ZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25s
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNYXBFbnRyeS0+
TWFwSGFuZGxlc1tQYWdlSW5kZXhdKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykp
CisgICAgICAgICAgICBnb3RvIGZhaWwzOworCisgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
ICs9IFBBR0VfU0laRTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBIYXNoVGFibGVBZGQoQ29udGV4
dC0+TWFwVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MtPlF1YWRQYXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoVUxPTkdfUFRSKU1hcEVudHJ5KTsKKworICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw0OworCisgICAgcmV0
dXJuIFNUQVRVU19TVUNDRVNTOworCitmYWlsNDoKKyAgICBFcnJvcigiZmFpbDRcbiIpOworCitm
YWlsMzoKKyAgICBFcnJvcigiZmFpbDNcbiIpOworCisgICAgd2hpbGUgKFBhZ2VJbmRleCA+IDAp
IHsKKyAgICAgICAgLS1QYWdlSW5kZXg7CisgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0IC09
IFBBR0VfU0laRTsKKyAgICAgICAgQVNTRVJUKE5UX1NVQ0NFU1MoR3JhbnRUYWJsZVVubWFwRm9y
ZWlnblBhZ2UoTWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgUGFnZUFkZHJlc3MpKSk7
CisgICAgfQorCisgICAgX19HbnR0YWJGcmVlKE1hcEVudHJ5KTsKKworZmFpbDI6CisgICAgRXJy
b3IoImZhaWwyXG4iKTsKKyAgICBGZG9GcmVlSW9TcGFjZShDb250ZXh0LT5GZG8sICpBZGRyZXNz
LCBOdW1iZXJQYWdlcyAqIFBBR0VfU0laRSk7CisKK2ZhaWwxOgorICAgIEVycm9yKCJmYWlsMTog
KCUwOHgpXG4iLCBzdGF0dXMpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBOVFNU
QVRVUworR250dGFiVW5tYXBGb3JlaWduUGFnZXMoCisgICAgSU4gIFBJTlRFUkZBQ0UgICAgICAg
ICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVz
cworICAgICkKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOworICAg
IFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250ZXh0
OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBQYWdlSW5kZXg7CisgICAgUEhZU0lD
QUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRyZXNzOworICAgIFBYRU5CVVNfR05UVEFCX01B
UF9FTlRSWSAgICBNYXBFbnRyeTsKKworICAgIFN0YXR1cyA9IEhhc2hUYWJsZUxvb2t1cChDb250
ZXh0LT5NYXBUYWJsZSwgQWRkcmVzcy5RdWFkUGFydCwgKFBVTE9OR19QVFIpJk1hcEVudHJ5KTsK
KyAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAg
IFN0YXR1cyA9IEhhc2hUYWJsZVJlbW92ZShDb250ZXh0LT5NYXBUYWJsZSwgQWRkcmVzcy5RdWFk
UGFydCk7CisgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7
CisKKyAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCA9IEFkZHJlc3MuUXVhZFBhcnQ7CisKKyAgICBm
b3IgKFBhZ2VJbmRleCA9IDA7IFBhZ2VJbmRleCA8IE1hcEVudHJ5LT5OdW1iZXJQYWdlczsgUGFn
ZUluZGV4KyspIHsKKyAgICAgICAgU3RhdHVzID0gR3JhbnRUYWJsZVVubWFwRm9yZWlnblBhZ2Uo
TWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgUGFnZUFkZHJlc3MpOworICAgICAgICBp
ZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDM7CisKKyAgICAg
ICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgKz0gUEFHRV9TSVpFOworICAgIH0KKworICAgIEZkb0Zy
ZWVJb1NwYWNlKENvbnRleHQtPkZkbywgQWRkcmVzcywgTWFwRW50cnktPk51bWJlclBhZ2VzICog
UEFHRV9TSVpFKTsKKyAgICBfX0dudHRhYkZyZWUoTWFwRW50cnkpOworICAgIHJldHVybiBTVEFU
VVNfU1VDQ0VTUzsKKworZmFpbDM6CisgICAgRXJyb3IoImZhaWwzXG4iKTsKKyAgICBLZUJ1Z0No
ZWNrRXgoTUVNT1JZX01BTkFHRU1FTlQsIFhFTkJVU19HTlRUQUJfVEFHLCBQYWdlQWRkcmVzcy5R
dWFkUGFydCwgTWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgQWRkcmVzcy5RdWFkUGFy
dCk7CisKK2ZhaWwyOgorICAgIEVycm9yKCJmYWlsMlxuIik7CisKK2ZhaWwxOgorICAgIEVycm9y
KCJmYWlsMTogKCUwOHgpXG4iLCBTdGF0dXMpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKIHN0
YXRpYyBWT0lECiBHbnR0YWJTdXNwZW5kQ2FsbGJhY2tFYXJseSgKICAgICBJTiAgUFZPSUQgICAg
ICAgICAgICAgICBBcmd1bWVudApAQCAtNzg5LDYgKzkxNCwxOSBAQCBzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMSAgIEdudHRhYkludGVyZmFjZVZlcnNpb24xID0gewog
ICAgIEdudHRhYkRlc3Ryb3lDYWNoZQogfTsKICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGlj
IHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgICBHbnR0YWJJbnRlcmZhY2VWZXJz
aW9uMiA9IHsKKyAgICB7IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1Yy
KSwgMiwgTlVMTCwgTlVMTCwgTlVMTCB9LAorICAgIEdudHRhYkFjcXVpcmUsCisgICAgR250dGFi
UmVsZWFzZSwKKyAgICBHbnR0YWJDcmVhdGVDYWNoZSwKKyAgICBHbnR0YWJQZXJtaXRGb3JlaWdu
QWNjZXNzLAorICAgIEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MsCisgICAgR250dGFiR2V0UmVm
ZXJlbmNlLAorICAgIEdudHRhYkRlc3Ryb3lDYWNoZSwKKyAgICBHbnR0YWJNYXBGb3JlaWduUGFn
ZXMsCisgICAgR250dGFiVW5tYXBGb3JlaWduUGFnZXMKK307CisKIE5UU1RBVFVTCiBHbnR0YWJJ
bml0aWFsaXplKAogICAgIElOICBQWEVOQlVTX0ZETyAgICAgICAgICAgICBGZG8sCkBAIC04MzYs
MTIgKzk3NCwxOSBAQCBHbnR0YWJJbml0aWFsaXplKAogICAgIEluaXRpYWxpemVMaXN0SGVhZCgm
KCpDb250ZXh0KS0+TGlzdCk7CiAgICAgS2VJbml0aWFsaXplU3BpbkxvY2soJigqQ29udGV4dCkt
PkxvY2spOwogCisgICAgc3RhdHVzID0gSGFzaFRhYmxlQ3JlYXRlKCYoKkNvbnRleHQpLT5NYXBU
YWJsZSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7
CisKICAgICAoKkNvbnRleHQpLT5GZG8gPSBGZG87CiAKICAgICBUcmFjZSgiPD09PT1cbiIpOwog
CiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCitmYWlsMjoKKyAgICBFcnJvcigiZmFpbDJc
biIpOworCiBmYWlsMToKICAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOwogCkBA
IC04NzgsNiArMTAyMywyMyBAQCBHbnR0YWJHZXRJbnRlcmZhY2UoCiAgICAgICAgIHN0YXR1cyA9
IFNUQVRVU19TVUNDRVNTOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSAyOiB7Cisg
ICAgICAgIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgICpHbnR0YWJJbnRlcmZh
Y2U7CisKKyAgICAgICAgR250dGFiSW50ZXJmYWNlID0gKHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9J
TlRFUkZBQ0VfVjIgKilJbnRlcmZhY2U7CisKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZF
Ul9PVkVSRkxPVzsKKyAgICAgICAgaWYgKFNpemUgPCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WMikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAqR250dGFi
SW50ZXJmYWNlID0gR250dGFiSW50ZXJmYWNlVmVyc2lvbjI7CisKKyAgICAgICAgQVNTRVJUM1Uo
SW50ZXJmYWNlLT5WZXJzaW9uLCA9PSwgVmVyc2lvbik7CisgICAgICAgIEludGVyZmFjZS0+Q29u
dGV4dCA9IENvbnRleHQ7CisKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBzdGF0dXMgPSBTVEFUVVNf
Tk9UX1NVUFBPUlRFRDsKICAgICAgICAgYnJlYWs7CkBAIC04OTUsNiArMTA1Nyw5IEBAIEdudHRh
YlRlYXJkb3duKAogCiAgICAgQ29udGV4dC0+RmRvID0gTlVMTDsKIAorICAgIEhhc2hUYWJsZURl
c3Ryb3koQ29udGV4dC0+TWFwVGFibGUpOworICAgIENvbnRleHQtPk1hcFRhYmxlID0gTlVMTDsK
KwogICAgIFJ0bFplcm9NZW1vcnkoJkNvbnRleHQtPkxvY2ssIHNpemVvZiAoS1NQSU5fTE9DSykp
OwogICAgIFJ0bFplcm9NZW1vcnkoJkNvbnRleHQtPkxpc3QsIHNpemVvZiAoTElTVF9FTlRSWSkp
OwogCi0tIAoxLjguMS5tc3lzZ2l0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEd8-0000ds-9T; Fri, 11 Sep 2015 03:04:02 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEd6-0000dn-Hq
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:00 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	5E/9A-03819-F9442F55; Fri, 11 Sep 2015 03:03:59 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441940637!18613088!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 12966 invoked from network); 11 Sep 2015 03:03:58 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-15.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 03:03:58 -0000
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43])
	by mailout.nyi.internal (Postfix) with ESMTP id 5956B2043D
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:57 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute3.internal (MEProxy); Thu, 10 Sep 2015 23:03:57 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=J/sjqTNd8WUY2/N8N0RYK7xjTY0=; b=OfjJ2Q
	gK9gtENlj6FEAOMbKS0fpzUV6DYzwXa5itIlUNbR2UiEWpJi0XQCRMoI8di/fgYf
	1Td6K2K5Ec5U3pBvJbRBR24dNMnuoSSvxIgYHPDD9Fwg4qQYqzI8olpstAAXVpEF
	927xC7euKKxwoBUfTEWf6SBZo6eD5QRCw2uW8=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=J/sjqTNd8WUY2/N8N0RYK7xjTY0=; b=V/Kbn
	VUNJ5TI+oqrtIh1CyQGJTI0aX0TZRwKOWQjAavvergYqImwf7BxMAGkvqnQRMS/r
	X5jdGRyAENOtuXgIEKCSxu2Z4q4ZU71QYVqesjZJ5+JsuK8ec3U/W0wzcDc0cDFE
	FoMQJmde+1UAUuliXqnOW0iBs66vtPyBCgDkvk=
X-Sasl-enc: SDzxCx9T2i2ScgY4spSFYvyEI40BWAiFaXAQ7PAqO0BF 1441940636
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 09B1C6800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:03:55 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F24499.8070802@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:03:53 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 20369
Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
 the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

R05UVEFCIGludGVyZmFjZSBub3cgaW5jbHVkZXMgZnVuY3Rpb25zIHRvIG1hcCBhbmQgdW5tYXAg
bWVtb3J5IHBhZ2VzCmdyYW50ZWQgYnkgYSBmb3JlaWduIGRvbWFpbi4gVGhlIHBhZ2UocykgYXJl
IG1hcHBlZCB1bmRlciBhbiBhZGRyZXNzCmFsbG9jYXRlZCBmcm9tIHRoZSBQQ0kgQkFSIHNwYWNl
LgoKU2lnbmVkLW9mZi1ieTogUmFmYcWCIFdvamR5xYJhIDxvbWVnQGludmlzaWJsZXRoaW5nc2xh
Yi5jb20+Ci0tLQogaW5jbHVkZS9nbnR0YWJfaW50ZXJmYWNlLmggfCAgNTQgKysrKysrKysrKysr
KystCiBpbmNsdWRlL3hlbi5oICAgICAgICAgICAgICB8ICAxOSArKysrKysKIHNyYy94ZW4vZ3Jh
bnRfdGFibGUuYyAgICAgIHwgMTE2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHNy
Yy94ZW5idXMvZ250dGFiLmMgICAgICAgIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNTIgaW5zZXJ0aW9ucygrKSwg
MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2dudHRhYl9pbnRlcmZhY2UuaCBi
L2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCmluZGV4IGQyOTQ0MGEuLmIwZjRhZGYgMTAwNjQ0
Ci0tLSBhL2luY2x1ZGUvZ250dGFiX2ludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvZ250dGFiX2lu
dGVyZmFjZS5oCkBAIC0xNjMsNiArMTYzLDM5IEBAIHR5cGVkZWYgVk9JRAogICAgIElOICBQWEVO
QlVTX0dOVFRBQl9DQUNIRSAgICBDYWNoZQogICAgICk7CiAKKy8qISBcdHlwZWRlZiBYRU5CVVNf
R05UVEFCX01BUF9GT1JFSUdOX1BBR0VTCisgICAgXGJyaWVmIE1hcCBmb3JlaWduIG1lbW9yeSBw
YWdlcyBpbnRvIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZQorCisgICAgXHBhcmFtIEludGVyZmFj
ZSBUaGUgaW50ZXJmYWNlIGhlYWRlcgorICAgIFxwYXJhbSBEb21haW4gVGhlIGRvbWlkIG9mIHRo
ZSBmb3JlaWduIGRvbWFpbiB0aGF0IGdyYW50ZWQgdGhlIHBhZ2VzCisgICAgXHBhcmFtIE51bWJl
clBhZ2VzIE51bWJlciBvZiBwYWdlcyB0byBtYXAKKyAgICBccGFyYW0gUmVmZXJlbmNlcyBBcnJh
eSBvZiBncmFudCByZWZlcmVuY2UgbnVtYmVycyBzaGFyZWQgYnkgdGhlIGZvcmVpZ24gZG9tYWlu
CisgICAgXHBhcmFtIFJlYWRPbmx5IElmIFRSVUUsIHBhZ2VzIGFyZSBtYXBwZWQgd2l0aCByZWFk
LW9ubHkgYWNjZXNzCisgICAgXHBhcmFtIEFkZHJlc3MgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGhh
dCB0aGUgZm9yZWlnbiBwYWdlcyBhcmUgbWFwcGVkIHVuZGVyCisqLworCit0eXBlZGVmIE5UU1RB
VFVTCisoKlhFTkJVU19HTlRUQUJfTUFQX0ZPUkVJR05fUEFHRVMpKAorICAgIElOICBQSU5URVJG
QUNFICAgICAgICAgICAgICBJbnRlcmZhY2UsCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAg
ICAgIERvbWFpbiwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMs
CisgICAgSU4gIFBVTE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCisgICAgSU4gIEJP
T0xFQU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBQSFlTSUNBTF9BRERSRVNT
ICAgICAgICAqQWRkcmVzcworICAgICk7CisKKy8qISBcdHlwZWRlZiBYRU5CVVNfR05UVEFCX1VO
TUFQX0ZPUkVJR05fUEFHRVMKKyAgICBcYnJpZWYgVW5tYXAgZm9yZWlnbiBtZW1vcnkgcGFnZXMg
ZnJvbSB0aGUgc3lzdGVtIGFkZHJlc3Mgc3BhY2UKKworICAgIFxwYXJhbSBJbnRlcmZhY2UgVGhl
IGludGVyZmFjZSBoZWFkZXIKKyAgICBccGFyYW0gQWRkcmVzcyBUaGUgcGh5c2ljYWwgYWRkcmVz
cyB0aGF0IHRoZSBmb3JlaWduIHBhZ2VzIGFyZSBtYXBwZWQgdW5kZXIKKyovCit0eXBlZGVmIE5U
U1RBVFVTCisoKlhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9QQUdFUykoCisgICAgSU4gIFBJ
TlRFUkZBQ0UgICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVT
UyAgICAgICAgQWRkcmVzcworICAgICk7CisKIC8vIHs3NjM2NzlDNS1FNUMyLTRBNkQtOEI4OC02
QkIwMkVDNDJEOEV9CiBERUZJTkVfR1VJRChHVUlEX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAK
IDB4NzYzNjc5YzUsIDB4ZTVjMiwgMHg0YTZkLCAweDhiLCAweDg4LCAweDZiLCAweGIwLCAweDJl
LCAweGM0LCAweDJkLCAweDhlKTsKQEAgLTE4Miw3ICsyMTUsMjQgQEAgc3RydWN0IF9YRU5CVVNf
R05UVEFCX0lOVEVSRkFDRV9WMSB7CiAgICAgWEVOQlVTX0dOVFRBQl9ERVNUUk9ZX0NBQ0hFICAg
ICAgICAgR250dGFiRGVzdHJveUNhY2hlOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX1hFTkJVU19H
TlRUQUJfSU5URVJGQUNFX1YxIFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFOworLyohIFxzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1YyCisg
ICAgXGJyaWVmIEdOVFRBQiBpbnRlcmZhY2UgdmVyc2lvbiAyCisgICAgXGluZ3JvdXAgaW50ZXJm
YWNlcworKi8KK3N0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgeworICAgIElOVEVS
RkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZTsKKyAgICBYRU5CVVNfR05U
VEFCX0FDUVVJUkUgICAgICAgICAgICAgICBHbnR0YWJBY3F1aXJlOworICAgIFhFTkJVU19HTlRU
QUJfUkVMRUFTRSAgICAgICAgICAgICAgIEdudHRhYlJlbGVhc2U7CisgICAgWEVOQlVTX0dOVFRB
Ql9DUkVBVEVfQ0FDSEUgICAgICAgICAgR250dGFiQ3JlYXRlQ2FjaGU7CisgICAgWEVOQlVTX0dO
VFRBQl9QRVJNSVRfRk9SRUlHTl9BQ0NFU1MgR250dGFiUGVybWl0Rm9yZWlnbkFjY2VzczsKKyAg
ICBYRU5CVVNfR05UVEFCX1JFVk9LRV9GT1JFSUdOX0FDQ0VTUyBHbnR0YWJSZXZva2VGb3JlaWdu
QWNjZXNzOworICAgIFhFTkJVU19HTlRUQUJfR0VUX1JFRkVSRU5DRSAgICAgICAgIEdudHRhYkdl
dFJlZmVyZW5jZTsKKyAgICBYRU5CVVNfR05UVEFCX0RFU1RST1lfQ0FDSEUgICAgICAgICBHbnR0
YWJEZXN0cm95Q2FjaGU7CisgICAgWEVOQlVTX0dOVFRBQl9NQVBfRk9SRUlHTl9QQUdFUyAgICAg
R250dGFiTWFwRm9yZWlnblBhZ2VzOworICAgIFhFTkJVU19HTlRUQUJfVU5NQVBfRk9SRUlHTl9Q
QUdFUyAgIEdudHRhYlVubWFwRm9yZWlnblBhZ2VzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgX1hF
TkJVU19HTlRUQUJfSU5URVJGQUNFX1YyIFhFTkJVU19HTlRUQUJfSU5URVJGQUNFLCAqUFhFTkJV
U19HTlRUQUJfSU5URVJGQUNFOwogCiAvKiEgXGRlZiBYRU5CVVNfR05UVEFCCiAgICAgXGJyaWVm
IE1hY3JvIGF0IGFzc2lzdCBpbiBtZXRob2QgaW52b2NhdGlvbgpAQCAtMTkzLDcgKzI0Myw3IEBA
IHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMSBYRU5CVVNfR05UVEFC
X0lOVEVSRkFDRSwgKlBYRU5CVVNfR05UCiAjZW5kaWYgIC8vIF9XSU5ETEwKIAogI2RlZmluZSBY
RU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAxCi0jZGVmaW5lIFhFTkJVU19HTlRU
QUJfSU5URVJGQUNFX1ZFUlNJT05fTUFYIDEKKyNkZWZpbmUgWEVOQlVTX0dOVFRBQl9JTlRFUkZB
Q0VfVkVSU0lPTl9NQVggMgogCiAjZW5kaWYgIC8vIF9YRU5CVVNfR05UVEFCX0lOVEVSRkFDRV9I
CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuLmggYi9pbmNsdWRlL3hlbi5oCmluZGV4IDYwMDc1
ODIuLjIzYzdhYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuLmgKKysrIGIvaW5jbHVkZS94ZW4u
aApAQCAtMjU4LDYgKzI1OCwyNSBAQCBHcmFudFRhYmxlQ29weSgKICAgICBJTiAgVUxPTkcgICAg
ICAgICAgICAgICBDb3VudAogICAgICk7CiAKK19fY2hlY2tSZXR1cm4KK1hFTl9BUEkKK05UU1RB
VFVTCitHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAg
ICAgICAgIERvbWFpbiwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgR3JhbnRSZWYs
CisgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MsCisgICAgSU4gIEJPT0xF
QU4gICAgICAgICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBVTE9ORyAgICAgICAgICAgICAg
ICAgICAqSGFuZGxlCisgICAgKTsKKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRTVEFUVVMK
K0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAg
ICAgICBIYW5kbGUsCisgICAgSU4gIFBIWVNJQ0FMX0FERFJFU1MgICAgICAgIEFkZHJlc3MKKyAg
ICApOworCiAvLyBTQ0hFRAogCiBfX2NoZWNrUmV0dXJuCmRpZmYgLS1naXQgYS9zcmMveGVuL2dy
YW50X3RhYmxlLmMgYi9zcmMveGVuL2dyYW50X3RhYmxlLmMKaW5kZXggNmZhY2IzZi4uNmIwMGY2
NSAxMDA2NDQKLS0tIGEvc3JjL3hlbi9ncmFudF90YWJsZS5jCisrKyBiL3NyYy94ZW4vZ3JhbnRf
dGFibGUuYwpAQCAtMzgsNiArMzgsMzUgQEAKICNpbmNsdWRlICJkYmdfcHJpbnQuaCIKICNpbmNs
dWRlICJhc3NlcnQuaCIKIAorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDEyNykgICAvLyBjb25k
aXRpb25hbCBleHByZXNzaW9uIGlzIGNvbnN0YW50CisKKy8vIE1vc3Qgb2YgdGhlIEdOVFNUXyog
dmFsdWVzIGRvbid0IGhhdmUgbWVhbmluZ2Z1bCBOVFNUQVRVUyBjb3VudGVycGFydHMsCisvLyB0
aGlzIG1hY3JvIHRyYW5zbGF0ZXMgdGhvc2UgdGhhdCBkby4KKyNkZWZpbmUgR05UU1RfVE9fU1RB
VFVTKF9nbnRzdCwgX3N0YXR1cykgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHN3aXRjaCAoX2dudHN0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIGNhc2UgR05UU1Rfb2theTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7ICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgR05UU1RfYmFkX2hhbmRsZTog
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RB
VFVTX0lOVkFMSURfSEFORExFOyAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IGNhc2UgR05UU1RfcGVybWlzc2lvbl9kZW5pZWQ6ICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX0FDQ0VTU19ERU5JRUQ7ICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGNhc2UgR05UU1RfZWFnYWluOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBfc3RhdHVzID0gU1RBVFVTX1JFVFJZ
OyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICBfc3RhdHVzID0gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfSB3aGlsZSAoRkFMU0UpCisKIHN0YXRpYyBMT05HX1BUUgogR3JhbnRUYWJs
ZU9wKAogICAgIElOICBVTE9ORyAgIENvbW1hbmQsCkBAIC0xMzEsMyArMTYwLDkwIEBAIGZhaWwx
OgogCiAgICAgcmV0dXJuIHN0YXR1czsKIH0KKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRT
VEFUVVMKK0dyYW50VGFibGVNYXBGb3JlaWduUGFnZSgKKyAgICBJTiAgVVNIT1JUICAgICAgICAg
ICAgICAgICAgRG9tYWluLAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICBHcmFudFJl
ZiwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVzcywKKyAgICBJTiAgQk9P
TEVBTiAgICAgICAgICAgICAgICAgUmVhZE9ubHksCisgICAgT1VUIFVMT05HICAgICAgICAgICAg
ICAgICAgICpIYW5kbGUKKyAgICApCit7CisgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVm
IG9wOworICAgIExPTkdfUFRSICAgICAgICAgICAgICAgICAgICByYzsKKyAgICBOVFNUQVRVUyAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzOworCisgICAgUnRsWmVyb01lbW9yeSgmb3AsIHNpemVv
ZihvcCkpOworICAgIG9wLmRvbSA9IERvbWFpbjsKKyAgICBvcC5yZWYgPSBHcmFudFJlZjsKKyAg
ICBvcC5mbGFncyA9IEdOVE1BUF9ob3N0X21hcDsKKyAgICBpZiAoUmVhZE9ubHkpCisgICAgICAg
IG9wLmZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKKyAgICBvcC5ob3N0X2FkZHIgPSBBZGRyZXNz
LlF1YWRQYXJ0OworCisgICAgcmMgPSBHcmFudFRhYmxlT3AoR05UVEFCT1BfbWFwX2dyYW50X3Jl
ZiwgJm9wLCAxKTsKKworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgRVJSTk9fVE9fU1RBVFVT
KC1yYywgc3RhdHVzKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisKKyAgICBpZiAob3Au
c3RhdHVzICE9IEdOVFNUX29rYXkpIHsKKyAgICAgICAgR05UU1RfVE9fU1RBVFVTKG9wLnN0YXR1
cywgc3RhdHVzKTsKKyAgICAgICAgRXJyb3IoImh5cGVyY2FsbCBzdGF0dXM6ICVkXG4iLCBvcC5z
dGF0dXMpOworICAgICAgICBnb3RvIGZhaWwyOworICAgIH0KKworICAgICpIYW5kbGUgPSBvcC5o
YW5kbGU7CisKKyAgICByZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisKK2ZhaWwyOgorICAgIEVycm9y
KCJmYWlsMlxuIik7CitmYWlsMToKKyAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMp
OworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworX19jaGVja1JldHVybgorWEVOX0FQSQorTlRT
VEFUVVMKK0dyYW50VGFibGVVbm1hcEZvcmVpZ25QYWdlKAorICAgIElOICBVTE9ORyAgICAgICAg
ICAgICAgICAgICAgIEhhbmRsZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgICBB
ZGRyZXNzCisgICAgKQoreworICAgIHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmIG9wOwor
ICAgIExPTkdfUFRSICAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIE5UU1RBVFVTICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1czsKKworICAgIFJ0bFplcm9NZW1vcnkoJm9wLCBzaXplb2Yo
b3ApKTsKKyAgICBvcC5oYW5kbGUgPSBIYW5kbGU7CisgICAgb3AuaG9zdF9hZGRyID0gQWRkcmVz
cy5RdWFkUGFydDsKKworICAgIHJjID0gR3JhbnRUYWJsZU9wKEdOVFRBQk9QX3VubWFwX2dyYW50
X3JlZiwgJm9wLCAxKTsKKworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgRVJSTk9fVE9fU1RB
VFVTKC1yYywgc3RhdHVzKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisKKyAgICBpZiAo
b3Auc3RhdHVzICE9IEdOVFNUX29rYXkpIHsKKyAgICAgICAgR05UU1RfVE9fU1RBVFVTKG9wLnN0
YXR1cywgc3RhdHVzKTsKKyAgICAgICAgRXJyb3IoImh5cGVyY2FsbCBzdGF0dXM6ICVkXG4iLCBv
cC5zdGF0dXMpOworICAgICAgICBnb3RvIGZhaWwyOworICAgIH0KKworICAgIHJldHVybiBTVEFU
VVNfU1VDQ0VTUzsKKworZmFpbDI6CisgICAgRXJyb3IoImZhaWwyXG4iKTsKK2ZhaWwxOgorICAg
IEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7CisKKyAgICByZXR1cm4gc3RhdHVzOwor
fQpkaWZmIC0tZ2l0IGEvc3JjL3hlbmJ1cy9nbnR0YWIuYyBiL3NyYy94ZW5idXMvZ250dGFiLmMK
aW5kZXggMTY1ZTM4Zi4uMzJiNDNjNyAxMDA2NDQKLS0tIGEvc3JjL3hlbmJ1cy9nbnR0YWIuYwor
KysgYi9zcmMveGVuYnVzL2dudHRhYi5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiZGJn
X3ByaW50LmgiCiAjaW5jbHVkZSAiYXNzZXJ0LmgiCiAjaW5jbHVkZSAidXRpbC5oIgorI2luY2x1
ZGUgImhhc2hfdGFibGUuaCIKIAogI2RlZmluZSBYRU5CVVNfR05UVEFCX01BWElNVU1fRlJBTUVf
Q09VTlQgIDMyCiAjZGVmaW5lIFhFTkJVU19HTlRUQUJfRU5UUllfUEVSX0ZSQU1FICAgICAgKFBB
R0VfU0laRSAvIHNpemVvZiAoZ3JhbnRfZW50cnlfdjFfdCkpCkBAIC02OCw2ICs2OSwxMSBAQCBz
dHJ1Y3QgX1hFTkJVU19HTlRUQUJfRU5UUlkgewogICAgIGdyYW50X2VudHJ5X3YxX3QgICAgRW50
cnk7CiB9OwogCit0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9NQVBfRU5UUlkgeworICAg
IFVMT05HICAgICAgICAgICAgICAgTnVtYmVyUGFnZXM7CisgICAgVUxPTkcgICAgICAgICAgICAg
ICBNYXBIYW5kbGVzWzFdOworfSBYRU5CVVNfR05UVEFCX01BUF9FTlRSWSwgKlBYRU5CVVNfR05U
VEFCX01BUF9FTlRSWTsKKwogc3RydWN0IF9YRU5CVVNfR05UVEFCX0NPTlRFWFQgewogICAgIFBY
RU5CVVNfRkRPICAgICAgICAgICAgICAgICBGZG87CiAgICAgS1NQSU5fTE9DSyAgICAgICAgICAg
ICAgICAgIExvY2s7CkBAIC04Miw2ICs4OCw3IEBAIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9DT05U
RVhUIHsKICAgICBQWEVOQlVTX1NVU1BFTkRfQ0FMTEJBQ0sgICAgU3VzcGVuZENhbGxiYWNrRWFy
bHk7CiAgICAgWEVOQlVTX0RFQlVHX0lOVEVSRkFDRSAgICAgIERlYnVnSW50ZXJmYWNlOwogICAg
IFBYRU5CVVNfREVCVUdfQ0FMTEJBQ0sgICAgICBEZWJ1Z0NhbGxiYWNrOworICAgIFBYRU5CVVNf
SEFTSF9UQUJMRSAgICAgICAgICBNYXBUYWJsZTsKICAgICBMSVNUX0VOVFJZICAgICAgICAgICAg
ICAgICAgTGlzdDsKIH07CiAKQEAgLTUzNCw2ICs1NDEsMTI0IEBAIEdudHRhYkdldFJlZmVyZW5j
ZSgKICAgICByZXR1cm4gKFVMT05HKUVudHJ5LT5SZWZlcmVuY2U7CiB9CiAKK3N0YXRpYyBOVFNU
QVRVUworR250dGFiTWFwRm9yZWlnblBhZ2VzKAorICAgIElOICBQSU5URVJGQUNFICAgICAgICAg
ICAgICBJbnRlcmZhY2UsCisgICAgSU4gIFVTSE9SVCAgICAgICAgICAgICAgICAgIERvbWFpbiwK
KyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgTnVtYmVyUGFnZXMsCisgICAgSU4gIFBV
TE9ORyAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZXMsCisgICAgSU4gIEJPT0xFQU4gICAgICAg
ICAgICAgICAgIFJlYWRPbmx5LAorICAgIE9VVCBQSFlTSUNBTF9BRERSRVNTICAgICAgICAqQWRk
cmVzcworICAgICkKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgc3RhdHVzOwor
ICAgIFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250
ZXh0OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBQYWdlSW5kZXg7CisgICAgUEhZ
U0lDQUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRyZXNzOworICAgIFBYRU5CVVNfR05UVEFC
X01BUF9FTlRSWSAgICBNYXBFbnRyeTsKKworICAgIHN0YXR1cyA9IEZkb0FsbG9jYXRlSW9TcGFj
ZShDb250ZXh0LT5GZG8sIE51bWJlclBhZ2VzICogUEFHRV9TSVpFLCBBZGRyZXNzKTsKKyAgICBp
ZiAoIU5UX1NVQ0NFU1Moc3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAgIHN0YXR1
cyA9IFNUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTOworICAgIE1hcEVudHJ5ID0gX19HbnR0
YWJBbGxvY2F0ZShGSUVMRF9PRkZTRVQoWEVOQlVTX0dOVFRBQl9NQVBfRU5UUlksIE1hcEhhbmRs
ZXMpICsgTnVtYmVyUGFnZXMqc2l6ZW9mKFVMT05HKSk7CisgICAgaWYgKCFNYXBFbnRyeSkKKyAg
ICAgICAgZ290byBmYWlsMjsKKworICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0ID0gQWRkcmVzcy0+
UXVhZFBhcnQ7CisgICAgTWFwRW50cnktPk51bWJlclBhZ2VzID0gTnVtYmVyUGFnZXM7CisKKyAg
ICBmb3IgKFBhZ2VJbmRleCA9IDA7IFBhZ2VJbmRleCA8IE51bWJlclBhZ2VzOyBQYWdlSW5kZXgr
KykgeworICAgICAgICBzdGF0dXMgPSBHcmFudFRhYmxlTWFwRm9yZWlnblBhZ2UoRG9tYWluLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlc1tQYWdl
SW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFnZUFk
ZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkT25s
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNYXBFbnRyeS0+
TWFwSGFuZGxlc1tQYWdlSW5kZXhdKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykp
CisgICAgICAgICAgICBnb3RvIGZhaWwzOworCisgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0
ICs9IFBBR0VfU0laRTsKKyAgICB9CisKKyAgICBzdGF0dXMgPSBIYXNoVGFibGVBZGQoQ29udGV4
dC0+TWFwVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MtPlF1YWRQYXJ0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAoVUxPTkdfUFRSKU1hcEVudHJ5KTsKKworICAg
IGlmICghTlRfU1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw0OworCisgICAgcmV0
dXJuIFNUQVRVU19TVUNDRVNTOworCitmYWlsNDoKKyAgICBFcnJvcigiZmFpbDRcbiIpOworCitm
YWlsMzoKKyAgICBFcnJvcigiZmFpbDNcbiIpOworCisgICAgd2hpbGUgKFBhZ2VJbmRleCA+IDAp
IHsKKyAgICAgICAgLS1QYWdlSW5kZXg7CisgICAgICAgIFBhZ2VBZGRyZXNzLlF1YWRQYXJ0IC09
IFBBR0VfU0laRTsKKyAgICAgICAgQVNTRVJUKE5UX1NVQ0NFU1MoR3JhbnRUYWJsZVVubWFwRm9y
ZWlnblBhZ2UoTWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgUGFnZUFkZHJlc3MpKSk7
CisgICAgfQorCisgICAgX19HbnR0YWJGcmVlKE1hcEVudHJ5KTsKKworZmFpbDI6CisgICAgRXJy
b3IoImZhaWwyXG4iKTsKKyAgICBGZG9GcmVlSW9TcGFjZShDb250ZXh0LT5GZG8sICpBZGRyZXNz
LCBOdW1iZXJQYWdlcyAqIFBBR0VfU0laRSk7CisKK2ZhaWwxOgorICAgIEVycm9yKCJmYWlsMTog
KCUwOHgpXG4iLCBzdGF0dXMpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBOVFNU
QVRVUworR250dGFiVW5tYXBGb3JlaWduUGFnZXMoCisgICAgSU4gIFBJTlRFUkZBQ0UgICAgICAg
ICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUEhZU0lDQUxfQUREUkVTUyAgICAgICAgQWRkcmVz
cworICAgICkKK3sKKyAgICBOVFNUQVRVUyAgICAgICAgICAgICAgICAgICAgU3RhdHVzOworICAg
IFBYRU5CVVNfR05UVEFCX0NPTlRFWFQgICAgICBDb250ZXh0ID0gSW50ZXJmYWNlLT5Db250ZXh0
OworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICBQYWdlSW5kZXg7CisgICAgUEhZU0lD
QUxfQUREUkVTUyAgICAgICAgICAgIFBhZ2VBZGRyZXNzOworICAgIFBYRU5CVVNfR05UVEFCX01B
UF9FTlRSWSAgICBNYXBFbnRyeTsKKworICAgIFN0YXR1cyA9IEhhc2hUYWJsZUxvb2t1cChDb250
ZXh0LT5NYXBUYWJsZSwgQWRkcmVzcy5RdWFkUGFydCwgKFBVTE9OR19QVFIpJk1hcEVudHJ5KTsK
KyAgICBpZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAg
IFN0YXR1cyA9IEhhc2hUYWJsZVJlbW92ZShDb250ZXh0LT5NYXBUYWJsZSwgQWRkcmVzcy5RdWFk
UGFydCk7CisgICAgaWYgKCFOVF9TVUNDRVNTKFN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7
CisKKyAgICBQYWdlQWRkcmVzcy5RdWFkUGFydCA9IEFkZHJlc3MuUXVhZFBhcnQ7CisKKyAgICBm
b3IgKFBhZ2VJbmRleCA9IDA7IFBhZ2VJbmRleCA8IE1hcEVudHJ5LT5OdW1iZXJQYWdlczsgUGFn
ZUluZGV4KyspIHsKKyAgICAgICAgU3RhdHVzID0gR3JhbnRUYWJsZVVubWFwRm9yZWlnblBhZ2Uo
TWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgUGFnZUFkZHJlc3MpOworICAgICAgICBp
ZiAoIU5UX1NVQ0NFU1MoU3RhdHVzKSkKKyAgICAgICAgICAgIGdvdG8gZmFpbDM7CisKKyAgICAg
ICAgUGFnZUFkZHJlc3MuUXVhZFBhcnQgKz0gUEFHRV9TSVpFOworICAgIH0KKworICAgIEZkb0Zy
ZWVJb1NwYWNlKENvbnRleHQtPkZkbywgQWRkcmVzcywgTWFwRW50cnktPk51bWJlclBhZ2VzICog
UEFHRV9TSVpFKTsKKyAgICBfX0dudHRhYkZyZWUoTWFwRW50cnkpOworICAgIHJldHVybiBTVEFU
VVNfU1VDQ0VTUzsKKworZmFpbDM6CisgICAgRXJyb3IoImZhaWwzXG4iKTsKKyAgICBLZUJ1Z0No
ZWNrRXgoTUVNT1JZX01BTkFHRU1FTlQsIFhFTkJVU19HTlRUQUJfVEFHLCBQYWdlQWRkcmVzcy5R
dWFkUGFydCwgTWFwRW50cnktPk1hcEhhbmRsZXNbUGFnZUluZGV4XSwgQWRkcmVzcy5RdWFkUGFy
dCk7CisKK2ZhaWwyOgorICAgIEVycm9yKCJmYWlsMlxuIik7CisKK2ZhaWwxOgorICAgIEVycm9y
KCJmYWlsMTogKCUwOHgpXG4iLCBTdGF0dXMpOworICAgIHJldHVybiBTdGF0dXM7Cit9CisKIHN0
YXRpYyBWT0lECiBHbnR0YWJTdXNwZW5kQ2FsbGJhY2tFYXJseSgKICAgICBJTiAgUFZPSUQgICAg
ICAgICAgICAgICBBcmd1bWVudApAQCAtNzg5LDYgKzkxNCwxOSBAQCBzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfR05UVEFCX0lOVEVSRkFDRV9WMSAgIEdudHRhYkludGVyZmFjZVZlcnNpb24xID0gewog
ICAgIEdudHRhYkRlc3Ryb3lDYWNoZQogfTsKICAgICAgICAgICAgICAgICAgICAgIAorc3RhdGlj
IHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgICBHbnR0YWJJbnRlcmZhY2VWZXJz
aW9uMiA9IHsKKyAgICB7IHNpemVvZihzdHJ1Y3QgX1hFTkJVU19HTlRUQUJfSU5URVJGQUNFX1Yy
KSwgMiwgTlVMTCwgTlVMTCwgTlVMTCB9LAorICAgIEdudHRhYkFjcXVpcmUsCisgICAgR250dGFi
UmVsZWFzZSwKKyAgICBHbnR0YWJDcmVhdGVDYWNoZSwKKyAgICBHbnR0YWJQZXJtaXRGb3JlaWdu
QWNjZXNzLAorICAgIEdudHRhYlJldm9rZUZvcmVpZ25BY2Nlc3MsCisgICAgR250dGFiR2V0UmVm
ZXJlbmNlLAorICAgIEdudHRhYkRlc3Ryb3lDYWNoZSwKKyAgICBHbnR0YWJNYXBGb3JlaWduUGFn
ZXMsCisgICAgR250dGFiVW5tYXBGb3JlaWduUGFnZXMKK307CisKIE5UU1RBVFVTCiBHbnR0YWJJ
bml0aWFsaXplKAogICAgIElOICBQWEVOQlVTX0ZETyAgICAgICAgICAgICBGZG8sCkBAIC04MzYs
MTIgKzk3NCwxOSBAQCBHbnR0YWJJbml0aWFsaXplKAogICAgIEluaXRpYWxpemVMaXN0SGVhZCgm
KCpDb250ZXh0KS0+TGlzdCk7CiAgICAgS2VJbml0aWFsaXplU3BpbkxvY2soJigqQ29udGV4dCkt
PkxvY2spOwogCisgICAgc3RhdHVzID0gSGFzaFRhYmxlQ3JlYXRlKCYoKkNvbnRleHQpLT5NYXBU
YWJsZSk7CisgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7
CisKICAgICAoKkNvbnRleHQpLT5GZG8gPSBGZG87CiAKICAgICBUcmFjZSgiPD09PT1cbiIpOwog
CiAgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCitmYWlsMjoKKyAgICBFcnJvcigiZmFpbDJc
biIpOworCiBmYWlsMToKICAgICBFcnJvcigiZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOwogCkBA
IC04NzgsNiArMTAyMywyMyBAQCBHbnR0YWJHZXRJbnRlcmZhY2UoCiAgICAgICAgIHN0YXR1cyA9
IFNUQVRVU19TVUNDRVNTOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSAyOiB7Cisg
ICAgICAgIHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9JTlRFUkZBQ0VfVjIgICpHbnR0YWJJbnRlcmZh
Y2U7CisKKyAgICAgICAgR250dGFiSW50ZXJmYWNlID0gKHN0cnVjdCBfWEVOQlVTX0dOVFRBQl9J
TlRFUkZBQ0VfVjIgKilJbnRlcmZhY2U7CisKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX0JVRkZF
Ul9PVkVSRkxPVzsKKyAgICAgICAgaWYgKFNpemUgPCBzaXplb2Yoc3RydWN0IF9YRU5CVVNfR05U
VEFCX0lOVEVSRkFDRV9WMikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAqR250dGFi
SW50ZXJmYWNlID0gR250dGFiSW50ZXJmYWNlVmVyc2lvbjI7CisKKyAgICAgICAgQVNTRVJUM1Uo
SW50ZXJmYWNlLT5WZXJzaW9uLCA9PSwgVmVyc2lvbik7CisgICAgICAgIEludGVyZmFjZS0+Q29u
dGV4dCA9IENvbnRleHQ7CisKKyAgICAgICAgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBzdGF0dXMgPSBTVEFUVVNf
Tk9UX1NVUFBPUlRFRDsKICAgICAgICAgYnJlYWs7CkBAIC04OTUsNiArMTA1Nyw5IEBAIEdudHRh
YlRlYXJkb3duKAogCiAgICAgQ29udGV4dC0+RmRvID0gTlVMTDsKIAorICAgIEhhc2hUYWJsZURl
c3Ryb3koQ29udGV4dC0+TWFwVGFibGUpOworICAgIENvbnRleHQtPk1hcFRhYmxlID0gTlVMTDsK
KwogICAgIFJ0bFplcm9NZW1vcnkoJkNvbnRleHQtPkxvY2ssIHNpemVvZiAoS1NQSU5fTE9DSykp
OwogICAgIFJ0bFplcm9NZW1vcnkoJkNvbnRleHQtPkxpc3QsIHNpemVvZiAoTElTVF9FTlRSWSkp
OwogCi0tIAoxLjguMS5tc3lzZ2l0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEdK-0000eX-BM; Fri, 11 Sep 2015 03:04:14 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEdI-0000eS-RC
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:13 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	DF/C3-10715-CA442F55; Fri, 11 Sep 2015 03:04:12 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441940650!37323853!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14411 invoked from network); 11 Sep 2015 03:04:10 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:04:10 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 136F4204BA
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:10 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:04:10 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=ix9/+NMlBqS826O5P+bjjCCN1kY=; b=kySvI6
	wKzBp4lcFnub3ebNAgLKDD2Qw0ic1v2e4lNYTnSlvNkiCL6zWGDUtly6hs6O3OEt
	IdMgwhwBwFTqzbBTYHx6H8Sio4vTSt9lrYbHcXhRIn51qFhIn3aNBGtXqOSc18LQ
	vkueaRc+0Rpr9iuoDpxE75ejVPvovwMRqUyfA=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=ix9/+NMlBqS826O5P+bjjCCN1kY=; b=P5JPH
	a6Rgq+UZR1MCrkbcduA1mN9ALLwdWzQb9jUS9Mg0y050YsEvN98lUhZkamgzW+TK
	8V9Z7HkGSCdzura9bqAESrp8VoznhSojeJaJeJ6EZGieVODgm35XF36jh5LJLa8o
	5ATdZX6v5f75xrvSEorIHPz7jCnexPKP2SejfQ=
X-Sasl-enc: T0gvxmoA6wpqHM6s/bRX0f8SWLJa+aaVM1OgnGqu/2/2 1441940649
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id E5DC06800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:08 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F244A6.8050501@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:04:06 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 14707
Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key permissions
 to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

U1RPUkUgaW50ZXJmYWNlIG5vdyBpbmNsdWRlcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSBrZXkgcGVy
bWlzc2lvbnMuIFRoaXMKYWxsb3dzIGdyYW50aW5nIGtleSBhY2Nlc3MgdG8gb3RoZXIsIG5vbi1w
cml2aWxlZ2VkIGRvbWFpbnMuCgpTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgV29qZHnFgmEgPG9tZWdA
aW52aXNpYmxldGhpbmdzbGFiLmNvbT4KLS0tCiBpbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oIHwg
IDY4ICsrKysrKysrKysrKysrKystCiBzcmMveGVuYnVzL3N0b3JlLmMgICAgICAgIHwgMTg1ICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh
bmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5j
bHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgKaW5kZXgg
NWJjYmJhMy4uNjc3NWIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaAor
KysgYi9pbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oCkBAIC01MCw2ICs1MCwyMyBAQCB0eXBlZGVm
IHN0cnVjdCBfWEVOQlVTX1NUT1JFX1RSQU5TQUNUSU9OICAgIFhFTkJVU19TVE9SRV9UUkFOU0FD
VElPTiwgKlBYRU5CVVNfUwogKi8KIHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0gg
ICAgICAgICAgWEVOQlVTX1NUT1JFX1dBVENILCAqUFhFTkJVU19TVE9SRV9XQVRDSDsKIAorLyoh
IFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sKKyAgICBcYnJpZWYgQml0bWFz
ayBvZiBYZW5TdG9yZSBrZXkgcGVybWlzc2lvbnMKKyovCit0eXBlZGVmIGVudW0gX1hFTkJVU19T
VE9SRV9QRVJNSVNTSU9OX01BU0sgeworICAgIFhFTkJVU19TVE9SRV9QRVJNX05PTkUgPSAwLAor
ICAgIFhFTkJVU19TVE9SRV9QRVJNX1JFQUQgPSAxLAorICAgIFhFTkJVU19TVE9SRV9QRVJNX1dS
SVRFID0gMiwKK30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSzsKKworLyohIFx0eXBlZGVm
IFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OCisgICAgXGJyaWVmIFhlblN0b3JlIGtleSBwZXJtaXNz
aW9ucyBlbnRyeSBmb3IgYSBzaW5nbGUgZG9tYWluCisqLwordHlwZWRlZiBzdHJ1Y3QgX1hFTkJV
U19TVE9SRV9QRVJNSVNTSU9OIHsKKyAgICBVU0hPUlQgRG9tYWluOworICAgIFhFTkJVU19TVE9S
RV9QRVJNSVNTSU9OX01BU0sgTWFzazsKK30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT04sICpQWEVO
QlVTX1NUT1JFX1BFUk1JU1NJT047CisKIC8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfQUNRVUlS
RQogICAgIFxicmllZiBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UK
IApAQCAtMjQ3LDEwICsyNjQsMzYgQEAgdHlwZWRlZiBWT0lECiAgICAgSU4gIFBJTlRFUkZBQ0Ug
IEludGVyZmFjZQogICAgICk7CiAKKy8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TlNfU0VUCisgICAgXGJyaWVmIFNldCBwZXJtaXNzaW9ucyBmb3IgYSBYZW5TdG9yZSBrZXkKKwor
ICAgIFxwYXJhbSBJbnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXIKKyAgICBccGFyYW0gVHJh
bnNhY3Rpb24gVGhlIHRyYW5zYWN0aW9uIGhhbmRsZSAoTlVMTCBpZiB0aGlzIGlzIG5vdAorICAg
IHBhcnQgb2YgYSB0cmFuc2FjdGlvbikKKyAgICBccGFyYW0gUHJlZml4IEFuIG9wdGlvbmFsIHBy
ZWZpeCBmb3IgdGhlIFxhIE5vZGUKKyAgICBccGFyYW0gTm9kZSBUaGUgY29uY2F0ZW5hdGlvbiBv
ZiB0aGUgXGEgUHJlZml4IGFuZCB0aGlzIHZhbHVlIHNwZWNpZmllcworICAgIHRoZSBYZW5TdG9y
ZSBrZXkgdG8gc2V0IHBlcm1pc3Npb25zIG9mCisgICAgXHBhcmFtIFBlcm1pc3Npb25zIEFuIGFy
cmF5IG9mIHBlcm1pc3Npb25zIHRvIHNldAorICAgIFxwYXJhbSBOdW1iZXJQZXJtaXNzaW9ucyBO
dW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFxhIFBlcm1pc3Npb25zIGFycmF5CisqLwordHlwZWRl
ZiBOVFNUQVRVUworKCpYRU5CVVNfU1RPUkVfUEVSTUlTU0lPTlNfU0VUKSgKKyAgICBJTiAgUElO
VEVSRkFDRSAgICAgICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUFhFTkJVU19TVE9S
RV9UUkFOU0FDVElPTiAgIFRyYW5zYWN0aW9uIE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAgUHJlZml4IE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAg
IFBlcm1pc3Npb25zLAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy
UGVybWlzc2lvbnMKKyAgICApOworCiAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEtMkYxRTNB
RDIxNEQ3fQogREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAKIDB4ODY4
MjRjM2IsIDB4ZDM0ZSwgMHg0NzUzLCAweGIyLCAweDgxLCAweDJmLCAweDFlLCAweDNhLCAweGQy
LCAweDE0LCAweGQ3KTsKIAorLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEK
KyAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQorICAgIFxpbmdyb3VwIGludGVy
ZmFjZXMKKyovCiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgewogICAgIElOVEVS
RkFDRSAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlOwogICAgIFhFTkJVU19TVE9SRV9B
Q1FVSVJFICAgICAgICAgICAgU3RvcmVBY3F1aXJlOwpAQCAtMjY3LDExICszMTAsMjggQEAgc3Ry
dWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxIHsKICAgICBYRU5CVVNfU1RPUkVfUE9MTCAg
ICAgICAgICAgICAgIFN0b3JlUG9sbDsKIH07CiAKLS8qISBcc3RydWN0IF9YRU5CVVNfU1RPUkVf
SU5URVJGQUNFX1YxCi0gICAgXGJyaWVmIFNUT1JFIGludGVyZmFjZSB2ZXJzaW9uIDEKKy8qISBc
c3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyCisgICAgXGJyaWVmIFNUT1JFIGludGVy
ZmFjZSB2ZXJzaW9uIDIKICAgICBcaW5ncm91cCBpbnRlcmZhY2VzCiAqLwotdHlwZWRlZiBzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSwgKlBY
RU5CVVNfU1RPUkVfSU5URVJGQUNFOworc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1Yy
IHsKKyAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZTsKKyAgICBY
RU5CVVNfU1RPUkVfQUNRVUlSRSAgICAgICAgICAgIFN0b3JlQWNxdWlyZTsKKyAgICBYRU5CVVNf
U1RPUkVfUkVMRUFTRSAgICAgICAgICAgIFN0b3JlUmVsZWFzZTsKKyAgICBYRU5CVVNfU1RPUkVf
RlJFRSAgICAgICAgICAgICAgIFN0b3JlRnJlZTsKKyAgICBYRU5CVVNfU1RPUkVfUkVBRCAgICAg
ICAgICAgICAgIFN0b3JlUmVhZDsKKyAgICBYRU5CVVNfU1RPUkVfUFJJTlRGICAgICAgICAgICAg
IFN0b3JlUHJpbnRmOworICAgIFhFTkJVU19TVE9SRV9SRU1PVkUgICAgICAgICAgICAgU3RvcmVS
ZW1vdmU7CisgICAgWEVOQlVTX1NUT1JFX0RJUkVDVE9SWSAgICAgICAgICBTdG9yZURpcmVjdG9y
eTsKKyAgICBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT05fU1RBUlQgIFN0b3JlVHJhbnNhY3Rpb25T
dGFydDsKKyAgICBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT05fRU5EICAgIFN0b3JlVHJhbnNhY3Rp
b25FbmQ7CisgICAgWEVOQlVTX1NUT1JFX1dBVENIX0FERCAgICAgICAgICBTdG9yZVdhdGNoQWRk
OworICAgIFhFTkJVU19TVE9SRV9XQVRDSF9SRU1PVkUgICAgICAgU3RvcmVXYXRjaFJlbW92ZTsK
KyAgICBYRU5CVVNfU1RPUkVfUE9MTCAgICAgICAgICAgICAgIFN0b3JlUG9sbDsKKyAgICBYRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTlNfU0VUICAgIFN0b3JlUGVybWlzc2lvbnNTZXQ7Cit9OworCit0
eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMiBYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFLCAqUFhFTkJVU19TVE9SRV9JTlRFUkZBQ0U7CiAKIC8qISBcZGVmIFhFTkJVU19TVE9S
RQogICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9kIGludm9jYXRpb24KQEAgLTI4
Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMSBY
RU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19TVE9SRQogI2VuZGlmICAvLyBfV0lORExM
CiAKICNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAgMQotI2RlZmlu
ZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZFUlNJT05fTUFYICAxCisjZGVmaW5lIFhFTkJVU19T
VE9SRV9JTlRFUkZBQ0VfVkVSU0lPTl9NQVggIDIKIAogI2VuZGlmICAvLyBfWEVOQlVTX1NUT1JF
X0lOVEVSRkFDRV9ICiAKZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5i
dXMvc3RvcmUuYwppbmRleCBjNTRiMGYwLi5jZjVhYzc5IDEwMDY0NAotLS0gYS9zcmMveGVuYnVz
L3N0b3JlLmMKKysrIGIvc3JjL3hlbmJ1cy9zdG9yZS5jCkBAIC00NDIsNyArNDQyLDYgQEAgU3Rv
cmVJZ25vcmVIZWFkZXJUeXBlKAogICAgIGNhc2UgWFNfUkVMRUFTRToKICAgICBjYXNlIFhTX0dF
VF9ET01BSU5fUEFUSDoKICAgICBjYXNlIFhTX01LRElSOgotICAgIGNhc2UgWFNfU0VUX1BFUk1T
OgogICAgIGNhc2UgWFNfSVNfRE9NQUlOX0lOVFJPRFVDRUQ6CiAgICAgY2FzZSBYU19SRVNVTUU6
CiAgICAgY2FzZSBYU19TRVRfVEFSR0VUOgpAQCAtNDcwLDYgKzQ2OSw3IEBAIFN0b3JlVmVyaWZ5
SGVhZGVyKAogICAgICAgICBIZWFkZXItPnR5cGUgIT0gWFNfVFJBTlNBQ1RJT05fRU5EICYmCiAg
ICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19XUklURSAmJgogICAgICAgICBIZWFkZXItPnR5cGUg
IT0gWFNfUk0gJiYKKyAgICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1NFVF9QRVJNUyAmJgogICAg
ICAgICBIZWFkZXItPnR5cGUgIT0gWFNfV0FUQ0hfRVZFTlQgJiYKICAgICAgICAgSGVhZGVyLT50
eXBlICE9IFhTX0VSUk9SICYmCiAgICAgICAgICFTdG9yZUlnbm9yZUhlYWRlclR5cGUoSGVhZGVy
LT50eXBlKSkgewpAQCAtMTgxNiw2ICsxODE2LDE1NSBAQCBTdG9yZVBvbGwoCiAgICAgS2VSZWxl
YXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwoJkNvbnRleHQtPkxvY2spOwogfQogCitzdGF0aWMgTlRT
VEFUVVMKK1N0b3JlUGVybWlzc2lvblRvU3RyaW5nKAorICAgIElOICBQWEVOQlVTX1NUT1JFX1BF
Uk1JU1NJT04gICAgUGVybWlzc2lvbiwKKyAgICBPVVQgUENIQVIgICAgICAgICAgICAgICAgICAg
ICAgIEJ1ZmZlciwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNp
emUsCisgICAgT1VUIFBVTE9ORyAgICAgICAgICAgICAgICAgICAgICBVc2VkU2l6ZQorICAgICkK
K3sKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZzsKKyAgICBO
VFNUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BB
UkFNRVRFUjsKKworICAgIEFTU0VSVChCdWZmZXJTaXplID4gMSk7CisKKyAgICBzd2l0Y2ggKFBl
cm1pc3Npb24tPk1hc2spIHsKKyAgICBjYXNlIFhFTkJVU19TVE9SRV9QRVJNX05PTkU6CisgICAg
ICAgICpCdWZmZXIgPSAnbic7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVOQlVTX1NUT1JF
X1BFUk1fUkVBRDoKKyAgICAgICAgKkJ1ZmZlciA9ICdyJzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBYRU5CVVNfU1RPUkVfUEVSTV9XUklURToKKyAgICAgICAgKkJ1ZmZlciA9ICd3JzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5CVVNfU1RPUkVfUEVSTV9SRUFEIHwgWEVOQlVTX1NU
T1JFX1BFUk1fV1JJVEU6CisgICAgICAgICpCdWZmZXIgPSAnYic7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfQorCisgICAgc3RhdHVzID0g
UnRsU3RyaW5nQ2JQcmludGZFeEEoQnVmZmVyICsgMSwgQnVmZmVyU2l6ZSAtIDEsIE5VTEwsICZS
ZW1haW5pbmcsIDAsICIldSIsIFBlcm1pc3Npb24tPkRvbWFpbik7CisgICAgaWYgKCFOVF9TVUND
RVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7CisKKyAgICAqVXNlZFNpemUgPSBCdWZm
ZXJTaXplIC0gKFVMT05HKVJlbWFpbmluZyArIDE7CisgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNT
OworCitmYWlsMjoKKyAgICBFcnJvcigiZmFpbDJcbiIpOworCitmYWlsMToKKyAgICBFcnJvcigi
ZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRp
YyBOVFNUQVRVUworU3RvcmVQZXJtaXNzaW9uc1NldCgKKyAgICBJTiAgUElOVEVSRkFDRSAgICAg
ICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElP
TiAgIFRyYW5zYWN0aW9uIE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgUHJlZml4IE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1pc3Npb25z
LAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVybWlzc2lvbnMK
KyAgICApCit7CisgICAgUFhFTkJVU19TVE9SRV9DT05URVhUICAgICAgICAgICBDb250ZXh0ID0g
SW50ZXJmYWNlLT5Db250ZXh0OworICAgIFhFTkJVU19TVE9SRV9SRVFVRVNUICAgICAgICAgICAg
UmVxdWVzdDsKKyAgICBQWEVOQlVTX1NUT1JFX1JFU1BPTlNFICAgICAgICAgIFJlc3BvbnNlOwor
ICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIFVMT05HICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsIExlbmd0aCwgVXNlZDsKKyAgICBQQ0hBUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggPSBOVUxMOworICAgIFBDSEFSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGVybWlzc2lvblN0cmluZywgU2VnbWVudDsKKworICAgIHN0YXR1
cyA9IFNUQVRVU19OT19NRU1PUlk7CisgICAgUGVybWlzc2lvblN0cmluZyA9IF9fU3RvcmVBbGxv
Y2F0ZShYRU5TVE9SRV9QQVlMT0FEX01BWCk7CisgICAgaWYgKFBlcm1pc3Npb25TdHJpbmcgPT0g
TlVMTCkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAgIGlmIChQcmVmaXggPT0gTlVMTCkKKyAg
ICAgICAgTGVuZ3RoID0gKFVMT05HKXN0cmxlbihOb2RlKSArIHNpemVvZihDSEFSKTsKKyAgICBl
bHNlCisgICAgICAgIExlbmd0aCA9IChVTE9ORylzdHJsZW4oUHJlZml4KSArIDEgKyAoVUxPTkcp
c3RybGVuKE5vZGUpICsgc2l6ZW9mKENIQVIpOworCisgICAgUGF0aCA9IF9fU3RvcmVBbGxvY2F0
ZShMZW5ndGgpOworCisgICAgaWYgKFBhdGggPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMjsK
KworICAgIHN0YXR1cyA9IChQcmVmaXggPT0gTlVMTCkgPworICAgICAgICBSdGxTdHJpbmdDYlBy
aW50ZkEoUGF0aCwgTGVuZ3RoLCAiJXMiLCBOb2RlKSA6CisgICAgICAgIFJ0bFN0cmluZ0NiUHJp
bnRmQShQYXRoLCBMZW5ndGgsICIlcy8lcyIsIFByZWZpeCwgTm9kZSk7CisgICAgQVNTRVJUKE5U
X1NVQ0NFU1Moc3RhdHVzKSk7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2Yo
WEVOQlVTX1NUT1JFX1JFUVVFU1QpKTsKKworICAgIGZvciAoSW5kZXggPSAwLCBTZWdtZW50ID0g
UGVybWlzc2lvblN0cmluZywgTGVuZ3RoID0gWEVOU1RPUkVfUEFZTE9BRF9NQVg7CisgICAgICAg
ICBJbmRleCA8IE51bWJlclBlcm1pc3Npb25zOworICAgICAgICAgSW5kZXgrKykgeworICAgICAg
ICBzdGF0dXMgPSBTdG9yZVBlcm1pc3Npb25Ub1N0cmluZygmUGVybWlzc2lvbnNbSW5kZXhdLCBT
ZWdtZW50LCBMZW5ndGgsICZVc2VkKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykp
CisgICAgICAgICAgICBnb3RvIGZhaWwzOworCisgICAgICAgIFNlZ21lbnQgKz0gVXNlZDsKKyAg
ICAgICAgTGVuZ3RoIC09IFVzZWQ7CisgICAgfQorCisgICAgc3RhdHVzID0gU3RvcmVQcmVwYXJl
UmVxdWVzdChDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVl
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTX1NFVF9QRVJNUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBhdGgsIHN0cmxlbihQYXRoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIiLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGVybWlzc2lvblN0cmluZywgWEVOU1RPUkVfUEFZTE9BRF9NQVggLSBMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKworICAgIGlmICghTlRfU1VDQ0VT
UyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw0OworCisgICAgc3RhdHVzID0gU1RBVFVTX05P
X01FTU9SWTsKKyAgICBSZXNwb25zZSA9IFN0b3JlU3VibWl0UmVxdWVzdChDb250ZXh0LCAmUmVx
dWVzdCk7CisgICAgaWYgKFJlc3BvbnNlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDU7CisK
KyAgICBzdGF0dXMgPSBTdG9yZUNoZWNrUmVzcG9uc2UoUmVzcG9uc2UpOworICAgIGlmICghTlRf
U1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw2OworCisgICAgU3RvcmVGcmVlUmVz
cG9uc2UoUmVzcG9uc2UpOworICAgIEFTU0VSVChJc1plcm9NZW1vcnkoJlJlcXVlc3QsIHNpemVv
ZihYRU5CVVNfU1RPUkVfUkVRVUVTVCkpKTsKKworICAgIF9fU3RvcmVGcmVlKFBhdGgpOworICAg
IF9fU3RvcmVGcmVlKFBlcm1pc3Npb25TdHJpbmcpOworCisgICAgcmV0dXJuIFNUQVRVU19TVUND
RVNTOworCitmYWlsNjoKKyAgICBFcnJvcigiZmFpbDZcbiIpOworICAgIFN0b3JlRnJlZVJlc3Bv
bnNlKFJlc3BvbnNlKTsKKworZmFpbDU6CisgICAgRXJyb3IoImZhaWw1XG4iKTsKKworZmFpbDQ6
CisgICAgRXJyb3IoImZhaWw0XG4iKTsKKworZmFpbDM6CisgICAgRXJyb3IoImZhaWwzXG4iKTsK
KyAgICBfX1N0b3JlRnJlZShQYXRoKTsKKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0
LCBzaXplb2YoWEVOQlVTX1NUT1JFX1JFUVVFU1QpKSk7CisKK2ZhaWwyOgorICAgIEVycm9yKCJm
YWlsMlxuIik7CisgICAgX19TdG9yZUZyZWUoUGVybWlzc2lvblN0cmluZyk7CisKK2ZhaWwxOgor
ICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7CisgICAgcmV0dXJuIHN0YXR1czsK
K30KKwogc3RhdGljCiBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpCiBfSVJRTF9y
ZXF1aXJlc18oSElHSF9MRVZFTCkKQEAgLTIzMjcsNiArMjQ3NiwyMyBAQCBzdGF0aWMgc3RydWN0
IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxIFN0b3JlSW50ZXJmYWNlVmVyc2lvbjEgPSB7CiAg
ICAgU3RvcmVQb2xsCiB9OwogICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyIFN0b3JlSW50ZXJmYWNlVmVyc2lvbjIgPSB7CisgICAg
eyBzaXplb2Yoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyKSwgMiwgTlVMTCwgTlVM
TCwgTlVMTCB9LAorICAgIFN0b3JlQWNxdWlyZSwKKyAgICBTdG9yZVJlbGVhc2UsCisgICAgU3Rv
cmVGcmVlLAorICAgIFN0b3JlUmVhZCwKKyAgICBTdG9yZVByaW50ZiwKKyAgICBTdG9yZVJlbW92
ZSwKKyAgICBTdG9yZURpcmVjdG9yeSwKKyAgICBTdG9yZVRyYW5zYWN0aW9uU3RhcnQsCisgICAg
U3RvcmVUcmFuc2FjdGlvbkVuZCwKKyAgICBTdG9yZVdhdGNoQWRkLAorICAgIFN0b3JlV2F0Y2hS
ZW1vdmUsCisgICAgU3RvcmVQb2xsLAorICAgIFN0b3JlUGVybWlzc2lvbnNTZXQKK307CisKIE5U
U1RBVFVTCiBTdG9yZUluaXRpYWxpemUoCiAgICAgSU4gIFBYRU5CVVNfRkRPICAgICAgICAgICAg
IEZkbywKQEAgLTI0MjYsNiArMjU5MiwyMyBAQCBTdG9yZUdldEludGVyZmFjZSgKICAgICAgICAg
c3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNl
IDI6IHsKKyAgICAgICAgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyICAqU3RvcmVJ
bnRlcmZhY2U7CisKKyAgICAgICAgU3RvcmVJbnRlcmZhY2UgPSAoc3RydWN0IF9YRU5CVVNfU1RP
UkVfSU5URVJGQUNFX1YyICopSW50ZXJmYWNlOworCisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19C
VUZGRVJfT1ZFUkZMT1c7CisgICAgICAgIGlmIChTaXplIDwgc2l6ZW9mKHN0cnVjdCBfWEVOQlVT
X1NUT1JFX0lOVEVSRkFDRV9WMikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAqU3Rv
cmVJbnRlcmZhY2UgPSBTdG9yZUludGVyZmFjZVZlcnNpb24yOworCisgICAgICAgIEFTU0VSVDNV
KEludGVyZmFjZS0+VmVyc2lvbiwgPT0gLCBWZXJzaW9uKTsKKyAgICAgICAgSW50ZXJmYWNlLT5D
b250ZXh0ID0gQ29udGV4dDsKKworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIHN0YXR1cyA9IFNUQVRV
U19OT1RfU1VQUE9SVEVEOwogICAgICAgICBicmVhazsKLS0gCjEuOC4xLm1zeXNnaXQuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZl
bCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:14 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEdK-0000eX-BM; Fri, 11 Sep 2015 03:04:14 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEdI-0000eS-RC
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:13 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	DF/C3-10715-CA442F55; Fri, 11 Sep 2015 03:04:12 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441940650!37323853!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14411 invoked from network); 11 Sep 2015 03:04:10 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:04:10 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 136F4204BA
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:10 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:04:10 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=ix9/+NMlBqS826O5P+bjjCCN1kY=; b=kySvI6
	wKzBp4lcFnub3ebNAgLKDD2Qw0ic1v2e4lNYTnSlvNkiCL6zWGDUtly6hs6O3OEt
	IdMgwhwBwFTqzbBTYHx6H8Sio4vTSt9lrYbHcXhRIn51qFhIn3aNBGtXqOSc18LQ
	vkueaRc+0Rpr9iuoDpxE75ejVPvovwMRqUyfA=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=ix9/+NMlBqS826O5P+bjjCCN1kY=; b=P5JPH
	a6Rgq+UZR1MCrkbcduA1mN9ALLwdWzQb9jUS9Mg0y050YsEvN98lUhZkamgzW+TK
	8V9Z7HkGSCdzura9bqAESrp8VoznhSojeJaJeJ6EZGieVODgm35XF36jh5LJLa8o
	5ATdZX6v5f75xrvSEorIHPz7jCnexPKP2SejfQ=
X-Sasl-enc: T0gvxmoA6wpqHM6s/bRX0f8SWLJa+aaVM1OgnGqu/2/2 1441940649
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id E5DC06800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:08 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F244A6.8050501@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:04:06 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 14707
Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key permissions
 to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

U1RPUkUgaW50ZXJmYWNlIG5vdyBpbmNsdWRlcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSBrZXkgcGVy
bWlzc2lvbnMuIFRoaXMKYWxsb3dzIGdyYW50aW5nIGtleSBhY2Nlc3MgdG8gb3RoZXIsIG5vbi1w
cml2aWxlZ2VkIGRvbWFpbnMuCgpTaWduZWQtb2ZmLWJ5OiBSYWZhxYIgV29qZHnFgmEgPG9tZWdA
aW52aXNpYmxldGhpbmdzbGFiLmNvbT4KLS0tCiBpbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oIHwg
IDY4ICsrKysrKysrKysrKysrKystCiBzcmMveGVuYnVzL3N0b3JlLmMgICAgICAgIHwgMTg1ICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh
bmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvaW5j
bHVkZS9zdG9yZV9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvc3RvcmVfaW50ZXJmYWNlLmgKaW5kZXgg
NWJjYmJhMy4uNjc3NWIyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zdG9yZV9pbnRlcmZhY2UuaAor
KysgYi9pbmNsdWRlL3N0b3JlX2ludGVyZmFjZS5oCkBAIC01MCw2ICs1MCwyMyBAQCB0eXBlZGVm
IHN0cnVjdCBfWEVOQlVTX1NUT1JFX1RSQU5TQUNUSU9OICAgIFhFTkJVU19TVE9SRV9UUkFOU0FD
VElPTiwgKlBYRU5CVVNfUwogKi8KIHR5cGVkZWYgc3RydWN0IF9YRU5CVVNfU1RPUkVfV0FUQ0gg
ICAgICAgICAgWEVOQlVTX1NUT1JFX1dBVENILCAqUFhFTkJVU19TVE9SRV9XQVRDSDsKIAorLyoh
IFx0eXBlZGVmIFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OX01BU0sKKyAgICBcYnJpZWYgQml0bWFz
ayBvZiBYZW5TdG9yZSBrZXkgcGVybWlzc2lvbnMKKyovCit0eXBlZGVmIGVudW0gX1hFTkJVU19T
VE9SRV9QRVJNSVNTSU9OX01BU0sgeworICAgIFhFTkJVU19TVE9SRV9QRVJNX05PTkUgPSAwLAor
ICAgIFhFTkJVU19TVE9SRV9QRVJNX1JFQUQgPSAxLAorICAgIFhFTkJVU19TVE9SRV9QRVJNX1dS
SVRFID0gMiwKK30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT05fTUFTSzsKKworLyohIFx0eXBlZGVm
IFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OCisgICAgXGJyaWVmIFhlblN0b3JlIGtleSBwZXJtaXNz
aW9ucyBlbnRyeSBmb3IgYSBzaW5nbGUgZG9tYWluCisqLwordHlwZWRlZiBzdHJ1Y3QgX1hFTkJV
U19TVE9SRV9QRVJNSVNTSU9OIHsKKyAgICBVU0hPUlQgRG9tYWluOworICAgIFhFTkJVU19TVE9S
RV9QRVJNSVNTSU9OX01BU0sgTWFzazsKK30gWEVOQlVTX1NUT1JFX1BFUk1JU1NJT04sICpQWEVO
QlVTX1NUT1JFX1BFUk1JU1NJT047CisKIC8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfQUNRVUlS
RQogICAgIFxicmllZiBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIHRoZSBTVE9SRSBpbnRlcmZhY2UK
IApAQCAtMjQ3LDEwICsyNjQsMzYgQEAgdHlwZWRlZiBWT0lECiAgICAgSU4gIFBJTlRFUkZBQ0Ug
IEludGVyZmFjZQogICAgICk7CiAKKy8qISBcdHlwZWRlZiBYRU5CVVNfU1RPUkVfUEVSTUlTU0lP
TlNfU0VUCisgICAgXGJyaWVmIFNldCBwZXJtaXNzaW9ucyBmb3IgYSBYZW5TdG9yZSBrZXkKKwor
ICAgIFxwYXJhbSBJbnRlcmZhY2UgVGhlIGludGVyZmFjZSBoZWFkZXIKKyAgICBccGFyYW0gVHJh
bnNhY3Rpb24gVGhlIHRyYW5zYWN0aW9uIGhhbmRsZSAoTlVMTCBpZiB0aGlzIGlzIG5vdAorICAg
IHBhcnQgb2YgYSB0cmFuc2FjdGlvbikKKyAgICBccGFyYW0gUHJlZml4IEFuIG9wdGlvbmFsIHBy
ZWZpeCBmb3IgdGhlIFxhIE5vZGUKKyAgICBccGFyYW0gTm9kZSBUaGUgY29uY2F0ZW5hdGlvbiBv
ZiB0aGUgXGEgUHJlZml4IGFuZCB0aGlzIHZhbHVlIHNwZWNpZmllcworICAgIHRoZSBYZW5TdG9y
ZSBrZXkgdG8gc2V0IHBlcm1pc3Npb25zIG9mCisgICAgXHBhcmFtIFBlcm1pc3Npb25zIEFuIGFy
cmF5IG9mIHBlcm1pc3Npb25zIHRvIHNldAorICAgIFxwYXJhbSBOdW1iZXJQZXJtaXNzaW9ucyBO
dW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFxhIFBlcm1pc3Npb25zIGFycmF5CisqLwordHlwZWRl
ZiBOVFNUQVRVUworKCpYRU5CVVNfU1RPUkVfUEVSTUlTU0lPTlNfU0VUKSgKKyAgICBJTiAgUElO
VEVSRkFDRSAgICAgICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUFhFTkJVU19TVE9S
RV9UUkFOU0FDVElPTiAgIFRyYW5zYWN0aW9uIE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAg
ICAgICAgICAgICAgICAgICAgUHJlZml4IE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAg
ICAgICAgICAgICAgICAgTm9kZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAg
IFBlcm1pc3Npb25zLAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVy
UGVybWlzc2lvbnMKKyAgICApOworCiAvLyB7ODY4MjRDM0ItRDM0RS00NzUzLUIyODEtMkYxRTNB
RDIxNEQ3fQogREVGSU5FX0dVSUQoR1VJRF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFLCAKIDB4ODY4
MjRjM2IsIDB4ZDM0ZSwgMHg0NzUzLCAweGIyLCAweDgxLCAweDJmLCAweDFlLCAweDNhLCAweGQy
LCAweDE0LCAweGQ3KTsKIAorLyohIFxzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEK
KyAgICBcYnJpZWYgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24gMQorICAgIFxpbmdyb3VwIGludGVy
ZmFjZXMKKyovCiBzdHJ1Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgewogICAgIElOVEVS
RkFDRSAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlOwogICAgIFhFTkJVU19TVE9SRV9B
Q1FVSVJFICAgICAgICAgICAgU3RvcmVBY3F1aXJlOwpAQCAtMjY3LDExICszMTAsMjggQEAgc3Ry
dWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxIHsKICAgICBYRU5CVVNfU1RPUkVfUE9MTCAg
ICAgICAgICAgICAgIFN0b3JlUG9sbDsKIH07CiAKLS8qISBcc3RydWN0IF9YRU5CVVNfU1RPUkVf
SU5URVJGQUNFX1YxCi0gICAgXGJyaWVmIFNUT1JFIGludGVyZmFjZSB2ZXJzaW9uIDEKKy8qISBc
c3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyCisgICAgXGJyaWVmIFNUT1JFIGludGVy
ZmFjZSB2ZXJzaW9uIDIKICAgICBcaW5ncm91cCBpbnRlcmZhY2VzCiAqLwotdHlwZWRlZiBzdHJ1
Y3QgX1hFTkJVU19TVE9SRV9JTlRFUkZBQ0VfVjEgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRSwgKlBY
RU5CVVNfU1RPUkVfSU5URVJGQUNFOworc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1Yy
IHsKKyAgICBJTlRFUkZBQ0UgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZTsKKyAgICBY
RU5CVVNfU1RPUkVfQUNRVUlSRSAgICAgICAgICAgIFN0b3JlQWNxdWlyZTsKKyAgICBYRU5CVVNf
U1RPUkVfUkVMRUFTRSAgICAgICAgICAgIFN0b3JlUmVsZWFzZTsKKyAgICBYRU5CVVNfU1RPUkVf
RlJFRSAgICAgICAgICAgICAgIFN0b3JlRnJlZTsKKyAgICBYRU5CVVNfU1RPUkVfUkVBRCAgICAg
ICAgICAgICAgIFN0b3JlUmVhZDsKKyAgICBYRU5CVVNfU1RPUkVfUFJJTlRGICAgICAgICAgICAg
IFN0b3JlUHJpbnRmOworICAgIFhFTkJVU19TVE9SRV9SRU1PVkUgICAgICAgICAgICAgU3RvcmVS
ZW1vdmU7CisgICAgWEVOQlVTX1NUT1JFX0RJUkVDVE9SWSAgICAgICAgICBTdG9yZURpcmVjdG9y
eTsKKyAgICBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT05fU1RBUlQgIFN0b3JlVHJhbnNhY3Rpb25T
dGFydDsKKyAgICBYRU5CVVNfU1RPUkVfVFJBTlNBQ1RJT05fRU5EICAgIFN0b3JlVHJhbnNhY3Rp
b25FbmQ7CisgICAgWEVOQlVTX1NUT1JFX1dBVENIX0FERCAgICAgICAgICBTdG9yZVdhdGNoQWRk
OworICAgIFhFTkJVU19TVE9SRV9XQVRDSF9SRU1PVkUgICAgICAgU3RvcmVXYXRjaFJlbW92ZTsK
KyAgICBYRU5CVVNfU1RPUkVfUE9MTCAgICAgICAgICAgICAgIFN0b3JlUG9sbDsKKyAgICBYRU5C
VVNfU1RPUkVfUEVSTUlTU0lPTlNfU0VUICAgIFN0b3JlUGVybWlzc2lvbnNTZXQ7Cit9OworCit0
eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMiBYRU5CVVNfU1RPUkVfSU5U
RVJGQUNFLCAqUFhFTkJVU19TVE9SRV9JTlRFUkZBQ0U7CiAKIC8qISBcZGVmIFhFTkJVU19TVE9S
RQogICAgIFxicmllZiBNYWNybyBhdCBhc3Npc3QgaW4gbWV0aG9kIGludm9jYXRpb24KQEAgLTI4
Miw3ICszNDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBfWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WMSBY
RU5CVVNfU1RPUkVfSU5URVJGQUNFLCAqUFhFTkJVU19TVE9SRQogI2VuZGlmICAvLyBfV0lORExM
CiAKICNkZWZpbmUgWEVOQlVTX1NUT1JFX0lOVEVSRkFDRV9WRVJTSU9OX01JTiAgMQotI2RlZmlu
ZSBYRU5CVVNfU1RPUkVfSU5URVJGQUNFX1ZFUlNJT05fTUFYICAxCisjZGVmaW5lIFhFTkJVU19T
VE9SRV9JTlRFUkZBQ0VfVkVSU0lPTl9NQVggIDIKIAogI2VuZGlmICAvLyBfWEVOQlVTX1NUT1JF
X0lOVEVSRkFDRV9ICiAKZGlmZiAtLWdpdCBhL3NyYy94ZW5idXMvc3RvcmUuYyBiL3NyYy94ZW5i
dXMvc3RvcmUuYwppbmRleCBjNTRiMGYwLi5jZjVhYzc5IDEwMDY0NAotLS0gYS9zcmMveGVuYnVz
L3N0b3JlLmMKKysrIGIvc3JjL3hlbmJ1cy9zdG9yZS5jCkBAIC00NDIsNyArNDQyLDYgQEAgU3Rv
cmVJZ25vcmVIZWFkZXJUeXBlKAogICAgIGNhc2UgWFNfUkVMRUFTRToKICAgICBjYXNlIFhTX0dF
VF9ET01BSU5fUEFUSDoKICAgICBjYXNlIFhTX01LRElSOgotICAgIGNhc2UgWFNfU0VUX1BFUk1T
OgogICAgIGNhc2UgWFNfSVNfRE9NQUlOX0lOVFJPRFVDRUQ6CiAgICAgY2FzZSBYU19SRVNVTUU6
CiAgICAgY2FzZSBYU19TRVRfVEFSR0VUOgpAQCAtNDcwLDYgKzQ2OSw3IEBAIFN0b3JlVmVyaWZ5
SGVhZGVyKAogICAgICAgICBIZWFkZXItPnR5cGUgIT0gWFNfVFJBTlNBQ1RJT05fRU5EICYmCiAg
ICAgICAgIEhlYWRlci0+dHlwZSAhPSBYU19XUklURSAmJgogICAgICAgICBIZWFkZXItPnR5cGUg
IT0gWFNfUk0gJiYKKyAgICAgICAgSGVhZGVyLT50eXBlICE9IFhTX1NFVF9QRVJNUyAmJgogICAg
ICAgICBIZWFkZXItPnR5cGUgIT0gWFNfV0FUQ0hfRVZFTlQgJiYKICAgICAgICAgSGVhZGVyLT50
eXBlICE9IFhTX0VSUk9SICYmCiAgICAgICAgICFTdG9yZUlnbm9yZUhlYWRlclR5cGUoSGVhZGVy
LT50eXBlKSkgewpAQCAtMTgxNiw2ICsxODE2LDE1NSBAQCBTdG9yZVBvbGwoCiAgICAgS2VSZWxl
YXNlU3BpbkxvY2tGcm9tRHBjTGV2ZWwoJkNvbnRleHQtPkxvY2spOwogfQogCitzdGF0aWMgTlRT
VEFUVVMKK1N0b3JlUGVybWlzc2lvblRvU3RyaW5nKAorICAgIElOICBQWEVOQlVTX1NUT1JFX1BF
Uk1JU1NJT04gICAgUGVybWlzc2lvbiwKKyAgICBPVVQgUENIQVIgICAgICAgICAgICAgICAgICAg
ICAgIEJ1ZmZlciwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclNp
emUsCisgICAgT1VUIFBVTE9ORyAgICAgICAgICAgICAgICAgICAgICBVc2VkU2l6ZQorICAgICkK
K3sKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFpbmluZzsKKyAgICBO
VFNUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRVU19JTlZBTElEX1BB
UkFNRVRFUjsKKworICAgIEFTU0VSVChCdWZmZXJTaXplID4gMSk7CisKKyAgICBzd2l0Y2ggKFBl
cm1pc3Npb24tPk1hc2spIHsKKyAgICBjYXNlIFhFTkJVU19TVE9SRV9QRVJNX05PTkU6CisgICAg
ICAgICpCdWZmZXIgPSAnbic7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWEVOQlVTX1NUT1JF
X1BFUk1fUkVBRDoKKyAgICAgICAgKkJ1ZmZlciA9ICdyJzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBYRU5CVVNfU1RPUkVfUEVSTV9XUklURToKKyAgICAgICAgKkJ1ZmZlciA9ICd3JzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBYRU5CVVNfU1RPUkVfUEVSTV9SRUFEIHwgWEVOQlVTX1NU
T1JFX1BFUk1fV1JJVEU6CisgICAgICAgICpCdWZmZXIgPSAnYic7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfQorCisgICAgc3RhdHVzID0g
UnRsU3RyaW5nQ2JQcmludGZFeEEoQnVmZmVyICsgMSwgQnVmZmVyU2l6ZSAtIDEsIE5VTEwsICZS
ZW1haW5pbmcsIDAsICIldSIsIFBlcm1pc3Npb24tPkRvbWFpbik7CisgICAgaWYgKCFOVF9TVUND
RVNTKHN0YXR1cykpCisgICAgICAgIGdvdG8gZmFpbDI7CisKKyAgICAqVXNlZFNpemUgPSBCdWZm
ZXJTaXplIC0gKFVMT05HKVJlbWFpbmluZyArIDE7CisgICAgcmV0dXJuIFNUQVRVU19TVUNDRVNT
OworCitmYWlsMjoKKyAgICBFcnJvcigiZmFpbDJcbiIpOworCitmYWlsMToKKyAgICBFcnJvcigi
ZmFpbDEgKCUwOHgpXG4iLCBzdGF0dXMpOworICAgIHJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRp
YyBOVFNUQVRVUworU3RvcmVQZXJtaXNzaW9uc1NldCgKKyAgICBJTiAgUElOVEVSRkFDRSAgICAg
ICAgICAgICAgICAgIEludGVyZmFjZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9UUkFOU0FDVElP
TiAgIFRyYW5zYWN0aW9uIE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAg
ICAgICAgUHJlZml4IE9QVElPTkFMLAorICAgIElOICBQQ0hBUiAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSwKKyAgICBJTiAgUFhFTkJVU19TVE9SRV9QRVJNSVNTSU9OICAgIFBlcm1pc3Npb25z
LAorICAgIElOICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyUGVybWlzc2lvbnMK
KyAgICApCit7CisgICAgUFhFTkJVU19TVE9SRV9DT05URVhUICAgICAgICAgICBDb250ZXh0ID0g
SW50ZXJmYWNlLT5Db250ZXh0OworICAgIFhFTkJVU19TVE9SRV9SRVFVRVNUICAgICAgICAgICAg
UmVxdWVzdDsKKyAgICBQWEVOQlVTX1NUT1JFX1JFU1BPTlNFICAgICAgICAgIFJlc3BvbnNlOwor
ICAgIE5UU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIFVMT05HICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXgsIExlbmd0aCwgVXNlZDsKKyAgICBQQ0hBUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGggPSBOVUxMOworICAgIFBDSEFSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGVybWlzc2lvblN0cmluZywgU2VnbWVudDsKKworICAgIHN0YXR1
cyA9IFNUQVRVU19OT19NRU1PUlk7CisgICAgUGVybWlzc2lvblN0cmluZyA9IF9fU3RvcmVBbGxv
Y2F0ZShYRU5TVE9SRV9QQVlMT0FEX01BWCk7CisgICAgaWYgKFBlcm1pc3Npb25TdHJpbmcgPT0g
TlVMTCkKKyAgICAgICAgZ290byBmYWlsMTsKKworICAgIGlmIChQcmVmaXggPT0gTlVMTCkKKyAg
ICAgICAgTGVuZ3RoID0gKFVMT05HKXN0cmxlbihOb2RlKSArIHNpemVvZihDSEFSKTsKKyAgICBl
bHNlCisgICAgICAgIExlbmd0aCA9IChVTE9ORylzdHJsZW4oUHJlZml4KSArIDEgKyAoVUxPTkcp
c3RybGVuKE5vZGUpICsgc2l6ZW9mKENIQVIpOworCisgICAgUGF0aCA9IF9fU3RvcmVBbGxvY2F0
ZShMZW5ndGgpOworCisgICAgaWYgKFBhdGggPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMjsK
KworICAgIHN0YXR1cyA9IChQcmVmaXggPT0gTlVMTCkgPworICAgICAgICBSdGxTdHJpbmdDYlBy
aW50ZkEoUGF0aCwgTGVuZ3RoLCAiJXMiLCBOb2RlKSA6CisgICAgICAgIFJ0bFN0cmluZ0NiUHJp
bnRmQShQYXRoLCBMZW5ndGgsICIlcy8lcyIsIFByZWZpeCwgTm9kZSk7CisgICAgQVNTRVJUKE5U
X1NVQ0NFU1Moc3RhdHVzKSk7CisKKyAgICBSdGxaZXJvTWVtb3J5KCZSZXF1ZXN0LCBzaXplb2Yo
WEVOQlVTX1NUT1JFX1JFUVVFU1QpKTsKKworICAgIGZvciAoSW5kZXggPSAwLCBTZWdtZW50ID0g
UGVybWlzc2lvblN0cmluZywgTGVuZ3RoID0gWEVOU1RPUkVfUEFZTE9BRF9NQVg7CisgICAgICAg
ICBJbmRleCA8IE51bWJlclBlcm1pc3Npb25zOworICAgICAgICAgSW5kZXgrKykgeworICAgICAg
ICBzdGF0dXMgPSBTdG9yZVBlcm1pc3Npb25Ub1N0cmluZygmUGVybWlzc2lvbnNbSW5kZXhdLCBT
ZWdtZW50LCBMZW5ndGgsICZVc2VkKTsKKyAgICAgICAgaWYgKCFOVF9TVUNDRVNTKHN0YXR1cykp
CisgICAgICAgICAgICBnb3RvIGZhaWwzOworCisgICAgICAgIFNlZ21lbnQgKz0gVXNlZDsKKyAg
ICAgICAgTGVuZ3RoIC09IFVzZWQ7CisgICAgfQorCisgICAgc3RhdHVzID0gU3RvcmVQcmVwYXJl
UmVxdWVzdChDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJlcXVl
c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTX1NFVF9QRVJNUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBhdGgsIHN0cmxlbihQYXRoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIiLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGVybWlzc2lvblN0cmluZywgWEVOU1RPUkVfUEFZTE9BRF9NQVggLSBMZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKworICAgIGlmICghTlRfU1VDQ0VT
UyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw0OworCisgICAgc3RhdHVzID0gU1RBVFVTX05P
X01FTU9SWTsKKyAgICBSZXNwb25zZSA9IFN0b3JlU3VibWl0UmVxdWVzdChDb250ZXh0LCAmUmVx
dWVzdCk7CisgICAgaWYgKFJlc3BvbnNlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDU7CisK
KyAgICBzdGF0dXMgPSBTdG9yZUNoZWNrUmVzcG9uc2UoUmVzcG9uc2UpOworICAgIGlmICghTlRf
U1VDQ0VTUyhzdGF0dXMpKQorICAgICAgICBnb3RvIGZhaWw2OworCisgICAgU3RvcmVGcmVlUmVz
cG9uc2UoUmVzcG9uc2UpOworICAgIEFTU0VSVChJc1plcm9NZW1vcnkoJlJlcXVlc3QsIHNpemVv
ZihYRU5CVVNfU1RPUkVfUkVRVUVTVCkpKTsKKworICAgIF9fU3RvcmVGcmVlKFBhdGgpOworICAg
IF9fU3RvcmVGcmVlKFBlcm1pc3Npb25TdHJpbmcpOworCisgICAgcmV0dXJuIFNUQVRVU19TVUND
RVNTOworCitmYWlsNjoKKyAgICBFcnJvcigiZmFpbDZcbiIpOworICAgIFN0b3JlRnJlZVJlc3Bv
bnNlKFJlc3BvbnNlKTsKKworZmFpbDU6CisgICAgRXJyb3IoImZhaWw1XG4iKTsKKworZmFpbDQ6
CisgICAgRXJyb3IoImZhaWw0XG4iKTsKKworZmFpbDM6CisgICAgRXJyb3IoImZhaWwzXG4iKTsK
KyAgICBfX1N0b3JlRnJlZShQYXRoKTsKKyAgICBBU1NFUlQoSXNaZXJvTWVtb3J5KCZSZXF1ZXN0
LCBzaXplb2YoWEVOQlVTX1NUT1JFX1JFUVVFU1QpKSk7CisKK2ZhaWwyOgorICAgIEVycm9yKCJm
YWlsMlxuIik7CisgICAgX19TdG9yZUZyZWUoUGVybWlzc2lvblN0cmluZyk7CisKK2ZhaWwxOgor
ICAgIEVycm9yKCJmYWlsMSAoJTA4eClcbiIsIHN0YXR1cyk7CisgICAgcmV0dXJuIHN0YXR1czsK
K30KKwogc3RhdGljCiBfRnVuY3Rpb25fY2xhc3NfKEtTRVJWSUNFX1JPVVRJTkUpCiBfSVJRTF9y
ZXF1aXJlc18oSElHSF9MRVZFTCkKQEAgLTIzMjcsNiArMjQ3NiwyMyBAQCBzdGF0aWMgc3RydWN0
IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YxIFN0b3JlSW50ZXJmYWNlVmVyc2lvbjEgPSB7CiAg
ICAgU3RvcmVQb2xsCiB9OwogICAgICAgICAgICAgICAgICAgICAgCitzdGF0aWMgc3RydWN0IF9Y
RU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyIFN0b3JlSW50ZXJmYWNlVmVyc2lvbjIgPSB7CisgICAg
eyBzaXplb2Yoc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyKSwgMiwgTlVMTCwgTlVM
TCwgTlVMTCB9LAorICAgIFN0b3JlQWNxdWlyZSwKKyAgICBTdG9yZVJlbGVhc2UsCisgICAgU3Rv
cmVGcmVlLAorICAgIFN0b3JlUmVhZCwKKyAgICBTdG9yZVByaW50ZiwKKyAgICBTdG9yZVJlbW92
ZSwKKyAgICBTdG9yZURpcmVjdG9yeSwKKyAgICBTdG9yZVRyYW5zYWN0aW9uU3RhcnQsCisgICAg
U3RvcmVUcmFuc2FjdGlvbkVuZCwKKyAgICBTdG9yZVdhdGNoQWRkLAorICAgIFN0b3JlV2F0Y2hS
ZW1vdmUsCisgICAgU3RvcmVQb2xsLAorICAgIFN0b3JlUGVybWlzc2lvbnNTZXQKK307CisKIE5U
U1RBVFVTCiBTdG9yZUluaXRpYWxpemUoCiAgICAgSU4gIFBYRU5CVVNfRkRPICAgICAgICAgICAg
IEZkbywKQEAgLTI0MjYsNiArMjU5MiwyMyBAQCBTdG9yZUdldEludGVyZmFjZSgKICAgICAgICAg
c3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNl
IDI6IHsKKyAgICAgICAgc3RydWN0IF9YRU5CVVNfU1RPUkVfSU5URVJGQUNFX1YyICAqU3RvcmVJ
bnRlcmZhY2U7CisKKyAgICAgICAgU3RvcmVJbnRlcmZhY2UgPSAoc3RydWN0IF9YRU5CVVNfU1RP
UkVfSU5URVJGQUNFX1YyICopSW50ZXJmYWNlOworCisgICAgICAgIHN0YXR1cyA9IFNUQVRVU19C
VUZGRVJfT1ZFUkZMT1c7CisgICAgICAgIGlmIChTaXplIDwgc2l6ZW9mKHN0cnVjdCBfWEVOQlVT
X1NUT1JFX0lOVEVSRkFDRV9WMikpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAqU3Rv
cmVJbnRlcmZhY2UgPSBTdG9yZUludGVyZmFjZVZlcnNpb24yOworCisgICAgICAgIEFTU0VSVDNV
KEludGVyZmFjZS0+VmVyc2lvbiwgPT0gLCBWZXJzaW9uKTsKKyAgICAgICAgSW50ZXJmYWNlLT5D
b250ZXh0ID0gQ29udGV4dDsKKworICAgICAgICBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIHN0YXR1cyA9IFNUQVRV
U19OT1RfU1VQUE9SVEVEOwogICAgICAgICBicmVhazsKLS0gCjEuOC4xLm1zeXNnaXQuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZl
bCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEdS-0000fG-DL; Fri, 11 Sep 2015 03:04:22 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEdR-0000f7-Bz
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:21 +0000
Received: from [85.158.137.68] by server-14.bemta-3.messagelabs.com id
	AA/B3-05979-4B442F55; Fri, 11 Sep 2015 03:04:20 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441940659!43413832!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5481 invoked from network); 11 Sep 2015 03:04:20 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:04:20 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 2E077204CB
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:19 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:04:19 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=5P8pb4nJ0QND/jTt0Ht1JHu9+1g=; b=Rhs/ht
	GFQlwxAgGb9OGivvcHiGTkBHOW5YRx24sZ0gF8JNhEt0UgU1ct1ocPGFGXikrr1d
	dl1xSzUkSl8B8k+H7Dfx9wyYwDcfD4EADZIX8EhXY1K6+pJDtsJegg7RfsnHLDHn
	FeoaZSmBbukLFdS4gcN4WKcWTLW+yVjt3sTgE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=5P8pb4nJ0QND/jTt0Ht1JHu9+1g=; b=Sx2p+
	VcI+wpCsX4CESnjI3dSXL/WEFuV9f4tltyP2Qhn3qs4gKG9p7tSrswoORze05Ni9
	SG5KwbCt9NZFNdRWKIQ6XSWkpSgwsfeWVFQKZPSfbFnYC/z89fVFFxMz3SrVzuRS
	nlJ1w/BCqWRTCUscswGWYIX86pAQ5Flq/4mYfM=
X-Sasl-enc: L8EyYyWSxPhktsvahSLgXk/BZ1x1J6EVkDCRWzRgxbth 1441940658
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 8073A6800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:18 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F244AF.5050101@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:04:15 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 1561
Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

UERPIHJldmlzaW9uIDB4MDgwMDAwMEIgaW5jbHVkZXMgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24g
MiAoYWRkZWQKU3RvcmVQZXJtaXNzaW9uc1NldCgpKSBhbmQgR05UVEFCIGludGVyZmFjZSB2ZXJz
aW9uIDIgKGFkZGVkCkdudHRhYk1hcEZvcmVpZ25QYWdlcygpIGFuZCBHbnR0YWJVbm1hcEZvcmVp
Z25QYWdlcygpKS4KClNpZ25lZC1vZmYtYnk6IFJhZmHFgiBXb2pkecWCYSA8b21lZ0BpbnZpc2li
bGV0aGluZ3NsYWIuY29tPgotLS0KIGluY2x1ZGUvcmV2aXNpb24uaCB8IDMgKystCiAxIGZpbGUg
Y2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvaW5j
bHVkZS9yZXZpc2lvbi5oIGIvaW5jbHVkZS9yZXZpc2lvbi5oCmluZGV4IDdmMjYxZmMuLjQ3ZGIw
MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmV2aXNpb24uaAorKysgYi9pbmNsdWRlL3JldmlzaW9u
LmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTiAgIFMg
IFNJICAgRSAgIEQgIFNUICAgUiAgIEMgICBHICAgVSAgRU0KICNkZWZpbmUgREVGSU5FX1JFVklT
SU9OX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgREVGSU5FX1JFVklTSU9OKDB4MDgwMDAwMDksICAxLCAgMiwgIDQsICAxLCAgMSwgIDEs
ICAxLCAgMSwgIDEsICAxKSwgICAgXAotICAgIERFRklORV9SRVZJU0lPTigweDA4MDAwMDBBLCAg
MSwgIDIsICA1LCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSkKKyAgICBERUZJTkVfUkVWSVNJ
T04oMHgwODAwMDAwQSwgIDEsICAyLCAgNSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEpLCAg
ICBcCisgICAgREVGSU5FX1JFVklTSU9OKDB4MDgwMDAwMEIsICAxLCAgMiwgIDUsICAxLCAgMiwg
IDEsICAxLCAgMiwgIDEsICAxKQogCiAjZW5kaWYgIC8vIF9SRVZJU0lPTl9ICi0tIAoxLjguMS5t
c3lzZ2l0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 03:04:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 03:04:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaEdS-0000fG-DL; Fri, 11 Sep 2015 03:04:22 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaEdR-0000f7-Bz
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 03:04:21 +0000
Received: from [85.158.137.68] by server-14.bemta-3.messagelabs.com id
	AA/B3-05979-4B442F55; Fri, 11 Sep 2015 03:04:20 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1441940659!43413832!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5481 invoked from network); 11 Sep 2015 03:04:20 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-5.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 03:04:20 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 2E077204CB
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:19 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Thu, 10 Sep 2015 23:04:19 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=5P8pb4nJ0QND/jTt0Ht1JHu9+1g=; b=Rhs/ht
	GFQlwxAgGb9OGivvcHiGTkBHOW5YRx24sZ0gF8JNhEt0UgU1ct1ocPGFGXikrr1d
	dl1xSzUkSl8B8k+H7Dfx9wyYwDcfD4EADZIX8EhXY1K6+pJDtsJegg7RfsnHLDHn
	FeoaZSmBbukLFdS4gcN4WKcWTLW+yVjt3sTgE=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=5P8pb4nJ0QND/jTt0Ht1JHu9+1g=; b=Sx2p+
	VcI+wpCsX4CESnjI3dSXL/WEFuV9f4tltyP2Qhn3qs4gKG9p7tSrswoORze05Ni9
	SG5KwbCt9NZFNdRWKIQ6XSWkpSgwsfeWVFQKZPSfbFnYC/z89fVFFxMz3SrVzuRS
	nlJ1w/BCqWRTCUscswGWYIX86pAQ5Flq/4mYfM=
X-Sasl-enc: L8EyYyWSxPhktsvahSLgXk/BZ1x1J6EVkDCRWzRgxbth 1441940658
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 8073A6800F0
	for <win-pv-devel@lists.xenproject.org>;
	Thu, 10 Sep 2015 23:04:18 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F244AF.5050101@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 05:04:15 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 1561
Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

UERPIHJldmlzaW9uIDB4MDgwMDAwMEIgaW5jbHVkZXMgU1RPUkUgaW50ZXJmYWNlIHZlcnNpb24g
MiAoYWRkZWQKU3RvcmVQZXJtaXNzaW9uc1NldCgpKSBhbmQgR05UVEFCIGludGVyZmFjZSB2ZXJz
aW9uIDIgKGFkZGVkCkdudHRhYk1hcEZvcmVpZ25QYWdlcygpIGFuZCBHbnR0YWJVbm1hcEZvcmVp
Z25QYWdlcygpKS4KClNpZ25lZC1vZmYtYnk6IFJhZmHFgiBXb2pkecWCYSA8b21lZ0BpbnZpc2li
bGV0aGluZ3NsYWIuY29tPgotLS0KIGluY2x1ZGUvcmV2aXNpb24uaCB8IDMgKystCiAxIGZpbGUg
Y2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvaW5j
bHVkZS9yZXZpc2lvbi5oIGIvaW5jbHVkZS9yZXZpc2lvbi5oCmluZGV4IDdmMjYxZmMuLjQ3ZGIw
MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmV2aXNpb24uaAorKysgYi9pbmNsdWRlL3JldmlzaW9u
LmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTiAgIFMg
IFNJICAgRSAgIEQgIFNUICAgUiAgIEMgICBHICAgVSAgRU0KICNkZWZpbmUgREVGSU5FX1JFVklT
SU9OX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgREVGSU5FX1JFVklTSU9OKDB4MDgwMDAwMDksICAxLCAgMiwgIDQsICAxLCAgMSwgIDEs
ICAxLCAgMSwgIDEsICAxKSwgICAgXAotICAgIERFRklORV9SRVZJU0lPTigweDA4MDAwMDBBLCAg
MSwgIDIsICA1LCAgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSkKKyAgICBERUZJTkVfUkVWSVNJ
T04oMHgwODAwMDAwQSwgIDEsICAyLCAgNSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEpLCAg
ICBcCisgICAgREVGSU5FX1JFVklTSU9OKDB4MDgwMDAwMEIsICAxLCAgMiwgIDUsICAxLCAgMiwg
IDEsICAxLCAgMiwgIDEsICAxKQogCiAjZW5kaWYgIC8vIF9SRVZJU0lPTl9ICi0tIAoxLjguMS5t
c3lzZ2l0LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Xwp3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZv
L3dpbi1wdi1kZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 09:14:26 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 09:14:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaKPZ-0007Do-Gb; Fri, 11 Sep 2015 09:14:25 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaKPY-0007Dj-FV
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 09:14:24 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	09/8A-09570-F6B92F55; Fri, 11 Sep 2015 09:14:23 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441962862!43483283!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1062 invoked from network); 11 Sep 2015 09:14:23 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 09:14:23 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2736368"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: 8.1.0-rc2
Thread-Index: AdDscgoYl5+33S1wTTi2M51RcrDh9w==
Date: Fri, 11 Sep 2015 09:14:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] 8.1.0-rc2
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

All,

We've done another round of testing here in Citrix and things are looking ok so I'm planning to tag all the driver staging-8.1 branches with 8.1.0-rc2 today.

  Paul

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 09:14:26 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 09:14:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaKPZ-0007Do-Gb; Fri, 11 Sep 2015 09:14:25 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaKPY-0007Dj-FV
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 09:14:24 +0000
Received: from [85.158.137.68] by server-4.bemta-3.messagelabs.com id
	09/8A-09570-F6B92F55; Fri, 11 Sep 2015 09:14:23 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441962862!43483283!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1062 invoked from network); 11 Sep 2015 09:14:23 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-11.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 09:14:23 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2736368"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: 8.1.0-rc2
Thread-Index: AdDscgoYl5+33S1wTTi2M51RcrDh9w==
Date: Fri, 11 Sep 2015 09:14:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: [win-pv-devel] 8.1.0-rc2
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

All,

We've done another round of testing here in Citrix and things are looking ok so I'm planning to tag all the driver staging-8.1 branches with 8.1.0-rc2 today.

  Paul

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:10:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:10:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaLHi-0006j3-LQ; Fri, 11 Sep 2015 10:10:22 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaLHh-0006iy-LR
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:10:21 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	C3/59-23203-C88A2F55; Fri, 11 Sep 2015 10:10:20 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441966219!11486796!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13333 invoked from network); 11 Sep 2015 10:10:20 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 10:10:20 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2740692"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: 8.1.0-rc2
Thread-Index: AdDscgoYl5+33S1wTTi2M51RcrDh9wAB+XZw
Date: Fri, 11 Sep 2015 10:10:18 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF288@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] 8.1.0-rc2
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 11 September 2015 10:14
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] 8.1.0-rc2
> 
> All,
> 
> We've done another round of testing here in Citrix and things are looking ok
> so I'm planning to tag all the driver staging-8.1 branches with 8.1.0-rc2 today.
> 

Done. Binaries are also available at http://xenbits.xen.org/pvdrivers/win/8.1.0 

  Paul

>   Paul
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:10:23 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:10:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaLHi-0006j3-LQ; Fri, 11 Sep 2015 10:10:22 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaLHh-0006iy-LR
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:10:21 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	C3/59-23203-C88A2F55; Fri, 11 Sep 2015 10:10:20 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1441966219!11486796!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13333 invoked from network); 11 Sep 2015 10:10:20 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 10:10:20 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2740692"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: 8.1.0-rc2
Thread-Index: AdDscgoYl5+33S1wTTi2M51RcrDh9wAB+XZw
Date: Fri, 11 Sep 2015 10:10:18 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF288@AMSPEX01CL01.citrite.net>
References: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF163@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] 8.1.0-rc2
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Paul Durrant
> Sent: 11 September 2015 10:14
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] 8.1.0-rc2
> 
> All,
> 
> We've done another round of testing here in Citrix and things are looking ok
> so I'm planning to tag all the driver staging-8.1 branches with 8.1.0-rc2 today.
> 

Done. Binaries are also available at http://xenbits.xen.org/pvdrivers/win/8.1.0 

  Paul

>   Paul
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:33:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:33:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaLe3-0000RH-Qp; Fri, 11 Sep 2015 10:33:27 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaLe2-0000RC-4S
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:33:26 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	C4/95-19110-5FDA2F55; Fri, 11 Sep 2015 10:33:25 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441967604!48896714!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9190 invoked from network); 11 Sep 2015 10:33:24 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 10:33:24 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2742408"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ7D6FNtY/cZ4AXUWC0rCUvYJP4p43IOxw
Date: Fri, 11 Sep 2015 10:33:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
References: <55F24487.4090504@invisiblethingslab.com>
In-Reply-To: <55F24487.4090504@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 04:04
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting XenStore key permissions.

How did you send the patches? To avoid problems with Citrix's exchange server mangling mails I normally download patches via gmane. However yours appear to be encoded, e.g.:

http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw

Any chance you could send them in the clear?

  Paul

> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:33:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:33:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaLe3-0000RH-Qp; Fri, 11 Sep 2015 10:33:27 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaLe2-0000RC-4S
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:33:26 +0000
Received: from [193.109.254.147] by server-8.bemta-14.messagelabs.com id
	C4/95-19110-5FDA2F55; Fri, 11 Sep 2015 10:33:25 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-12.tower-27.messagelabs.com!1441967604!48896714!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 9190 invoked from network); 11 Sep 2015 10:33:24 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 10:33:24 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2742408"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ7D6FNtY/cZ4AXUWC0rCUvYJP4p43IOxw
Date: Fri, 11 Sep 2015 10:33:16 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
References: <55F24487.4090504@invisiblethingslab.com>
In-Reply-To: <55F24487.4090504@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 04:04
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting XenStore key permissions.

How did you send the patches? To avoid problems with Citrix's exchange server mangling mails I normally download patches via gmane. However yours appear to be encoded, e.g.:

http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw

Any chance you could send them in the clear?

  Paul

> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:59:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:59:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaM3h-0003wz-Pm; Fri, 11 Sep 2015 10:59:57 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaM3g-0003wt-HF
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:59:56 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	52/D6-06021-B24B2F55; Fri, 11 Sep 2015 10:59:55 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441969194!43476844!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17504 invoked from network); 11 Sep 2015 10:59:55 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-10.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 10:59:55 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 2E5F12033E
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 06:59:54 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 06:59:54 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=w2MAo4z+8B33RHds
	758XEH/c68c=; b=W+1Yy0T4OMMUDtuMLeGy6N/9CRqI6aQuRwhLjjK41mMV9O7s
	ZFdJHc16yaWwmZam+bNaDRJo4xmCxEYkwlR/hNCX6vDF1CiEGAxtRyZG1EY4qQJy
	Nyimo+eTm/HuVOpaumWOLTd9xJEgGgY1i0kIwmhQawAtMTeHaXaI6Rzaur0=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=w2MAo4z+8B33RHd
	s758XEH/c68c=; b=ZSqbYto9u7rKB0s0H4hsAQmzgAskQffWEUsngUCLju8tKUy
	zrJjBaolxgZyWn0GeDxqEtbnX9SFqdfJ0k/Dt4eZnGK0/3qVGEmk9MfAO+FlC9UI
	bdZeEeNVhdHbcUgEqZyB359KTRDKZRBijgJ2qv/7Kx1Mucti7+G7ijT3jDgA=
X-Sasl-enc: gBMEZzJV4Ipzt2IRMC3pKk/BxJnv84zqFDmAXPUdifho 1441969193
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 9182FC0001B;
	Fri, 11 Sep 2015 06:59:53 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B427.8080301@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 12:59:51 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
Content-Length: 1234
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 12:33, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 11 September 2015 04:04
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvch=
an
>> implementation
>>
>> This patch series adds some missing XENBUS APIs that are needed for full
>> libvchan implementation on Windows, namely mapping foreign memory
>> pages
>> and setting XenStore key permissions.
> =

> How did you send the patches? To avoid problems with Citrix's exchange se=
rver mangling mails I normally download patches via gmane. However yours ap=
pear to be encoded, e.g.:
> =

> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
> =

> Any chance you could send them in the clear?
> =

>   Paul
> =

That's weird, I didn't specify any encoding. I'll check what's up ASAP.

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 10:59:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 10:59:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaM3h-0003wz-Pm; Fri, 11 Sep 2015 10:59:57 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaM3g-0003wt-HF
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 10:59:56 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	52/D6-06021-B24B2F55; Fri, 11 Sep 2015 10:59:55 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1441969194!43476844!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 17504 invoked from network); 11 Sep 2015 10:59:55 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-10.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 10:59:55 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 2E5F12033E
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 06:59:54 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 06:59:54 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=w2MAo4z+8B33RHds
	758XEH/c68c=; b=W+1Yy0T4OMMUDtuMLeGy6N/9CRqI6aQuRwhLjjK41mMV9O7s
	ZFdJHc16yaWwmZam+bNaDRJo4xmCxEYkwlR/hNCX6vDF1CiEGAxtRyZG1EY4qQJy
	Nyimo+eTm/HuVOpaumWOLTd9xJEgGgY1i0kIwmhQawAtMTeHaXaI6Rzaur0=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=w2MAo4z+8B33RHd
	s758XEH/c68c=; b=ZSqbYto9u7rKB0s0H4hsAQmzgAskQffWEUsngUCLju8tKUy
	zrJjBaolxgZyWn0GeDxqEtbnX9SFqdfJ0k/Dt4eZnGK0/3qVGEmk9MfAO+FlC9UI
	bdZeEeNVhdHbcUgEqZyB359KTRDKZRBijgJ2qv/7Kx1Mucti7+G7ijT3jDgA=
X-Sasl-enc: gBMEZzJV4Ipzt2IRMC3pKk/BxJnv84zqFDmAXPUdifho 1441969193
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 9182FC0001B;
	Fri, 11 Sep 2015 06:59:53 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B427.8080301@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 12:59:51 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
Content-Length: 1234
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 12:33, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 11 September 2015 04:04
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvch=
an
>> implementation
>>
>> This patch series adds some missing XENBUS APIs that are needed for full
>> libvchan implementation on Windows, namely mapping foreign memory
>> pages
>> and setting XenStore key permissions.
> =

> How did you send the patches? To avoid problems with Citrix's exchange se=
rver mangling mails I normally download patches via gmane. However yours ap=
pear to be encoded, e.g.:
> =

> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
> =

> Any chance you could send them in the clear?
> =

>   Paul
> =

That's weird, I didn't specify any encoding. I'll check what's up ASAP.

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:15:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:15:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMIq-0005JT-1q; Fri, 11 Sep 2015 11:15:36 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaMIp-0005JN-Ej
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:15:35 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	99/CE-01753-6D7B2F55; Fri, 11 Sep 2015 11:15:34 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441970132!43532020!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11041 invoked from network); 11 Sep 2015 11:15:33 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-11.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 11:15:33 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 3381F2092C
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:15:32 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 07:15:32 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=6wll/6qWhv2GZu+Ly17kMk1Zv1w=; b=oZ1tRE
	Y4s0s9TY6Me/x+O8NYMlEb9QzRbCKbi58u16Tot1KH7D83yMzdvhhbF22B8AoN3W
	Nzunmz6hNlKdn6BtxQkX4Wp4ccRSUljt1b4tL2TO8qP7675XxSzJrLOGuMTxtkRC
	Tu3klT97Hy3dsAO+ya2a81weuSyLgQvDXcPaQ=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=6wll/6qWhv2GZu+Ly17kMk1Zv1w=; b=nwRYN
	1U/tc9MPeo++yYtLi9wRC532t2XDmvVM/Ic8zWK3Psyptx1037S0kqzwG4gme9HC
	3g2ZnDDNPkOFy5/riRYGFQH9RfPlaHvnUnboaCO1lUILeV6Yvj9QgcZe8P3aET3J
	VGzy3tKwR8bz2OwrBZYiixMwJpl2za+hJ13V8I=
X-Sasl-enc: Q3+XzfxhH7UUmhc4FSR3P2SfNhrMUc4mXpZxxkIqEVq6 1441970131
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 6924EC00285
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:15:31 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B7D1.80301@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 13:15:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

GNTTAB interface now includes functions to map and unmap memory pages
granted by a foreign domain. The page(s) are mapped under an address
allocated from the PCI BAR space.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/gnttab_interface.h |  54 ++++++++++++++-
 include/xen.h              |  19 ++++++
 src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
 src/xenbus/gnttab.c        | 165 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 352 insertions(+), 2 deletions(-)

diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index d29440a..b0f4adf 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -163,6 +163,39 @@ typedef VOID
     IN  PXENBUS_GNTTAB_CACHE    Cache
     );
 
+/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
+    \brief Map foreign memory pages into the system address space
+
+    \param Interface The interface header
+    \param Domain The domid of the foreign domain that granted the pages
+    \param NumberPages Number of pages to map
+    \param References Array of grant reference numbers shared by the foreign domain
+    \param ReadOnly If TRUE, pages are mapped with read-only access
+    \param Address The physical address that the foreign pages are mapped under
+*/
+
+typedef NTSTATUS
+(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    );
+
+/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
+    \brief Unmap foreign memory pages from the system address space
+
+    \param Interface The interface header
+    \param Address The physical address that the foreign pages are mapped under
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
 DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE, 
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
@@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
     XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
 };
 
-typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
+    \brief GNTTAB interface version 2
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V2 {
+    INTERFACE                           Interface;
+    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE               GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+};
+
+typedef struct _XENBUS_GNTTAB_INTERFACE_V2 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
 
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
 
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
 
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
 
diff --git a/include/xen.h b/include/xen.h
index 6007582..23c7ac0 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -258,6 +258,25 @@ GrantTableCopy(
     IN  ULONG               Count
     );
 
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    );
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                   Handle,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // SCHED
 
 __checkReturn
diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
index 6facb3f..6b00f65 100644
--- a/src/xen/grant_table.c
+++ b/src/xen/grant_table.c
@@ -38,6 +38,35 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+#pragma warning(disable:4127)   // conditional expression is constant
+
+// Most of the GNTST_* values don't have meaningful NTSTATUS counterparts,
+// this macro translates those that do.
+#define GNTST_TO_STATUS(_gntst, _status)                    \
+        do {                                                \
+            switch (_gntst) {                               \
+            case GNTST_okay:                                \
+                _status = STATUS_SUCCESS;                   \
+                break;                                      \
+                                                            \
+            case GNTST_bad_handle:                          \
+                _status = STATUS_INVALID_HANDLE;            \
+                break;                                      \
+                                                            \
+            case GNTST_permission_denied:                   \
+                _status = STATUS_ACCESS_DENIED;             \
+                break;                                      \
+                                                            \
+            case GNTST_eagain:                              \
+                _status = STATUS_RETRY;                     \
+                break;                                      \
+                                                            \
+            default:                                        \
+                _status = STATUS_UNSUCCESSFUL;              \
+                break;                                      \
+            }                                               \
+        } while (FALSE)
+
 static LONG_PTR
 GrantTableOp(
     IN  ULONG   Command,
@@ -131,3 +160,90 @@ fail1:
 
     return status;
 }
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    )
+{
+    struct gnttab_map_grant_ref op;
+    LONG_PTR                    rc;
+    NTSTATUS                    status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.dom = Domain;
+    op.ref = GrantRef;
+    op.flags = GNTMAP_host_map;
+    if (ReadOnly)
+        op.flags |= GNTMAP_readonly;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    *Handle = op.handle;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                     Handle,
+    IN  PHYSICAL_ADDRESS          Address
+    )
+{
+    struct gnttab_unmap_grant_ref op;
+    LONG_PTR                      rc;
+    NTSTATUS                      status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.handle = Handle;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
index 165e38f..32b43c7 100644
--- a/src/xenbus/gnttab.c
+++ b/src/xenbus/gnttab.c
@@ -40,6 +40,7 @@
 #include "dbg_print.h"
 #include "assert.h"
 #include "util.h"
+#include "hash_table.h"
 
 #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
 #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof (grant_entry_v1_t))
@@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
     grant_entry_v1_t    Entry;
 };
 
+typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
+    ULONG               NumberPages;
+    ULONG               MapHandles[1];
+} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
+
 struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_FDO                 Fdo;
     KSPIN_LOCK                  Lock;
@@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
     XENBUS_DEBUG_INTERFACE      DebugInterface;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
+    PXENBUS_HASH_TABLE          MapTable;
     LIST_ENTRY                  List;
 };
 
@@ -534,6 +541,124 @@ GnttabGetReference(
     return (ULONG)Entry->Reference;
 }
 
+static NTSTATUS
+GnttabMapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    )
+{
+    NTSTATUS                    status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE, Address);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_INSUFFICIENT_RESOURCES;
+    MapEntry = __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY, MapHandles) + NumberPages*sizeof(ULONG));
+    if (!MapEntry)
+        goto fail2;
+
+    PageAddress.QuadPart = Address->QuadPart;
+    MapEntry->NumberPages = NumberPages;
+
+    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
+        status = GrantTableMapForeignPage(Domain,
+                                          References[PageIndex],
+                                          PageAddress,
+                                          ReadOnly,
+                                          &MapEntry->MapHandles[PageIndex]);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    status = HashTableAdd(Context->MapTable,
+                          Address->QuadPart,
+                          (ULONG_PTR)MapEntry);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+    while (PageIndex > 0) {
+        --PageIndex;
+        PageAddress.QuadPart -= PAGE_SIZE;
+        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress)));
+    }
+
+    __GnttabFree(MapEntry);
+
+fail2:
+    Error("fail2\n");
+    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
+
+fail1:
+    Error("fail1: (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+GnttabUnmapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    )
+{
+    NTSTATUS                    Status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    Status = HashTableLookup(Context->MapTable, Address.QuadPart, (PULONG_PTR)&MapEntry);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    Status = HashTableRemove(Context->MapTable, Address.QuadPart);
+    if (!NT_SUCCESS(Status))
+        goto fail2;
+
+    PageAddress.QuadPart = Address.QuadPart;
+
+    for (PageIndex = 0; PageIndex < MapEntry->NumberPages; PageIndex++) {
+        Status = GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress);
+        if (!NT_SUCCESS(Status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages * PAGE_SIZE);
+    __GnttabFree(MapEntry);
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+    KeBugCheckEx(MEMORY_MANAGEMENT, XENBUS_GNTTAB_TAG, PageAddress.QuadPart, MapEntry->MapHandles[PageIndex], Address.QuadPart);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1: (%08x)\n", Status);
+    return Status;
+}
+
 static VOID
 GnttabSuspendCallbackEarly(
     IN  PVOID               Argument
@@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1   GnttabInterfaceVersion1 = {
     GnttabDestroyCache
 };
                      
+static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
+    GnttabRevokeForeignAccess,
+    GnttabGetReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
 NTSTATUS
 GnttabInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -836,12 +974,19 @@ GnttabInitialize(
     InitializeListHead(&(*Context)->List);
     KeInitializeSpinLock(&(*Context)->Lock);
 
+    status = HashTableCreate(&(*Context)->MapTable);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -878,6 +1023,23 @@ GnttabGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
+
+        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
+            break;
+
+        *GnttabInterface = GnttabInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
@@ -895,6 +1057,9 @@ GnttabTeardown(
 
     Context->Fdo = NULL;
 
+    HashTableDestroy(Context->MapTable);
+    Context->MapTable = NULL;
+
     RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
     RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
 
-- 
1.8.1.msysgit.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:15:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:15:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMIq-0005JT-1q; Fri, 11 Sep 2015 11:15:36 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaMIp-0005JN-Ej
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:15:35 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	99/CE-01753-6D7B2F55; Fri, 11 Sep 2015 11:15:34 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-11.tower-31.messagelabs.com!1441970132!43532020!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11041 invoked from network); 11 Sep 2015 11:15:33 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-11.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 11:15:33 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 3381F2092C
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:15:32 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 07:15:32 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=6wll/6qWhv2GZu+Ly17kMk1Zv1w=; b=oZ1tRE
	Y4s0s9TY6Me/x+O8NYMlEb9QzRbCKbi58u16Tot1KH7D83yMzdvhhbF22B8AoN3W
	Nzunmz6hNlKdn6BtxQkX4Wp4ccRSUljt1b4tL2TO8qP7675XxSzJrLOGuMTxtkRC
	Tu3klT97Hy3dsAO+ya2a81weuSyLgQvDXcPaQ=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=6wll/6qWhv2GZu+Ly17kMk1Zv1w=; b=nwRYN
	1U/tc9MPeo++yYtLi9wRC532t2XDmvVM/Ic8zWK3Psyptx1037S0kqzwG4gme9HC
	3g2ZnDDNPkOFy5/riRYGFQH9RfPlaHvnUnboaCO1lUILeV6Yvj9QgcZe8P3aET3J
	VGzy3tKwR8bz2OwrBZYiixMwJpl2za+hJ13V8I=
X-Sasl-enc: Q3+XzfxhH7UUmhc4FSR3P2SfNhrMUc4mXpZxxkIqEVq6 1441970131
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 6924EC00285
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:15:31 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B7D1.80301@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 13:15:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

GNTTAB interface now includes functions to map and unmap memory pages
granted by a foreign domain. The page(s) are mapped under an address
allocated from the PCI BAR space.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/gnttab_interface.h |  54 ++++++++++++++-
 include/xen.h              |  19 ++++++
 src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
 src/xenbus/gnttab.c        | 165 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 352 insertions(+), 2 deletions(-)

diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index d29440a..b0f4adf 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -163,6 +163,39 @@ typedef VOID
     IN  PXENBUS_GNTTAB_CACHE    Cache
     );
 
+/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
+    \brief Map foreign memory pages into the system address space
+
+    \param Interface The interface header
+    \param Domain The domid of the foreign domain that granted the pages
+    \param NumberPages Number of pages to map
+    \param References Array of grant reference numbers shared by the foreign domain
+    \param ReadOnly If TRUE, pages are mapped with read-only access
+    \param Address The physical address that the foreign pages are mapped under
+*/
+
+typedef NTSTATUS
+(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    );
+
+/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
+    \brief Unmap foreign memory pages from the system address space
+
+    \param Interface The interface header
+    \param Address The physical address that the foreign pages are mapped under
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
 DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE, 
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
@@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
     XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
 };
 
-typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
+    \brief GNTTAB interface version 2
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V2 {
+    INTERFACE                           Interface;
+    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE               GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+};
+
+typedef struct _XENBUS_GNTTAB_INTERFACE_V2 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
 
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
 
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
 
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
 
diff --git a/include/xen.h b/include/xen.h
index 6007582..23c7ac0 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -258,6 +258,25 @@ GrantTableCopy(
     IN  ULONG               Count
     );
 
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    );
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                   Handle,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // SCHED
 
 __checkReturn
diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
index 6facb3f..6b00f65 100644
--- a/src/xen/grant_table.c
+++ b/src/xen/grant_table.c
@@ -38,6 +38,35 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+#pragma warning(disable:4127)   // conditional expression is constant
+
+// Most of the GNTST_* values don't have meaningful NTSTATUS counterparts,
+// this macro translates those that do.
+#define GNTST_TO_STATUS(_gntst, _status)                    \
+        do {                                                \
+            switch (_gntst) {                               \
+            case GNTST_okay:                                \
+                _status = STATUS_SUCCESS;                   \
+                break;                                      \
+                                                            \
+            case GNTST_bad_handle:                          \
+                _status = STATUS_INVALID_HANDLE;            \
+                break;                                      \
+                                                            \
+            case GNTST_permission_denied:                   \
+                _status = STATUS_ACCESS_DENIED;             \
+                break;                                      \
+                                                            \
+            case GNTST_eagain:                              \
+                _status = STATUS_RETRY;                     \
+                break;                                      \
+                                                            \
+            default:                                        \
+                _status = STATUS_UNSUCCESSFUL;              \
+                break;                                      \
+            }                                               \
+        } while (FALSE)
+
 static LONG_PTR
 GrantTableOp(
     IN  ULONG   Command,
@@ -131,3 +160,90 @@ fail1:
 
     return status;
 }
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    )
+{
+    struct gnttab_map_grant_ref op;
+    LONG_PTR                    rc;
+    NTSTATUS                    status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.dom = Domain;
+    op.ref = GrantRef;
+    op.flags = GNTMAP_host_map;
+    if (ReadOnly)
+        op.flags |= GNTMAP_readonly;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    *Handle = op.handle;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                     Handle,
+    IN  PHYSICAL_ADDRESS          Address
+    )
+{
+    struct gnttab_unmap_grant_ref op;
+    LONG_PTR                      rc;
+    NTSTATUS                      status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.handle = Handle;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
index 165e38f..32b43c7 100644
--- a/src/xenbus/gnttab.c
+++ b/src/xenbus/gnttab.c
@@ -40,6 +40,7 @@
 #include "dbg_print.h"
 #include "assert.h"
 #include "util.h"
+#include "hash_table.h"
 
 #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
 #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof (grant_entry_v1_t))
@@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
     grant_entry_v1_t    Entry;
 };
 
+typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
+    ULONG               NumberPages;
+    ULONG               MapHandles[1];
+} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
+
 struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_FDO                 Fdo;
     KSPIN_LOCK                  Lock;
@@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
     XENBUS_DEBUG_INTERFACE      DebugInterface;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
+    PXENBUS_HASH_TABLE          MapTable;
     LIST_ENTRY                  List;
 };
 
@@ -534,6 +541,124 @@ GnttabGetReference(
     return (ULONG)Entry->Reference;
 }
 
+static NTSTATUS
+GnttabMapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    )
+{
+    NTSTATUS                    status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE, Address);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_INSUFFICIENT_RESOURCES;
+    MapEntry = __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY, MapHandles) + NumberPages*sizeof(ULONG));
+    if (!MapEntry)
+        goto fail2;
+
+    PageAddress.QuadPart = Address->QuadPart;
+    MapEntry->NumberPages = NumberPages;
+
+    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
+        status = GrantTableMapForeignPage(Domain,
+                                          References[PageIndex],
+                                          PageAddress,
+                                          ReadOnly,
+                                          &MapEntry->MapHandles[PageIndex]);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    status = HashTableAdd(Context->MapTable,
+                          Address->QuadPart,
+                          (ULONG_PTR)MapEntry);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+    while (PageIndex > 0) {
+        --PageIndex;
+        PageAddress.QuadPart -= PAGE_SIZE;
+        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress)));
+    }
+
+    __GnttabFree(MapEntry);
+
+fail2:
+    Error("fail2\n");
+    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
+
+fail1:
+    Error("fail1: (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+GnttabUnmapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    )
+{
+    NTSTATUS                    Status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    Status = HashTableLookup(Context->MapTable, Address.QuadPart, (PULONG_PTR)&MapEntry);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    Status = HashTableRemove(Context->MapTable, Address.QuadPart);
+    if (!NT_SUCCESS(Status))
+        goto fail2;
+
+    PageAddress.QuadPart = Address.QuadPart;
+
+    for (PageIndex = 0; PageIndex < MapEntry->NumberPages; PageIndex++) {
+        Status = GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress);
+        if (!NT_SUCCESS(Status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages * PAGE_SIZE);
+    __GnttabFree(MapEntry);
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+    KeBugCheckEx(MEMORY_MANAGEMENT, XENBUS_GNTTAB_TAG, PageAddress.QuadPart, MapEntry->MapHandles[PageIndex], Address.QuadPart);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1: (%08x)\n", Status);
+    return Status;
+}
+
 static VOID
 GnttabSuspendCallbackEarly(
     IN  PVOID               Argument
@@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1   GnttabInterfaceVersion1 = {
     GnttabDestroyCache
 };
                      
+static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
+    GnttabRevokeForeignAccess,
+    GnttabGetReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
 NTSTATUS
 GnttabInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -836,12 +974,19 @@ GnttabInitialize(
     InitializeListHead(&(*Context)->List);
     KeInitializeSpinLock(&(*Context)->Lock);
 
+    status = HashTableCreate(&(*Context)->MapTable);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -878,6 +1023,23 @@ GnttabGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
+
+        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
+            break;
+
+        *GnttabInterface = GnttabInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
@@ -895,6 +1057,9 @@ GnttabTeardown(
 
     Context->Fdo = NULL;
 
+    HashTableDestroy(Context->MapTable);
+    Context->MapTable = NULL;
+
     RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
     RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
 
-- 
1.8.1.msysgit.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:21:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:21:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMON-0006KM-KZ; Fri, 11 Sep 2015 11:21:19 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaMOL-0006KH-RL
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:21:17 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	A6/2C-19220-D29B2F55; Fri, 11 Sep 2015 11:21:17 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1441970475!29042142!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21057 invoked from network); 11 Sep 2015 11:21:16 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 11:21:16 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id BCAB520864
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:21:15 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 07:21:15 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=FELaR5vrqf8TnjfQ
	41WHXfBpdug=; b=Es2VQWhrV0JVSNbyi5e1czFrGqx4ZPtaVXmT3hQgAkKujf+h
	ASnPzVNWqctV3sPNunNvvQKT/uKmq1KsjNaYujzl5JDi8EhsYtzTcmSapTwe9YSN
	Sc0fO6eSN84dYF0drg5ZSUjp5muAw2Kz4pxIR7tjJswroJoeD0gGGo0Sj8I=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=FELaR5vrqf8Tnjf
	Q41WHXfBpdug=; b=M4zTV1/ePUSNlC4O9Iqioqhw7MlHQXCobLA2ThztvZMvA7B
	b5op7+eunyN7g+aLOojGqnJCXWp9ZsJjgUKtxesNELBEfzV+59mxZBgXXKZB+FaR
	esfBBycLIbijfXj2ouCy2Elzj6Vxat9RpWs5V9IzwoebI7XyvJAXJW+tWVgM=
X-Sasl-enc: K7Q3sLpPPBWbg8jrF4vZD8BW9+SWDVsut0dYXsPgQ+LP 1441970475
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 3925AC00286;
	Fri, 11 Sep 2015 07:21:15 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
	<55F2B427.8080301@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B929.20507@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 13:21:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F2B427.8080301@invisiblethingslab.com>
Content-Length: 1638
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 12:59, Rafa=B3 Wojdy=B3a wrote:
> On 2015-09-11 12:33, Paul Durrant wrote:
>>> -----Original Message-----
>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>>> Sent: 11 September 2015 04:04
>>> To: win-pv-devel@lists.xenproject.org
>>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvc=
han
>>> implementation
>>>
>>> This patch series adds some missing XENBUS APIs that are needed for full
>>> libvchan implementation on Windows, namely mapping foreign memory
>>> pages
>>> and setting XenStore key permissions.
>>
>> How did you send the patches? To avoid problems with Citrix's exchange s=
erver mangling mails I normally download patches via gmane. However yours a=
ppear to be encoded, e.g.:
>>
>> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
>>
>> Any chance you could send them in the clear?
>>
>>   Paul
>>
> That's weird, I didn't specify any encoding. I'll check what's up ASAP.
> =

It seems that some server (probably gmane's since the raw message on our
list seems clear) mangles messages because there are non-ASCII
characters in the message body (in my name). The mail header correctly
specifies UTF-8 encoding. I can send the patches with my name
"sanitized" unless you have a better idea on how to avoid the mangling :)

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:21:20 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:21:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMON-0006KM-KZ; Fri, 11 Sep 2015 11:21:19 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaMOL-0006KH-RL
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:21:17 +0000
Received: from [85.158.139.211] by server-12.bemta-5.messagelabs.com id
	A6/2C-19220-D29B2F55; Fri, 11 Sep 2015 11:21:17 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1441970475!29042142!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21057 invoked from network); 11 Sep 2015 11:21:16 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 11:21:16 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id BCAB520864
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 07:21:15 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 07:21:15 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=FELaR5vrqf8TnjfQ
	41WHXfBpdug=; b=Es2VQWhrV0JVSNbyi5e1czFrGqx4ZPtaVXmT3hQgAkKujf+h
	ASnPzVNWqctV3sPNunNvvQKT/uKmq1KsjNaYujzl5JDi8EhsYtzTcmSapTwe9YSN
	Sc0fO6eSN84dYF0drg5ZSUjp5muAw2Kz4pxIR7tjJswroJoeD0gGGo0Sj8I=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=FELaR5vrqf8Tnjf
	Q41WHXfBpdug=; b=M4zTV1/ePUSNlC4O9Iqioqhw7MlHQXCobLA2ThztvZMvA7B
	b5op7+eunyN7g+aLOojGqnJCXWp9ZsJjgUKtxesNELBEfzV+59mxZBgXXKZB+FaR
	esfBBycLIbijfXj2ouCy2Elzj6Vxat9RpWs5V9IzwoebI7XyvJAXJW+tWVgM=
X-Sasl-enc: K7Q3sLpPPBWbg8jrF4vZD8BW9+SWDVsut0dYXsPgQ+LP 1441970475
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 3925AC00286;
	Fri, 11 Sep 2015 07:21:15 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
	<55F2B427.8080301@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Message-ID: <55F2B929.20507@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 13:21:13 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F2B427.8080301@invisiblethingslab.com>
Content-Length: 1638
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 12:59, Rafa=B3 Wojdy=B3a wrote:
> On 2015-09-11 12:33, Paul Durrant wrote:
>>> -----Original Message-----
>>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>>> Sent: 11 September 2015 04:04
>>> To: win-pv-devel@lists.xenproject.org
>>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvc=
han
>>> implementation
>>>
>>> This patch series adds some missing XENBUS APIs that are needed for full
>>> libvchan implementation on Windows, namely mapping foreign memory
>>> pages
>>> and setting XenStore key permissions.
>>
>> How did you send the patches? To avoid problems with Citrix's exchange s=
erver mangling mails I normally download patches via gmane. However yours a=
ppear to be encoded, e.g.:
>>
>> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
>>
>> Any chance you could send them in the clear?
>>
>>   Paul
>>
> That's weird, I didn't specify any encoding. I'll check what's up ASAP.
> =

It seems that some server (probably gmane's since the raw message on our
list seems clear) mangles messages because there are non-ASCII
characters in the message body (in my name). The mail header correctly
specifies UTF-8 encoding. I can send the patches with my name
"sanitized" unless you have a better idea on how to avoid the mangling :)

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:53:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:53:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMtl-0001Bs-TH; Fri, 11 Sep 2015 11:53:45 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaMtk-0001Bn-O9
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:53:44 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	CC/FA-23203-8C0C2F55; Fri, 11 Sep 2015 11:53:44 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-31.messagelabs.com!1441972422!41094240!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18980 invoked from network); 11 Sep 2015 11:53:42 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 11:53:42 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2747333"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan implementation
Thread-Index: AQHQ7IECL9RYrlD3zUWeHR+IF9xbuZ43DWWAgAAqDnA=
Date: Fri, 11 Sep 2015 11:53:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF652@AMSPEX01CL01.citrite.net>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
	<55F2B427.8080301@invisiblethingslab.com>
	<55F2B929.20507@invisiblethingslab.com>
In-Reply-To: <55F2B929.20507@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Rafa=B3 Wojdy=B3a [mailto:omeg@invisiblethingslab.com]
> Sent: 11 September 2015 12:21
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan implementation
> =

> On 2015-09-11 12:59, Rafa=B3 Wojdy=B3a wrote:
> > On 2015-09-11 12:33, Paul Durrant wrote:
> >>> -----Original Message-----
> >>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> >>> Sent: 11 September 2015 04:04
> >>> To: win-pv-devel@lists.xenproject.org
> >>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan
> >>> implementation
> >>>
> >>> This patch series adds some missing XENBUS APIs that are needed for
> full
> >>> libvchan implementation on Windows, namely mapping foreign memory
> >>> pages
> >>> and setting XenStore key permissions.
> >>
> >> How did you send the patches? To avoid problems with Citrix's exchange
> server mangling mails I normally download patches via gmane. However
> yours appear to be encoded, e.g.:
> >>
> >> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
> >>
> >> Any chance you could send them in the clear?
> >>
> >>   Paul
> >>
> > That's weird, I didn't specify any encoding. I'll check what's up ASAP.
> >
> It seems that some server (probably gmane's since the raw message on our
> list seems clear) mangles messages because there are non-ASCII
> characters in the message body (in my name). The mail header correctly
> specifies UTF-8 encoding. I can send the patches with my name
> "sanitized" unless you have a better idea on how to avoid the mangling :)

Alas, I think that's the only way. I also find it odd that git send-email w=
ill allow you to force the transfer encoding to base64 but git am seemingly=
 can't handle anything other than plain ascii.

  Paul

> =

> --
> Rafa=B3 Wojdy=B3a
> Qubes Tools for Windows developer
> https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:53:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:53:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMtl-0001Bs-TH; Fri, 11 Sep 2015 11:53:45 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaMtk-0001Bn-O9
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:53:44 +0000
Received: from [85.158.137.68] by server-10.bemta-3.messagelabs.com id
	CC/FA-23203-8C0C2F55; Fri, 11 Sep 2015 11:53:44 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-31.messagelabs.com!1441972422!41094240!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18980 invoked from network); 11 Sep 2015 11:53:42 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 11:53:42 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2747333"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan implementation
Thread-Index: AQHQ7IECL9RYrlD3zUWeHR+IF9xbuZ43DWWAgAAqDnA=
Date: Fri, 11 Sep 2015 11:53:40 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF652@AMSPEX01CL01.citrite.net>
References: <55F24487.4090504@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF420@AMSPEX01CL01.citrite.net>
	<55F2B427.8080301@invisiblethingslab.com>
	<55F2B929.20507@invisiblethingslab.com>
In-Reply-To: <55F2B929.20507@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Rafa=B3 Wojdy=B3a [mailto:omeg@invisiblethingslab.com]
> Sent: 11 September 2015 12:21
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan implementation
> =

> On 2015-09-11 12:59, Rafa=B3 Wojdy=B3a wrote:
> > On 2015-09-11 12:33, Paul Durrant wrote:
> >>> -----Original Message-----
> >>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-
> devel-
> >>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> >>> Sent: 11 September 2015 04:04
> >>> To: win-pv-devel@lists.xenproject.org
> >>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan
> >>> implementation
> >>>
> >>> This patch series adds some missing XENBUS APIs that are needed for
> full
> >>> libvchan implementation on Windows, namely mapping foreign memory
> >>> pages
> >>> and setting XenStore key permissions.
> >>
> >> How did you send the patches? To avoid problems with Citrix's exchange
> server mangling mails I normally download patches via gmane. However
> yours appear to be encoded, e.g.:
> >>
> >> http://article.gmane.org/gmane.comp.emulators.xen.pv.win/714/raw
> >>
> >> Any chance you could send them in the clear?
> >>
> >>   Paul
> >>
> > That's weird, I didn't specify any encoding. I'll check what's up ASAP.
> >
> It seems that some server (probably gmane's since the raw message on our
> list seems clear) mangles messages because there are non-ASCII
> characters in the message body (in my name). The mail header correctly
> specifies UTF-8 encoding. I can send the patches with my name
> "sanitized" unless you have a better idea on how to avoid the mangling :)

Alas, I think that's the only way. I also find it odd that git send-email w=
ill allow you to force the transfer encoding to base64 but git am seemingly=
 can't handle anything other than plain ascii.

  Paul

> =

> --
> Rafa=B3 Wojdy=B3a
> Qubes Tools for Windows developer
> https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:55:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:55:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMvY-0001CY-2G; Fri, 11 Sep 2015 11:55:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaMvX-0001CT-01
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:55:35 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	CC/9A-13905-631C2F55; Fri, 11 Sep 2015 11:55:34 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441972531!18735570!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27615 invoked from network); 11 Sep 2015 11:55:31 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 11:55:31 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2747432"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
	implementation
Thread-Index: AQHQ7IM2W5flftHBxE6fbpFyUO7FL543OGTQ
Date: Fri, 11 Sep 2015 11:55:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF679@AMSPEX01CL01.citrite.net>
References: <55F2B7D1.80301@invisiblethingslab.com>
In-Reply-To: <55F2B7D1.80301@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [TEST] Add XENBUS APIs necessary for
	libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 12:15
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
> implementation
> 
> GNTTAB interface now includes functions to map and unmap memory pages
> granted by a foreign domain. The page(s) are mapped under an address
> allocated from the PCI BAR space.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

That works :-)

  Paul

> ---
>  include/gnttab_interface.h |  54 ++++++++++++++-
>  include/xen.h              |  19 ++++++
>  src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
>  src/xenbus/gnttab.c        | 165
> +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 352 insertions(+), 2 deletions(-)
> 
> diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
> index d29440a..b0f4adf 100644
> --- a/include/gnttab_interface.h
> +++ b/include/gnttab_interface.h
> @@ -163,6 +163,39 @@ typedef VOID
>      IN  PXENBUS_GNTTAB_CACHE    Cache
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
> +    \brief Map foreign memory pages into the system address space
> +
> +    \param Interface The interface header
> +    \param Domain The domid of the foreign domain that granted the pages
> +    \param NumberPages Number of pages to map
> +    \param References Array of grant reference numbers shared by the
> foreign domain
> +    \param ReadOnly If TRUE, pages are mapped with read-only access
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    );
> +
> +/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> +    \brief Unmap foreign memory pages from the system address space
> +
> +    \param Interface The interface header
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
>  DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
>  0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
> @@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
>      XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
>  };
> 
> -typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
> +    \brief GNTTAB interface version 2
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V2 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +typedef struct _XENBUS_GNTTAB_INTERFACE_V2
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> 
>  /*! \def XENBUS_GNTTAB
>      \brief Macro at assist in method invocation
> @@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
>  #endif  // _WINDLL
> 
>  #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
> -#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
> +#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
> 
>  #endif  // _XENBUS_GNTTAB_INTERFACE_H
> 
> diff --git a/include/xen.h b/include/xen.h
> index 6007582..23c7ac0 100644
> --- a/include/xen.h
> +++ b/include/xen.h
> @@ -258,6 +258,25 @@ GrantTableCopy(
>      IN  ULONG               Count
>      );
> 
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    );
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                   Handle,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // SCHED
> 
>  __checkReturn
> diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
> index 6facb3f..6b00f65 100644
> --- a/src/xen/grant_table.c
> +++ b/src/xen/grant_table.c
> @@ -38,6 +38,35 @@
>  #include "dbg_print.h"
>  #include "assert.h"
> 
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +// Most of the GNTST_* values don't have meaningful NTSTATUS
> counterparts,
> +// this macro translates those that do.
> +#define GNTST_TO_STATUS(_gntst, _status)                    \
> +        do {                                                \
> +            switch (_gntst) {                               \
> +            case GNTST_okay:                                \
> +                _status = STATUS_SUCCESS;                   \
> +                break;                                      \
> +                                                            \
> +            case GNTST_bad_handle:                          \
> +                _status = STATUS_INVALID_HANDLE;            \
> +                break;                                      \
> +                                                            \
> +            case GNTST_permission_denied:                   \
> +                _status = STATUS_ACCESS_DENIED;             \
> +                break;                                      \
> +                                                            \
> +            case GNTST_eagain:                              \
> +                _status = STATUS_RETRY;                     \
> +                break;                                      \
> +                                                            \
> +            default:                                        \
> +                _status = STATUS_UNSUCCESSFUL;              \
> +                break;                                      \
> +            }                                               \
> +        } while (FALSE)
> +
>  static LONG_PTR
>  GrantTableOp(
>      IN  ULONG   Command,
> @@ -131,3 +160,90 @@ fail1:
> 
>      return status;
>  }
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    )
> +{
> +    struct gnttab_map_grant_ref op;
> +    LONG_PTR                    rc;
> +    NTSTATUS                    status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.dom = Domain;
> +    op.ref = GrantRef;
> +    op.flags = GNTMAP_host_map;
> +    if (ReadOnly)
> +        op.flags |= GNTMAP_readonly;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    *Handle = op.handle;
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                     Handle,
> +    IN  PHYSICAL_ADDRESS          Address
> +    )
> +{
> +    struct gnttab_unmap_grant_ref op;
> +    LONG_PTR                      rc;
> +    NTSTATUS                      status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.handle = Handle;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
> index 165e38f..32b43c7 100644
> --- a/src/xenbus/gnttab.c
> +++ b/src/xenbus/gnttab.c
> @@ -40,6 +40,7 @@
>  #include "dbg_print.h"
>  #include "assert.h"
>  #include "util.h"
> +#include "hash_table.h"
> 
>  #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
>  #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof
> (grant_entry_v1_t))
> @@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
>      grant_entry_v1_t    Entry;
>  };
> 
> +typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
> +    ULONG               NumberPages;
> +    ULONG               MapHandles[1];
> +} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
> +
>  struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_FDO                 Fdo;
>      KSPIN_LOCK                  Lock;
> @@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
>      XENBUS_DEBUG_INTERFACE      DebugInterface;
>      PXENBUS_DEBUG_CALLBACK      DebugCallback;
> +    PXENBUS_HASH_TABLE          MapTable;
>      LIST_ENTRY                  List;
>  };
> 
> @@ -534,6 +541,124 @@ GnttabGetReference(
>      return (ULONG)Entry->Reference;
>  }
> 
> +static NTSTATUS
> +GnttabMapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    )
> +{
> +    NTSTATUS                    status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE,
> Address);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = STATUS_INSUFFICIENT_RESOURCES;
> +    MapEntry =
> __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY,
> MapHandles) + NumberPages*sizeof(ULONG));
> +    if (!MapEntry)
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address->QuadPart;
> +    MapEntry->NumberPages = NumberPages;
> +
> +    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
> +        status = GrantTableMapForeignPage(Domain,
> +                                          References[PageIndex],
> +                                          PageAddress,
> +                                          ReadOnly,
> +                                          &MapEntry->MapHandles[PageIndex]);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    status = HashTableAdd(Context->MapTable,
> +                          Address->QuadPart,
> +                          (ULONG_PTR)MapEntry);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    return STATUS_SUCCESS;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    while (PageIndex > 0) {
> +        --PageIndex;
> +        PageAddress.QuadPart -= PAGE_SIZE;
> +        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress)));
> +    }
> +
> +    __GnttabFree(MapEntry);
> +
> +fail2:
> +    Error("fail2\n");
> +    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
> +
> +fail1:
> +    Error("fail1: (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +GnttabUnmapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    )
> +{
> +    NTSTATUS                    Status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    Status = HashTableLookup(Context->MapTable, Address.QuadPart,
> (PULONG_PTR)&MapEntry);
> +    if (!NT_SUCCESS(Status))
> +        goto fail1;
> +
> +    Status = HashTableRemove(Context->MapTable, Address.QuadPart);
> +    if (!NT_SUCCESS(Status))
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address.QuadPart;
> +
> +    for (PageIndex = 0; PageIndex < MapEntry->NumberPages;
> PageIndex++) {
> +        Status = GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress);
> +        if (!NT_SUCCESS(Status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages *
> PAGE_SIZE);
> +    __GnttabFree(MapEntry);
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +    KeBugCheckEx(MEMORY_MANAGEMENT, XENBUS_GNTTAB_TAG,
> PageAddress.QuadPart, MapEntry->MapHandles[PageIndex],
> Address.QuadPart);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1: (%08x)\n", Status);
> +    return Status;
> +}
> +
>  static VOID
>  GnttabSuspendCallbackEarly(
>      IN  PVOID               Argument
> @@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1
> GnttabInterfaceVersion1 = {
>      GnttabDestroyCache
>  };
> 
> +static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 =
> {
> +    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL
> },
> +    GnttabAcquire,
> +    GnttabRelease,
> +    GnttabCreateCache,
> +    GnttabPermitForeignAccess,
> +    GnttabRevokeForeignAccess,
> +    GnttabGetReference,
> +    GnttabDestroyCache,
> +    GnttabMapForeignPages,
> +    GnttabUnmapForeignPages
> +};
> +
>  NTSTATUS
>  GnttabInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -836,12 +974,19 @@ GnttabInitialize(
>      InitializeListHead(&(*Context)->List);
>      KeInitializeSpinLock(&(*Context)->Lock);
> 
> +    status = HashTableCreate(&(*Context)->MapTable);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
>      (*Context)->Fdo = Fdo;
> 
>      Trace("<====\n");
> 
>      return STATUS_SUCCESS;
> 
> +fail2:
> +    Error("fail2\n");
> +
>  fail1:
>      Error("fail1 (%08x)\n", status);
> 
> @@ -878,6 +1023,23 @@ GnttabGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
> +
> +        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2
> *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
> +            break;
> +
> +        *GnttabInterface = GnttabInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, ==, Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> @@ -895,6 +1057,9 @@ GnttabTeardown(
> 
>      Context->Fdo = NULL;
> 
> +    HashTableDestroy(Context->MapTable);
> +    Context->MapTable = NULL;
> +
>      RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
>      RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
> 
> --
> 1.8.1.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 11:55:37 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 11:55:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaMvY-0001CY-2G; Fri, 11 Sep 2015 11:55:36 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaMvX-0001CT-01
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 11:55:35 +0000
Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id
	CC/9A-13905-631C2F55; Fri, 11 Sep 2015 11:55:34 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-206.messagelabs.com!1441972531!18735570!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27615 invoked from network); 11 Sep 2015 11:55:31 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 11:55:31 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2747432"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
	implementation
Thread-Index: AQHQ7IM2W5flftHBxE6fbpFyUO7FL543OGTQ
Date: Fri, 11 Sep 2015 11:55:30 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BF679@AMSPEX01CL01.citrite.net>
References: <55F2B7D1.80301@invisiblethingslab.com>
In-Reply-To: <55F2B7D1.80301@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [TEST] Add XENBUS APIs necessary for
	libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 12:15
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [TEST] Add XENBUS APIs necessary for libvchan
> implementation
> 
> GNTTAB interface now includes functions to map and unmap memory pages
> granted by a foreign domain. The page(s) are mapped under an address
> allocated from the PCI BAR space.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

That works :-)

  Paul

> ---
>  include/gnttab_interface.h |  54 ++++++++++++++-
>  include/xen.h              |  19 ++++++
>  src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
>  src/xenbus/gnttab.c        | 165
> +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 352 insertions(+), 2 deletions(-)
> 
> diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
> index d29440a..b0f4adf 100644
> --- a/include/gnttab_interface.h
> +++ b/include/gnttab_interface.h
> @@ -163,6 +163,39 @@ typedef VOID
>      IN  PXENBUS_GNTTAB_CACHE    Cache
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
> +    \brief Map foreign memory pages into the system address space
> +
> +    \param Interface The interface header
> +    \param Domain The domid of the foreign domain that granted the pages
> +    \param NumberPages Number of pages to map
> +    \param References Array of grant reference numbers shared by the
> foreign domain
> +    \param ReadOnly If TRUE, pages are mapped with read-only access
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    );
> +
> +/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> +    \brief Unmap foreign memory pages from the system address space
> +
> +    \param Interface The interface header
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
>  DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
>  0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
> @@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
>      XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
>  };
> 
> -typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
> +    \brief GNTTAB interface version 2
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V2 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +typedef struct _XENBUS_GNTTAB_INTERFACE_V2
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> 
>  /*! \def XENBUS_GNTTAB
>      \brief Macro at assist in method invocation
> @@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
>  #endif  // _WINDLL
> 
>  #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
> -#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
> +#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
> 
>  #endif  // _XENBUS_GNTTAB_INTERFACE_H
> 
> diff --git a/include/xen.h b/include/xen.h
> index 6007582..23c7ac0 100644
> --- a/include/xen.h
> +++ b/include/xen.h
> @@ -258,6 +258,25 @@ GrantTableCopy(
>      IN  ULONG               Count
>      );
> 
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    );
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                   Handle,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // SCHED
> 
>  __checkReturn
> diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
> index 6facb3f..6b00f65 100644
> --- a/src/xen/grant_table.c
> +++ b/src/xen/grant_table.c
> @@ -38,6 +38,35 @@
>  #include "dbg_print.h"
>  #include "assert.h"
> 
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +// Most of the GNTST_* values don't have meaningful NTSTATUS
> counterparts,
> +// this macro translates those that do.
> +#define GNTST_TO_STATUS(_gntst, _status)                    \
> +        do {                                                \
> +            switch (_gntst) {                               \
> +            case GNTST_okay:                                \
> +                _status = STATUS_SUCCESS;                   \
> +                break;                                      \
> +                                                            \
> +            case GNTST_bad_handle:                          \
> +                _status = STATUS_INVALID_HANDLE;            \
> +                break;                                      \
> +                                                            \
> +            case GNTST_permission_denied:                   \
> +                _status = STATUS_ACCESS_DENIED;             \
> +                break;                                      \
> +                                                            \
> +            case GNTST_eagain:                              \
> +                _status = STATUS_RETRY;                     \
> +                break;                                      \
> +                                                            \
> +            default:                                        \
> +                _status = STATUS_UNSUCCESSFUL;              \
> +                break;                                      \
> +            }                                               \
> +        } while (FALSE)
> +
>  static LONG_PTR
>  GrantTableOp(
>      IN  ULONG   Command,
> @@ -131,3 +160,90 @@ fail1:
> 
>      return status;
>  }
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    )
> +{
> +    struct gnttab_map_grant_ref op;
> +    LONG_PTR                    rc;
> +    NTSTATUS                    status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.dom = Domain;
> +    op.ref = GrantRef;
> +    op.flags = GNTMAP_host_map;
> +    if (ReadOnly)
> +        op.flags |= GNTMAP_readonly;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    *Handle = op.handle;
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                     Handle,
> +    IN  PHYSICAL_ADDRESS          Address
> +    )
> +{
> +    struct gnttab_unmap_grant_ref op;
> +    LONG_PTR                      rc;
> +    NTSTATUS                      status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.handle = Handle;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
> index 165e38f..32b43c7 100644
> --- a/src/xenbus/gnttab.c
> +++ b/src/xenbus/gnttab.c
> @@ -40,6 +40,7 @@
>  #include "dbg_print.h"
>  #include "assert.h"
>  #include "util.h"
> +#include "hash_table.h"
> 
>  #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
>  #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof
> (grant_entry_v1_t))
> @@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
>      grant_entry_v1_t    Entry;
>  };
> 
> +typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
> +    ULONG               NumberPages;
> +    ULONG               MapHandles[1];
> +} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
> +
>  struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_FDO                 Fdo;
>      KSPIN_LOCK                  Lock;
> @@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
>      XENBUS_DEBUG_INTERFACE      DebugInterface;
>      PXENBUS_DEBUG_CALLBACK      DebugCallback;
> +    PXENBUS_HASH_TABLE          MapTable;
>      LIST_ENTRY                  List;
>  };
> 
> @@ -534,6 +541,124 @@ GnttabGetReference(
>      return (ULONG)Entry->Reference;
>  }
> 
> +static NTSTATUS
> +GnttabMapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    )
> +{
> +    NTSTATUS                    status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE,
> Address);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = STATUS_INSUFFICIENT_RESOURCES;
> +    MapEntry =
> __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY,
> MapHandles) + NumberPages*sizeof(ULONG));
> +    if (!MapEntry)
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address->QuadPart;
> +    MapEntry->NumberPages = NumberPages;
> +
> +    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
> +        status = GrantTableMapForeignPage(Domain,
> +                                          References[PageIndex],
> +                                          PageAddress,
> +                                          ReadOnly,
> +                                          &MapEntry->MapHandles[PageIndex]);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    status = HashTableAdd(Context->MapTable,
> +                          Address->QuadPart,
> +                          (ULONG_PTR)MapEntry);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    return STATUS_SUCCESS;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    while (PageIndex > 0) {
> +        --PageIndex;
> +        PageAddress.QuadPart -= PAGE_SIZE;
> +        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress)));
> +    }
> +
> +    __GnttabFree(MapEntry);
> +
> +fail2:
> +    Error("fail2\n");
> +    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
> +
> +fail1:
> +    Error("fail1: (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +GnttabUnmapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    )
> +{
> +    NTSTATUS                    Status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    Status = HashTableLookup(Context->MapTable, Address.QuadPart,
> (PULONG_PTR)&MapEntry);
> +    if (!NT_SUCCESS(Status))
> +        goto fail1;
> +
> +    Status = HashTableRemove(Context->MapTable, Address.QuadPart);
> +    if (!NT_SUCCESS(Status))
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address.QuadPart;
> +
> +    for (PageIndex = 0; PageIndex < MapEntry->NumberPages;
> PageIndex++) {
> +        Status = GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress);
> +        if (!NT_SUCCESS(Status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages *
> PAGE_SIZE);
> +    __GnttabFree(MapEntry);
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +    KeBugCheckEx(MEMORY_MANAGEMENT, XENBUS_GNTTAB_TAG,
> PageAddress.QuadPart, MapEntry->MapHandles[PageIndex],
> Address.QuadPart);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1: (%08x)\n", Status);
> +    return Status;
> +}
> +
>  static VOID
>  GnttabSuspendCallbackEarly(
>      IN  PVOID               Argument
> @@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1
> GnttabInterfaceVersion1 = {
>      GnttabDestroyCache
>  };
> 
> +static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 =
> {
> +    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL
> },
> +    GnttabAcquire,
> +    GnttabRelease,
> +    GnttabCreateCache,
> +    GnttabPermitForeignAccess,
> +    GnttabRevokeForeignAccess,
> +    GnttabGetReference,
> +    GnttabDestroyCache,
> +    GnttabMapForeignPages,
> +    GnttabUnmapForeignPages
> +};
> +
>  NTSTATUS
>  GnttabInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -836,12 +974,19 @@ GnttabInitialize(
>      InitializeListHead(&(*Context)->List);
>      KeInitializeSpinLock(&(*Context)->Lock);
> 
> +    status = HashTableCreate(&(*Context)->MapTable);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
>      (*Context)->Fdo = Fdo;
> 
>      Trace("<====\n");
> 
>      return STATUS_SUCCESS;
> 
> +fail2:
> +    Error("fail2\n");
> +
>  fail1:
>      Error("fail1 (%08x)\n", status);
> 
> @@ -878,6 +1023,23 @@ GnttabGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
> +
> +        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2
> *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
> +            break;
> +
> +        *GnttabInterface = GnttabInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, ==, Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> @@ -895,6 +1057,9 @@ GnttabTeardown(
> 
>      Context->Fdo = NULL;
> 
> +    HashTableDestroy(Context->MapTable);
> +    Context->MapTable = NULL;
> +
>      RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
>      RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
> 
> --
> 1.8.1.msysgit.1
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNT7-0005OV-Jl; Fri, 11 Sep 2015 12:30:17 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNT6-0005OQ-Ps
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:17 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	4E/07-28791-859C2F55; Fri, 11 Sep 2015 12:30:16 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441974614!48915527!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27489 invoked from network); 11 Sep 2015 12:30:15 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 12:30:15 -0000
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
	by mailout.nyi.internal (Postfix) with ESMTP id B6B6F20835
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:14 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute1.internal (MEProxy); Fri, 11 Sep 2015 08:30:14 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=hyM6Vx
	CnThoMJPcPD/g5uKQfYxMOOuUrLdorC0e3lFR7JuUbIDI2xfYFBO1Zv3Kdk3haAD
	urzNe30VP4wDUHfsqjg3gDaxLRYdjR6OmzVZiSF3sz1fEDB6KBRpQJP70GoHt792
	0GAi8FjLWUWAMig4xdEIBh/gYA+AgMnw5ptck=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=cI5kG
	ksVvE1trjbgxLDtZ2Ix8gM1WevhkeZAb/L/dTu4I20YMMKbC6/E5OYN8dVoZIyXQ
	9gLjpoy5agyg2DEZtR+V0WYxojoHSXI0rFWdm5kjtC0v2lR3KaU5spjhWEqBO7DW
	J4nb8ds5ofIcwW0N35LOkcsJ+IV/MOg/0U9Nc0=
X-Sasl-enc: naq2huht9+YdKpvWhe2Zj+lgk3iKes6vCRt3LKvoc02t 1441974614
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4FE236801B8
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:14 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C954.400@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch series adds some missing XENBUS APIs that are needed for full
libvchan implementation on Windows, namely mapping foreign memory pages
and setting XenStore key permissions.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:18 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNT7-0005OV-Jl; Fri, 11 Sep 2015 12:30:17 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNT6-0005OQ-Ps
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:17 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	4E/07-28791-859C2F55; Fri, 11 Sep 2015 12:30:16 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441974614!48915527!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27489 invoked from network); 11 Sep 2015 12:30:15 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 12:30:15 -0000
Received: from compute1.internal (compute1.nyi.internal [10.202.2.41])
	by mailout.nyi.internal (Postfix) with ESMTP id B6B6F20835
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:14 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute1.internal (MEProxy); Fri, 11 Sep 2015 08:30:14 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=hyM6Vx
	CnThoMJPcPD/g5uKQfYxMOOuUrLdorC0e3lFR7JuUbIDI2xfYFBO1Zv3Kdk3haAD
	urzNe30VP4wDUHfsqjg3gDaxLRYdjR6OmzVZiSF3sz1fEDB6KBRpQJP70GoHt792
	0GAi8FjLWUWAMig4xdEIBh/gYA+AgMnw5ptck=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=/8n46nocYkXZZeag2BHL8Liv4jw=; b=cI5kG
	ksVvE1trjbgxLDtZ2Ix8gM1WevhkeZAb/L/dTu4I20YMMKbC6/E5OYN8dVoZIyXQ
	9gLjpoy5agyg2DEZtR+V0WYxojoHSXI0rFWdm5kjtC0v2lR3KaU5spjhWEqBO7DW
	J4nb8ds5ofIcwW0N35LOkcsJ+IV/MOg/0U9Nc0=
X-Sasl-enc: naq2huht9+YdKpvWhe2Zj+lgk3iKes6vCRt3LKvoc02t 1441974614
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4FE236801B8
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:14 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C954.400@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:12 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This patch series adds some missing XENBUS APIs that are needed for full
libvchan implementation on Windows, namely mapping foreign memory pages
and setting XenStore key permissions.

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTM-0005PB-LQ; Fri, 11 Sep 2015 12:30:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTL-0005P1-8t
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:31 +0000
Received: from [85.158.139.211] by server-10.bemta-5.messagelabs.com id
	F2/83-32110-669C2F55; Fri, 11 Sep 2015 12:30:30 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1441974627!34454846!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10254 invoked from network); 11 Sep 2015 12:30:28 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-12.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 12:30:28 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id A8FF42061D
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 08:30:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=RdPrMwDC6URqx+ufs1UK1JGoz1U=; b=eck65P
	Sc/HP5Sz/R4aoc/P786ibiDEtoprf7GL7iBaGW2dgffAm6AAMIAUUmb4EFDKdKR7
	dukqg1ISgtEi5atPfMSG7WBh3Bd4cjgFTdWMpNoQAWkcx9cDkoP1kuuOJW3hKFXt
	mqnCMuPFZJedI+RFP751g3nvwOSrjb4u499KM=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=RdPrMwDC6URqx+ufs1UK1JGoz1U=; b=XIktl
	wHxn3gmn6MoEsfW76MeUmHoOU0DLptSyGLWhBFZG046vbbEMdPtMFgz2ME3B7If0
	r01G2QhUnvWAv8INYYNIe2XX7B5MPP+/hCzBf0JHPIkoT706y6C64ZHT/YWfOosz
	xutHaSyprvEWDz3GoXIn8mMgybL8Jh3rmlz1lQ=
X-Sasl-enc: 27WGkx4lQlSQTVfZLLbFFBI3xLDNT3WJOkEw9sQmrGSF 1441974627
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id EBF4D6801B8
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:26 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C961.708@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
 the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

GNTTAB interface now includes functions to map and unmap memory pages
granted by a foreign domain. The page(s) are mapped under an address
allocated from the PCI BAR space.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/gnttab_interface.h |  54 ++++++++++++++-
 include/xen.h              |  19 ++++++
 src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
 src/xenbus/gnttab.c        | 165 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 352 insertions(+), 2 deletions(-)

diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index d29440a..b0f4adf 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -163,6 +163,39 @@ typedef VOID
     IN  PXENBUS_GNTTAB_CACHE    Cache
     );
 
+/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
+    \brief Map foreign memory pages into the system address space
+
+    \param Interface The interface header
+    \param Domain The domid of the foreign domain that granted the pages
+    \param NumberPages Number of pages to map
+    \param References Array of grant reference numbers shared by the foreign domain
+    \param ReadOnly If TRUE, pages are mapped with read-only access
+    \param Address The physical address that the foreign pages are mapped under
+*/
+
+typedef NTSTATUS
+(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    );
+
+/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
+    \brief Unmap foreign memory pages from the system address space
+
+    \param Interface The interface header
+    \param Address The physical address that the foreign pages are mapped under
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
 DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE, 
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
@@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
     XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
 };
 
-typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
+    \brief GNTTAB interface version 2
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V2 {
+    INTERFACE                           Interface;
+    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE               GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+};
+
+typedef struct _XENBUS_GNTTAB_INTERFACE_V2 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
 
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
 
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
 
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
 
diff --git a/include/xen.h b/include/xen.h
index 6007582..23c7ac0 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -258,6 +258,25 @@ GrantTableCopy(
     IN  ULONG               Count
     );
 
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    );
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                   Handle,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // SCHED
 
 __checkReturn
diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
index 6facb3f..6b00f65 100644
--- a/src/xen/grant_table.c
+++ b/src/xen/grant_table.c
@@ -38,6 +38,35 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+#pragma warning(disable:4127)   // conditional expression is constant
+
+// Most of the GNTST_* values don't have meaningful NTSTATUS counterparts,
+// this macro translates those that do.
+#define GNTST_TO_STATUS(_gntst, _status)                    \
+        do {                                                \
+            switch (_gntst) {                               \
+            case GNTST_okay:                                \
+                _status = STATUS_SUCCESS;                   \
+                break;                                      \
+                                                            \
+            case GNTST_bad_handle:                          \
+                _status = STATUS_INVALID_HANDLE;            \
+                break;                                      \
+                                                            \
+            case GNTST_permission_denied:                   \
+                _status = STATUS_ACCESS_DENIED;             \
+                break;                                      \
+                                                            \
+            case GNTST_eagain:                              \
+                _status = STATUS_RETRY;                     \
+                break;                                      \
+                                                            \
+            default:                                        \
+                _status = STATUS_UNSUCCESSFUL;              \
+                break;                                      \
+            }                                               \
+        } while (FALSE)
+
 static LONG_PTR
 GrantTableOp(
     IN  ULONG   Command,
@@ -131,3 +160,90 @@ fail1:
 
     return status;
 }
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    )
+{
+    struct gnttab_map_grant_ref op;
+    LONG_PTR                    rc;
+    NTSTATUS                    status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.dom = Domain;
+    op.ref = GrantRef;
+    op.flags = GNTMAP_host_map;
+    if (ReadOnly)
+        op.flags |= GNTMAP_readonly;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    *Handle = op.handle;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                     Handle,
+    IN  PHYSICAL_ADDRESS          Address
+    )
+{
+    struct gnttab_unmap_grant_ref op;
+    LONG_PTR                      rc;
+    NTSTATUS                      status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.handle = Handle;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
index 165e38f..32b43c7 100644
--- a/src/xenbus/gnttab.c
+++ b/src/xenbus/gnttab.c
@@ -40,6 +40,7 @@
 #include "dbg_print.h"
 #include "assert.h"
 #include "util.h"
+#include "hash_table.h"
 
 #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
 #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof (grant_entry_v1_t))
@@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
     grant_entry_v1_t    Entry;
 };
 
+typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
+    ULONG               NumberPages;
+    ULONG               MapHandles[1];
+} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
+
 struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_FDO                 Fdo;
     KSPIN_LOCK                  Lock;
@@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
     XENBUS_DEBUG_INTERFACE      DebugInterface;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
+    PXENBUS_HASH_TABLE          MapTable;
     LIST_ENTRY                  List;
 };
 
@@ -534,6 +541,124 @@ GnttabGetReference(
     return (ULONG)Entry->Reference;
 }
 
+static NTSTATUS
+GnttabMapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    )
+{
+    NTSTATUS                    status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE, Address);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_INSUFFICIENT_RESOURCES;
+    MapEntry = __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY, MapHandles) + NumberPages*sizeof(ULONG));
+    if (!MapEntry)
+        goto fail2;
+
+    PageAddress.QuadPart = Address->QuadPart;
+    MapEntry->NumberPages = NumberPages;
+
+    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
+        status = GrantTableMapForeignPage(Domain,
+                                          References[PageIndex],
+                                          PageAddress,
+                                          ReadOnly,
+                                          &MapEntry->MapHandles[PageIndex]);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    status = HashTableAdd(Context->MapTable,
+                          (ULONG_PTR)Address->QuadPart,
+                          (ULONG_PTR)MapEntry);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+    while (PageIndex > 0) {
+        --PageIndex;
+        PageAddress.QuadPart -= PAGE_SIZE;
+        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress)));
+    }
+
+    __GnttabFree(MapEntry);
+
+fail2:
+    Error("fail2\n");
+    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
+
+fail1:
+    Error("fail1: (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+GnttabUnmapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    )
+{
+    NTSTATUS                    Status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    Status = HashTableLookup(Context->MapTable, (ULONG_PTR)Address.QuadPart, (PULONG_PTR)&MapEntry);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    Status = HashTableRemove(Context->MapTable, (ULONG_PTR)Address.QuadPart);
+    if (!NT_SUCCESS(Status))
+        goto fail2;
+
+    PageAddress.QuadPart = Address.QuadPart;
+
+    for (PageIndex = 0; PageIndex < MapEntry->NumberPages; PageIndex++) {
+        Status = GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress);
+        if (!NT_SUCCESS(Status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages * PAGE_SIZE);
+    __GnttabFree(MapEntry);
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+    KeBugCheckEx(MEMORY_MANAGEMENT, (ULONG_PTR)XENBUS_GNTTAB_TAG, (ULONG_PTR)PageAddress.QuadPart, (ULONG_PTR)MapEntry->MapHandles[PageIndex], (ULONG_PTR)Address.QuadPart);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1: (%08x)\n", Status);
+    return Status;
+}
+
 static VOID
 GnttabSuspendCallbackEarly(
     IN  PVOID               Argument
@@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1   GnttabInterfaceVersion1 = {
     GnttabDestroyCache
 };
                      
+static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
+    GnttabRevokeForeignAccess,
+    GnttabGetReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
 NTSTATUS
 GnttabInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -836,12 +974,19 @@ GnttabInitialize(
     InitializeListHead(&(*Context)->List);
     KeInitializeSpinLock(&(*Context)->Lock);
 
+    status = HashTableCreate(&(*Context)->MapTable);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -878,6 +1023,23 @@ GnttabGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
+
+        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
+            break;
+
+        *GnttabInterface = GnttabInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
@@ -895,6 +1057,9 @@ GnttabTeardown(
 
     Context->Fdo = NULL;
 
+    HashTableDestroy(Context->MapTable);
+    Context->MapTable = NULL;
+
     RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
     RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
 
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:32 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTM-0005PB-LQ; Fri, 11 Sep 2015 12:30:32 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTL-0005P1-8t
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:31 +0000
Received: from [85.158.139.211] by server-10.bemta-5.messagelabs.com id
	F2/83-32110-669C2F55; Fri, 11 Sep 2015 12:30:30 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1441974627!34454846!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10254 invoked from network); 11 Sep 2015 12:30:28 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-12.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 12:30:28 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id A8FF42061D
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 08:30:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=RdPrMwDC6URqx+ufs1UK1JGoz1U=; b=eck65P
	Sc/HP5Sz/R4aoc/P786ibiDEtoprf7GL7iBaGW2dgffAm6AAMIAUUmb4EFDKdKR7
	dukqg1ISgtEi5atPfMSG7WBh3Bd4cjgFTdWMpNoQAWkcx9cDkoP1kuuOJW3hKFXt
	mqnCMuPFZJedI+RFP751g3nvwOSrjb4u499KM=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=RdPrMwDC6URqx+ufs1UK1JGoz1U=; b=XIktl
	wHxn3gmn6MoEsfW76MeUmHoOU0DLptSyGLWhBFZG046vbbEMdPtMFgz2ME3B7If0
	r01G2QhUnvWAv8INYYNIe2XX7B5MPP+/hCzBf0JHPIkoT706y6C64ZHT/YWfOosz
	xutHaSyprvEWDz3GoXIn8mMgybL8Jh3rmlz1lQ=
X-Sasl-enc: 27WGkx4lQlSQTVfZLLbFFBI3xLDNT3WJOkEw9sQmrGSF 1441974627
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id EBF4D6801B8
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:26 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C961.708@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
 the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

GNTTAB interface now includes functions to map and unmap memory pages
granted by a foreign domain. The page(s) are mapped under an address
allocated from the PCI BAR space.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/gnttab_interface.h |  54 ++++++++++++++-
 include/xen.h              |  19 ++++++
 src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
 src/xenbus/gnttab.c        | 165 +++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 352 insertions(+), 2 deletions(-)

diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
index d29440a..b0f4adf 100644
--- a/include/gnttab_interface.h
+++ b/include/gnttab_interface.h
@@ -163,6 +163,39 @@ typedef VOID
     IN  PXENBUS_GNTTAB_CACHE    Cache
     );
 
+/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
+    \brief Map foreign memory pages into the system address space
+
+    \param Interface The interface header
+    \param Domain The domid of the foreign domain that granted the pages
+    \param NumberPages Number of pages to map
+    \param References Array of grant reference numbers shared by the foreign domain
+    \param ReadOnly If TRUE, pages are mapped with read-only access
+    \param Address The physical address that the foreign pages are mapped under
+*/
+
+typedef NTSTATUS
+(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    );
+
+/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
+    \brief Unmap foreign memory pages from the system address space
+
+    \param Interface The interface header
+    \param Address The physical address that the foreign pages are mapped under
+*/
+typedef NTSTATUS
+(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
 DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE, 
 0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
@@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
     XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
 };
 
-typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
+/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
+    \brief GNTTAB interface version 2
+    \ingroup interfaces
+*/
+struct _XENBUS_GNTTAB_INTERFACE_V2 {
+    INTERFACE                           Interface;
+    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
+    XENBUS_GNTTAB_RELEASE               GnttabRelease;
+    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
+    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS GnttabPermitForeignAccess;
+    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS GnttabRevokeForeignAccess;
+    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
+    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
+    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
+    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES   GnttabUnmapForeignPages;
+};
+
+typedef struct _XENBUS_GNTTAB_INTERFACE_V2 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
 
 /*! \def XENBUS_GNTTAB
     \brief Macro at assist in method invocation
@@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1 XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
 #endif  // _WINDLL
 
 #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
-#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
+#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
 
 #endif  // _XENBUS_GNTTAB_INTERFACE_H
 
diff --git a/include/xen.h b/include/xen.h
index 6007582..23c7ac0 100644
--- a/include/xen.h
+++ b/include/xen.h
@@ -258,6 +258,25 @@ GrantTableCopy(
     IN  ULONG               Count
     );
 
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    );
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                   Handle,
+    IN  PHYSICAL_ADDRESS        Address
+    );
+
 // SCHED
 
 __checkReturn
diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
index 6facb3f..6b00f65 100644
--- a/src/xen/grant_table.c
+++ b/src/xen/grant_table.c
@@ -38,6 +38,35 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+#pragma warning(disable:4127)   // conditional expression is constant
+
+// Most of the GNTST_* values don't have meaningful NTSTATUS counterparts,
+// this macro translates those that do.
+#define GNTST_TO_STATUS(_gntst, _status)                    \
+        do {                                                \
+            switch (_gntst) {                               \
+            case GNTST_okay:                                \
+                _status = STATUS_SUCCESS;                   \
+                break;                                      \
+                                                            \
+            case GNTST_bad_handle:                          \
+                _status = STATUS_INVALID_HANDLE;            \
+                break;                                      \
+                                                            \
+            case GNTST_permission_denied:                   \
+                _status = STATUS_ACCESS_DENIED;             \
+                break;                                      \
+                                                            \
+            case GNTST_eagain:                              \
+                _status = STATUS_RETRY;                     \
+                break;                                      \
+                                                            \
+            default:                                        \
+                _status = STATUS_UNSUCCESSFUL;              \
+                break;                                      \
+            }                                               \
+        } while (FALSE)
+
 static LONG_PTR
 GrantTableOp(
     IN  ULONG   Command,
@@ -131,3 +160,90 @@ fail1:
 
     return status;
 }
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableMapForeignPage(
+    IN  USHORT                  Domain,
+    IN  ULONG                   GrantRef,
+    IN  PHYSICAL_ADDRESS        Address,
+    IN  BOOLEAN                 ReadOnly,
+    OUT ULONG                   *Handle
+    )
+{
+    struct gnttab_map_grant_ref op;
+    LONG_PTR                    rc;
+    NTSTATUS                    status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.dom = Domain;
+    op.ref = GrantRef;
+    op.flags = GNTMAP_host_map;
+    if (ReadOnly)
+        op.flags |= GNTMAP_readonly;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    *Handle = op.handle;
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
+
+__checkReturn
+XEN_API
+NTSTATUS
+GrantTableUnmapForeignPage(
+    IN  ULONG                     Handle,
+    IN  PHYSICAL_ADDRESS          Address
+    )
+{
+    struct gnttab_unmap_grant_ref op;
+    LONG_PTR                      rc;
+    NTSTATUS                      status;
+
+    RtlZeroMemory(&op, sizeof(op));
+    op.handle = Handle;
+    op.host_addr = Address.QuadPart;
+
+    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
+
+    if (rc < 0) {
+        ERRNO_TO_STATUS(-rc, status);
+        goto fail1;
+    }
+
+    if (op.status != GNTST_okay) {
+        GNTST_TO_STATUS(op.status, status);
+        Error("hypercall status: %d\n", op.status);
+        goto fail2;
+    }
+
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+fail1:
+    Error("fail1 (%08x)\n", status);
+
+    return status;
+}
diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
index 165e38f..32b43c7 100644
--- a/src/xenbus/gnttab.c
+++ b/src/xenbus/gnttab.c
@@ -40,6 +40,7 @@
 #include "dbg_print.h"
 #include "assert.h"
 #include "util.h"
+#include "hash_table.h"
 
 #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
 #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof (grant_entry_v1_t))
@@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
     grant_entry_v1_t    Entry;
 };
 
+typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
+    ULONG               NumberPages;
+    ULONG               MapHandles[1];
+} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
+
 struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_FDO                 Fdo;
     KSPIN_LOCK                  Lock;
@@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
     PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
     XENBUS_DEBUG_INTERFACE      DebugInterface;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
+    PXENBUS_HASH_TABLE          MapTable;
     LIST_ENTRY                  List;
 };
 
@@ -534,6 +541,124 @@ GnttabGetReference(
     return (ULONG)Entry->Reference;
 }
 
+static NTSTATUS
+GnttabMapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  USHORT                  Domain,
+    IN  ULONG                   NumberPages,
+    IN  PULONG                  References,
+    IN  BOOLEAN                 ReadOnly,
+    OUT PHYSICAL_ADDRESS        *Address
+    )
+{
+    NTSTATUS                    status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE, Address);
+    if (!NT_SUCCESS(status))
+        goto fail1;
+
+    status = STATUS_INSUFFICIENT_RESOURCES;
+    MapEntry = __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY, MapHandles) + NumberPages*sizeof(ULONG));
+    if (!MapEntry)
+        goto fail2;
+
+    PageAddress.QuadPart = Address->QuadPart;
+    MapEntry->NumberPages = NumberPages;
+
+    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
+        status = GrantTableMapForeignPage(Domain,
+                                          References[PageIndex],
+                                          PageAddress,
+                                          ReadOnly,
+                                          &MapEntry->MapHandles[PageIndex]);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    status = HashTableAdd(Context->MapTable,
+                          (ULONG_PTR)Address->QuadPart,
+                          (ULONG_PTR)MapEntry);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    return STATUS_SUCCESS;
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+
+    while (PageIndex > 0) {
+        --PageIndex;
+        PageAddress.QuadPart -= PAGE_SIZE;
+        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress)));
+    }
+
+    __GnttabFree(MapEntry);
+
+fail2:
+    Error("fail2\n");
+    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
+
+fail1:
+    Error("fail1: (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+GnttabUnmapForeignPages(
+    IN  PINTERFACE              Interface,
+    IN  PHYSICAL_ADDRESS        Address
+    )
+{
+    NTSTATUS                    Status;
+    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
+    ULONG                       PageIndex;
+    PHYSICAL_ADDRESS            PageAddress;
+    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
+
+    Status = HashTableLookup(Context->MapTable, (ULONG_PTR)Address.QuadPart, (PULONG_PTR)&MapEntry);
+    if (!NT_SUCCESS(Status))
+        goto fail1;
+
+    Status = HashTableRemove(Context->MapTable, (ULONG_PTR)Address.QuadPart);
+    if (!NT_SUCCESS(Status))
+        goto fail2;
+
+    PageAddress.QuadPart = Address.QuadPart;
+
+    for (PageIndex = 0; PageIndex < MapEntry->NumberPages; PageIndex++) {
+        Status = GrantTableUnmapForeignPage(MapEntry->MapHandles[PageIndex], PageAddress);
+        if (!NT_SUCCESS(Status))
+            goto fail3;
+
+        PageAddress.QuadPart += PAGE_SIZE;
+    }
+
+    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages * PAGE_SIZE);
+    __GnttabFree(MapEntry);
+    return STATUS_SUCCESS;
+
+fail3:
+    Error("fail3\n");
+    KeBugCheckEx(MEMORY_MANAGEMENT, (ULONG_PTR)XENBUS_GNTTAB_TAG, (ULONG_PTR)PageAddress.QuadPart, (ULONG_PTR)MapEntry->MapHandles[PageIndex], (ULONG_PTR)Address.QuadPart);
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1: (%08x)\n", Status);
+    return Status;
+}
+
 static VOID
 GnttabSuspendCallbackEarly(
     IN  PVOID               Argument
@@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1   GnttabInterfaceVersion1 = {
     GnttabDestroyCache
 };
                      
+static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL },
+    GnttabAcquire,
+    GnttabRelease,
+    GnttabCreateCache,
+    GnttabPermitForeignAccess,
+    GnttabRevokeForeignAccess,
+    GnttabGetReference,
+    GnttabDestroyCache,
+    GnttabMapForeignPages,
+    GnttabUnmapForeignPages
+};
+
 NTSTATUS
 GnttabInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -836,12 +974,19 @@ GnttabInitialize(
     InitializeListHead(&(*Context)->List);
     KeInitializeSpinLock(&(*Context)->Lock);
 
+    status = HashTableCreate(&(*Context)->MapTable);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
     (*Context)->Fdo = Fdo;
 
     Trace("<====\n");
 
     return STATUS_SUCCESS;
 
+fail2:
+    Error("fail2\n");
+
 fail1:
     Error("fail1 (%08x)\n", status);
 
@@ -878,6 +1023,23 @@ GnttabGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
+
+        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
+            break;
+
+        *GnttabInterface = GnttabInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
@@ -895,6 +1057,9 @@ GnttabTeardown(
 
     Context->Fdo = NULL;
 
+    HashTableDestroy(Context->MapTable);
+    Context->MapTable = NULL;
+
     RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
     RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
 
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTd-0005Pr-NI; Fri, 11 Sep 2015 12:30:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTc-0005Pm-ON
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:48 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	D1/08-03819-879C2F55; Fri, 11 Sep 2015 12:30:48 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1441974646!31593128!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5117 invoked from network); 11 Sep 2015 12:30:47 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-16.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 12:30:47 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 347CE2056E
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:46 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 08:30:46 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=PxCVdPbokRKvXEPlQYaudBxdKuY=; b=g77eSW
	yPFl1apKiZvwRGedujH5HK6TSDglmQwpFyxg+Y061F9cY7V/CDyDWkVBFQ/3HoBH
	1kuLY+bVkXOm/XL+4lE2p6vCeyrMwBojNWKNP/W80i9RMaWWCEJcWrS18gRHbVN2
	YjQioSSBv6DNwwQaiAsg88nboWo2OI31WIm/o=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=PxCVdPbokRKvXEPlQYaudBxdKuY=; b=gmHmq
	QYFe5Jq+MBQGS2RSp3u/sVajmDYOnqk/RDYUmSMbWu0IMp4A7aaHjo9WQ85SSgrl
	tti02rUJ9D4X2gsGolAuCXP0b4oLr/edq2D40GLVp+QyVaZ4H8GUGbQOPIiqbFwi
	em7lUm+/Mlwae4Mz6922kZeLhotN5Lg+aJqsu4=
X-Sasl-enc: eRHDn2e24eyEloKrI01AFwkYToR9CSE+gLcyQg0DWv3p 1441974645
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 6CB966801BF
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:45 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C974.6020008@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key permissions
 to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

STORE interface now includes a function to change key permissions. This
allows granting key access to other, non-privileged domains.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/store_interface.h |  68 ++++++++++++++++-
 src/xenbus/store.c        | 185 +++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 248 insertions(+), 5 deletions(-)

diff --git a/include/store_interface.h b/include/store_interface.h
index 5bcbba3..6775b27 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION    XENBUS_STORE_TRANSACTION, *PXENBUS_S
 */
 typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH, *PXENBUS_STORE_WATCH;
 
+/*! \typedef XENBUS_STORE_PERMISSION_MASK
+    \brief Bitmask of XenStore key permissions
+*/
+typedef enum _XENBUS_STORE_PERMISSION_MASK {
+    XENBUS_STORE_PERM_NONE = 0,
+    XENBUS_STORE_PERM_READ = 1,
+    XENBUS_STORE_PERM_WRITE = 2,
+} XENBUS_STORE_PERMISSION_MASK;
+
+/*! \typedef XENBUS_STORE_PERMISSION
+    \brief XenStore key permissions entry for a single domain
+*/
+typedef struct _XENBUS_STORE_PERMISSION {
+    USHORT Domain;
+    XENBUS_STORE_PERMISSION_MASK Mask;
+} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
+
 /*! \typedef XENBUS_STORE_ACQUIRE
     \brief Acquire a reference to the STORE interface
 
@@ -247,10 +264,36 @@ typedef VOID
     IN  PINTERFACE  Interface
     );
 
+/*! \typedef XENBUS_STORE_PERMISSIONS_SET
+    \brief Set permissions for a XenStore key
+
+    \param Interface The interface header
+    \param Transaction The transaction handle (NULL if this is not
+    part of a transaction)
+    \param Prefix An optional prefix for the \a Node
+    \param Node The concatenation of the \a Prefix and this value specifies
+    the XenStore key to set permissions of
+    \param Permissions An array of permissions to set
+    \param NumberPermissions Number of elements in the \a Permissions array
+*/
+typedef NTSTATUS
+(*XENBUS_STORE_PERMISSIONS_SET)(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    );
+
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
 DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE, 
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
 
+/*! \struct _XENBUS_STORE_INTERFACE_V1
+    \brief STORE interface version 1
+    \ingroup interfaces
+*/
 struct _XENBUS_STORE_INTERFACE_V1 {
     INTERFACE                       Interface;
     XENBUS_STORE_ACQUIRE            StoreAcquire;
@@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
     XENBUS_STORE_POLL               StorePoll;
 };
 
-/*! \struct _XENBUS_STORE_INTERFACE_V1
-    \brief STORE interface version 1
+/*! \struct _XENBUS_STORE_INTERFACE_V2
+    \brief STORE interface version 2
     \ingroup interfaces
 */
-typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
+struct _XENBUS_STORE_INTERFACE_V2 {
+    INTERFACE                       Interface;
+    XENBUS_STORE_ACQUIRE            StoreAcquire;
+    XENBUS_STORE_RELEASE            StoreRelease;
+    XENBUS_STORE_FREE               StoreFree;
+    XENBUS_STORE_READ               StoreRead;
+    XENBUS_STORE_PRINTF             StorePrintf;
+    XENBUS_STORE_REMOVE             StoreRemove;
+    XENBUS_STORE_DIRECTORY          StoreDirectory;
+    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
+    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
+    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
+    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
+    XENBUS_STORE_POLL               StorePoll;
+    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
+};
+
+typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
 
 /*! \def XENBUS_STORE
     \brief Macro at assist in method invocation
@@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE
 #endif  // _WINDLL
 
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
-#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
+#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
 
 #endif  // _XENBUS_STORE_INTERFACE_H
 
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index c54b0f0..cf5ac79 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -442,7 +442,6 @@ StoreIgnoreHeaderType(
     case XS_RELEASE:
     case XS_GET_DOMAIN_PATH:
     case XS_MKDIR:
-    case XS_SET_PERMS:
     case XS_IS_DOMAIN_INTRODUCED:
     case XS_RESUME:
     case XS_SET_TARGET:
@@ -470,6 +469,7 @@ StoreVerifyHeader(
         Header->type != XS_TRANSACTION_END &&
         Header->type != XS_WRITE &&
         Header->type != XS_RM &&
+        Header->type != XS_SET_PERMS &&
         Header->type != XS_WATCH_EVENT &&
         Header->type != XS_ERROR &&
         !StoreIgnoreHeaderType(Header->type)) {
@@ -1816,6 +1816,155 @@ StorePoll(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+static NTSTATUS
+StorePermissionToString(
+    IN  PXENBUS_STORE_PERMISSION    Permission,
+    OUT PCHAR                       Buffer,
+    IN  ULONG                       BufferSize,
+    OUT PULONG                      UsedSize
+    )
+{
+    size_t                          Remaining;
+    NTSTATUS                        status = STATUS_INVALID_PARAMETER;
+
+    ASSERT(BufferSize > 1);
+
+    switch (Permission->Mask) {
+    case XENBUS_STORE_PERM_NONE:
+        *Buffer = 'n';
+        break;
+    case XENBUS_STORE_PERM_READ:
+        *Buffer = 'r';
+        break;
+    case XENBUS_STORE_PERM_WRITE:
+        *Buffer = 'w';
+        break;
+    case XENBUS_STORE_PERM_READ | XENBUS_STORE_PERM_WRITE:
+        *Buffer = 'b';
+        break;
+    default:
+        goto fail1;
+    }
+
+    status = RtlStringCbPrintfExA(Buffer + 1, BufferSize - 1, NULL, &Remaining, 0, "%u", Permission->Domain);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    *UsedSize = BufferSize - (ULONG)Remaining + 1;
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+StorePermissionsSet(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    )
+{
+    PXENBUS_STORE_CONTEXT           Context = Interface->Context;
+    XENBUS_STORE_REQUEST            Request;
+    PXENBUS_STORE_RESPONSE          Response;
+    NTSTATUS                        status;
+    ULONG                           Index, Length, Used;
+    PCHAR                           Path = NULL;
+    PCHAR                           PermissionString, Segment;
+
+    status = STATUS_NO_MEMORY;
+    PermissionString = __StoreAllocate(XENSTORE_PAYLOAD_MAX);
+    if (PermissionString == NULL)
+        goto fail1;
+
+    if (Prefix == NULL)
+        Length = (ULONG)strlen(Node) + sizeof(CHAR);
+    else
+        Length = (ULONG)strlen(Prefix) + 1 + (ULONG)strlen(Node) + sizeof(CHAR);
+
+    Path = __StoreAllocate(Length);
+
+    if (Path == NULL)
+        goto fail2;
+
+    status = (Prefix == NULL) ?
+        RtlStringCbPrintfA(Path, Length, "%s", Node) :
+        RtlStringCbPrintfA(Path, Length, "%s/%s", Prefix, Node);
+    ASSERT(NT_SUCCESS(status));
+
+    RtlZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST));
+
+    for (Index = 0, Segment = PermissionString, Length = XENSTORE_PAYLOAD_MAX;
+         Index < NumberPermissions;
+         Index++) {
+        status = StorePermissionToString(&Permissions[Index], Segment, Length, &Used);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        Segment += Used;
+        Length -= Used;
+    }
+
+    status = StorePrepareRequest(Context,
+                                 &Request,
+                                 Transaction,
+                                 XS_SET_PERMS,
+                                 Path, strlen(Path),
+                                 "", 1,
+                                 PermissionString, XENSTORE_PAYLOAD_MAX - Length,
+                                 NULL, 0);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = STATUS_NO_MEMORY;
+    Response = StoreSubmitRequest(Context, &Request);
+    if (Response == NULL)
+        goto fail5;
+
+    status = StoreCheckResponse(Response);
+    if (!NT_SUCCESS(status))
+        goto fail6;
+
+    StoreFreeResponse(Response);
+    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
+
+    __StoreFree(Path);
+    __StoreFree(PermissionString);
+
+    return STATUS_SUCCESS;
+
+fail6:
+    Error("fail6\n");
+    StoreFreeResponse(Response);
+
+fail5:
+    Error("fail5\n");
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+    __StoreFree(Path);
+    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
+
+fail2:
+    Error("fail2\n");
+    __StoreFree(PermissionString);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+    return status;
+}
+
 static
 _Function_class_(KSERVICE_ROUTINE)
 _IRQL_requires_(HIGH_LEVEL)
@@ -2327,6 +2476,23 @@ static struct _XENBUS_STORE_INTERFACE_V1 StoreInterfaceVersion1 = {
     StorePoll
 };
                      
+static struct _XENBUS_STORE_INTERFACE_V2 StoreInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_STORE_INTERFACE_V2), 2, NULL, NULL, NULL },
+    StoreAcquire,
+    StoreRelease,
+    StoreFree,
+    StoreRead,
+    StorePrintf,
+    StoreRemove,
+    StoreDirectory,
+    StoreTransactionStart,
+    StoreTransactionEnd,
+    StoreWatchAdd,
+    StoreWatchRemove,
+    StorePoll,
+    StorePermissionsSet
+};
+
 NTSTATUS
 StoreInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -2426,6 +2592,23 @@ StoreGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_STORE_INTERFACE_V2  *StoreInterface;
+
+        StoreInterface = (struct _XENBUS_STORE_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_STORE_INTERFACE_V2))
+            break;
+
+        *StoreInterface = StoreInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, == , Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:49 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTd-0005Pr-NI; Fri, 11 Sep 2015 12:30:49 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTc-0005Pm-ON
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:48 +0000
Received: from [85.158.139.211] by server-5.bemta-5.messagelabs.com id
	D1/08-03819-879C2F55; Fri, 11 Sep 2015 12:30:48 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1441974646!31593128!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5117 invoked from network); 11 Sep 2015 12:30:47 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-16.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 12:30:47 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 347CE2056E
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:46 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 08:30:46 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=PxCVdPbokRKvXEPlQYaudBxdKuY=; b=g77eSW
	yPFl1apKiZvwRGedujH5HK6TSDglmQwpFyxg+Y061F9cY7V/CDyDWkVBFQ/3HoBH
	1kuLY+bVkXOm/XL+4lE2p6vCeyrMwBojNWKNP/W80i9RMaWWCEJcWrS18gRHbVN2
	YjQioSSBv6DNwwQaiAsg88nboWo2OI31WIm/o=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=PxCVdPbokRKvXEPlQYaudBxdKuY=; b=gmHmq
	QYFe5Jq+MBQGS2RSp3u/sVajmDYOnqk/RDYUmSMbWu0IMp4A7aaHjo9WQ85SSgrl
	tti02rUJ9D4X2gsGolAuCXP0b4oLr/edq2D40GLVp+QyVaZ4H8GUGbQOPIiqbFwi
	em7lUm+/Mlwae4Mz6922kZeLhotN5Lg+aJqsu4=
X-Sasl-enc: eRHDn2e24eyEloKrI01AFwkYToR9CSE+gLcyQg0DWv3p 1441974645
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 6CB966801BF
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:45 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F2C974.6020008@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:44 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key permissions
 to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

STORE interface now includes a function to change key permissions. This
allows granting key access to other, non-privileged domains.

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/store_interface.h |  68 ++++++++++++++++-
 src/xenbus/store.c        | 185 +++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 248 insertions(+), 5 deletions(-)

diff --git a/include/store_interface.h b/include/store_interface.h
index 5bcbba3..6775b27 100644
--- a/include/store_interface.h
+++ b/include/store_interface.h
@@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION    XENBUS_STORE_TRANSACTION, *PXENBUS_S
 */
 typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH, *PXENBUS_STORE_WATCH;
 
+/*! \typedef XENBUS_STORE_PERMISSION_MASK
+    \brief Bitmask of XenStore key permissions
+*/
+typedef enum _XENBUS_STORE_PERMISSION_MASK {
+    XENBUS_STORE_PERM_NONE = 0,
+    XENBUS_STORE_PERM_READ = 1,
+    XENBUS_STORE_PERM_WRITE = 2,
+} XENBUS_STORE_PERMISSION_MASK;
+
+/*! \typedef XENBUS_STORE_PERMISSION
+    \brief XenStore key permissions entry for a single domain
+*/
+typedef struct _XENBUS_STORE_PERMISSION {
+    USHORT Domain;
+    XENBUS_STORE_PERMISSION_MASK Mask;
+} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
+
 /*! \typedef XENBUS_STORE_ACQUIRE
     \brief Acquire a reference to the STORE interface
 
@@ -247,10 +264,36 @@ typedef VOID
     IN  PINTERFACE  Interface
     );
 
+/*! \typedef XENBUS_STORE_PERMISSIONS_SET
+    \brief Set permissions for a XenStore key
+
+    \param Interface The interface header
+    \param Transaction The transaction handle (NULL if this is not
+    part of a transaction)
+    \param Prefix An optional prefix for the \a Node
+    \param Node The concatenation of the \a Prefix and this value specifies
+    the XenStore key to set permissions of
+    \param Permissions An array of permissions to set
+    \param NumberPermissions Number of elements in the \a Permissions array
+*/
+typedef NTSTATUS
+(*XENBUS_STORE_PERMISSIONS_SET)(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    );
+
 // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
 DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE, 
 0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
 
+/*! \struct _XENBUS_STORE_INTERFACE_V1
+    \brief STORE interface version 1
+    \ingroup interfaces
+*/
 struct _XENBUS_STORE_INTERFACE_V1 {
     INTERFACE                       Interface;
     XENBUS_STORE_ACQUIRE            StoreAcquire;
@@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
     XENBUS_STORE_POLL               StorePoll;
 };
 
-/*! \struct _XENBUS_STORE_INTERFACE_V1
-    \brief STORE interface version 1
+/*! \struct _XENBUS_STORE_INTERFACE_V2
+    \brief STORE interface version 2
     \ingroup interfaces
 */
-typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
+struct _XENBUS_STORE_INTERFACE_V2 {
+    INTERFACE                       Interface;
+    XENBUS_STORE_ACQUIRE            StoreAcquire;
+    XENBUS_STORE_RELEASE            StoreRelease;
+    XENBUS_STORE_FREE               StoreFree;
+    XENBUS_STORE_READ               StoreRead;
+    XENBUS_STORE_PRINTF             StorePrintf;
+    XENBUS_STORE_REMOVE             StoreRemove;
+    XENBUS_STORE_DIRECTORY          StoreDirectory;
+    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
+    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
+    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
+    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
+    XENBUS_STORE_POLL               StorePoll;
+    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
+};
+
+typedef struct _XENBUS_STORE_INTERFACE_V2 XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
 
 /*! \def XENBUS_STORE
     \brief Macro at assist in method invocation
@@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1 XENBUS_STORE_INTERFACE, *PXENBUS_STORE
 #endif  // _WINDLL
 
 #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
-#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
+#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
 
 #endif  // _XENBUS_STORE_INTERFACE_H
 
diff --git a/src/xenbus/store.c b/src/xenbus/store.c
index c54b0f0..cf5ac79 100644
--- a/src/xenbus/store.c
+++ b/src/xenbus/store.c
@@ -442,7 +442,6 @@ StoreIgnoreHeaderType(
     case XS_RELEASE:
     case XS_GET_DOMAIN_PATH:
     case XS_MKDIR:
-    case XS_SET_PERMS:
     case XS_IS_DOMAIN_INTRODUCED:
     case XS_RESUME:
     case XS_SET_TARGET:
@@ -470,6 +469,7 @@ StoreVerifyHeader(
         Header->type != XS_TRANSACTION_END &&
         Header->type != XS_WRITE &&
         Header->type != XS_RM &&
+        Header->type != XS_SET_PERMS &&
         Header->type != XS_WATCH_EVENT &&
         Header->type != XS_ERROR &&
         !StoreIgnoreHeaderType(Header->type)) {
@@ -1816,6 +1816,155 @@ StorePoll(
     KeReleaseSpinLockFromDpcLevel(&Context->Lock);
 }
 
+static NTSTATUS
+StorePermissionToString(
+    IN  PXENBUS_STORE_PERMISSION    Permission,
+    OUT PCHAR                       Buffer,
+    IN  ULONG                       BufferSize,
+    OUT PULONG                      UsedSize
+    )
+{
+    size_t                          Remaining;
+    NTSTATUS                        status = STATUS_INVALID_PARAMETER;
+
+    ASSERT(BufferSize > 1);
+
+    switch (Permission->Mask) {
+    case XENBUS_STORE_PERM_NONE:
+        *Buffer = 'n';
+        break;
+    case XENBUS_STORE_PERM_READ:
+        *Buffer = 'r';
+        break;
+    case XENBUS_STORE_PERM_WRITE:
+        *Buffer = 'w';
+        break;
+    case XENBUS_STORE_PERM_READ | XENBUS_STORE_PERM_WRITE:
+        *Buffer = 'b';
+        break;
+    default:
+        goto fail1;
+    }
+
+    status = RtlStringCbPrintfExA(Buffer + 1, BufferSize - 1, NULL, &Remaining, 0, "%u", Permission->Domain);
+    if (!NT_SUCCESS(status))
+        goto fail2;
+
+    *UsedSize = BufferSize - (ULONG)Remaining + 1;
+    return STATUS_SUCCESS;
+
+fail2:
+    Error("fail2\n");
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+    return status;
+}
+
+static NTSTATUS
+StorePermissionsSet(
+    IN  PINTERFACE                  Interface,
+    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
+    IN  PCHAR                       Prefix OPTIONAL,
+    IN  PCHAR                       Node,
+    IN  PXENBUS_STORE_PERMISSION    Permissions,
+    IN  ULONG                       NumberPermissions
+    )
+{
+    PXENBUS_STORE_CONTEXT           Context = Interface->Context;
+    XENBUS_STORE_REQUEST            Request;
+    PXENBUS_STORE_RESPONSE          Response;
+    NTSTATUS                        status;
+    ULONG                           Index, Length, Used;
+    PCHAR                           Path = NULL;
+    PCHAR                           PermissionString, Segment;
+
+    status = STATUS_NO_MEMORY;
+    PermissionString = __StoreAllocate(XENSTORE_PAYLOAD_MAX);
+    if (PermissionString == NULL)
+        goto fail1;
+
+    if (Prefix == NULL)
+        Length = (ULONG)strlen(Node) + sizeof(CHAR);
+    else
+        Length = (ULONG)strlen(Prefix) + 1 + (ULONG)strlen(Node) + sizeof(CHAR);
+
+    Path = __StoreAllocate(Length);
+
+    if (Path == NULL)
+        goto fail2;
+
+    status = (Prefix == NULL) ?
+        RtlStringCbPrintfA(Path, Length, "%s", Node) :
+        RtlStringCbPrintfA(Path, Length, "%s/%s", Prefix, Node);
+    ASSERT(NT_SUCCESS(status));
+
+    RtlZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST));
+
+    for (Index = 0, Segment = PermissionString, Length = XENSTORE_PAYLOAD_MAX;
+         Index < NumberPermissions;
+         Index++) {
+        status = StorePermissionToString(&Permissions[Index], Segment, Length, &Used);
+        if (!NT_SUCCESS(status))
+            goto fail3;
+
+        Segment += Used;
+        Length -= Used;
+    }
+
+    status = StorePrepareRequest(Context,
+                                 &Request,
+                                 Transaction,
+                                 XS_SET_PERMS,
+                                 Path, strlen(Path),
+                                 "", 1,
+                                 PermissionString, XENSTORE_PAYLOAD_MAX - Length,
+                                 NULL, 0);
+
+    if (!NT_SUCCESS(status))
+        goto fail4;
+
+    status = STATUS_NO_MEMORY;
+    Response = StoreSubmitRequest(Context, &Request);
+    if (Response == NULL)
+        goto fail5;
+
+    status = StoreCheckResponse(Response);
+    if (!NT_SUCCESS(status))
+        goto fail6;
+
+    StoreFreeResponse(Response);
+    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
+
+    __StoreFree(Path);
+    __StoreFree(PermissionString);
+
+    return STATUS_SUCCESS;
+
+fail6:
+    Error("fail6\n");
+    StoreFreeResponse(Response);
+
+fail5:
+    Error("fail5\n");
+
+fail4:
+    Error("fail4\n");
+
+fail3:
+    Error("fail3\n");
+    __StoreFree(Path);
+    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
+
+fail2:
+    Error("fail2\n");
+    __StoreFree(PermissionString);
+
+fail1:
+    Error("fail1 (%08x)\n", status);
+    return status;
+}
+
 static
 _Function_class_(KSERVICE_ROUTINE)
 _IRQL_requires_(HIGH_LEVEL)
@@ -2327,6 +2476,23 @@ static struct _XENBUS_STORE_INTERFACE_V1 StoreInterfaceVersion1 = {
     StorePoll
 };
                      
+static struct _XENBUS_STORE_INTERFACE_V2 StoreInterfaceVersion2 = {
+    { sizeof(struct _XENBUS_STORE_INTERFACE_V2), 2, NULL, NULL, NULL },
+    StoreAcquire,
+    StoreRelease,
+    StoreFree,
+    StoreRead,
+    StorePrintf,
+    StoreRemove,
+    StoreDirectory,
+    StoreTransactionStart,
+    StoreTransactionEnd,
+    StoreWatchAdd,
+    StoreWatchRemove,
+    StorePoll,
+    StorePermissionsSet
+};
+
 NTSTATUS
 StoreInitialize(
     IN  PXENBUS_FDO             Fdo,
@@ -2426,6 +2592,23 @@ StoreGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 2: {
+        struct _XENBUS_STORE_INTERFACE_V2  *StoreInterface;
+
+        StoreInterface = (struct _XENBUS_STORE_INTERFACE_V2 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof(struct _XENBUS_STORE_INTERFACE_V2))
+            break;
+
+        *StoreInterface = StoreInterfaceVersion2;
+
+        ASSERT3U(Interface->Version, == , Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTi-0005QU-PS; Fri, 11 Sep 2015 12:30:54 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTh-0005QN-EV
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:53 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	07/65-25435-C79C2F55; Fri, 11 Sep 2015 12:30:52 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441974651!30131041!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21080 invoked from network); 11 Sep 2015 12:30:52 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-15.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 12:30:52 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 492EF2024D
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:51 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 08:30:51 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=nooqP1win9XeZc4AZY+IH0vSrl8=; b=RxmPx0
	QsJASnYTxseVK2qALaoLJbqVix1zskjJeqdzWGd6rDQqL9CjUsKK9j6Nk/7ONrCX
	DdWXoxYdA6K6RmerooTKjMtQXshqc69a0sW0HqUhG45yb4qZysa8C+cy280k4mcK
	D9eXbDeLGGuEzyirxAs7P3TTj+BmsINtU95dU=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=nooqP1win9XeZc4AZY+IH0vSrl8=; b=JM8ID
	XUPKzH7TMkCyuhaja2Uuce6zDJQUJCLla2N4I7ddXhPhybC68U2rlyZjSnpzxOhg
	hcLQwaz7e4zMqBkdQFsuhpU6DYo9MvUDWyvPGvBmXMHDseAFE5dg6mCO9BCN4k8W
	Fim/bsIiKXhMfNjKq67yo/b3Xt/XCsNj9okwLM=
X-Sasl-enc: scvhtFRnJww2jmZkTSzTN99bwQDczf7PwqOjFb7bZV6e 1441974651
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id DCBC46800B2
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:50 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N0010
Message-ID: <55F2C979.8030004@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PDO revision 0x0800000B includes STORE interface version 2 (added
StorePermissionsSet()) and GNTTAB interface version 2 (added
GnttabMapForeignPages() and GnttabUnmapForeignPages()).

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/revision.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/revision.h b/include/revision.h
index 7f261fc..47db033 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -46,6 +46,7 @@
 //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
 #define DEFINE_REVISION_TABLE                                               \
     DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
-    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
+    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1),    \
+    DEFINE_REVISION(0x0800000B,  1,  2,  5,  1,  2,  1,  1,  2,  1,  1)
 
 #endif  // _REVISION_H
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 12:30:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 12:30:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaNTi-0005QU-PS; Fri, 11 Sep 2015 12:30:54 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaNTh-0005QN-EV
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 12:30:53 +0000
Received: from [193.109.254.147] by server-3.bemta-14.messagelabs.com id
	07/65-25435-C79C2F55; Fri, 11 Sep 2015 12:30:52 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1441974651!30131041!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 21080 invoked from network); 11 Sep 2015 12:30:52 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-15.tower-27.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 11 Sep 2015 12:30:52 -0000
Received: from compute4.internal (compute4.nyi.internal [10.202.2.44])
	by mailout.nyi.internal (Postfix) with ESMTP id 492EF2024D
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:51 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute4.internal (MEProxy); Fri, 11 Sep 2015 08:30:51 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=nooqP1win9XeZc4AZY+IH0vSrl8=; b=RxmPx0
	QsJASnYTxseVK2qALaoLJbqVix1zskjJeqdzWGd6rDQqL9CjUsKK9j6Nk/7ONrCX
	DdWXoxYdA6K6RmerooTKjMtQXshqc69a0sW0HqUhG45yb4qZysa8C+cy280k4mcK
	D9eXbDeLGGuEzyirxAs7P3TTj+BmsINtU95dU=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=nooqP1win9XeZc4AZY+IH0vSrl8=; b=JM8ID
	XUPKzH7TMkCyuhaja2Uuce6zDJQUJCLla2N4I7ddXhPhybC68U2rlyZjSnpzxOhg
	hcLQwaz7e4zMqBkdQFsuhpU6DYo9MvUDWyvPGvBmXMHDseAFE5dg6mCO9BCN4k8W
	Fim/bsIiKXhMfNjKq67yo/b3Xt/XCsNj9okwLM=
X-Sasl-enc: scvhtFRnJww2jmZkTSzTN99bwQDczf7PwqOjFb7bZV6e 1441974651
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id DCBC46800B2
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 08:30:50 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N0010
Message-ID: <55F2C979.8030004@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 14:30:49 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PDO revision 0x0800000B includes STORE interface version 2 (added
StorePermissionsSet()) and GNTTAB interface version 2 (added
GnttabMapForeignPages() and GnttabUnmapForeignPages()).

Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
---
 include/revision.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/include/revision.h b/include/revision.h
index 7f261fc..47db033 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -46,6 +46,7 @@
 //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
 #define DEFINE_REVISION_TABLE                                               \
     DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
-    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
+    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1),    \
+    DEFINE_REVISION(0x0800000B,  1,  2,  5,  1,  2,  1,  1,  2,  1,  1)
 
 #endif  // _REVISION_H
-- 
1.8.1.msysgit.1



_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:34:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:34:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQLq-0002gH-6A; Fri, 11 Sep 2015 15:34:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQLo-0002g1-Il
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:34:56 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	C4/31-10715-F94F2F55; Fri, 11 Sep 2015 15:34:55 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441985693!48974895!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5535 invoked from network); 11 Sep 2015 15:34:54 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:34:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769412"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ7I2txecYNmpFPkKZlBnpc//w7Z43dWMA
Date: Fri, 11 Sep 2015 15:34:52 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE57@AMSPEX01CL01.citrite.net>
References: <55F2C961.708@invisiblethingslab.com>
In-Reply-To: <55F2C961.708@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:30
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
> the GNTTAB interface
> 
> GNTTAB interface now includes functions to map and unmap memory pages
> granted by a foreign domain. The page(s) are mapped under an address
> allocated from the PCI BAR space.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

There's one or two minor stylistic issues but I'll fix those up myself.

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  include/gnttab_interface.h |  54 ++++++++++++++-
>  include/xen.h              |  19 ++++++
>  src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
>  src/xenbus/gnttab.c        | 165
> +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 352 insertions(+), 2 deletions(-)
> 
> diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
> index d29440a..b0f4adf 100644
> --- a/include/gnttab_interface.h
> +++ b/include/gnttab_interface.h
> @@ -163,6 +163,39 @@ typedef VOID
>      IN  PXENBUS_GNTTAB_CACHE    Cache
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
> +    \brief Map foreign memory pages into the system address space
> +
> +    \param Interface The interface header
> +    \param Domain The domid of the foreign domain that granted the pages
> +    \param NumberPages Number of pages to map
> +    \param References Array of grant reference numbers shared by the
> foreign domain
> +    \param ReadOnly If TRUE, pages are mapped with read-only access
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    );
> +
> +/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> +    \brief Unmap foreign memory pages from the system address space
> +
> +    \param Interface The interface header
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
>  DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
>  0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
> @@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
>      XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
>  };
> 
> -typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
> +    \brief GNTTAB interface version 2
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V2 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +typedef struct _XENBUS_GNTTAB_INTERFACE_V2
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> 
>  /*! \def XENBUS_GNTTAB
>      \brief Macro at assist in method invocation
> @@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
>  #endif  // _WINDLL
> 
>  #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
> -#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
> +#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
> 
>  #endif  // _XENBUS_GNTTAB_INTERFACE_H
> 
> diff --git a/include/xen.h b/include/xen.h
> index 6007582..23c7ac0 100644
> --- a/include/xen.h
> +++ b/include/xen.h
> @@ -258,6 +258,25 @@ GrantTableCopy(
>      IN  ULONG               Count
>      );
> 
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    );
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                   Handle,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // SCHED
> 
>  __checkReturn
> diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
> index 6facb3f..6b00f65 100644
> --- a/src/xen/grant_table.c
> +++ b/src/xen/grant_table.c
> @@ -38,6 +38,35 @@
>  #include "dbg_print.h"
>  #include "assert.h"
> 
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +// Most of the GNTST_* values don't have meaningful NTSTATUS
> counterparts,
> +// this macro translates those that do.
> +#define GNTST_TO_STATUS(_gntst, _status)                    \
> +        do {                                                \
> +            switch (_gntst) {                               \
> +            case GNTST_okay:                                \
> +                _status = STATUS_SUCCESS;                   \
> +                break;                                      \
> +                                                            \
> +            case GNTST_bad_handle:                          \
> +                _status = STATUS_INVALID_HANDLE;            \
> +                break;                                      \
> +                                                            \
> +            case GNTST_permission_denied:                   \
> +                _status = STATUS_ACCESS_DENIED;             \
> +                break;                                      \
> +                                                            \
> +            case GNTST_eagain:                              \
> +                _status = STATUS_RETRY;                     \
> +                break;                                      \
> +                                                            \
> +            default:                                        \
> +                _status = STATUS_UNSUCCESSFUL;              \
> +                break;                                      \
> +            }                                               \
> +        } while (FALSE)
> +
>  static LONG_PTR
>  GrantTableOp(
>      IN  ULONG   Command,
> @@ -131,3 +160,90 @@ fail1:
> 
>      return status;
>  }
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    )
> +{
> +    struct gnttab_map_grant_ref op;
> +    LONG_PTR                    rc;
> +    NTSTATUS                    status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.dom = Domain;
> +    op.ref = GrantRef;
> +    op.flags = GNTMAP_host_map;
> +    if (ReadOnly)
> +        op.flags |= GNTMAP_readonly;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    *Handle = op.handle;
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                     Handle,
> +    IN  PHYSICAL_ADDRESS          Address
> +    )
> +{
> +    struct gnttab_unmap_grant_ref op;
> +    LONG_PTR                      rc;
> +    NTSTATUS                      status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.handle = Handle;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
> index 165e38f..32b43c7 100644
> --- a/src/xenbus/gnttab.c
> +++ b/src/xenbus/gnttab.c
> @@ -40,6 +40,7 @@
>  #include "dbg_print.h"
>  #include "assert.h"
>  #include "util.h"
> +#include "hash_table.h"
> 
>  #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
>  #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof
> (grant_entry_v1_t))
> @@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
>      grant_entry_v1_t    Entry;
>  };
> 
> +typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
> +    ULONG               NumberPages;
> +    ULONG               MapHandles[1];
> +} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
> +
>  struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_FDO                 Fdo;
>      KSPIN_LOCK                  Lock;
> @@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
>      XENBUS_DEBUG_INTERFACE      DebugInterface;
>      PXENBUS_DEBUG_CALLBACK      DebugCallback;
> +    PXENBUS_HASH_TABLE          MapTable;
>      LIST_ENTRY                  List;
>  };
> 
> @@ -534,6 +541,124 @@ GnttabGetReference(
>      return (ULONG)Entry->Reference;
>  }
> 
> +static NTSTATUS
> +GnttabMapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    )
> +{
> +    NTSTATUS                    status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE,
> Address);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = STATUS_INSUFFICIENT_RESOURCES;
> +    MapEntry =
> __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY,
> MapHandles) + NumberPages*sizeof(ULONG));
> +    if (!MapEntry)
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address->QuadPart;
> +    MapEntry->NumberPages = NumberPages;
> +
> +    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
> +        status = GrantTableMapForeignPage(Domain,
> +                                          References[PageIndex],
> +                                          PageAddress,
> +                                          ReadOnly,
> +                                          &MapEntry->MapHandles[PageIndex]);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    status = HashTableAdd(Context->MapTable,
> +                          (ULONG_PTR)Address->QuadPart,
> +                          (ULONG_PTR)MapEntry);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    return STATUS_SUCCESS;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    while (PageIndex > 0) {
> +        --PageIndex;
> +        PageAddress.QuadPart -= PAGE_SIZE;
> +        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress)));
> +    }
> +
> +    __GnttabFree(MapEntry);
> +
> +fail2:
> +    Error("fail2\n");
> +    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
> +
> +fail1:
> +    Error("fail1: (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +GnttabUnmapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    )
> +{
> +    NTSTATUS                    Status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    Status = HashTableLookup(Context->MapTable,
> (ULONG_PTR)Address.QuadPart, (PULONG_PTR)&MapEntry);
> +    if (!NT_SUCCESS(Status))
> +        goto fail1;
> +
> +    Status = HashTableRemove(Context->MapTable,
> (ULONG_PTR)Address.QuadPart);
> +    if (!NT_SUCCESS(Status))
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address.QuadPart;
> +
> +    for (PageIndex = 0; PageIndex < MapEntry->NumberPages;
> PageIndex++) {
> +        Status = GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress);
> +        if (!NT_SUCCESS(Status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages *
> PAGE_SIZE);
> +    __GnttabFree(MapEntry);
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +    KeBugCheckEx(MEMORY_MANAGEMENT,
> (ULONG_PTR)XENBUS_GNTTAB_TAG, (ULONG_PTR)PageAddress.QuadPart,
> (ULONG_PTR)MapEntry->MapHandles[PageIndex],
> (ULONG_PTR)Address.QuadPart);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1: (%08x)\n", Status);
> +    return Status;
> +}
> +
>  static VOID
>  GnttabSuspendCallbackEarly(
>      IN  PVOID               Argument
> @@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1
> GnttabInterfaceVersion1 = {
>      GnttabDestroyCache
>  };
> 
> +static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 =
> {
> +    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL
> },
> +    GnttabAcquire,
> +    GnttabRelease,
> +    GnttabCreateCache,
> +    GnttabPermitForeignAccess,
> +    GnttabRevokeForeignAccess,
> +    GnttabGetReference,
> +    GnttabDestroyCache,
> +    GnttabMapForeignPages,
> +    GnttabUnmapForeignPages
> +};
> +
>  NTSTATUS
>  GnttabInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -836,12 +974,19 @@ GnttabInitialize(
>      InitializeListHead(&(*Context)->List);
>      KeInitializeSpinLock(&(*Context)->Lock);
> 
> +    status = HashTableCreate(&(*Context)->MapTable);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
>      (*Context)->Fdo = Fdo;
> 
>      Trace("<====\n");
> 
>      return STATUS_SUCCESS;
> 
> +fail2:
> +    Error("fail2\n");
> +
>  fail1:
>      Error("fail1 (%08x)\n", status);
> 
> @@ -878,6 +1023,23 @@ GnttabGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
> +
> +        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2
> *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
> +            break;
> +
> +        *GnttabInterface = GnttabInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, ==, Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> @@ -895,6 +1057,9 @@ GnttabTeardown(
> 
>      Context->Fdo = NULL;
> 
> +    HashTableDestroy(Context->MapTable);
> +    Context->MapTable = NULL;
> +
>      RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
>      RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
> 
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:34:58 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:34:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQLq-0002gH-6A; Fri, 11 Sep 2015 15:34:58 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQLo-0002g1-Il
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:34:56 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	C4/31-10715-F94F2F55; Fri, 11 Sep 2015 15:34:55 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-14.tower-27.messagelabs.com!1441985693!48974895!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5535 invoked from network); 11 Sep 2015 15:34:54 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-14.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:34:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769412"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions
	to the GNTTAB interface
Thread-Index: AQHQ7I2txecYNmpFPkKZlBnpc//w7Z43dWMA
Date: Fri, 11 Sep 2015 15:34:52 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE57@AMSPEX01CL01.citrite.net>
References: <55F2C961.708@invisiblethingslab.com>
In-Reply-To: <55F2C961.708@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions
 to the GNTTAB interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:30
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 1/3] Add foreign page mapping functions to
> the GNTTAB interface
> 
> GNTTAB interface now includes functions to map and unmap memory pages
> granted by a foreign domain. The page(s) are mapped under an address
> allocated from the PCI BAR space.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

There's one or two minor stylistic issues but I'll fix those up myself.

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  include/gnttab_interface.h |  54 ++++++++++++++-
>  include/xen.h              |  19 ++++++
>  src/xen/grant_table.c      | 116 +++++++++++++++++++++++++++++++
>  src/xenbus/gnttab.c        | 165
> +++++++++++++++++++++++++++++++++++++++++++++
>  4 files changed, 352 insertions(+), 2 deletions(-)
> 
> diff --git a/include/gnttab_interface.h b/include/gnttab_interface.h
> index d29440a..b0f4adf 100644
> --- a/include/gnttab_interface.h
> +++ b/include/gnttab_interface.h
> @@ -163,6 +163,39 @@ typedef VOID
>      IN  PXENBUS_GNTTAB_CACHE    Cache
>      );
> 
> +/*! \typedef XENBUS_GNTTAB_MAP_FOREIGN_PAGES
> +    \brief Map foreign memory pages into the system address space
> +
> +    \param Interface The interface header
> +    \param Domain The domid of the foreign domain that granted the pages
> +    \param NumberPages Number of pages to map
> +    \param References Array of grant reference numbers shared by the
> foreign domain
> +    \param ReadOnly If TRUE, pages are mapped with read-only access
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_MAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    );
> +
> +/*! \typedef XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> +    \brief Unmap foreign memory pages from the system address space
> +
> +    \param Interface The interface header
> +    \param Address The physical address that the foreign pages are mapped
> under
> +*/
> +typedef NTSTATUS
> +(*XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES)(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // {763679C5-E5C2-4A6D-8B88-6BB02EC42D8E}
>  DEFINE_GUID(GUID_XENBUS_GNTTAB_INTERFACE,
>  0x763679c5, 0xe5c2, 0x4a6d, 0x8b, 0x88, 0x6b, 0xb0, 0x2e, 0xc4, 0x2d, 0x8e);
> @@ -182,7 +215,24 @@ struct _XENBUS_GNTTAB_INTERFACE_V1 {
>      XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
>  };
> 
> -typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> +/*! \struct _XENBUS_GNTTAB_INTERFACE_V2
> +    \brief GNTTAB interface version 2
> +    \ingroup interfaces
> +*/
> +struct _XENBUS_GNTTAB_INTERFACE_V2 {
> +    INTERFACE                           Interface;
> +    XENBUS_GNTTAB_ACQUIRE               GnttabAcquire;
> +    XENBUS_GNTTAB_RELEASE               GnttabRelease;
> +    XENBUS_GNTTAB_CREATE_CACHE          GnttabCreateCache;
> +    XENBUS_GNTTAB_PERMIT_FOREIGN_ACCESS
> GnttabPermitForeignAccess;
> +    XENBUS_GNTTAB_REVOKE_FOREIGN_ACCESS
> GnttabRevokeForeignAccess;
> +    XENBUS_GNTTAB_GET_REFERENCE         GnttabGetReference;
> +    XENBUS_GNTTAB_DESTROY_CACHE         GnttabDestroyCache;
> +    XENBUS_GNTTAB_MAP_FOREIGN_PAGES     GnttabMapForeignPages;
> +    XENBUS_GNTTAB_UNMAP_FOREIGN_PAGES
> GnttabUnmapForeignPages;
> +};
> +
> +typedef struct _XENBUS_GNTTAB_INTERFACE_V2
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNTTAB_INTERFACE;
> 
>  /*! \def XENBUS_GNTTAB
>      \brief Macro at assist in method invocation
> @@ -193,7 +243,7 @@ typedef struct _XENBUS_GNTTAB_INTERFACE_V1
> XENBUS_GNTTAB_INTERFACE, *PXENBUS_GNT
>  #endif  // _WINDLL
> 
>  #define XENBUS_GNTTAB_INTERFACE_VERSION_MIN 1
> -#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 1
> +#define XENBUS_GNTTAB_INTERFACE_VERSION_MAX 2
> 
>  #endif  // _XENBUS_GNTTAB_INTERFACE_H
> 
> diff --git a/include/xen.h b/include/xen.h
> index 6007582..23c7ac0 100644
> --- a/include/xen.h
> +++ b/include/xen.h
> @@ -258,6 +258,25 @@ GrantTableCopy(
>      IN  ULONG               Count
>      );
> 
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    );
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                   Handle,
> +    IN  PHYSICAL_ADDRESS        Address
> +    );
> +
>  // SCHED
> 
>  __checkReturn
> diff --git a/src/xen/grant_table.c b/src/xen/grant_table.c
> index 6facb3f..6b00f65 100644
> --- a/src/xen/grant_table.c
> +++ b/src/xen/grant_table.c
> @@ -38,6 +38,35 @@
>  #include "dbg_print.h"
>  #include "assert.h"
> 
> +#pragma warning(disable:4127)   // conditional expression is constant
> +
> +// Most of the GNTST_* values don't have meaningful NTSTATUS
> counterparts,
> +// this macro translates those that do.
> +#define GNTST_TO_STATUS(_gntst, _status)                    \
> +        do {                                                \
> +            switch (_gntst) {                               \
> +            case GNTST_okay:                                \
> +                _status = STATUS_SUCCESS;                   \
> +                break;                                      \
> +                                                            \
> +            case GNTST_bad_handle:                          \
> +                _status = STATUS_INVALID_HANDLE;            \
> +                break;                                      \
> +                                                            \
> +            case GNTST_permission_denied:                   \
> +                _status = STATUS_ACCESS_DENIED;             \
> +                break;                                      \
> +                                                            \
> +            case GNTST_eagain:                              \
> +                _status = STATUS_RETRY;                     \
> +                break;                                      \
> +                                                            \
> +            default:                                        \
> +                _status = STATUS_UNSUCCESSFUL;              \
> +                break;                                      \
> +            }                                               \
> +        } while (FALSE)
> +
>  static LONG_PTR
>  GrantTableOp(
>      IN  ULONG   Command,
> @@ -131,3 +160,90 @@ fail1:
> 
>      return status;
>  }
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableMapForeignPage(
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   GrantRef,
> +    IN  PHYSICAL_ADDRESS        Address,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT ULONG                   *Handle
> +    )
> +{
> +    struct gnttab_map_grant_ref op;
> +    LONG_PTR                    rc;
> +    NTSTATUS                    status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.dom = Domain;
> +    op.ref = GrantRef;
> +    op.flags = GNTMAP_host_map;
> +    if (ReadOnly)
> +        op.flags |= GNTMAP_readonly;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_map_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    *Handle = op.handle;
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> +
> +__checkReturn
> +XEN_API
> +NTSTATUS
> +GrantTableUnmapForeignPage(
> +    IN  ULONG                     Handle,
> +    IN  PHYSICAL_ADDRESS          Address
> +    )
> +{
> +    struct gnttab_unmap_grant_ref op;
> +    LONG_PTR                      rc;
> +    NTSTATUS                      status;
> +
> +    RtlZeroMemory(&op, sizeof(op));
> +    op.handle = Handle;
> +    op.host_addr = Address.QuadPart;
> +
> +    rc = GrantTableOp(GNTTABOP_unmap_grant_ref, &op, 1);
> +
> +    if (rc < 0) {
> +        ERRNO_TO_STATUS(-rc, status);
> +        goto fail1;
> +    }
> +
> +    if (op.status != GNTST_okay) {
> +        GNTST_TO_STATUS(op.status, status);
> +        Error("hypercall status: %d\n", op.status);
> +        goto fail2;
> +    }
> +
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +
> +    return status;
> +}
> diff --git a/src/xenbus/gnttab.c b/src/xenbus/gnttab.c
> index 165e38f..32b43c7 100644
> --- a/src/xenbus/gnttab.c
> +++ b/src/xenbus/gnttab.c
> @@ -40,6 +40,7 @@
>  #include "dbg_print.h"
>  #include "assert.h"
>  #include "util.h"
> +#include "hash_table.h"
> 
>  #define XENBUS_GNTTAB_MAXIMUM_FRAME_COUNT  32
>  #define XENBUS_GNTTAB_ENTRY_PER_FRAME      (PAGE_SIZE / sizeof
> (grant_entry_v1_t))
> @@ -68,6 +69,11 @@ struct _XENBUS_GNTTAB_ENTRY {
>      grant_entry_v1_t    Entry;
>  };
> 
> +typedef struct _XENBUS_GNTTAB_MAP_ENTRY {
> +    ULONG               NumberPages;
> +    ULONG               MapHandles[1];
> +} XENBUS_GNTTAB_MAP_ENTRY, *PXENBUS_GNTTAB_MAP_ENTRY;
> +
>  struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_FDO                 Fdo;
>      KSPIN_LOCK                  Lock;
> @@ -82,6 +88,7 @@ struct _XENBUS_GNTTAB_CONTEXT {
>      PXENBUS_SUSPEND_CALLBACK    SuspendCallbackEarly;
>      XENBUS_DEBUG_INTERFACE      DebugInterface;
>      PXENBUS_DEBUG_CALLBACK      DebugCallback;
> +    PXENBUS_HASH_TABLE          MapTable;
>      LIST_ENTRY                  List;
>  };
> 
> @@ -534,6 +541,124 @@ GnttabGetReference(
>      return (ULONG)Entry->Reference;
>  }
> 
> +static NTSTATUS
> +GnttabMapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  USHORT                  Domain,
> +    IN  ULONG                   NumberPages,
> +    IN  PULONG                  References,
> +    IN  BOOLEAN                 ReadOnly,
> +    OUT PHYSICAL_ADDRESS        *Address
> +    )
> +{
> +    NTSTATUS                    status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    status = FdoAllocateIoSpace(Context->Fdo, NumberPages * PAGE_SIZE,
> Address);
> +    if (!NT_SUCCESS(status))
> +        goto fail1;
> +
> +    status = STATUS_INSUFFICIENT_RESOURCES;
> +    MapEntry =
> __GnttabAllocate(FIELD_OFFSET(XENBUS_GNTTAB_MAP_ENTRY,
> MapHandles) + NumberPages*sizeof(ULONG));
> +    if (!MapEntry)
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address->QuadPart;
> +    MapEntry->NumberPages = NumberPages;
> +
> +    for (PageIndex = 0; PageIndex < NumberPages; PageIndex++) {
> +        status = GrantTableMapForeignPage(Domain,
> +                                          References[PageIndex],
> +                                          PageAddress,
> +                                          ReadOnly,
> +                                          &MapEntry->MapHandles[PageIndex]);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    status = HashTableAdd(Context->MapTable,
> +                          (ULONG_PTR)Address->QuadPart,
> +                          (ULONG_PTR)MapEntry);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    return STATUS_SUCCESS;
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +
> +    while (PageIndex > 0) {
> +        --PageIndex;
> +        PageAddress.QuadPart -= PAGE_SIZE;
> +        ASSERT(NT_SUCCESS(GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress)));
> +    }
> +
> +    __GnttabFree(MapEntry);
> +
> +fail2:
> +    Error("fail2\n");
> +    FdoFreeIoSpace(Context->Fdo, *Address, NumberPages * PAGE_SIZE);
> +
> +fail1:
> +    Error("fail1: (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +GnttabUnmapForeignPages(
> +    IN  PINTERFACE              Interface,
> +    IN  PHYSICAL_ADDRESS        Address
> +    )
> +{
> +    NTSTATUS                    Status;
> +    PXENBUS_GNTTAB_CONTEXT      Context = Interface->Context;
> +    ULONG                       PageIndex;
> +    PHYSICAL_ADDRESS            PageAddress;
> +    PXENBUS_GNTTAB_MAP_ENTRY    MapEntry;
> +
> +    Status = HashTableLookup(Context->MapTable,
> (ULONG_PTR)Address.QuadPart, (PULONG_PTR)&MapEntry);
> +    if (!NT_SUCCESS(Status))
> +        goto fail1;
> +
> +    Status = HashTableRemove(Context->MapTable,
> (ULONG_PTR)Address.QuadPart);
> +    if (!NT_SUCCESS(Status))
> +        goto fail2;
> +
> +    PageAddress.QuadPart = Address.QuadPart;
> +
> +    for (PageIndex = 0; PageIndex < MapEntry->NumberPages;
> PageIndex++) {
> +        Status = GrantTableUnmapForeignPage(MapEntry-
> >MapHandles[PageIndex], PageAddress);
> +        if (!NT_SUCCESS(Status))
> +            goto fail3;
> +
> +        PageAddress.QuadPart += PAGE_SIZE;
> +    }
> +
> +    FdoFreeIoSpace(Context->Fdo, Address, MapEntry->NumberPages *
> PAGE_SIZE);
> +    __GnttabFree(MapEntry);
> +    return STATUS_SUCCESS;
> +
> +fail3:
> +    Error("fail3\n");
> +    KeBugCheckEx(MEMORY_MANAGEMENT,
> (ULONG_PTR)XENBUS_GNTTAB_TAG, (ULONG_PTR)PageAddress.QuadPart,
> (ULONG_PTR)MapEntry->MapHandles[PageIndex],
> (ULONG_PTR)Address.QuadPart);
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1: (%08x)\n", Status);
> +    return Status;
> +}
> +
>  static VOID
>  GnttabSuspendCallbackEarly(
>      IN  PVOID               Argument
> @@ -789,6 +914,19 @@ static struct _XENBUS_GNTTAB_INTERFACE_V1
> GnttabInterfaceVersion1 = {
>      GnttabDestroyCache
>  };
> 
> +static struct _XENBUS_GNTTAB_INTERFACE_V2   GnttabInterfaceVersion2 =
> {
> +    { sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2), 2, NULL, NULL, NULL
> },
> +    GnttabAcquire,
> +    GnttabRelease,
> +    GnttabCreateCache,
> +    GnttabPermitForeignAccess,
> +    GnttabRevokeForeignAccess,
> +    GnttabGetReference,
> +    GnttabDestroyCache,
> +    GnttabMapForeignPages,
> +    GnttabUnmapForeignPages
> +};
> +
>  NTSTATUS
>  GnttabInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -836,12 +974,19 @@ GnttabInitialize(
>      InitializeListHead(&(*Context)->List);
>      KeInitializeSpinLock(&(*Context)->Lock);
> 
> +    status = HashTableCreate(&(*Context)->MapTable);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
>      (*Context)->Fdo = Fdo;
> 
>      Trace("<====\n");
> 
>      return STATUS_SUCCESS;
> 
> +fail2:
> +    Error("fail2\n");
> +
>  fail1:
>      Error("fail1 (%08x)\n", status);
> 
> @@ -878,6 +1023,23 @@ GnttabGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_GNTTAB_INTERFACE_V2  *GnttabInterface;
> +
> +        GnttabInterface = (struct _XENBUS_GNTTAB_INTERFACE_V2
> *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_GNTTAB_INTERFACE_V2))
> +            break;
> +
> +        *GnttabInterface = GnttabInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, ==, Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> @@ -895,6 +1057,9 @@ GnttabTeardown(
> 
>      Context->Fdo = NULL;
> 
> +    HashTableDestroy(Context->MapTable);
> +    Context->MapTable = NULL;
> +
>      RtlZeroMemory(&Context->Lock, sizeof (KSPIN_LOCK));
>      RtlZeroMemory(&Context->List, sizeof (LIST_ENTRY));
> 
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:35:56 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:35:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQMm-0002lA-9i; Fri, 11 Sep 2015 15:35:56 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQMk-0002l1-IX
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:35:54 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	C8/6B-28791-9D4F2F55; Fri, 11 Sep 2015 15:35:53 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441985750!37538590!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27543 invoked from network); 11 Sep 2015 15:35:50 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:35:50 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769485"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/3] Add support for changing key
	permissions to the STORE interface
Thread-Index: AQHQ7I3QUPNpGufczkeHO21Jcr+JTp43dbrQ
Date: Fri, 11 Sep 2015 15:35:49 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE67@AMSPEX01CL01.citrite.net>
References: <55F2C974.6020008@invisiblethingslab.com>
In-Reply-To: <55F2C974.6020008@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/3] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:31
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key
> permissions to the STORE interface
> 
> STORE interface now includes a function to change key permissions. This
> allows granting key access to other, non-privileged domains.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

Again a few stylistic issues and again I'll fix them.

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  include/store_interface.h |  68 ++++++++++++++++-
>  src/xenbus/store.c        | 185
> +++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 248 insertions(+), 5 deletions(-)
> 
> diff --git a/include/store_interface.h b/include/store_interface.h
> index 5bcbba3..6775b27 100644
> --- a/include/store_interface.h
> +++ b/include/store_interface.h
> @@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION
> XENBUS_STORE_TRANSACTION, *PXENBUS_S
>  */
>  typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH,
> *PXENBUS_STORE_WATCH;
> 
> +/*! \typedef XENBUS_STORE_PERMISSION_MASK
> +    \brief Bitmask of XenStore key permissions
> +*/
> +typedef enum _XENBUS_STORE_PERMISSION_MASK {
> +    XENBUS_STORE_PERM_NONE = 0,
> +    XENBUS_STORE_PERM_READ = 1,
> +    XENBUS_STORE_PERM_WRITE = 2,
> +} XENBUS_STORE_PERMISSION_MASK;
> +
> +/*! \typedef XENBUS_STORE_PERMISSION
> +    \brief XenStore key permissions entry for a single domain
> +*/
> +typedef struct _XENBUS_STORE_PERMISSION {
> +    USHORT Domain;
> +    XENBUS_STORE_PERMISSION_MASK Mask;
> +} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
> +
>  /*! \typedef XENBUS_STORE_ACQUIRE
>      \brief Acquire a reference to the STORE interface
> 
> @@ -247,10 +264,36 @@ typedef VOID
>      IN  PINTERFACE  Interface
>      );
> 
> +/*! \typedef XENBUS_STORE_PERMISSIONS_SET
> +    \brief Set permissions for a XenStore key
> +
> +    \param Interface The interface header
> +    \param Transaction The transaction handle (NULL if this is not
> +    part of a transaction)
> +    \param Prefix An optional prefix for the \a Node
> +    \param Node The concatenation of the \a Prefix and this value specifies
> +    the XenStore key to set permissions of
> +    \param Permissions An array of permissions to set
> +    \param NumberPermissions Number of elements in the \a Permissions
> array
> +*/
> +typedef NTSTATUS
> +(*XENBUS_STORE_PERMISSIONS_SET)(
> +    IN  PINTERFACE                  Interface,
> +    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
> +    IN  PCHAR                       Prefix OPTIONAL,
> +    IN  PCHAR                       Node,
> +    IN  PXENBUS_STORE_PERMISSION    Permissions,
> +    IN  ULONG                       NumberPermissions
> +    );
> +
>  // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
>  DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
>  0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
> 
> +/*! \struct _XENBUS_STORE_INTERFACE_V1
> +    \brief STORE interface version 1
> +    \ingroup interfaces
> +*/
>  struct _XENBUS_STORE_INTERFACE_V1 {
>      INTERFACE                       Interface;
>      XENBUS_STORE_ACQUIRE            StoreAcquire;
> @@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
>      XENBUS_STORE_POLL               StorePoll;
>  };
> 
> -/*! \struct _XENBUS_STORE_INTERFACE_V1
> -    \brief STORE interface version 1
> +/*! \struct _XENBUS_STORE_INTERFACE_V2
> +    \brief STORE interface version 2
>      \ingroup interfaces
>  */
> -typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> +struct _XENBUS_STORE_INTERFACE_V2 {
> +    INTERFACE                       Interface;
> +    XENBUS_STORE_ACQUIRE            StoreAcquire;
> +    XENBUS_STORE_RELEASE            StoreRelease;
> +    XENBUS_STORE_FREE               StoreFree;
> +    XENBUS_STORE_READ               StoreRead;
> +    XENBUS_STORE_PRINTF             StorePrintf;
> +    XENBUS_STORE_REMOVE             StoreRemove;
> +    XENBUS_STORE_DIRECTORY          StoreDirectory;
> +    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
> +    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
> +    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
> +    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
> +    XENBUS_STORE_POLL               StorePoll;
> +    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
> +};
> +
> +typedef struct _XENBUS_STORE_INTERFACE_V2
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> 
>  /*! \def XENBUS_STORE
>      \brief Macro at assist in method invocation
> @@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE
>  #endif  // _WINDLL
> 
>  #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
> -#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
> +#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
> 
>  #endif  // _XENBUS_STORE_INTERFACE_H
> 
> diff --git a/src/xenbus/store.c b/src/xenbus/store.c
> index c54b0f0..cf5ac79 100644
> --- a/src/xenbus/store.c
> +++ b/src/xenbus/store.c
> @@ -442,7 +442,6 @@ StoreIgnoreHeaderType(
>      case XS_RELEASE:
>      case XS_GET_DOMAIN_PATH:
>      case XS_MKDIR:
> -    case XS_SET_PERMS:
>      case XS_IS_DOMAIN_INTRODUCED:
>      case XS_RESUME:
>      case XS_SET_TARGET:
> @@ -470,6 +469,7 @@ StoreVerifyHeader(
>          Header->type != XS_TRANSACTION_END &&
>          Header->type != XS_WRITE &&
>          Header->type != XS_RM &&
> +        Header->type != XS_SET_PERMS &&
>          Header->type != XS_WATCH_EVENT &&
>          Header->type != XS_ERROR &&
>          !StoreIgnoreHeaderType(Header->type)) {
> @@ -1816,6 +1816,155 @@ StorePoll(
>      KeReleaseSpinLockFromDpcLevel(&Context->Lock);
>  }
> 
> +static NTSTATUS
> +StorePermissionToString(
> +    IN  PXENBUS_STORE_PERMISSION    Permission,
> +    OUT PCHAR                       Buffer,
> +    IN  ULONG                       BufferSize,
> +    OUT PULONG                      UsedSize
> +    )
> +{
> +    size_t                          Remaining;
> +    NTSTATUS                        status = STATUS_INVALID_PARAMETER;
> +
> +    ASSERT(BufferSize > 1);
> +
> +    switch (Permission->Mask) {
> +    case XENBUS_STORE_PERM_NONE:
> +        *Buffer = 'n';
> +        break;
> +    case XENBUS_STORE_PERM_READ:
> +        *Buffer = 'r';
> +        break;
> +    case XENBUS_STORE_PERM_WRITE:
> +        *Buffer = 'w';
> +        break;
> +    case XENBUS_STORE_PERM_READ | XENBUS_STORE_PERM_WRITE:
> +        *Buffer = 'b';
> +        break;
> +    default:
> +        goto fail1;
> +    }
> +
> +    status = RtlStringCbPrintfExA(Buffer + 1, BufferSize - 1, NULL,
> &Remaining, 0, "%u", Permission->Domain);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    *UsedSize = BufferSize - (ULONG)Remaining + 1;
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +StorePermissionsSet(
> +    IN  PINTERFACE                  Interface,
> +    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
> +    IN  PCHAR                       Prefix OPTIONAL,
> +    IN  PCHAR                       Node,
> +    IN  PXENBUS_STORE_PERMISSION    Permissions,
> +    IN  ULONG                       NumberPermissions
> +    )
> +{
> +    PXENBUS_STORE_CONTEXT           Context = Interface->Context;
> +    XENBUS_STORE_REQUEST            Request;
> +    PXENBUS_STORE_RESPONSE          Response;
> +    NTSTATUS                        status;
> +    ULONG                           Index, Length, Used;
> +    PCHAR                           Path = NULL;
> +    PCHAR                           PermissionString, Segment;
> +
> +    status = STATUS_NO_MEMORY;
> +    PermissionString = __StoreAllocate(XENSTORE_PAYLOAD_MAX);
> +    if (PermissionString == NULL)
> +        goto fail1;
> +
> +    if (Prefix == NULL)
> +        Length = (ULONG)strlen(Node) + sizeof(CHAR);
> +    else
> +        Length = (ULONG)strlen(Prefix) + 1 + (ULONG)strlen(Node) +
> sizeof(CHAR);
> +
> +    Path = __StoreAllocate(Length);
> +
> +    if (Path == NULL)
> +        goto fail2;
> +
> +    status = (Prefix == NULL) ?
> +        RtlStringCbPrintfA(Path, Length, "%s", Node) :
> +        RtlStringCbPrintfA(Path, Length, "%s/%s", Prefix, Node);
> +    ASSERT(NT_SUCCESS(status));
> +
> +    RtlZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST));
> +
> +    for (Index = 0, Segment = PermissionString, Length =
> XENSTORE_PAYLOAD_MAX;
> +         Index < NumberPermissions;
> +         Index++) {
> +        status = StorePermissionToString(&Permissions[Index], Segment,
> Length, &Used);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        Segment += Used;
> +        Length -= Used;
> +    }
> +
> +    status = StorePrepareRequest(Context,
> +                                 &Request,
> +                                 Transaction,
> +                                 XS_SET_PERMS,
> +                                 Path, strlen(Path),
> +                                 "", 1,
> +                                 PermissionString, XENSTORE_PAYLOAD_MAX - Length,
> +                                 NULL, 0);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = STATUS_NO_MEMORY;
> +    Response = StoreSubmitRequest(Context, &Request);
> +    if (Response == NULL)
> +        goto fail5;
> +
> +    status = StoreCheckResponse(Response);
> +    if (!NT_SUCCESS(status))
> +        goto fail6;
> +
> +    StoreFreeResponse(Response);
> +    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
> +
> +    __StoreFree(Path);
> +    __StoreFree(PermissionString);
> +
> +    return STATUS_SUCCESS;
> +
> +fail6:
> +    Error("fail6\n");
> +    StoreFreeResponse(Response);
> +
> +fail5:
> +    Error("fail5\n");
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +    __StoreFree(Path);
> +    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
> +
> +fail2:
> +    Error("fail2\n");
> +    __StoreFree(PermissionString);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
>  static
>  _Function_class_(KSERVICE_ROUTINE)
>  _IRQL_requires_(HIGH_LEVEL)
> @@ -2327,6 +2476,23 @@ static struct _XENBUS_STORE_INTERFACE_V1
> StoreInterfaceVersion1 = {
>      StorePoll
>  };
> 
> +static struct _XENBUS_STORE_INTERFACE_V2 StoreInterfaceVersion2 = {
> +    { sizeof(struct _XENBUS_STORE_INTERFACE_V2), 2, NULL, NULL, NULL },
> +    StoreAcquire,
> +    StoreRelease,
> +    StoreFree,
> +    StoreRead,
> +    StorePrintf,
> +    StoreRemove,
> +    StoreDirectory,
> +    StoreTransactionStart,
> +    StoreTransactionEnd,
> +    StoreWatchAdd,
> +    StoreWatchRemove,
> +    StorePoll,
> +    StorePermissionsSet
> +};
> +
>  NTSTATUS
>  StoreInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -2426,6 +2592,23 @@ StoreGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_STORE_INTERFACE_V2  *StoreInterface;
> +
> +        StoreInterface = (struct _XENBUS_STORE_INTERFACE_V2 *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_STORE_INTERFACE_V2))
> +            break;
> +
> +        *StoreInterface = StoreInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, == , Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:35:56 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:35:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQMm-0002lA-9i; Fri, 11 Sep 2015 15:35:56 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQMk-0002l1-IX
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:35:54 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	C8/6B-28791-9D4F2F55; Fri, 11 Sep 2015 15:35:53 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-5.tower-27.messagelabs.com!1441985750!37538590!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27543 invoked from network); 11 Sep 2015 15:35:50 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-5.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:35:50 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769485"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 2/3] Add support for changing key
	permissions to the STORE interface
Thread-Index: AQHQ7I3QUPNpGufczkeHO21Jcr+JTp43dbrQ
Date: Fri, 11 Sep 2015 15:35:49 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE67@AMSPEX01CL01.citrite.net>
References: <55F2C974.6020008@invisiblethingslab.com>
In-Reply-To: <55F2C974.6020008@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 2/3] Add support for changing key
 permissions to the STORE interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:31
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 2/3] Add support for changing key
> permissions to the STORE interface
> 
> STORE interface now includes a function to change key permissions. This
> allows granting key access to other, non-privileged domains.
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>

Again a few stylistic issues and again I'll fix them.

Acked-by: Paul Durrant <paul.durrant@citrix.com>

> ---
>  include/store_interface.h |  68 ++++++++++++++++-
>  src/xenbus/store.c        | 185
> +++++++++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 248 insertions(+), 5 deletions(-)
> 
> diff --git a/include/store_interface.h b/include/store_interface.h
> index 5bcbba3..6775b27 100644
> --- a/include/store_interface.h
> +++ b/include/store_interface.h
> @@ -50,6 +50,23 @@ typedef struct _XENBUS_STORE_TRANSACTION
> XENBUS_STORE_TRANSACTION, *PXENBUS_S
>  */
>  typedef struct _XENBUS_STORE_WATCH          XENBUS_STORE_WATCH,
> *PXENBUS_STORE_WATCH;
> 
> +/*! \typedef XENBUS_STORE_PERMISSION_MASK
> +    \brief Bitmask of XenStore key permissions
> +*/
> +typedef enum _XENBUS_STORE_PERMISSION_MASK {
> +    XENBUS_STORE_PERM_NONE = 0,
> +    XENBUS_STORE_PERM_READ = 1,
> +    XENBUS_STORE_PERM_WRITE = 2,
> +} XENBUS_STORE_PERMISSION_MASK;
> +
> +/*! \typedef XENBUS_STORE_PERMISSION
> +    \brief XenStore key permissions entry for a single domain
> +*/
> +typedef struct _XENBUS_STORE_PERMISSION {
> +    USHORT Domain;
> +    XENBUS_STORE_PERMISSION_MASK Mask;
> +} XENBUS_STORE_PERMISSION, *PXENBUS_STORE_PERMISSION;
> +
>  /*! \typedef XENBUS_STORE_ACQUIRE
>      \brief Acquire a reference to the STORE interface
> 
> @@ -247,10 +264,36 @@ typedef VOID
>      IN  PINTERFACE  Interface
>      );
> 
> +/*! \typedef XENBUS_STORE_PERMISSIONS_SET
> +    \brief Set permissions for a XenStore key
> +
> +    \param Interface The interface header
> +    \param Transaction The transaction handle (NULL if this is not
> +    part of a transaction)
> +    \param Prefix An optional prefix for the \a Node
> +    \param Node The concatenation of the \a Prefix and this value specifies
> +    the XenStore key to set permissions of
> +    \param Permissions An array of permissions to set
> +    \param NumberPermissions Number of elements in the \a Permissions
> array
> +*/
> +typedef NTSTATUS
> +(*XENBUS_STORE_PERMISSIONS_SET)(
> +    IN  PINTERFACE                  Interface,
> +    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
> +    IN  PCHAR                       Prefix OPTIONAL,
> +    IN  PCHAR                       Node,
> +    IN  PXENBUS_STORE_PERMISSION    Permissions,
> +    IN  ULONG                       NumberPermissions
> +    );
> +
>  // {86824C3B-D34E-4753-B281-2F1E3AD214D7}
>  DEFINE_GUID(GUID_XENBUS_STORE_INTERFACE,
>  0x86824c3b, 0xd34e, 0x4753, 0xb2, 0x81, 0x2f, 0x1e, 0x3a, 0xd2, 0x14, 0xd7);
> 
> +/*! \struct _XENBUS_STORE_INTERFACE_V1
> +    \brief STORE interface version 1
> +    \ingroup interfaces
> +*/
>  struct _XENBUS_STORE_INTERFACE_V1 {
>      INTERFACE                       Interface;
>      XENBUS_STORE_ACQUIRE            StoreAcquire;
> @@ -267,11 +310,28 @@ struct _XENBUS_STORE_INTERFACE_V1 {
>      XENBUS_STORE_POLL               StorePoll;
>  };
> 
> -/*! \struct _XENBUS_STORE_INTERFACE_V1
> -    \brief STORE interface version 1
> +/*! \struct _XENBUS_STORE_INTERFACE_V2
> +    \brief STORE interface version 2
>      \ingroup interfaces
>  */
> -typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> +struct _XENBUS_STORE_INTERFACE_V2 {
> +    INTERFACE                       Interface;
> +    XENBUS_STORE_ACQUIRE            StoreAcquire;
> +    XENBUS_STORE_RELEASE            StoreRelease;
> +    XENBUS_STORE_FREE               StoreFree;
> +    XENBUS_STORE_READ               StoreRead;
> +    XENBUS_STORE_PRINTF             StorePrintf;
> +    XENBUS_STORE_REMOVE             StoreRemove;
> +    XENBUS_STORE_DIRECTORY          StoreDirectory;
> +    XENBUS_STORE_TRANSACTION_START  StoreTransactionStart;
> +    XENBUS_STORE_TRANSACTION_END    StoreTransactionEnd;
> +    XENBUS_STORE_WATCH_ADD          StoreWatchAdd;
> +    XENBUS_STORE_WATCH_REMOVE       StoreWatchRemove;
> +    XENBUS_STORE_POLL               StorePoll;
> +    XENBUS_STORE_PERMISSIONS_SET    StorePermissionsSet;
> +};
> +
> +typedef struct _XENBUS_STORE_INTERFACE_V2
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE_INTERFACE;
> 
>  /*! \def XENBUS_STORE
>      \brief Macro at assist in method invocation
> @@ -282,7 +342,7 @@ typedef struct _XENBUS_STORE_INTERFACE_V1
> XENBUS_STORE_INTERFACE, *PXENBUS_STORE
>  #endif  // _WINDLL
> 
>  #define XENBUS_STORE_INTERFACE_VERSION_MIN  1
> -#define XENBUS_STORE_INTERFACE_VERSION_MAX  1
> +#define XENBUS_STORE_INTERFACE_VERSION_MAX  2
> 
>  #endif  // _XENBUS_STORE_INTERFACE_H
> 
> diff --git a/src/xenbus/store.c b/src/xenbus/store.c
> index c54b0f0..cf5ac79 100644
> --- a/src/xenbus/store.c
> +++ b/src/xenbus/store.c
> @@ -442,7 +442,6 @@ StoreIgnoreHeaderType(
>      case XS_RELEASE:
>      case XS_GET_DOMAIN_PATH:
>      case XS_MKDIR:
> -    case XS_SET_PERMS:
>      case XS_IS_DOMAIN_INTRODUCED:
>      case XS_RESUME:
>      case XS_SET_TARGET:
> @@ -470,6 +469,7 @@ StoreVerifyHeader(
>          Header->type != XS_TRANSACTION_END &&
>          Header->type != XS_WRITE &&
>          Header->type != XS_RM &&
> +        Header->type != XS_SET_PERMS &&
>          Header->type != XS_WATCH_EVENT &&
>          Header->type != XS_ERROR &&
>          !StoreIgnoreHeaderType(Header->type)) {
> @@ -1816,6 +1816,155 @@ StorePoll(
>      KeReleaseSpinLockFromDpcLevel(&Context->Lock);
>  }
> 
> +static NTSTATUS
> +StorePermissionToString(
> +    IN  PXENBUS_STORE_PERMISSION    Permission,
> +    OUT PCHAR                       Buffer,
> +    IN  ULONG                       BufferSize,
> +    OUT PULONG                      UsedSize
> +    )
> +{
> +    size_t                          Remaining;
> +    NTSTATUS                        status = STATUS_INVALID_PARAMETER;
> +
> +    ASSERT(BufferSize > 1);
> +
> +    switch (Permission->Mask) {
> +    case XENBUS_STORE_PERM_NONE:
> +        *Buffer = 'n';
> +        break;
> +    case XENBUS_STORE_PERM_READ:
> +        *Buffer = 'r';
> +        break;
> +    case XENBUS_STORE_PERM_WRITE:
> +        *Buffer = 'w';
> +        break;
> +    case XENBUS_STORE_PERM_READ | XENBUS_STORE_PERM_WRITE:
> +        *Buffer = 'b';
> +        break;
> +    default:
> +        goto fail1;
> +    }
> +
> +    status = RtlStringCbPrintfExA(Buffer + 1, BufferSize - 1, NULL,
> &Remaining, 0, "%u", Permission->Domain);
> +    if (!NT_SUCCESS(status))
> +        goto fail2;
> +
> +    *UsedSize = BufferSize - (ULONG)Remaining + 1;
> +    return STATUS_SUCCESS;
> +
> +fail2:
> +    Error("fail2\n");
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
> +static NTSTATUS
> +StorePermissionsSet(
> +    IN  PINTERFACE                  Interface,
> +    IN  PXENBUS_STORE_TRANSACTION   Transaction OPTIONAL,
> +    IN  PCHAR                       Prefix OPTIONAL,
> +    IN  PCHAR                       Node,
> +    IN  PXENBUS_STORE_PERMISSION    Permissions,
> +    IN  ULONG                       NumberPermissions
> +    )
> +{
> +    PXENBUS_STORE_CONTEXT           Context = Interface->Context;
> +    XENBUS_STORE_REQUEST            Request;
> +    PXENBUS_STORE_RESPONSE          Response;
> +    NTSTATUS                        status;
> +    ULONG                           Index, Length, Used;
> +    PCHAR                           Path = NULL;
> +    PCHAR                           PermissionString, Segment;
> +
> +    status = STATUS_NO_MEMORY;
> +    PermissionString = __StoreAllocate(XENSTORE_PAYLOAD_MAX);
> +    if (PermissionString == NULL)
> +        goto fail1;
> +
> +    if (Prefix == NULL)
> +        Length = (ULONG)strlen(Node) + sizeof(CHAR);
> +    else
> +        Length = (ULONG)strlen(Prefix) + 1 + (ULONG)strlen(Node) +
> sizeof(CHAR);
> +
> +    Path = __StoreAllocate(Length);
> +
> +    if (Path == NULL)
> +        goto fail2;
> +
> +    status = (Prefix == NULL) ?
> +        RtlStringCbPrintfA(Path, Length, "%s", Node) :
> +        RtlStringCbPrintfA(Path, Length, "%s/%s", Prefix, Node);
> +    ASSERT(NT_SUCCESS(status));
> +
> +    RtlZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST));
> +
> +    for (Index = 0, Segment = PermissionString, Length =
> XENSTORE_PAYLOAD_MAX;
> +         Index < NumberPermissions;
> +         Index++) {
> +        status = StorePermissionToString(&Permissions[Index], Segment,
> Length, &Used);
> +        if (!NT_SUCCESS(status))
> +            goto fail3;
> +
> +        Segment += Used;
> +        Length -= Used;
> +    }
> +
> +    status = StorePrepareRequest(Context,
> +                                 &Request,
> +                                 Transaction,
> +                                 XS_SET_PERMS,
> +                                 Path, strlen(Path),
> +                                 "", 1,
> +                                 PermissionString, XENSTORE_PAYLOAD_MAX - Length,
> +                                 NULL, 0);
> +
> +    if (!NT_SUCCESS(status))
> +        goto fail4;
> +
> +    status = STATUS_NO_MEMORY;
> +    Response = StoreSubmitRequest(Context, &Request);
> +    if (Response == NULL)
> +        goto fail5;
> +
> +    status = StoreCheckResponse(Response);
> +    if (!NT_SUCCESS(status))
> +        goto fail6;
> +
> +    StoreFreeResponse(Response);
> +    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
> +
> +    __StoreFree(Path);
> +    __StoreFree(PermissionString);
> +
> +    return STATUS_SUCCESS;
> +
> +fail6:
> +    Error("fail6\n");
> +    StoreFreeResponse(Response);
> +
> +fail5:
> +    Error("fail5\n");
> +
> +fail4:
> +    Error("fail4\n");
> +
> +fail3:
> +    Error("fail3\n");
> +    __StoreFree(Path);
> +    ASSERT(IsZeroMemory(&Request, sizeof(XENBUS_STORE_REQUEST)));
> +
> +fail2:
> +    Error("fail2\n");
> +    __StoreFree(PermissionString);
> +
> +fail1:
> +    Error("fail1 (%08x)\n", status);
> +    return status;
> +}
> +
>  static
>  _Function_class_(KSERVICE_ROUTINE)
>  _IRQL_requires_(HIGH_LEVEL)
> @@ -2327,6 +2476,23 @@ static struct _XENBUS_STORE_INTERFACE_V1
> StoreInterfaceVersion1 = {
>      StorePoll
>  };
> 
> +static struct _XENBUS_STORE_INTERFACE_V2 StoreInterfaceVersion2 = {
> +    { sizeof(struct _XENBUS_STORE_INTERFACE_V2), 2, NULL, NULL, NULL },
> +    StoreAcquire,
> +    StoreRelease,
> +    StoreFree,
> +    StoreRead,
> +    StorePrintf,
> +    StoreRemove,
> +    StoreDirectory,
> +    StoreTransactionStart,
> +    StoreTransactionEnd,
> +    StoreWatchAdd,
> +    StoreWatchRemove,
> +    StorePoll,
> +    StorePermissionsSet
> +};
> +
>  NTSTATUS
>  StoreInitialize(
>      IN  PXENBUS_FDO             Fdo,
> @@ -2426,6 +2592,23 @@ StoreGetInterface(
>          status = STATUS_SUCCESS;
>          break;
>      }
> +    case 2: {
> +        struct _XENBUS_STORE_INTERFACE_V2  *StoreInterface;
> +
> +        StoreInterface = (struct _XENBUS_STORE_INTERFACE_V2 *)Interface;
> +
> +        status = STATUS_BUFFER_OVERFLOW;
> +        if (Size < sizeof(struct _XENBUS_STORE_INTERFACE_V2))
> +            break;
> +
> +        *StoreInterface = StoreInterfaceVersion2;
> +
> +        ASSERT3U(Interface->Version, == , Version);
> +        Interface->Context = Context;
> +
> +        status = STATUS_SUCCESS;
> +        break;
> +    }
>      default:
>          status = STATUS_NOT_SUPPORTED;
>          break;
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:36:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:36:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQNe-0002oR-DU; Fri, 11 Sep 2015 15:36:50 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQNc-0002oD-KX
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:36:48 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	B2/4C-06021-F05F2F55; Fri, 11 Sep 2015 15:36:47 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1441985807!43461496!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11911 invoked from network); 11 Sep 2015 15:36:47 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:36:47 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769554"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for
	updated	interfaces
Thread-Index: AQHQ7I3P4Wd/lep7T0KTP4XcjF/lY543dfvQ
Date: Fri, 11 Sep 2015 15:36:21 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE76@AMSPEX01CL01.citrite.net>
References: <55F2C979.8030004@invisiblethingslab.com>
In-Reply-To: <55F2C979.8030004@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for
 updated	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:31
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
> interfaces
> 
> PDO revision 0x0800000B includes STORE interface version 2 (added
> StorePermissionsSet()) and GNTTAB interface version 2 (added
> GnttabMapForeignPages() and GnttabUnmapForeignPages()).
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
Acked-by: Paul.Durrant <paul.durrant@citrix.com>

> ---
>  include/revision.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/include/revision.h b/include/revision.h
> index 7f261fc..47db033 100644
> --- a/include/revision.h
> +++ b/include/revision.h
> @@ -46,6 +46,7 @@
>  //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
>  #define DEFINE_REVISION_TABLE                                               \
>      DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
> -    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
> +    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1),    \
> +    DEFINE_REVISION(0x0800000B,  1,  2,  5,  1,  2,  1,  1,  2,  1,  1)
> 
>  #endif  // _REVISION_H
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:36:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:36:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQNe-0002oR-DU; Fri, 11 Sep 2015 15:36:50 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQNc-0002oD-KX
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:36:48 +0000
Received: from [85.158.137.68] by server-5.bemta-3.messagelabs.com id
	B2/4C-06021-F05F2F55; Fri, 11 Sep 2015 15:36:47 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-31.messagelabs.com!1441985807!43461496!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 11911 invoked from network); 11 Sep 2015 15:36:47 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:36:47 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2769554"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for
	updated	interfaces
Thread-Index: AQHQ7I3P4Wd/lep7T0KTP4XcjF/lY543dfvQ
Date: Fri, 11 Sep 2015 15:36:21 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFE76@AMSPEX01CL01.citrite.net>
References: <55F2C979.8030004@invisiblethingslab.com>
In-Reply-To: <55F2C979.8030004@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for
 updated	interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:31
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 3/3] Define a new PDO revision for updated
> interfaces
> 
> PDO revision 0x0800000B includes STORE interface version 2 (added
> StorePermissionsSet()) and GNTTAB interface version 2 (added
> GnttabMapForeignPages() and GnttabUnmapForeignPages()).
> 
> Signed-off-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
Acked-by: Paul.Durrant <paul.durrant@citrix.com>

> ---
>  include/revision.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/include/revision.h b/include/revision.h
> index 7f261fc..47db033 100644
> --- a/include/revision.h
> +++ b/include/revision.h
> @@ -46,6 +46,7 @@
>  //                    REVISION   S  SI   E   D  ST   R   C   G   U  EM
>  #define DEFINE_REVISION_TABLE                                               \
>      DEFINE_REVISION(0x08000009,  1,  2,  4,  1,  1,  1,  1,  1,  1,  1),    \
> -    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1)
> +    DEFINE_REVISION(0x0800000A,  1,  2,  5,  1,  1,  1,  1,  1,  1,  1),    \
> +    DEFINE_REVISION(0x0800000B,  1,  2,  5,  1,  2,  1,  1,  2,  1,  1)
> 
>  #endif  // _REVISION_H
> --
> 1.8.1.msysgit.1
> 
> 
> 
> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:46:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:46:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQXO-0004kU-8l; Fri, 11 Sep 2015 15:46:54 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQXN-0004jV-34
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:46:53 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	C7/69-04752-C67F2F55; Fri, 11 Sep 2015 15:46:52 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441986411!22369781!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2647 invoked from network); 11 Sep 2015 15:46:51 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:46:51 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2770480"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ7I3C0eFOEDsFv0KZghaID3HuAp43ePEA
Date: Fri, 11 Sep 2015 15:46:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
References: <55F2C954.400@invisiblethingslab.com>
In-Reply-To: <55F2C954.400@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:30
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting XenStore key permissions.
> 

All patches applied. Thanks!

  Paul

> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 15:46:54 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 15:46:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaQXO-0004kU-8l; Fri, 11 Sep 2015 15:46:54 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=689de9a9b=Paul.Durrant@citrix.com>)
	id 1ZaQXN-0004jV-34
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 15:46:53 +0000
Received: from [193.109.254.147] by server-14.bemta-14.messagelabs.com id
	C7/69-04752-C67F2F55; Fri, 11 Sep 2015 15:46:52 +0000
X-Env-Sender: prvs=689de9a9b=Paul.Durrant@citrix.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1441986411!22369781!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 2647 invoked from network); 11 Sep 2015 15:46:51 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	11 Sep 2015 15:46:51 -0000
X-IronPort-AV: E=Sophos;i="5.17,511,1437436800"; 
   d="scan'208";a="2770480"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan	implementation
Thread-Index: AQHQ7I3C0eFOEDsFv0KZghaID3HuAp43ePEA
Date: Fri, 11 Sep 2015 15:46:50 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
References: <55F2C954.400@invisiblethingslab.com>
In-Reply-To: <55F2C954.400@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan	implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> Sent: 11 September 2015 13:30
> To: win-pv-devel@lists.xenproject.org
> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvchan
> implementation
> 
> This patch series adds some missing XENBUS APIs that are needed for full
> libvchan implementation on Windows, namely mapping foreign memory
> pages
> and setting XenStore key permissions.
> 

All patches applied. Thanks!

  Paul

> _______________________________________________
> win-pv-devel mailing list
> win-pv-devel@lists.xenproject.org
> http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 16:46:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 16:46:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaRT4-0006dX-O4; Fri, 11 Sep 2015 16:46:30 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaRT4-0006dQ-0Q
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 16:46:30 +0000
Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id
	01/6A-31450-56503F55; Fri, 11 Sep 2015 16:46:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1441989987!29128943!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24134 invoked from network); 11 Sep 2015 16:46:28 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 16:46:28 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id B6767206F4
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 12:46:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 12:46:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=XYIjPMezCFQtaIOQ
	FN37fPCKALw=; b=C1x9Tvbwc1Vn5rsYH1+JnwGtgh1iO/ZtR1OzLL9Ddhydu5Vu
	ZnA/KYoIsFwaaVEYevM77aV2NJLsg/BGOD9rc/BcOpZI6d4J+361p4QFc4Cyx0Fd
	MqXa7HUGuHbIMtjEKaJ6LR8I4ScyR4lUG79hcTbp1t5jc5qTlhaN/Avw0lk=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=XYIjPMezCFQtaIO
	QFN37fPCKALw=; b=keGaeQJ704xAlvPbkr67YmeLv2oTELpvpNS3CvNetfpbbPb
	xGQNEyDS14pOXBplzfugJO7xqeqstohxDa4l9u0XDkyG/6tqBPifeflaikMBehBT
	2+5Fr+KXkEnHWhlNzjVMsMkmkrNpOYwfUNz+z9wx576M/toLywnzIVlExlXY=
X-Sasl-enc: nWHvaDo4j/6XRUq/aOOMmddGM/4clrVn5y7KGvvxayUC 1441989987
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 20F2068013E;
	Fri, 11 Sep 2015 12:46:27 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F2C954.400@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F30561.3060808@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 18:46:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
Content-Length: 2030
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 17:46, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 11 September 2015 13:30
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvch=
an
>> implementation
>>
>> This patch series adds some missing XENBUS APIs that are needed for full
>> libvchan implementation on Windows, namely mapping foreign memory
>> pages
>> and setting XenStore key permissions.
>>
> =

> All patches applied. Thanks!
> =

>   Paul

No problem. Xeniface patches will come next and I have some questions on
how to best structure the code, especially the usermode DLL and
libvchan. For now I have the DLL (named xencontrol) in a separate
directory in the xeniface project, along with a small "client/server"
test program that exercises most of its exported functions. Our libvchan
port is kept out of the xeniface project as it doesn't really belong in
there in my opinion.

The DLL is basically a wrapper for most of the xeniface IOCTLs. For
logging I'm using a simple callback that the caller can register, with
several verbosity levels.

In xeniface itself I'm still using the process notification approach for
cleanup. Didn't have a problem with it thus far, but I can change that
to pend IOCTLs and add secondary IOCTLs to get actual data back from the
driver.

I've also had some problems with the EVTCHN DPC in xeniface. Namely, it
seems that the DPC routine can run even after KeRemoveQueueDpc() which I
was doing on cleanup. I'm now calling KeFlushQueuedDpcs() in the cleanup
function to ensure that the DPC can't run after I free my data. Is this
the right approach?

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Fri Sep 11 16:46:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 11 Sep 2015 16:46:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZaRT4-0006dX-O4; Fri, 11 Sep 2015 16:46:30 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZaRT4-0006dQ-0Q
	for win-pv-devel@lists.xenproject.org; Fri, 11 Sep 2015 16:46:30 +0000
Received: from [85.158.139.211] by server-2.bemta-5.messagelabs.com id
	01/6A-31450-56503F55; Fri, 11 Sep 2015 16:46:29 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-14.tower-206.messagelabs.com!1441989987!29128943!1
X-Originating-IP: [66.111.4.28]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24134 invoked from network); 11 Sep 2015 16:46:28 -0000
Received: from out4-smtp.messagingengine.com (HELO
	out4-smtp.messagingengine.com) (66.111.4.28)
	by server-14.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 11 Sep 2015 16:46:28 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id B6767206F4
	for <win-pv-devel@lists.xenproject.org>;
	Fri, 11 Sep 2015 12:46:27 -0400 (EDT)
Received: from frontend2 ([10.202.2.161])
	by compute2.internal (MEProxy); Fri, 11 Sep 2015 12:46:27 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=XYIjPMezCFQtaIOQ
	FN37fPCKALw=; b=C1x9Tvbwc1Vn5rsYH1+JnwGtgh1iO/ZtR1OzLL9Ddhydu5Vu
	ZnA/KYoIsFwaaVEYevM77aV2NJLsg/BGOD9rc/BcOpZI6d4J+361p4QFc4Cyx0Fd
	MqXa7HUGuHbIMtjEKaJ6LR8I4ScyR4lUG79hcTbp1t5jc5qTlhaN/Avw0lk=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=XYIjPMezCFQtaIO
	QFN37fPCKALw=; b=keGaeQJ704xAlvPbkr67YmeLv2oTELpvpNS3CvNetfpbbPb
	xGQNEyDS14pOXBplzfugJO7xqeqstohxDa4l9u0XDkyG/6tqBPifeflaikMBehBT
	2+5Fr+KXkEnHWhlNzjVMsMkmkrNpOYwfUNz+z9wx576M/toLywnzIVlExlXY=
X-Sasl-enc: nWHvaDo4j/6XRUq/aOOMmddGM/4clrVn5y7KGvvxayUC 1441989987
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 20F2068013E;
	Fri, 11 Sep 2015 12:46:27 -0400 (EDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <55F2C954.400@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <55F30561.3060808@invisiblethingslab.com>
Date: Fri, 11 Sep 2015 18:46:25 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
Content-Length: 2030
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

On 2015-09-11 17:46, Paul Durrant wrote:
>> -----Original Message-----
>> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
>> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
>> Sent: 11 September 2015 13:30
>> To: win-pv-devel@lists.xenproject.org
>> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for libvch=
an
>> implementation
>>
>> This patch series adds some missing XENBUS APIs that are needed for full
>> libvchan implementation on Windows, namely mapping foreign memory
>> pages
>> and setting XenStore key permissions.
>>
> =

> All patches applied. Thanks!
> =

>   Paul

No problem. Xeniface patches will come next and I have some questions on
how to best structure the code, especially the usermode DLL and
libvchan. For now I have the DLL (named xencontrol) in a separate
directory in the xeniface project, along with a small "client/server"
test program that exercises most of its exported functions. Our libvchan
port is kept out of the xeniface project as it doesn't really belong in
there in my opinion.

The DLL is basically a wrapper for most of the xeniface IOCTLs. For
logging I'm using a simple callback that the caller can register, with
several verbosity levels.

In xeniface itself I'm still using the process notification approach for
cleanup. Didn't have a problem with it thus far, but I can change that
to pend IOCTLs and add secondary IOCTLs to get actual data back from the
driver.

I've also had some problems with the EVTCHN DPC in xeniface. Namely, it
seems that the DPC routine can run even after KeRemoveQueueDpc() which I
was doing on cleanup. I'm now calling KeFlushQueuedDpcs() in the cleanup
function to ensure that the DPC can't run after I free my data. Is this
the right approach?

-- =

Rafa=B3 Wojdy=B3a
Qubes Tools for Windows developer
https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:06:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:06:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTSx-0001Yj-3l; Mon, 14 Sep 2015 13:06:39 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTSw-0001XQ-7x
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:06:38 +0000
Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id
	8F/FD-16965-D56C6F55; Mon, 14 Sep 2015 13:06:37 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1442235996!44130136!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28707 invoked from network); 14 Sep 2015 13:06:36 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:06:36 -0000
Received: by wicge5 with SMTP id ge5so141977092wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:06:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=1QJe61b28MugbSwPPkpUUdOfE2+qNonbWm7hukuLEOU=;
	b=1DwU9UAIAoPYkIUIw7y5PlcIcP1nhaeDYurSOtvm1mJ2aN/jREnmqYi/mqo1etxwDF
	6D6Nj989uMHAVpogSOdL/8lHl4NSjBQFlATsvzLNoc81ODdJ6rpvv46svdOVuhhIceK+
	+eC30t/8K1MyoQQbH4+SEWVI/nhSDtcK8orTqZ49KFdhE3AGS5CbIOCjdp6yppdnN8zv
	tBCnEpNZjypMGjSgAqC0jgHWsdyZRdbyWxozvSXuGL10Pvvc/LA7y1tfKpAQZ572d4bH
	5VSmDeTp7PBGH+BrmPHDlFSXzU665p5cpaW5+yaj7tu8oTDdVkEjOusU8e37vOKr/LZW
	JxfQ==
X-Received: by 10.180.8.3 with SMTP id n3mr25772925wia.41.1442235995962;
	Mon, 14 Sep 2015 06:06:35 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	r19sm14320719wib.7.2015.09.14.06.06.35
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:06:35 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:06:28 +0100
Message-Id: <1442235988-9716-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add code to set receive side backfill size
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The NDIS header/data-split feature requires that the first data
MDL in a NET_BUFFER has sufficient headroom to take a copy of the
entire header MDL just in case something up the stack can't cope
with the split.
To this end NDIS specifies a 'backfill size' which must be
reserved. This patch implements support for that by copying and
adjusting the first data MDL if necessary.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/revision.h       |   5 +-
 include/vif_interface.h  |  48 +++++++++++-
 src/xenvif/receiver.c    | 189 ++++++++++++++++++++++++++++++++++++++++-------
 src/xenvif/receiver.h    |   6 ++
 src/xenvif/transmitter.c |   6 +-
 src/xenvif/vif.c         |  59 +++++++++++++++
 6 files changed, 276 insertions(+), 37 deletions(-)

diff --git a/include/revision.h b/include/revision.h
index 6ae273c..e2decd0 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -37,7 +37,8 @@
 // V  - XENVIF_VIF_INTERFACE
 
 //                    REVISION   C   V
-#define DEFINE_REVISION_TABLE                                      \
-    DEFINE_REVISION(0x08000002,  1,  2)
+#define DEFINE_REVISION_TABLE               \
+    DEFINE_REVISION(0x08000002,  1,  2),    \
+    DEFINE_REVISION(0x08000003,  1,  3)
 
 #endif  // _REVISION_H
diff --git a/include/vif_interface.h b/include/vif_interface.h
index d083fd1..e5f8534 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -564,6 +564,19 @@ typedef VOID
     IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
     );
 
+/*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
+    \brief Set the required receive backfill size (free space before
+    packet payload).
+
+    \param Interface The interface header
+    \param Size The required size
+*/
+typedef VOID
+(*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
+    IN  PINTERFACE  Interface,
+    IN  ULONG       Size
+    );
+
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
     \brief Query the maximum size of packet containing a TCP large segment
     that can be handled by the transmit side
@@ -760,7 +773,6 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -790,7 +802,37 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
+/*! \struct _XENVIF_VIF_INTERFACE_V3
+    \brief VIF interface version 3
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V3 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
 
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -801,6 +843,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 #endif  // _WINDLL
 
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    1
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    2
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 20ce0de..abe617d 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -99,6 +99,7 @@ typedef struct _XENVIF_RECEIVER_RING {
     BOOLEAN                     Enabled;
     BOOLEAN                     Stopped;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
+    ULONG                       BackfillSize;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
     PXENVIF_THREAD              WatchdogThread;
     LIST_ENTRY                  PacketList;
@@ -732,6 +733,7 @@ __ReceiverRingBuildSegment(
     IN  PXENVIF_PACKET_PAYLOAD  Payload
     )
 {
+    PXENVIF_RECEIVER            Receiver;
     PXENVIF_PACKET_INFO         Info;
     PXENVIF_RECEIVER_PACKET     Segment;
     PMDL                        Mdl;
@@ -742,6 +744,8 @@ __ReceiverRingBuildSegment(
     ULONG                       Seq;
     NTSTATUS                    status;
 
+    Receiver = Ring->Receiver;
+
     Info = Packet->Info;
 
     InfoVa = MmGetSystemAddressForMdlSafe(&Packet->Mdl, NormalPagePriority);
@@ -843,7 +847,12 @@ __ReceiverRingBuildSegment(
         StartVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
         ASSERT(StartVa != NULL);
 
-        Length = __min(SegmentSize - Segment->Length, PAGE_SIZE);
+        Mdl->ByteOffset = Ring->BackfillSize;
+
+        StartVa += Ring->BackfillSize;
+        Mdl->MappedSystemVa = StartVa;
+
+        Length = __min(SegmentSize - Segment->Length, PAGE_SIZE - Mdl->ByteOffset);
         ASSERT(Length != 0);
 
         (VOID) ReceiverRingPullup(Ring, StartVa, Payload, Length);
@@ -854,11 +863,14 @@ __ReceiverRingBuildSegment(
         if (Segment->Length == SegmentSize)
             break;
 
-        ASSERT3U(Mdl->ByteCount, ==, PAGE_SIZE);
+        ASSERT3U(Mdl->ByteCount, ==, PAGE_SIZE - Mdl->ByteOffset);
     }
 
     Segment->Length += Info->Length;
 
+    if (Receiver->AlwaysPullup != 0)
+        __ReceiverRingPullupPacket(Ring, Segment);
+
     return Segment;
 
 fail2:
@@ -1062,6 +1074,111 @@ fail1:
 }
 
 static VOID
+ReceiverRingProcessStandardPacket(
+    IN  PXENVIF_RECEIVER_RING   Ring,
+    IN  PXENVIF_RECEIVER_PACKET Packet,
+    OUT PLIST_ENTRY             List
+    )
+{
+    PXENVIF_RECEIVER            Receiver;
+    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_MAC                 Mac;
+    PXENVIF_PACKET_INFO         Info;
+    XENVIF_PACKET_PAYLOAD       Payload;
+    ULONG                       MaximumFrameSize;
+    NTSTATUS                    status;
+
+    Receiver = Ring->Receiver;
+    Frontend = Receiver->Frontend;
+    Mac = FrontendGetMac(Frontend);
+
+    Info = Packet->Info;
+
+    Payload.Mdl = Packet->Mdl.Next;
+    Payload.Offset = 0;
+    Payload.Length = Packet->Length - Info->Length;
+
+    MacQueryMaximumFrameSize(Mac, &MaximumFrameSize);
+
+    status = STATUS_INVALID_PARAMETER;
+    if (Packet->Length > MaximumFrameSize)
+        goto fail1;
+
+    // Certain HCK tests (e.g. the NDISTest 2c_Priority test) are
+    // sufficiently brain-dead that they cannot cope with
+    // multi-fragment packets, or at least packets where headers are
+    // in different fragments. All these tests seem to use IPX packets
+    // and, in practice, little else uses LLC so pull up all LLC
+    // packets into a single fragment.
+    if (Info->LLCSnapHeader.Length != 0 || Receiver->AlwaysPullup != 0)
+        __ReceiverRingPullupPacket(Ring, Packet);
+    else if (Payload.Mdl != NULL && Payload.Mdl->ByteOffset < Ring->BackfillSize) {
+        PMDL    Mdl;
+        PUCHAR  StartVa;
+
+        // NDIS Header/Data split requires that the data MDL has a minimum length
+        // of headroom (i.e. ByteOffset) so that it can pre-pend the header to the data
+        // if something up the stack can't cope with the split.
+
+        Mdl = __ReceiverRingGetMdl(Ring, TRUE);
+
+        status = STATUS_NO_MEMORY;
+        if (Mdl == NULL)
+            goto fail2;
+
+        StartVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        ASSERT(StartVa != NULL);
+
+        Mdl->ByteOffset = Ring->BackfillSize;
+        Mdl->ByteCount = __min(Payload.Mdl->ByteCount,
+                               PAGE_SIZE - Mdl->ByteOffset);
+
+        StartVa += Ring->BackfillSize;
+        Mdl->MappedSystemVa = StartVa;
+
+        (VOID) ReceiverRingPullup(Ring, StartVa, &Payload, Mdl->ByteCount);
+
+        if (Payload.Length != 0) {
+            ASSERT(Payload.Mdl != NULL);
+            Mdl->Next = Payload.Mdl;
+        }
+
+        Packet->Mdl.Next = Mdl;
+    }
+
+    ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
+    InsertTailList(List, &Packet->ListEntry);
+
+    return;
+
+fail2:
+fail1:
+    if (Payload.Length != 0) {
+        PMDL    Mdl = Payload.Mdl;
+
+        ASSERT(Mdl != NULL);
+
+        while (Mdl != NULL) {
+            PMDL    Next;
+
+            Next = Mdl->Next;
+            Mdl->Next = NULL;
+
+            __ReceiverRingPutMdl(Ring, Mdl, TRUE);
+
+            Mdl = Next;
+        }
+    }
+
+    Packet->Mdl.Next = NULL;
+    __ReceiverRingPutPacket(Ring, Packet, TRUE);
+
+    FrontendIncrementStatistic(Frontend,
+                               XENVIF_RECEIVER_PACKETS_DROPPED,
+                               1);
+}
+
+static VOID
 ReceiverRingProcessPacket(
     IN  PXENVIF_RECEIVER_RING   Ring,
     IN  PXENVIF_RECEIVER_PACKET Packet,
@@ -1143,8 +1260,7 @@ ReceiverRingProcessPacket(
     DestinationAddress = &EthernetHeader->DestinationAddress;
 
     status = STATUS_UNSUCCESSFUL;
-    if (!MacApplyFilters(FrontendGetMac(Frontend),
-                         DestinationAddress))
+    if (!MacApplyFilters(Mac, DestinationAddress))
         goto fail3;
 
     Type = GET_ETHERNET_ADDRESS_TYPE(DestinationAddress);
@@ -1182,33 +1298,13 @@ ReceiverRingProcessPacket(
         break;
     }
 
-    if (Packet->MaximumSegmentSize != 0) {
+    if (Packet->MaximumSegmentSize != 0)
         ReceiverRingProcessLargePacket(Ring, Packet, List);
-    } else {
-        ULONG   MaximumFrameSize;
-
-        MacQueryMaximumFrameSize(Mac, &MaximumFrameSize);
-
-        if (Packet->Length > MaximumFrameSize)
-            goto fail4;
-        
-        // Certain HCK tests (e.g. the NDISTest 2c_Priority test) are
-        // sufficiently brain-dead that they cannot cope with
-        // multi-fragment packets, or at least packets where headers are
-        // in different fragments. All these tests seem to use IPX packets
-        // and, in practice, little else uses LLC so pull up all LLC
-        // packets into a single fragment.
-        if (Info->LLCSnapHeader.Length != 0 ||
-            Receiver->AlwaysPullup != 0)
-            __ReceiverRingPullupPacket(Ring, Packet);
-
-        ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
-        InsertTailList(List, &Packet->ListEntry);
-    }
+    else
+        ReceiverRingProcessStandardPacket(Ring, Packet, List);
 
     return;
 
-fail4:
 fail3:
     Packet->Mdl.Next = NULL;
     __ReceiverRingPutPacket(Ring, Packet, TRUE);
@@ -2510,6 +2606,7 @@ __ReceiverRingTeardown(
     Ring->Dpcs = 0;
     RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
 
+    Ring->BackfillSize = 0;
     Ring->OffloadOptions.Value = 0;
 
     ThreadAlert(Ring->WatchdogThread);
@@ -2558,6 +2655,23 @@ __ReceiverRingSetOffloadOptions(
     KeLowerIrql(Irql);
 }
 
+static FORCEINLINE VOID
+__ReceiverRingSetBackfillSize(
+    IN  PXENVIF_RECEIVER_RING   Ring,
+    IN  ULONG                   Size
+    )
+{
+    KIRQL                       Irql;
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+    __ReceiverRingAcquireLock(Ring);
+    Ring->BackfillSize = Size;
+    __ReceiverRingReleaseLock(Ring);
+
+    KeLowerIrql(Irql);
+}
+
 static VOID
 ReceiverDebugCallback(
     IN  PVOID           Argument,
@@ -3209,6 +3323,27 @@ ReceiverSetOffloadOptions(
 }
 
 VOID
+ReceiverSetBackfillSize(
+    IN  PXENVIF_RECEIVER    Receiver,
+    IN  ULONG               Size
+    )
+{
+    LONG                    Index;
+
+    ASSERT3U(Size, <, PAGE_SIZE);
+
+    for (Index = 0; Index < Receiver->MaxQueues; ++Index) {
+        PXENVIF_RECEIVER_RING   Ring;
+
+        Ring = Receiver->Ring[Index];
+        if (Ring == NULL)
+            break;
+
+        __ReceiverRingSetBackfillSize(Ring, Size);
+    }
+}
+
+VOID
 ReceiverQueryRingSize(
     IN  PXENVIF_RECEIVER    Receiver,
     OUT PULONG              Size
diff --git a/src/xenvif/receiver.h b/src/xenvif/receiver.h
index 8704101..e4ab7a7 100644
--- a/src/xenvif/receiver.h
+++ b/src/xenvif/receiver.h
@@ -95,6 +95,12 @@ ReceiverSetOffloadOptions(
     );
 
 extern VOID
+ReceiverSetBackfillSize(
+    IN  PXENVIF_RECEIVER    Receiver,
+    IN  ULONG               Size
+    );
+
+extern VOID
 ReceiverReturnPackets(
     IN  PXENVIF_RECEIVER    Receiver,
     IN  PLIST_ENTRY         List
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 2d8f613..8bf0c2c 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -2775,15 +2775,11 @@ __TransmitterReturnPackets(
 
         break;
     }
-    case 2:
+    default:
         if (!IsListEmpty(List))
             VifTransmitterReturnPackets(VifContext, List);
 
         break;
-
-    default:
-        ASSERT(FALSE);
-        break;
     }
 }
 
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index b2bbf05..02d1d11 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -408,6 +408,22 @@ VifReceiverSetOffloadOptions(
 }
 
 static VOID
+VifReceiverSetBackfillSize(
+    IN  PINTERFACE      Interface,
+    IN  ULONG           Size
+    )
+{
+    PXENVIF_VIF_CONTEXT Context = Interface->Context;
+
+    AcquireMrswLockShared(&Context->Lock);
+
+    ReceiverSetBackfillSize(FrontendGetReceiver(Context->Frontend),
+                            Size);
+
+    ReleaseMrswLockShared(&Context->Lock);
+}
+
+static VOID
 VifMacQueryState(
     IN  PINTERFACE                  Interface,
     OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
@@ -747,6 +763,32 @@ static struct _XENVIF_VIF_INTERFACE_V2 VifInterfaceVersion2 = {
     VifMacQueryFilterLevel
 };
 
+static struct _XENVIF_VIF_INTERFACE_V3 VifInterfaceVersion3 = {
+    { sizeof (struct _XENVIF_VIF_INTERFACE_V3), 3, NULL, NULL, NULL },
+    VifAcquire,
+    VifRelease,
+    VifEnable,
+    VifDisable,
+    VifQueryStatistic,
+    VifReceiverReturnPackets,
+    VifReceiverSetOffloadOptions,
+    VifReceiverSetBackfillSize,
+    VifReceiverQueryRingSize,
+    VifTransmitterGetPacketHeaders,
+    VifTransmitterQueuePackets,
+    VifTransmitterQueryOffloadOptions,
+    VifTransmitterQueryLargePacketSize,
+    VifTransmitterQueryRingSize,
+    VifMacQueryState,
+    VifMacQueryMaximumFrameSize,
+    VifMacQueryPermanentAddress,
+    VifMacQueryCurrentAddress,
+    VifMacQueryMulticastAddresses,
+    VifMacSetMulticastAddresses,
+    VifMacSetFilterLevel,
+    VifMacQueryFilterLevel
+};
+
 NTSTATUS
 VifInitialize(
     IN  PXENVIF_PDO         Pdo,
@@ -845,6 +887,23 @@ VifGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 3: {
+        struct _XENVIF_VIF_INTERFACE_V3 *VifInterface;
+
+        VifInterface = (struct _XENVIF_VIF_INTERFACE_V3 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V3))
+            break;
+
+        *VifInterface = VifInterfaceVersion3;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:06:40 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:06:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTSx-0001Yj-3l; Mon, 14 Sep 2015 13:06:39 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTSw-0001XQ-7x
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:06:38 +0000
Received: from [85.158.137.68] by server-7.bemta-3.messagelabs.com id
	8F/FD-16965-D56C6F55; Mon, 14 Sep 2015 13:06:37 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1442235996!44130136!1
X-Originating-IP: [209.85.212.173]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 28707 invoked from network); 14 Sep 2015 13:06:36 -0000
Received: from mail-wi0-f173.google.com (HELO mail-wi0-f173.google.com)
	(209.85.212.173)
	by server-7.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:06:36 -0000
Received: by wicge5 with SMTP id ge5so141977092wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:06:36 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=1QJe61b28MugbSwPPkpUUdOfE2+qNonbWm7hukuLEOU=;
	b=1DwU9UAIAoPYkIUIw7y5PlcIcP1nhaeDYurSOtvm1mJ2aN/jREnmqYi/mqo1etxwDF
	6D6Nj989uMHAVpogSOdL/8lHl4NSjBQFlATsvzLNoc81ODdJ6rpvv46svdOVuhhIceK+
	+eC30t/8K1MyoQQbH4+SEWVI/nhSDtcK8orTqZ49KFdhE3AGS5CbIOCjdp6yppdnN8zv
	tBCnEpNZjypMGjSgAqC0jgHWsdyZRdbyWxozvSXuGL10Pvvc/LA7y1tfKpAQZ572d4bH
	5VSmDeTp7PBGH+BrmPHDlFSXzU665p5cpaW5+yaj7tu8oTDdVkEjOusU8e37vOKr/LZW
	JxfQ==
X-Received: by 10.180.8.3 with SMTP id n3mr25772925wia.41.1442235995962;
	Mon, 14 Sep 2015 06:06:35 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	r19sm14320719wib.7.2015.09.14.06.06.35
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:06:35 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:06:28 +0100
Message-Id: <1442235988-9716-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Add code to set receive side backfill size
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The NDIS header/data-split feature requires that the first data
MDL in a NET_BUFFER has sufficient headroom to take a copy of the
entire header MDL just in case something up the stack can't cope
with the split.
To this end NDIS specifies a 'backfill size' which must be
reserved. This patch implements support for that by copying and
adjusting the first data MDL if necessary.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/revision.h       |   5 +-
 include/vif_interface.h  |  48 +++++++++++-
 src/xenvif/receiver.c    | 189 ++++++++++++++++++++++++++++++++++++++++-------
 src/xenvif/receiver.h    |   6 ++
 src/xenvif/transmitter.c |   6 +-
 src/xenvif/vif.c         |  59 +++++++++++++++
 6 files changed, 276 insertions(+), 37 deletions(-)

diff --git a/include/revision.h b/include/revision.h
index 6ae273c..e2decd0 100644
--- a/include/revision.h
+++ b/include/revision.h
@@ -37,7 +37,8 @@
 // V  - XENVIF_VIF_INTERFACE
 
 //                    REVISION   C   V
-#define DEFINE_REVISION_TABLE                                      \
-    DEFINE_REVISION(0x08000002,  1,  2)
+#define DEFINE_REVISION_TABLE               \
+    DEFINE_REVISION(0x08000002,  1,  2),    \
+    DEFINE_REVISION(0x08000003,  1,  3)
 
 #endif  // _REVISION_H
diff --git a/include/vif_interface.h b/include/vif_interface.h
index d083fd1..e5f8534 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -564,6 +564,19 @@ typedef VOID
     IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
     );
 
+/*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
+    \brief Set the required receive backfill size (free space before
+    packet payload).
+
+    \param Interface The interface header
+    \param Size The required size
+*/
+typedef VOID
+(*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
+    IN  PINTERFACE  Interface,
+    IN  ULONG       Size
+    );
+
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
     \brief Query the maximum size of packet containing a TCP large segment
     that can be handled by the transmit side
@@ -760,7 +773,6 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -790,7 +802,37 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
+/*! \struct _XENVIF_VIF_INTERFACE_V3
+    \brief VIF interface version 3
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V3 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
 
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -801,6 +843,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 #endif  // _WINDLL
 
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    1
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    2
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 20ce0de..abe617d 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -99,6 +99,7 @@ typedef struct _XENVIF_RECEIVER_RING {
     BOOLEAN                     Enabled;
     BOOLEAN                     Stopped;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
+    ULONG                       BackfillSize;
     PXENBUS_DEBUG_CALLBACK      DebugCallback;
     PXENVIF_THREAD              WatchdogThread;
     LIST_ENTRY                  PacketList;
@@ -732,6 +733,7 @@ __ReceiverRingBuildSegment(
     IN  PXENVIF_PACKET_PAYLOAD  Payload
     )
 {
+    PXENVIF_RECEIVER            Receiver;
     PXENVIF_PACKET_INFO         Info;
     PXENVIF_RECEIVER_PACKET     Segment;
     PMDL                        Mdl;
@@ -742,6 +744,8 @@ __ReceiverRingBuildSegment(
     ULONG                       Seq;
     NTSTATUS                    status;
 
+    Receiver = Ring->Receiver;
+
     Info = Packet->Info;
 
     InfoVa = MmGetSystemAddressForMdlSafe(&Packet->Mdl, NormalPagePriority);
@@ -843,7 +847,12 @@ __ReceiverRingBuildSegment(
         StartVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
         ASSERT(StartVa != NULL);
 
-        Length = __min(SegmentSize - Segment->Length, PAGE_SIZE);
+        Mdl->ByteOffset = Ring->BackfillSize;
+
+        StartVa += Ring->BackfillSize;
+        Mdl->MappedSystemVa = StartVa;
+
+        Length = __min(SegmentSize - Segment->Length, PAGE_SIZE - Mdl->ByteOffset);
         ASSERT(Length != 0);
 
         (VOID) ReceiverRingPullup(Ring, StartVa, Payload, Length);
@@ -854,11 +863,14 @@ __ReceiverRingBuildSegment(
         if (Segment->Length == SegmentSize)
             break;
 
-        ASSERT3U(Mdl->ByteCount, ==, PAGE_SIZE);
+        ASSERT3U(Mdl->ByteCount, ==, PAGE_SIZE - Mdl->ByteOffset);
     }
 
     Segment->Length += Info->Length;
 
+    if (Receiver->AlwaysPullup != 0)
+        __ReceiverRingPullupPacket(Ring, Segment);
+
     return Segment;
 
 fail2:
@@ -1062,6 +1074,111 @@ fail1:
 }
 
 static VOID
+ReceiverRingProcessStandardPacket(
+    IN  PXENVIF_RECEIVER_RING   Ring,
+    IN  PXENVIF_RECEIVER_PACKET Packet,
+    OUT PLIST_ENTRY             List
+    )
+{
+    PXENVIF_RECEIVER            Receiver;
+    PXENVIF_FRONTEND            Frontend;
+    PXENVIF_MAC                 Mac;
+    PXENVIF_PACKET_INFO         Info;
+    XENVIF_PACKET_PAYLOAD       Payload;
+    ULONG                       MaximumFrameSize;
+    NTSTATUS                    status;
+
+    Receiver = Ring->Receiver;
+    Frontend = Receiver->Frontend;
+    Mac = FrontendGetMac(Frontend);
+
+    Info = Packet->Info;
+
+    Payload.Mdl = Packet->Mdl.Next;
+    Payload.Offset = 0;
+    Payload.Length = Packet->Length - Info->Length;
+
+    MacQueryMaximumFrameSize(Mac, &MaximumFrameSize);
+
+    status = STATUS_INVALID_PARAMETER;
+    if (Packet->Length > MaximumFrameSize)
+        goto fail1;
+
+    // Certain HCK tests (e.g. the NDISTest 2c_Priority test) are
+    // sufficiently brain-dead that they cannot cope with
+    // multi-fragment packets, or at least packets where headers are
+    // in different fragments. All these tests seem to use IPX packets
+    // and, in practice, little else uses LLC so pull up all LLC
+    // packets into a single fragment.
+    if (Info->LLCSnapHeader.Length != 0 || Receiver->AlwaysPullup != 0)
+        __ReceiverRingPullupPacket(Ring, Packet);
+    else if (Payload.Mdl != NULL && Payload.Mdl->ByteOffset < Ring->BackfillSize) {
+        PMDL    Mdl;
+        PUCHAR  StartVa;
+
+        // NDIS Header/Data split requires that the data MDL has a minimum length
+        // of headroom (i.e. ByteOffset) so that it can pre-pend the header to the data
+        // if something up the stack can't cope with the split.
+
+        Mdl = __ReceiverRingGetMdl(Ring, TRUE);
+
+        status = STATUS_NO_MEMORY;
+        if (Mdl == NULL)
+            goto fail2;
+
+        StartVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        ASSERT(StartVa != NULL);
+
+        Mdl->ByteOffset = Ring->BackfillSize;
+        Mdl->ByteCount = __min(Payload.Mdl->ByteCount,
+                               PAGE_SIZE - Mdl->ByteOffset);
+
+        StartVa += Ring->BackfillSize;
+        Mdl->MappedSystemVa = StartVa;
+
+        (VOID) ReceiverRingPullup(Ring, StartVa, &Payload, Mdl->ByteCount);
+
+        if (Payload.Length != 0) {
+            ASSERT(Payload.Mdl != NULL);
+            Mdl->Next = Payload.Mdl;
+        }
+
+        Packet->Mdl.Next = Mdl;
+    }
+
+    ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
+    InsertTailList(List, &Packet->ListEntry);
+
+    return;
+
+fail2:
+fail1:
+    if (Payload.Length != 0) {
+        PMDL    Mdl = Payload.Mdl;
+
+        ASSERT(Mdl != NULL);
+
+        while (Mdl != NULL) {
+            PMDL    Next;
+
+            Next = Mdl->Next;
+            Mdl->Next = NULL;
+
+            __ReceiverRingPutMdl(Ring, Mdl, TRUE);
+
+            Mdl = Next;
+        }
+    }
+
+    Packet->Mdl.Next = NULL;
+    __ReceiverRingPutPacket(Ring, Packet, TRUE);
+
+    FrontendIncrementStatistic(Frontend,
+                               XENVIF_RECEIVER_PACKETS_DROPPED,
+                               1);
+}
+
+static VOID
 ReceiverRingProcessPacket(
     IN  PXENVIF_RECEIVER_RING   Ring,
     IN  PXENVIF_RECEIVER_PACKET Packet,
@@ -1143,8 +1260,7 @@ ReceiverRingProcessPacket(
     DestinationAddress = &EthernetHeader->DestinationAddress;
 
     status = STATUS_UNSUCCESSFUL;
-    if (!MacApplyFilters(FrontendGetMac(Frontend),
-                         DestinationAddress))
+    if (!MacApplyFilters(Mac, DestinationAddress))
         goto fail3;
 
     Type = GET_ETHERNET_ADDRESS_TYPE(DestinationAddress);
@@ -1182,33 +1298,13 @@ ReceiverRingProcessPacket(
         break;
     }
 
-    if (Packet->MaximumSegmentSize != 0) {
+    if (Packet->MaximumSegmentSize != 0)
         ReceiverRingProcessLargePacket(Ring, Packet, List);
-    } else {
-        ULONG   MaximumFrameSize;
-
-        MacQueryMaximumFrameSize(Mac, &MaximumFrameSize);
-
-        if (Packet->Length > MaximumFrameSize)
-            goto fail4;
-        
-        // Certain HCK tests (e.g. the NDISTest 2c_Priority test) are
-        // sufficiently brain-dead that they cannot cope with
-        // multi-fragment packets, or at least packets where headers are
-        // in different fragments. All these tests seem to use IPX packets
-        // and, in practice, little else uses LLC so pull up all LLC
-        // packets into a single fragment.
-        if (Info->LLCSnapHeader.Length != 0 ||
-            Receiver->AlwaysPullup != 0)
-            __ReceiverRingPullupPacket(Ring, Packet);
-
-        ASSERT(IsZeroMemory(&Packet->ListEntry, sizeof (LIST_ENTRY)));
-        InsertTailList(List, &Packet->ListEntry);
-    }
+    else
+        ReceiverRingProcessStandardPacket(Ring, Packet, List);
 
     return;
 
-fail4:
 fail3:
     Packet->Mdl.Next = NULL;
     __ReceiverRingPutPacket(Ring, Packet, TRUE);
@@ -2510,6 +2606,7 @@ __ReceiverRingTeardown(
     Ring->Dpcs = 0;
     RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
 
+    Ring->BackfillSize = 0;
     Ring->OffloadOptions.Value = 0;
 
     ThreadAlert(Ring->WatchdogThread);
@@ -2558,6 +2655,23 @@ __ReceiverRingSetOffloadOptions(
     KeLowerIrql(Irql);
 }
 
+static FORCEINLINE VOID
+__ReceiverRingSetBackfillSize(
+    IN  PXENVIF_RECEIVER_RING   Ring,
+    IN  ULONG                   Size
+    )
+{
+    KIRQL                       Irql;
+
+    KeRaiseIrql(DISPATCH_LEVEL, &Irql);
+
+    __ReceiverRingAcquireLock(Ring);
+    Ring->BackfillSize = Size;
+    __ReceiverRingReleaseLock(Ring);
+
+    KeLowerIrql(Irql);
+}
+
 static VOID
 ReceiverDebugCallback(
     IN  PVOID           Argument,
@@ -3209,6 +3323,27 @@ ReceiverSetOffloadOptions(
 }
 
 VOID
+ReceiverSetBackfillSize(
+    IN  PXENVIF_RECEIVER    Receiver,
+    IN  ULONG               Size
+    )
+{
+    LONG                    Index;
+
+    ASSERT3U(Size, <, PAGE_SIZE);
+
+    for (Index = 0; Index < Receiver->MaxQueues; ++Index) {
+        PXENVIF_RECEIVER_RING   Ring;
+
+        Ring = Receiver->Ring[Index];
+        if (Ring == NULL)
+            break;
+
+        __ReceiverRingSetBackfillSize(Ring, Size);
+    }
+}
+
+VOID
 ReceiverQueryRingSize(
     IN  PXENVIF_RECEIVER    Receiver,
     OUT PULONG              Size
diff --git a/src/xenvif/receiver.h b/src/xenvif/receiver.h
index 8704101..e4ab7a7 100644
--- a/src/xenvif/receiver.h
+++ b/src/xenvif/receiver.h
@@ -95,6 +95,12 @@ ReceiverSetOffloadOptions(
     );
 
 extern VOID
+ReceiverSetBackfillSize(
+    IN  PXENVIF_RECEIVER    Receiver,
+    IN  ULONG               Size
+    );
+
+extern VOID
 ReceiverReturnPackets(
     IN  PXENVIF_RECEIVER    Receiver,
     IN  PLIST_ENTRY         List
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 2d8f613..8bf0c2c 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -2775,15 +2775,11 @@ __TransmitterReturnPackets(
 
         break;
     }
-    case 2:
+    default:
         if (!IsListEmpty(List))
             VifTransmitterReturnPackets(VifContext, List);
 
         break;
-
-    default:
-        ASSERT(FALSE);
-        break;
     }
 }
 
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index b2bbf05..02d1d11 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -408,6 +408,22 @@ VifReceiverSetOffloadOptions(
 }
 
 static VOID
+VifReceiverSetBackfillSize(
+    IN  PINTERFACE      Interface,
+    IN  ULONG           Size
+    )
+{
+    PXENVIF_VIF_CONTEXT Context = Interface->Context;
+
+    AcquireMrswLockShared(&Context->Lock);
+
+    ReceiverSetBackfillSize(FrontendGetReceiver(Context->Frontend),
+                            Size);
+
+    ReleaseMrswLockShared(&Context->Lock);
+}
+
+static VOID
 VifMacQueryState(
     IN  PINTERFACE                  Interface,
     OUT PNET_IF_MEDIA_CONNECT_STATE MediaConnectState OPTIONAL,
@@ -747,6 +763,32 @@ static struct _XENVIF_VIF_INTERFACE_V2 VifInterfaceVersion2 = {
     VifMacQueryFilterLevel
 };
 
+static struct _XENVIF_VIF_INTERFACE_V3 VifInterfaceVersion3 = {
+    { sizeof (struct _XENVIF_VIF_INTERFACE_V3), 3, NULL, NULL, NULL },
+    VifAcquire,
+    VifRelease,
+    VifEnable,
+    VifDisable,
+    VifQueryStatistic,
+    VifReceiverReturnPackets,
+    VifReceiverSetOffloadOptions,
+    VifReceiverSetBackfillSize,
+    VifReceiverQueryRingSize,
+    VifTransmitterGetPacketHeaders,
+    VifTransmitterQueuePackets,
+    VifTransmitterQueryOffloadOptions,
+    VifTransmitterQueryLargePacketSize,
+    VifTransmitterQueryRingSize,
+    VifMacQueryState,
+    VifMacQueryMaximumFrameSize,
+    VifMacQueryPermanentAddress,
+    VifMacQueryCurrentAddress,
+    VifMacQueryMulticastAddresses,
+    VifMacSetMulticastAddresses,
+    VifMacSetFilterLevel,
+    VifMacQueryFilterLevel
+};
+
 NTSTATUS
 VifInitialize(
     IN  PXENVIF_PDO         Pdo,
@@ -845,6 +887,23 @@ VifGetInterface(
         status = STATUS_SUCCESS;
         break;
     }
+    case 3: {
+        struct _XENVIF_VIF_INTERFACE_V3 *VifInterface;
+
+        VifInterface = (struct _XENVIF_VIF_INTERFACE_V3 *)Interface;
+
+        status = STATUS_BUFFER_OVERFLOW;
+        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V3))
+            break;
+
+        *VifInterface = VifInterfaceVersion3;
+
+        ASSERT3U(Interface->Version, ==, Version);
+        Interface->Context = Context;
+
+        status = STATUS_SUCCESS;
+        break;
+    }
     default:
         status = STATUS_NOT_SUPPORTED;
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:07:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:07:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTU3-00026m-7a; Mon, 14 Sep 2015 13:07:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTU1-00026a-LA
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:07:45 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	BD/D7-22089-1A6C6F55; Mon, 14 Sep 2015 13:07:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1442236063!34933145!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22582 invoked from network); 14 Sep 2015 13:07:43 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:07:43 -0000
Received: by wiclk2 with SMTP id lk2so139995224wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=S5I6jo9Bqq6aYsdoRg6qNpQ1VNTK1p2jgQV9khIB+jo=;
	b=Kxfq6+3k0OuGBtino5dNN59/5E0lIAiqxa9lDHRXfpLUyn3zpgflOYSoy8sU/F9Epo
	N6xXqzejX4FRuf8tHAMtkTiKpe9CWrqXPlmZOVdRuGcMRniaWF1U93X7wh+emkZUkAwU
	c5Fy5+jeP1k1pTc9oGWPhVqOv9PbkauqRi+04pEchIO6TsVUONpuuLKXaX+LjA0UQEh2
	9W70aierrL64laL7Ro9n+bjUfHrMyGicsU/b7eyxd53YRHmt69mmXJI/8TRoygN3Hfhg
	/xhOzzH+WTnz9L0rPZd/viuAhIbTDqrA08fuq9PLaq0DMYB8cTg5OuiBPMm8aCVkWT6K
	AA8g==
X-Received: by 10.180.35.163 with SMTP id i3mr24775220wij.80.1442236063255;
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	yu7sm15486352wjc.43.2015.09.14.06.07.42
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:07:42 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:07:39 +0100
Message-Id: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Update to NDIS 6.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xennet/miniport.c        | 52 ++++++++++++++++++++++++++++++++++++++++----
 vs2012/xennet/xennet.vcxproj |  2 +-
 vs2013/xennet/xennet.vcxproj |  2 +-
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/src/xennet/miniport.c b/src/xennet/miniport.c
index 476cee4..5500418 100644
--- a/src/xennet/miniport.c
+++ b/src/xennet/miniport.c
@@ -39,6 +39,22 @@
 #include "assert.h"
 
 static
+_Function_class_(SET_OPTIONS)
+NDIS_STATUS
+MiniportSetOptions(
+    IN  NDIS_HANDLE NdisDriverHandle,
+    IN  NDIS_HANDLE DriverContext
+    )
+{
+    UNREFERENCED_PARAMETER(NdisDriverHandle);
+    UNREFERENCED_PARAMETER(DriverContext);
+
+    Trace("<===>\n");
+
+    return NDIS_STATUS_SUCCESS;
+}
+
+static
 _Function_class_(MINIPORT_INITIALIZE)
 NDIS_STATUS
 MiniportInitializeEx(
@@ -301,6 +317,32 @@ MiniportCancelOidRequest(
     Trace("<===>\n");
 }
 
+static
+_Function_class_(MINIPORT_DIRECT_OID_REQUEST)
+NDIS_STATUS
+MiniportDirectOidRequest(
+    IN  NDIS_HANDLE         MiniportAdapterContext,
+    IN  PNDIS_OID_REQUEST   OidRequest
+    )
+{
+    UNREFERENCED_PARAMETER(MiniportAdapterContext);
+    UNREFERENCED_PARAMETER(OidRequest);
+
+    return NDIS_STATUS_INVALID_OID;
+}
+
+static
+_Function_class_(MINIPORT_CANCEL_DIRECT_OID_REQUEST)
+VOID
+MiniportCancelDirectOidRequest(
+    IN  NDIS_HANDLE MiniportAdapterContext,
+    IN  PVOID       RequestId
+    )
+{
+    UNREFERENCED_PARAMETER(MiniportAdapterContext);
+    UNREFERENCED_PARAMETER(RequestId);
+}
+
 NDIS_STATUS
 MiniportRegister(
     IN  PDRIVER_OBJECT                      DriverObject,
@@ -316,11 +358,11 @@ MiniportRegister(
     NdisZeroMemory(&MiniportDriverCharacteristics, sizeof (MiniportDriverCharacteristics));
 
     MiniportDriverCharacteristics.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
-    MiniportDriverCharacteristics.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
-    MiniportDriverCharacteristics.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
+    MiniportDriverCharacteristics.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2;
+    MiniportDriverCharacteristics.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2;
 
-    MiniportDriverCharacteristics.MajorNdisVersion = 6;
-    MiniportDriverCharacteristics.MinorNdisVersion = 0;
+    MiniportDriverCharacteristics.MajorNdisVersion = NDIS_MINIPORT_MAJOR_VERSION;
+    MiniportDriverCharacteristics.MinorNdisVersion = NDIS_MINIPORT_MINOR_VERSION;
     MiniportDriverCharacteristics.MajorDriverVersion = MAJOR_VERSION;
     MiniportDriverCharacteristics.MinorDriverVersion = MINOR_VERSION;
     MiniportDriverCharacteristics.Flags = NDIS_WDM_DRIVER;
@@ -339,6 +381,8 @@ MiniportRegister(
     MiniportDriverCharacteristics.SendNetBufferListsHandler = MiniportSendNetBufferLists;
     MiniportDriverCharacteristics.ShutdownHandlerEx = MiniportShutdownEx;
     MiniportDriverCharacteristics.UnloadHandler = MiniportDriverUnload;
+    MiniportDriverCharacteristics.DirectOidRequestHandler = MiniportDirectOidRequest;
+    MiniportDriverCharacteristics.CancelDirectOidRequestHandler = MiniportCancelDirectOidRequest;
 
     NdisStatus = NdisMRegisterMiniportDriver(DriverObject,
                                              RegistryPath,
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index 8c1862e..d69391e 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -32,7 +32,7 @@
 	
     <ItemDefinitionGroup>
 		<ClCompile>
-			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS61_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
 			<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 			<MultiProcessorCompilation>true</MultiProcessorCompilation>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index 0aa30a6..c50bb44 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -64,7 +64,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup>
     <ClCompile>
-      <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS61_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:07:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:07:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTU3-00026q-8g; Mon, 14 Sep 2015 13:07:47 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTU2-00026b-8F
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:07:46 +0000
Received: from [85.158.137.68] by server-6.bemta-3.messagelabs.com id
	58/7B-29649-1A6C6F55; Mon, 14 Sep 2015 13:07:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1442236064!44181756!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10301 invoked from network); 14 Sep 2015 13:07:44 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:07:44 -0000
Received: by wicfx3 with SMTP id fx3so139441222wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:07:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=v3Qu4zgVriOhnyT/jOQRpyOfuJs9V5jTjtfM+WEYKUo=;
	b=GmOKeRB12kgNYfiWmRN+QsiufDTXjGym31A8bZaOmObf0D7PkDhmsDwGcPUQCLjWTV
	Adm9oPtVp0e8lc+znaD5Fdj3U7X4TqFnFbvP93nM8VGtct2a2eRiZAhl64h7flFCV/8Y
	CfOGSTCa9IO0v0iHdpqvayAICCzAkB99LR10nXt8FAZAUDmb/QSkXZHju4n3ThzH4Zmb
	jFJv/tfSnfemIfcLJ6Km3lBGwXjiUnYFrLMtXwN+kodQgnpNXlgNQ9TLKHAdnkS+CccM
	EVDu/fw9tQInocMstJpyV/QgGeIlZFaWlXEdS4D83FYqrF1ygdHPbwYO0iQLvGu1IR2M
	8hVA==
X-Received: by 10.180.9.162 with SMTP id a2mr24726532wib.95.1442236064062;
	Mon, 14 Sep 2015 06:07:44 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	yu7sm15486352wjc.43.2015.09.14.06.07.43
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:07:40 +0100
Message-Id: <1442236060-9268-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
References: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Add header/data split support
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Now that XENNET is using NDIS 6.1, implement header/data split. See
NDIS documentation for more details. This requires using version 3 of the
VIF interface from XENVIF to support the requirements for data MDL
backfill.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h |  48 ++++++++++++++++++++--
 src/xennet.inf          |   8 ++++
 src/xennet/adapter.c    | 105 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/xennet/adapter.h    |  13 ------
 src/xennet/receiver.c   |  82 ++++++++++++++++++++++++++++++-------
 src/xennet/receiver.h   |   6 +++
 6 files changed, 229 insertions(+), 33 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index d083fd1..e5f8534 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -564,6 +564,19 @@ typedef VOID
     IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
     );
 
+/*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
+    \brief Set the required receive backfill size (free space before
+    packet payload).
+
+    \param Interface The interface header
+    \param Size The required size
+*/
+typedef VOID
+(*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
+    IN  PINTERFACE  Interface,
+    IN  ULONG       Size
+    );
+
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
     \brief Query the maximum size of packet containing a TCP large segment
     that can be handled by the transmit side
@@ -760,7 +773,6 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -790,7 +802,37 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
+/*! \struct _XENVIF_VIF_INTERFACE_V3
+    \brief VIF interface version 3
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V3 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
 
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -801,6 +843,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 #endif  // _WINDLL
 
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    1
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    2
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet.inf b/src/xennet.inf
index 7e9d9e6..5aa8c6c 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -159,6 +159,13 @@ HKR, Ndi\params\LROIPv6,                          Optional,   0, "0"
 HKR, Ndi\params\LROIPv6\enum,                     "0",        0, %Disabled%
 HKR, Ndi\params\LROIPv6\enum,                     "1",        0, %Enabled%
 
+HKR, Ndi\params\*HeaderDataSplit,                 ParamDesc,  0, %HeaderDataSplit%
+HKR, Ndi\params\*HeaderDataSplit,                 Type,       0, "enum"
+HKR, Ndi\params\*HeaderDataSplit,                 Default,    0, "0"
+HKR, Ndi\params\*HeaderDataSplit,                 Optional,   0, "0"
+HKR, Ndi\params\*HeaderDataSplit\enum,            "0",        0, %Disabled%
+HKR, Ndi\params\*HeaderDataSplit\enum,            "1",        0, %Enabled%
+
 [XenNet_Inst.Services] 
 AddService=xennet,0x02,XenNet_Service,XenNet_EventLog
 
@@ -202,6 +209,7 @@ LSOV2IPv4="Large Send Offload V2 (IPv4)"
 LSOV2IPv6="Large Send Offload V2 (IPv6)"
 LROIPv4="Large Receive Offload (IPv4)"
 LROIPv6="Large Receive Offload (IPv6)"
+HeaderDataSplit="Header Data Split"
 Disabled="Disabled"
 Enabled="Enabled"
 Enabled-Rx="Rx Enabled"
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index a1460c7..1e88754 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -44,6 +44,20 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+typedef struct _PROPERTIES {
+    int ipv4_csum;
+    int tcpv4_csum;
+    int udpv4_csum;
+    int tcpv6_csum;
+    int udpv6_csum;
+    int need_csum_value;
+    int lsov4;
+    int lsov6;
+    int lrov4;
+    int lrov6;
+    ULONG HeaderDataSplit;
+} PROPERTIES, *PPROPERTIES;
+
 struct _XENNET_ADAPTER {
     XENVIF_VIF_INTERFACE    VifInterface;
     XENBUS_CACHE_INTERFACE  CacheInterface;
@@ -115,6 +129,7 @@ static NDIS_OID XennetSupportedOids[] =
     OID_PNP_CAPABILITIES,
     OID_PNP_QUERY_POWER,
     OID_PNP_SET_POWER,
+    OID_GEN_HD_SPLIT_PARAMETERS,
 };
 
 #define ADAPTER_POOL_TAG    'AteN'
@@ -510,7 +525,6 @@ AdapterGetOffloadEncapsulation(
         TxOptions->OffloadIpVersion6UdpChecksum = 1;
 
     RxOptions = ReceiverOffloadOptions(Adapter->Receiver);
-
     RxOptions->Value = 0;
     RxOptions->OffloadTagManipulation = 1;
 
@@ -622,6 +636,18 @@ invalid_parameter:
 #undef CHANGE
 
 static NDIS_STATUS
+AdapterGetHeaderDataSplitParameters(
+    IN  PXENNET_ADAPTER             Adapter,
+    IN  PNDIS_HD_SPLIT_PARAMETERS   Split
+    )
+{
+    if (Split->HDSplitCombineFlags == NDIS_HD_SPLIT_COMBINE_ALL_HEADERS)
+        ReceiverSplitHeaderData(Adapter->Receiver, 0);
+
+    return NDIS_STATUS_SUCCESS;
+}
+
+static NDIS_STATUS
 AdapterQueryGeneralStatistics(
     IN  PXENNET_ADAPTER     Adapter,
     IN  PNDIS_STATISTICS_INFO   Info,
@@ -1204,6 +1230,16 @@ AdapterSetInformation(
         }
         break;
 
+    case OID_GEN_HD_SPLIT_PARAMETERS:
+        BytesNeeded = sizeof(NDIS_HD_SPLIT_PARAMETERS);
+        if (BufferLength >= BytesNeeded) {
+            ndisStatus = AdapterGetHeaderDataSplitParameters(Adapter,
+                                                             (PNDIS_HD_SPLIT_PARAMETERS)Buffer);
+            if (ndisStatus == NDIS_STATUS_SUCCESS)
+                BytesRead = sizeof(NDIS_HD_SPLIT_PARAMETERS);
+        }
+        break;
+
     case OID_GEN_INTERRUPT_MODERATION:
     case OID_GEN_MACHINE_NAME:
         Warn = FALSE;
@@ -1868,6 +1904,7 @@ AdapterGetAdvancedSettings(
     READ_PROPERTY(Adapter->Properties.lrov4, L"LROIPv4", 1, Handle);
     READ_PROPERTY(Adapter->Properties.lrov6, L"LROIPv6", 1, Handle);
     READ_PROPERTY(Adapter->Properties.need_csum_value, L"NeedChecksumValue", 1, Handle);
+    READ_PROPERTY(Adapter->Properties.HeaderDataSplit, L"*HeaderDataSplit", 1, Handle);
 
     NdisCloseConfiguration(Handle);
 
@@ -2151,6 +2188,63 @@ AdapterSetOffloadAttributes(
     return ndisStatus;
 }
 
+static NDIS_STATUS
+AdapterSetHeaderDataSplitAttributes(
+    IN  PXENNET_ADAPTER                                 Adapter
+    )
+{
+    NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES    Attribs;
+    NDIS_HD_SPLIT_ATTRIBUTES                            Split;
+    NDIS_STATUS                                         NdisStatus;
+
+    RtlZeroMemory(&Attribs, sizeof(Attribs));
+
+    Attribs.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES;
+    Attribs.Header.Revision = NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1;
+    Attribs.Header.Size = NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1;
+
+    RtlZeroMemory(&Split, sizeof(Split));
+
+    Split.Header.Type = NDIS_OBJECT_TYPE_HD_SPLIT_ATTRIBUTES;
+    Split.Header.Revision = NDIS_HD_SPLIT_ATTRIBUTES_REVISION_1;
+    Split.Header.Size = NDIS_SIZEOF_HD_SPLIT_ATTRIBUTES_REVISION_1;
+    Split.HardwareCapabilities =
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV4_OPTIONS |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV6_EXTENSION_HEADERS |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_TCP_OPTIONS;
+
+    if (Adapter->Properties.HeaderDataSplit != 0)
+        Split.CurrentCapabilities = Split.HardwareCapabilities;
+
+    Attribs.HDSplitAttributes = &Split;
+
+    NdisStatus = NdisMSetMiniportAttributes(Adapter->NdisAdapterHandle,
+                                            (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&Attribs);
+    if (NdisStatus != NDIS_STATUS_SUCCESS)
+        goto fail1;
+
+    if (Split.HDSplitFlags == NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT) {
+        ASSERT(Split.CurrentCapabilities & NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT);
+
+        Info("BackfillSize = %u\n", Split.BackfillSize);
+        Info("MaxHeaderSize = %u\n", Split.MaxHeaderSize);
+
+        XENVIF_VIF(ReceiverSetBackfillSize,
+                   &Adapter->VifInterface,
+                   Split.BackfillSize);
+
+        ReceiverSplitHeaderData(Adapter->Receiver, Split.MaxHeaderSize);
+    }
+
+    return NDIS_STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", NdisStatus);
+
+    return NdisStatus;
+}
+
 NDIS_STATUS
 AdapterInitialize(
     IN  NDIS_HANDLE         Handle,
@@ -2235,6 +2329,10 @@ AdapterInitialize(
     if (ndisStatus != NDIS_STATUS_SUCCESS)
         goto fail11;
 
+    ndisStatus = AdapterSetHeaderDataSplitAttributes(*Adapter);
+    if (ndisStatus != NDIS_STATUS_SUCCESS)
+        goto fail12;
+
     RtlZeroMemory(&Dma, sizeof(NDIS_SG_DMA_DESCRIPTION));
     Dma.Header.Type = NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION;
     Dma.Header.Revision = NDIS_SG_DMA_DESCRIPTION_REVISION_1;
@@ -2252,14 +2350,15 @@ AdapterInitialize(
 
     ndisStatus = AdapterEnable(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail12;
+        goto fail13;
 
     return NDIS_STATUS_SUCCESS;
 
-fail12:
+fail13:
     if ((*Adapter)->NdisDmaHandle)
         NdisMDeregisterScatterGatherDma((*Adapter)->NdisDmaHandle);
     (*Adapter)->NdisDmaHandle = NULL;
+fail12:
 fail11:
 fail10:
 fail9:
diff --git a/src/xennet/adapter.h b/src/xennet/adapter.h
index 042b863..3cc1d90 100644
--- a/src/xennet/adapter.h
+++ b/src/xennet/adapter.h
@@ -52,19 +52,6 @@
                                          NDIS_PACKET_TYPE_BROADCAST |       \
                                          NDIS_PACKET_TYPE_PROMISCUOUS)
 
-typedef struct _PROPERTIES {
-    int ipv4_csum;
-    int tcpv4_csum;
-    int udpv4_csum;
-    int tcpv6_csum;
-    int udpv6_csum;
-    int need_csum_value;
-    int lsov4;
-    int lsov6;
-    int lrov4;
-    int lrov6;
-} PROPERTIES, *PPROPERTIES;
-
 typedef struct _XENNET_ADAPTER XENNET_ADAPTER, *PXENNET_ADAPTER;
 
 extern NDIS_STATUS
diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c
index 98da49b..17ab27f 100644
--- a/src/xennet/receiver.c
+++ b/src/xennet/receiver.c
@@ -29,9 +29,12 @@
  * SUCH DAMAGE.
  */
 
+#include <ndis.h>
+#include <util.h>
+#include <tcpip.h>
+
 #include "receiver.h"
 #include "adapter.h"
-#include <util.h>
 #include "dbg_print.h"
 #include "assert.h"
 
@@ -44,6 +47,7 @@ struct _XENNET_RECEIVER {
     LONG                        InNDIS;
     LONG                        InNDISMax;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
+    ULONG                       MaxHeaderSize;
 };
 
 #define RECEIVER_POOL_TAG       'RteN'
@@ -166,15 +170,16 @@ __ReceiverReturnNetBufferLists(
 
 static PNET_BUFFER_LIST
 __ReceiverReceivePacket(
-    IN  PXENNET_RECEIVER                Receiver,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          TagControlInformation
+    IN  PXENNET_RECEIVER                        Receiver,
+    IN  PMDL                                    Mdl,
+    IN  ULONG                                   Offset,
+    IN  ULONG                                   Length,
+    IN  XENVIF_PACKET_CHECKSUM_FLAGS            Flags,
+    IN  PXENVIF_PACKET_INFO                     Info
     )
 {
     PNET_BUFFER_LIST                            NetBufferList;
+    PNET_BUFFER                                 NetBuffer;
     NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO   csumInfo;
 
     NetBufferList = __ReceiverAllocateNetBufferList(Receiver,
@@ -184,6 +189,8 @@ __ReceiverReceivePacket(
     if (NetBufferList == NULL)
         goto fail1;
 
+    NetBuffer = NET_BUFFER_LIST_FIRST_NB(NetBufferList);
+
     NetBufferList->SourceHandle = AdapterGetHandle(Receiver->Adapter);
 
     csumInfo.Value = 0;
@@ -199,10 +206,10 @@ __ReceiverReceivePacket(
 
     NET_BUFFER_LIST_INFO(NetBufferList, TcpIpChecksumNetBufferListInfo) = (PVOID)(ULONG_PTR)csumInfo.Value;
 
-    if (TagControlInformation != 0) {
+    if (Info->TagControlInformation != 0) {
         NDIS_NET_BUFFER_LIST_8021Q_INFO Ieee8021QInfo;
 
-        UNPACK_TAG_CONTROL_INFORMATION(TagControlInformation,
+        UNPACK_TAG_CONTROL_INFORMATION(Info->TagControlInformation,
                                        Ieee8021QInfo.TagHeader.UserPriority,
                                        Ieee8021QInfo.TagHeader.CanonicalFormatId,
                                        Ieee8021QInfo.TagHeader.VlanId);
@@ -213,6 +220,48 @@ __ReceiverReceivePacket(
         NET_BUFFER_LIST_INFO(NetBufferList, Ieee8021QNetBufferListInfo) = Ieee8021QInfo.Value;
     }
 
+    if (Info->IpHeader.Offset != 0) {
+        ULONG                   NblFlags;
+        PUCHAR                  InfoVa;
+        PIP_HEADER              IpHeader;
+        NDIS_PHYSICAL_ADDRESS   DataPhysicalAddress;
+
+        NblFlags = NET_BUFFER_LIST_NBL_FLAGS(NetBufferList);
+
+        InfoVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        ASSERT(InfoVa != NULL);
+        InfoVa += Offset;
+
+        IpHeader = (PIP_HEADER)(InfoVa + Info->IpHeader.Offset);
+
+        if (IpHeader->Version == 4) {
+            NblFlags |= NDIS_NBL_FLAGS_IS_IPV4;
+        } else {
+            ASSERT3U(IpHeader->Version, ==, 6);
+            NblFlags |= NDIS_NBL_FLAGS_IS_IPV6;
+        }
+
+        if (Info->TcpHeader.Offset != 0)
+            NblFlags |= NDIS_NBL_FLAGS_IS_TCP;
+        else if (Info->UdpHeader.Offset != 0)
+            NblFlags |= NDIS_NBL_FLAGS_IS_UDP;
+
+        if (Mdl->Next != NULL && Info->Length < Receiver->MaxHeaderSize) {
+            NblFlags |= NDIS_NBL_FLAGS_HD_SPLIT;
+            if (NblFlags & (NDIS_NBL_FLAGS_IS_TCP | NDIS_NBL_FLAGS_IS_UDP))
+                NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD;
+            else
+                NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER;
+
+            DataPhysicalAddress.QuadPart = (ULONGLONG)MmGetMdlPfnArray(Mdl->Next)[0] << PAGE_SHIFT;
+            DataPhysicalAddress.QuadPart += Mdl->Next->ByteOffset;
+
+            NET_BUFFER_DATA_PHYSICAL_ADDRESS(NetBuffer) = DataPhysicalAddress;
+        }
+
+        NET_BUFFER_LIST_NBL_FLAGS(NetBufferList) = NblFlags;
+    }
+
     return NetBufferList;
 
 fail2:
@@ -394,7 +443,6 @@ again:
         ULONG                           Offset;
         ULONG                           Length;
         XENVIF_PACKET_CHECKSUM_FLAGS    Flags;
-        USHORT                          TagControlInformation;
         PNET_BUFFER_LIST                NetBufferList;
 
         if (!LowResources &&
@@ -411,12 +459,9 @@ again:
         Offset = Packet->Offset;
         Length = Packet->Length;
         Flags = Packet->Flags;
-
         Info = Packet->Info;
 
-        TagControlInformation = Info->TagControlInformation;
-
-        NetBufferList = __ReceiverReceivePacket(Receiver, Mdl, Offset, Length, Flags, TagControlInformation);
+        NetBufferList = __ReceiverReceivePacket(Receiver, Mdl, Offset, Length, Flags, Info);
 
         if (NetBufferList != NULL) {
             *TailNetBufferList = NetBufferList;
@@ -454,3 +499,12 @@ ReceiverOffloadOptions(
 {
     return &Receiver->OffloadOptions;
 }
+
+VOID
+ReceiverSplitHeaderData(
+    IN  PXENNET_RECEIVER    Receiver,
+    IN  ULONG               MaxHeaderSize
+    )
+{
+    Receiver->MaxHeaderSize = MaxHeaderSize;
+}
diff --git a/src/xennet/receiver.h b/src/xennet/receiver.h
index fb69b96..b2cc809 100644
--- a/src/xennet/receiver.h
+++ b/src/xennet/receiver.h
@@ -66,4 +66,10 @@ ReceiverOffloadOptions(
     IN  PXENNET_RECEIVER    Receiver
     );
 
+extern VOID
+ReceiverSplitHeaderData(
+    IN  PXENNET_RECEIVER    Receiver,
+    IN  ULONG               MaxHeaderSize
+    );
+
 #endif // _XENNET_RECEIVER_H_
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:07:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:07:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTU3-00026q-8g; Mon, 14 Sep 2015 13:07:47 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTU2-00026b-8F
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:07:46 +0000
Received: from [85.158.137.68] by server-6.bemta-3.messagelabs.com id
	58/7B-29649-1A6C6F55; Mon, 14 Sep 2015 13:07:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-5.tower-31.messagelabs.com!1442236064!44181756!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10301 invoked from network); 14 Sep 2015 13:07:44 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-5.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:07:44 -0000
Received: by wicfx3 with SMTP id fx3so139441222wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:07:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=v3Qu4zgVriOhnyT/jOQRpyOfuJs9V5jTjtfM+WEYKUo=;
	b=GmOKeRB12kgNYfiWmRN+QsiufDTXjGym31A8bZaOmObf0D7PkDhmsDwGcPUQCLjWTV
	Adm9oPtVp0e8lc+znaD5Fdj3U7X4TqFnFbvP93nM8VGtct2a2eRiZAhl64h7flFCV/8Y
	CfOGSTCa9IO0v0iHdpqvayAICCzAkB99LR10nXt8FAZAUDmb/QSkXZHju4n3ThzH4Zmb
	jFJv/tfSnfemIfcLJ6Km3lBGwXjiUnYFrLMtXwN+kodQgnpNXlgNQ9TLKHAdnkS+CccM
	EVDu/fw9tQInocMstJpyV/QgGeIlZFaWlXEdS4D83FYqrF1ygdHPbwYO0iQLvGu1IR2M
	8hVA==
X-Received: by 10.180.9.162 with SMTP id a2mr24726532wib.95.1442236064062;
	Mon, 14 Sep 2015 06:07:44 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	yu7sm15486352wjc.43.2015.09.14.06.07.43
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:07:40 +0100
Message-Id: <1442236060-9268-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
References: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Add header/data split support
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Now that XENNET is using NDIS 6.1, implement header/data split. See
NDIS documentation for more details. This requires using version 3 of the
VIF interface from XENVIF to support the requirements for data MDL
backfill.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h |  48 ++++++++++++++++++++--
 src/xennet.inf          |   8 ++++
 src/xennet/adapter.c    | 105 ++++++++++++++++++++++++++++++++++++++++++++++--
 src/xennet/adapter.h    |  13 ------
 src/xennet/receiver.c   |  82 ++++++++++++++++++++++++++++++-------
 src/xennet/receiver.h   |   6 +++
 6 files changed, 229 insertions(+), 33 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index d083fd1..e5f8534 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -564,6 +564,19 @@ typedef VOID
     IN  XENVIF_VIF_OFFLOAD_OPTIONS  Options
     );
 
+/*! \typedef XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE
+    \brief Set the required receive backfill size (free space before
+    packet payload).
+
+    \param Interface The interface header
+    \param Size The required size
+*/
+typedef VOID
+(*XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE)(
+    IN  PINTERFACE  Interface,
+    IN  ULONG       Size
+    );
+
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE
     \brief Query the maximum size of packet containing a TCP large segment
     that can be handled by the transmit side
@@ -760,7 +773,6 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -790,7 +802,37 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
 };
 
-typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
+/*! \struct _XENVIF_VIF_INTERFACE_V3
+    \brief VIF interface version 3
+    \ingroup interfaces
+*/
+struct _XENVIF_VIF_INTERFACE_V3 {
+    INTERFACE                                       Interface;
+    XENVIF_VIF_ACQUIRE                              Acquire;
+    XENVIF_VIF_RELEASE                              Release;
+    XENVIF_VIF_ENABLE                               Enable;
+    XENVIF_VIF_DISABLE                              Disable;
+    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
+    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
+    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
+    XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
+    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
+    XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
+    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
+    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
+    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
+    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
+    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
+    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
+    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
+    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
+    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
+    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
+};
+
+typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTERFACE;
 
 /*! \def XENVIF_VIF
     \brief Macro at assist in method invocation
@@ -801,6 +843,6 @@ typedef struct _XENVIF_VIF_INTERFACE_V2 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 #endif  // _WINDLL
 
 #define XENVIF_VIF_INTERFACE_VERSION_MIN    1
-#define XENVIF_VIF_INTERFACE_VERSION_MAX    2
+#define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xennet.inf b/src/xennet.inf
index 7e9d9e6..5aa8c6c 100644
--- a/src/xennet.inf
+++ b/src/xennet.inf
@@ -159,6 +159,13 @@ HKR, Ndi\params\LROIPv6,                          Optional,   0, "0"
 HKR, Ndi\params\LROIPv6\enum,                     "0",        0, %Disabled%
 HKR, Ndi\params\LROIPv6\enum,                     "1",        0, %Enabled%
 
+HKR, Ndi\params\*HeaderDataSplit,                 ParamDesc,  0, %HeaderDataSplit%
+HKR, Ndi\params\*HeaderDataSplit,                 Type,       0, "enum"
+HKR, Ndi\params\*HeaderDataSplit,                 Default,    0, "0"
+HKR, Ndi\params\*HeaderDataSplit,                 Optional,   0, "0"
+HKR, Ndi\params\*HeaderDataSplit\enum,            "0",        0, %Disabled%
+HKR, Ndi\params\*HeaderDataSplit\enum,            "1",        0, %Enabled%
+
 [XenNet_Inst.Services] 
 AddService=xennet,0x02,XenNet_Service,XenNet_EventLog
 
@@ -202,6 +209,7 @@ LSOV2IPv4="Large Send Offload V2 (IPv4)"
 LSOV2IPv6="Large Send Offload V2 (IPv6)"
 LROIPv4="Large Receive Offload (IPv4)"
 LROIPv6="Large Receive Offload (IPv6)"
+HeaderDataSplit="Header Data Split"
 Disabled="Disabled"
 Enabled="Enabled"
 Enabled-Rx="Rx Enabled"
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index a1460c7..1e88754 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -44,6 +44,20 @@
 #include "dbg_print.h"
 #include "assert.h"
 
+typedef struct _PROPERTIES {
+    int ipv4_csum;
+    int tcpv4_csum;
+    int udpv4_csum;
+    int tcpv6_csum;
+    int udpv6_csum;
+    int need_csum_value;
+    int lsov4;
+    int lsov6;
+    int lrov4;
+    int lrov6;
+    ULONG HeaderDataSplit;
+} PROPERTIES, *PPROPERTIES;
+
 struct _XENNET_ADAPTER {
     XENVIF_VIF_INTERFACE    VifInterface;
     XENBUS_CACHE_INTERFACE  CacheInterface;
@@ -115,6 +129,7 @@ static NDIS_OID XennetSupportedOids[] =
     OID_PNP_CAPABILITIES,
     OID_PNP_QUERY_POWER,
     OID_PNP_SET_POWER,
+    OID_GEN_HD_SPLIT_PARAMETERS,
 };
 
 #define ADAPTER_POOL_TAG    'AteN'
@@ -510,7 +525,6 @@ AdapterGetOffloadEncapsulation(
         TxOptions->OffloadIpVersion6UdpChecksum = 1;
 
     RxOptions = ReceiverOffloadOptions(Adapter->Receiver);
-
     RxOptions->Value = 0;
     RxOptions->OffloadTagManipulation = 1;
 
@@ -622,6 +636,18 @@ invalid_parameter:
 #undef CHANGE
 
 static NDIS_STATUS
+AdapterGetHeaderDataSplitParameters(
+    IN  PXENNET_ADAPTER             Adapter,
+    IN  PNDIS_HD_SPLIT_PARAMETERS   Split
+    )
+{
+    if (Split->HDSplitCombineFlags == NDIS_HD_SPLIT_COMBINE_ALL_HEADERS)
+        ReceiverSplitHeaderData(Adapter->Receiver, 0);
+
+    return NDIS_STATUS_SUCCESS;
+}
+
+static NDIS_STATUS
 AdapterQueryGeneralStatistics(
     IN  PXENNET_ADAPTER     Adapter,
     IN  PNDIS_STATISTICS_INFO   Info,
@@ -1204,6 +1230,16 @@ AdapterSetInformation(
         }
         break;
 
+    case OID_GEN_HD_SPLIT_PARAMETERS:
+        BytesNeeded = sizeof(NDIS_HD_SPLIT_PARAMETERS);
+        if (BufferLength >= BytesNeeded) {
+            ndisStatus = AdapterGetHeaderDataSplitParameters(Adapter,
+                                                             (PNDIS_HD_SPLIT_PARAMETERS)Buffer);
+            if (ndisStatus == NDIS_STATUS_SUCCESS)
+                BytesRead = sizeof(NDIS_HD_SPLIT_PARAMETERS);
+        }
+        break;
+
     case OID_GEN_INTERRUPT_MODERATION:
     case OID_GEN_MACHINE_NAME:
         Warn = FALSE;
@@ -1868,6 +1904,7 @@ AdapterGetAdvancedSettings(
     READ_PROPERTY(Adapter->Properties.lrov4, L"LROIPv4", 1, Handle);
     READ_PROPERTY(Adapter->Properties.lrov6, L"LROIPv6", 1, Handle);
     READ_PROPERTY(Adapter->Properties.need_csum_value, L"NeedChecksumValue", 1, Handle);
+    READ_PROPERTY(Adapter->Properties.HeaderDataSplit, L"*HeaderDataSplit", 1, Handle);
 
     NdisCloseConfiguration(Handle);
 
@@ -2151,6 +2188,63 @@ AdapterSetOffloadAttributes(
     return ndisStatus;
 }
 
+static NDIS_STATUS
+AdapterSetHeaderDataSplitAttributes(
+    IN  PXENNET_ADAPTER                                 Adapter
+    )
+{
+    NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES    Attribs;
+    NDIS_HD_SPLIT_ATTRIBUTES                            Split;
+    NDIS_STATUS                                         NdisStatus;
+
+    RtlZeroMemory(&Attribs, sizeof(Attribs));
+
+    Attribs.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES;
+    Attribs.Header.Revision = NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1;
+    Attribs.Header.Size = NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1;
+
+    RtlZeroMemory(&Split, sizeof(Split));
+
+    Split.Header.Type = NDIS_OBJECT_TYPE_HD_SPLIT_ATTRIBUTES;
+    Split.Header.Revision = NDIS_HD_SPLIT_ATTRIBUTES_REVISION_1;
+    Split.Header.Size = NDIS_SIZEOF_HD_SPLIT_ATTRIBUTES_REVISION_1;
+    Split.HardwareCapabilities =
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV4_OPTIONS |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV6_EXTENSION_HEADERS |
+        NDIS_HD_SPLIT_CAPS_SUPPORTS_TCP_OPTIONS;
+
+    if (Adapter->Properties.HeaderDataSplit != 0)
+        Split.CurrentCapabilities = Split.HardwareCapabilities;
+
+    Attribs.HDSplitAttributes = &Split;
+
+    NdisStatus = NdisMSetMiniportAttributes(Adapter->NdisAdapterHandle,
+                                            (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&Attribs);
+    if (NdisStatus != NDIS_STATUS_SUCCESS)
+        goto fail1;
+
+    if (Split.HDSplitFlags == NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT) {
+        ASSERT(Split.CurrentCapabilities & NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT);
+
+        Info("BackfillSize = %u\n", Split.BackfillSize);
+        Info("MaxHeaderSize = %u\n", Split.MaxHeaderSize);
+
+        XENVIF_VIF(ReceiverSetBackfillSize,
+                   &Adapter->VifInterface,
+                   Split.BackfillSize);
+
+        ReceiverSplitHeaderData(Adapter->Receiver, Split.MaxHeaderSize);
+    }
+
+    return NDIS_STATUS_SUCCESS;
+
+fail1:
+    Error("fail1 (%08x)\n", NdisStatus);
+
+    return NdisStatus;
+}
+
 NDIS_STATUS
 AdapterInitialize(
     IN  NDIS_HANDLE         Handle,
@@ -2235,6 +2329,10 @@ AdapterInitialize(
     if (ndisStatus != NDIS_STATUS_SUCCESS)
         goto fail11;
 
+    ndisStatus = AdapterSetHeaderDataSplitAttributes(*Adapter);
+    if (ndisStatus != NDIS_STATUS_SUCCESS)
+        goto fail12;
+
     RtlZeroMemory(&Dma, sizeof(NDIS_SG_DMA_DESCRIPTION));
     Dma.Header.Type = NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION;
     Dma.Header.Revision = NDIS_SG_DMA_DESCRIPTION_REVISION_1;
@@ -2252,14 +2350,15 @@ AdapterInitialize(
 
     ndisStatus = AdapterEnable(*Adapter);
     if (ndisStatus != NDIS_STATUS_SUCCESS)
-        goto fail12;
+        goto fail13;
 
     return NDIS_STATUS_SUCCESS;
 
-fail12:
+fail13:
     if ((*Adapter)->NdisDmaHandle)
         NdisMDeregisterScatterGatherDma((*Adapter)->NdisDmaHandle);
     (*Adapter)->NdisDmaHandle = NULL;
+fail12:
 fail11:
 fail10:
 fail9:
diff --git a/src/xennet/adapter.h b/src/xennet/adapter.h
index 042b863..3cc1d90 100644
--- a/src/xennet/adapter.h
+++ b/src/xennet/adapter.h
@@ -52,19 +52,6 @@
                                          NDIS_PACKET_TYPE_BROADCAST |       \
                                          NDIS_PACKET_TYPE_PROMISCUOUS)
 
-typedef struct _PROPERTIES {
-    int ipv4_csum;
-    int tcpv4_csum;
-    int udpv4_csum;
-    int tcpv6_csum;
-    int udpv6_csum;
-    int need_csum_value;
-    int lsov4;
-    int lsov6;
-    int lrov4;
-    int lrov6;
-} PROPERTIES, *PPROPERTIES;
-
 typedef struct _XENNET_ADAPTER XENNET_ADAPTER, *PXENNET_ADAPTER;
 
 extern NDIS_STATUS
diff --git a/src/xennet/receiver.c b/src/xennet/receiver.c
index 98da49b..17ab27f 100644
--- a/src/xennet/receiver.c
+++ b/src/xennet/receiver.c
@@ -29,9 +29,12 @@
  * SUCH DAMAGE.
  */
 
+#include <ndis.h>
+#include <util.h>
+#include <tcpip.h>
+
 #include "receiver.h"
 #include "adapter.h"
-#include <util.h>
 #include "dbg_print.h"
 #include "assert.h"
 
@@ -44,6 +47,7 @@ struct _XENNET_RECEIVER {
     LONG                        InNDIS;
     LONG                        InNDISMax;
     XENVIF_VIF_OFFLOAD_OPTIONS  OffloadOptions;
+    ULONG                       MaxHeaderSize;
 };
 
 #define RECEIVER_POOL_TAG       'RteN'
@@ -166,15 +170,16 @@ __ReceiverReturnNetBufferLists(
 
 static PNET_BUFFER_LIST
 __ReceiverReceivePacket(
-    IN  PXENNET_RECEIVER                Receiver,
-    IN  PMDL                            Mdl,
-    IN  ULONG                           Offset,
-    IN  ULONG                           Length,
-    IN  XENVIF_PACKET_CHECKSUM_FLAGS    Flags,
-    IN  USHORT                          TagControlInformation
+    IN  PXENNET_RECEIVER                        Receiver,
+    IN  PMDL                                    Mdl,
+    IN  ULONG                                   Offset,
+    IN  ULONG                                   Length,
+    IN  XENVIF_PACKET_CHECKSUM_FLAGS            Flags,
+    IN  PXENVIF_PACKET_INFO                     Info
     )
 {
     PNET_BUFFER_LIST                            NetBufferList;
+    PNET_BUFFER                                 NetBuffer;
     NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO   csumInfo;
 
     NetBufferList = __ReceiverAllocateNetBufferList(Receiver,
@@ -184,6 +189,8 @@ __ReceiverReceivePacket(
     if (NetBufferList == NULL)
         goto fail1;
 
+    NetBuffer = NET_BUFFER_LIST_FIRST_NB(NetBufferList);
+
     NetBufferList->SourceHandle = AdapterGetHandle(Receiver->Adapter);
 
     csumInfo.Value = 0;
@@ -199,10 +206,10 @@ __ReceiverReceivePacket(
 
     NET_BUFFER_LIST_INFO(NetBufferList, TcpIpChecksumNetBufferListInfo) = (PVOID)(ULONG_PTR)csumInfo.Value;
 
-    if (TagControlInformation != 0) {
+    if (Info->TagControlInformation != 0) {
         NDIS_NET_BUFFER_LIST_8021Q_INFO Ieee8021QInfo;
 
-        UNPACK_TAG_CONTROL_INFORMATION(TagControlInformation,
+        UNPACK_TAG_CONTROL_INFORMATION(Info->TagControlInformation,
                                        Ieee8021QInfo.TagHeader.UserPriority,
                                        Ieee8021QInfo.TagHeader.CanonicalFormatId,
                                        Ieee8021QInfo.TagHeader.VlanId);
@@ -213,6 +220,48 @@ __ReceiverReceivePacket(
         NET_BUFFER_LIST_INFO(NetBufferList, Ieee8021QNetBufferListInfo) = Ieee8021QInfo.Value;
     }
 
+    if (Info->IpHeader.Offset != 0) {
+        ULONG                   NblFlags;
+        PUCHAR                  InfoVa;
+        PIP_HEADER              IpHeader;
+        NDIS_PHYSICAL_ADDRESS   DataPhysicalAddress;
+
+        NblFlags = NET_BUFFER_LIST_NBL_FLAGS(NetBufferList);
+
+        InfoVa = MmGetSystemAddressForMdlSafe(Mdl, NormalPagePriority);
+        ASSERT(InfoVa != NULL);
+        InfoVa += Offset;
+
+        IpHeader = (PIP_HEADER)(InfoVa + Info->IpHeader.Offset);
+
+        if (IpHeader->Version == 4) {
+            NblFlags |= NDIS_NBL_FLAGS_IS_IPV4;
+        } else {
+            ASSERT3U(IpHeader->Version, ==, 6);
+            NblFlags |= NDIS_NBL_FLAGS_IS_IPV6;
+        }
+
+        if (Info->TcpHeader.Offset != 0)
+            NblFlags |= NDIS_NBL_FLAGS_IS_TCP;
+        else if (Info->UdpHeader.Offset != 0)
+            NblFlags |= NDIS_NBL_FLAGS_IS_UDP;
+
+        if (Mdl->Next != NULL && Info->Length < Receiver->MaxHeaderSize) {
+            NblFlags |= NDIS_NBL_FLAGS_HD_SPLIT;
+            if (NblFlags & (NDIS_NBL_FLAGS_IS_TCP | NDIS_NBL_FLAGS_IS_UDP))
+                NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_PAYLOAD;
+            else
+                NblFlags |= NDIS_NBL_FLAGS_SPLIT_AT_UPPER_LAYER_PROTOCOL_HEADER;
+
+            DataPhysicalAddress.QuadPart = (ULONGLONG)MmGetMdlPfnArray(Mdl->Next)[0] << PAGE_SHIFT;
+            DataPhysicalAddress.QuadPart += Mdl->Next->ByteOffset;
+
+            NET_BUFFER_DATA_PHYSICAL_ADDRESS(NetBuffer) = DataPhysicalAddress;
+        }
+
+        NET_BUFFER_LIST_NBL_FLAGS(NetBufferList) = NblFlags;
+    }
+
     return NetBufferList;
 
 fail2:
@@ -394,7 +443,6 @@ again:
         ULONG                           Offset;
         ULONG                           Length;
         XENVIF_PACKET_CHECKSUM_FLAGS    Flags;
-        USHORT                          TagControlInformation;
         PNET_BUFFER_LIST                NetBufferList;
 
         if (!LowResources &&
@@ -411,12 +459,9 @@ again:
         Offset = Packet->Offset;
         Length = Packet->Length;
         Flags = Packet->Flags;
-
         Info = Packet->Info;
 
-        TagControlInformation = Info->TagControlInformation;
-
-        NetBufferList = __ReceiverReceivePacket(Receiver, Mdl, Offset, Length, Flags, TagControlInformation);
+        NetBufferList = __ReceiverReceivePacket(Receiver, Mdl, Offset, Length, Flags, Info);
 
         if (NetBufferList != NULL) {
             *TailNetBufferList = NetBufferList;
@@ -454,3 +499,12 @@ ReceiverOffloadOptions(
 {
     return &Receiver->OffloadOptions;
 }
+
+VOID
+ReceiverSplitHeaderData(
+    IN  PXENNET_RECEIVER    Receiver,
+    IN  ULONG               MaxHeaderSize
+    )
+{
+    Receiver->MaxHeaderSize = MaxHeaderSize;
+}
diff --git a/src/xennet/receiver.h b/src/xennet/receiver.h
index fb69b96..b2cc809 100644
--- a/src/xennet/receiver.h
+++ b/src/xennet/receiver.h
@@ -66,4 +66,10 @@ ReceiverOffloadOptions(
     IN  PXENNET_RECEIVER    Receiver
     );
 
+extern VOID
+ReceiverSplitHeaderData(
+    IN  PXENNET_RECEIVER    Receiver,
+    IN  ULONG               MaxHeaderSize
+    );
+
 #endif // _XENNET_RECEIVER_H_
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 13:07:47 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 13:07:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbTU3-00026m-7a; Mon, 14 Sep 2015 13:07:47 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbTU1-00026a-LA
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 13:07:45 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	BD/D7-22089-1A6C6F55; Mon, 14 Sep 2015 13:07:45 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-13.tower-206.messagelabs.com!1442236063!34933145!1
X-Originating-IP: [209.85.212.177]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 22582 invoked from network); 14 Sep 2015 13:07:43 -0000
Received: from mail-wi0-f177.google.com (HELO mail-wi0-f177.google.com)
	(209.85.212.177)
	by server-13.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	14 Sep 2015 13:07:43 -0000
Received: by wiclk2 with SMTP id lk2so139995224wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=S5I6jo9Bqq6aYsdoRg6qNpQ1VNTK1p2jgQV9khIB+jo=;
	b=Kxfq6+3k0OuGBtino5dNN59/5E0lIAiqxa9lDHRXfpLUyn3zpgflOYSoy8sU/F9Epo
	N6xXqzejX4FRuf8tHAMtkTiKpe9CWrqXPlmZOVdRuGcMRniaWF1U93X7wh+emkZUkAwU
	c5Fy5+jeP1k1pTc9oGWPhVqOv9PbkauqRi+04pEchIO6TsVUONpuuLKXaX+LjA0UQEh2
	9W70aierrL64laL7Ro9n+bjUfHrMyGicsU/b7eyxd53YRHmt69mmXJI/8TRoygN3Hfhg
	/xhOzzH+WTnz9L0rPZd/viuAhIbTDqrA08fuq9PLaq0DMYB8cTg5OuiBPMm8aCVkWT6K
	AA8g==
X-Received: by 10.180.35.163 with SMTP id i3mr24775220wij.80.1442236063255;
	Mon, 14 Sep 2015 06:07:43 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	yu7sm15486352wjc.43.2015.09.14.06.07.42
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Mon, 14 Sep 2015 06:07:42 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Mon, 14 Sep 2015 14:07:39 +0100
Message-Id: <1442236060-9268-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Update to NDIS 6.1
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xennet/miniport.c        | 52 ++++++++++++++++++++++++++++++++++++++++----
 vs2012/xennet/xennet.vcxproj |  2 +-
 vs2013/xennet/xennet.vcxproj |  2 +-
 3 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/src/xennet/miniport.c b/src/xennet/miniport.c
index 476cee4..5500418 100644
--- a/src/xennet/miniport.c
+++ b/src/xennet/miniport.c
@@ -39,6 +39,22 @@
 #include "assert.h"
 
 static
+_Function_class_(SET_OPTIONS)
+NDIS_STATUS
+MiniportSetOptions(
+    IN  NDIS_HANDLE NdisDriverHandle,
+    IN  NDIS_HANDLE DriverContext
+    )
+{
+    UNREFERENCED_PARAMETER(NdisDriverHandle);
+    UNREFERENCED_PARAMETER(DriverContext);
+
+    Trace("<===>\n");
+
+    return NDIS_STATUS_SUCCESS;
+}
+
+static
 _Function_class_(MINIPORT_INITIALIZE)
 NDIS_STATUS
 MiniportInitializeEx(
@@ -301,6 +317,32 @@ MiniportCancelOidRequest(
     Trace("<===>\n");
 }
 
+static
+_Function_class_(MINIPORT_DIRECT_OID_REQUEST)
+NDIS_STATUS
+MiniportDirectOidRequest(
+    IN  NDIS_HANDLE         MiniportAdapterContext,
+    IN  PNDIS_OID_REQUEST   OidRequest
+    )
+{
+    UNREFERENCED_PARAMETER(MiniportAdapterContext);
+    UNREFERENCED_PARAMETER(OidRequest);
+
+    return NDIS_STATUS_INVALID_OID;
+}
+
+static
+_Function_class_(MINIPORT_CANCEL_DIRECT_OID_REQUEST)
+VOID
+MiniportCancelDirectOidRequest(
+    IN  NDIS_HANDLE MiniportAdapterContext,
+    IN  PVOID       RequestId
+    )
+{
+    UNREFERENCED_PARAMETER(MiniportAdapterContext);
+    UNREFERENCED_PARAMETER(RequestId);
+}
+
 NDIS_STATUS
 MiniportRegister(
     IN  PDRIVER_OBJECT                      DriverObject,
@@ -316,11 +358,11 @@ MiniportRegister(
     NdisZeroMemory(&MiniportDriverCharacteristics, sizeof (MiniportDriverCharacteristics));
 
     MiniportDriverCharacteristics.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS,
-    MiniportDriverCharacteristics.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
-    MiniportDriverCharacteristics.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_1;
+    MiniportDriverCharacteristics.Header.Size = NDIS_SIZEOF_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2;
+    MiniportDriverCharacteristics.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2;
 
-    MiniportDriverCharacteristics.MajorNdisVersion = 6;
-    MiniportDriverCharacteristics.MinorNdisVersion = 0;
+    MiniportDriverCharacteristics.MajorNdisVersion = NDIS_MINIPORT_MAJOR_VERSION;
+    MiniportDriverCharacteristics.MinorNdisVersion = NDIS_MINIPORT_MINOR_VERSION;
     MiniportDriverCharacteristics.MajorDriverVersion = MAJOR_VERSION;
     MiniportDriverCharacteristics.MinorDriverVersion = MINOR_VERSION;
     MiniportDriverCharacteristics.Flags = NDIS_WDM_DRIVER;
@@ -339,6 +381,8 @@ MiniportRegister(
     MiniportDriverCharacteristics.SendNetBufferListsHandler = MiniportSendNetBufferLists;
     MiniportDriverCharacteristics.ShutdownHandlerEx = MiniportShutdownEx;
     MiniportDriverCharacteristics.UnloadHandler = MiniportDriverUnload;
+    MiniportDriverCharacteristics.DirectOidRequestHandler = MiniportDirectOidRequest;
+    MiniportDriverCharacteristics.CancelDirectOidRequestHandler = MiniportCancelDirectOidRequest;
 
     NdisStatus = NdisMRegisterMiniportDriver(DriverObject,
                                              RegistryPath,
diff --git a/vs2012/xennet/xennet.vcxproj b/vs2012/xennet/xennet.vcxproj
index 8c1862e..d69391e 100644
--- a/vs2012/xennet/xennet.vcxproj
+++ b/vs2012/xennet/xennet.vcxproj
@@ -32,7 +32,7 @@
 	
     <ItemDefinitionGroup>
 		<ClCompile>
-			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+			<PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS61_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 			<WarningLevel>EnableAllWarnings</WarningLevel>
 			<DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
 			<MultiProcessorCompilation>true</MultiProcessorCompilation>
diff --git a/vs2013/xennet/xennet.vcxproj b/vs2013/xennet/xennet.vcxproj
index 0aa30a6..c50bb44 100644
--- a/vs2013/xennet/xennet.vcxproj
+++ b/vs2013/xennet/xennet.vcxproj
@@ -64,7 +64,7 @@
   </PropertyGroup>
   <ItemDefinitionGroup>
     <ClCompile>
-      <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS60_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <PreprocessorDefinitions>__MODULE__="XENNET";NDIS_MINIPORT_DRIVER;NDIS_WDM=1;NDIS61_MINIPORT=1;POOL_NX_OPTIN=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <WarningLevel>EnableAllWarnings</WarningLevel>
       <DisableSpecificWarnings>4711;4548;4820;4668;4255;6001;6054;28196;%(DisableSpecificWarnings)</DisableSpecificWarnings>
       <MultiProcessorCompilation>true</MultiProcessorCompilation>
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 17:21:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 17:21:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbXRX-0000uL-1C; Mon, 14 Sep 2015 17:21:27 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZbXRV-0000uG-VX
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 17:21:26 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	CA/80-05269-51207F55; Mon, 14 Sep 2015 17:21:25 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1442251284!44221142!1
X-Originating-IP: [157.56.112.60]
X-SpamReason: No, hits=0.9 required=7.0 tests=HTML_20_30,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25248 invoked from network); 14 Sep 2015 17:21:24 -0000
Received: from mail-am1on0060.outbound.protection.outlook.com (HELO
	emea01-am1-obe.outbound.protection.outlook.com) (157.56.112.60)
	by server-7.tower-31.messagelabs.com with AES256-SHA encrypted SMTP;
	14 Sep 2015 17:21:24 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1477.eurprd04.prod.outlook.com (10.162.221.147) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Mon, 14 Sep 2015 17:21:23 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Mon, 14 Sep 2015 17:21:23 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Q==
Date: Mon, 14 Sep 2015 17:21:22 +0000
Message-ID: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [86.168.27.107]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1477;
	5:Zmn4SCPosYMgOqgat8kvlPbyaBrgc4QNE2ZBO1tGyzUAl+1ZrfaX78BpzwDDLu3rt204hygl1FMyfv04rH8Qj5kWCr2Jup3qNklnk8hsdKy0Kssn/EPNmfIP17Wq/rcYsGEdeQSlvoVtzVO1rKNM5g==;
	24:NOjBMB5F3FePOL8IkqT23jWs0bn8RsYsJHeJ9GhiLCUMEC4wHvEyOeQBS5+Oo4ekaqxBVn03J3RS1RQcIvMHNfVvibRB8YEmfswXSiUSt0g=;
	20:xVoe+excPznWfYpk6WqhJLvxpr+6bFgiryJ0kSllgsveBB2hvbOY6AjpYNdzQbkHwLGvuzvfa2SubWdjiXju5A==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1477;
x-microsoft-antispam-prvs: <DB5PR04MB1477983D2420828107CC616AC65D0@DB5PR04MB1477.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(8121501046)(5005006)(3002001);
	SRVR:DB5PR04MB1477; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1477; 
x-forefront-prvs: 0699FCD394
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(6009001)(199003)(3905003)(53754006)(189002)(16236675004)(106116001)(2501003)(10400500002)(76576001)(40100003)(5890100001)(74316001)(54356999)(122556002)(97736004)(5001830100001)(2351001)(4001540100001)(229853001)(105586002)(2900100001)(189998001)(110136002)(92566002)(81156007)(107886002)(19580395003)(50986999)(5002640100001)(66066001)(450100001)(64706001)(5001960100002)(77156002)(11100500001)(19625215002)(101416001)(33656002)(86362001)(87936001)(5004730100002)(5003600100002)(106356001)(68736005)(5007970100001)(102836002)(77096005)(15975445007)(5001860100001)(46102003)(62966003)(19627405001);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1477;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Sep 2015 17:21:22.8616 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1477
Subject: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0903479793967707247=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0903479793967707247==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.1=
0%29.aspx)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process
 requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</p>
</div>
<p style=3D"font-size:8pt; line-height:10pt; color:gray; font-family: 'Camb=
ria','times roman',serif;">
Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential.
 If you have received this message in error please delete it from your syst=
em and advise the sender immediately.
</p>
</body>
</html>

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_--


--===============0903479793967707247==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0903479793967707247==--


From win-pv-devel-bounces@lists.xenproject.org Mon Sep 14 17:21:29 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 14 Sep 2015 17:21:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbXRX-0000uL-1C; Mon, 14 Sep 2015 17:21:27 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZbXRV-0000uG-VX
	for win-pv-devel@lists.xenproject.org; Mon, 14 Sep 2015 17:21:26 +0000
Received: from [85.158.137.68] by server-12.bemta-3.messagelabs.com id
	CA/80-05269-51207F55; Mon, 14 Sep 2015 17:21:25 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-7.tower-31.messagelabs.com!1442251284!44221142!1
X-Originating-IP: [157.56.112.60]
X-SpamReason: No, hits=0.9 required=7.0 tests=HTML_20_30,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25248 invoked from network); 14 Sep 2015 17:21:24 -0000
Received: from mail-am1on0060.outbound.protection.outlook.com (HELO
	emea01-am1-obe.outbound.protection.outlook.com) (157.56.112.60)
	by server-7.tower-31.messagelabs.com with AES256-SHA encrypted SMTP;
	14 Sep 2015 17:21:24 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1477.eurprd04.prod.outlook.com (10.162.221.147) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Mon, 14 Sep 2015 17:21:23 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Mon, 14 Sep 2015 17:21:23 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Q==
Date: Mon, 14 Sep 2015 17:21:22 +0000
Message-ID: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [86.168.27.107]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1477;
	5:Zmn4SCPosYMgOqgat8kvlPbyaBrgc4QNE2ZBO1tGyzUAl+1ZrfaX78BpzwDDLu3rt204hygl1FMyfv04rH8Qj5kWCr2Jup3qNklnk8hsdKy0Kssn/EPNmfIP17Wq/rcYsGEdeQSlvoVtzVO1rKNM5g==;
	24:NOjBMB5F3FePOL8IkqT23jWs0bn8RsYsJHeJ9GhiLCUMEC4wHvEyOeQBS5+Oo4ekaqxBVn03J3RS1RQcIvMHNfVvibRB8YEmfswXSiUSt0g=;
	20:xVoe+excPznWfYpk6WqhJLvxpr+6bFgiryJ0kSllgsveBB2hvbOY6AjpYNdzQbkHwLGvuzvfa2SubWdjiXju5A==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1477;
x-microsoft-antispam-prvs: <DB5PR04MB1477983D2420828107CC616AC65D0@DB5PR04MB1477.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(8121501046)(5005006)(3002001);
	SRVR:DB5PR04MB1477; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1477; 
x-forefront-prvs: 0699FCD394
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(6009001)(199003)(3905003)(53754006)(189002)(16236675004)(106116001)(2501003)(10400500002)(76576001)(40100003)(5890100001)(74316001)(54356999)(122556002)(97736004)(5001830100001)(2351001)(4001540100001)(229853001)(105586002)(2900100001)(189998001)(110136002)(92566002)(81156007)(107886002)(19580395003)(50986999)(5002640100001)(66066001)(450100001)(64706001)(5001960100002)(77156002)(11100500001)(19625215002)(101416001)(33656002)(86362001)(87936001)(5004730100002)(5003600100002)(106356001)(68736005)(5007970100001)(102836002)(77096005)(15975445007)(5001860100001)(46102003)(62966003)(19627405001);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1477;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Sep 2015 17:21:22.8616 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1477
Subject: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0903479793967707247=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0903479793967707247==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.1=
0%29.aspx)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process
 requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</p>
</div>
<p style=3D"font-size:8pt; line-height:10pt; color:gray; font-family: 'Camb=
ria','times roman',serif;">
Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential.
 If you have received this message in error please delete it from your syst=
em and advise the sender immediately.
</p>
</body>
</html>

--_000_DB5PR04MB1478BA2D430286CDFC142840C65D0DB5PR04MB1478eurp_--


--===============0903479793967707247==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0903479793967707247==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 08:54:03 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 08:54:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbm02-00017J-0I; Tue, 15 Sep 2015 08:54:02 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1Zbm00-00017B-Km
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 08:54:00 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	03/B7-28791-8ACD7F55; Tue, 15 Sep 2015 08:54:00 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1442307239!31047709!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13828 invoked from network); 15 Sep 2015 08:53:59 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 08:53:59 -0000
X-IronPort-AV: E=Sophos;i="5.17,534,1437436800"; 
   d="scan'208";a="2962729"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan implementation
Thread-Index: AQHQ7LGAc1Os2evjBU6Gxnb9V5hXiJ49SOTg
Date: Tue, 15 Sep 2015 08:53:57 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C44E7@AMSPEX01CL01.citrite.net>
References: <55F2C954.400@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
	<55F30561.3060808@invisiblethingslab.com>
In-Reply-To: <55F30561.3060808@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Rafa=B3 Wojdy=B3a [mailto:omeg@invisiblethingslab.com]
> Sent: 11 September 2015 17:46
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan implementation
> =

> On 2015-09-11 17:46, Paul Durrant wrote:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> >> Sent: 11 September 2015 13:30
> >> To: win-pv-devel@lists.xenproject.org
> >> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan
> >> implementation
> >>
> >> This patch series adds some missing XENBUS APIs that are needed for fu=
ll
> >> libvchan implementation on Windows, namely mapping foreign memory
> >> pages
> >> and setting XenStore key permissions.
> >>
> >
> > All patches applied. Thanks!
> >
> >   Paul
> =

> No problem. Xeniface patches will come next and I have some questions on
> how to best structure the code, especially the usermode DLL and
> libvchan. For now I have the DLL (named xencontrol) in a separate
> directory in the xeniface project, along with a small "client/server"
> test program that exercises most of its exported functions. Our libvchan
> port is kept out of the xeniface project as it doesn't really belong in
> there in my opinion.
> =


I think it's ok for libraries to live in the xeniface package, that's what =
it's for, so your xencontrol DLL sounds fine and the bundled test program i=
s an excellent idea. I have no problem with you adding a vchan DLL too; I t=
hink the package should be the general repository for all user available AP=
Is.

> The DLL is basically a wrapper for most of the xeniface IOCTLs. For
> logging I'm using a simple callback that the caller can register, with
> several verbosity levels.

Sounds ok. I've never managed to figure out a good way of hooking OutputDeb=
ugString in kernel. Since it uses a standard DbgPrint, rather than DbgPrint=
Ex you have to enable the DEFAULT kd filter and that just opens the flood-g=
ates.

> =

> In xeniface itself I'm still using the process notification approach for
> cleanup. Didn't have a problem with it thus far, but I can change that
> to pend IOCTLs and add secondary IOCTLs to get actual data back from the
> driver.
> =


I'd prefer irp cancelation as a mechanism; I think it's less likely that Mi=
crosoft would screw around with that and break it (as they have with other =
APIs). Pended IOCTLs for mapped grants should work, I think, and things lik=
e event channels can be cleaned up with the file object is closed.

> I've also had some problems with the EVTCHN DPC in xeniface. Namely, it
> seems that the DPC routine can run even after KeRemoveQueueDpc() which
> I
> was doing on cleanup.

That's correct. Dpcs are removed from the queue before execution so KeRemov=
eQueueDpc() on one CPU can race with Dpc execution on another. If you affin=
itize the Dpc and do the removal on the same cpu, at dispatch level, than y=
ou should be able to avoid that race... or you just use your own synchroniz=
ation mechanism within the Dpc (like a flag to tell it whether to do anythi=
ng or not).

> I'm now calling KeFlushQueuedDpcs() in the cleanup
> function to ensure that the DPC can't run after I free my data. Is this
> the right approach?

That can be tricky. KeFlushQueuedDpcs() has to run at PASSIVE_LEVEL which I=
 find is generally too restrictive to be useful. I only tend to use that ca=
ll at the very end of day before freeing any control structures that may be=
 used by a Dpc.

  Cheers,

    Paul

> =

> --
> Rafa=B3 Wojdy=B3a
> Qubes Tools for Windows developer
> https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 08:54:03 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 08:54:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbm02-00017J-0I; Tue, 15 Sep 2015 08:54:02 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1Zbm00-00017B-Km
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 08:54:00 +0000
Received: from [193.109.254.147] by server-1.bemta-14.messagelabs.com id
	03/B7-28791-8ACD7F55; Tue, 15 Sep 2015 08:54:00 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-15.tower-27.messagelabs.com!1442307239!31047709!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 13828 invoked from network); 15 Sep 2015 08:53:59 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-15.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 08:53:59 -0000
X-IronPort-AV: E=Sophos;i="5.17,534,1437436800"; 
   d="scan'208";a="2962729"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?iso-8859-2?Q?Rafa=B3_Wojdy=B3a?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
	libvchan implementation
Thread-Index: AQHQ7LGAc1Os2evjBU6Gxnb9V5hXiJ49SOTg
Date: Tue, 15 Sep 2015 08:53:57 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C44E7@AMSPEX01CL01.citrite.net>
References: <55F2C954.400@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5BFFD0@AMSPEX01CL01.citrite.net>
	<55F30561.3060808@invisiblethingslab.com>
In-Reply-To: <55F30561.3060808@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
 libvchan implementation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

> -----Original Message-----
> From: Rafa=B3 Wojdy=B3a [mailto:omeg@invisiblethingslab.com]
> Sent: 11 September 2015 17:46
> To: Paul Durrant; win-pv-devel@lists.xenproject.org
> Subject: Re: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan implementation
> =

> On 2015-09-11 17:46, Paul Durrant wrote:
> >> -----Original Message-----
> >> From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-
> >> bounces@lists.xenproject.org] On Behalf Of Rafal Wojdyla
> >> Sent: 11 September 2015 13:30
> >> To: win-pv-devel@lists.xenproject.org
> >> Subject: [win-pv-devel] [PATCH 0/3] Add XENBUS APIs necessary for
> libvchan
> >> implementation
> >>
> >> This patch series adds some missing XENBUS APIs that are needed for fu=
ll
> >> libvchan implementation on Windows, namely mapping foreign memory
> >> pages
> >> and setting XenStore key permissions.
> >>
> >
> > All patches applied. Thanks!
> >
> >   Paul
> =

> No problem. Xeniface patches will come next and I have some questions on
> how to best structure the code, especially the usermode DLL and
> libvchan. For now I have the DLL (named xencontrol) in a separate
> directory in the xeniface project, along with a small "client/server"
> test program that exercises most of its exported functions. Our libvchan
> port is kept out of the xeniface project as it doesn't really belong in
> there in my opinion.
> =


I think it's ok for libraries to live in the xeniface package, that's what =
it's for, so your xencontrol DLL sounds fine and the bundled test program i=
s an excellent idea. I have no problem with you adding a vchan DLL too; I t=
hink the package should be the general repository for all user available AP=
Is.

> The DLL is basically a wrapper for most of the xeniface IOCTLs. For
> logging I'm using a simple callback that the caller can register, with
> several verbosity levels.

Sounds ok. I've never managed to figure out a good way of hooking OutputDeb=
ugString in kernel. Since it uses a standard DbgPrint, rather than DbgPrint=
Ex you have to enable the DEFAULT kd filter and that just opens the flood-g=
ates.

> =

> In xeniface itself I'm still using the process notification approach for
> cleanup. Didn't have a problem with it thus far, but I can change that
> to pend IOCTLs and add secondary IOCTLs to get actual data back from the
> driver.
> =


I'd prefer irp cancelation as a mechanism; I think it's less likely that Mi=
crosoft would screw around with that and break it (as they have with other =
APIs). Pended IOCTLs for mapped grants should work, I think, and things lik=
e event channels can be cleaned up with the file object is closed.

> I've also had some problems with the EVTCHN DPC in xeniface. Namely, it
> seems that the DPC routine can run even after KeRemoveQueueDpc() which
> I
> was doing on cleanup.

That's correct. Dpcs are removed from the queue before execution so KeRemov=
eQueueDpc() on one CPU can race with Dpc execution on another. If you affin=
itize the Dpc and do the removal on the same cpu, at dispatch level, than y=
ou should be able to avoid that race... or you just use your own synchroniz=
ation mechanism within the Dpc (like a flag to tell it whether to do anythi=
ng or not).

> I'm now calling KeFlushQueuedDpcs() in the cleanup
> function to ensure that the DPC can't run after I free my data. Is this
> the right approach?

That can be tricky. KeFlushQueuedDpcs() has to run at PASSIVE_LEVEL which I=
 find is generally too restrictive to be useful. I only tend to use that ca=
ll at the very end of day before freeing any control structures that may be=
 used by a Dpc.

  Cheers,

    Paul

> =

> --
> Rafa=B3 Wojdy=B3a
> Qubes Tools for Windows developer
> https://www.qubes-os.org/

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 08:59:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 08:59:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbm5l-0001zk-QT; Tue, 15 Sep 2015 08:59:57 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1Zbm5k-0001zd-LS
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 08:59:56 +0000
Received: from [193.109.254.147] by server-2.bemta-14.messagelabs.com id
	A5/E6-12889-B0ED7F55; Tue, 15 Sep 2015 08:59:55 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1442307594!49807897!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31692 invoked from network); 15 Sep 2015 08:59:54 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 08:59:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,534,1437436800"; d="scan'208,217";a="2963141"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghA
Date: Tue, 15 Sep 2015 08:59:54 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0119028813522276772=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0119028813522276772==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.

  Cheers,

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org
Subject: [win-pv-devel] PV Drivers Offline Removal


Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EF9D.48962DD0"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/<span class=3D"SpellE">currentcontrolset<=
/span>/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> win-pv-devel@lists.xenpr=
oject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt"><font size=3D"1" color=3D"gray" face=3D"Cam=
bria"><span style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;=
serif&quot;;color:gray">Zynstra is a private limited company registered in =
England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immediately.
<o:p></o:p></span></font></p>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_--


--===============0119028813522276772==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0119028813522276772==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 08:59:59 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 08:59:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbm5l-0001zk-QT; Tue, 15 Sep 2015 08:59:57 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1Zbm5k-0001zd-LS
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 08:59:56 +0000
Received: from [193.109.254.147] by server-2.bemta-14.messagelabs.com id
	A5/E6-12889-B0ED7F55; Tue, 15 Sep 2015 08:59:55 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-9.tower-27.messagelabs.com!1442307594!49807897!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31692 invoked from network); 15 Sep 2015 08:59:54 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-9.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 08:59:54 -0000
X-IronPort-AV: E=Sophos;i="5.17,534,1437436800"; d="scan'208,217";a="2963141"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghA
Date: Tue, 15 Sep 2015 08:59:54 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============0119028813522276772=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============0119028813522276772==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.

  Cheers,

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org
Subject: [win-pv-devel] PV Drivers Offline Removal


Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EF9D.48962DD0"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/<span class=3D"SpellE">currentcontrolset<=
/span>/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> win-pv-devel@lists.xenpr=
oject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt"><font size=3D"1" color=3D"gray" face=3D"Cam=
bria"><span style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;=
serif&quot;;color:gray">Zynstra is a private limited company registered in =
England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immediately.
<o:p></o:p></span></font></p>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524AMSPEX01CL01cit_--


--===============0119028813522276772==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============0119028813522276772==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 10:48:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 10:48:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbnmZ-0007XE-2i; Tue, 15 Sep 2015 10:48:15 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbnmX-0007Vq-Pj
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 10:48:13 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	62/60-16618-D67F7F55; Tue, 15 Sep 2015 10:48:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1442314092!23274821!1
X-Originating-IP: [209.85.212.178]
X-SpamReason: No, hits=0.2 required=7.0 tests=UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3139 invoked from network); 15 Sep 2015 10:48:12 -0000
Received: from mail-wi0-f178.google.com (HELO mail-wi0-f178.google.com)
	(209.85.212.178)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 10:48:12 -0000
Received: by wicge5 with SMTP id ge5so22753810wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=RHs7O47ekbRFPE5mq7fWSKGuJtBti99q0+2IrjmBvFY=;
	b=lDpKk7Jav8dPCN43/rXKdzP7Tez/JpNQRVWoxqg3n6u1KyF5MZZH4y/SST/9ZgcCqd
	smVQ3XneKwcYifyFHtF6oqZ6FppLEafqW/lPBAorWX4aYNrfop+DiKJHwZ1MymFG9pyE
	a0lMd0U3S1PC6eYGEoPa78Cbyijp2irjjs13l7w6YjPrm/t+hc6YMYfJvXLuXfBm+3Zh
	1Q5buGgYGn4AyShA3gNcLy0OsPB/kKmqzIWl5zvYkNS9ggRf/WXd22IWXx3ZDdNhP+vO
	YmlM99aqBK6QeiYgFlvpYLS8XpssyBZEBYXDqewP0jjinB7owuTmfM91ao3yHMxG0LIj
	t1+Q==
X-Received: by 10.180.104.68 with SMTP id gc4mr6158744wib.67.1442314091973;
	Tue, 15 Sep 2015 03:48:11 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	ry1sm20385916wjb.24.2015.09.15.03.48.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 03:48:11 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 11:48:03 +0100
Message-Id: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Cosmetic change to vif_interface.h
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This does not affect the size, layout or semantics of anything so no
need to bump the version number.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index e5f8534..2e749a4 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -514,26 +514,20 @@ typedef NTSTATUS
     OUT PXENVIF_PACKET_INFO         Info
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
-    \brief Queue transmit side packets at the provider
-
-    \param Interface The interface header
-    \param Head The head of a chain of _XENVIF_TRANSMITTER_PACKET_V1
-*/
 typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS)(
+(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1)(
     IN  PINTERFACE                      Interface,
     IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2
+/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
     \brief Queue transmit side packets at the provider
 
     \param Interface The interface header
-    \param List List of _XENVIF_TRANSMITTER_PACKET_V2
+    \param List List of XENVIF_TRANSMITTER_PACKET
 */
 typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2)(
+(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS)(
     IN  PINTERFACE  Interface,
     IN  PLIST_ENTRY List
     );
@@ -759,7 +753,7 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET        TransmitterSetPacketOffset;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1         TransmitterQueuePacketsVersion1;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
@@ -788,7 +782,7 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
@@ -818,7 +812,7 @@ struct _XENVIF_VIF_INTERFACE_V3 {
     XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 10:48:16 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 10:48:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbnmZ-0007XE-2i; Tue, 15 Sep 2015 10:48:15 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbnmX-0007Vq-Pj
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 10:48:13 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	62/60-16618-D67F7F55; Tue, 15 Sep 2015 10:48:13 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-13.tower-27.messagelabs.com!1442314092!23274821!1
X-Originating-IP: [209.85.212.178]
X-SpamReason: No, hits=0.2 required=7.0 tests=UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 3139 invoked from network); 15 Sep 2015 10:48:12 -0000
Received: from mail-wi0-f178.google.com (HELO mail-wi0-f178.google.com)
	(209.85.212.178)
	by server-13.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 10:48:12 -0000
Received: by wicge5 with SMTP id ge5so22753810wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=RHs7O47ekbRFPE5mq7fWSKGuJtBti99q0+2IrjmBvFY=;
	b=lDpKk7Jav8dPCN43/rXKdzP7Tez/JpNQRVWoxqg3n6u1KyF5MZZH4y/SST/9ZgcCqd
	smVQ3XneKwcYifyFHtF6oqZ6FppLEafqW/lPBAorWX4aYNrfop+DiKJHwZ1MymFG9pyE
	a0lMd0U3S1PC6eYGEoPa78Cbyijp2irjjs13l7w6YjPrm/t+hc6YMYfJvXLuXfBm+3Zh
	1Q5buGgYGn4AyShA3gNcLy0OsPB/kKmqzIWl5zvYkNS9ggRf/WXd22IWXx3ZDdNhP+vO
	YmlM99aqBK6QeiYgFlvpYLS8XpssyBZEBYXDqewP0jjinB7owuTmfM91ao3yHMxG0LIj
	t1+Q==
X-Received: by 10.180.104.68 with SMTP id gc4mr6158744wib.67.1442314091973;
	Tue, 15 Sep 2015 03:48:11 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	ry1sm20385916wjb.24.2015.09.15.03.48.11
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 03:48:11 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 11:48:03 +0100
Message-Id: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 1/2] Cosmetic change to vif_interface.h
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This does not affect the size, layout or semantics of anything so no
need to bump the version number.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h | 20 +++++++-------------
 1 file changed, 7 insertions(+), 13 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index e5f8534..2e749a4 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -514,26 +514,20 @@ typedef NTSTATUS
     OUT PXENVIF_PACKET_INFO         Info
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
-    \brief Queue transmit side packets at the provider
-
-    \param Interface The interface header
-    \param Head The head of a chain of _XENVIF_TRANSMITTER_PACKET_V1
-*/
 typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS)(
+(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1)(
     IN  PINTERFACE                      Interface,
     IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2
+/*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
     \brief Queue transmit side packets at the provider
 
     \param Interface The interface header
-    \param List List of _XENVIF_TRANSMITTER_PACKET_V2
+    \param List List of XENVIF_TRANSMITTER_PACKET
 */
 typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2)(
+(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS)(
     IN  PINTERFACE  Interface,
     IN  PLIST_ENTRY List
     );
@@ -759,7 +753,7 @@ struct _XENVIF_VIF_INTERFACE_V1 {
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET        TransmitterSetPacketOffset;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1         TransmitterQueuePacketsVersion1;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
@@ -788,7 +782,7 @@ struct _XENVIF_VIF_INTERFACE_V2 {
     XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
@@ -818,7 +812,7 @@ struct _XENVIF_VIF_INTERFACE_V3 {
     XENVIF_VIF_RECEIVER_SET_BACKFILL_SIZE           ReceiverSetBackfillSize;
     XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
     XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS       TransmitterGetPacketHeaders;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V2         TransmitterQueuePackets;
+    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS            TransmitterQueuePackets;
     XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
     XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
     XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 10:48:21 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 10:48:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbnmf-0007aZ-47; Tue, 15 Sep 2015 10:48:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1Zbnme-0007aT-8K
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 10:48:20 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	2A/5F-31069-377F7F55; Tue, 15 Sep 2015 10:48:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1442314092!44434094!1
X-Originating-IP: [209.85.212.175]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24189 invoked from network); 15 Sep 2015 10:48:13 -0000
Received: from mail-wi0-f175.google.com (HELO mail-wi0-f175.google.com)
	(209.85.212.175)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 10:48:13 -0000
Received: by wiclk2 with SMTP id lk2so22629167wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=AU9Cb/cprbENkPklvBjfLlBF4Tn0VoRIqDZd8hsrAt8=;
	b=r2KhXviYaZ2hbrR2z7GTKLNKn68XiBxi9wqKMgdA8XS+Zqg5RPtOJY4a9PB/bWqaq7
	rHA5es5mnXmrHCp4EfTM4FUXqmuCQoRyCYjJv1bmrV2lgXBzonOiKFaSGiYXbK9kYnVN
	M8YoceRIlqpSlnnYVVggqa5AHMzltAMILn8kh6H8ADuy+bTZtSixN3edlp4P4igqQwBr
	wipPyzcKzLcA3TEt4Dgrv2QJ0FJcnTsD4wV471o66GW5orOF7M3Q6u7SPlPOpL7yPmGV
	xAem4U+vktkyiPKbKgbXM1h967xr4zPyVwXDpnUEq4nhxl+aF4FeUjCpvo1ep/YFUM9X
	nITw==
X-Received: by 10.180.187.142 with SMTP id fs14mr1373650wic.6.1442314092730;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	ry1sm20385916wjb.24.2015.09.15.03.48.12
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 11:48:04 +0100
Message-Id: <1442314084-8364-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
References: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Remove version 1 of the XENVIF_VIF
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The revision has been gone from the PDO for a long time so version 1 of
the interface has been technically dead for a while. This patch cleans up
the code.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h  |  95 +------------------------
 src/xenvif/transmitter.c | 177 ++---------------------------------------------
 src/xenvif/transmitter.h |  13 ----
 src/xenvif/vif.c         | 106 ----------------------------
 src/xenvif/vif.h         |   6 --
 5 files changed, 7 insertions(+), 390 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index 2e749a4..f6b6298 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -242,29 +242,8 @@ struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1 {
 
 typedef struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1 XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO, *PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO;
 
-#pragma warning(push)
-#pragma warning(disable:4201)   // nonstandard extension used : nameless struct/union
-
-/*! \struct _XENVIF_TRANSMITTER_PACKET_V1
-    \brief Transmit-side packet structure
-*/
-struct _XENVIF_TRANSMITTER_PACKET_V1 {
-    /*! Pointer used for chaining packets together */
-    struct _XENVIF_TRANSMITTER_PACKET_V1                        *Next;
-    union {
-        struct _XENVIF_TRANSMITTER_PACKET_SEND_INFO_V1          Send;
-        struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1    Completion;
-    };
-};
-
-typedef struct _XENVIF_TRANSMITTER_PACKET_V1 XENVIF_TRANSMITTER_PACKET_V1, *PXENVIF_TRANSMITTER_PACKET_V1;
-
-#pragma warning(pop)
-
 #pragma pack(pop) 
 
-C_ASSERT(sizeof (struct _XENVIF_TRANSMITTER_PACKET_V1) <= (3 * sizeof (PVOID)));
-
 /*! \struct _XENVIF_TRANSMITTER_PACKET_V2
     \brief Transmit-side packet structure (v2)
 */
@@ -289,26 +268,6 @@ struct _XENVIF_TRANSMITTER_PACKET_V2 {
 
 typedef struct _XENVIF_TRANSMITTER_PACKET_V2 XENVIF_TRANSMITTER_PACKET, *PXENVIF_TRANSMITTER_PACKET;
 
-/*! \enum _XENVIF_TRANSMITTER_PACKET_OFFSET
-    \brief Offsets of packet metadata relative to
-    XENVIF_TRANSMITTER_PACKET pointer
-
-    Because the transmit side packet structure is limited to 3 pointer
-    types in size, not all information about the packet can be passed in
-    the structure. Other information can, however, be found by applying
-    these byte offsets to the structure pointer and then dereferencing the
-    specified type.
-*/
-typedef enum _XENVIF_TRANSMITTER_PACKET_OFFSET {
-    /*! The offset of the start of the packet within the MDL (type ULONG) */
-    XENVIF_TRANSMITTER_PACKET_OFFSET_OFFSET = 0,
-    /*! The total length of the packet (type ULONG) */
-    XENVIF_TRANSMITTER_PACKET_LENGTH_OFFSET,
-    /*! MDL referencing the initial buffer of the packet (type PMDL) */
-    XENVIF_TRANSMITTER_PACKET_MDL_OFFSET,
-    XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT
-} XENVIF_TRANSMITTER_PACKET_OFFSET, *PXENVIF_TRANSMITTER_PACKET_OFFSET;
-
 /*! \enum _XENVIF_VIF_STATISTIC
     \brief Interface statistics
 */
@@ -481,23 +440,6 @@ typedef VOID
     IN  PLIST_ENTRY List
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET
-    \brief Set byte offset of packet information relative to
-    XENVIF_TRANSMITTER_PACKET pointer.
-
-    See \ref _XENVIF_TRANSMITTER_PACKET_OFFSET.
-
-    \param Interface The interface header
-    \param Type The offset type
-    \param Value The offset value
-*/
-typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET)(
-    IN  PINTERFACE                          Interface,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    );
-
 /*! \typedef XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS
     \brief Get the packet headers into supplied buffer
 
@@ -514,12 +456,6 @@ typedef NTSTATUS
     OUT PXENVIF_PACKET_INFO         Info
     );
 
-typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1)(
-    IN  PINTERFACE                      Interface,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    );
-
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
     \brief Queue transmit side packets at the provider
 
@@ -738,35 +674,6 @@ typedef NTSTATUS
 DEFINE_GUID(GUID_XENVIF_VIF_INTERFACE, 
 0x76f279cd, 0xca11, 0x418b, 0x92, 0xe8, 0xc5, 0x7f, 0x77, 0xde, 0xe, 0x2e);
 
-/*! \struct _XENVIF_VIF_INTERFACE_V1
-    \brief VIF interface version 1
-    \ingroup interfaces
-*/
-struct _XENVIF_VIF_INTERFACE_V1 {
-    INTERFACE                                       Interface;
-    XENVIF_VIF_ACQUIRE                              Acquire;
-    XENVIF_VIF_RELEASE                              Release;
-    XENVIF_VIF_ENABLE                               Enable;
-    XENVIF_VIF_DISABLE                              Disable;
-    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
-    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
-    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
-    XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET        TransmitterSetPacketOffset;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1         TransmitterQueuePacketsVersion1;
-    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
-    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
-    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
-    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
-    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
-    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
-    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
-    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
-    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
-    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
-    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
-};
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -836,7 +743,7 @@ typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 
 #endif  // _WINDLL
 
-#define XENVIF_VIF_INTERFACE_VERSION_MIN    1
+#define XENVIF_VIF_INTERFACE_VERSION_MIN    2
 #define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 8bf0c2c..088bdb6 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -201,7 +201,6 @@ struct _XENVIF_TRANSMITTER {
     PXENVIF_TRANSMITTER_RING    *Ring;
     LONG                        MaxQueues;
     LONG                        NumQueues;
-    LONG_PTR                    Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT];
     BOOLEAN                     Split;
     BOOLEAN                     MulticastControl;
     ULONG                       DisableIpVersion4Gso;
@@ -2541,36 +2540,6 @@ __TransmitterRingPushRequests(
 
 #define XENVIF_TRANSMITTER_LOCK_BIT ((ULONG_PTR)1)
 
-static FORCEINLINE ULONG
-__TransmitterReversePacketList(
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   *Packet
-    )
-{
-    PXENVIF_TRANSMITTER_PACKET_V1       HeadPacket;
-    ULONG                               Count;
-
-    HeadPacket = NULL;
-    Count = 0;
-
-    while (*Packet != NULL) {
-        PXENVIF_TRANSMITTER_PACKET_V1   Next;
-
-        ASSERT(((ULONG_PTR)*Packet & XENVIF_TRANSMITTER_LOCK_BIT) == 0);
-
-        Next = (*Packet)->Next;
-
-        (*Packet)->Next = HeadPacket;
-        HeadPacket = *Packet;
-
-        *Packet = Next;
-        Count++;
-    }
-
-    *Packet = HeadPacket;
-
-    return Count;
-}
-
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSwizzle(
     IN  PXENVIF_TRANSMITTER_RING    Ring
@@ -2739,48 +2708,14 @@ __TransmitterReturnPackets(
     )
 {
     PXENVIF_FRONTEND        Frontend;
-    PXENVIF_VIF_CONTEXT     VifContext;
-
-    Frontend = Transmitter->Frontend;
-    VifContext = PdoGetVifContext(FrontendGetPdo(Frontend));
-
-    switch (VifGetVersion(VifContext)) {
-    case 1: {
-        PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket;
-        PXENVIF_TRANSMITTER_PACKET_V1   NextPacket;
-
-        HeadPacket = NextPacket = NULL;
-
-        while (!IsListEmpty(List)) {
-            PLIST_ENTRY                 ListEntry;
-            PXENVIF_TRANSMITTER_PACKET  Packet;
-
-            ListEntry = RemoveTailList(List);
-            ASSERT3P(ListEntry, !=, List);
-
-            Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
-            Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
-
-            HeadPacket = Packet->Cookie;
-            HeadPacket->Next = NextPacket;
-            NextPacket = HeadPacket;
-
-            HeadPacket->Completion = Packet->Completion;
 
-            __TransmitterPutPacket(Transmitter, Packet);
-        }
-
-        if (HeadPacket != NULL)
-            VifTransmitterReturnPacketsVersion1(VifContext, HeadPacket);
+    if (IsListEmpty(List))
+        return;
 
-        break;
-    }
-    default:
-        if (!IsListEmpty(List))
-            VifTransmitterReturnPackets(VifContext, List);
+    Frontend = Transmitter->Frontend;
 
-        break;
-    }
+    VifTransmitterReturnPackets(PdoGetVifContext(FrontendGetPdo(Frontend)),
+                                List);
 }
 
 static FORCEINLINE BOOLEAN
@@ -4043,16 +3978,8 @@ TransmitterDebugCallback(
     IN  BOOLEAN         Crashing
     )
 {
-    PXENVIF_TRANSMITTER Transmitter = Argument;
-
+    UNREFERENCED_PARAMETER(Argument);
     UNREFERENCED_PARAMETER(Crashing);
-
-    XENBUS_DEBUG(Printf,
-                 &Transmitter->DebugInterface,
-                 "OFFSETS: Offset @ %ld Length @ %ld Mdl @ %ld\n",
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_OFFSET],
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_LENGTH_OFFSET],
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_MDL_OFFSET]);
 }
 
 NTSTATUS
@@ -4518,9 +4445,6 @@ TransmitterTeardown(
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
-    RtlZeroMemory(Transmitter->Offset,
-                  sizeof (LONG_PTR) *  XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT); 
-
     Index = Transmitter->MaxQueues;
     while (--Index >= 0) {
         PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[Index];
@@ -4568,29 +4492,6 @@ TransmitterTeardown(
     __TransmitterFree(Transmitter);
 }
 
-NTSTATUS
-TransmitterSetPacketOffset(
-    IN  PXENVIF_TRANSMITTER                 Transmitter,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    )
-{
-    NTSTATUS                                status;
-
-    status = STATUS_INVALID_PARAMETER;
-    if (Type >= XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT)
-        goto fail1;
-
-    Transmitter->Offset[Type] = Value;
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
-}
-
 static BOOLEAN
 __TransmitterGetPacketHeadersPullup(
     IN      PVOID                   Argument,
@@ -4682,72 +4583,6 @@ fail1:
 }
 
 VOID
-TransmitterQueuePacketsVersion1(
-    IN  PXENVIF_TRANSMITTER             Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket
-    )
-{
-#define OFFSET_EXISTS(_Transmitter, _Packet, _Type)                                         \
-    ((_Transmitter)->Offset[XENVIF_TRANSMITTER_PACKET_ ## _Type ## _OFFSET] != 0)
-
-#define OFFSET(_Transmitter, _Packet, _Type)                                                \
-        ((OFFSET_EXISTS(_Transmitter, _Packet, _Type)) ?                                    \
-         (PVOID)((PUCHAR)(_Packet) +                                                        \
-                 (_Transmitter)->Offset[XENVIF_TRANSMITTER_PACKET_ ## _Type ## _OFFSET]) :  \
-         NULL)
-
-    LIST_ENTRY                          List;
-    PXENVIF_FRONTEND                    Frontend;
-    PXENVIF_VIF_CONTEXT                 VifContext;
-
-    Frontend = Transmitter->Frontend;
-    VifContext = PdoGetVifContext(FrontendGetPdo(Frontend));
-
-    ASSERT3U(VifGetVersion(VifContext), ==, 1);
-
-    InitializeListHead(&List);
-
-    while (HeadPacket != NULL) {
-        PXENVIF_TRANSMITTER_PACKET      Packet;
-
-        Packet = __TransmitterGetPacket(Transmitter);
-        if (Packet == NULL)
-            break;
-
-        Packet->Cookie = HeadPacket;
-        Packet->Send = HeadPacket->Send;
-
-        ASSERT(OFFSET_EXISTS(Transmitter, HeadPacket, MDL));
-        Packet->Mdl = *(PMDL *)OFFSET(Transmitter, HeadPacket, MDL);
-
-        if (OFFSET_EXISTS(Transmitter, HeadPacket, OFFSET))
-            Packet->Offset = *(PULONG)OFFSET(Transmitter, HeadPacket, OFFSET);
-        else
-            Packet->Offset = 0;
-
-        ASSERT(OFFSET_EXISTS(Transmitter, HeadPacket, LENGTH));
-        Packet->Length = *(PULONG)OFFSET(Transmitter, HeadPacket, LENGTH);
-
-        // Packets from legacy clients go to queue 0.
-        Packet->Value = 0;
-
-        InsertTailList(&List, &Packet->ListEntry);
-
-        HeadPacket = HeadPacket->Next;
-    }
-
-    if (!IsListEmpty(&List))
-        TransmitterQueuePackets(Transmitter, &List);
-
-    if (HeadPacket != NULL)
-        VifTransmitterReturnPacketsVersion1(VifContext,
-                                            HeadPacket);
-
-#undef OFFSET
-#undef OFFSET_EXISTS
-}
-
-VOID
 TransmitterQueuePackets(
     IN  PXENVIF_TRANSMITTER     Transmitter,
     IN  PLIST_ENTRY             List
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index eddc51b..04f1f6e 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -116,12 +116,6 @@ TransmitterQueryRingSize(
     );
 
 extern VOID
-TransmitterQueuePacketsVersion1(
-    IN  PXENVIF_TRANSMITTER             Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket
-    );
-
-extern VOID
 TransmitterQueuePackets(
     IN  PXENVIF_TRANSMITTER Transmitter,
     IN  PLIST_ENTRY         List
@@ -141,13 +135,6 @@ TransmitterQueryLargePacketSize(
     );
 
 extern NTSTATUS
-TransmitterSetPacketOffset(
-    IN  PXENVIF_TRANSMITTER                 Transmitter,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    );
-
-extern NTSTATUS
 TransmitterGetPacketHeaders(
     IN  PXENVIF_TRANSMITTER         Transmitter,
     IN  PXENVIF_TRANSMITTER_PACKET  Packet,
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 02d1d11..556280b 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -237,28 +237,6 @@ done:
     return status;
 }
 
-static NTSTATUS
-VifTransmitterSetPacketOffset(
-    IN  PINTERFACE                          Interface,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    )
-{
-    PXENVIF_VIF_CONTEXT                     Context = Interface->Context;
-    NTSTATUS                                status;
-
-    AcquireMrswLockShared(&Context->Lock);
-
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-    status = TransmitterSetPacketOffset(FrontendGetTransmitter(Context->Frontend),
-                                        Type,
-                                        Value);
-    
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return status;
-}
-
 static VOID
 VifReceiverReturnPackets( 
     IN  PINTERFACE      Interface,
@@ -300,35 +278,6 @@ VifTransmitterGetPacketHeaders(
 }
 
 static NTSTATUS
-VifTransmitterQueuePacketsVersion1(
-    IN  PINTERFACE                      Interface,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    )
-{
-    PXENVIF_VIF_CONTEXT                 Context = Interface->Context;
-    NTSTATUS                            status;
-
-    AcquireMrswLockShared(&Context->Lock);
-
-    status = STATUS_UNSUCCESSFUL;
-    if (Context->Enabled == FALSE)
-        goto fail1;
-
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-    TransmitterQueuePacketsVersion1(FrontendGetTransmitter(Context->Frontend),
-                                    Head);
-
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return status;
-}
-
-static NTSTATUS
 VifTransmitterQueuePackets(
     IN  PINTERFACE      Interface,
     IN  PLIST_ENTRY     List
@@ -713,31 +662,6 @@ done:
     ReleaseMrswLockExclusive(&Context->Lock, Irql, FALSE);
 }
 
-static struct _XENVIF_VIF_INTERFACE_V1 VifInterfaceVersion1 = {
-    { sizeof (struct _XENVIF_VIF_INTERFACE_V1), 1, NULL, NULL, NULL },
-    VifAcquire,
-    VifRelease,
-    VifEnable,
-    VifDisable,
-    VifQueryStatistic,
-    VifReceiverReturnPackets,
-    VifReceiverSetOffloadOptions,
-    VifReceiverQueryRingSize,
-    VifTransmitterSetPacketOffset,
-    VifTransmitterQueuePacketsVersion1,
-    VifTransmitterQueryOffloadOptions,
-    VifTransmitterQueryLargePacketSize,
-    VifTransmitterQueryRingSize,
-    VifMacQueryState,
-    VifMacQueryMaximumFrameSize,
-    VifMacQueryPermanentAddress,
-    VifMacQueryCurrentAddress,
-    VifMacQueryMulticastAddresses,
-    VifMacSetMulticastAddresses,
-    VifMacSetFilterLevel,
-    VifMacQueryFilterLevel
-};
-
 static struct _XENVIF_VIF_INTERFACE_V2 VifInterfaceVersion2 = {
     { sizeof (struct _XENVIF_VIF_INTERFACE_V2), 2, NULL, NULL, NULL },
     VifAcquire,
@@ -853,23 +777,6 @@ VifGetInterface(
     NTSTATUS                    status;
 
     switch (Version) {
-    case 1: {
-        struct _XENVIF_VIF_INTERFACE_V1 *VifInterface;
-
-        VifInterface = (struct _XENVIF_VIF_INTERFACE_V1 *)Interface;
-
-        status = STATUS_BUFFER_OVERFLOW;
-        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V1))
-            break;
-
-        *VifInterface = VifInterfaceVersion1;
-
-        ASSERT3U(Interface->Version, ==, Version);
-        Interface->Context = Context;
-
-        status = STATUS_SUCCESS;
-        break;
-    }
     case 2: {
         struct _XENVIF_VIF_INTERFACE_V2 *VifInterface;
 
@@ -953,19 +860,6 @@ VifReceiverQueuePackets(
 }
 
 VOID
-VifTransmitterReturnPacketsVersion1(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    )
-{
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-
-    Context->Callback(Context->Argument,
-                      XENVIF_TRANSMITTER_RETURN_PACKETS,
-                      Head);
-}
-
-VOID
 VifTransmitterReturnPackets(
     IN  PXENVIF_VIF_CONTEXT Context,
     IN  PLIST_ENTRY         List
diff --git a/src/xenvif/vif.h b/src/xenvif/vif.h
index 967b7aa..a842b79 100644
--- a/src/xenvif/vif.h
+++ b/src/xenvif/vif.h
@@ -69,12 +69,6 @@ VifReceiverQueuePackets(
     );
 
 extern VOID
-VifTransmitterReturnPacketsVersion1(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    );
-
-extern VOID
 VifTransmitterReturnPackets(
     IN  PXENVIF_VIF_CONTEXT Context,
     IN  PLIST_ENTRY         List
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 10:48:21 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 10:48:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbnmf-0007aZ-47; Tue, 15 Sep 2015 10:48:21 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1Zbnme-0007aT-8K
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 10:48:20 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	2A/5F-31069-377F7F55; Tue, 15 Sep 2015 10:48:19 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1442314092!44434094!1
X-Originating-IP: [209.85.212.175]
X-SpamReason: No, hits=0.0 required=7.0 tests=UPPERCASE_25_50
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 24189 invoked from network); 15 Sep 2015 10:48:13 -0000
Received: from mail-wi0-f175.google.com (HELO mail-wi0-f175.google.com)
	(209.85.212.175)
	by server-10.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 10:48:13 -0000
Received: by wiclk2 with SMTP id lk2so22629167wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id:in-reply-to:references;
	bh=AU9Cb/cprbENkPklvBjfLlBF4Tn0VoRIqDZd8hsrAt8=;
	b=r2KhXviYaZ2hbrR2z7GTKLNKn68XiBxi9wqKMgdA8XS+Zqg5RPtOJY4a9PB/bWqaq7
	rHA5es5mnXmrHCp4EfTM4FUXqmuCQoRyCYjJv1bmrV2lgXBzonOiKFaSGiYXbK9kYnVN
	M8YoceRIlqpSlnnYVVggqa5AHMzltAMILn8kh6H8ADuy+bTZtSixN3edlp4P4igqQwBr
	wipPyzcKzLcA3TEt4Dgrv2QJ0FJcnTsD4wV471o66GW5orOF7M3Q6u7SPlPOpL7yPmGV
	xAem4U+vktkyiPKbKgbXM1h967xr4zPyVwXDpnUEq4nhxl+aF4FeUjCpvo1ep/YFUM9X
	nITw==
X-Received: by 10.180.187.142 with SMTP id fs14mr1373650wic.6.1442314092730;
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	ry1sm20385916wjb.24.2015.09.15.03.48.12
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 03:48:12 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 11:48:04 +0100
Message-Id: <1442314084-8364-2-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
In-Reply-To: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
References: <1442314084-8364-1-git-send-email-paul.durrant@citrix.com>
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH 2/2] Remove version 1 of the XENVIF_VIF
	interface
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The revision has been gone from the PDO for a long time so version 1 of
the interface has been technically dead for a while. This patch cleans up
the code.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 include/vif_interface.h  |  95 +------------------------
 src/xenvif/transmitter.c | 177 ++---------------------------------------------
 src/xenvif/transmitter.h |  13 ----
 src/xenvif/vif.c         | 106 ----------------------------
 src/xenvif/vif.h         |   6 --
 5 files changed, 7 insertions(+), 390 deletions(-)

diff --git a/include/vif_interface.h b/include/vif_interface.h
index 2e749a4..f6b6298 100644
--- a/include/vif_interface.h
+++ b/include/vif_interface.h
@@ -242,29 +242,8 @@ struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1 {
 
 typedef struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1 XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO, *PXENVIF_TRANSMITTER_PACKET_COMPLETION_INFO;
 
-#pragma warning(push)
-#pragma warning(disable:4201)   // nonstandard extension used : nameless struct/union
-
-/*! \struct _XENVIF_TRANSMITTER_PACKET_V1
-    \brief Transmit-side packet structure
-*/
-struct _XENVIF_TRANSMITTER_PACKET_V1 {
-    /*! Pointer used for chaining packets together */
-    struct _XENVIF_TRANSMITTER_PACKET_V1                        *Next;
-    union {
-        struct _XENVIF_TRANSMITTER_PACKET_SEND_INFO_V1          Send;
-        struct _XENVIF_TRANSMITTER_PACKET_COMPLETION_INFO_V1    Completion;
-    };
-};
-
-typedef struct _XENVIF_TRANSMITTER_PACKET_V1 XENVIF_TRANSMITTER_PACKET_V1, *PXENVIF_TRANSMITTER_PACKET_V1;
-
-#pragma warning(pop)
-
 #pragma pack(pop) 
 
-C_ASSERT(sizeof (struct _XENVIF_TRANSMITTER_PACKET_V1) <= (3 * sizeof (PVOID)));
-
 /*! \struct _XENVIF_TRANSMITTER_PACKET_V2
     \brief Transmit-side packet structure (v2)
 */
@@ -289,26 +268,6 @@ struct _XENVIF_TRANSMITTER_PACKET_V2 {
 
 typedef struct _XENVIF_TRANSMITTER_PACKET_V2 XENVIF_TRANSMITTER_PACKET, *PXENVIF_TRANSMITTER_PACKET;
 
-/*! \enum _XENVIF_TRANSMITTER_PACKET_OFFSET
-    \brief Offsets of packet metadata relative to
-    XENVIF_TRANSMITTER_PACKET pointer
-
-    Because the transmit side packet structure is limited to 3 pointer
-    types in size, not all information about the packet can be passed in
-    the structure. Other information can, however, be found by applying
-    these byte offsets to the structure pointer and then dereferencing the
-    specified type.
-*/
-typedef enum _XENVIF_TRANSMITTER_PACKET_OFFSET {
-    /*! The offset of the start of the packet within the MDL (type ULONG) */
-    XENVIF_TRANSMITTER_PACKET_OFFSET_OFFSET = 0,
-    /*! The total length of the packet (type ULONG) */
-    XENVIF_TRANSMITTER_PACKET_LENGTH_OFFSET,
-    /*! MDL referencing the initial buffer of the packet (type PMDL) */
-    XENVIF_TRANSMITTER_PACKET_MDL_OFFSET,
-    XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT
-} XENVIF_TRANSMITTER_PACKET_OFFSET, *PXENVIF_TRANSMITTER_PACKET_OFFSET;
-
 /*! \enum _XENVIF_VIF_STATISTIC
     \brief Interface statistics
 */
@@ -481,23 +440,6 @@ typedef VOID
     IN  PLIST_ENTRY List
     );
 
-/*! \typedef XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET
-    \brief Set byte offset of packet information relative to
-    XENVIF_TRANSMITTER_PACKET pointer.
-
-    See \ref _XENVIF_TRANSMITTER_PACKET_OFFSET.
-
-    \param Interface The interface header
-    \param Type The offset type
-    \param Value The offset value
-*/
-typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET)(
-    IN  PINTERFACE                          Interface,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    );
-
 /*! \typedef XENVIF_VIF_TRANSMITTER_GET_PACKET_HEADERS
     \brief Get the packet headers into supplied buffer
 
@@ -514,12 +456,6 @@ typedef NTSTATUS
     OUT PXENVIF_PACKET_INFO         Info
     );
 
-typedef NTSTATUS
-(*XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1)(
-    IN  PINTERFACE                      Interface,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    );
-
 /*! \typedef XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS
     \brief Queue transmit side packets at the provider
 
@@ -738,35 +674,6 @@ typedef NTSTATUS
 DEFINE_GUID(GUID_XENVIF_VIF_INTERFACE, 
 0x76f279cd, 0xca11, 0x418b, 0x92, 0xe8, 0xc5, 0x7f, 0x77, 0xde, 0xe, 0x2e);
 
-/*! \struct _XENVIF_VIF_INTERFACE_V1
-    \brief VIF interface version 1
-    \ingroup interfaces
-*/
-struct _XENVIF_VIF_INTERFACE_V1 {
-    INTERFACE                                       Interface;
-    XENVIF_VIF_ACQUIRE                              Acquire;
-    XENVIF_VIF_RELEASE                              Release;
-    XENVIF_VIF_ENABLE                               Enable;
-    XENVIF_VIF_DISABLE                              Disable;
-    XENVIF_VIF_QUERY_STATISTIC                      QueryStatistic;
-    XENVIF_VIF_RECEIVER_RETURN_PACKETS              ReceiverReturnPackets;
-    XENVIF_VIF_RECEIVER_SET_OFFLOAD_OPTIONS         ReceiverSetOffloadOptions;
-    XENVIF_VIF_RECEIVER_QUERY_RING_SIZE             ReceiverQueryRingSize;
-    XENVIF_VIF_TRANSMITTER_SET_PACKET_OFFSET        TransmitterSetPacketOffset;
-    XENVIF_VIF_TRANSMITTER_QUEUE_PACKETS_V1         TransmitterQueuePacketsVersion1;
-    XENVIF_VIF_TRANSMITTER_QUERY_OFFLOAD_OPTIONS    TransmitterQueryOffloadOptions;
-    XENVIF_VIF_TRANSMITTER_QUERY_LARGE_PACKET_SIZE  TransmitterQueryLargePacketSize;
-    XENVIF_VIF_TRANSMITTER_QUERY_RING_SIZE          TransmitterQueryRingSize;
-    XENVIF_VIF_MAC_QUERY_STATE                      MacQueryState;
-    XENVIF_VIF_MAC_QUERY_MAXIMUM_FRAME_SIZE         MacQueryMaximumFrameSize;
-    XENVIF_VIF_MAC_QUERY_PERMANENT_ADDRESS          MacQueryPermanentAddress;
-    XENVIF_VIF_MAC_QUERY_CURRENT_ADDRESS            MacQueryCurrentAddress;
-    XENVIF_VIF_MAC_QUERY_MULTICAST_ADDRESSES        MacQueryMulticastAddresses;
-    XENVIF_VIF_MAC_SET_MULTICAST_ADDRESSES          MacSetMulticastAddresses;
-    XENVIF_VIF_MAC_SET_FILTER_LEVEL                 MacSetFilterLevel;
-    XENVIF_VIF_MAC_QUERY_FILTER_LEVEL               MacQueryFilterLevel;
-};
-
 /*! \struct _XENVIF_VIF_INTERFACE_V2
     \brief VIF interface version 2
     \ingroup interfaces
@@ -836,7 +743,7 @@ typedef struct _XENVIF_VIF_INTERFACE_V3 XENVIF_VIF_INTERFACE, *PXENVIF_VIF_INTER
 
 #endif  // _WINDLL
 
-#define XENVIF_VIF_INTERFACE_VERSION_MIN    1
+#define XENVIF_VIF_INTERFACE_VERSION_MIN    2
 #define XENVIF_VIF_INTERFACE_VERSION_MAX    3
 
 #endif  // _XENVIF_INTERFACE_H
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 8bf0c2c..088bdb6 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -201,7 +201,6 @@ struct _XENVIF_TRANSMITTER {
     PXENVIF_TRANSMITTER_RING    *Ring;
     LONG                        MaxQueues;
     LONG                        NumQueues;
-    LONG_PTR                    Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT];
     BOOLEAN                     Split;
     BOOLEAN                     MulticastControl;
     ULONG                       DisableIpVersion4Gso;
@@ -2541,36 +2540,6 @@ __TransmitterRingPushRequests(
 
 #define XENVIF_TRANSMITTER_LOCK_BIT ((ULONG_PTR)1)
 
-static FORCEINLINE ULONG
-__TransmitterReversePacketList(
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   *Packet
-    )
-{
-    PXENVIF_TRANSMITTER_PACKET_V1       HeadPacket;
-    ULONG                               Count;
-
-    HeadPacket = NULL;
-    Count = 0;
-
-    while (*Packet != NULL) {
-        PXENVIF_TRANSMITTER_PACKET_V1   Next;
-
-        ASSERT(((ULONG_PTR)*Packet & XENVIF_TRANSMITTER_LOCK_BIT) == 0);
-
-        Next = (*Packet)->Next;
-
-        (*Packet)->Next = HeadPacket;
-        HeadPacket = *Packet;
-
-        *Packet = Next;
-        Count++;
-    }
-
-    *Packet = HeadPacket;
-
-    return Count;
-}
-
 static DECLSPEC_NOINLINE VOID
 TransmitterRingSwizzle(
     IN  PXENVIF_TRANSMITTER_RING    Ring
@@ -2739,48 +2708,14 @@ __TransmitterReturnPackets(
     )
 {
     PXENVIF_FRONTEND        Frontend;
-    PXENVIF_VIF_CONTEXT     VifContext;
-
-    Frontend = Transmitter->Frontend;
-    VifContext = PdoGetVifContext(FrontendGetPdo(Frontend));
-
-    switch (VifGetVersion(VifContext)) {
-    case 1: {
-        PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket;
-        PXENVIF_TRANSMITTER_PACKET_V1   NextPacket;
-
-        HeadPacket = NextPacket = NULL;
-
-        while (!IsListEmpty(List)) {
-            PLIST_ENTRY                 ListEntry;
-            PXENVIF_TRANSMITTER_PACKET  Packet;
-
-            ListEntry = RemoveTailList(List);
-            ASSERT3P(ListEntry, !=, List);
-
-            Packet = CONTAINING_RECORD(ListEntry, XENVIF_TRANSMITTER_PACKET, ListEntry);
-            Packet->ListEntry.Flink = Packet->ListEntry.Blink = NULL;
-
-            HeadPacket = Packet->Cookie;
-            HeadPacket->Next = NextPacket;
-            NextPacket = HeadPacket;
-
-            HeadPacket->Completion = Packet->Completion;
 
-            __TransmitterPutPacket(Transmitter, Packet);
-        }
-
-        if (HeadPacket != NULL)
-            VifTransmitterReturnPacketsVersion1(VifContext, HeadPacket);
+    if (IsListEmpty(List))
+        return;
 
-        break;
-    }
-    default:
-        if (!IsListEmpty(List))
-            VifTransmitterReturnPackets(VifContext, List);
+    Frontend = Transmitter->Frontend;
 
-        break;
-    }
+    VifTransmitterReturnPackets(PdoGetVifContext(FrontendGetPdo(Frontend)),
+                                List);
 }
 
 static FORCEINLINE BOOLEAN
@@ -4043,16 +3978,8 @@ TransmitterDebugCallback(
     IN  BOOLEAN         Crashing
     )
 {
-    PXENVIF_TRANSMITTER Transmitter = Argument;
-
+    UNREFERENCED_PARAMETER(Argument);
     UNREFERENCED_PARAMETER(Crashing);
-
-    XENBUS_DEBUG(Printf,
-                 &Transmitter->DebugInterface,
-                 "OFFSETS: Offset @ %ld Length @ %ld Mdl @ %ld\n",
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_OFFSET_OFFSET],
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_LENGTH_OFFSET],
-                 Transmitter->Offset[XENVIF_TRANSMITTER_PACKET_MDL_OFFSET]);
 }
 
 NTSTATUS
@@ -4518,9 +4445,6 @@ TransmitterTeardown(
     ASSERT3U(KeGetCurrentIrql(), ==, PASSIVE_LEVEL);
     KeFlushQueuedDpcs();
 
-    RtlZeroMemory(Transmitter->Offset,
-                  sizeof (LONG_PTR) *  XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT); 
-
     Index = Transmitter->MaxQueues;
     while (--Index >= 0) {
         PXENVIF_TRANSMITTER_RING    Ring = Transmitter->Ring[Index];
@@ -4568,29 +4492,6 @@ TransmitterTeardown(
     __TransmitterFree(Transmitter);
 }
 
-NTSTATUS
-TransmitterSetPacketOffset(
-    IN  PXENVIF_TRANSMITTER                 Transmitter,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    )
-{
-    NTSTATUS                                status;
-
-    status = STATUS_INVALID_PARAMETER;
-    if (Type >= XENVIF_TRANSMITTER_PACKET_OFFSET_COUNT)
-        goto fail1;
-
-    Transmitter->Offset[Type] = Value;
-
-    return STATUS_SUCCESS;
-
-fail1:
-    Error("fail1 (%08x)\n", status);
-
-    return status;
-}
-
 static BOOLEAN
 __TransmitterGetPacketHeadersPullup(
     IN      PVOID                   Argument,
@@ -4682,72 +4583,6 @@ fail1:
 }
 
 VOID
-TransmitterQueuePacketsVersion1(
-    IN  PXENVIF_TRANSMITTER             Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket
-    )
-{
-#define OFFSET_EXISTS(_Transmitter, _Packet, _Type)                                         \
-    ((_Transmitter)->Offset[XENVIF_TRANSMITTER_PACKET_ ## _Type ## _OFFSET] != 0)
-
-#define OFFSET(_Transmitter, _Packet, _Type)                                                \
-        ((OFFSET_EXISTS(_Transmitter, _Packet, _Type)) ?                                    \
-         (PVOID)((PUCHAR)(_Packet) +                                                        \
-                 (_Transmitter)->Offset[XENVIF_TRANSMITTER_PACKET_ ## _Type ## _OFFSET]) :  \
-         NULL)
-
-    LIST_ENTRY                          List;
-    PXENVIF_FRONTEND                    Frontend;
-    PXENVIF_VIF_CONTEXT                 VifContext;
-
-    Frontend = Transmitter->Frontend;
-    VifContext = PdoGetVifContext(FrontendGetPdo(Frontend));
-
-    ASSERT3U(VifGetVersion(VifContext), ==, 1);
-
-    InitializeListHead(&List);
-
-    while (HeadPacket != NULL) {
-        PXENVIF_TRANSMITTER_PACKET      Packet;
-
-        Packet = __TransmitterGetPacket(Transmitter);
-        if (Packet == NULL)
-            break;
-
-        Packet->Cookie = HeadPacket;
-        Packet->Send = HeadPacket->Send;
-
-        ASSERT(OFFSET_EXISTS(Transmitter, HeadPacket, MDL));
-        Packet->Mdl = *(PMDL *)OFFSET(Transmitter, HeadPacket, MDL);
-
-        if (OFFSET_EXISTS(Transmitter, HeadPacket, OFFSET))
-            Packet->Offset = *(PULONG)OFFSET(Transmitter, HeadPacket, OFFSET);
-        else
-            Packet->Offset = 0;
-
-        ASSERT(OFFSET_EXISTS(Transmitter, HeadPacket, LENGTH));
-        Packet->Length = *(PULONG)OFFSET(Transmitter, HeadPacket, LENGTH);
-
-        // Packets from legacy clients go to queue 0.
-        Packet->Value = 0;
-
-        InsertTailList(&List, &Packet->ListEntry);
-
-        HeadPacket = HeadPacket->Next;
-    }
-
-    if (!IsListEmpty(&List))
-        TransmitterQueuePackets(Transmitter, &List);
-
-    if (HeadPacket != NULL)
-        VifTransmitterReturnPacketsVersion1(VifContext,
-                                            HeadPacket);
-
-#undef OFFSET
-#undef OFFSET_EXISTS
-}
-
-VOID
 TransmitterQueuePackets(
     IN  PXENVIF_TRANSMITTER     Transmitter,
     IN  PLIST_ENTRY             List
diff --git a/src/xenvif/transmitter.h b/src/xenvif/transmitter.h
index eddc51b..04f1f6e 100644
--- a/src/xenvif/transmitter.h
+++ b/src/xenvif/transmitter.h
@@ -116,12 +116,6 @@ TransmitterQueryRingSize(
     );
 
 extern VOID
-TransmitterQueuePacketsVersion1(
-    IN  PXENVIF_TRANSMITTER             Transmitter,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   HeadPacket
-    );
-
-extern VOID
 TransmitterQueuePackets(
     IN  PXENVIF_TRANSMITTER Transmitter,
     IN  PLIST_ENTRY         List
@@ -141,13 +135,6 @@ TransmitterQueryLargePacketSize(
     );
 
 extern NTSTATUS
-TransmitterSetPacketOffset(
-    IN  PXENVIF_TRANSMITTER                 Transmitter,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    );
-
-extern NTSTATUS
 TransmitterGetPacketHeaders(
     IN  PXENVIF_TRANSMITTER         Transmitter,
     IN  PXENVIF_TRANSMITTER_PACKET  Packet,
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 02d1d11..556280b 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -237,28 +237,6 @@ done:
     return status;
 }
 
-static NTSTATUS
-VifTransmitterSetPacketOffset(
-    IN  PINTERFACE                          Interface,
-    IN  XENVIF_TRANSMITTER_PACKET_OFFSET    Type,
-    IN  LONG_PTR                            Value
-    )
-{
-    PXENVIF_VIF_CONTEXT                     Context = Interface->Context;
-    NTSTATUS                                status;
-
-    AcquireMrswLockShared(&Context->Lock);
-
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-    status = TransmitterSetPacketOffset(FrontendGetTransmitter(Context->Frontend),
-                                        Type,
-                                        Value);
-    
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return status;
-}
-
 static VOID
 VifReceiverReturnPackets( 
     IN  PINTERFACE      Interface,
@@ -300,35 +278,6 @@ VifTransmitterGetPacketHeaders(
 }
 
 static NTSTATUS
-VifTransmitterQueuePacketsVersion1(
-    IN  PINTERFACE                      Interface,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    )
-{
-    PXENVIF_VIF_CONTEXT                 Context = Interface->Context;
-    NTSTATUS                            status;
-
-    AcquireMrswLockShared(&Context->Lock);
-
-    status = STATUS_UNSUCCESSFUL;
-    if (Context->Enabled == FALSE)
-        goto fail1;
-
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-    TransmitterQueuePacketsVersion1(FrontendGetTransmitter(Context->Frontend),
-                                    Head);
-
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return STATUS_SUCCESS;
-
-fail1:
-    ReleaseMrswLockShared(&Context->Lock);
-
-    return status;
-}
-
-static NTSTATUS
 VifTransmitterQueuePackets(
     IN  PINTERFACE      Interface,
     IN  PLIST_ENTRY     List
@@ -713,31 +662,6 @@ done:
     ReleaseMrswLockExclusive(&Context->Lock, Irql, FALSE);
 }
 
-static struct _XENVIF_VIF_INTERFACE_V1 VifInterfaceVersion1 = {
-    { sizeof (struct _XENVIF_VIF_INTERFACE_V1), 1, NULL, NULL, NULL },
-    VifAcquire,
-    VifRelease,
-    VifEnable,
-    VifDisable,
-    VifQueryStatistic,
-    VifReceiverReturnPackets,
-    VifReceiverSetOffloadOptions,
-    VifReceiverQueryRingSize,
-    VifTransmitterSetPacketOffset,
-    VifTransmitterQueuePacketsVersion1,
-    VifTransmitterQueryOffloadOptions,
-    VifTransmitterQueryLargePacketSize,
-    VifTransmitterQueryRingSize,
-    VifMacQueryState,
-    VifMacQueryMaximumFrameSize,
-    VifMacQueryPermanentAddress,
-    VifMacQueryCurrentAddress,
-    VifMacQueryMulticastAddresses,
-    VifMacSetMulticastAddresses,
-    VifMacSetFilterLevel,
-    VifMacQueryFilterLevel
-};
-
 static struct _XENVIF_VIF_INTERFACE_V2 VifInterfaceVersion2 = {
     { sizeof (struct _XENVIF_VIF_INTERFACE_V2), 2, NULL, NULL, NULL },
     VifAcquire,
@@ -853,23 +777,6 @@ VifGetInterface(
     NTSTATUS                    status;
 
     switch (Version) {
-    case 1: {
-        struct _XENVIF_VIF_INTERFACE_V1 *VifInterface;
-
-        VifInterface = (struct _XENVIF_VIF_INTERFACE_V1 *)Interface;
-
-        status = STATUS_BUFFER_OVERFLOW;
-        if (Size < sizeof (struct _XENVIF_VIF_INTERFACE_V1))
-            break;
-
-        *VifInterface = VifInterfaceVersion1;
-
-        ASSERT3U(Interface->Version, ==, Version);
-        Interface->Context = Context;
-
-        status = STATUS_SUCCESS;
-        break;
-    }
     case 2: {
         struct _XENVIF_VIF_INTERFACE_V2 *VifInterface;
 
@@ -953,19 +860,6 @@ VifReceiverQueuePackets(
 }
 
 VOID
-VifTransmitterReturnPacketsVersion1(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    )
-{
-    ASSERT3U(VifGetVersion(Context), ==, 1);
-
-    Context->Callback(Context->Argument,
-                      XENVIF_TRANSMITTER_RETURN_PACKETS,
-                      Head);
-}
-
-VOID
 VifTransmitterReturnPackets(
     IN  PXENVIF_VIF_CONTEXT Context,
     IN  PLIST_ENTRY         List
diff --git a/src/xenvif/vif.h b/src/xenvif/vif.h
index 967b7aa..a842b79 100644
--- a/src/xenvif/vif.h
+++ b/src/xenvif/vif.h
@@ -69,12 +69,6 @@ VifReceiverQueuePackets(
     );
 
 extern VOID
-VifTransmitterReturnPacketsVersion1(
-    IN  PXENVIF_VIF_CONTEXT             Context,
-    IN  PXENVIF_TRANSMITTER_PACKET_V1   Head
-    );
-
-extern VOID
 VifTransmitterReturnPackets(
     IN  PXENVIF_VIF_CONTEXT Context,
     IN  PLIST_ENTRY         List
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 11:05:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 11:05:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbo3Z-0000lD-Su; Tue, 15 Sep 2015 11:05:49 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbo3Y-0000l4-Im
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 11:05:48 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	31/99-01143-B8BF7F55; Tue, 15 Sep 2015 11:05:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-8.tower-27.messagelabs.com!1442315146!49903586!1
X-Originating-IP: [209.85.212.181]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6527 invoked from network); 15 Sep 2015 11:05:46 -0000
Received: from mail-wi0-f181.google.com (HELO mail-wi0-f181.google.com)
	(209.85.212.181)
	by server-8.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 11:05:46 -0000
Received: by wiclk2 with SMTP id lk2so21959086wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 04:05:46 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=TwIA4K3O2mTKf0r/OgS8XgH3CW7bTFn2nNLSf0xUzds=;
	b=MjauqQPq7LShl2IDtb4PZAvj4STw223u2mfYLfF/fLqNJg+343SbOUYS0BJHGTEEIg
	hk5CCsK9XXB76ndU2SrLOSwhX3CxNSOhIbamcbO06/DSBfsMF2OCyUn0H//KhAZOoqSu
	PUMAR1W48fbyPFKtV5lax0Sm+KJRBnFs3Ljz9EmE/dybFtRW2nEAX8txzVRrGpyM6yky
	QyVEVWV8GiE/Yy41BfyLShElTbNFCcyi6y1io1MhqFFLYMizG0jGoPR8GDSC4JfXok4S
	nnSjeza1GLi+22+vucWOtVV6cyxBN4pTCATDlpd29pMzQVDPwFOpje6FI60g9V6EsaFL
	yAtw==
X-Gm-Message-State: ALoCoQmjFOGc+MQzPJQJoNYfU77PsCoyPWHKZQ2dnJQlVCsRELqotWMH6IUvE6jPaYsERm5AXXgQ
X-Received: by 10.195.11.101 with SMTP id eh5mr38811428wjd.59.1442315145873;
	Tue, 15 Sep 2015 04:05:45 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	hk5sm20497117wjb.6.2015.09.15.04.05.44
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 04:05:45 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F7FB89.9010300@m2r.biz>
Date: Tue, 15 Sep 2015 13:05:45 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4794734260167696226=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============4794734260167696226==
Content-Type: multipart/alternative;
 boundary="------------070007050106010809040100"

This is a multi-part message in MIME format.
--------------070007050106010809040100
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Length: 3632
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 10:59, Paul Durrant ha scritto:
>
> Joel,
>
> Offline removal should be quite possible. The thing that needs to be 
> cleaned up to make sure the image will reboot are the =91unplug=92 values 
> that are used early on in boot to request unplug of emulated devices 
> in QEMU. Look under HKLM/system/currentcontrolset/services/xen and you 
> should see a key called =91Unplug=92. If you delete that key then the next 
> reboot should use emulated devices and so should be fine with no PV 
> drivers.
>
> Cheers,
>
> Paul
>

Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
removed them from control panel, I also executed a bat I posted some 
months ago here for remove other related things, I tried also to remove 
the registry key above, with both ide and ahci disk, with 
xen_platform_pci=3D0 but in all cases gave me always 
INACCESSIBLE_BOOT_DEVICE blue screen :(
Someone know other things I can try=3F

First test with uninstall only from control panel game me also a more 
important problem (here there are also dom0 and domU details): 
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html

Thanks for any reply and sorry for my bad english.

> *From:*win-pv-devel-bounces@lists.xenproject.org 
> [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of *Joel 
> Noyce-Barnham
> *Sent:* 14 September 2015 18:21
> *To:* win-pv-devel@lists.xenproject.org
> *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
> Hi All,
>
> We are currently using the GPLPV drivers but are hoping to move to the 
> new Xen WINPV drivers as they are actively developed and have some new 
> features which we are interested in. We currently have a process where 
> VMs can be moved from our Xen hypervisor into EC2. This process relies 
> on the fact that we are able to remove the drivers from an offline 
> image. Previously we have been removing the drivers successfully by 
> converting the disk images to a VHD file, using Dism to remove the 
> drivers 
> (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx) 
> and then importing the resulting VHD into EC2. This works with the 
> GPLPV drivers but with the new WINPV drivers it creates an unbootable 
> image (the import into EC2 fails and the image can also not be booted 
> on the original hypervisor).
>
> I have found some previous posts on this mailing list 
> (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html) 
> discussing removing the drivers and I am able to successfully remove 
> the drivers from an online image but sadly our process requires that 
> this removal be performed offline.
>
> I am just wondering if anyone else is using Dism in windows to remove 
> the PV drivers from an offline image=3F Or if anyone else has 
> successfully removed the WINPV drivers from an offline image at all=3F 
> Any pointers anyone can give would be appreciated. The only way we 
> have so far found to make the image boot after removing the drivers 
> with Dism is by manual modification of a large number of registry keys 
> which seems like a far from ideal solution.
>
> Thanks for any help,
> Joel
>
> Zynstra is a private limited company registered in England and Wales 
> (registered number 07864369). Our registered office and Headquarters 
> are at The Innovation Centre, Broad Quay, Bath, BA1 1UD. This email, 
> its contents and any attachments are confidential. If you have 
> received this message in error please delete it from your system and 
> advise the sender immediately.
>
>

--------------070007050106010809040100
Content-Type: text/html; charset=windows-1252
Content-Length: 32271
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dwindows-1252"
      http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 10:59, Paul Durrant ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html;
        charset=3Dwindows-1252">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EF9D.48962DD0">
      <!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Joel,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Offline removal should be quite possible. The thing
              that needs to be cleaned up to make sure the image will
              reboot are the =91unplug=92 values that are used early on in
              boot to request unplug of emulated devices in QEMU. Look
              under HKLM/system/<span class=3D"SpellE">currentcontrolset</span>/services/xen

              and you should see a key called =91Unplug=92. If you delete
              that key then the next reboot should use emulated devices
              and so should be fine with no PV drivers.<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Cheers,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Paul</span></font></p>
      </div>
    </blockquote>
    <br>
    Hi I'm unable to boot windows 10 after new pv drivers uninstall, I
    removed them from control panel, I also executed a bat I posted some
    months ago here for remove other related things, I tried also to
    remove the registry key above, with both ide and ahci disk, with
    xen_platform_pci=3D0 but in all cases gave me always
    INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
    Someone know other things I can try=3F<br>
    <br>
    First test with uninstall only from control panel game me also a
    more important problem (here there are also dom0 and domU details):
<a class=3D"moz-txt-link-freetext" href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
    <br>
    Thanks for any reply and sorry for my bad english.<br>
    <br>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font size=3D"2"
                  face=3D"Tahoma"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US">
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                    [<a class=3D"moz-txt-link-freetext" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                    <b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel
                    Noyce-Barnham<br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    14 September 2015 18:21<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    [win-pv-devel] PV Drivers Offline Removal<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=A0</o:p></span></font></p>
          <div id=3D"divtagdefaultwrapper">
            <p style=3D"background:white"><font color=3D"black" size=3D"3"
                face=3D"Calibri"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                  All,<br>
                  <br>
                  We are currently using the GPLPV drivers but are
                  hoping to move to the new Xen WINPV drivers as they
                  are actively developed and have some new features
                  which we are interested in. We currently have a
                  process where VMs can be moved from our Xen hypervisor
                  into EC2. This process relies on the fact that we are
                  able to remove the drivers from an offline image.
                  Previously we have been removing the drivers
                  successfully by converting the disk images to a VHD
                  file, using Dism to remove the drivers (<a
                    moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                  and then importing the resulting VHD into EC2. This
                  works with the GPLPV drivers but with the new WINPV
                  drivers it creates an unbootable image (the import
                  into EC2 fails and the image can also not be booted on
                  the original hypervisor).<br>
                  <br>
                  I have found some previous posts on this mailing list
                  (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                  discussing removing the drivers and I am able to
                  successfully remove the drivers from an online image
                  but sadly our process requires that this removal be
                  performed offline.<br>
                  <br>
                  I am just wondering if anyone else is using Dism in
                  windows to remove the PV drivers from an offline
                  image=3F Or if anyone else has successfully removed the
                  WINPV drivers from an offline image at all=3F Any
                  pointers anyone can give would be appreciated. The
                  only way we have so far found to make the image boot
                  after removing the drivers with Dism is by manual
                  modification of a large number of registry keys which
                  seems like a far from ideal solution.<br>
                  <br>
                  Thanks for any help,<br>
                  Joel<o:p></o:p></span></font></p>
          </div>
          <p style=3D"line-height:10.0pt"><font color=3D"gray" size=3D"1"
              face=3D"Cambria"><span
style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:gray">Zynstra
                is a private limited company registered in England and
                Wales (registered number 07864369). Our registered
                office and Headquarters are at The Innovation Centre,
                Broad Quay, Bath, BA1 1UD. This email, its contents and
                any attachments are confidential. If you have received
                this message in error please delete it from your system
                and advise the sender immediately.
                <o:p></o:p></span></font></p>
        </div>
      </div>
      <br>
    </blockquote>
  </body>
</html>

--------------070007050106010809040100--


--===============4794734260167696226==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4794734260167696226==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 11:05:50 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 11:05:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbo3Z-0000lD-Su; Tue, 15 Sep 2015 11:05:49 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbo3Y-0000l4-Im
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 11:05:48 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	31/99-01143-B8BF7F55; Tue, 15 Sep 2015 11:05:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-8.tower-27.messagelabs.com!1442315146!49903586!1
X-Originating-IP: [209.85.212.181]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6527 invoked from network); 15 Sep 2015 11:05:46 -0000
Received: from mail-wi0-f181.google.com (HELO mail-wi0-f181.google.com)
	(209.85.212.181)
	by server-8.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 11:05:46 -0000
Received: by wiclk2 with SMTP id lk2so21959086wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 04:05:46 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=TwIA4K3O2mTKf0r/OgS8XgH3CW7bTFn2nNLSf0xUzds=;
	b=MjauqQPq7LShl2IDtb4PZAvj4STw223u2mfYLfF/fLqNJg+343SbOUYS0BJHGTEEIg
	hk5CCsK9XXB76ndU2SrLOSwhX3CxNSOhIbamcbO06/DSBfsMF2OCyUn0H//KhAZOoqSu
	PUMAR1W48fbyPFKtV5lax0Sm+KJRBnFs3Ljz9EmE/dybFtRW2nEAX8txzVRrGpyM6yky
	QyVEVWV8GiE/Yy41BfyLShElTbNFCcyi6y1io1MhqFFLYMizG0jGoPR8GDSC4JfXok4S
	nnSjeza1GLi+22+vucWOtVV6cyxBN4pTCATDlpd29pMzQVDPwFOpje6FI60g9V6EsaFL
	yAtw==
X-Gm-Message-State: ALoCoQmjFOGc+MQzPJQJoNYfU77PsCoyPWHKZQ2dnJQlVCsRELqotWMH6IUvE6jPaYsERm5AXXgQ
X-Received: by 10.195.11.101 with SMTP id eh5mr38811428wjd.59.1442315145873;
	Tue, 15 Sep 2015 04:05:45 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	hk5sm20497117wjb.6.2015.09.15.04.05.44
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 04:05:45 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F7FB89.9010300@m2r.biz>
Date: Tue, 15 Sep 2015 13:05:45 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4794734260167696226=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============4794734260167696226==
Content-Type: multipart/alternative;
 boundary="------------070007050106010809040100"

This is a multi-part message in MIME format.
--------------070007050106010809040100
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Length: 3632
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 10:59, Paul Durrant ha scritto:
>
> Joel,
>
> Offline removal should be quite possible. The thing that needs to be 
> cleaned up to make sure the image will reboot are the =91unplug=92 values 
> that are used early on in boot to request unplug of emulated devices 
> in QEMU. Look under HKLM/system/currentcontrolset/services/xen and you 
> should see a key called =91Unplug=92. If you delete that key then the next 
> reboot should use emulated devices and so should be fine with no PV 
> drivers.
>
> Cheers,
>
> Paul
>

Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
removed them from control panel, I also executed a bat I posted some 
months ago here for remove other related things, I tried also to remove 
the registry key above, with both ide and ahci disk, with 
xen_platform_pci=3D0 but in all cases gave me always 
INACCESSIBLE_BOOT_DEVICE blue screen :(
Someone know other things I can try=3F

First test with uninstall only from control panel game me also a more 
important problem (here there are also dom0 and domU details): 
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html

Thanks for any reply and sorry for my bad english.

> *From:*win-pv-devel-bounces@lists.xenproject.org 
> [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of *Joel 
> Noyce-Barnham
> *Sent:* 14 September 2015 18:21
> *To:* win-pv-devel@lists.xenproject.org
> *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
> Hi All,
>
> We are currently using the GPLPV drivers but are hoping to move to the 
> new Xen WINPV drivers as they are actively developed and have some new 
> features which we are interested in. We currently have a process where 
> VMs can be moved from our Xen hypervisor into EC2. This process relies 
> on the fact that we are able to remove the drivers from an offline 
> image. Previously we have been removing the drivers successfully by 
> converting the disk images to a VHD file, using Dism to remove the 
> drivers 
> (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx) 
> and then importing the resulting VHD into EC2. This works with the 
> GPLPV drivers but with the new WINPV drivers it creates an unbootable 
> image (the import into EC2 fails and the image can also not be booted 
> on the original hypervisor).
>
> I have found some previous posts on this mailing list 
> (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html) 
> discussing removing the drivers and I am able to successfully remove 
> the drivers from an online image but sadly our process requires that 
> this removal be performed offline.
>
> I am just wondering if anyone else is using Dism in windows to remove 
> the PV drivers from an offline image=3F Or if anyone else has 
> successfully removed the WINPV drivers from an offline image at all=3F 
> Any pointers anyone can give would be appreciated. The only way we 
> have so far found to make the image boot after removing the drivers 
> with Dism is by manual modification of a large number of registry keys 
> which seems like a far from ideal solution.
>
> Thanks for any help,
> Joel
>
> Zynstra is a private limited company registered in England and Wales 
> (registered number 07864369). Our registered office and Headquarters 
> are at The Innovation Centre, Broad Quay, Bath, BA1 1UD. This email, 
> its contents and any attachments are confidential. If you have 
> received this message in error please delete it from your system and 
> advise the sender immediately.
>
>

--------------070007050106010809040100
Content-Type: text/html; charset=windows-1252
Content-Length: 32271
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dwindows-1252"
      http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 10:59, Paul Durrant ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html;
        charset=3Dwindows-1252">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EF9D.48962DD0">
      <!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Joel,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Offline removal should be quite possible. The thing
              that needs to be cleaned up to make sure the image will
              reboot are the =91unplug=92 values that are used early on in
              boot to request unplug of emulated devices in QEMU. Look
              under HKLM/system/<span class=3D"SpellE">currentcontrolset</span>/services/xen

              and you should see a key called =91Unplug=92. If you delete
              that key then the next reboot should use emulated devices
              and so should be fine with no PV drivers.<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Cheers,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Paul</span></font></p>
      </div>
    </blockquote>
    <br>
    Hi I'm unable to boot windows 10 after new pv drivers uninstall, I
    removed them from control panel, I also executed a bat I posted some
    months ago here for remove other related things, I tried also to
    remove the registry key above, with both ide and ahci disk, with
    xen_platform_pci=3D0 but in all cases gave me always
    INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
    Someone know other things I can try=3F<br>
    <br>
    First test with uninstall only from control panel game me also a
    more important problem (here there are also dom0 and domU details):
<a class=3D"moz-txt-link-freetext" href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
    <br>
    Thanks for any reply and sorry for my bad english.<br>
    <br>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font color=3D"#1f497d" size=3D"2"
            face=3D"Calibri"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font size=3D"2"
                  face=3D"Tahoma"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US">
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                    [<a class=3D"moz-txt-link-freetext" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                    <b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel
                    Noyce-Barnham<br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    14 September 2015 18:21<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    [win-pv-devel] PV Drivers Offline Removal<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span
                style=3D"font-size:12.0pt"><o:p>=A0</o:p></span></font></p>
          <div id=3D"divtagdefaultwrapper">
            <p style=3D"background:white"><font color=3D"black" size=3D"3"
                face=3D"Calibri"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                  All,<br>
                  <br>
                  We are currently using the GPLPV drivers but are
                  hoping to move to the new Xen WINPV drivers as they
                  are actively developed and have some new features
                  which we are interested in. We currently have a
                  process where VMs can be moved from our Xen hypervisor
                  into EC2. This process relies on the fact that we are
                  able to remove the drivers from an offline image.
                  Previously we have been removing the drivers
                  successfully by converting the disk images to a VHD
                  file, using Dism to remove the drivers (<a
                    moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                  and then importing the resulting VHD into EC2. This
                  works with the GPLPV drivers but with the new WINPV
                  drivers it creates an unbootable image (the import
                  into EC2 fails and the image can also not be booted on
                  the original hypervisor).<br>
                  <br>
                  I have found some previous posts on this mailing list
                  (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                  discussing removing the drivers and I am able to
                  successfully remove the drivers from an online image
                  but sadly our process requires that this removal be
                  performed offline.<br>
                  <br>
                  I am just wondering if anyone else is using Dism in
                  windows to remove the PV drivers from an offline
                  image=3F Or if anyone else has successfully removed the
                  WINPV drivers from an offline image at all=3F Any
                  pointers anyone can give would be appreciated. The
                  only way we have so far found to make the image boot
                  after removing the drivers with Dism is by manual
                  modification of a large number of registry keys which
                  seems like a far from ideal solution.<br>
                  <br>
                  Thanks for any help,<br>
                  Joel<o:p></o:p></span></font></p>
          </div>
          <p style=3D"line-height:10.0pt"><font color=3D"gray" size=3D"1"
              face=3D"Cambria"><span
style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:gray">Zynstra
                is a private limited company registered in England and
                Wales (registered number 07864369). Our registered
                office and Headquarters are at The Innovation Centre,
                Broad Quay, Bath, BA1 1UD. This email, its contents and
                any attachments are confidential. If you have received
                this message in error please delete it from your system
                and advise the sender immediately.
                <o:p></o:p></span></font></p>
        </div>
      </div>
      <br>
    </blockquote>
  </body>
</html>

--------------070007050106010809040100--


--===============4794734260167696226==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4794734260167696226==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 11:16:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 11:16:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZboDy-0001vh-C3; Tue, 15 Sep 2015 11:16:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=693b91b53=ben.chalmers@citrix.com>)
	id 1ZboDx-0001vJ-Ck
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 11:16:33 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	6B/0A-15765-01EF7F55; Tue, 15 Sep 2015 11:16:32 +0000
X-Env-Sender: prvs=693b91b53=ben.chalmers@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1442315790!47605159!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_50_60,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30511 invoked from network); 15 Sep 2015 11:16:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 11:16:31 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; d="scan'208,217";a="2972939"
From: Ben Chalmers <ben.chalmers@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Paul Durrant
	<Paul.Durrant@citrix.com>, Joel Noyce-Barnham
	<joel.noyce-barnham@zynstra.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] PV Drivers Offline Removal
Thread-Index: AdDvp/dEYeexgNh0gU2avNlJwgQ4/Q==
Content-Class: urn:content-classes:message
Date: Tue, 15 Sep 2015 11:16:28 +0000
Message-ID: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5228897306906229293=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============5228897306906229293==
Content-Class: urn:content-classes:message
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_"

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIGRyaXZlciB1bmluc3RhbGwsIHdoaWNoIFBhdWwgZml4
ZWQgaW4NCg0KDQoNCmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93
aW4veGVudmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5
NDNmODE3N2ENCg0KDQoNCkFsdGVybmF0aXZlbHk6DQoNCg0KDQpyZW1vdmluZyB4ZW5maWx0IGZy
b20gVXBwZXJGaWx0ZXJzIG9mIEhLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRy
b2xTZXRcQ29udHJvbFxDbGFzcyBzdWJrZXlzDQoNCns0RDM2RTk2QS1FMzI1LTExQ0UtQkZDMS0w
ODAwMkJFMTAzMTh9DQoNCns0RDM2RTk3RC1FMzI1LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9DQoN
Cg0KDQpBbmQgc2V0dGluZw0KDQoNCg0KSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50
Q29udHJvbFNldFxTZXJ2aWNlc1xYZW4qXFN0YXJ0IHRvIDMNCg0KDQoNCmFyZSBmcmVxdWVudGx5
IGdvb2QgKGlmIHNvbWV3aGF0IHNldmVyZSkgd2F5cyBvZiBhdm9pZGluZyA3QiBCU09EcyB3aGVu
IHRoaW5ncyBnbyB3cm9uZy4NCg0KDQoNCkJlbiBDaGFsbWVycw0KDQoNCg0KDQoNCkZyb206IEZh
YmlvIEZhbnRvbmkNClNlbnQ6IDE1IFNlcHRlbWJlciAyMDE1IDEyOjA2DQpUbzogUGF1bCBEdXJy
YW50O0pvZWwgTm95Y2UtQmFybmhhbTt3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcN
ClN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQViBEcml2ZXJzIE9mZmxpbmUgUmVtb3ZhbA0K
DQoNCklsIDE1LzA5LzIwMTUgMTA6NTksIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KSm9lbCwN
Cg0KICBPZmZsaW5lIHJlbW92YWwgc2hvdWxkIGJlIHF1aXRlIHBvc3NpYmxlLiBUaGUgdGhpbmcg
dGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2Ugd2lsbCBy
ZWJvb3QgYXJlIHRoZSDigJh1bnBsdWfigJkgdmFsdWVzIHRoYXQgYXJlIHVzZWQgZWFybHkgb24g
aW4gYm9vdCB0byByZXF1ZXN0IHVucGx1ZyBvZiBlbXVsYXRlZCBkZXZpY2VzIGluIFFFTVUuIExv
b2sgdW5kZXIgSEtMTS9zeXN0ZW0vY3VycmVudGNvbnRyb2xzZXQvc2VydmljZXMveGVuIGFuZCB5
b3Ugc2hvdWxkIHNlZSBhIGtleSBjYWxsZWQg4oCYVW5wbHVn4oCZLiBJZiB5b3UgZGVsZXRlIHRo
YXQga2V5IHRoZW4gdGhlIG5leHQgcmVib290IHNob3VsZCB1c2UgZW11bGF0ZWQgZGV2aWNlcyBh
bmQgc28gc2hvdWxkIGJlIGZpbmUgd2l0aCBubyBQViBkcml2ZXJzLg0KDQogIENoZWVycywNCg0K
ICBQYXVsDQoNCkhpIEknbSB1bmFibGUgdG8gYm9vdCB3aW5kb3dzIDEwIGFmdGVyIG5ldyBwdiBk
cml2ZXJzIHVuaW5zdGFsbCwgSSByZW1vdmVkIHRoZW0gZnJvbSBjb250cm9sIHBhbmVsLCBJIGFs
c28gZXhlY3V0ZWQgYSBiYXQgSSBwb3N0ZWQgc29tZSBtb250aHMgYWdvIGhlcmUgZm9yIHJlbW92
ZSBvdGhlciByZWxhdGVkIHRoaW5ncywgSSB0cmllZCBhbHNvIHRvIHJlbW92ZSB0aGUgcmVnaXN0
cnkga2V5IGFib3ZlLCB3aXRoIGJvdGggaWRlIGFuZCBhaGNpIGRpc2ssIHdpdGggeGVuX3BsYXRm
b3JtX3BjaT0wIGJ1dCBpbiBhbGwgY2FzZXMgZ2F2ZSBtZSBhbHdheXMgSU5BQ0NFU1NJQkxFX0JP
T1RfREVWSUNFIGJsdWUgc2NyZWVuIDooDQpTb21lb25lIGtub3cgb3RoZXIgdGhpbmdzIEkgY2Fu
IHRyeT8NCg0KRmlyc3QgdGVzdCB3aXRoIHVuaW5zdGFsbCBvbmx5IGZyb20gY29udHJvbCBwYW5l
bCBnYW1lIG1lIGFsc28gYSBtb3JlIGltcG9ydGFudCBwcm9ibGVtIChoZXJlIHRoZXJlIGFyZSBh
bHNvIGRvbTAgYW5kIGRvbVUgZGV0YWlscyk6IGh0dHA6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVz
L2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDkvbXNnMDAwNjMuaHRtbA0KDQpUaGFua3MgZm9yIGFu
eSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLg0KDQoNCg0KRnJvbTogd2luLXB2
LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc8bWFpbHRvOndpbi1wdi1kZXZlbC1i
b3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBbbWFpbHRvOndpbi1wdi1kZXZlbC1ib3VuY2Vz
QGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgSm9lbCBOb3ljZS1CYXJuaGFtDQpT
ZW50OiAxNCBTZXB0ZW1iZXIgMjAxNSAxODoyMQ0KVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZzxtYWlsdG86d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnPg0KU3Vi
amVjdDogW3dpbi1wdi1kZXZlbF0gUFYgRHJpdmVycyBPZmZsaW5lIFJlbW92YWwNCg0KDQpIaSBB
bGwsDQoNCldlIGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEdQTFBWIGRyaXZlcnMgYnV0IGFyZSBo
b3BpbmcgdG8gbW92ZSB0byB0aGUgbmV3IFhlbiBXSU5QViBkcml2ZXJzIGFzIHRoZXkgYXJlIGFj
dGl2ZWx5IGRldmVsb3BlZCBhbmQgaGF2ZSBzb21lIG5ldyBmZWF0dXJlcyB3aGljaCB3ZSBhcmUg
aW50ZXJlc3RlZCBpbi4gV2UgY3VycmVudGx5IGhhdmUgYSBwcm9jZXNzIHdoZXJlIFZNcyBjYW4g
YmUgbW92ZWQgZnJvbSBvdXIgWGVuIGh5cGVydmlzb3IgaW50byBFQzIuIFRoaXMgcHJvY2VzcyBy
ZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB3ZSBhcmUgYWJsZSB0byByZW1vdmUgdGhlIGRyaXZlcnMg
ZnJvbSBhbiBvZmZsaW5lIGltYWdlLiBQcmV2aW91c2x5IHdlIGhhdmUgYmVlbiByZW1vdmluZyB0
aGUgZHJpdmVycyBzdWNjZXNzZnVsbHkgYnkgY29udmVydGluZyB0aGUgZGlzayBpbWFnZXMgdG8g
YSBWSEQgZmlsZSwgdXNpbmcgRGlzbSB0byByZW1vdmUgdGhlIGRyaXZlcnMgKGh0dHBzOi8vdGVj
aG5ldC5taWNyb3NvZnQuY29tL2VuLUdCL2xpYnJhcnkvZGQ3NDQzNTUlMjh2PXdzLjEwJTI5LmFz
cHgpIGFuZCB0aGVuIGltcG9ydGluZyB0aGUgcmVzdWx0aW5nIFZIRCBpbnRvIEVDMi4gVGhpcyB3
b3JrcyB3aXRoIHRoZSBHUExQViBkcml2ZXJzIGJ1dCB3aXRoIHRoZSBuZXcgV0lOUFYgZHJpdmVy
cyBpdCBjcmVhdGVzIGFuIHVuYm9vdGFibGUgaW1hZ2UgKHRoZSBpbXBvcnQgaW50byBFQzIgZmFp
bHMgYW5kIHRoZSBpbWFnZSBjYW4gYWxzbyBub3QgYmUgYm9vdGVkIG9uIHRoZSBvcmlnaW5hbCBo
eXBlcnZpc29yKS4NCg0KSSBoYXZlIGZvdW5kIHNvbWUgcHJldmlvdXMgcG9zdHMgb24gdGhpcyBt
YWlsaW5nIGxpc3QgKGh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3dp
bi1wdi1kZXZlbC8yMDE1LTAzL21zZzAwMDc2Lmh0bWwpIGRpc2N1c3NpbmcgcmVtb3ZpbmcgdGhl
IGRyaXZlcnMgYW5kIEkgYW0gYWJsZSB0byBzdWNjZXNzZnVsbHkgcmVtb3ZlIHRoZSBkcml2ZXJz
IGZyb20gYW4gb25saW5lIGltYWdlIGJ1dCBzYWRseSBvdXIgcHJvY2VzcyByZXF1aXJlcyB0aGF0
IHRoaXMgcmVtb3ZhbCBiZSBwZXJmb3JtZWQgb2ZmbGluZS4NCg0KSSBhbSBqdXN0IHdvbmRlcmlu
ZyBpZiBhbnlvbmUgZWxzZSBpcyB1c2luZyBEaXNtIGluIHdpbmRvd3MgdG8gcmVtb3ZlIHRoZSBQ
ViBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFnZT8gT3IgaWYgYW55b25lIGVsc2UgaGFzIHN1
Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBXSU5QViBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFn
ZSBhdCBhbGw/IEFueSBwb2ludGVycyBhbnlvbmUgY2FuIGdpdmUgd291bGQgYmUgYXBwcmVjaWF0
ZWQuIFRoZSBvbmx5IHdheSB3ZSBoYXZlIHNvIGZhciBmb3VuZCB0byBtYWtlIHRoZSBpbWFnZSBi
b290IGFmdGVyIHJlbW92aW5nIHRoZSBkcml2ZXJzIHdpdGggRGlzbSBpcyBieSBtYW51YWwgbW9k
aWZpY2F0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lzdHJ5IGtleXMgd2hpY2ggc2VlbXMg
bGlrZSBhIGZhciBmcm9tIGlkZWFsIHNvbHV0aW9uLg0KDQpUaGFua3MgZm9yIGFueSBoZWxwLA0K
Sm9lbA0KDQpaeW5zdHJhIGlzIGEgcHJpdmF0ZSBsaW1pdGVkIGNvbXBhbnkgcmVnaXN0ZXJlZCBp
biBFbmdsYW5kIGFuZCBXYWxlcyAocmVnaXN0ZXJlZCBudW1iZXIgMDc4NjQzNjkpLiBPdXIgcmVn
aXN0ZXJlZCBvZmZpY2UgYW5kIEhlYWRxdWFydGVycyBhcmUgYXQgVGhlIElubm92YXRpb24gQ2Vu
dHJlLCBCcm9hZCBRdWF5LCBCYXRoLCBCQTEgMVVELiBUaGlzIGVtYWlsLCBpdHMgY29udGVudHMg
YW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsLiBJZiB5b3UgaGF2ZSByZWNlaXZl
ZCB0aGlzIG1lc3NhZ2UgaW4gZXJyb3IgcGxlYXNlIGRlbGV0ZSBpdCBmcm9tIHlvdXIgc3lzdGVt
IGFuZCBhZHZpc2UgdGhlIHNlbmRlciBpbW1lZGlhdGVseS4NCg0KDQoNCg==

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_
Content-Type: text/html; charset="utf-8"
Content-ID: <87FDF6F131F61F468CC46055F4DCE47B@citrix.com>
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4
bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo
dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp
dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l
dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg
bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj
ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2
IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy
IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbWJyaWE7
DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFt
aWx5OkNvbnNvbGFzOw0KCXBhbm9zZS0xOjIgMTEgNiA5IDIgMiA0IDMgMiA0O30NCkBmb250LWZh
Y2UNCgl7Zm9udC1mYW1pbHk6VGFob21hOw0KCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0
O30NCi8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBk
aXYuTXNvTm9ybWFsDQoJe21hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZv
bnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7fQ0KYTps
aW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6
Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29I
eXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Izk1NEY3
MjsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnANCgl7bXNvLXN0eWxlLXByaW9yaXR5
Ojk5Ow0KCW1hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZTox
MS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7fQ0Kc3Bhbi5zcGVsbGUN
Cgl7bXNvLXN0eWxlLW5hbWU6c3BlbGxlO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10
eXBlOmV4cG9ydC1vbmx5O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzky
LjBwdDsNCgltYXJnaW46NzIuMHB0IDcyLjBwdCA3Mi4wcHQgNzIuMHB0O30NCmRpdi5Xb3JkU2Vj
dGlvbjENCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQ0KLS0+PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5
IGxhbmc9IkVOLUdCIiBsaW5rPSJibHVlIiB2bGluaz0iIzk1NEY3MiI+DQo8ZGl2IGNsYXNzPSJX
b3JkU2VjdGlvbjEiPg0KPHA+VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIGRyaXZlciB1bmluc3Rh
bGwsIHdoaWNoIFBhdWwgZml4ZWQgaW48L3A+DQo8cD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw
PjxhIGhyZWY9Imh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93aW4v
eGVudmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5NDNm
ODE3N2EiPmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93aW4veGVu
dmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5NDNmODE3
N2E8L2E+PC9wPg0KPHA+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cD5BbHRlcm5hdGl2ZWx5Ojwv
cD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+cmVtb3ZpbmcgeGVuZmlsdCBmcm9tIFVw
cGVyRmlsdGVycyBvZiBIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0
XENvbnRyb2xcQ2xhc3Mgc3Via2V5cw0KPC9wPg0KPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5
LjBwdDtmb250LWZhbWlseTpDb25zb2xhcztjb2xvcjojMzMzMzMzO2JhY2tncm91bmQ6d2hpdGUi
Pns0RDM2RTk2QS1FMzI1LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9PG86cD48L286cD48L3NwYW4+
PC9wPg0KPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTpDb25zb2xh
cztjb2xvcjojMzMzMzMzO2JhY2tncm91bmQ6d2hpdGUiPns0RDM2RTk3RC1FMzI1LTExQ0UtQkZD
MS0wODAwMkJFMTAzMTh9PG86cD48L286cD48L3NwYW4+PC9wPg0KPHA+PG86cD4mbmJzcDs8L286
cD48L3A+DQo8cD5BbmQgc2V0dGluZyA8L3A+DQo8cD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw
PkhLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNcWGVu
KlxTdGFydCB0byAzIDwvcD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+YXJlIGZyZXF1
ZW50bHkgZ29vZCAoaWYgc29tZXdoYXQgc2V2ZXJlKSB3YXlzIG9mIGF2b2lkaW5nIDdCIEJTT0Rz
IHdoZW4gdGhpbmdzIGdvIHdyb25nLjwvcD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+
QmVuIENoYWxtZXJzPC9wPg0KPHA+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cD48bzpwPiZuYnNw
OzwvbzpwPjwvcD4NCjxkaXYgc3R5bGU9Im1zby1lbGVtZW50OnBhcmEtYm9yZGVyLWRpdjtib3Jk
ZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwY20g
MGNtIDBjbSI+DQo8cCBzdHlsZT0iYm9yZGVyOm5vbmU7cGFkZGluZzowY20iPjxicj4NCjxiPkZy
b206IDwvYj5GYWJpbyBGYW50b25pPGJyPg0KPGI+U2VudDogPC9iPjE1IFNlcHRlbWJlciAyMDE1
IDEyOjA2PGJyPg0KPGI+VG86IDwvYj5QYXVsIER1cnJhbnQ7Sm9lbCBOb3ljZS1CYXJuaGFtO3dp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzxicj4NCjxiPlN1YmplY3Q6IDwvYj5SZTog
W3dpbi1wdi1kZXZlbF0gUFYgRHJpdmVycyBPZmZsaW5lIFJlbW92YWw8L3A+DQo8L2Rpdj4NCjxw
IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBO
ZXcgUm9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs
YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcg
Um9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNz
PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0O2ZvbnQtZmFtaWx5OiZx
dW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+SWwgMTUvMDkvMjAxNSAxMDo1OSwgUGF1
bCBEdXJyYW50IGhhIHNjcml0dG86PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0
O2ZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+PG86cD48L286
cD48L3NwYW4+PC9wPg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2lu
LWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9
ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Sm9lbCw8L3NwYW4+PHNwYW4gc3R5bGU9
ImZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+PG86cD48L286
cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6
ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O
b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9yOiMxRjQ5N0QiPiZuYnNw
OyBPZmZsaW5lIHJlbW92YWwgc2hvdWxkIGJlIHF1aXRlIHBvc3NpYmxlLiBUaGUgdGhpbmcgdGhh
dCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2Ugd2lsbCByZWJv
b3QgYXJlIHRoZSDigJh1bnBsdWfigJkgdmFsdWVzIHRoYXQgYXJlIHVzZWQgZWFybHkgb24gaW4g
Ym9vdCB0byByZXF1ZXN0IHVucGx1ZyBvZg0KIGVtdWxhdGVkIGRldmljZXMgaW4gUUVNVS4gTG9v
ayB1bmRlciBIS0xNL3N5c3RlbS88c3BhbiBjbGFzcz0ic3BlbGxlIj5jdXJyZW50Y29udHJvbHNl
dDwvc3Bhbj4vc2VydmljZXMveGVuIGFuZCB5b3Ugc2hvdWxkIHNlZSBhIGtleSBjYWxsZWQg4oCY
VW5wbHVn4oCZLiBJZiB5b3UgZGVsZXRlIHRoYXQga2V5IHRoZW4gdGhlIG5leHQgcmVib290IHNo
b3VsZCB1c2UgZW11bGF0ZWQgZGV2aWNlcyBhbmQgc28gc2hvdWxkIGJlIGZpbmUgd2l0aCBubyBQ
ViBkcml2ZXJzLjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjEwLjBwdDtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PC9wPg0KPHAgY2xh
c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3
RCI+Jm5ic3A7IENoZWVycyw8L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4N
CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9y
OiMxRjQ5N0QiPiZuYnNwOyBQYXVsPC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0K
PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPjxicj4N
CkhpIEknbSB1bmFibGUgdG8gYm9vdCB3aW5kb3dzIDEwIGFmdGVyIG5ldyBwdiBkcml2ZXJzIHVu
aW5zdGFsbCwgSSByZW1vdmVkIHRoZW0gZnJvbSBjb250cm9sIHBhbmVsLCBJIGFsc28gZXhlY3V0
ZWQgYSBiYXQgSSBwb3N0ZWQgc29tZSBtb250aHMgYWdvIGhlcmUgZm9yIHJlbW92ZSBvdGhlciBy
ZWxhdGVkIHRoaW5ncywgSSB0cmllZCBhbHNvIHRvIHJlbW92ZSB0aGUgcmVnaXN0cnkga2V5IGFi
b3ZlLCB3aXRoIGJvdGggaWRlIGFuZCBhaGNpIGRpc2ssDQogd2l0aCB4ZW5fcGxhdGZvcm1fcGNp
PTAgYnV0IGluIGFsbCBjYXNlcyBnYXZlIG1lIGFsd2F5cyBJTkFDQ0VTU0lCTEVfQk9PVF9ERVZJ
Q0UgYmx1ZSBzY3JlZW4gOig8YnI+DQpTb21lb25lIGtub3cgb3RoZXIgdGhpbmdzIEkgY2FuIHRy
eT88YnI+DQo8YnI+DQpGaXJzdCB0ZXN0IHdpdGggdW5pbnN0YWxsIG9ubHkgZnJvbSBjb250cm9s
IHBhbmVsIGdhbWUgbWUgYWxzbyBhIG1vcmUgaW1wb3J0YW50IHByb2JsZW0gKGhlcmUgdGhlcmUg
YXJlIGFsc28gZG9tMCBhbmQgZG9tVSBkZXRhaWxzKToNCjxhIGhyZWY9Imh0dHA6Ly9saXN0cy54
ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDkvbXNnMDAwNjMuaHRtbCIg
dGFyZ2V0PSJfQkxBTksiPg0KaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC93aW4t
cHYtZGV2ZWwvMjAxNS0wOS9tc2cwMDA2My5odG1sPC9hPjxicj4NCjxicj4NClRoYW5rcyBmb3Ig
YW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guPGJyPg0KPGJyPg0KPGJyPg0K
PG86cD48L286cD48L3NwYW4+PC9wPg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4w
cHQ7bWFyZ2luLWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw
YW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwv
cD4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIGJsdWUgMS41cHQ7
cGFkZGluZzowY20gMGNtIDBjbSA0LjBwdCI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5v
bmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAw
Y20iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm
b250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OyxzYW5zLXNlcmlm
Ij5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAu
MHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OyxzYW5zLXNlcmlmIj4NCjxhIGhyZWY9
Im1haWx0bzp3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyI+d2luLXB2
LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc8L2E+IFs8YSBocmVmPSJtYWlsdG86
d2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmciPm1haWx0bzp3aW4tcHYt
ZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2Yg
PC9iPkpvZWwgTm95Y2UtQmFybmhhbTxicj4NCjxiPlNlbnQ6PC9iPiAxNCBTZXB0ZW1iZXIgMjAx
NSAxODoyMTxicj4NCjxiPlRvOjwvYj4gPGEgaHJlZj0ibWFpbHRvOndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZyI+d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnPC9hPjxi
cj4NCjxiPlN1YmplY3Q6PC9iPiBbd2luLXB2LWRldmVsXSBQViBEcml2ZXJzIE9mZmxpbmUgUmVt
b3ZhbDwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw
YW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPiZuYnNwOzwvc3Bhbj48L3A+DQo8ZGl2IGlkPSJk
aXZ0YWdkZWZhdWx0d3JhcHBlciI+DQo8cCBzdHlsZT0iYmFja2dyb3VuZDp3aGl0ZSI+PHNwYW4g
c3R5bGU9ImNvbG9yOmJsYWNrIj5IaSBBbGwsPGJyPg0KPGJyPg0KV2UgYXJlIGN1cnJlbnRseSB1
c2luZyB0aGUgR1BMUFYgZHJpdmVycyBidXQgYXJlIGhvcGluZyB0byBtb3ZlIHRvIHRoZSBuZXcg
WGVuIFdJTlBWIGRyaXZlcnMgYXMgdGhleSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGVkIGFuZCBoYXZl
IHNvbWUgbmV3IGZlYXR1cmVzIHdoaWNoIHdlIGFyZSBpbnRlcmVzdGVkIGluLiBXZSBjdXJyZW50
bHkgaGF2ZSBhIHByb2Nlc3Mgd2hlcmUgVk1zIGNhbiBiZSBtb3ZlZCBmcm9tIG91ciBYZW4gaHlw
ZXJ2aXNvciBpbnRvDQogRUMyLiBUaGlzIHByb2Nlc3MgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQg
d2UgYXJlIGFibGUgdG8gcmVtb3ZlIHRoZSBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFnZS4g
UHJldmlvdXNseSB3ZSBoYXZlIGJlZW4gcmVtb3ZpbmcgdGhlIGRyaXZlcnMgc3VjY2Vzc2Z1bGx5
IGJ5IGNvbnZlcnRpbmcgdGhlIGRpc2sgaW1hZ2VzIHRvIGEgVkhEIGZpbGUsIHVzaW5nIERpc20g
dG8gcmVtb3ZlIHRoZSBkcml2ZXJzICg8YSBocmVmPSJodHRwczovL3RlY2huZXQubWljcm9zb2Z0
LmNvbS9lbi1HQi9saWJyYXJ5L2RkNzQ0MzU1JTI4dj13cy4xMCUyOS5hc3B4IiB0YXJnZXQ9Il9C
TEFOSyI+aHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tR0IvbGlicmFyeS9kZDc0NDM1
NSUyOHY9d3MuMTAlMjkuYXNweDwvYT4pDQogYW5kIHRoZW4gaW1wb3J0aW5nIHRoZSByZXN1bHRp
bmcgVkhEIGludG8gRUMyLiBUaGlzIHdvcmtzIHdpdGggdGhlIEdQTFBWIGRyaXZlcnMgYnV0IHdp
dGggdGhlIG5ldyBXSU5QViBkcml2ZXJzIGl0IGNyZWF0ZXMgYW4gdW5ib290YWJsZSBpbWFnZSAo
dGhlIGltcG9ydCBpbnRvIEVDMiBmYWlscyBhbmQgdGhlIGltYWdlIGNhbiBhbHNvIG5vdCBiZSBi
b290ZWQgb24gdGhlIG9yaWdpbmFsIGh5cGVydmlzb3IpLjxicj4NCjxicj4NCkkgaGF2ZSBmb3Vu
ZCBzb21lIHByZXZpb3VzIHBvc3RzIG9uIHRoaXMgbWFpbGluZyBsaXN0ICg8YSBocmVmPSJodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC93aW4tcHYtZGV2ZWwvMjAxNS0w
My9tc2cwMDA3Ni5odG1sIiB0YXJnZXQ9Il9CTEFOSyI+aHR0cDovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDMvbXNnMDAwNzYuaHRtbDwvYT4p
IGRpc2N1c3NpbmcgcmVtb3ZpbmcNCiB0aGUgZHJpdmVycyBhbmQgSSBhbSBhYmxlIHRvIHN1Y2Nl
c3NmdWxseSByZW1vdmUgdGhlIGRyaXZlcnMgZnJvbSBhbiBvbmxpbmUgaW1hZ2UgYnV0IHNhZGx5
IG91ciBwcm9jZXNzIHJlcXVpcmVzIHRoYXQgdGhpcyByZW1vdmFsIGJlIHBlcmZvcm1lZCBvZmZs
aW5lLjxicj4NCjxicj4NCkkgYW0ganVzdCB3b25kZXJpbmcgaWYgYW55b25lIGVsc2UgaXMgdXNp
bmcgRGlzbSBpbiB3aW5kb3dzIHRvIHJlbW92ZSB0aGUgUFYgZHJpdmVycyBmcm9tIGFuIG9mZmxp
bmUgaW1hZ2U/IE9yIGlmIGFueW9uZSBlbHNlIGhhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUg
V0lOUFYgZHJpdmVycyBmcm9tIGFuIG9mZmxpbmUgaW1hZ2UgYXQgYWxsPyBBbnkgcG9pbnRlcnMg
YW55b25lIGNhbiBnaXZlIHdvdWxkIGJlIGFwcHJlY2lhdGVkLiBUaGUgb25seQ0KIHdheSB3ZSBo
YXZlIHNvIGZhciBmb3VuZCB0byBtYWtlIHRoZSBpbWFnZSBib290IGFmdGVyIHJlbW92aW5nIHRo
ZSBkcml2ZXJzIHdpdGggRGlzbSBpcyBieSBtYW51YWwgbW9kaWZpY2F0aW9uIG9mIGEgbGFyZ2Ug
bnVtYmVyIG9mIHJlZ2lzdHJ5IGtleXMgd2hpY2ggc2VlbXMgbGlrZSBhIGZhciBmcm9tIGlkZWFs
IHNvbHV0aW9uLjxicj4NCjxicj4NClRoYW5rcyBmb3IgYW55IGhlbHAsPGJyPg0KSm9lbDwvc3Bh
bj48L3A+DQo8L2Rpdj4NCjxwIHN0eWxlPSJsaW5lLWhlaWdodDoxMC4wcHQiPjxzcGFuIHN0eWxl
PSJmb250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FtYnJpYSZxdW90OyxzZXJpZjtj
b2xvcjpncmF5Ij5aeW5zdHJhIGlzIGEgcHJpdmF0ZSBsaW1pdGVkIGNvbXBhbnkgcmVnaXN0ZXJl
ZCBpbiBFbmdsYW5kIGFuZCBXYWxlcyAocmVnaXN0ZXJlZCBudW1iZXIgMDc4NjQzNjkpLiBPdXIg
cmVnaXN0ZXJlZCBvZmZpY2UgYW5kIEhlYWRxdWFydGVycyBhcmUgYXQgVGhlIElubm92YXRpb24N
CiBDZW50cmUsIEJyb2FkIFF1YXksIEJhdGgsIEJBMSAxVUQuIFRoaXMgZW1haWwsIGl0cyBjb250
ZW50cyBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwuIElmIHlvdSBoYXZlIHJl
Y2VpdmVkIHRoaXMgbWVzc2FnZSBpbiBlcnJvciBwbGVhc2UgZGVsZXRlIGl0IGZyb20geW91ciBz
eXN0ZW0gYW5kIGFkdmlzZSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5Lg0KPC9zcGFuPjwvcD4NCjwv
ZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i
bXNvLW1hcmdpbi10b3AtYWx0OjBjbTttYXJnaW4tcmlnaHQ6MzYuMHB0O21hcmdpbi1ib3R0b206
NS4wcHQ7bWFyZ2luLWxlZnQ6MzYuMHB0Ij4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0
Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpw
PiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250
LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9v
OnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_--


--===============5228897306906229293==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5228897306906229293==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 11:16:34 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 11:16:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZboDy-0001vh-C3; Tue, 15 Sep 2015 11:16:34 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=693b91b53=ben.chalmers@citrix.com>)
	id 1ZboDx-0001vJ-Ck
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 11:16:33 +0000
Received: from [193.109.254.147] by server-11.bemta-14.messagelabs.com id
	6B/0A-15765-01EF7F55; Tue, 15 Sep 2015 11:16:32 +0000
X-Env-Sender: prvs=693b91b53=ben.chalmers@citrix.com
X-Msg-Ref: server-4.tower-27.messagelabs.com!1442315790!47605159!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.1 required=7.0 tests=HTML_50_60,HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 30511 invoked from network); 15 Sep 2015 11:16:31 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 11:16:31 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; d="scan'208,217";a="2972939"
From: Ben Chalmers <ben.chalmers@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Paul Durrant
	<Paul.Durrant@citrix.com>, Joel Noyce-Barnham
	<joel.noyce-barnham@zynstra.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] PV Drivers Offline Removal
Thread-Index: AdDvp/dEYeexgNh0gU2avNlJwgQ4/Q==
Content-Class: urn:content-classes:message
Date: Tue, 15 Sep 2015 11:16:28 +0000
Message-ID: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5228897306906229293=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============5228897306906229293==
Content-Class: urn:content-classes:message
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_"

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIGRyaXZlciB1bmluc3RhbGwsIHdoaWNoIFBhdWwgZml4
ZWQgaW4NCg0KDQoNCmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93
aW4veGVudmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5
NDNmODE3N2ENCg0KDQoNCkFsdGVybmF0aXZlbHk6DQoNCg0KDQpyZW1vdmluZyB4ZW5maWx0IGZy
b20gVXBwZXJGaWx0ZXJzIG9mIEhLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRy
b2xTZXRcQ29udHJvbFxDbGFzcyBzdWJrZXlzDQoNCns0RDM2RTk2QS1FMzI1LTExQ0UtQkZDMS0w
ODAwMkJFMTAzMTh9DQoNCns0RDM2RTk3RC1FMzI1LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9DQoN
Cg0KDQpBbmQgc2V0dGluZw0KDQoNCg0KSEtFWV9MT0NBTF9NQUNISU5FXFNZU1RFTVxDdXJyZW50
Q29udHJvbFNldFxTZXJ2aWNlc1xYZW4qXFN0YXJ0IHRvIDMNCg0KDQoNCmFyZSBmcmVxdWVudGx5
IGdvb2QgKGlmIHNvbWV3aGF0IHNldmVyZSkgd2F5cyBvZiBhdm9pZGluZyA3QiBCU09EcyB3aGVu
IHRoaW5ncyBnbyB3cm9uZy4NCg0KDQoNCkJlbiBDaGFsbWVycw0KDQoNCg0KDQoNCkZyb206IEZh
YmlvIEZhbnRvbmkNClNlbnQ6IDE1IFNlcHRlbWJlciAyMDE1IDEyOjA2DQpUbzogUGF1bCBEdXJy
YW50O0pvZWwgTm95Y2UtQmFybmhhbTt3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcN
ClN1YmplY3Q6IFJlOiBbd2luLXB2LWRldmVsXSBQViBEcml2ZXJzIE9mZmxpbmUgUmVtb3ZhbA0K
DQoNCklsIDE1LzA5LzIwMTUgMTA6NTksIFBhdWwgRHVycmFudCBoYSBzY3JpdHRvOg0KSm9lbCwN
Cg0KICBPZmZsaW5lIHJlbW92YWwgc2hvdWxkIGJlIHF1aXRlIHBvc3NpYmxlLiBUaGUgdGhpbmcg
dGhhdCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2Ugd2lsbCBy
ZWJvb3QgYXJlIHRoZSDigJh1bnBsdWfigJkgdmFsdWVzIHRoYXQgYXJlIHVzZWQgZWFybHkgb24g
aW4gYm9vdCB0byByZXF1ZXN0IHVucGx1ZyBvZiBlbXVsYXRlZCBkZXZpY2VzIGluIFFFTVUuIExv
b2sgdW5kZXIgSEtMTS9zeXN0ZW0vY3VycmVudGNvbnRyb2xzZXQvc2VydmljZXMveGVuIGFuZCB5
b3Ugc2hvdWxkIHNlZSBhIGtleSBjYWxsZWQg4oCYVW5wbHVn4oCZLiBJZiB5b3UgZGVsZXRlIHRo
YXQga2V5IHRoZW4gdGhlIG5leHQgcmVib290IHNob3VsZCB1c2UgZW11bGF0ZWQgZGV2aWNlcyBh
bmQgc28gc2hvdWxkIGJlIGZpbmUgd2l0aCBubyBQViBkcml2ZXJzLg0KDQogIENoZWVycywNCg0K
ICBQYXVsDQoNCkhpIEknbSB1bmFibGUgdG8gYm9vdCB3aW5kb3dzIDEwIGFmdGVyIG5ldyBwdiBk
cml2ZXJzIHVuaW5zdGFsbCwgSSByZW1vdmVkIHRoZW0gZnJvbSBjb250cm9sIHBhbmVsLCBJIGFs
c28gZXhlY3V0ZWQgYSBiYXQgSSBwb3N0ZWQgc29tZSBtb250aHMgYWdvIGhlcmUgZm9yIHJlbW92
ZSBvdGhlciByZWxhdGVkIHRoaW5ncywgSSB0cmllZCBhbHNvIHRvIHJlbW92ZSB0aGUgcmVnaXN0
cnkga2V5IGFib3ZlLCB3aXRoIGJvdGggaWRlIGFuZCBhaGNpIGRpc2ssIHdpdGggeGVuX3BsYXRm
b3JtX3BjaT0wIGJ1dCBpbiBhbGwgY2FzZXMgZ2F2ZSBtZSBhbHdheXMgSU5BQ0NFU1NJQkxFX0JP
T1RfREVWSUNFIGJsdWUgc2NyZWVuIDooDQpTb21lb25lIGtub3cgb3RoZXIgdGhpbmdzIEkgY2Fu
IHRyeT8NCg0KRmlyc3QgdGVzdCB3aXRoIHVuaW5zdGFsbCBvbmx5IGZyb20gY29udHJvbCBwYW5l
bCBnYW1lIG1lIGFsc28gYSBtb3JlIGltcG9ydGFudCBwcm9ibGVtIChoZXJlIHRoZXJlIGFyZSBh
bHNvIGRvbTAgYW5kIGRvbVUgZGV0YWlscyk6IGh0dHA6Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVz
L2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDkvbXNnMDAwNjMuaHRtbA0KDQpUaGFua3MgZm9yIGFu
eSByZXBseSBhbmQgc29ycnkgZm9yIG15IGJhZCBlbmdsaXNoLg0KDQoNCg0KRnJvbTogd2luLXB2
LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc8bWFpbHRvOndpbi1wdi1kZXZlbC1i
b3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBbbWFpbHRvOndpbi1wdi1kZXZlbC1ib3VuY2Vz
QGxpc3RzLnhlbnByb2plY3Qub3JnXSBPbiBCZWhhbGYgT2YgSm9lbCBOb3ljZS1CYXJuaGFtDQpT
ZW50OiAxNCBTZXB0ZW1iZXIgMjAxNSAxODoyMQ0KVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZzxtYWlsdG86d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnPg0KU3Vi
amVjdDogW3dpbi1wdi1kZXZlbF0gUFYgRHJpdmVycyBPZmZsaW5lIFJlbW92YWwNCg0KDQpIaSBB
bGwsDQoNCldlIGFyZSBjdXJyZW50bHkgdXNpbmcgdGhlIEdQTFBWIGRyaXZlcnMgYnV0IGFyZSBo
b3BpbmcgdG8gbW92ZSB0byB0aGUgbmV3IFhlbiBXSU5QViBkcml2ZXJzIGFzIHRoZXkgYXJlIGFj
dGl2ZWx5IGRldmVsb3BlZCBhbmQgaGF2ZSBzb21lIG5ldyBmZWF0dXJlcyB3aGljaCB3ZSBhcmUg
aW50ZXJlc3RlZCBpbi4gV2UgY3VycmVudGx5IGhhdmUgYSBwcm9jZXNzIHdoZXJlIFZNcyBjYW4g
YmUgbW92ZWQgZnJvbSBvdXIgWGVuIGh5cGVydmlzb3IgaW50byBFQzIuIFRoaXMgcHJvY2VzcyBy
ZWxpZXMgb24gdGhlIGZhY3QgdGhhdCB3ZSBhcmUgYWJsZSB0byByZW1vdmUgdGhlIGRyaXZlcnMg
ZnJvbSBhbiBvZmZsaW5lIGltYWdlLiBQcmV2aW91c2x5IHdlIGhhdmUgYmVlbiByZW1vdmluZyB0
aGUgZHJpdmVycyBzdWNjZXNzZnVsbHkgYnkgY29udmVydGluZyB0aGUgZGlzayBpbWFnZXMgdG8g
YSBWSEQgZmlsZSwgdXNpbmcgRGlzbSB0byByZW1vdmUgdGhlIGRyaXZlcnMgKGh0dHBzOi8vdGVj
aG5ldC5taWNyb3NvZnQuY29tL2VuLUdCL2xpYnJhcnkvZGQ3NDQzNTUlMjh2PXdzLjEwJTI5LmFz
cHgpIGFuZCB0aGVuIGltcG9ydGluZyB0aGUgcmVzdWx0aW5nIFZIRCBpbnRvIEVDMi4gVGhpcyB3
b3JrcyB3aXRoIHRoZSBHUExQViBkcml2ZXJzIGJ1dCB3aXRoIHRoZSBuZXcgV0lOUFYgZHJpdmVy
cyBpdCBjcmVhdGVzIGFuIHVuYm9vdGFibGUgaW1hZ2UgKHRoZSBpbXBvcnQgaW50byBFQzIgZmFp
bHMgYW5kIHRoZSBpbWFnZSBjYW4gYWxzbyBub3QgYmUgYm9vdGVkIG9uIHRoZSBvcmlnaW5hbCBo
eXBlcnZpc29yKS4NCg0KSSBoYXZlIGZvdW5kIHNvbWUgcHJldmlvdXMgcG9zdHMgb24gdGhpcyBt
YWlsaW5nIGxpc3QgKGh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3dp
bi1wdi1kZXZlbC8yMDE1LTAzL21zZzAwMDc2Lmh0bWwpIGRpc2N1c3NpbmcgcmVtb3ZpbmcgdGhl
IGRyaXZlcnMgYW5kIEkgYW0gYWJsZSB0byBzdWNjZXNzZnVsbHkgcmVtb3ZlIHRoZSBkcml2ZXJz
IGZyb20gYW4gb25saW5lIGltYWdlIGJ1dCBzYWRseSBvdXIgcHJvY2VzcyByZXF1aXJlcyB0aGF0
IHRoaXMgcmVtb3ZhbCBiZSBwZXJmb3JtZWQgb2ZmbGluZS4NCg0KSSBhbSBqdXN0IHdvbmRlcmlu
ZyBpZiBhbnlvbmUgZWxzZSBpcyB1c2luZyBEaXNtIGluIHdpbmRvd3MgdG8gcmVtb3ZlIHRoZSBQ
ViBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFnZT8gT3IgaWYgYW55b25lIGVsc2UgaGFzIHN1
Y2Nlc3NmdWxseSByZW1vdmVkIHRoZSBXSU5QViBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFn
ZSBhdCBhbGw/IEFueSBwb2ludGVycyBhbnlvbmUgY2FuIGdpdmUgd291bGQgYmUgYXBwcmVjaWF0
ZWQuIFRoZSBvbmx5IHdheSB3ZSBoYXZlIHNvIGZhciBmb3VuZCB0byBtYWtlIHRoZSBpbWFnZSBi
b290IGFmdGVyIHJlbW92aW5nIHRoZSBkcml2ZXJzIHdpdGggRGlzbSBpcyBieSBtYW51YWwgbW9k
aWZpY2F0aW9uIG9mIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ2lzdHJ5IGtleXMgd2hpY2ggc2VlbXMg
bGlrZSBhIGZhciBmcm9tIGlkZWFsIHNvbHV0aW9uLg0KDQpUaGFua3MgZm9yIGFueSBoZWxwLA0K
Sm9lbA0KDQpaeW5zdHJhIGlzIGEgcHJpdmF0ZSBsaW1pdGVkIGNvbXBhbnkgcmVnaXN0ZXJlZCBp
biBFbmdsYW5kIGFuZCBXYWxlcyAocmVnaXN0ZXJlZCBudW1iZXIgMDc4NjQzNjkpLiBPdXIgcmVn
aXN0ZXJlZCBvZmZpY2UgYW5kIEhlYWRxdWFydGVycyBhcmUgYXQgVGhlIElubm92YXRpb24gQ2Vu
dHJlLCBCcm9hZCBRdWF5LCBCYXRoLCBCQTEgMVVELiBUaGlzIGVtYWlsLCBpdHMgY29udGVudHMg
YW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsLiBJZiB5b3UgaGF2ZSByZWNlaXZl
ZCB0aGlzIG1lc3NhZ2UgaW4gZXJyb3IgcGxlYXNlIGRlbGV0ZSBpdCBmcm9tIHlvdXIgc3lzdGVt
IGFuZCBhZHZpc2UgdGhlIHNlbmRlciBpbW1lZGlhdGVseS4NCg0KDQoNCg==

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_
Content-Type: text/html; charset="utf-8"
Content-ID: <87FDF6F131F61F468CC46055F4DCE47B@citrix.com>
Content-Transfer-Encoding: base64

PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4
bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo
dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp
dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l
dGEgbmFtZT0iR2VuZXJhdG9yIiBjb250ZW50PSJNaWNyb3NvZnQgV29yZCAxNSAoZmlsdGVyZWQg
bWVkaXVtKSI+DQo8c3R5bGU+PCEtLQ0KLyogRm9udCBEZWZpbml0aW9ucyAqLw0KQGZvbnQtZmFj
ZQ0KCXtmb250LWZhbWlseToiQ2FtYnJpYSBNYXRoIjsNCglwYW5vc2UtMToyIDQgNSAzIDUgNCA2
IDMgMiA0O30NCkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6Q2FsaWJyaTsNCglwYW5vc2UtMToy
IDE1IDUgMiAyIDIgNCAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkNhbWJyaWE7
DQoJcGFub3NlLTE6MiA0IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFt
aWx5OkNvbnNvbGFzOw0KCXBhbm9zZS0xOjIgMTEgNiA5IDIgMiA0IDMgMiA0O30NCkBmb250LWZh
Y2UNCgl7Zm9udC1mYW1pbHk6VGFob21hOw0KCXBhbm9zZS0xOjIgMTEgNiA0IDMgNSA0IDQgMiA0
O30NCi8qIFN0eWxlIERlZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBk
aXYuTXNvTm9ybWFsDQoJe21hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZv
bnQtc2l6ZToxMS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7fQ0KYTps
aW5rLCBzcGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6
Ymx1ZTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29I
eXBlcmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Izk1NEY3
MjsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnANCgl7bXNvLXN0eWxlLXByaW9yaXR5
Ojk5Ow0KCW1hcmdpbjowY207DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCWZvbnQtc2l6ZTox
MS4wcHQ7DQoJZm9udC1mYW1pbHk6IkNhbGlicmkiLHNhbnMtc2VyaWY7fQ0Kc3Bhbi5zcGVsbGUN
Cgl7bXNvLXN0eWxlLW5hbWU6c3BlbGxlO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10
eXBlOmV4cG9ydC1vbmx5O30NCkBwYWdlIFdvcmRTZWN0aW9uMQ0KCXtzaXplOjYxMi4wcHQgNzky
LjBwdDsNCgltYXJnaW46NzIuMHB0IDcyLjBwdCA3Mi4wcHQgNzIuMHB0O30NCmRpdi5Xb3JkU2Vj
dGlvbjENCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQ0KLS0+PC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5
IGxhbmc9IkVOLUdCIiBsaW5rPSJibHVlIiB2bGluaz0iIzk1NEY3MiI+DQo8ZGl2IGNsYXNzPSJX
b3JkU2VjdGlvbjEiPg0KPHA+VGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIGRyaXZlciB1bmluc3Rh
bGwsIHdoaWNoIFBhdWwgZml4ZWQgaW48L3A+DQo8cD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw
PjxhIGhyZWY9Imh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93aW4v
eGVudmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5NDNm
ODE3N2EiPmh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXB2ZHJpdmVycy93aW4veGVu
dmJkLmdpdDthPWNvbW1pdDtoPTU5Nzk3ZDE2MDUxN2U0N2EyNDllNjdmMDMwYmI1ZDI5NDNmODE3
N2E8L2E+PC9wPg0KPHA+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cD5BbHRlcm5hdGl2ZWx5Ojwv
cD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+cmVtb3ZpbmcgeGVuZmlsdCBmcm9tIFVw
cGVyRmlsdGVycyBvZiBIS0VZX0xPQ0FMX01BQ0hJTkVcU1lTVEVNXEN1cnJlbnRDb250cm9sU2V0
XENvbnRyb2xcQ2xhc3Mgc3Via2V5cw0KPC9wPg0KPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5
LjBwdDtmb250LWZhbWlseTpDb25zb2xhcztjb2xvcjojMzMzMzMzO2JhY2tncm91bmQ6d2hpdGUi
Pns0RDM2RTk2QS1FMzI1LTExQ0UtQkZDMS0wODAwMkJFMTAzMTh9PG86cD48L286cD48L3NwYW4+
PC9wPg0KPHA+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5LjBwdDtmb250LWZhbWlseTpDb25zb2xh
cztjb2xvcjojMzMzMzMzO2JhY2tncm91bmQ6d2hpdGUiPns0RDM2RTk3RC1FMzI1LTExQ0UtQkZD
MS0wODAwMkJFMTAzMTh9PG86cD48L286cD48L3NwYW4+PC9wPg0KPHA+PG86cD4mbmJzcDs8L286
cD48L3A+DQo8cD5BbmQgc2V0dGluZyA8L3A+DQo8cD48bzpwPiZuYnNwOzwvbzpwPjwvcD4NCjxw
PkhLRVlfTE9DQUxfTUFDSElORVxTWVNURU1cQ3VycmVudENvbnRyb2xTZXRcU2VydmljZXNcWGVu
KlxTdGFydCB0byAzIDwvcD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+YXJlIGZyZXF1
ZW50bHkgZ29vZCAoaWYgc29tZXdoYXQgc2V2ZXJlKSB3YXlzIG9mIGF2b2lkaW5nIDdCIEJTT0Rz
IHdoZW4gdGhpbmdzIGdvIHdyb25nLjwvcD4NCjxwPjxvOnA+Jm5ic3A7PC9vOnA+PC9wPg0KPHA+
QmVuIENoYWxtZXJzPC9wPg0KPHA+PG86cD4mbmJzcDs8L286cD48L3A+DQo8cD48bzpwPiZuYnNw
OzwvbzpwPjwvcD4NCjxkaXYgc3R5bGU9Im1zby1lbGVtZW50OnBhcmEtYm9yZGVyLWRpdjtib3Jk
ZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAwY20g
MGNtIDBjbSI+DQo8cCBzdHlsZT0iYm9yZGVyOm5vbmU7cGFkZGluZzowY20iPjxicj4NCjxiPkZy
b206IDwvYj5GYWJpbyBGYW50b25pPGJyPg0KPGI+U2VudDogPC9iPjE1IFNlcHRlbWJlciAyMDE1
IDEyOjA2PGJyPg0KPGI+VG86IDwvYj5QYXVsIER1cnJhbnQ7Sm9lbCBOb3ljZS1CYXJuaGFtO3dp
bi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzxicj4NCjxiPlN1YmplY3Q6IDwvYj5SZTog
W3dpbi1wdi1kZXZlbF0gUFYgRHJpdmVycyBPZmZsaW5lIFJlbW92YWw8L3A+DQo8L2Rpdj4NCjxw
IGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBO
ZXcgUm9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNs
YXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcg
Um9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNz
PSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0O2ZvbnQtZmFtaWx5OiZx
dW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+SWwgMTUvMDkvMjAxNSAxMDo1OSwgUGF1
bCBEdXJyYW50IGhhIHNjcml0dG86PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0
O2ZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+PG86cD48L286
cD48L3NwYW4+PC9wPg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4wcHQ7bWFyZ2lu
LWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9
ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Sm9lbCw8L3NwYW4+PHNwYW4gc3R5bGU9
ImZvbnQtZmFtaWx5OiZxdW90O1RpbWVzIE5ldyBSb21hbiZxdW90OyxzZXJpZiI+PG86cD48L286
cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6
ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29O
b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9yOiMxRjQ5N0QiPiZuYnNw
OyBPZmZsaW5lIHJlbW92YWwgc2hvdWxkIGJlIHF1aXRlIHBvc3NpYmxlLiBUaGUgdGhpbmcgdGhh
dCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIHRvIG1ha2Ugc3VyZSB0aGUgaW1hZ2Ugd2lsbCByZWJv
b3QgYXJlIHRoZSDigJh1bnBsdWfigJkgdmFsdWVzIHRoYXQgYXJlIHVzZWQgZWFybHkgb24gaW4g
Ym9vdCB0byByZXF1ZXN0IHVucGx1ZyBvZg0KIGVtdWxhdGVkIGRldmljZXMgaW4gUUVNVS4gTG9v
ayB1bmRlciBIS0xNL3N5c3RlbS88c3BhbiBjbGFzcz0ic3BlbGxlIj5jdXJyZW50Y29udHJvbHNl
dDwvc3Bhbj4vc2VydmljZXMveGVuIGFuZCB5b3Ugc2hvdWxkIHNlZSBhIGtleSBjYWxsZWQg4oCY
VW5wbHVn4oCZLiBJZiB5b3UgZGVsZXRlIHRoYXQga2V5IHRoZW4gdGhlIG5leHQgcmVib290IHNo
b3VsZCB1c2UgZW11bGF0ZWQgZGV2aWNlcyBhbmQgc28gc2hvdWxkIGJlIGZpbmUgd2l0aCBubyBQ
ViBkcml2ZXJzLjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjEwLjBwdDtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PC9wPg0KPHAgY2xh
c3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3
RCI+Jm5ic3A7IENoZWVycyw8L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4g
c3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwvcD4N
CjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTAuMHB0O2NvbG9y
OiMxRjQ5N0QiPiZuYnNwOyBQYXVsPC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9ibG9ja3F1b3RlPg0K
PHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPjxicj4N
CkhpIEknbSB1bmFibGUgdG8gYm9vdCB3aW5kb3dzIDEwIGFmdGVyIG5ldyBwdiBkcml2ZXJzIHVu
aW5zdGFsbCwgSSByZW1vdmVkIHRoZW0gZnJvbSBjb250cm9sIHBhbmVsLCBJIGFsc28gZXhlY3V0
ZWQgYSBiYXQgSSBwb3N0ZWQgc29tZSBtb250aHMgYWdvIGhlcmUgZm9yIHJlbW92ZSBvdGhlciBy
ZWxhdGVkIHRoaW5ncywgSSB0cmllZCBhbHNvIHRvIHJlbW92ZSB0aGUgcmVnaXN0cnkga2V5IGFi
b3ZlLCB3aXRoIGJvdGggaWRlIGFuZCBhaGNpIGRpc2ssDQogd2l0aCB4ZW5fcGxhdGZvcm1fcGNp
PTAgYnV0IGluIGFsbCBjYXNlcyBnYXZlIG1lIGFsd2F5cyBJTkFDQ0VTU0lCTEVfQk9PVF9ERVZJ
Q0UgYmx1ZSBzY3JlZW4gOig8YnI+DQpTb21lb25lIGtub3cgb3RoZXIgdGhpbmdzIEkgY2FuIHRy
eT88YnI+DQo8YnI+DQpGaXJzdCB0ZXN0IHdpdGggdW5pbnN0YWxsIG9ubHkgZnJvbSBjb250cm9s
IHBhbmVsIGdhbWUgbWUgYWxzbyBhIG1vcmUgaW1wb3J0YW50IHByb2JsZW0gKGhlcmUgdGhlcmUg
YXJlIGFsc28gZG9tMCBhbmQgZG9tVSBkZXRhaWxzKToNCjxhIGhyZWY9Imh0dHA6Ly9saXN0cy54
ZW4ub3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDkvbXNnMDAwNjMuaHRtbCIg
dGFyZ2V0PSJfQkxBTksiPg0KaHR0cDovL2xpc3RzLnhlbi5vcmcvYXJjaGl2ZXMvaHRtbC93aW4t
cHYtZGV2ZWwvMjAxNS0wOS9tc2cwMDA2My5odG1sPC9hPjxicj4NCjxicj4NClRoYW5rcyBmb3Ig
YW55IHJlcGx5IGFuZCBzb3JyeSBmb3IgbXkgYmFkIGVuZ2xpc2guPGJyPg0KPGJyPg0KPGJyPg0K
PG86cD48L286cD48L3NwYW4+PC9wPg0KPGJsb2NrcXVvdGUgc3R5bGU9Im1hcmdpbi10b3A6NS4w
cHQ7bWFyZ2luLWJvdHRvbTo1LjBwdCI+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw
YW4gc3R5bGU9ImZvbnQtc2l6ZToxMC4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjwv
cD4NCjxkaXYgc3R5bGU9ImJvcmRlcjpub25lO2JvcmRlci1sZWZ0OnNvbGlkIGJsdWUgMS41cHQ7
cGFkZGluZzowY20gMGNtIDBjbSA0LjBwdCI+DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5v
bmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3BhZGRpbmc6My4wcHQgMGNtIDBjbSAw
Y20iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PGI+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJm
b250LXNpemU6MTAuMHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OyxzYW5zLXNlcmlm
Ij5Gcm9tOjwvc3Bhbj48L2I+PHNwYW4gbGFuZz0iRU4tVVMiIHN0eWxlPSJmb250LXNpemU6MTAu
MHB0O2ZvbnQtZmFtaWx5OiZxdW90O1RhaG9tYSZxdW90OyxzYW5zLXNlcmlmIj4NCjxhIGhyZWY9
Im1haWx0bzp3aW4tcHYtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyI+d2luLXB2
LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc8L2E+IFs8YSBocmVmPSJtYWlsdG86
d2luLXB2LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmciPm1haWx0bzp3aW4tcHYt
ZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZzwvYT5dDQo8Yj5PbiBCZWhhbGYgT2Yg
PC9iPkpvZWwgTm95Y2UtQmFybmhhbTxicj4NCjxiPlNlbnQ6PC9iPiAxNCBTZXB0ZW1iZXIgMjAx
NSAxODoyMTxicj4NCjxiPlRvOjwvYj4gPGEgaHJlZj0ibWFpbHRvOndpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZyI+d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnPC9hPjxi
cj4NCjxiPlN1YmplY3Q6PC9iPiBbd2luLXB2LWRldmVsXSBQViBEcml2ZXJzIE9mZmxpbmUgUmVt
b3ZhbDwvc3Bhbj48L3A+DQo8L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNw
YW4gc3R5bGU9ImZvbnQtc2l6ZToxMi4wcHQiPiZuYnNwOzwvc3Bhbj48L3A+DQo8ZGl2IGlkPSJk
aXZ0YWdkZWZhdWx0d3JhcHBlciI+DQo8cCBzdHlsZT0iYmFja2dyb3VuZDp3aGl0ZSI+PHNwYW4g
c3R5bGU9ImNvbG9yOmJsYWNrIj5IaSBBbGwsPGJyPg0KPGJyPg0KV2UgYXJlIGN1cnJlbnRseSB1
c2luZyB0aGUgR1BMUFYgZHJpdmVycyBidXQgYXJlIGhvcGluZyB0byBtb3ZlIHRvIHRoZSBuZXcg
WGVuIFdJTlBWIGRyaXZlcnMgYXMgdGhleSBhcmUgYWN0aXZlbHkgZGV2ZWxvcGVkIGFuZCBoYXZl
IHNvbWUgbmV3IGZlYXR1cmVzIHdoaWNoIHdlIGFyZSBpbnRlcmVzdGVkIGluLiBXZSBjdXJyZW50
bHkgaGF2ZSBhIHByb2Nlc3Mgd2hlcmUgVk1zIGNhbiBiZSBtb3ZlZCBmcm9tIG91ciBYZW4gaHlw
ZXJ2aXNvciBpbnRvDQogRUMyLiBUaGlzIHByb2Nlc3MgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQg
d2UgYXJlIGFibGUgdG8gcmVtb3ZlIHRoZSBkcml2ZXJzIGZyb20gYW4gb2ZmbGluZSBpbWFnZS4g
UHJldmlvdXNseSB3ZSBoYXZlIGJlZW4gcmVtb3ZpbmcgdGhlIGRyaXZlcnMgc3VjY2Vzc2Z1bGx5
IGJ5IGNvbnZlcnRpbmcgdGhlIGRpc2sgaW1hZ2VzIHRvIGEgVkhEIGZpbGUsIHVzaW5nIERpc20g
dG8gcmVtb3ZlIHRoZSBkcml2ZXJzICg8YSBocmVmPSJodHRwczovL3RlY2huZXQubWljcm9zb2Z0
LmNvbS9lbi1HQi9saWJyYXJ5L2RkNzQ0MzU1JTI4dj13cy4xMCUyOS5hc3B4IiB0YXJnZXQ9Il9C
TEFOSyI+aHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tR0IvbGlicmFyeS9kZDc0NDM1
NSUyOHY9d3MuMTAlMjkuYXNweDwvYT4pDQogYW5kIHRoZW4gaW1wb3J0aW5nIHRoZSByZXN1bHRp
bmcgVkhEIGludG8gRUMyLiBUaGlzIHdvcmtzIHdpdGggdGhlIEdQTFBWIGRyaXZlcnMgYnV0IHdp
dGggdGhlIG5ldyBXSU5QViBkcml2ZXJzIGl0IGNyZWF0ZXMgYW4gdW5ib290YWJsZSBpbWFnZSAo
dGhlIGltcG9ydCBpbnRvIEVDMiBmYWlscyBhbmQgdGhlIGltYWdlIGNhbiBhbHNvIG5vdCBiZSBi
b290ZWQgb24gdGhlIG9yaWdpbmFsIGh5cGVydmlzb3IpLjxicj4NCjxicj4NCkkgaGF2ZSBmb3Vu
ZCBzb21lIHByZXZpb3VzIHBvc3RzIG9uIHRoaXMgbWFpbGluZyBsaXN0ICg8YSBocmVmPSJodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC93aW4tcHYtZGV2ZWwvMjAxNS0w
My9tc2cwMDA3Ni5odG1sIiB0YXJnZXQ9Il9CTEFOSyI+aHR0cDovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL2FyY2hpdmVzL2h0bWwvd2luLXB2LWRldmVsLzIwMTUtMDMvbXNnMDAwNzYuaHRtbDwvYT4p
IGRpc2N1c3NpbmcgcmVtb3ZpbmcNCiB0aGUgZHJpdmVycyBhbmQgSSBhbSBhYmxlIHRvIHN1Y2Nl
c3NmdWxseSByZW1vdmUgdGhlIGRyaXZlcnMgZnJvbSBhbiBvbmxpbmUgaW1hZ2UgYnV0IHNhZGx5
IG91ciBwcm9jZXNzIHJlcXVpcmVzIHRoYXQgdGhpcyByZW1vdmFsIGJlIHBlcmZvcm1lZCBvZmZs
aW5lLjxicj4NCjxicj4NCkkgYW0ganVzdCB3b25kZXJpbmcgaWYgYW55b25lIGVsc2UgaXMgdXNp
bmcgRGlzbSBpbiB3aW5kb3dzIHRvIHJlbW92ZSB0aGUgUFYgZHJpdmVycyBmcm9tIGFuIG9mZmxp
bmUgaW1hZ2U/IE9yIGlmIGFueW9uZSBlbHNlIGhhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCB0aGUg
V0lOUFYgZHJpdmVycyBmcm9tIGFuIG9mZmxpbmUgaW1hZ2UgYXQgYWxsPyBBbnkgcG9pbnRlcnMg
YW55b25lIGNhbiBnaXZlIHdvdWxkIGJlIGFwcHJlY2lhdGVkLiBUaGUgb25seQ0KIHdheSB3ZSBo
YXZlIHNvIGZhciBmb3VuZCB0byBtYWtlIHRoZSBpbWFnZSBib290IGFmdGVyIHJlbW92aW5nIHRo
ZSBkcml2ZXJzIHdpdGggRGlzbSBpcyBieSBtYW51YWwgbW9kaWZpY2F0aW9uIG9mIGEgbGFyZ2Ug
bnVtYmVyIG9mIHJlZ2lzdHJ5IGtleXMgd2hpY2ggc2VlbXMgbGlrZSBhIGZhciBmcm9tIGlkZWFs
IHNvbHV0aW9uLjxicj4NCjxicj4NClRoYW5rcyBmb3IgYW55IGhlbHAsPGJyPg0KSm9lbDwvc3Bh
bj48L3A+DQo8L2Rpdj4NCjxwIHN0eWxlPSJsaW5lLWhlaWdodDoxMC4wcHQiPjxzcGFuIHN0eWxl
PSJmb250LXNpemU6OC4wcHQ7Zm9udC1mYW1pbHk6JnF1b3Q7Q2FtYnJpYSZxdW90OyxzZXJpZjtj
b2xvcjpncmF5Ij5aeW5zdHJhIGlzIGEgcHJpdmF0ZSBsaW1pdGVkIGNvbXBhbnkgcmVnaXN0ZXJl
ZCBpbiBFbmdsYW5kIGFuZCBXYWxlcyAocmVnaXN0ZXJlZCBudW1iZXIgMDc4NjQzNjkpLiBPdXIg
cmVnaXN0ZXJlZCBvZmZpY2UgYW5kIEhlYWRxdWFydGVycyBhcmUgYXQgVGhlIElubm92YXRpb24N
CiBDZW50cmUsIEJyb2FkIFF1YXksIEJhdGgsIEJBMSAxVUQuIFRoaXMgZW1haWwsIGl0cyBjb250
ZW50cyBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwuIElmIHlvdSBoYXZlIHJl
Y2VpdmVkIHRoaXMgbWVzc2FnZSBpbiBlcnJvciBwbGVhc2UgZGVsZXRlIGl0IGZyb20geW91ciBz
eXN0ZW0gYW5kIGFkdmlzZSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5Lg0KPC9zcGFuPjwvcD4NCjwv
ZGl2Pg0KPC9kaXY+DQo8L2Jsb2NrcXVvdGU+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i
bXNvLW1hcmdpbi10b3AtYWx0OjBjbTttYXJnaW4tcmlnaHQ6MzYuMHB0O21hcmdpbi1ib3R0b206
NS4wcHQ7bWFyZ2luLWxlZnQ6MzYuMHB0Ij4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuMHB0
Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48bzpw
PiZuYnNwOzwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250
LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDssc2VyaWYiPjxvOnA+Jm5ic3A7PC9v
OnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--_000_1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9AMSPEX01CL03cit_--


--===============5228897306906229293==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5228897306906229293==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:13:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:13:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbp6w-0007kt-RV; Tue, 15 Sep 2015 12:13:22 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Zbp6v-0007ko-Lp
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:13:22 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	68/97-02324-06B08F55; Tue, 15 Sep 2015 12:13:20 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1442319199!35228736!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8965 invoked from network); 15 Sep 2015 12:13:20 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-12.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 15 Sep 2015 12:13:20 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 88458224CF
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 08:13:19 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Tue, 15 Sep 2015 08:13:19 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=qrIvR474J98oxq/4heXVBnlpsUA=; b=IcDR+t
	Ebfq65qbxA7vP/OJSGoZmvL871uhVtGYuX8Dcay6WEIGIWG7eDpPQ8ieZJjYm798
	q0TFAw57LK/bcVrK5c9QjzMQgW3NxP6blmGg7cLpRQYkiKNk8SMfNQUSfb7QIQ9c
	u0Yf+XlRhAtibzWvhc35btAWSSaBsY72sUHzc=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=qrIvR474J98oxq/4heXVBnlpsUA=; b=SI22w
	xmhfC4GFvPEzMPNL2xslYYuf6gut5xgulYTl5RPhf0kuKq7++ne/kPjhfoNGOnyE
	o9qWyaKUHpHtY0IKhmju3W3bSnVMB0Pw2nUpElDmMS8/uyQuXv0T7E63fe+wbf6y
	vBvrVIXO1PcOLhx+LjZVmCR+qfbRY3gafjNa1M=
X-Sasl-enc: jcYLZNFiZTpaEvd2tF6kOWn6wXMles9cVJudIlgMgyyu 1442319199
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id EF73FC00024
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 08:13:18 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55F80B5C.9040804@invisiblethingslab.com>
Date: Tue, 15 Sep 2015 14:13:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 4633
Subject: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SSd2ZSBub3RpY2VkIHRoYXQgd2hlbiB0aGUgREhDUCBDbGllbnQgc2VydmljZSBpcyBkaXNhYmxl
ZCBpbiB0aGUgT1MKKHRlc3RlZCBvbiBXaW43IHg2NCkgWEVOVklGIGNhdXNlcyBhIGZldyBhc3Nl
cnRpb24gZmFpbHVyZXMgb24gYm9vdC4gSQp0aGluayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhlIHNh
bWUgcGxhY2UgYW5kIHNlZW0gdG8gbm90IGNhdXNlIGhhcm0gaWYKY29udGludWVkLiBSZWxldmFu
dCBjYWxsIHN0YWNrOgoKWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2U2VydmVyRFVJRApYRU5WSUZ8X19BbGxvY2F0ZU5vblBhZ2VkUG9vbFdpdGhUYWc6IEFT
U0VSVElPTiBGQUlMRUQ6IExlbmd0aCAhPSAwCkFzc2VydGlvbgpjOlxxdWJlcy1idWlsZGVyXGNo
cm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJzXHhlbnZpZlxz
cmNceGVudmlmXHV0aWwuaCgxNjApOgpMZW5ndGggIT0gMAp4ZW52aWYhX19BbGxvY2F0ZU5vblBh
Z2VkUG9vbFdpdGhUYWcrMHg0MjoKZmZmZmY4ODBgMDQxMGMxNDIgY2QyYyAgICAgICAgICAgIGlu
dCAgICAgMkNoCjE6IGtkPiBrCkNoaWxkLVNQICAgICAgICAgIFJldEFkZHIgICAgICAgICAgIENh
bGwgU2l0ZQpmZmZmZjg4MGAwMmZmYjBmMCBmZmZmZjg4MGAwNDEwYzUzOAp4ZW52aWYhX19BbGxv
Y2F0ZU5vblBhZ2VkUG9vbFdpdGhUYWcrMHg0MgpbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2lu
N3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZp
Zlx1dGlsLmgKQCAxNjBdCmZmZmZmODgwYDAyZmZiMTUwIGZmZmZmODgwYDA0MTBiNzgwIHhlbnZp
ZiFfX1JlZ2lzdHJ5QWxsb2NhdGUrMHgxOApbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2
NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxy
ZWdpc3RyeS5jCkAgNDhdCmZmZmZmODgwYDAyZmZiMTgwIGZmZmZmODgwYDA0MTBjY2IzCnhlbnZp
ZiFSZWdpc3RyeVF1ZXJ5QmluYXJ5VmFsdWUrMHgxMjAKW2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290
LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZlcnNceGVudmlmXHNyY1x4
ZW52aWZccmVnaXN0cnkuYwpAIDk0Ml0KZmZmZmY4ODBgMDJmZmIyMTAgZmZmZmY4ODBgMDQxMGFl
M2MKeGVudmlmIVNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlKzB4MTIzCltjOlxxdWJlcy1idWls
ZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJzXHhl
bnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMKQCAxMTZdCmZmZmZmODgwYDAyZmZiMjcwIGZmZmZm
ODgwYDA0MTBjYTIzIHhlbnZpZiFSZWdpc3RyeUVudW1lcmF0ZVZhbHVlcysweDI2YwpbYzpccXVi
ZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxyZWdpc3RyeS5jCkAgNTIyXQpmZmZmZjg4MGAwMmZmYjMy
MCBmZmZmZjg4MGAwNDEwYzYyMSB4ZW52aWYhU2V0dGluZ3NDb3B5SW50ZXJmYWNlKzB4M2IzCltj
OlxxdWJlcy1idWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3Mt
cHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMKQCAyMzldCmZmZmZmODgwYDAy
ZmZiNDAwIGZmZmZmODgwYDA0MTBkM2MxIHhlbnZpZiFTZXR0aW5nc0NvcHkrMHhjMQpbYzpccXVi
ZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxzZXR0aW5ncy5jCkAgNTMwXQpmZmZmZjg4MGAwMmZmYjQ0
MCBmZmZmZjg4MGAwNDBmYzExNCB4ZW52aWYhU2V0dGluZ3NSZXN0b3JlKzB4ODEKW2M6XHF1YmVz
LWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZl
cnNceGVudmlmXHNyY1x4ZW52aWZcc2V0dGluZ3MuYwpAIDYwMF0KZmZmZmY4ODBgMDJmZmI0ODAg
ZmZmZmY4ODBgMDQwZjkyNzQgeGVudmlmIVBkb1N0YXJ0RGV2aWNlKzB4MmY0CltjOlxxdWJlcy1i
dWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJz
XHhlbnZpZlxzcmNceGVudmlmXHBkby5jCkAgMTI2MF0KZmZmZmY4ODBgMDJmZmI1MzAgZmZmZmY4
ODBgMDQwZjkxNTggeGVudmlmIVBkb0Rpc3BhdGNoUG5wKzB4YjQKW2M6XHF1YmVzLWJ1aWxkZXJc
Y2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZlcnNceGVudmlm
XHNyY1x4ZW52aWZccGRvLmMKQCAyMTMzXQpmZmZmZjg4MGAwMmZmYjU5MCBmZmZmZjg4MGAwNDBl
M2ViMSB4ZW52aWYhUGRvRGlzcGF0Y2grMHg0OApbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2lu
N3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZp
ZlxwZG8uYwpAIDI1NDNdCmZmZmZmODgwYDAyZmZiNWQwIGZmZmZmODgwYDAxNGI2MWNjIHhlbnZp
ZiFEaXNwYXRjaCsweDE2MQpbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1z
cmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxkcml2ZXIuYwpA
IDI0Nl0KClRoZXNlIGFyZSBvdGhlciBzZXR0aW5ncyB0aGF0IGZhaWw6CgpYRU5WSUZ8U2V0dGlu
Z3NDb3B5SW50ZXJmYWNlVmFsdWU6IFRjcGlwNjpEaGNwdjZJYW5hSWFpZHMKWEVOVklGfFNldHRp
bmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhjcHY2SWF0YUlhaWRzClhFTlZJRnxTZXR0
aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlQxClhFTlZJRnxTZXR0aW5nc0Nv
cHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlQyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhbmFBZGRyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhdGFBZGRyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhbmFMZWFzZXMKWEVOVklGfFNldHRpbmdzQ29weUlu
dGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhjcHY2SWF0YUxlYXNlcwoKCi0tIApSYWZhxYIgV29qZHnF
gmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9z
Lm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndp
bi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2lu
LXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:13:24 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:13:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbp6w-0007kt-RV; Tue, 15 Sep 2015 12:13:22 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1Zbp6v-0007ko-Lp
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:13:22 +0000
Received: from [85.158.139.211] by server-13.bemta-5.messagelabs.com id
	68/97-02324-06B08F55; Tue, 15 Sep 2015 12:13:20 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1442319199!35228736!1
X-Originating-IP: [66.111.4.27]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjcgPT4gODQ2Mw==\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 8965 invoked from network); 15 Sep 2015 12:13:20 -0000
Received: from out3-smtp.messagingengine.com (HELO
	out3-smtp.messagingengine.com) (66.111.4.27)
	by server-12.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 15 Sep 2015 12:13:20 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 88458224CF
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 08:13:19 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Tue, 15 Sep 2015 08:13:19 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=qrIvR474J98oxq/4heXVBnlpsUA=; b=IcDR+t
	Ebfq65qbxA7vP/OJSGoZmvL871uhVtGYuX8Dcay6WEIGIWG7eDpPQ8ieZJjYm798
	q0TFAw57LK/bcVrK5c9QjzMQgW3NxP6blmGg7cLpRQYkiKNk8SMfNQUSfb7QIQ9c
	u0Yf+XlRhAtibzWvhc35btAWSSaBsY72sUHzc=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=qrIvR474J98oxq/4heXVBnlpsUA=; b=SI22w
	xmhfC4GFvPEzMPNL2xslYYuf6gut5xgulYTl5RPhf0kuKq7++ne/kPjhfoNGOnyE
	o9qWyaKUHpHtY0IKhmju3W3bSnVMB0Pw2nUpElDmMS8/uyQuXv0T7E63fe+wbf6y
	vBvrVIXO1PcOLhx+LjZVmCR+qfbRY3gafjNa1M=
X-Sasl-enc: jcYLZNFiZTpaEvd2tF6kOWn6wXMles9cVJudIlgMgyyu 1442319199
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id EF73FC00024
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 08:13:18 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55F80B5C.9040804@invisiblethingslab.com>
Date: Tue, 15 Sep 2015 14:13:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 4633
Subject: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SSd2ZSBub3RpY2VkIHRoYXQgd2hlbiB0aGUgREhDUCBDbGllbnQgc2VydmljZSBpcyBkaXNhYmxl
ZCBpbiB0aGUgT1MKKHRlc3RlZCBvbiBXaW43IHg2NCkgWEVOVklGIGNhdXNlcyBhIGZldyBhc3Nl
cnRpb24gZmFpbHVyZXMgb24gYm9vdC4gSQp0aGluayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhlIHNh
bWUgcGxhY2UgYW5kIHNlZW0gdG8gbm90IGNhdXNlIGhhcm0gaWYKY29udGludWVkLiBSZWxldmFu
dCBjYWxsIHN0YWNrOgoKWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2U2VydmVyRFVJRApYRU5WSUZ8X19BbGxvY2F0ZU5vblBhZ2VkUG9vbFdpdGhUYWc6IEFT
U0VSVElPTiBGQUlMRUQ6IExlbmd0aCAhPSAwCkFzc2VydGlvbgpjOlxxdWJlcy1idWlsZGVyXGNo
cm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJzXHhlbnZpZlxz
cmNceGVudmlmXHV0aWwuaCgxNjApOgpMZW5ndGggIT0gMAp4ZW52aWYhX19BbGxvY2F0ZU5vblBh
Z2VkUG9vbFdpdGhUYWcrMHg0MjoKZmZmZmY4ODBgMDQxMGMxNDIgY2QyYyAgICAgICAgICAgIGlu
dCAgICAgMkNoCjE6IGtkPiBrCkNoaWxkLVNQICAgICAgICAgIFJldEFkZHIgICAgICAgICAgIENh
bGwgU2l0ZQpmZmZmZjg4MGAwMmZmYjBmMCBmZmZmZjg4MGAwNDEwYzUzOAp4ZW52aWYhX19BbGxv
Y2F0ZU5vblBhZ2VkUG9vbFdpdGhUYWcrMHg0MgpbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2lu
N3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZp
Zlx1dGlsLmgKQCAxNjBdCmZmZmZmODgwYDAyZmZiMTUwIGZmZmZmODgwYDA0MTBiNzgwIHhlbnZp
ZiFfX1JlZ2lzdHJ5QWxsb2NhdGUrMHgxOApbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2
NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxy
ZWdpc3RyeS5jCkAgNDhdCmZmZmZmODgwYDAyZmZiMTgwIGZmZmZmODgwYDA0MTBjY2IzCnhlbnZp
ZiFSZWdpc3RyeVF1ZXJ5QmluYXJ5VmFsdWUrMHgxMjAKW2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290
LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZlcnNceGVudmlmXHNyY1x4
ZW52aWZccmVnaXN0cnkuYwpAIDk0Ml0KZmZmZmY4ODBgMDJmZmIyMTAgZmZmZmY4ODBgMDQxMGFl
M2MKeGVudmlmIVNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlKzB4MTIzCltjOlxxdWJlcy1idWls
ZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJzXHhl
bnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMKQCAxMTZdCmZmZmZmODgwYDAyZmZiMjcwIGZmZmZm
ODgwYDA0MTBjYTIzIHhlbnZpZiFSZWdpc3RyeUVudW1lcmF0ZVZhbHVlcysweDI2YwpbYzpccXVi
ZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxyZWdpc3RyeS5jCkAgNTIyXQpmZmZmZjg4MGAwMmZmYjMy
MCBmZmZmZjg4MGAwNDEwYzYyMSB4ZW52aWYhU2V0dGluZ3NDb3B5SW50ZXJmYWNlKzB4M2IzCltj
OlxxdWJlcy1idWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3Mt
cHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMKQCAyMzldCmZmZmZmODgwYDAy
ZmZiNDAwIGZmZmZmODgwYDA0MTBkM2MxIHhlbnZpZiFTZXR0aW5nc0NvcHkrMHhjMQpbYzpccXVi
ZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxzZXR0aW5ncy5jCkAgNTMwXQpmZmZmZjg4MGAwMmZmYjQ0
MCBmZmZmZjg4MGAwNDBmYzExNCB4ZW52aWYhU2V0dGluZ3NSZXN0b3JlKzB4ODEKW2M6XHF1YmVz
LWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZl
cnNceGVudmlmXHNyY1x4ZW52aWZcc2V0dGluZ3MuYwpAIDYwMF0KZmZmZmY4ODBgMDJmZmI0ODAg
ZmZmZmY4ODBgMDQwZjkyNzQgeGVudmlmIVBkb1N0YXJ0RGV2aWNlKzB4MmY0CltjOlxxdWJlcy1i
dWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtcHZkcml2ZXJz
XHhlbnZpZlxzcmNceGVudmlmXHBkby5jCkAgMTI2MF0KZmZmZmY4ODBgMDJmZmI1MzAgZmZmZmY4
ODBgMDQwZjkxNTggeGVudmlmIVBkb0Rpc3BhdGNoUG5wKzB4YjQKW2M6XHF1YmVzLWJ1aWxkZXJc
Y2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93cy1wdmRyaXZlcnNceGVudmlm
XHNyY1x4ZW52aWZccGRvLmMKQCAyMTMzXQpmZmZmZjg4MGAwMmZmYjU5MCBmZmZmZjg4MGAwNDBl
M2ViMSB4ZW52aWYhUGRvRGlzcGF0Y2grMHg0OApbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2lu
N3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZp
ZlxwZG8uYwpAIDI1NDNdCmZmZmZmODgwYDAyZmZiNWQwIGZmZmZmODgwYDAxNGI2MWNjIHhlbnZp
ZiFEaXNwYXRjaCsweDE2MQpbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1z
cmNcdm1tLXhlbi13aW5kb3dzLXB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxkcml2ZXIuYwpA
IDI0Nl0KClRoZXNlIGFyZSBvdGhlciBzZXR0aW5ncyB0aGF0IGZhaWw6CgpYRU5WSUZ8U2V0dGlu
Z3NDb3B5SW50ZXJmYWNlVmFsdWU6IFRjcGlwNjpEaGNwdjZJYW5hSWFpZHMKWEVOVklGfFNldHRp
bmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhjcHY2SWF0YUlhaWRzClhFTlZJRnxTZXR0
aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlQxClhFTlZJRnxTZXR0aW5nc0Nv
cHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlQyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhbmFBZGRyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhdGFBZGRyClhFTlZJRnxTZXR0aW5nc0NvcHlJbnRl
cmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NklhbmFMZWFzZXMKWEVOVklGfFNldHRpbmdzQ29weUlu
dGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhjcHY2SWF0YUxlYXNlcwoKCi0tIApSYWZhxYIgV29qZHnF
gmEKUXViZXMgVG9vbHMgZm9yIFdpbmRvd3MgZGV2ZWxvcGVyCmh0dHBzOi8vd3d3LnF1YmVzLW9z
Lm9yZy8KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndp
bi1wdi1kZXZlbCBtYWlsaW5nIGxpc3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHA6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2lu
LXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:37:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:37:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpTy-0001VT-Hk; Tue, 15 Sep 2015 12:37:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbpTw-0001Uk-RH
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:37:09 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	53/05-24494-4F018F55; Tue, 15 Sep 2015 12:37:08 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1442320626!32374648!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27611 invoked from network); 15 Sep 2015 12:37:06 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:37:06 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; d="scan'208,217";a="2980217"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Joel Noyce-Barnham
	<joel.noyce-barnham@zynstra.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAADPYCAADosQA==
Date: Tue, 15 Sep 2015 12:37:05 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<55F7FB89.9010300@m2r.biz>
In-Reply-To: <55F7FB89.9010300@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6158852006977654739=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6158852006977654739==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

You still have something requesting unplug so you should also check HKLM/sy=
stem/currentcontrolset/services/xenfilt for an 'Unplug' key and delete that=
 if you find it. (You should always be able to boot up in safe mode... none=
 of the PV drivers activate in that mode).

As for http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l, that is a question for xen-devel I think.

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Fabio Fantoni
Sent: 15 September 2015 12:06
To: Paul Durrant; Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] PV Drivers Offline Removal

Il 15/09/2015 10:59, Paul Durrant ha scritto:
Joel,

  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.

  Cheers,

  Paul

Hi I'm unable to boot windows 10 after new pv drivers uninstall, I removed =
them from control panel, I also executed a bat I posted some months ago her=
e for remove other related things, I tried also to remove the registry key =
above, with both ide and ahci disk, with xen_platform_pci=3D0 but in all ca=
ses gave me always INACCESSIBLE_BOOT_DEVICE blue screen :(
Someone know other things I can try?

First test with uninstall only from control panel game me also a more impor=
tant problem (here there are also dom0 and domU details): http://lists.xen.=
org/archives/html/win-pv-devel/2015-09/msg00063.html

Thanks for any reply and sorry for my bad english.



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal


Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.


--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EFBB.9FBF94C0"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
@font-face
	{font-family:"Times New Roman \;color\:\#1F497D";
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:auto;
	mso-font-signature:0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	color:black;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;
	color:black;}
span.EmailStyle18
	{mso-style-type:personal;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.EmailStyle19
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;
	color:black;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor=3D"white" lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=
=3D"tab-interval:36.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Time=
s New Roman&quot;;color:#1F497D">You still have something requesting unplug
 so you should also check </span></font><font size=3D"2" color=3D"#1f497d" =
face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&=
quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;c=
olor\:\#1F497D&quot;;color:#1F497D">HKLM/system/<span class=3D"SpellE">curr=
entcontrolset</span>/services/<span class=3D"SpellE">xenfilt</span>
 for an &#8216;Unplug&#8217; key and delete that if you find it. (You shoul=
d always be able to boot up in safe mode&#8230; none of the PV drivers acti=
vate in that mode).<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">As for
<a href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063=
.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l</a>, that is a question for xen-devel I think.<o:p></o:p></span></font></=
p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Calibri=
"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;san=
s-serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Ti=
mes New Roman&quot;;color:#1F497D"><o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Time=
s New Roman&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" color=3D"black" face=3D"Tahoma">=
<span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quo=
t;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times New Roman&quo=
t;;color:windowtext;mso-ansi-language:EN-US;font-weight:bold">From:</span><=
/font></b><font size=3D"2" color=3D"black" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:windowt=
ext;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Fabio Fantoni<b=
r>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 12:0=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; Joel Noyce=
-Barnham; win-pv-devel@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: [win-pv-devel] =
PV Drivers Offline Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;">Il 15/09/2015 10:59, Paul Durrant ha scritto:<o:p></o:p></s=
pan></font></p>
</div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">Joel,</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/currentcontrolset/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul</span></font><o:p></o:p></p>
</blockquote>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;"><br>
Hi I'm unable to boot windows 10 after new pv drivers uninstall, I removed =
them from control panel, I also executed a bat I posted some months ago her=
e for remove other related things, I tried also to remove the registry key =
above, with both ide and ahci disk,
 with xen_platform_pci=3D0 but in all cases gave me always INACCESSIBLE_BOO=
T_DEVICE blue screen :(<br>
Someone know other things I can try?<br>
<br>
First test with uninstall only from control panel game me also a more impor=
tant problem (here there are also dom0 and domU details):
<a href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063=
.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l</a><br>
<br>
Thanks for any reply and sorry for my bad english.<br>
<br style=3D"mso-special-character:line-break">
<![if !supportLineBreakNewLine]><br style=3D"mso-special-character:line-bre=
ak">
<![endif]><o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1"><b><font size=3D"2" co=
lor=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0p=
t;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-ansi-language:E=
N-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=3D"Taho=
ma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma=
&quot;,&quot;sans-serif&quot;;mso-ansi-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><o:p></o:p></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt">&nbsp;<o:p></o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font><o:p></o:p></p>
</div>
<p style=3D"line-height:10.0pt"><font size=3D"1" color=3D"gray" face=3D"Cam=
bria"><span style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;=
serif&quot;;color:gray">Zynstra is a private limited company registered in =
England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immediately.
</span></font><o:p></o:p></p>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;"><o:p>&nbsp;</o:p></span></font></p>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_--


--===============6158852006977654739==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6158852006977654739==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:37:11 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:37:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpTy-0001VT-Hk; Tue, 15 Sep 2015 12:37:10 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbpTw-0001Uk-RH
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:37:09 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	53/05-24494-4F018F55; Tue, 15 Sep 2015 12:37:08 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1442320626!32374648!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 27611 invoked from network); 15 Sep 2015 12:37:06 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-16.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:37:06 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; d="scan'208,217";a="2980217"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Fabio Fantoni <fabio.fantoni@m2r.biz>, Joel Noyce-Barnham
	<joel.noyce-barnham@zynstra.com>, "win-pv-devel@lists.xenproject.org"
	<win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAADPYCAADosQA==
Date: Tue, 15 Sep 2015 12:37:05 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<55F7FB89.9010300@m2r.biz>
In-Reply-To: <55F7FB89.9010300@m2r.biz>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6158852006977654739=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============6158852006977654739==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

You still have something requesting unplug so you should also check HKLM/sy=
stem/currentcontrolset/services/xenfilt for an 'Unplug' key and delete that=
 if you find it. (You should always be able to boot up in safe mode... none=
 of the PV drivers activate in that mode).

As for http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l, that is a question for xen-devel I think.

  Paul

From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Fabio Fantoni
Sent: 15 September 2015 12:06
To: Paul Durrant; Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: Re: [win-pv-devel] PV Drivers Offline Removal

Il 15/09/2015 10:59, Paul Durrant ha scritto:
Joel,

  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.

  Cheers,

  Paul

Hi I'm unable to boot windows 10 after new pv drivers uninstall, I removed =
them from control panel, I also executed a bat I posted some months ago her=
e for remove other related things, I tried also to remove the registry key =
above, with both ide and ahci disk, with xen_platform_pci=3D0 but in all ca=
ses gave me always INACCESSIBLE_BOOT_DEVICE blue screen :(
Someone know other things I can try?

First test with uninstall only from control panel game me also a more impor=
tant problem (here there are also dom0 and domU details): http://lists.xen.=
org/archives/html/win-pv-devel/2015-09/msg00063.html

Thanks for any reply and sorry for my bad english.



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal


Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immediately.


--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EFBB.9FBF94C0"><!--[if=
 gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
@font-face
	{font-family:"Times New Roman \;color\:\#1F497D";
	panose-1:0 0 0 0 0 0 0 0 0 0;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-format:other;
	mso-font-pitch:auto;
	mso-font-signature:0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	color:black;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;
	color:black;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;
	color:black;}
span.EmailStyle18
	{mso-style-type:personal;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.EmailStyle19
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;
	color:black;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body bgcolor=3D"white" lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=
=3D"tab-interval:36.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Time=
s New Roman&quot;;color:#1F497D">You still have something requesting unplug
 so you should also check </span></font><font size=3D"2" color=3D"#1f497d" =
face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&=
quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;c=
olor\:\#1F497D&quot;;color:#1F497D">HKLM/system/<span class=3D"SpellE">curr=
entcontrolset</span>/services/<span class=3D"SpellE">xenfilt</span>
 for an &#8216;Unplug&#8217; key and delete that if you find it. (You shoul=
d always be able to boot up in safe mode&#8230; none of the PV drivers acti=
vate in that mode).<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">As for
<a href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063=
.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l</a>, that is a question for xen-devel I think.<o:p></o:p></span></font></=
p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Calibri=
"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;san=
s-serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Ti=
mes New Roman&quot;;color:#1F497D"><o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-fareast-font-family:Calibri;mso-bidi-font-family:&quot;Time=
s New Roman&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" color=3D"black" face=3D"Tahoma">=
<span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quo=
t;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times New Roman&quo=
t;;color:windowtext;mso-ansi-language:EN-US;font-weight:bold">From:</span><=
/font></b><font size=3D"2" color=3D"black" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:windowt=
ext;mso-ansi-language:EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Fabio Fantoni<b=
r>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 12:0=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; Joel Noyce=
-Barnham; win-pv-devel@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: [win-pv-devel] =
PV Drivers Offline Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;">Il 15/09/2015 10:59, Paul Durrant ha scritto:<o:p></o:p></s=
pan></font></p>
</div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">Joel,</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/currentcontrolset/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D"><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul</span></font><o:p></o:p></p>
</blockquote>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;"><br>
Hi I'm unable to boot windows 10 after new pv drivers uninstall, I removed =
them from control panel, I also executed a bat I posted some months ago her=
e for remove other related things, I tried also to remove the registry key =
above, with both ide and ahci disk,
 with xen_platform_pci=3D0 but in all cases gave me always INACCESSIBLE_BOO=
T_DEVICE blue screen :(<br>
Someone know other things I can try?<br>
<br>
First test with uninstall only from control panel game me also a more impor=
tant problem (here there are also dom0 and domU details):
<a href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063=
.html">http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.htm=
l</a><br>
<br>
Thanks for any reply and sorry for my bad english.<br>
<br style=3D"mso-special-character:line-break">
<![if !supportLineBreakNewLine]><br style=3D"mso-special-character:line-bre=
ak">
<![endif]><o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman \;color\:\#1F497D&qu=
ot;;color:#1F497D">&nbsp;</span></font><o:p></o:p></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1"><b><font size=3D"2" co=
lor=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0p=
t;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-ansi-language:E=
N-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=3D"Taho=
ma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma=
&quot;,&quot;sans-serif&quot;;mso-ansi-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><o:p></o:p></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt">&nbsp;<o:p></o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font><o:p></o:p></p>
</div>
<p style=3D"line-height:10.0pt"><font size=3D"1" color=3D"gray" face=3D"Cam=
bria"><span style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;=
serif&quot;;color:gray">Zynstra is a private limited company registered in =
England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immediately.
</span></font><o:p></o:p></p>
</div>
<p class=3D"MsoNormal"><font size=3D"3" color=3D"black" face=3D"Times New R=
oman"><span style=3D"font-size:12.0pt;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;"><o:p>&nbsp;</o:p></span></font></p>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C46AMSPEX01CL01cit_--


--===============6158852006977654739==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============6158852006977654739==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:38:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:38:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpVU-0001wG-Ny; Tue, 15 Sep 2015 12:38:44 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbpVS-0001vq-Uo
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:38:43 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	70/A1-31069-15118F55; Tue, 15 Sep 2015 12:38:41 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1442320720!12514626!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5940 invoked from network); 15 Sep 2015 12:38:41 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:38:41 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; 
   d="scan'208";a="2980385"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
Thread-Index: AQHQ77AMjOzAXnK1m0+naOJasyFcl549hzFQ
Date: Tue, 15 Sep 2015 12:38:39 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C61@AMSPEX01CL01.citrite.net>
References: <55F80B5C.9040804@invisiblethingslab.com>
In-Reply-To: <55F80B5C.9040804@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MTUgU2VwdGVtYmVyIDIwMTUgMTM6MTMNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBBc3NlcnRpb24gZmFpbHVyZXMgaW4g
eGVudmlmIHdpdGggREhDUCBkaXNhYmxlZA0KPiANCj4gSSd2ZSBub3RpY2VkIHRoYXQgd2hlbiB0
aGUgREhDUCBDbGllbnQgc2VydmljZSBpcyBkaXNhYmxlZCBpbiB0aGUgT1MNCj4gKHRlc3RlZCBv
biBXaW43IHg2NCkgWEVOVklGIGNhdXNlcyBhIGZldyBhc3NlcnRpb24gZmFpbHVyZXMgb24gYm9v
dC4gSQ0KPiB0aGluayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIHNlZW0g
dG8gbm90IGNhdXNlIGhhcm0gaWYNCj4gY29udGludWVkLg0KDQpUaGFua3MgZm9yIHRoZSBoZWFk
cy11cC4gTG9va3MgbGlrZSBJIGp1c3QgbmVlZCB0byBhbGxvdyBmb3IgemVyby1sZW5ndGggdmFs
dWVzIHdoZW4gY29weWluZy4NCg0KICBQYXVsDQoNCj4gUmVsZXZhbnQgY2FsbCBzdGFjazoNCj4g
DQo+IFhFTlZJRnxTZXR0aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlNlcnZl
ckRVSUQNCj4gWEVOVklGfF9fQWxsb2NhdGVOb25QYWdlZFBvb2xXaXRoVGFnOiBBU1NFUlRJT04g
RkFJTEVEOiBMZW5ndGggIT0gMA0KPiBBc3NlcnRpb24NCj4gYzpccXViZXMtYnVpbGRlclxjaHJv
b3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlm
XHNyY1x4ZW52aWZcdXRpbC5oKDE2MCk6DQo+IExlbmd0aCAhPSAwDQo+IHhlbnZpZiFfX0FsbG9j
YXRlTm9uUGFnZWRQb29sV2l0aFRhZysweDQyOg0KPiBmZmZmZjg4MGAwNDEwYzE0MiBjZDJjICAg
ICAgICAgICAgaW50ICAgICAyQ2gNCj4gMToga2Q+IGsNCj4gQ2hpbGQtU1AgICAgICAgICAgUmV0
QWRkciAgICAgICAgICAgQ2FsbCBTaXRlDQo+IGZmZmZmODgwYDAyZmZiMGYwIGZmZmZmODgwYDA0
MTBjNTM4DQo+IHhlbnZpZiFfX0FsbG9jYXRlTm9uUGFnZWRQb29sV2l0aFRhZysweDQyDQo+IFtj
OlxxdWJlcy1idWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3Mt
DQo+IHB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlx1dGlsLmgNCj4gQCAxNjBdDQo+IGZmZmZm
ODgwYDAyZmZiMTUwIGZmZmZmODgwYDA0MTBiNzgwIHhlbnZpZiFfX1JlZ2lzdHJ5QWxsb2NhdGUr
MHgxOA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhl
bi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccmVnaXN0cnkuYw0KPiBA
IDQ4XQ0KPiBmZmZmZjg4MGAwMmZmYjE4MCBmZmZmZjg4MGAwNDEwY2NiMw0KPiB4ZW52aWYhUmVn
aXN0cnlRdWVyeUJpbmFyeVZhbHVlKzB4MTIwDQo+IFtjOlxxdWJlcy1idWlsZGVyXGNocm9vdC13
aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtDQo+IHB2ZHJpdmVyc1x4ZW52aWZcc3Jj
XHhlbnZpZlxyZWdpc3RyeS5jDQo+IEAgOTQyXQ0KPiBmZmZmZjg4MGAwMmZmYjIxMCBmZmZmZjg4
MGAwNDEwYWUzYw0KPiB4ZW52aWYhU2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWUrMHgxMjMNCj4g
W2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93
cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMNCj4gQCAxMTZdDQo+
IGZmZmZmODgwYDAyZmZiMjcwIGZmZmZmODgwYDA0MTBjYTIzIHhlbnZpZiFSZWdpc3RyeUVudW1l
cmF0ZVZhbHVlcysweDI2Yw0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJl
cy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccmVn
aXN0cnkuYw0KPiBAIDUyMl0NCj4gZmZmZmY4ODBgMDJmZmIzMjAgZmZmZmY4ODBgMDQxMGM2MjEg
eGVudmlmIVNldHRpbmdzQ29weUludGVyZmFjZSsweDNiMw0KPiBbYzpccXViZXMtYnVpbGRlclxj
aHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVu
dmlmXHNyY1x4ZW52aWZcc2V0dGluZ3MuYw0KPiBAIDIzOV0NCj4gZmZmZmY4ODBgMDJmZmI0MDAg
ZmZmZmY4ODBgMDQxMGQzYzEgeGVudmlmIVNldHRpbmdzQ29weSsweGMxDQo+IFtjOlxxdWJlcy1i
dWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtDQo+IHB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxzZXR0aW5ncy5jDQo+IEAgNTMwXQ0KPiBmZmZmZjg4MGAw
MmZmYjQ0MCBmZmZmZjg4MGAwNDBmYzExNCB4ZW52aWYhU2V0dGluZ3NSZXN0b3JlKzB4ODENCj4g
W2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93
cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMNCj4gQCA2MDBdDQo+
IGZmZmZmODgwYDAyZmZiNDgwIGZmZmZmODgwYDA0MGY5Mjc0IHhlbnZpZiFQZG9TdGFydERldmlj
ZSsweDJmNA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1t
LXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRvLmMNCj4gQCAx
MjYwXQ0KPiBmZmZmZjg4MGAwMmZmYjUzMCBmZmZmZjg4MGAwNDBmOTE1OCB4ZW52aWYhUGRvRGlz
cGF0Y2hQbnArMHhiNA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1z
cmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRvLmMN
Cj4gQCAyMTMzXQ0KPiBmZmZmZjg4MGAwMmZmYjU5MCBmZmZmZjg4MGAwNDBlM2ViMSB4ZW52aWYh
UGRvRGlzcGF0Y2grMHg0OA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJl
cy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRv
LmMNCj4gQCAyNTQzXQ0KPiBmZmZmZjg4MGAwMmZmYjVkMCBmZmZmZjg4MGAwMTRiNjFjYyB4ZW52
aWYhRGlzcGF0Y2grMHgxNjENCj4gW2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXVi
ZXMtc3JjXHZtbS14ZW4td2luZG93cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXGRy
aXZlci5jDQo+IEAgMjQ2XQ0KPiANCj4gVGhlc2UgYXJlIG90aGVyIHNldHRpbmdzIHRoYXQgZmFp
bDoNCj4gDQo+IFhFTlZJRnxTZXR0aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2
NklhbmFJYWlkcw0KPiBYRU5WSUZ8U2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWU6IFRjcGlwNjpE
aGNwdjZJYXRhSWFpZHMNCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3Bp
cDY6RGhjcHY2VDENCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2VDINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhj
cHY2SWFuYUFkZHINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2SWF0YUFkZHINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3Bp
cDY6RGhjcHY2SWFuYUxlYXNlcw0KPiBYRU5WSUZ8U2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWU6
IFRjcGlwNjpEaGNwdjZJYXRhTGVhc2VzDQo+IA0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJh
DQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJl
cy1vcy5vcmcvDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXw0KPiB3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1i
aW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:38:45 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:38:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpVU-0001wG-Ny; Tue, 15 Sep 2015 12:38:44 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbpVS-0001vq-Uo
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:38:43 +0000
Received: from [85.158.137.68] by server-8.bemta-3.messagelabs.com id
	70/A1-31069-15118F55; Tue, 15 Sep 2015 12:38:41 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-31.messagelabs.com!1442320720!12514626!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=received_headers: No 
	Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5940 invoked from network); 15 Sep 2015 12:38:41 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:38:41 -0000
X-IronPort-AV: E=Sophos;i="5.17,535,1437436800"; 
   d="scan'208";a="2980385"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
Thread-Index: AQHQ77AMjOzAXnK1m0+naOJasyFcl549hzFQ
Date: Tue, 15 Sep 2015 12:38:39 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4C61@AMSPEX01CL01.citrite.net>
References: <55F80B5C.9040804@invisiblethingslab.com>
In-Reply-To: <55F80B5C.9040804@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] Assertion failures in xenvif with DHCP disabled
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MTUgU2VwdGVtYmVyIDIwMTUgMTM6MTMNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBbd2luLXB2LWRldmVsXSBBc3NlcnRpb24gZmFpbHVyZXMgaW4g
eGVudmlmIHdpdGggREhDUCBkaXNhYmxlZA0KPiANCj4gSSd2ZSBub3RpY2VkIHRoYXQgd2hlbiB0
aGUgREhDUCBDbGllbnQgc2VydmljZSBpcyBkaXNhYmxlZCBpbiB0aGUgT1MNCj4gKHRlc3RlZCBv
biBXaW43IHg2NCkgWEVOVklGIGNhdXNlcyBhIGZldyBhc3NlcnRpb24gZmFpbHVyZXMgb24gYm9v
dC4gSQ0KPiB0aGluayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIHNlZW0g
dG8gbm90IGNhdXNlIGhhcm0gaWYNCj4gY29udGludWVkLg0KDQpUaGFua3MgZm9yIHRoZSBoZWFk
cy11cC4gTG9va3MgbGlrZSBJIGp1c3QgbmVlZCB0byBhbGxvdyBmb3IgemVyby1sZW5ndGggdmFs
dWVzIHdoZW4gY29weWluZy4NCg0KICBQYXVsDQoNCj4gUmVsZXZhbnQgY2FsbCBzdGFjazoNCj4g
DQo+IFhFTlZJRnxTZXR0aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2NlNlcnZl
ckRVSUQNCj4gWEVOVklGfF9fQWxsb2NhdGVOb25QYWdlZFBvb2xXaXRoVGFnOiBBU1NFUlRJT04g
RkFJTEVEOiBMZW5ndGggIT0gMA0KPiBBc3NlcnRpb24NCj4gYzpccXViZXMtYnVpbGRlclxjaHJv
b3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlm
XHNyY1x4ZW52aWZcdXRpbC5oKDE2MCk6DQo+IExlbmd0aCAhPSAwDQo+IHhlbnZpZiFfX0FsbG9j
YXRlTm9uUGFnZWRQb29sV2l0aFRhZysweDQyOg0KPiBmZmZmZjg4MGAwNDEwYzE0MiBjZDJjICAg
ICAgICAgICAgaW50ICAgICAyQ2gNCj4gMToga2Q+IGsNCj4gQ2hpbGQtU1AgICAgICAgICAgUmV0
QWRkciAgICAgICAgICAgQ2FsbCBTaXRlDQo+IGZmZmZmODgwYDAyZmZiMGYwIGZmZmZmODgwYDA0
MTBjNTM4DQo+IHhlbnZpZiFfX0FsbG9jYXRlTm9uUGFnZWRQb29sV2l0aFRhZysweDQyDQo+IFtj
OlxxdWJlcy1idWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3Mt
DQo+IHB2ZHJpdmVyc1x4ZW52aWZcc3JjXHhlbnZpZlx1dGlsLmgNCj4gQCAxNjBdDQo+IGZmZmZm
ODgwYDAyZmZiMTUwIGZmZmZmODgwYDA0MTBiNzgwIHhlbnZpZiFfX1JlZ2lzdHJ5QWxsb2NhdGUr
MHgxOA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhl
bi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccmVnaXN0cnkuYw0KPiBA
IDQ4XQ0KPiBmZmZmZjg4MGAwMmZmYjE4MCBmZmZmZjg4MGAwNDEwY2NiMw0KPiB4ZW52aWYhUmVn
aXN0cnlRdWVyeUJpbmFyeVZhbHVlKzB4MTIwDQo+IFtjOlxxdWJlcy1idWlsZGVyXGNocm9vdC13
aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtDQo+IHB2ZHJpdmVyc1x4ZW52aWZcc3Jj
XHhlbnZpZlxyZWdpc3RyeS5jDQo+IEAgOTQyXQ0KPiBmZmZmZjg4MGAwMmZmYjIxMCBmZmZmZjg4
MGAwNDEwYWUzYw0KPiB4ZW52aWYhU2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWUrMHgxMjMNCj4g
W2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93
cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMNCj4gQCAxMTZdDQo+
IGZmZmZmODgwYDAyZmZiMjcwIGZmZmZmODgwYDA0MTBjYTIzIHhlbnZpZiFSZWdpc3RyeUVudW1l
cmF0ZVZhbHVlcysweDI2Yw0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJl
cy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccmVn
aXN0cnkuYw0KPiBAIDUyMl0NCj4gZmZmZmY4ODBgMDJmZmIzMjAgZmZmZmY4ODBgMDQxMGM2MjEg
eGVudmlmIVNldHRpbmdzQ29weUludGVyZmFjZSsweDNiMw0KPiBbYzpccXViZXMtYnVpbGRlclxj
aHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVu
dmlmXHNyY1x4ZW52aWZcc2V0dGluZ3MuYw0KPiBAIDIzOV0NCj4gZmZmZmY4ODBgMDJmZmI0MDAg
ZmZmZmY4ODBgMDQxMGQzYzEgeGVudmlmIVNldHRpbmdzQ29weSsweGMxDQo+IFtjOlxxdWJlcy1i
dWlsZGVyXGNocm9vdC13aW43eDY0XHF1YmVzLXNyY1x2bW0teGVuLXdpbmRvd3MtDQo+IHB2ZHJp
dmVyc1x4ZW52aWZcc3JjXHhlbnZpZlxzZXR0aW5ncy5jDQo+IEAgNTMwXQ0KPiBmZmZmZjg4MGAw
MmZmYjQ0MCBmZmZmZjg4MGAwNDBmYzExNCB4ZW52aWYhU2V0dGluZ3NSZXN0b3JlKzB4ODENCj4g
W2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXViZXMtc3JjXHZtbS14ZW4td2luZG93
cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXHNldHRpbmdzLmMNCj4gQCA2MDBdDQo+
IGZmZmZmODgwYDAyZmZiNDgwIGZmZmZmODgwYDA0MGY5Mjc0IHhlbnZpZiFQZG9TdGFydERldmlj
ZSsweDJmNA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1zcmNcdm1t
LXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRvLmMNCj4gQCAx
MjYwXQ0KPiBmZmZmZjg4MGAwMmZmYjUzMCBmZmZmZjg4MGAwNDBmOTE1OCB4ZW52aWYhUGRvRGlz
cGF0Y2hQbnArMHhiNA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJlcy1z
cmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRvLmMN
Cj4gQCAyMTMzXQ0KPiBmZmZmZjg4MGAwMmZmYjU5MCBmZmZmZjg4MGAwNDBlM2ViMSB4ZW52aWYh
UGRvRGlzcGF0Y2grMHg0OA0KPiBbYzpccXViZXMtYnVpbGRlclxjaHJvb3Qtd2luN3g2NFxxdWJl
cy1zcmNcdm1tLXhlbi13aW5kb3dzLQ0KPiBwdmRyaXZlcnNceGVudmlmXHNyY1x4ZW52aWZccGRv
LmMNCj4gQCAyNTQzXQ0KPiBmZmZmZjg4MGAwMmZmYjVkMCBmZmZmZjg4MGAwMTRiNjFjYyB4ZW52
aWYhRGlzcGF0Y2grMHgxNjENCj4gW2M6XHF1YmVzLWJ1aWxkZXJcY2hyb290LXdpbjd4NjRccXVi
ZXMtc3JjXHZtbS14ZW4td2luZG93cy0NCj4gcHZkcml2ZXJzXHhlbnZpZlxzcmNceGVudmlmXGRy
aXZlci5jDQo+IEAgMjQ2XQ0KPiANCj4gVGhlc2UgYXJlIG90aGVyIHNldHRpbmdzIHRoYXQgZmFp
bDoNCj4gDQo+IFhFTlZJRnxTZXR0aW5nc0NvcHlJbnRlcmZhY2VWYWx1ZTogVGNwaXA2OkRoY3B2
NklhbmFJYWlkcw0KPiBYRU5WSUZ8U2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWU6IFRjcGlwNjpE
aGNwdjZJYXRhSWFpZHMNCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3Bp
cDY6RGhjcHY2VDENCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2VDINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6RGhj
cHY2SWFuYUFkZHINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3BpcDY6
RGhjcHY2SWF0YUFkZHINCj4gWEVOVklGfFNldHRpbmdzQ29weUludGVyZmFjZVZhbHVlOiBUY3Bp
cDY6RGhjcHY2SWFuYUxlYXNlcw0KPiBYRU5WSUZ8U2V0dGluZ3NDb3B5SW50ZXJmYWNlVmFsdWU6
IFRjcGlwNjpEaGNwdjZJYXRhTGVhc2VzDQo+IA0KPiANCj4gLS0NCj4gUmFmYcWCIFdvamR5xYJh
DQo+IFF1YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3Blcg0KPiBodHRwczovL3d3dy5xdWJl
cy1vcy5vcmcvDQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXw0KPiB3aW4tcHYtZGV2ZWwgbWFpbGluZyBsaXN0DQo+IHdpbi1wdi1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZw0KPiBodHRwOi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9t
YWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1kZXZlbA0KX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18Kd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1i
aW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:56:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:56:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpmD-0003Aa-JB; Tue, 15 Sep 2015 12:56:02 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZbpmB-0003A4-F4
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:56:00 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	2B/72-22089-E5518F55; Tue, 15 Sep 2015 12:55:58 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-9.tower-206.messagelabs.com!1442321748!35245317!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=2.4 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14496 invoked from network); 15 Sep 2015 12:55:48 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:55:48 -0000
Received: by wicge5 with SMTP id ge5so27742891wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 05:55:48 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=C1jyZHvKH/qQcnQJAzP6350AZ5ZMecweIW+t9slVyms=;
	b=cQ82TDgK5kU2XY0iCjfQgYjn4Vbk14GBSlOHKqJ1ZlMA7BiuA6jzI99VFRxBSdzmTa
	jauppuZA1cRZdrnOyl8zxxgsO6GNm/2igwGiLP2EIAPI1vQj+Z6gjq/zkz/gA6ZjZyiO
	UeY3JjboExYpuW46lQ7GrdlT6fDxPsD3Ty6OoHG+KDtPhp01QODtXCwW5xyt/0NLjRRM
	MQXaoLT4sPYQVt7rVSUT6QM105ZLJOE3LOb6IAVejpOEZdEoGW7MpIil/Cr85o1W9FAt
	mQsu7Yd0nohuKndUGhw8dgjIQknXadeKsVkSAOSmDFhLMDLSsomTIgyZQE18B11wIfkc
	eXaw==
X-Gm-Message-State: ALoCoQlBdGD4F6r+Bj5S4zqAtvKVPqUyFwZcv6nIpQfGY6j7t7IMs1FdOuOUQ87XOvvQI8hCnD47
X-Received: by 10.194.105.73 with SMTP id gk9mr42819681wjb.122.1442321748056; 
	Tue, 15 Sep 2015 05:55:48 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	bi6sm20996223wjc.25.2015.09.15.05.55.41
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 05:55:47 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
	<55F1956B.4070201@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F8154F.3000109@m2r.biz>
Date: Tue, 15 Sep 2015 14:55:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F1956B.4070201@m2r.biz>
Content-Type: multipart/mixed; boundary="------------020508020507050502090501"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	xen-devel <xen-devel@lists.xensource.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: [win-pv-devel] BUG: unable to handle kernel paging request - dom0
 with kernel 4.1.6 and xen 4.6.0-rc3
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------020508020507050502090501
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 26606
Content-Transfer-Encoding: quoted-printable

Il 10/09/2015 16:36, Fabio Fantoni ha scritto:
> Il 07/09/2015 16:41, Paul Durrant ha scritto:
>>> -----Original Message-----
>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>> Sent: 07 September 2015 14:01
>>> To: Paul Durrant; Stefano Stabellini
>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>
>>> Il 07/09/2015 13:57, Paul Durrant ha scritto:
>>>>> -----Original Message-----
>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>> Sent: 07 September 2015 11:33
>>>>> To: Paul Durrant; Stefano Stabellini
>>>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>>>
>>>>> Il 07/09/2015 11:26, Paul Durrant ha scritto:
>>>>>> Fabio,
>>>>>>
>>>>>>      Can you confirm that you don't see any problem if you use 
>>>>>> standard
>>> IDE
>>>>> emulated disks=3F I certainly don't.
>>>>>>      Paul
>>>>> WIth ide instead ahci was with same results but about udev problem 
>>>>> now
>>>>> seems I found the cause, seems the dom0 kernel.
>>>>> With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy
>>>>> repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64
>>>>> version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
>>>>> Initially new pv drivers was with network not working with kernel 
>>>>> <3.14
>>>>> but after seems was solved (I don't know the exactly commit) but 
>>>>> seems
>>>>> that xen without udev file a newer kernel is still needed.
>>>>> With 3.16 kernel I had other problems instead, for example with
>>>>> balloning (even if should not be used).
>>>>> With second test with kernel 3.16 I tried to remove a workaround of
>>>>> balloning problem (dom0_mem=3D2G,max:3G in grub.cfg instead
>>>>> dom0_mem=3D2G,max:2G), I nomore saw kern.log spam but W7 domU
>>>>> crashed at boot.
>>>>> Another strange things is even if with trace enabled don't show pv
>>>>> drivers debug lines with 3.16 kernel (on older tests with 3.16 did 
>>>>> if I
>>>>> remember good)
>>>>> In attachment the windows minidump.
>>>> That yielded:
>>>>
>>>> 0: kd> !analyze -v
>>>>
>>> **********************************************************
>>> *********************
>>>> * *
>>>> *                        Bugcheck 
>>>> Analysis                                    *
>>>> * *
>>>>
>>> **********************************************************
>>> *********************
>>>> SYSTEM_SERVICE_EXCEPTION (3b)
>>>> An exception happened while executing a system service routine.
>>>> Arguments:
>>>> Arg1: 00000000c0000005, Exception code that caused the bugcheck
>>>> Arg2: fffff80002a8a7c5, Address of the instruction which caused the
>>> bugcheck
>>>> Arg3: fffff88001e86c00, Address of the context record for the 
>>>> exception
>>> that caused the bugcheck
>>>> Arg4: 0000000000000000, zero.
>>>>
>>>> Debugging Details:
>>>> ------------------
>>>>
>>>>
>>>> EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx
>>> referenced memory at 0x%08lx. The memory could not be %s.
>>>> FAULTING_IP:
>>>> nt!ExpInterlockedPopEntrySListFault16+0
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>>
>>>> CONTEXT:  fffff88001e86c00 -- (.cxr 0xfffff88001e86c00;r)
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Last set context:
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Resetting default scope
>>>>
>>>> CUSTOMER_CRASH_COUNT:  1
>>>>
>>>> DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT
>>>>
>>>> BUGCHECK_STR:  0x3B
>>>>
>>>> PROCESS_NAME:  lsass.exe
>>>>
>>>> CURRENT_IRQL:  0
>>>>
>>>> ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) x86fre
>>>>
>>>> LAST_CONTROL_TRANSFER:  from 0000000000000000 to fffff80002a8a7c5
>>>>
>>>> STACK_TEXT:
>>>> fffff880`01e875e0 00000000`00000000 : 00000000`00000000
>>> 00000000`00000000 00000000`00000000 00000000`00000000 :
>>> nt!ExpInterlockedPopEntrySListFault16
>>>>
>>>> FOLLOWUP_IP:
>>>> nt!ExpInterlockedPopEntrySListFault16+0
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>>
>>>> SYMBOL_STACK_INDEX:  0
>>>>
>>>> SYMBOL_NAME:  nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> FOLLOWUP_NAME:  MachineOwner
>>>>
>>>> MODULE_NAME: nt
>>>>
>>>> IMAGE_NAME:  ntkrnlmp.exe
>>>>
>>>> DEBUG_FLR_IMAGE_TIMESTAMP:  556356e8
>>>>
>>>> IMAGE_VERSION:  6.1.7601.18869
>>>>
>>>> STACK_COMMAND:  .cxr 0xfffff88001e86c00 ; kb
>>>>
>>>> FAILURE_BUCKET_ID: X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> ANALYSIS_SOURCE:  KM
>>>>
>>>> FAILURE_ID_HASH_STRING:
>>> km:x64_0x3b_nt!expinterlockedpopentryslistfault16+0
>>>> FAILURE_ID_HASH: {b390bf2a-9c11-079f-34b0-5dffcabffe4b}
>>>>
>>>> Followup: MachineOwner
>>>> ---------
>>>>
>>>> 0: kd> .cxr 0xfffff88001e86c00;r
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Last set context:
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> That's pretty strange. I'd say something is probably corrupt.
>>> The corruption I saw for sure about disks are using btrfs as dom0 fs 
>>> (in
>>> rare cases) and with qcow2 overlay.
>>> These tests are instead with ext4 and raw domUs disk.
>>> About others corruptions (not only disks) I don't know.
>> I'm just using a single layer qcow2.
>>
>>>>> I'm going crazy with these too many problems and haven't time to 
>>>>> do all
>>>>> useful tests :(
>>>> Too many moving parts I'd say. I've been running with a 4.2-rc dom0
>>> kernel, a Xen from about 3 weeks ago and upstream qemu from Xen's
>>> upstream tag (again from about 3 weeks ago) and I'm not seeing any
>>> problems. I do have a fairly standard config though; ide disks and 
>>> std-vga
>>> graphics.
>>>>     Paul
>>> About dom0 kernel, are you using build from a package o custom build=3F
>>> Can be useful for me try kernel 4.2 instead=3F
>>>
>> I'm building my own. I'm on a wheezy base but 3.2 is much too old a 
>> kernel for me.
>>
>>    Paul
>

Added xen-devel on cc and changed title.

> I tried with kernel 4.1.6 on dom0 built with make-kpkg with config 
> from Sid (that use same version) except 2 small changes (in 
> attachment), xen updated based on 4.6.0-rc3.
> I did some tests and domUs with new pv drivers seems ok also without 
> udev file (seems related to old dom0 kernels with new win pv drivers).
> I also tried a qcow2 overlay for some hours without saw errors or leak 
> on check (I'll keep tested further).
> Persist the very strange thing of qemu's xen trace not working even if 
> built with debug and domU's setting is the same.
> I tried also to remove the new pv driver from a W10 domU (for install 
> the new one), I removed them from control panel and I rebooted windows 
> but on reboot it hang on windows start.
> Nothing useful on qemu log, I did a xl destroy completed successfull 
> but it didn't kill qemu.
> The domU's xl cfg in attachment.
>> cat /etc/xen/qemu-trace-options
>> xen_platform_log
>
>
>> xl list
>> Name                                        ID   Mem VCPUs State   
>> Time(s)
>> Domain-0                                     0  2048     8 r-----     
>> 799.0
>> (null)                                       5   196     2 
>> --p--d       4.8
>
> In syslog I found this:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639088] BUG: unable to 
>> handle kernel paging request at ffff8800159b56c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639133] IP: 
>> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639169] PGD 1810067 PUD 
>> 1811067 PMD 7fe68067 PTE 80100000159b5065
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639210] Oops: 0003 [#1] SMP
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639229] Modules linked in: 
>> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
>> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev 
>> xen_evtchn xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad 
>> ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 
>> nfsd auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc 
>> bridge stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
>> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
>> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
>> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button 
>> processor wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 
>> dm_mod sd_mod sg sr_mod cdrom hid_generic ata_generic usbhid hid 
>> crc32c_intel ata_piix libata ehci_pci ehci_hcd bnx2 usbcore 
>> usb_common mpt2sas raid_class scsi_transport_sas scsi_mod
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639686] CPU: 2 PID: 5782 
>> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639721] Hardware name: Dell 
>> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639755] task: 
>> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639787] RIP: 
>> e030:[<ffffffff81069b7b>]  [<ffffffff81069b7b>] 
>> ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639830] RSP: 
>> e02b:ffff88001d52fb08  EFLAGS: 00010202
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639855] RAX: 
>> 0000000002020202 RBX: 0000000000000001 RCX: 8000000318bf2b67
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639887] RDX: 
>> ffff8800159b56c0 RSI: 00007ffab42d8000 RDI: ffff8800040232f8
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639918] RBP: 
>> ffffea0000566d70 R08: 0000000000000001 R09: 8000000318bf2b01
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639950] R10: 
>> 0000000000007ff0 R11: ffff8800000006c0 R12: ffff88003260cd08
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639982] R13: 
>> ffff8800040232f8 R14: ffff8800703f7480 R15: 0000000000000015
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640021] FS: 
>> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640058] CS:  e033 DS: 0000 
>> ES: 0000 CR0: 000000008005003b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640084] CR2: 
>> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640113] Stack:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640120] 00007ffab42d8000 
>> ffffffff811927fd ffff880072dae350 ffff88007c88a2f0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640145] ffff88001d530000 
>> ffff8800703f74e8 fffffffeffffffff ffff8800703f7500
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640169] 8000000318bf2327 
>> ffff8800159b56c0 ffffffff815910cf ffff880072dae350
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640193] Call Trace:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640207] 
>> [<ffffffff811927fd>] =3F handle_mm_fault+0x28d/0x1700
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640226] 
>> [<ffffffff815910cf>] =3F schedule+0x2f/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640245] 
>> [<ffffffff812f8e24>] =3F call_rwsem_down_read_failed+0x14/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640266] 
>> [<ffffffff81064499>] =3F __do_page_fault+0x1b9/0x510
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640285] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640302] 
>> [<ffffffff812fe903>] =3F copy_page_to_iter+0x83/0x320
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640321] 
>> [<ffffffff81166e20>] =3F generic_file_read_iter+0x2c0/0x5c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640341] 
>> [<ffffffff8159491c>] =3F _raw_spin_lock_irq+0xc/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640360] 
>> [<ffffffff81212835>] =3F fsnotify+0x335/0x4b0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640378] 
>> [<ffffffff811d302f>] =3F __vfs_read+0xaf/0xe0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640395] 
>> [<ffffffff811d43ed>] =3F vfs_read+0x8d/0x150
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640411] 
>> [<ffffffff811d46ab>] =3F SyS_pread64+0x9b/0xb0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640428] 
>> [<ffffffff81594eb2>] =3F system_call_fastpath+0x16/0x75
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640446] Code: c4 18 e9 99 
>> 30 10 00 66 0f 1f 84 00 00 00 00 00 66 66 66 66 90 53 48 3b 0a 41 0f 
>> 95 c1 45 85 c0 41 0f b6 d9 74 13 45 84 c9 74 0e <48> 89 0a 48 8b 7f 
>> 40 66 66 66 90 66 66 90 89 d8 5b c3 0f 1f 00
>> Sep 10 15:53:27 testVS01OU kernel: [11777.641970] RIP 
>> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.642711]  RSP 
>> <ffff88001d52fb08>
>> Sep 10 15:53:27 testVS01OU kernel: [11777.643450] CR2: ffff8800159b56c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.647305] ------------[ cut 
>> here ]------------
>> Sep 10 15:53:27 testVS01OU kernel: [11777.648042] kernel BUG at 
>> arch/x86/mm/pageattr.c:214!
>> Sep 10 15:53:27 testVS01OU kernel: [11777.648764] invalid opcode: 
>> 0000 [#2] SMP
>> Sep 10 15:53:27 testVS01OU kernel: [11777.649483] Modules linked in: 
>> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
>> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev 
>> xen_evtchn xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad 
>> ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 
>> nfsd auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc 
>> bridge stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
>> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
>> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
>> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button 
>> processor wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 
>> dm_mod sd_mod sg sr_mod cdrom hid_generic ata_generic usbhid hid 
>> crc32c_intel ata_piix libata ehci_pci ehci_hcd bnx2 usbcore 
>> usb_common mpt2sas raid_class scsi_transport_sas scsi_mod
>> Sep 10 15:53:27 testVS01OU kernel: [11777.654889] CPU: 2 PID: 5782 
>> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
>> Sep 10 15:53:27 testVS01OU kernel: [11777.655624] Hardware name: Dell 
>> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
>> Sep 10 15:53:27 testVS01OU kernel: [11777.656353] task: 
>> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.657082] RIP: 
>> e030:[<ffffffff8106749c>]  [<ffffffff8106749c>] 
>> change_page_attr_set_clr+0x44c/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.657824] RSP: 
>> e02b:ffff88001d52e9d8  EFLAGS: 00010046
>> Sep 10 15:53:27 testVS01OU kernel: [11777.658552] RAX: 
>> 201008001fc900f5 RBX: 0000000000000000 RCX: 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.659280] RDX: 
>> 0000000000000000 RSI: 0000000000000000 RDI: ffff88001d52ea08
>> Sep 10 15:53:27 testVS01OU kernel: [11777.660004] RBP: 
>> 0000000000000000 R08: 0000000000000001 R09: ffff880000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.660724] R10: 
>> 00000000deadbeef R11: 0000000000000000 R12: 0000000000000200
>> Sep 10 15:53:27 testVS01OU kernel: [11777.661437] R13: 
>> 0000000000000001 R14: 0000000000000000 R15: 0000000000000005
>> Sep 10 15:53:27 testVS01OU kernel: [11777.662148] FS: 
>> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.662863] CS:  e033 DS: 0000 
>> ES: 0000 CR0: 000000008005003b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.663570] CR2: 
>> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
>> Sep 10 15:53:27 testVS01OU kernel: [11777.664280] Stack:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.665004] 0000000000000004 
>> ffff880000000000 0000000000000000 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.665722] 0000001000000040 
>> 0000000000000001 0000000000000000 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.666428] 0000000000000010 
>> 0000000000000000 0000000500000001 000000000002348b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.667143] Call Trace:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.667834] 
>> [<ffffffff8106760f>] =3F _set_pages_array+0xdf/0x130
>> Sep 10 15:53:27 testVS01OU kernel: [11777.668534] 
>> [<ffffffffa036ef9e>] =3F ttm_set_pages_caching+0x4e/0x80 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.669237] 
>> [<ffffffffa036f0d0>] =3F ttm_alloc_new_pages.isra.5+0xb0/0x170 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.669952] 
>> [<ffffffffa036fb06>] =3F ttm_pool_populate+0x3c6/0x4c0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.670656] 
>> [<ffffffffa036c262>] =3F ttm_bo_move_memcpy+0x582/0x620 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.671355] 
>> [<ffffffff811a2558>] =3F __vmalloc_node_range+0x198/0x2a0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.672057] 
>> [<ffffffffa0369c77>] =3F ttm_bo_handle_move_mem+0x267/0x5e0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.672763] 
>> [<ffffffff810052f9>] =3F __raw_callee_save_xen_pmd_val+0x11/0x1e
>> Sep 10 15:53:27 testVS01OU kernel: [11777.673472] 
>> [<ffffffffa036a8bb>] =3F ttm_bo_mem_space+0xeb/0x360 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.674182] 
>> [<ffffffffa036ad0f>] =3F ttm_bo_validate+0x1df/0x1f0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.674886] 
>> [<ffffffff8119fdfa>] =3F lazy_max_pages+0x1a/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.675592] 
>> [<ffffffff811a095d>] =3F free_vmap_area_noflush+0x2d/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.676305] 
>> [<ffffffffa0354b72>] =3F mgag200_bo_push_sysram+0x82/0xc0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.677025] 
>> [<ffffffffa034f9c1>] =3F 
>> mga_crtc_do_set_base.isra.8.constprop.20+0x81/0x3f0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.677755] 
>> [<ffffffff813221c8>] =3F pci_bus_write_config_dword+0x78/0x90
>> Sep 10 15:53:27 testVS01OU kernel: [11777.678471] 
>> [<ffffffffa03511ca>] =3F mga_crtc_mode_set+0x149a/0x25d0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.679178] 
>> [<ffffffff812eb827>] =3F idr_get_empty_slot+0x187/0x3e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.679872] 
>> [<ffffffff812eb427>] =3F idr_mark_full+0x57/0x70
>> Sep 10 15:53:27 testVS01OU kernel: [11777.680562] 
>> [<ffffffff812ebd66>] =3F idr_alloc+0x76/0xd0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.681251] 
>> [<ffffffffa0388939>] =3F drm_crtc_helper_set_mode+0x309/0x540 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.681954] 
>> [<ffffffffa0389969>] =3F drm_crtc_helper_set_config+0x8d9/0xb00 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.682654] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.683358] 
>> [<ffffffffa0317998>] =3F drm_mode_set_config_internal+0x68/0x100 [drm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.684050] 
>> [<ffffffffa03947cf>] =3F drm_fb_helper_pan_display+0x9f/0xe0 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.684726] 
>> [<ffffffff8135ba81>] =3F fb_pan_display+0xc1/0x180
>> Sep 10 15:53:27 testVS01OU kernel: [11777.685384] 
>> [<ffffffff81356166>] =3F bit_update_start+0x26/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.686021] 
>> [<ffffffff81355b01>] =3F fbcon_switch+0x391/0x540
>> Sep 10 15:53:27 testVS01OU kernel: [11777.686641] 
>> [<ffffffff813cd31f>] =3F redraw_screen+0x15f/0x240
>> Sep 10 15:53:27 testVS01OU kernel: [11777.687240] 
>> [<ffffffff813542aa>] =3F fbcon_blank+0x23a/0x2f0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.687819] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.688391] 
>> [<ffffffff810c923e>] =3F console_unlock+0x1ee/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.688956] 
>> [<ffffffff81150919>] =3F irq_work_queue+0x9/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.689510] 
>> [<ffffffff810c9042>] =3F wake_up_klogd+0x32/0x40
>> Sep 10 15:53:27 testVS01OU kernel: [11777.690054] 
>> [<ffffffff810c9dd0>] =3F vprintk_emit+0x2b0/0x4e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.690584] 
>> [<ffffffff81594af7>] =3F _raw_spin_lock_irqsave+0x17/0x70
>> Sep 10 15:53:27 testVS01OU kernel: [11777.691112] 
>> [<ffffffff810da4e6>] =3F internal_add_timer+0x36/0xa0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.691639] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.692173] 
>> [<ffffffff810dc7d4>] =3F mod_timer+0x154/0x1d0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.692708] 
>> [<ffffffff813cde81>] =3F do_unblank_screen+0xb1/0x1e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.693247] 
>> [<ffffffff812fa209>] =3F bust_spinlocks+0x19/0x40
>> Sep 10 15:53:27 testVS01OU kernel: [11777.693779] 
>> [<ffffffff810196a1>] =3F oops_end+0x41/0x120
>> Sep 10 15:53:27 testVS01OU kernel: [11777.694304] 
>> [<ffffffff8158b86d>] =3F no_context+0x2fc/0x336
>> Sep 10 15:53:27 testVS01OU kernel: [11777.694821] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.695330] 
>> [<ffffffff81069b7b>] =3F ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.695834] 
>> [<ffffffff811927fd>] =3F handle_mm_fault+0x28d/0x1700
>> Sep 10 15:53:27 testVS01OU kernel: [11777.696343] 
>> [<ffffffff815910cf>] =3F schedule+0x2f/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.696854] 
>> [<ffffffff812f8e24>] =3F call_rwsem_down_read_failed+0x14/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.697363] 
>> [<ffffffff81064499>] =3F __do_page_fault+0x1b9/0x510
>> Sep 10 15:53:27 testVS01OU kernel: [11777.697896] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.698398] 
>> [<ffffffff812fe903>] =3F copy_page_to_iter+0x83/0x320
>> Sep 10 15:53:27 testVS01OU kernel: [11777.698901] 
>> [<ffffffff81166e20>] =3F generic_file_read_iter+0x2c0/0x5c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.699407] 
>> [<ffffffff8159491c>] =3F _raw_spin_lock_irq+0xc/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.699910] 
>> [<ffffffff81212835>] =3F fsnotify+0x335/0x4b0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.700411] 
>> [<ffffffff811d302f>] =3F __vfs_read+0xaf/0xe0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.700904] 
>> [<ffffffff811d43ed>] =3F vfs_read+0x8d/0x150
>> Sep 10 15:53:27 testVS01OU kernel: [11777.701393] 
>> [<ffffffff811d46ab>] =3F SyS_pread64+0x9b/0xb0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.701877] 
>> [<ffffffff81594eb2>] =3F system_call_fastpath+0x16/0x75
>> Sep 10 15:53:27 testVS01OU kernel: [11777.702365] Code: f7 00 00 e9 
>> 25 ff ff ff 0f 0b 4c 89 e8 49 c1 ed 05 48 c1 e8 03 83 e0 03 4c 09 e8 
>> 80 b8 44 c9 82 81 00 41 0f 95 c5 e9 19 fd ff ff <0f> 0b 0f 0b 66 66 
>> 66 66 90 41 55 45 31 c0 31 d2 41 b9 04 00 00
>> Sep 10 15:53:27 testVS01OU kernel: [11777.703486] RIP 
>> [<ffffffff8106749c>] change_page_attr_set_clr+0x44c/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.704013]  RSP 
>> <ffff88001d52e9d8>
>> Sep 10 15:53:27 testVS01OU kernel: [11777.704528] ---[ end trace 
>> 0371e8f24f53a075 ]---
>
> If you need other informations/tests tell me and I'll post them.
> Any help is appreciated.
>
> Thanks for any reply and sorry for my bad english.


--------------020508020507050502090501
Content-Type: text/plain; charset=UTF-8;
 name="W10.cfg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="W10.cfg"

bmFtZT0nVzEwJwpidWlsZGVyPSJodm0iCiNkZXZpY2VfbW9kZWxfb3ZlcnJpZGU9Ii91c3Iv
bGliL3hlbi9iaW4vcWVtdS1nZGIiCm1lbW9yeT00MDk2CnZjcHVzPTIKYWNwaV9zMz0wCmFj
cGlfczQ9MApoZHR5cGU9ImFoY2kiCnZpZj1bJ2JyaWRnZT14ZW5icjAsbWFjPTAwOjE2OjNl
OmZlOjdhOmI5J10KI2Rpc2s9WycvbW50L3ZtL2Rpc2tzL1cxMC5kaXNrMS54bSxyYXcsaGRh
LHJ3JywnLHJhdyxoZGIscm8sY2Ryb20nXQpkaXNrPVsnL21udC92bS9kaXNrcy9XMTAuZGlz
azEuY293LXNuMSxxY293MixoZGEscncnLCcscmF3LGhkYixybyxjZHJvbSddCmJvb3Q9J2Nk
JwpkZXZpY2VfbW9kZWxfdmVyc2lvbj0icWVtdS14ZW4iCnZpcmlkaWFuPTEKeGVuX3BsYXRm
b3JtX3BjaT0xCnZuYz0wCiN2bmN1bnVzZWQ9MQojdm5jbGlzdGVuPSIwLjAuMC4wIgprZXlt
YXA9Iml0Igpvbl9jcmFzaD0iZGVzdHJveSIKdmdhPSJxeGwiCnNwaWNlPTEKc3BpY2Vob3N0
PScwLjAuMC4wJwpzcGljZXBvcnQ9NjAwMApzcGljZWRpc2FibGVfdGlja2V0aW5nPTEKc3Bp
Y2V2ZGFnZW50PTEKc3BpY2VfY2xpcGJvYXJkX3NoYXJpbmc9MAojc3BpY2VfaW1hZ2VfY29t
cHJlc3Npb249Imx6NCIKI3NwaWNlX3N0cmVhbWluZ192aWRlbz0ib2ZmIgojc3BpY2Vfc3Ry
ZWFtaW5nX3ZpZGVvPSJhbGwiCiNzcGljZV92aWRlb19jb2RlY3M9ImdzdHJlYW1lcjp2cDgi
CnNwaWNldXNicmVkaXJlY3Rpb249NApzb3VuZGh3PSJoZGEiCmxvY2FsdGltZT0xCiN1c2J2
ZXJzaW9uPTMKbXNfdm1fZ2VuaWQ9ImdlbmVyYXRlIgoKZGV2aWNlX21vZGVsX2FyZ3M9WyIt
dHJhY2UiLCJldmVudHM9L2V0Yy94ZW4vcWVtdS10cmFjZS1vcHRpb25zIl0KCg==
--------------020508020507050502090501
Content-Type: text/plain; charset=UTF-8;
 name=".config"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=".config"

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4
L3g4NiA0LjEuNiBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR182NEJJVD15CkNPTkZJ
R19YODZfNjQ9eQpDT05GSUdfWDg2PXkKQ09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpD
T05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFPXkKQ09ORklHX09VVFBVVF9GT1JNQVQ9
ImVsZjY0LXg4Ni02NCIKQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdz
L3g4Nl82NF9kZWZjb25maWciCkNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpDT05GSUdfU1RB
Q0tUUkFDRV9TVVBQT1JUPXkKQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQ09O
RklHX01NVT15CkNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQpDT05GSUdfTkVFRF9TR19E
TUFfTEVOR1RIPXkKQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0JV
Rz15CkNPTkZJR19HRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUz15CkNPTkZJR19HRU5F
UklDX0hXRUlHSFQ9eQpDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQpDT05GSUdfUldT
RU1fWENIR0FERF9BTEdPUklUSE09eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9
eQpDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJ
TkVfU0laRT15CkNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CkNPTkZJR19ORUVE
X1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0Vf
RklSU1RfQ0hVTks9eQpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CkNPTkZJ
R19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0hVR0VfUE1EX1NI
QVJFPXkKQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEI9eQpDT05GSUdfWk9ORV9E
TUEzMj15CkNPTkZJR19BVURJVF9BUkNIPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1J
WkVEX0lOTElOSU5HPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkK
Q09ORklHX0hBVkVfSU5URUxfVFhUPXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfWDg2
X0hUPXkKQ09ORklHX0FSQ0hfSFdFSUdIVF9DRkxBR1M9Ii1mY2FsbC1zYXZlZC1yZGkgLWZj
YWxsLXNhdmVkLXJzaSAtZmNhbGwtc2F2ZWQtcmR4IC1mY2FsbC1zYXZlZC1yY3ggLWZjYWxs
LXNhdmVkLXI4IC1mY2FsbC1zYXZlZC1yOSAtZmNhbGwtc2F2ZWQtcjEwIC1mY2FsbC1zYXZl
ZC1yMTEiCkNPTkZJR19BUkNIX1NVUFBPUlRTX1VQUk9CRVM9eQpDT05GSUdfRklYX0VBUkxZ
Q09OX01FTT15CkNPTkZJR19QR1RBQkxFX0xFVkVMUz00CkNPTkZJR19ERUZDT05GSUdfTElT
VD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkNPTkZJR19JUlFfV09S
Sz15CkNPTkZJR19CVUlMRFRJTUVfRVhUQUJMRV9TT1JUPXkKCiMKIyBHZW5lcmFsIHNldHVw
CiMKQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgpDT05GSUdfQ1JPU1NfQ09NUElMRT0i
IgojIENPTkZJR19DT01QSUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfTE9DQUxWRVJTSU9O
PSIiCiMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVf
S0VSTkVMX0daSVA9eQpDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQpDT05GSUdfSEFWRV9L
RVJORUxfTFpNQT15CkNPTkZJR19IQVZFX0tFUk5FTF9YWj15CkNPTkZJR19IQVZFX0tFUk5F
TF9MWk89eQpDT05GSUdfSEFWRV9LRVJORUxfTFo0PXkKIyBDT05GSUdfS0VSTkVMX0daSVAg
aXMgbm90IHNldAojIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAojIENPTkZJR19L
RVJORUxfTFpNQSBpcyBub3Qgc2V0CkNPTkZJR19LRVJORUxfWFo9eQojIENPTkZJR19LRVJO
RUxfTFpPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xaNCBpcyBub3Qgc2V0CkNPTkZJ
R19ERUZBVUxUX0hPU1ROQU1FPSIobm9uZSkiCkNPTkZJR19TV0FQPXkKQ09ORklHX1NZU1ZJ
UEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09O
RklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQpDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSD15
CkNPTkZJR19GSEFORExFPXkKQ09ORklHX1VTRUxJQj15CkNPTkZJR19BVURJVD15CkNPTkZJ
R19IQVZFX0FSQ0hfQVVESVRTWVNDQUxMPXkKQ09ORklHX0FVRElUU1lTQ0FMTD15CkNPTkZJ
R19BVURJVF9XQVRDSD15CkNPTkZJR19BVURJVF9UUkVFPXkKCiMKIyBJUlEgc3Vic3lzdGVt
CiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9
eQpDT05GSUdfR0VORVJJQ19JUlFfTEVHQUNZX0FMTE9DX0hXSVJRPXkKQ09ORklHX0dFTkVS
SUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfQ0hJUD15CkNPTkZJR19JUlFf
RE9NQUlOPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CiMgQ09ORklHX0lSUV9ET01BSU5f
REVCVUcgaXMgbm90IHNldApDT05GSUdfSVJRX0ZPUkNFRF9USFJFQURJTkc9eQpDT05GSUdf
U1BBUlNFX0lSUT15CkNPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRz15CkNPTkZJR19BUkNI
X0NMT0NLU09VUkNFX0RBVEE9eQpDT05GSUdfQ0xPQ0tTT1VSQ0VfVkFMSURBVEVfTEFTVF9D
WUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQpDT05GSUdfR0VORVJJQ19D
TE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVD15CkNP
TkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05GSUdfR0VORVJJQ19D
TU9TX1VQREFURT15CgojCiMgVGltZXJzIHN1YnN5c3RlbQojCkNPTkZJR19USUNLX09ORVNI
T1Q9eQpDT05GSUdfTk9fSFpfQ09NTU9OPXkKIyBDT05GSUdfSFpfUEVSSU9ESUMgaXMgbm90
IHNldApDT05GSUdfTk9fSFpfSURMRT15CiMgQ09ORklHX05PX0haX0ZVTEwgaXMgbm90IHNl
dAojIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkNPTkZJR19ISUdIX1JFU19USU1FUlM9eQoK
IwojIENQVS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElDS19D
UFVfQUNDT1VOVElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19C
U0RfUFJPQ0VTU19BQ0NUPXkKQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQpDT05GSUdf
VEFTS1NUQVRTPXkKQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CkNPTkZJR19UQVNLX1hBQ0NU
PXkKQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNP
TkZJR19UUkVFX1JDVT15CkNPTkZJR19TUkNVPXkKIyBDT05GSUdfVEFTS1NfUkNVIGlzIG5v
dCBzZXQKQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQojIENPTkZJR19SQ1VfVVNFUl9RUyBp
cyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFOT1VUPTY0CkNPTkZJR19SQ1VfRkFOT1VUX0xFQUY9
MTYKIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFT
VF9OT19IWj15CiMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9LVEhSRUFEX1BSSU89MAojIENPTkZJR19SQ1VfTk9DQl9DUFUgaXMgbm90IHNldAojIENP
TkZJR19SQ1VfRVhQRURJVEVfQk9PVCBpcyBub3Qgc2V0CkNPTkZJR19CVUlMRF9CSU4yQz15
CiMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcK
Q09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0xMgpDT05GSUdfSEFWRV9VTlNUQUJMRV9T
Q0hFRF9DTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HPXkKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4PXkKQ09ORklHX05VTUFfQkFMQU5DSU5HPXkKIyBD
T05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEIGlzIG5vdCBzZXQKQ09ORklH
X0NHUk9VUFM9eQojIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldApDT05GSUdfQ0dS
T1VQX0ZSRUVaRVI9eQpDT05GSUdfQ0dST1VQX0RFVklDRT15CkNPTkZJR19DUFVTRVRTPXkK
Q09ORklHX1BST0NfUElEX0NQVVNFVD15CkNPTkZJR19DR1JPVVBfQ1BVQUNDVD15CkNPTkZJ
R19QQUdFX0NPVU5URVI9eQpDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfU1dBUD15CiMg
Q09ORklHX01FTUNHX1NXQVBfRU5BQkxFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTUNHX0tN
RU0gaXMgbm90IHNldAojIENPTkZJR19DR1JPVVBfSFVHRVRMQiBpcyBub3Qgc2V0CkNPTkZJ
R19DR1JPVVBfUEVSRj15CkNPTkZJR19DR1JPVVBfU0NIRUQ9eQpDT05GSUdfRkFJUl9HUk9V
UF9TQ0hFRD15CiMgQ09ORklHX0NGU19CQU5EV0lEVEggaXMgbm90IHNldAojIENPTkZJR19S
VF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfQ0dST1VQPXkKIyBDT05GSUdf
REVCVUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkU9
eQpDT05GSUdfTkFNRVNQQUNFUz15CkNPTkZJR19VVFNfTlM9eQpDT05GSUdfSVBDX05TPXkK
Q09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05TPXkKQ09ORklHX05FVF9OUz15CkNPTkZJ
R19TQ0hFRF9BVVRPR1JPVVA9eQojIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBz
ZXQKQ09ORklHX1JFTEFZPXkKQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQ09ORklHX0lOSVRS
QU1GU19TT1VSQ0U9IiIKQ09ORklHX1JEX0daSVA9eQpDT05GSUdfUkRfQlpJUDI9eQpDT05G
SUdfUkRfTFpNQT15CkNPTkZJR19SRF9YWj15CkNPTkZJR19SRF9MWk89eQpDT05GSUdfUkRf
TFo0PXkKIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApDT05GSUdf
U1lTQ1RMPXkKQ09ORklHX0FOT05fSU5PREVTPXkKQ09ORklHX0hBVkVfVUlEMTY9eQpDT05G
SUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CUEY9eQpDT05GSUdfRVhQRVJUPXkKQ09ORklHX1VJRDE2PXkKQ09ORklH
X01VTFRJVVNFUj15CkNPTkZJR19TR0VUTUFTS19TWVNDQUxMPXkKQ09ORklHX1NZU0ZTX1NZ
U0NBTEw9eQojIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkNPTkZJR19LQUxM
U1lNUz15CiMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19QUklOVEs9
eQpDT05GSUdfQlVHPXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CQVNFX0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKIyBD
T05GSUdfQlBGX1NZU0NBTEwgaXMgbm90IHNldApDT05GSUdfU0hNRU09eQpDT05GSUdfQUlP
PXkKQ09ORklHX0FEVklTRV9TWVNDQUxMUz15CkNPTkZJR19QQ0lfUVVJUktTPXkKIyBDT05G
SUdfRU1CRURERUQgaXMgbm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CgojCiMg
S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdfUEVSRl9F
VkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKQ09O
RklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0
CkNPTkZJR19TTEFCPXkKIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiMgQ09ORklHX1NMT0Ig
aXMgbm90IHNldAojIENPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlSSU5HIGlzIG5vdCBzZXQK
Q09ORklHX1BST0ZJTElORz15CkNPTkZJR19UUkFDRVBPSU5UUz15CkNPTkZJR19PUFJPRklM
RT1tCiMgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWCBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX09QUk9GSUxFPXkKQ09ORklHX09QUk9GSUxFX05NSV9USU1FUj15CkNPTkZJR19L
UFJPQkVTPXkKQ09ORklHX0pVTVBfTEFCRUw9eQpDT05GSUdfT1BUUFJPQkVTPXkKQ09ORklH
X0tQUk9CRVNfT05fRlRSQUNFPXkKQ09ORklHX1VQUk9CRVM9eQojIENPTkZJR19IQVZFXzY0
QklUX0FMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VO
QUxJR05FRF9BQ0NFU1M9eQpDT05GSUdfQVJDSF9VU0VfQlVJTFRJTl9CU1dBUD15CkNPTkZJ
R19LUkVUUFJPQkVTPXkKQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSPXkKQ09ORklHX0hB
VkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JFUz15CkNPTkZJR19IQVZFX0tS
RVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05GSUdfSEFWRV9LUFJPQkVT
X09OX0ZUUkFDRT15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKQ09ORklHX0hBVkVf
RE1BX0FUVFJTPXkKQ09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJ
Q19TTVBfSURMRV9USFJFQUQ9eQpDT05GSUdfSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1Nf
QVBJPXkKQ09ORklHX0hBVkVfQ0xLPXkKQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CkNP
TkZJR19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5U
U19SRUdTPXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFW
RV9QRVJGX0VWRU5UU19OTUk9eQpDT05GSUdfSEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFW
RV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15
CkNPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRz15CkNPTkZJR19IQVZFX0NNUFhD
SEdfTE9DQUw9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0RPVUJMRT15CkNPTkZJR19BUkNIX1dB
TlRfQ09NUEFUX0lQQ19QQVJTRV9WRVJTSU9OPXkKQ09ORklHX0FSQ0hfV0FOVF9PTERfQ09N
UEFUX0lQQz15CkNPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVI9eQpDT05GSUdfU0VD
Q09NUF9GSUxURVI9eQpDT05GSUdfSEFWRV9DQ19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19D
Q19TVEFDS1BST1RFQ1RPUj15CiMgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX05PTkUgaXMg
bm90IHNldApDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfUkVHVUxBUj15CiMgQ09ORklHX0ND
X1NUQUNLUFJPVEVDVE9SX1NUUk9ORyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0NPTlRFWFRf
VFJBQ0tJTkc9eQpDT05GSUdfSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTj15CkNPTkZJ
R19IQVZFX0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFS
RU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVA9eQpDT05GSUdfSEFW
RV9BUkNIX1NPRlRfRElSVFk9eQpDT05GSUdfTU9EVUxFU19VU0VfRUxGX1JFTEE9eQpDT05G
SUdfSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0s9eQpDT05GSUdfQVJDSF9IQVNfRUxGX1JB
TkRPTUlaRT15CkNPTkZJR19PTERfU0lHU1VTUEVORDM9eQpDT05GSUdfQ09NUEFUX09MRF9T
SUdBQ1RJT049eQoKIwojIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwojCiMgQ09ORklH
X0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFTX0dDT1ZfUFJPRklMRV9B
TEw9eQojIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKQ09O
RklHX1NMQUJJTkZPPXkKQ09ORklHX1JUX01VVEVYRVM9eQpDT05GSUdfQkFTRV9TTUFMTD0w
CkNPTkZJR19NT0RVTEVTPXkKQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKQ09ORklHX01P
RFVMRV9VTkxPQUQ9eQpDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CkNPTkZJR19NT0RW
RVJTSU9OUz15CiMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PRFVMRV9TSUcgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQ09NUFJFU1Mg
aXMgbm90IHNldApDT05GSUdfU1RPUF9NQUNISU5FPXkKQ09ORklHX0JMT0NLPXkKQ09ORklH
X0JMS19ERVZfQlNHPXkKQ09ORklHX0JMS19ERVZfQlNHTElCPXkKQ09ORklHX0JMS19ERVZf
SU5URUdSSVRZPXkKQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiMgQ09ORklHX0JMS19D
TURMSU5FX1BBUlNFUiBpcyBub3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKQ09ORklH
X1BBUlRJVElPTl9BRFZBTkNFRD15CkNPTkZJR19BQ09STl9QQVJUSVRJT049eQojIENPTkZJ
R19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNPUk5fUEFS
VElUSU9OX0VFU09YIGlzIG5vdCBzZXQKQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQoj
IENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDT1JO
X1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CkNPTkZJR19BQ09STl9QQVJUSVRJT05f
UklTQ0lYPXkKIyBDT05GSUdfQUlYX1BBUlRJVElPTiBpcyBub3Qgc2V0CkNPTkZJR19PU0Zf
UEFSVElUSU9OPXkKQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CkNPTkZJR19BVEFSSV9QQVJU
SVRJT049eQpDT05GSUdfTUFDX1BBUlRJVElPTj15CkNPTkZJR19NU0RPU19QQVJUSVRJT049
eQpDT05GSUdfQlNEX0RJU0tMQUJFTD15CkNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQpD
T05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJF
TD15CkNPTkZJR19MRE1fUEFSVElUSU9OPXkKIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX1NHSV9QQVJUSVRJT049eQpDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CkNP
TkZJR19TVU5fUEFSVElUSU9OPXkKQ09ORklHX0tBUk1BX1BBUlRJVElPTj15CkNPTkZJR19F
RklfUEFSVElUSU9OPXkKIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NNRExJTkVfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0JMT0NLX0NPTVBB
VD15CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19JT1NDSEVEX05PT1A9eQpDT05GSUdf
SU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19JT1NDSEVEX0NGUT15CkNPTkZJR19DRlFfR1JP
VVBfSU9TQ0hFRD15CiMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9DRlE9eQojIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCkNPTkZJR19QUkVFTVBUX05PVElGSUVSUz15CkNP
TkZJR19QQURBVEE9eQpDT05GSUdfVU5JTkxJTkVfU1BJTl9VTkxPQ0s9eQpDT05GSUdfSU5M
SU5FX1NQSU5fVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQpDT05G
SUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NL
PXkKQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKQ09ORklHX0FSQ0hfU1VQUE9S
VFNfQVRPTUlDX1JNVz15CkNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKQ09ORklHX1JX
U0VNX1NQSU5fT05fT1dORVI9eQpDT05GSUdfTE9DS19TUElOX09OX09XTkVSPXkKQ09ORklH
X0FSQ0hfVVNFX1FVRVVFX1JXTE9DSz15CkNPTkZJR19RVUVVRV9SV0xPQ0s9eQpDT05GSUdf
RlJFRVpFUj15CgojCiMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiMKQ09ORklHX1pP
TkVfRE1BPXkKQ09ORklHX1NNUD15CkNPTkZJR19YODZfRkVBVFVSRV9OQU1FUz15CkNPTkZJ
R19YODZfWDJBUElDPXkKQ09ORklHX1g4Nl9NUFBBUlNFPXkKIyBDT05GSUdfWDg2X0VYVEVO
REVEX1BMQVRGT1JNIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9MUFNTPXkKIyBDT05G
SUdfWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UgaXMgbm90IHNldApDT05GSUdfSU9TRl9NQkk9
bQojIENPTkZJR19JT1NGX01CSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19YODZfU1VQUE9S
VFNfTUVNT1JZX0ZBSUxVUkU9eQpDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkK
Q09ORklHX0hZUEVSVklTT1JfR1VFU1Q9eQpDT05GSUdfUEFSQVZJUlQ9eQojIENPTkZJR19Q
QVJBVklSVF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpD
T05GSUdfWEVOPXkKQ09ORklHX1hFTl9ET00wPXkKQ09ORklHX1hFTl9QVkhWTT15CkNPTkZJ
R19YRU5fTUFYX0RPTUFJTl9NRU1PUlk9NTAwCkNPTkZJR19YRU5fU0FWRV9SRVNUT1JFPXkK
IyBDT05GSUdfWEVOX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9QVkg9eQpDT05G
SUdfS1ZNX0dVRVNUPXkKIyBDT05GSUdfS1ZNX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklHX1BBUkFWSVJU
X0NMT0NLPXkKQ09ORklHX05PX0JPT1RNRU09eQojIENPTkZJR19NSzggaXMgbm90IHNldAoj
IENPTkZJR19NUFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNPUkUyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUFUT00gaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFU9eQpDT05GSUdfWDg2
X0lOVEVSTk9ERV9DQUNIRV9TSElGVD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpD
T05GSUdfWDg2X1RTQz15CkNPTkZJR19YODZfQ01QWENIRzY0PXkKQ09ORklHX1g4Nl9DTU9W
PXkKQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKQ09ORklHX1g4Nl9ERUJVR0NU
TE1TUj15CiMgQ09ORklHX1BST0NFU1NPUl9TRUxFQ1QgaXMgbm90IHNldApDT05GSUdfQ1BV
X1NVUF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CkNPTkZJR19DUFVfU1VQX0NFTlRB
VVI9eQpDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VNVUxBVEVfUlRDPXkKQ09O
RklHX0RNST15CkNPTkZJR19HQVJUX0lPTU1VPXkKQ09ORklHX0NBTEdBUllfSU9NTVU9eQpD
T05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQpDT05GSUdfU1dJT1RM
Qj15CkNPTkZJR19JT01NVV9IRUxQRVI9eQojIENPTkZJR19NQVhTTVAgaXMgbm90IHNldApD
T05GSUdfTlJfQ1BVUz01MTIKQ09ORklHX1NDSEVEX1NNVD15CkNPTkZJR19TQ0hFRF9NQz15
CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNPTkZJR19QUkVFTVBUX1ZPTFVO
VEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05GSUdfWDg2X0xPQ0FMX0FQ
SUM9eQpDT05GSUdfWDg2X0lPX0FQSUM9eQpDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tF
Tl9CT09UX0lSUVM9eQpDT05GSUdfWDg2X01DRT15CkNPTkZJR19YODZfTUNFX0lOVEVMPXkK
Q09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKQ09ORklH
X1g4Nl9NQ0VfSU5KRUNUPW0KQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUj15CkNPTkZJR19Y
ODZfMTZCSVQ9eQpDT05GSUdfWDg2X0VTUEZJWDY0PXkKQ09ORklHX1g4Nl9WU1lTQ0FMTF9F
TVVMQVRJT049eQpDT05GSUdfSThLPW0KQ09ORklHX01JQ1JPQ09ERT15CkNPTkZJR19NSUNS
T0NPREVfSU5URUw9eQpDT05GSUdfTUlDUk9DT0RFX0FNRD15CkNPTkZJR19NSUNST0NPREVf
T0xEX0lOVEVSRkFDRT15CkNPTkZJR19NSUNST0NPREVfSU5URUxfRUFSTFk9eQpDT05GSUdf
TUlDUk9DT0RFX0FNRF9FQVJMWT15CkNPTkZJR19NSUNST0NPREVfRUFSTFk9eQpDT05GSUdf
WDg2X01TUj1tCkNPTkZJR19YODZfQ1BVSUQ9bQpDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82
NEJJVD15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpDT05GSUdfWDg2X0RJUkVD
VF9HQlBBR0VTPXkKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2
XzY0X0FDUElfTlVNQT15CkNPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKQ09ORklH
X05VTUFfRU1VPXkKQ09ORklHX05PREVTX1NISUZUPTYKQ09ORklHX0FSQ0hfU1BBUlNFTUVN
X0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQ09ORklHX0FSQ0hf
U0VMRUNUX01FTU9SWV9NT0RFTD15CiMgQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFIGlzIG5v
dCBzZXQKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9J
TlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKQ09ORklHX1NFTEVDVF9NRU1PUllfTU9E
RUw9eQpDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CkNPTkZJR19TUEFSU0VNRU09eQpDT05G
SUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CkNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkK
Q09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VO
QUJMRT15CkNPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUj15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19IQVZFX01FTUJMT0NLPXkKQ09ORklHX0hB
VkVfTUVNQkxPQ0tfTk9ERV9NQVA9eQpDT05GSUdfQVJDSF9ESVNDQVJEX01FTUJMT0NLPXkK
Q09ORklHX01FTU9SWV9JU09MQVRJT049eQojIENPTkZJR19NT1ZBQkxFX05PREUgaXMgbm90
IHNldApDT05GSUdfSEFWRV9CT09UTUVNX0lORk9fTk9ERT15CkNPTkZJR19NRU1PUllfSE9U
UExVRz15CkNPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQpDT05GSUdfTUVNT1JZX0hP
VFJFTU9WRT15CkNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQpDT05GSUdfU1BMSVRfUFRM
T0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19NRU1PUllfQkFMTE9PTj15CkNPTkZJR19CQUxMT09OX0NPTVBBQ1RJT049eQpDT05GSUdf
Q09NUEFDVElPTj15CkNPTkZJR19NSUdSQVRJT049eQpDT05GSUdfQVJDSF9FTkFCTEVfSFVH
RVBBR0VfTUlHUkFUSU9OPXkKQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQ09ORklHX1pP
TkVfRE1BX0ZMQUc9MQpDT05GSUdfQk9VTkNFPXkKQ09ORklHX1ZJUlRfVE9fQlVTPXkKQ09O
RklHX01NVV9OT1RJRklFUj15CkNPTkZJR19LU009eQpDT05GSUdfREVGQVVMVF9NTUFQX01J
Tl9BRERSPTY1NTM2CkNPTkZJR19BUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFPXkKQ09O
RklHX01FTU9SWV9GQUlMVVJFPXkKQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tCkNPTkZJR19U
UkFOU1BBUkVOVF9IVUdFUEFHRT15CiMgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FM
V0FZUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFPXkK
IyBDT05GSUdfQ0xFQU5DQUNIRSBpcyBub3Qgc2V0CkNPTkZJR19GUk9OVFNXQVA9eQojIENP
TkZJR19DTUEgaXMgbm90IHNldApDT05GSUdfTUVNX1NPRlRfRElSVFk9eQpDT05GSUdfWlNX
QVA9eQpDT05GSUdfWlBPT0w9eQpDT05GSUdfWkJVRD1tCkNPTkZJR19aU01BTExPQz1tCiMg
Q09ORklHX1BHVEFCTEVfTUFQUElORyBpcyBub3Qgc2V0CiMgQ09ORklHX1pTTUFMTE9DX1NU
QVQgaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKQ09ORklHX1g4
Nl9QTUVNX0xFR0FDWT15CiMgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04gaXMg
bm90IHNldApDT05GSUdfWDg2X1JFU0VSVkVfTE9XPTY0CkNPTkZJR19NVFJSPXkKQ09ORklH
X01UUlJfU0FOSVRJWkVSPXkKQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxU
PTAKQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUPTEKQ09ORklH
X1g4Nl9QQVQ9eQpDT05GSUdfQVJDSF9VU0VTX1BHX1VOQ0FDSEVEPXkKQ09ORklHX0FSQ0hf
UkFORE9NPXkKQ09ORklHX1g4Nl9TTUFQPXkKIyBDT05GSUdfWDg2X0lOVEVMX01QWCBpcyBu
b3Qgc2V0CkNPTkZJR19FRkk9eQpDT05GSUdfRUZJX1NUVUI9eQpDT05GSUdfRUZJX01JWEVE
PXkKQ09ORklHX1NFQ0NPTVA9eQojIENPTkZJR19IWl8xMDAgaXMgbm90IHNldApDT05GSUdf
SFpfMjUwPXkKIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSFpfMTAwMCBp
cyBub3Qgc2V0CkNPTkZJR19IWj0yNTAKQ09ORklHX1NDSEVEX0hSVElDSz15CkNPTkZJR19L
RVhFQz15CkNPTkZJR19DUkFTSF9EVU1QPXkKIyBDT05GSUdfS0VYRUNfSlVNUCBpcyBub3Qg
c2V0CkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKQ09ORklHX1JFTE9DQVRBQkxF
PXkKIyBDT05GSUdfUkFORE9NSVpFX0JBU0UgaXMgbm90IHNldApDT05GSUdfUEhZU0lDQUxf
QUxJR049MHgyMDAwMDAKQ09ORklHX0hPVFBMVUdfQ1BVPXkKIyBDT05GSUdfQk9PVFBBUkFN
X0hPVFBMVUdfQ1BVMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0hPVFBMVUdfQ1BVMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ01E
TElORV9CT09MIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTElWRVBBVENIPXkKQ09ORklHX0FS
Q0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9I
T1RSRU1PVkU9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9eQoKIwojIFBvd2Vy
IG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwojCkNPTkZJR19BUkNIX0hJQkVSTkFUSU9O
X0hFQURFUj15CkNPTkZJR19TVVNQRU5EPXkKQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CkNP
TkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTPXkKQ09ORklHX0hJQkVSTkFUSU9OPXkKQ09ORklH
X1BNX1NURF9QQVJUSVRJT049IiIKQ09ORklHX1BNX1NMRUVQPXkKQ09ORklHX1BNX1NMRUVQ
X1NNUD15CiMgQ09ORklHX1BNX0FVVE9TTEVFUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNX1dB
S0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9ERUJVRz15CkNPTkZJ
R19QTV9BRFZBTkNFRF9ERUJVRz15CiMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qg
c2V0CkNPTkZJR19QTV9TTEVFUF9ERUJVRz15CiMgQ09ORklHX0RQTV9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1BNX1RSQUNFX1JUQyBpcyBub3Qgc2V0CkNPTkZJR19QTV9DTEs9
eQojIENPTkZJR19XUV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CkNPTkZJ
R19BQ1BJPXkKQ09ORklHX0FDUElfTEVHQUNZX1RBQkxFU19MT09LVVA9eQpDT05GSUdfQVJD
SF9NSUdIVF9IQVZFX0FDUElfUERDPXkKQ09ORklHX0FDUElfU1lTVEVNX1BPV0VSX1NUQVRF
U19TVVBQT1JUPXkKQ09ORklHX0FDUElfU0xFRVA9eQojIENPTkZJR19BQ1BJX1BST0NGU19Q
T1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRUNfREVCVUdGUyBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX0FDPW0KQ09ORklHX0FDUElfQkFUVEVSWT1tCkNPTkZJR19BQ1BJX0JVVFRP
Tj1tCkNPTkZJR19BQ1BJX1ZJREVPPW0KQ09ORklHX0FDUElfRkFOPW0KQ09ORklHX0FDUElf
RE9DSz15CkNPTkZJR19BQ1BJX1BST0NFU1NPUj1tCkNPTkZJR19BQ1BJX0lQTUk9bQpDT05G
SUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9S
PW0KQ09ORklHX0FDUElfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX05VTUE9eQojIENPTkZJR19B
Q1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfSU5JVFJEX1RBQkxFX09W
RVJSSURFPXkKIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1BJX1BD
SV9TTE9UPXkKQ09ORklHX1g4Nl9QTV9USU1FUj15CkNPTkZJR19BQ1BJX0NPTlRBSU5FUj15
CkNPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXkKQ09ORklHX0FDUElfSE9UUExVR19JT0FQ
SUM9eQpDT05GSUdfQUNQSV9TQlM9bQpDT05GSUdfQUNQSV9IRUQ9eQojIENPTkZJR19BQ1BJ
X0NVU1RPTV9NRVRIT0QgaXMgbm90IHNldApDT05GSUdfQUNQSV9CR1JUPXkKIyBDT05GSUdf
QUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldApDT05GSUdfSEFWRV9BQ1BJ
X0FQRUk9eQpDT05GSUdfSEFWRV9BQ1BJX0FQRUlfTk1JPXkKQ09ORklHX0FDUElfQVBFST15
CkNPTkZJR19BQ1BJX0FQRUlfR0hFUz15CkNPTkZJR19BQ1BJX0FQRUlfUENJRUFFUj15CkNP
TkZJR19BQ1BJX0FQRUlfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19BQ1BJX0FQRUlfRUlO
SiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfQVBFSV9FUlNUX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX0FDUElfRVhUTE9HPXkKIyBDT05GSUdfUE1JQ19PUFJFR0lPTiBpcyBub3Qgc2V0
CkNPTkZJR19TRkk9eQoKIwojIENQVSBGcmVxdWVuY3kgc2NhbGluZwojCkNPTkZJR19DUFVf
RlJFUT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfQ09NTU9OPXkKQ09ORklHX0NQVV9GUkVRX1NU
QVQ9bQojIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAojIENPTkZJ
R19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NQ
VV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJF
UV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09W
X0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFO
Q0U9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCkNPTkZJR19DUFVfRlJFUV9H
T1ZfVVNFUlNQQUNFPW0KQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CkNPTkZJR19D
UFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KCiMKIyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcg
ZHJpdmVycwojCkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKQ09ORklHX1g4Nl9QQ0NfQ1BV
RlJFUT1tCkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPW0KQ09ORklHX1g4Nl9BQ1BJX0NQVUZS
RVFfQ1BCPXkKQ09ORklHX1g4Nl9QT1dFUk5PV19LOD1tCkNPTkZJR19YODZfQU1EX0ZSRVFf
U0VOU0lUSVZJVFk9bQpDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTz1tCkNPTkZJR19Y
ODZfUDRfQ0xPQ0tNT0Q9bQoKIwojIHNoYXJlZCBvcHRpb25zCiMKQ09ORklHX1g4Nl9TUEVF
RFNURVBfTElCPW0KCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CkNPTkZJR19D
UFVfSURMRV9HT1ZfTEFEREVSPXkKQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIyBDT05G
SUdfQVJDSF9ORUVEU19DUFVfSURMRV9DT1VQTEVEIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVM
X0lETEU9eQoKIwojIE1lbW9yeSBwb3dlciBzYXZpbmdzCiMKQ09ORklHX0k3MzAwX0lETEVf
SU9BVF9DSEFOTkVMPXkKQ09ORklHX0k3MzAwX0lETEU9bQoKIwojIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKIwpDT05GSUdfUENJPXkKQ09ORklHX1BDSV9ESVJFQ1Q9eQpDT05GSUdfUENJ
X01NQ09ORklHPXkKQ09ORklHX1BDSV9YRU49eQpDT05GSUdfUENJX0RPTUFJTlM9eQojIENP
TkZJR19QQ0lfQ05CMjBMRV9RVUlSSyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lFUE9SVEJVUz15
CkNPTkZJR19IT1RQTFVHX1BDSV9QQ0lFPXkKQ09ORklHX1BDSUVBRVI9eQojIENPTkZJR19Q
Q0lFX0VDUkMgaXMgbm90IHNldApDT05GSUdfUENJRUFFUl9JTkpFQ1Q9bQpDT05GSUdfUENJ
RUFTUE09eQojIENPTkZJR19QQ0lFQVNQTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lF
QVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05GSUdfUENJRV9Q
TUU9eQpDT05GSUdfUENJX0JVU19BRERSX1RfNjRCSVQ9eQpDT05GSUdfUENJX01TST15CiMg
Q09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfUkVBTExPQ19FTkFCTEVf
QVVUTz15CkNPTkZJR19QQ0lfU1RVQj1tCkNPTkZJR19YRU5fUENJREVWX0ZST05URU5EPW0K
Q09ORklHX0hUX0lSUT15CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9JT1Y9eQpDT05G
SUdfUENJX1BSST15CkNPTkZJR19QQ0lfUEFTSUQ9eQpDT05GSUdfUENJX0xBQkVMPXkKCiMK
IyBQQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfSVNBX0RNQV9BUEk9eQpD
T05GSUdfQU1EX05CPXkKQ09ORklHX1BDQ0FSRD1tCkNPTkZJR19QQ01DSUE9bQpDT05GSUdf
UENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRCVVM9eQoKIwojIFBDLWNhcmQgYnJpZGdl
cwojCkNPTkZJR19ZRU5UQT1tCkNPTkZJR19ZRU5UQV9PMj15CkNPTkZJR19ZRU5UQV9SSUNP
SD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9FTkVfVFVORT15CkNPTkZJR19Z
RU5UQV9UT1NISUJBPXkKQ09ORklHX1BENjcyOT1tCkNPTkZJR19JODIwOTI9bQpDT05GSUdf
UENDQVJEX05PTlNUQVRJQz15CkNPTkZJR19IT1RQTFVHX1BDST15CkNPTkZJR19IT1RQTFVH
X1BDSV9BQ1BJPXkKQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNPW0KQ09ORklHX0hPVFBM
VUdfUENJX0NQQ0k9eQpDT05GSUdfSE9UUExVR19QQ0lfQ1BDSV9aVDU1NTA9bQpDT05GSUdf
SE9UUExVR19QQ0lfQ1BDSV9HRU5FUklDPW0KQ09ORklHX0hPVFBMVUdfUENJX1NIUEM9bQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9TWVNGQj15CgojCiMgRXhl
Y3V0YWJsZSBmaWxlIGZvcm1hdHMgLyBFbXVsYXRpb25zCiMKQ09ORklHX0JJTkZNVF9FTEY9
eQpDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQpDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRf
RUxGX0hFQURFUlM9eQpDT05GSUdfQklORk1UX1NDUklQVD15CiMgQ09ORklHX0hBVkVfQU9V
VCBpcyBub3Qgc2V0CkNPTkZJR19CSU5GTVRfTUlTQz1tCkNPTkZJR19DT1JFRFVNUD15CkNP
TkZJR19JQTMyX0VNVUxBVElPTj15CkNPTkZJR19JQTMyX0FPVVQ9eQpDT05GSUdfWDg2X1gz
Mj15CkNPTkZJR19DT01QQVQ9eQpDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkK
Q09ORklHX1NZU1ZJUENfQ09NUEFUPXkKQ09ORklHX0tFWVNfQ09NUEFUPXkKQ09ORklHX1g4
Nl9ERVZfRE1BX09QUz15CkNPTkZJR19QTUNfQVRPTT15CkNPTkZJR19ORVQ9eQpDT05GSUdf
Q09NUEFUX05FVExJTktfTUVTU0FHRVM9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCkNP
TkZJR19QQUNLRVQ9eQpDT05GSUdfUEFDS0VUX0RJQUc9bQpDT05GSUdfVU5JWD15CkNPTkZJ
R19VTklYX0RJQUc9bQpDT05GSUdfWEZSTT15CkNPTkZJR19YRlJNX0FMR089bQpDT05GSUdf
WEZSTV9VU0VSPW0KQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CkNPTkZJR19YRlJNX01JR1JB
VEU9eQojIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldApDT05GSUdfWEZSTV9J
UENPTVA9bQpDT05GSUdfTkVUX0tFWT1tCkNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQpDT05G
SUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5DRURfUk9V
VEVSPXkKQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTPXkKQ09ORklHX0lQX01VTFRJUExFX1RB
QkxFUz15CkNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQpDT05GSUdfSVBfUk9VVEVfVkVS
Qk9TRT15CkNPTkZJR19JUF9ST1VURV9DTEFTU0lEPXkKIyBDT05GSUdfSVBfUE5QIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9JUElQPW0KQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCkNPTkZJ
R19ORVRfSVBfVFVOTkVMPW0KQ09ORklHX05FVF9JUEdSRT1tCkNPTkZJR19ORVRfSVBHUkVf
QlJPQURDQVNUPXkKQ09ORklHX0lQX01ST1VURT15CkNPTkZJR19JUF9NUk9VVEVfTVVMVElQ
TEVfVEFCTEVTPXkKQ09ORklHX0lQX1BJTVNNX1YxPXkKQ09ORklHX0lQX1BJTVNNX1YyPXkK
Q09ORklHX1NZTl9DT09LSUVTPXkKQ09ORklHX05FVF9JUFZUST1tCkNPTkZJR19ORVRfVURQ
X1RVTk5FTD1tCkNPTkZJR19ORVRfRk9VPW0KQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15
CkNPTkZJR19HRU5FVkU9bQpDT05GSUdfSU5FVF9BSD1tCkNPTkZJR19JTkVUX0VTUD1tCkNP
TkZJR19JTkVUX0lQQ09NUD1tCkNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KQ09ORklHX0lO
RVRfVFVOTkVMPW0KQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCkNPTkZJR19J
TkVUX1hGUk1fTU9ERV9UVU5ORUw9bQpDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCkNP
TkZJR19JTkVUX0xSTz1tCkNPTkZJR19JTkVUX0RJQUc9bQpDT05GSUdfSU5FVF9UQ1BfRElB
Rz1tCkNPTkZJR19JTkVUX1VEUF9ESUFHPW0KQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkK
Q09ORklHX1RDUF9DT05HX0JJQz1tCkNPTkZJR19UQ1BfQ09OR19DVUJJQz15CkNPTkZJR19U
Q1BfQ09OR19XRVNUV09PRD1tCkNPTkZJR19UQ1BfQ09OR19IVENQPW0KQ09ORklHX1RDUF9D
T05HX0hTVENQPW0KQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KQ09ORklHX1RDUF9DT05HX1ZF
R0FTPW0KQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KQ09ORklHX1RDUF9DT05HX0xQPW0K
Q09ORklHX1RDUF9DT05HX1ZFTk89bQpDT05GSUdfVENQX0NPTkdfWUVBSD1tCkNPTkZJR19U
Q1BfQ09OR19JTExJTk9JUz1tCkNPTkZJR19UQ1BfQ09OR19EQ1RDUD1tCkNPTkZJR19ERUZB
VUxUX0NVQklDPXkKIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKQ09ORklHX0RF
RkFVTFRfVENQX0NPTkc9ImN1YmljIgpDT05GSUdfVENQX01ENVNJRz15CkNPTkZJR19JUFY2
PXkKQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkK
Q09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQpDT05GSUdfSU5FVDZfQUg9bQpDT05GSUdf
SU5FVDZfRVNQPW0KQ09ORklHX0lORVQ2X0lQQ09NUD1tCkNPTkZJR19JUFY2X01JUDY9eQpD
T05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQpDT05GSUdfSU5FVDZfVFVOTkVMPW0KQ09ORklH
X0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQpDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RV
Tk5FTD1tCkNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCkNPTkZJR19JTkVUNl9YRlJN
X01PREVfUk9VVEVPUFRJTUlaQVRJT049bQpDT05GSUdfSVBWNl9WVEk9bQpDT05GSUdfSVBW
Nl9TSVQ9bQpDT05GSUdfSVBWNl9TSVRfNlJEPXkKQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZ
UEU9eQpDT05GSUdfSVBWNl9UVU5ORUw9bQpDT05GSUdfSVBWNl9HUkU9bQpDT05GSUdfSVBW
Nl9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9TVUJUUkVFUz15CkNPTkZJR19JUFY2
X01ST1VURT15CkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdf
SVBWNl9QSU1TTV9WMj15CiMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKQ09ORklHX05F
VFdPUktfU0VDTUFSSz15CkNPTkZJR19ORVRfUFRQX0NMQVNTSUZZPXkKIyBDT05GSUdfTkVU
V09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUj15CiMg
Q09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfQURW
QU5DRUQ9eQpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tCgojCiMgQ29yZSBOZXRmaWx0ZXIg
Q29uZmlndXJhdGlvbgojCkNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCkNPTkZJR19ORVRG
SUxURVJfTkVUTElOS19BQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0K
Q09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCkNPTkZJR19ORl9DT05OVFJBQ0s9bQpD
T05GSUdfTkZfTE9HX0NPTU1PTj1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CkNPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVM9eQpD
T05GSUdfTkZfQ09OTlRSQUNLX1BST0NGUz15CkNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRT
PXkKQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUPXkKQ09ORklHX05GX0NPTk5UUkFDS19U
SU1FU1RBTVA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUz15CkNPTkZJR19ORl9DVF9Q
Uk9UT19EQ0NQPW0KQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCkNPTkZJR19ORl9DVF9QUk9U
T19TQ1RQPW0KQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0FNQU5EQT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KQ09ORklHX05GX0NPTk5U
UkFDS19IMzIzPW0KQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0JST0FEQ0FTVD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU05NUD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0FORT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KQ09ORklH
X05GX0NPTk5UUkFDS19URlRQPW0KQ09ORklHX05GX0NUX05FVExJTks9bQpDT05GSUdfTkZf
Q1RfTkVUTElOS19USU1FT1VUPW0KQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSPW0KQ09O
RklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFX0NUPXkKQ09ORklHX05GX05BVD1tCkNPTkZJ
R19ORl9OQVRfTkVFREVEPXkKQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KQ09ORklHX05G
X05BVF9QUk9UT19VRFBMSVRFPW0KQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KQ09ORklH
X05GX05BVF9BTUFOREE9bQpDT05GSUdfTkZfTkFUX0ZUUD1tCkNPTkZJR19ORl9OQVRfSVJD
PW0KQ09ORklHX05GX05BVF9TSVA9bQpDT05GSUdfTkZfTkFUX1RGVFA9bQpDT05GSUdfTkZf
TkFUX1JFRElSRUNUPW0KQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWT1tCkNPTkZJR19ORl9U
QUJMRVM9bQpDT05GSUdfTkZfVEFCTEVTX0lORVQ9bQpDT05GSUdfTkZUX0VYVEhEUj1tCkNP
TkZJR19ORlRfTUVUQT1tCkNPTkZJR19ORlRfQ1Q9bQpDT05GSUdfTkZUX1JCVFJFRT1tCkNP
TkZJR19ORlRfSEFTSD1tCkNPTkZJR19ORlRfQ09VTlRFUj1tCkNPTkZJR19ORlRfTE9HPW0K
Q09ORklHX05GVF9MSU1JVD1tCkNPTkZJR19ORlRfTUFTUT1tCkNPTkZJR19ORlRfUkVESVI9
bQpDT05GSUdfTkZUX05BVD1tCkNPTkZJR19ORlRfUVVFVUU9bQpDT05GSUdfTkZUX1JFSkVD
VD1tCkNPTkZJR19ORlRfUkVKRUNUX0lORVQ9bQpDT05GSUdfTkZUX0NPTVBBVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRBQkxFUz1tCgojCiMgWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzCiMK
Q09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFS
Sz1tCkNPTkZJR19ORVRGSUxURVJfWFRfU0VUPW0KCiMKIyBYdGFibGVzIHRhcmdldHMKIwpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVD1tCkNPTkZJR19ORVRGSUxURVJfWFRf
VEFSR0VUX0NIRUNLU1VNPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCkNPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRf
Q1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfSEw9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tCkNP
TkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX0xFRD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX05BVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX05GTE9HPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1t
CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RB
UkdFVF9SRURJUkVDVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRT1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RSQUNFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RDUE9QVFNUUklQPW0KCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklM
VEVSX1hUX01BVENIX0FERFJUWVBFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfQ0xVU1RFUj1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9DT05OTEFCRUw9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5M
SU1JVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQpDT05GSUdfTkVU
RklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
Q1BVPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9ERVZHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOPW0KQ09ORklHX05FVEZJTFRFUl9YVF9N
QVRDSF9FU1A9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9ITD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZT
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQPW0KQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9MRU5HVEg9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQ09O
RklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCkNPTkZJR19O
RVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9P
U0Y9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9QT0xJQ1k9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQpDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX1FVT1RBPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkNPTkZJR19ORVRGSUxURVJfWFRf
TUFUQ0hfUkVDRU5UPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X1NUQVRFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpDT05GSUdf
TkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
VENQTVNTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9VMzI9bQpDT05GSUdfSVBfU0VUPW0KQ09ORklHX0lQX1NFVF9NQVg9
MjU2CkNPTkZJR19JUF9TRVRfQklUTUFQX0lQPW0KQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBN
QUM9bQpDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQ
PW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCkNPTkZJR19JUF9TRVRfSEFTSF9JUFBP
UlQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQpDT05GSUdfSVBfU0VUX0hBU0hf
SVBQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCkNPTkZJR19JUF9TRVRfSEFT
SF9ORVRQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCkNPTkZJR19JUF9TRVRf
SEFTSF9ORVRORVQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVD1tCkNPTkZJR19JUF9T
RVRfSEFTSF9ORVRJRkFDRT1tCkNPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQpDT05GSUdfSVBf
VlM9bQpDT05GSUdfSVBfVlNfSVBWNj15CiMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCgojCiMgSVBWUyB0cmFuc3BvcnQgcHJvdG9j
b2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAojCkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQpD
T05GSUdfSVBfVlNfUFJPVE9fVURQPXkKQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CkNP
TkZJR19JUF9WU19QUk9UT19FU1A9eQpDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQpDT05GSUdf
SVBfVlNfUFJPVE9fU0NUUD15CgojCiMgSVBWUyBzY2hlZHVsZXIKIwpDT05GSUdfSVBfVlNf
UlI9bQpDT05GSUdfSVBfVlNfV1JSPW0KQ09ORklHX0lQX1ZTX0xDPW0KQ09ORklHX0lQX1ZT
X1dMQz1tCkNPTkZJR19JUF9WU19GTz1tCkNPTkZJR19JUF9WU19MQkxDPW0KQ09ORklHX0lQ
X1ZTX0xCTENSPW0KQ09ORklHX0lQX1ZTX0RIPW0KQ09ORklHX0lQX1ZTX1NIPW0KQ09ORklH
X0lQX1ZTX1NFRD1tCkNPTkZJR19JUF9WU19OUT1tCgojCiMgSVBWUyBTSCBzY2hlZHVsZXIK
IwpDT05GSUdfSVBfVlNfU0hfVEFCX0JJVFM9OAoKIwojIElQVlMgYXBwbGljYXRpb24gaGVs
cGVyCiMKQ09ORklHX0lQX1ZTX0ZUUD1tCkNPTkZJR19JUF9WU19ORkNUPXkKQ09ORklHX0lQ
X1ZTX1BFX1NJUD1tCgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklH
X05GX0RFRlJBR19JUFY0PW0KQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KQ09ORklHX05G
X0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CkNPTkZJR19ORl9UQUJMRVNfSVBWND1tCkNPTkZJ
R19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCkNPTkZJR19ORlRfUkVKRUNUX0lQVjQ9bQpDT05G
SUdfTkZfVEFCTEVTX0FSUD1tCkNPTkZJR19ORl9MT0dfQVJQPW0KQ09ORklHX05GX0xPR19J
UFY0PW0KQ09ORklHX05GX1JFSkVDVF9JUFY0PW0KQ09ORklHX05GX05BVF9JUFY0PW0KQ09O
RklHX05GVF9DSEFJTl9OQVRfSVBWND1tCkNPTkZJR19ORl9OQVRfTUFTUVVFUkFERV9JUFY0
PW0KQ09ORklHX05GVF9NQVNRX0lQVjQ9bQojIENPTkZJR19ORlRfUkVESVJfSVBWNCBpcyBu
b3Qgc2V0CkNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCkNPTkZJR19ORl9OQVRfUFJPVE9f
R1JFPW0KQ09ORklHX05GX05BVF9QUFRQPW0KQ09ORklHX05GX05BVF9IMzIzPW0KQ09ORklH
X0lQX05GX0lQVEFCTEVTPW0KQ09ORklHX0lQX05GX01BVENIX0FIPW0KQ09ORklHX0lQX05G
X01BVENIX0VDTj1tCkNPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUj1tCkNPTkZJR19JUF9O
Rl9NQVRDSF9UVEw9bQpDT05GSUdfSVBfTkZfRklMVEVSPW0KQ09ORklHX0lQX05GX1RBUkdF
VF9SRUpFQ1Q9bQpDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KQ09ORklHX0lQX05G
X05BVD1tCkNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19JUF9ORl9U
QVJHRVRfTkVUTUFQPW0KQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkNPTkZJR19J
UF9ORl9NQU5HTEU9bQpDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCkNPTkZJR19J
UF9ORl9UQVJHRVRfRUNOPW0KQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQpDT05GSUdfSVBf
TkZfUkFXPW0KQ09ORklHX0lQX05GX1NFQ1VSSVRZPW0KQ09ORklHX0lQX05GX0FSUFRBQkxF
Uz1tCkNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQpDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1t
CgojCiMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KIwpDT05GSUdfTkZfREVGUkFH
X0lQVjY9bQpDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQpDT05GSUdfTkZfVEFCTEVTX0lQ
VjY9bQpDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQpDT05GSUdfTkZUX1JFSkVDVF9J
UFY2PW0KQ09ORklHX05GX1JFSkVDVF9JUFY2PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09O
RklHX05GX05BVF9JUFY2PW0KQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCkNPTkZJR19O
Rl9OQVRfTUFTUVVFUkFERV9JUFY2PW0KQ09ORklHX05GVF9NQVNRX0lQVjY9bQojIENPTkZJ
R19ORlRfUkVESVJfSVBWNiBpcyBub3Qgc2V0CkNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpD
T05GSUdfSVA2X05GX01BVENIX0FIPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfSEw9bQpDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9
bQpDT05GSUdfSVA2X05GX01BVENIX01IPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRF
Uj1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1t
CkNPTkZJR19JUDZfTkZfRklMVEVSPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0K
Q09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQpDT05GSUdfSVA2X05GX01BTkdMRT1t
CkNPTkZJR19JUDZfTkZfUkFXPW0KQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCkNPTkZJR19J
UDZfTkZfTkFUPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19J
UDZfTkZfVEFSR0VUX05QVD1tCgojCiMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlv
bgojCkNPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCkNPTkZJR19ORl9UQUJMRVNfQlJJ
REdFPW0KQ09ORklHX05GVF9CUklER0VfTUVUQT1tCkNPTkZJR19ORlRfQlJJREdFX1JFSkVD
VD1tCkNPTkZJR19ORl9MT0dfQlJJREdFPW0KQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1t
CkNPTkZJR19CUklER0VfRUJUX0JST1VURT1tCkNPTkZJR19CUklER0VfRUJUX1RfRklMVEVS
PW0KQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQpDT05GSUdfQlJJREdFX0VCVF84MDJfMz1t
CkNPTkZJR19CUklER0VfRUJUX0FNT05HPW0KQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KQ09O
RklHX0JSSURHRV9FQlRfSVA9bQpDT05GSUdfQlJJREdFX0VCVF9JUDY9bQpDT05GSUdfQlJJ
REdFX0VCVF9MSU1JVD1tCkNPTkZJR19CUklER0VfRUJUX01BUks9bQpDT05GSUdfQlJJREdF
X0VCVF9QS1RUWVBFPW0KQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KQ09ORklHX0JSSURHRV9F
QlRfVkxBTj1tCkNPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KQ09ORklHX0JSSURHRV9F
QlRfRE5BVD1tCkNPTkZJR19CUklER0VfRUJUX01BUktfVD1tCkNPTkZJR19CUklER0VfRUJU
X1JFRElSRUNUPW0KQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCkNPTkZJR19CUklER0VfRUJU
X0xPRz1tCkNPTkZJR19CUklER0VfRUJUX05GTE9HPW0KQ09ORklHX0lQX0RDQ1A9bQpDT05G
SUdfSU5FVF9EQ0NQX0RJQUc9bQoKIwojIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbgojCiMg
Q09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldApDT05GSUdfSVBfRENDUF9D
Q0lEMz15CiMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldApDT05GSUdf
SVBfRENDUF9URlJDX0xJQj15CgojCiMgRENDUCBLZXJuZWwgSGFja2luZwojCiMgQ09ORklH
X0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldApDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCkNPTkZJ
R19JUF9TQ1RQPW0KQ09ORklHX05FVF9TQ1RQUFJPQkU9bQojIENPTkZJR19TQ1RQX0RCR19P
QkpDTlQgaXMgbm90IHNldApDT05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX01ENT15
CiMgQ09ORklHX1NDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEExIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkUgaXMgbm90IHNldApDT05GSUdf
U0NUUF9DT09LSUVfSE1BQ19NRDU9eQpDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkK
Q09ORklHX1JEUz1tCkNPTkZJR19SRFNfUkRNQT1tCkNPTkZJR19SRFNfVENQPW0KIyBDT05G
SUdfUkRTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1RJUEM9bQpDT05GSUdfVElQQ19NRURJ
QV9JQj15CkNPTkZJR19USVBDX01FRElBX1VEUD15CkNPTkZJR19BVE09bQpDT05GSUdfQVRN
X0NMSVA9bQojIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKQ09ORklHX0FU
TV9MQU5FPW0KQ09ORklHX0FUTV9NUE9BPW0KQ09ORklHX0FUTV9CUjI2ODQ9bQojIENPTkZJ
R19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKQ09ORklHX0wyVFA9bQpDT05GSUdf
TDJUUF9ERUJVR0ZTPW0KQ09ORklHX0wyVFBfVjM9eQpDT05GSUdfTDJUUF9JUD1tCkNPTkZJ
R19MMlRQX0VUSD1tCkNPTkZJR19TVFA9bQpDT05GSUdfR0FSUD1tCkNPTkZJR19NUlA9bQpD
T05GSUdfQlJJREdFPW0KQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKQ09ORklHX0JS
SURHRV9WTEFOX0ZJTFRFUklORz15CkNPTkZJR19IQVZFX05FVF9EU0E9eQpDT05GSUdfVkxB
Tl84MDIxUT1tCkNPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQpDT05GSUdfVkxBTl84MDIxUV9N
VlJQPXkKQ09ORklHX0RFQ05FVD1tCiMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNl
dApDT05GSUdfTExDPW0KQ09ORklHX0xMQzI9bQpDT05GSUdfSVBYPW0KIyBDT05GSUdfSVBY
X0lOVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19BVEFMSz1tCkNPTkZJR19ERVZfQVBQTEVUQUxL
PW0KQ09ORklHX0lQRERQPW0KQ09ORklHX0lQRERQX0VOQ0FQPXkKIyBDT05GSUdfWDI1IGlz
IG5vdCBzZXQKQ09ORklHX0xBUEI9bQpDT05GSUdfUEhPTkVUPW0KQ09ORklHXzZMT1dQQU49
bQpDT05GSUdfNkxPV1BBTl9OSEM9bQpDT05GSUdfNkxPV1BBTl9OSENfREVTVD1tCkNPTkZJ
R182TE9XUEFOX05IQ19GUkFHTUVOVD1tCkNPTkZJR182TE9XUEFOX05IQ19IT1A9bQpDT05G
SUdfNkxPV1BBTl9OSENfSVBWNj1tCkNPTkZJR182TE9XUEFOX05IQ19NT0JJTElUWT1tCkNP
TkZJR182TE9XUEFOX05IQ19ST1VUSU5HPW0KQ09ORklHXzZMT1dQQU5fTkhDX1VEUD1tCkNP
TkZJR19JRUVFODAyMTU0PW0KQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUPW0KQ09ORklHX0lF
RUU4MDIxNTRfNkxPV1BBTj1tCiMgQ09ORklHX01BQzgwMjE1NCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfU0NIRUQ9eQoKIwojIFF1ZXVlaW5nL1NjaGVkdWxpbmcKIwpDT05GSUdfTkVUX1ND
SF9DQlE9bQpDT05GSUdfTkVUX1NDSF9IVEI9bQpDT05GSUdfTkVUX1NDSF9IRlNDPW0KQ09O
RklHX05FVF9TQ0hfQVRNPW0KQ09ORklHX05FVF9TQ0hfUFJJTz1tCkNPTkZJR19ORVRfU0NI
X01VTFRJUT1tCkNPTkZJR19ORVRfU0NIX1JFRD1tCkNPTkZJR19ORVRfU0NIX1NGQj1tCkNP
TkZJR19ORVRfU0NIX1NGUT1tCkNPTkZJR19ORVRfU0NIX1RFUUw9bQpDT05GSUdfTkVUX1ND
SF9UQkY9bQpDT05GSUdfTkVUX1NDSF9HUkVEPW0KQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0K
Q09ORklHX05FVF9TQ0hfTkVURU09bQpDT05GSUdfTkVUX1NDSF9EUlI9bQpDT05GSUdfTkVU
X1NDSF9NUVBSSU89bQpDT05GSUdfTkVUX1NDSF9DSE9LRT1tCkNPTkZJR19ORVRfU0NIX1FG
UT1tCkNPTkZJR19ORVRfU0NIX0NPREVMPW0KQ09ORklHX05FVF9TQ0hfRlFfQ09ERUw9bQpD
T05GSUdfTkVUX1NDSF9GUT1tCkNPTkZJR19ORVRfU0NIX0hIRj1tCkNPTkZJR19ORVRfU0NI
X1BJRT1tCkNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQpDT05GSUdfTkVUX1NDSF9QTFVHPW0K
CiMKIyBDbGFzc2lmaWNhdGlvbgojCkNPTkZJR19ORVRfQ0xTPXkKQ09ORklHX05FVF9DTFNf
QkFTSUM9bQpDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KQ09ORklHX05FVF9DTFNfUk9VVEU0
PW0KQ09ORklHX05FVF9DTFNfRlc9bQpDT05GSUdfTkVUX0NMU19VMzI9bQpDT05GSUdfQ0xT
X1UzMl9QRVJGPXkKQ09ORklHX0NMU19VMzJfTUFSSz15CkNPTkZJR19ORVRfQ0xTX1JTVlA9
bQpDT05GSUdfTkVUX0NMU19SU1ZQNj1tCkNPTkZJR19ORVRfQ0xTX0ZMT1c9bQpDT05GSUdf
TkVUX0NMU19DR1JPVVA9bQpDT05GSUdfTkVUX0NMU19CUEY9bQpDT05GSUdfTkVUX0VNQVRD
SD15CkNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCkNPTkZJR19ORVRfRU1BVENIX0NNUD1t
CkNPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KQ09O
RklHX05FVF9FTUFUQ0hfTUVUQT1tCkNPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQpDT05GSUdf
TkVUX0VNQVRDSF9DQU5JRD1tCkNPTkZJR19ORVRfRU1BVENIX0lQU0VUPW0KQ09ORklHX05F
VF9DTFNfQUNUPXkKQ09ORklHX05FVF9BQ1RfUE9MSUNFPW0KQ09ORklHX05FVF9BQ1RfR0FD
VD1tCkNPTkZJR19HQUNUX1BST0I9eQpDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQpDT05GSUdf
TkVUX0FDVF9JUFQ9bQpDT05GSUdfTkVUX0FDVF9OQVQ9bQpDT05GSUdfTkVUX0FDVF9QRURJ
VD1tCkNPTkZJR19ORVRfQUNUX1NJTVA9bQpDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KQ09O
RklHX05FVF9BQ1RfQ1NVTT1tCkNPTkZJR19ORVRfQUNUX1ZMQU49bQpDT05GSUdfTkVUX0FD
VF9CUEY9bQpDT05GSUdfTkVUX0FDVF9DT05OTUFSSz1tCkNPTkZJR19ORVRfQ0xTX0lORD15
CkNPTkZJR19ORVRfU0NIX0ZJRk89eQpDT05GSUdfRENCPXkKQ09ORklHX0ROU19SRVNPTFZF
Uj1tCkNPTkZJR19CQVRNQU5fQURWPW0KQ09ORklHX0JBVE1BTl9BRFZfQkxBPXkKQ09ORklH
X0JBVE1BTl9BRFZfREFUPXkKQ09ORklHX0JBVE1BTl9BRFZfTkM9eQpDT05GSUdfQkFUTUFO
X0FEVl9NQ0FTVD15CiMgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgaXMgbm90IHNldApDT05G
SUdfT1BFTlZTV0lUQ0g9bQpDT05GSUdfT1BFTlZTV0lUQ0hfR1JFPW0KQ09ORklHX09QRU5W
U1dJVENIX1ZYTEFOPW0KQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRT1tCkNPTkZJR19WU09D
S0VUUz1tCkNPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUz1tCkNPTkZJR19ORVRMSU5LX01N
QVA9eQpDT05GSUdfTkVUTElOS19ESUFHPW0KQ09ORklHX01QTFM9eQpDT05GSUdfTkVUX01Q
TFNfR1NPPXkKQ09ORklHX01QTFNfUk9VVElORz1tCiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90IHNldApDT05GSUdfUlBTPXkKQ09ORklH
X1JGU19BQ0NFTD15CkNPTkZJR19YUFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09O
RklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09O
RklHX0JRTD15CkNPTkZJR19CUEZfSklUPXkKQ09ORklHX05FVF9GTE9XX0xJTUlUPXkKCiMK
IyBOZXR3b3JrIHRlc3RpbmcKIwpDT05GSUdfTkVUX1BLVEdFTj1tCiMgQ09ORklHX05FVF9U
Q1BQUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfRFJPUF9NT05JVE9SPW0KQ09ORklHX0hB
TVJBRElPPXkKCiMKIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCiMKQ09ORklHX0FYMjU9bQoj
IENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldApDT05GSUdfTkVUUk9NPW0KQ09O
RklHX1JPU0U9bQoKIwojIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdf
TUtJU1M9bQpDT05GSUdfNlBBQ0s9bQpDT05GSUdfQlBRRVRIRVI9bQpDT05GSUdfQkFZQ09N
X1NFUl9GRFg9bQpDT05GSUdfQkFZQ09NX1NFUl9IRFg9bQpDT05GSUdfQkFZQ09NX1BBUj1t
CkNPTkZJR19ZQU09bQpDT05GSUdfQ0FOPW0KQ09ORklHX0NBTl9SQVc9bQpDT05GSUdfQ0FO
X0JDTT1tCkNPTkZJR19DQU5fR1c9bQoKIwojIENBTiBEZXZpY2UgRHJpdmVycwojCkNPTkZJ
R19DQU5fVkNBTj1tCkNPTkZJR19DQU5fU0xDQU49bQpDT05GSUdfQ0FOX0RFVj1tCkNPTkZJ
R19DQU5fQ0FMQ19CSVRUSU1JTkc9eQojIENPTkZJR19DQU5fTEVEUyBpcyBub3Qgc2V0CkNP
TkZJR19DQU5fU0pBMTAwMD1tCkNPTkZJR19DQU5fU0pBMTAwMF9JU0E9bQojIENPTkZJR19D
QU5fU0pBMTAwMF9QTEFURk9STSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fRU1TX1BDTUNJQT1t
CkNPTkZJR19DQU5fRU1TX1BDST1tCkNPTkZJR19DQU5fUEVBS19QQ01DSUE9bQpDT05GSUdf
Q0FOX1BFQUtfUENJPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVDPXkKQ09ORklHX0NBTl9LVkFT
RVJfUENJPW0KQ09ORklHX0NBTl9QTFhfUENJPW0KIyBDT05GSUdfQ0FOX0NfQ0FOIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FOX01fQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0NDNzcw
IGlzIG5vdCBzZXQKCiMKIyBDQU4gU1BJIGludGVyZmFjZXMKIwojIENPTkZJR19DQU5fTUNQ
MjUxWCBpcyBub3Qgc2V0CgojCiMgQ0FOIFVTQiBpbnRlcmZhY2VzCiMKQ09ORklHX0NBTl9F
TVNfVVNCPW0KQ09ORklHX0NBTl9FU0RfVVNCMj1tCkNPTkZJR19DQU5fR1NfVVNCPW0KQ09O
RklHX0NBTl9LVkFTRVJfVVNCPW0KQ09ORklHX0NBTl9QRUFLX1VTQj1tCkNPTkZJR19DQU5f
OERFVl9VU0I9bQpDT05GSUdfQ0FOX1NPRlRJTkc9bQpDT05GSUdfQ0FOX1NPRlRJTkdfQ1M9
bQojIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19JUkRBPW0K
CiMKIyBJckRBIHByb3RvY29scwojCkNPTkZJR19JUkxBTj1tCkNPTkZJR19JUk5FVD1tCkNP
TkZJR19JUkNPTU09bQojIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKCiMKIyBJckRB
IG9wdGlvbnMKIwpDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQpDT05GSUdfSVJEQV9G
QVNUX1JSPXkKIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CgojCiMgSW5mcmFyZWQt
cG9ydCBkZXZpY2UgZHJpdmVycwojCgojCiMgU0lSIGRldmljZSBkcml2ZXJzCiMKQ09ORklH
X0lSVFRZX1NJUj1tCgojCiMgRG9uZ2xlIHN1cHBvcnQKIwpDT05GSUdfRE9OR0xFPXkKQ09O
RklHX0VTSV9ET05HTEU9bQpDT05GSUdfQUNUSVNZU19ET05HTEU9bQpDT05GSUdfVEVLUkFN
X0RPTkdMRT1tCkNPTkZJR19UT0lNMzIzMl9ET05HTEU9bQpDT05GSUdfTElURUxJTktfRE9O
R0xFPW0KQ09ORklHX01BNjAwX0RPTkdMRT1tCkNPTkZJR19HSVJCSUxfRE9OR0xFPW0KQ09O
RklHX01DUDIxMjBfRE9OR0xFPW0KQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KQ09ORklH
X0FDVDIwMExfRE9OR0xFPW0KQ09ORklHX0tJTkdTVU5fRE9OR0xFPW0KQ09ORklHX0tTREFa
WkxFX0RPTkdMRT1tCkNPTkZJR19LUzk1OV9ET05HTEU9bQoKIwojIEZJUiBkZXZpY2UgZHJp
dmVycwojCkNPTkZJR19VU0JfSVJEQT1tCkNPTkZJR19TSUdNQVRFTF9GSVI9bQpDT05GSUdf
TlNDX0ZJUj1tCkNPTkZJR19XSU5CT05EX0ZJUj1tCkNPTkZJR19TTUNfSVJDQ19GSVI9bQpD
T05GSUdfQUxJX0ZJUj1tCkNPTkZJR19WTFNJX0ZJUj1tCkNPTkZJR19WSUFfRklSPW0KQ09O
RklHX01DU19GSVI9bQpDT05GSUdfQlQ9bQpDT05GSUdfQlRfQlJFRFI9eQpDT05GSUdfQlRf
UkZDT01NPW0KQ09ORklHX0JUX1JGQ09NTV9UVFk9eQpDT05GSUdfQlRfQk5FUD1tCkNPTkZJ
R19CVF9CTkVQX01DX0ZJTFRFUj15CkNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CkNP
TkZJR19CVF9DTVRQPW0KQ09ORklHX0JUX0hJRFA9bQpDT05GSUdfQlRfTEU9eQpDT05GSUdf
QlRfNkxPV1BBTj1tCiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0JU
X0RFQlVHRlM9eQoKIwojIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwojCkNPTkZJR19CVF9J
TlRFTD1tCkNPTkZJR19CVF9CQ009bQpDT05GSUdfQlRfSENJQlRVU0I9bQpDT05GSUdfQlRf
SENJQlRVU0JfQkNNPXkKQ09ORklHX0JUX0hDSUJUU0RJTz1tCkNPTkZJR19CVF9IQ0lVQVJU
PW0KQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQpDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQ09O
RklHX0JUX0hDSVVBUlRfQVRIM0s9eQpDT05GSUdfQlRfSENJVUFSVF9MTD15CkNPTkZJR19C
VF9IQ0lVQVJUXzNXSVJFPXkKQ09ORklHX0JUX0hDSVVBUlRfSU5URUw9eQpDT05GSUdfQlRf
SENJVUFSVF9CQ009eQpDT05GSUdfQlRfSENJQkNNMjAzWD1tCkNPTkZJR19CVF9IQ0lCUEEx
MFg9bQpDT05GSUdfQlRfSENJQkZVU0I9bQpDT05GSUdfQlRfSENJRFRMMT1tCkNPTkZJR19C
VF9IQ0lCVDNDPW0KQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIyBDT05GSUdfQlRfSENJQlRV
QVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hDSVZIQ0k9bQpDT05GSUdfQlRfTVJWTD1tCkNP
TkZJR19CVF9NUlZMX1NESU89bQpDT05GSUdfQlRfQVRIM0s9bQpDT05GSUdfQUZfUlhSUEM9
bQojIENPTkZJR19BRl9SWFJQQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SWEtBRD1tCkNP
TkZJR19GSUJfUlVMRVM9eQpDT05GSUdfV0lSRUxFU1M9eQpDT05GSUdfV0lSRUxFU1NfRVhU
PXkKQ09ORklHX1dFWFRfQ09SRT15CkNPTkZJR19XRVhUX1BST0M9eQpDT05GSUdfV0VYVF9T
UFk9eQpDT05GSUdfV0VYVF9QUklWPXkKQ09ORklHX0NGRzgwMjExPW0KIyBDT05GSUdfTkw4
MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9X
QVJOSU5HUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qg
c2V0CiMgQ09ORklHX0NGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUyBpcyBub3Qgc2V0CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIGlzIG5vdCBzZXQK
Q09ORklHX0NGRzgwMjExX1dFWFQ9eQpDT05GSUdfQ0ZHODAyMTFfV0VYVF9FWFBPUlQ9eQpD
T05GSUdfTElCODAyMTE9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfV0VQPW0KQ09ORklHX0xJ
QjgwMjExX0NSWVBUX0NDTVA9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCiMgQ09O
RklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExPW0KQ09ORklH
X01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CkNPTkZJ
R19NQUM4MDIxMV9SQ19NSU5TVFJFTF9IVD15CiMgQ09ORklHX01BQzgwMjExX1JDX01JTlNU
UkVMX1ZIVCBpcyBub3Qgc2V0CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVM
PXkKQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgpDT05GSUdfTUFD
ODAyMTFfTUVTSD15CkNPTkZJR19NQUM4MDIxMV9MRURTPXkKIyBDT05GSUdfTUFDODAyMTFf
REVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBp
cyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05G
SUdfV0lNQVg9bQpDT05GSUdfV0lNQVhfREVCVUdfTEVWRUw9OApDT05GSUdfUkZLSUxMPW0K
Q09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JG
S0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05FVF85UD1tCkNPTkZJR19ORVRfOVBfVklS
VElPPW0KQ09ORklHX05FVF85UF9SRE1BPW0KIyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FJRiBpcyBub3Qgc2V0CkNPTkZJR19DRVBIX0xJQj1tCiMgQ09O
RklHX0NFUEhfTElCX1BSRVRUWURFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9MSUJf
VVNFX0ROU19SRVNPTFZFUiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9bQpDT05GSUdfTkZDX0RJ
R0lUQUw9bQojIENPTkZJR19ORkNfTkNJIGlzIG5vdCBzZXQKQ09ORklHX05GQ19IQ0k9bQoj
IENPTkZJR19ORkNfU0hETEMgaXMgbm90IHNldAoKIwojIE5lYXIgRmllbGQgQ29tbXVuaWNh
dGlvbiAoTkZDKSBkZXZpY2VzCiMKQ09ORklHX05GQ19QTjUzMz1tCiMgQ09ORklHX05GQ19U
UkY3OTcwQSBpcyBub3Qgc2V0CkNPTkZJR19ORkNfTUVJX1BIWT1tCkNPTkZJR19ORkNfU0lN
PW0KQ09ORklHX05GQ19QT1JUMTAwPW0KQ09ORklHX05GQ19QTjU0ND1tCkNPTkZJR19ORkNf
UE41NDRfTUVJPW0KIyBDT05GSUdfTkZDX01JQ1JPUkVBRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05GQ19TVDIxTkZDQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0JQRl9KSVQ9eQoKIwojIERl
dmljZSBEcml2ZXJzCiMKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMKQ09ORklHX1VF
VkVOVF9IRUxQRVI9eQpDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCkNPTkZJR19ERVZU
TVBGUz15CiMgQ09ORklHX0RFVlRNUEZTX01PVU5UIGlzIG5vdCBzZXQKQ09ORklHX1NUQU5E
QUxPTkU9eQpDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CkNPTkZJR19GV19MT0FE
RVI9eQojIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfRVhU
UkFfRklSTVdBUkU9IiIKQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj15CiMgQ09ORklH
X0ZXX0xPQURFUl9VU0VSX0hFTFBFUl9GQUxMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19XQU5U
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19BTExPV19ERVZfQ09SRURVTVA9eQpDT05GSUdfREVW
X0NPUkVEVU1QPXkKIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfREVWUkVTIGlzIG5vdCBzZXQKQ09ORklHX1NZU19IWVBFUlZJU09SPXkKIyBDT05G
SUdfR0VORVJJQ19DUFVfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19HRU5FUklDX0NQVV9B
VVRPUFJPQkU9eQpDT05GSUdfUkVHTUFQPXkKQ09ORklHX1JFR01BUF9JMkM9bQpDT05GSUdf
UkVHTUFQX1NQST1tCkNPTkZJR19ETUFfU0hBUkVEX0JVRkZFUj15CiMgQ09ORklHX0ZFTkNF
X1RSQUNFIGlzIG5vdCBzZXQKCiMKIyBCdXMgZGV2aWNlcwojCkNPTkZJR19DT05ORUNUT1I9
eQpDT05GSUdfUFJPQ19FVkVOVFM9eQpDT05GSUdfTVREPW0KIyBDT05GSUdfTVREX1RFU1RT
IGlzIG5vdCBzZXQKQ09ORklHX01URF9SRURCT09UX1BBUlRTPW0KQ09ORklHX01URF9SRURC
T09UX0RJUkVDVE9SWV9CTE9DSz0tMQojIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFM
TE9DQVRFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldApDT05G
SUdfTVREX0FSN19QQVJUUz1tCgojCiMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBM
YXllcnMKIwpDT05GSUdfTVREX0JMS0RFVlM9bQpDT05GSUdfTVREX0JMT0NLPW0KQ09ORklH
X01URF9CTE9DS19STz1tCkNPTkZJR19GVEw9bQpDT05GSUdfTkZUTD1tCkNPTkZJR19ORlRM
X1JXPXkKQ09ORklHX0lORlRMPW0KQ09ORklHX1JGRF9GVEw9bQpDT05GSUdfU1NGREM9bQoj
IENPTkZJR19TTV9GVEwgaXMgbm90IHNldApDT05GSUdfTVREX09PUFM9bQpDT05GSUdfTVRE
X1NXQVA9bQojIENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSIGlzIG5vdCBzZXQKCiMK
IyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwojCkNPTkZJR19NVERfQ0ZJPW0KQ09ORklH
X01URF9KRURFQ1BST0JFPW0KQ09ORklHX01URF9HRU5fUFJPQkU9bQojIENPTkZJR19NVERf
Q0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8x
PXkKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKQ09ORklHX01URF9NQVBfQkFOS19X
SURUSF80PXkKIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAojIENP
TkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAojIENPTkZJR19NVERfTUFQ
X0JBTktfV0lEVEhfMzIgaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JMT15CkNPTkZJR19N
VERfQ0ZJX0kyPXkKIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9DRklfSTggaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCkNPTkZJR19N
VERfQ0ZJX0FNRFNURD1tCkNPTkZJR19NVERfQ0ZJX1NUQUE9bQpDT05GSUdfTVREX0NGSV9V
VElMPW0KQ09ORklHX01URF9SQU09bQpDT05GSUdfTVREX1JPTT1tCkNPTkZJR19NVERfQUJT
RU5UPW0KCiMKIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiMKQ09ORklHX01U
RF9DT01QTEVYX01BUFBJTkdTPXkKQ09ORklHX01URF9QSFlTTUFQPW0KIyBDT05GSUdfTVRE
X1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX01URF9TQkNfR1hYPW0KIyBDT05G
SUdfTVREX0FNRDc2WFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9JQ0hYUk9NIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX0VTQjJST00gaXMgbm90IHNldAojIENPTkZJR19NVERfQ0s4
MDRYUk9NIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1NDQjJfRkxBU0ggaXMgbm90IHNldApD
T05GSUdfTVREX05FVHRlbD1tCiMgQ09ORklHX01URF9MNDQwR1ggaXMgbm90IHNldApDT05G
SUdfTVREX1BDST1tCkNPTkZJR19NVERfUENNQ0lBPW0KIyBDT05GSUdfTVREX1BDTUNJQV9B
Tk9OWU1PVVMgaXMgbm90IHNldAojIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQK
Q09ORklHX01URF9JTlRFTF9WUl9OT1I9bQpDT05GSUdfTVREX1BMQVRSQU09bQojIENPTkZJ
R19NVERfTEFUQ0hfQUREUiBpcyBub3Qgc2V0CgojCiMgU2VsZi1jb250YWluZWQgTVREIGRl
dmljZSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CkNPTkZJR19N
VERfREFUQUZMQVNIPW0KIyBDT05GSUdfTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgaXMg
bm90IHNldAojIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CkNPTkZJR19N
VERfTTI1UDgwPW0KQ09ORklHX01URF9TU1QyNUw9bQpDT05GSUdfTVREX1NMUkFNPW0KQ09O
RklHX01URF9QSFJBTT1tCkNPTkZJR19NVERfTVREUkFNPW0KQ09ORklHX01URFJBTV9UT1RB
TF9TSVpFPTQwOTYKQ09ORklHX01URFJBTV9FUkFTRV9TSVpFPTEyOApDT05GSUdfTVREX0JM
T0NLMk1URD1tCgojCiMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCiMKIyBDT05GSUdf
TVREX0RPQ0czIGlzIG5vdCBzZXQKQ09ORklHX01URF9OQU5EX0VDQz1tCiMgQ09ORklHX01U
RF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldApDT05GSUdfTVREX05BTkQ9bQpDT05GSUdfTVRE
X05BTkRfQkNIPW0KQ09ORklHX01URF9OQU5EX0VDQ19CQ0g9eQpDT05GSUdfTVREX1NNX0NP
TU1PTj1tCiMgQ09ORklHX01URF9OQU5EX0RFTkFMSSBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9OQU5EX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NVERfTkFORF9PTUFQX0JDSF9CVUlM
RCBpcyBub3Qgc2V0CkNPTkZJR19NVERfTkFORF9JRFM9bQpDT05GSUdfTVREX05BTkRfUklD
T0g9bQpDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCiMgQ09ORklHX01URF9OQU5EX0RJ
U0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfRElT
S09OQ0hJUF9QUk9CRV9BRERSRVNTPTAKIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9C
QlRXUklURSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX0RPQ0c0IGlzIG5vdCBzZXQK
Q09ORklHX01URF9OQU5EX0NBRkU9bQpDT05GSUdfTVREX05BTkRfTkFORFNJTT1tCiMgQ09O
RklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfSElT
STUwNCBpcyBub3Qgc2V0CkNPTkZJR19NVERfT05FTkFORD1tCkNPTkZJR19NVERfT05FTkFO
RF9WRVJJRllfV1JJVEU9eQojIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKQ09ORklHX01URF9PTkVO
QU5EXzJYX1BST0dSQU09eQoKIwojIExQRERSICYgTFBERFIyIFBDTSBtZW1vcnkgZHJpdmVy
cwojCkNPTkZJR19NVERfTFBERFI9bQpDT05GSUdfTVREX1FJTkZPX1BST0JFPW0KQ09ORklH
X01URF9TUElfTk9SPW0KQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTPXkKQ09O
RklHX01URF9VQkk9bQpDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgpDT05GSUdf
TVREX1VCSV9CRUJfTElNSVQ9MjAKIyBDT05GSUdfTVREX1VCSV9GQVNUTUFQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldApDT05GSUdfTVREX1VCSV9C
TE9DSz15CkNPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQ
T1JUPW0KQ09ORklHX1BBUlBPUlRfUEM9bQpDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQojIENP
TkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAojIENPTkZJR19QQVJQT1JUX1BDX1NV
UEVSSU8gaXMgbm90IHNldApDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQojIENPTkZJR19Q
QVJQT1JUX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qg
c2V0CkNPTkZJR19QQVJQT1JUXzEyODQ9eQpDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQpDT05G
SUdfUE5QPXkKIyBDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIGlzIG5vdCBzZXQKCiMKIyBQ
cm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVWPXkKQ09ORklHX0JM
S19ERVZfTlVMTF9CTEs9bQpDT05GSUdfQkxLX0RFVl9GRD1tCiMgQ09ORklHX1BBUklERSBp
cyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJUDMyWFg9bQpDT05GSUdfWlJB
TT1tCkNPTkZJR19aUkFNX0xaNF9DT01QUkVTUz15CiMgQ09ORklHX1pSQU1fREVCVUcgaXMg
bm90IHNldApDT05GSUdfQkxLX0NQUV9DSVNTX0RBPW0KQ09ORklHX0NJU1NfU0NTSV9UQVBF
PXkKQ09ORklHX0JMS19ERVZfREFDOTYwPW0KQ09ORklHX0JMS19ERVZfVU1FTT1tCiMgQ09O
RklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xPT1A9
bQpDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVD04CiMgQ09ORklHX0JMS19ERVZfQ1JZ
UFRPTE9PUCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0RSQkQ9bQojIENPTkZJR19EUkJE
X0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX05CRD1tCkNPTkZJ
R19CTEtfREVWX05WTUU9bQpDT05GSUdfQkxLX0RFVl9TS0Q9bQpDT05GSUdfQkxLX0RFVl9P
U0Q9bQpDT05GSUdfQkxLX0RFVl9TWDg9bQpDT05GSUdfQkxLX0RFVl9SQU09bQpDT05GSUdf
QkxLX0RFVl9SQU1fQ09VTlQ9MTYKQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQ09O
RklHX0JMS19ERVZfUE1FTT1tCkNPTkZJR19DRFJPTV9QS1RDRFZEPW0KQ09ORklHX0NEUk9N
X1BLVENEVkRfQlVGRkVSUz04CiMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5v
dCBzZXQKQ09ORklHX0FUQV9PVkVSX0VUSD1tCkNPTkZJR19YRU5fQkxLREVWX0ZST05URU5E
PW0KQ09ORklHX1hFTl9CTEtERVZfQkFDS0VORD1tCkNPTkZJR19WSVJUSU9fQkxLPW0KIyBD
T05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1JCRD1tCkNPTkZJ
R19CTEtfREVWX1JTWFg9bQoKIwojIE1pc2MgZGV2aWNlcwojCkNPTkZJR19TRU5TT1JTX0xJ
UzNMVjAyRD1tCkNPTkZJR19BRDUyNVhfRFBPVD1tCkNPTkZJR19BRDUyNVhfRFBPVF9JMkM9
bQpDT05GSUdfQUQ1MjVYX0RQT1RfU1BJPW0KIyBDT05GSUdfRFVNTVlfSVJRIGlzIG5vdCBz
ZXQKQ09ORklHX0lCTV9BU009bQpDT05GSUdfUEhBTlRPTT1tCkNPTkZJR19TR0lfSU9DND1t
CkNPTkZJR19USUZNX0NPUkU9bQpDT05GSUdfVElGTV83WFgxPW0KQ09ORklHX0lDUzkzMlM0
MDE9bQpDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTPW0KQ09ORklHX0hQX0lMTz1tCkNPTkZJ
R19BUERTOTgwMkFMUz1tCkNPTkZJR19JU0wyOTAwMz1tCkNPTkZJR19JU0wyOTAyMD1tCkNP
TkZJR19TRU5TT1JTX1RTTDI1NTA9bQpDT05GSUdfU0VOU09SU19CSDE3ODA9bQpDT05GSUdf
U0VOU09SU19CSDE3NzA9bQpDT05GSUdfU0VOU09SU19BUERTOTkwWD1tCkNPTkZJR19ITUM2
MzUyPW0KQ09ORklHX0RTMTY4Mj1tCkNPTkZJR19USV9EQUM3NTEyPW0KQ09ORklHX1ZNV0FS
RV9CQUxMT09OPW0KIyBDT05GSUdfQk1QMDg1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JN
UDA4NV9TUEkgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1dJVENIX0ZTQTk0ODAgaXMgbm90
IHNldAojIENPTkZJR19MQVRUSUNFX0VDUDNfQ09ORklHIGlzIG5vdCBzZXQKIyBDT05GSUdf
U1JBTSBpcyBub3Qgc2V0CkNPTkZJR19DMlBPUlQ9bQpDT05GSUdfQzJQT1JUX0RVUkFNQVJf
MjE1MD1tCgojCiMgRUVQUk9NIHN1cHBvcnQKIwpDT05GSUdfRUVQUk9NX0FUMjQ9bQpDT05G
SUdfRUVQUk9NX0FUMjU9bQpDT05GSUdfRUVQUk9NX0xFR0FDWT1tCkNPTkZJR19FRVBST01f
TUFYNjg3NT1tCkNPTkZJR19FRVBST01fOTNDWDY9bQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKQ09ORklHX0NCNzEwX0NPUkU9bQojIENPTkZJR19DQjcxMF9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19DQjcxMF9ERUJVR19BU1NVTVBUSU9OUz15CgojCiMgVGV4YXMg
SW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUKIwojIENPTkZJ
R19USV9TVCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX0xJUzNfSTJDPW0KCiMKIyBBbHRl
cmEgRlBHQSBmaXJtd2FyZSBkb3dubG9hZCBtb2R1bGUKIwpDT05GSUdfQUxURVJBX1NUQVBM
PW0KQ09ORklHX0lOVEVMX01FST1tCkNPTkZJR19JTlRFTF9NRUlfTUU9bQojIENPTkZJR19J
TlRFTF9NRUlfVFhFIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9WTUNJPW0KCiMKIyBJbnRl
bCBNSUMgQnVzIERyaXZlcgojCkNPTkZJR19JTlRFTF9NSUNfQlVTPW0KCiMKIyBJbnRlbCBN
SUMgSG9zdCBEcml2ZXIKIwpDT05GSUdfSU5URUxfTUlDX0hPU1Q9bQoKIwojIEludGVsIE1J
QyBDYXJkIERyaXZlcgojCiMgQ09ORklHX0lOVEVMX01JQ19DQVJEIGlzIG5vdCBzZXQKIyBD
T05GSUdfR0VOV1FFIGlzIG5vdCBzZXQKIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NYTF9CQVNFIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfSURFPXkKIyBDT05GSUdfSURF
IGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX1NDU0lfTU9E
PW0KQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST1tCkNPTkZJR19TQ1NJX0RNQT15
CkNPTkZJR19TQ1NJX05FVExJTks9eQojIENPTkZJR19TQ1NJX01RX0RFRkFVTFQgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAoKIwojIFNDU0kgc3VwcG9y
dCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9bQpDT05G
SUdfQ0hSX0RFVl9TVD1tCkNPTkZJR19DSFJfREVWX09TU1Q9bQpDT05GSUdfQkxLX0RFVl9T
Uj1tCkNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CkNPTkZJR19DSFJfREVWX1NHPW0KQ09O
RklHX0NIUl9ERVZfU0NIPW0KQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KQ09ORklHX1NDU0lf
Q09OU1RBTlRTPXkKQ09ORklHX1NDU0lfTE9HR0lORz15CkNPTkZJR19TQ1NJX1NDQU5fQVNZ
TkM9eQoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCkNP
TkZJR19TQ1NJX0ZDX0FUVFJTPW0KQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQpDT05GSUdf
U0NTSV9TQVNfQVRUUlM9bQpDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KQ09ORklHX1NDU0lf
U0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CkNPTkZJR19TQ1NJX1NSUF9B
VFRSUz1tCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQ09ORklHX0lTQ1NJX1RDUD1tCkNPTkZJ
R19JU0NTSV9CT09UX1NZU0ZTPW0KQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0k9bQpDT05GSUdf
U0NTSV9DWEdCNF9JU0NTST1tCkNPTkZJR19TQ1NJX0JOWDJfSVNDU0k9bQpDT05GSUdfU0NT
SV9CTlgyWF9GQ09FPW0KQ09ORklHX0JFMklTQ1NJPW0KQ09ORklHX0JMS19ERVZfM1dfWFhY
WF9SQUlEPW0KQ09ORklHX1NDU0lfSFBTQT1tCkNPTkZJR19TQ1NJXzNXXzlYWFg9bQpDT05G
SUdfU0NTSV8zV19TQVM9bQpDT05GSUdfU0NTSV9BQ0FSRD1tCkNPTkZJR19TQ1NJX0FBQ1JB
SUQ9bQpDT05GSUdfU0NTSV9BSUM3WFhYPW0KQ09ORklHX0FJQzdYWFhfQ01EU19QRVJfREVW
SUNFPTgKQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQ09ORklHX0FJQzdY
WFhfREVCVUdfRU5BQkxFPXkKQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCkNPTkZJR19B
SUM3WFhYX1JFR19QUkVUVFlfUFJJTlQ9eQpDT05GSUdfU0NTSV9BSUM3OVhYPW0KQ09ORklH
X0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCkNPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZ
X01TPTE1MDAwCkNPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRT15CkNPTkZJR19BSUM3OVhY
X0RFQlVHX01BU0s9MApDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UPXkKQ09ORklH
X1NDU0lfQUlDOTRYWD1tCiMgQ09ORklHX0FJQzk0WFhfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU0NTSV9NVlNBUz1tCiMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQgaXMgbm90IHNldApDT05GSUdfU0NTSV9NVlVN
ST1tCkNPTkZJR19TQ1NJX0RQVF9JMk89bQpDT05GSUdfU0NTSV9BRFZBTlNZUz1tCkNPTkZJ
R19TQ1NJX0FSQ01TUj1tCkNPTkZJR19TQ1NJX0VTQVMyUj1tCkNPTkZJR19NRUdBUkFJRF9O
RVdHRU49eQpDT05GSUdfTUVHQVJBSURfTU09bQpDT05GSUdfTUVHQVJBSURfTUFJTEJPWD1t
CkNPTkZJR19NRUdBUkFJRF9MRUdBQ1k9bQpDT05GSUdfTUVHQVJBSURfU0FTPW0KQ09ORklH
X1NDU0lfTVBUMlNBUz1tCkNPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRT0xMjgKIyBDT05G
SUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldApDT05GSUdfU0NTSV9NUFQzU0FT
PW0KQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOAojIENPTkZJR19TQ1NJX01QVDNT
QVNfTE9HR0lORyBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU0hDRD1tCkNPTkZJR19TQ1NJ
X1VGU0hDRF9QQ0k9bQojIENPTkZJR19TQ1NJX1VGU0hDRF9QTEFURk9STSBpcyBub3Qgc2V0
CkNPTkZJR19TQ1NJX0hQVElPUD1tCkNPTkZJR19TQ1NJX0JVU0xPR0lDPW0KIyBDT05GSUdf
U0NTSV9GTEFTSFBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9QVlNDU0k9bQpDT05G
SUdfWEVOX1NDU0lfRlJPTlRFTkQ9bQpDT05GSUdfSFlQRVJWX1NUT1JBR0U9bQpDT05GSUdf
TElCRkM9bQpDT05GSUdfTElCRkNPRT1tCkNPTkZJR19GQ09FPW0KQ09ORklHX0ZDT0VfRk5J
Qz1tCkNPTkZJR19TQ1NJX0RNWDMxOTFEPW0KQ09ORklHX1NDU0lfRUFUQT1tCkNPTkZJR19T
Q1NJX0VBVEFfVEFHR0VEX1FVRVVFPXkKQ09ORklHX1NDU0lfRUFUQV9MSU5LRURfQ09NTUFO
RFM9eQpDT05GSUdfU0NTSV9FQVRBX01BWF9UQUdTPTE2CkNPTkZJR19TQ1NJX0ZVVFVSRV9E
T01BSU49bQpDT05GSUdfU0NTSV9HRFRIPW0KQ09ORklHX1NDU0lfSVNDST1tCkNPTkZJR19T
Q1NJX0lQUz1tCkNPTkZJR19TQ1NJX0lOSVRJTz1tCkNPTkZJR19TQ1NJX0lOSUExMDA9bQoj
IENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBz
ZXQKQ09ORklHX1NDU0lfU1RFWD1tCkNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPW0KQ09ORklH
X1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQpDT05GSUdfU0NTSV9TWU01
M0M4WFhfREVGQVVMVF9UQUdTPTE2CkNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02
NApDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CkNPTkZJR19TQ1NJX0lQUj1tCiMgQ09O
RklHX1NDU0lfSVBSX1RSQUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JUFJfRFVNUCBp
cyBub3Qgc2V0CkNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPW0KQ09ORklHX1NDU0lfUUxBX0ZD
PW0KQ09ORklHX1RDTV9RTEEyWFhYPW0KQ09ORklHX1NDU0lfUUxBX0lTQ1NJPW0KQ09ORklH
X1NDU0lfTFBGQz1tCiMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CkNP
TkZJR19TQ1NJX0RDMzk1eD1tCkNPTkZJR19TQ1NJX0FNNTNDOTc0PW0KQ09ORklHX1NDU0lf
V0Q3MTlYPW0KQ09ORklHX1NDU0lfREVCVUc9bQpDT05GSUdfU0NTSV9QTUNSQUlEPW0KQ09O
RklHX1NDU0lfUE04MDAxPW0KQ09ORklHX1NDU0lfQkZBX0ZDPW0KQ09ORklHX1NDU0lfVklS
VElPPW0KQ09ORklHX1NDU0lfQ0hFTFNJT19GQ09FPW0KQ09ORklHX1NDU0lfTE9XTEVWRUxf
UENNQ0lBPXkKQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KQ09ORklHX1BDTUNJQV9GRE9NQUlO
PW0KQ09ORklHX1BDTUNJQV9RTE9HSUM9bQpDT05GSUdfUENNQ0lBX1NZTTUzQzUwMD1tCkNP
TkZJR19TQ1NJX0RIPW0KQ09ORklHX1NDU0lfREhfUkRBQz1tCkNPTkZJR19TQ1NJX0RIX0hQ
X1NXPW0KQ09ORklHX1NDU0lfREhfRU1DPW0KQ09ORklHX1NDU0lfREhfQUxVQT1tCkNPTkZJ
R19TQ1NJX09TRF9JTklUSUFUT1I9bQpDT05GSUdfU0NTSV9PU0RfVUxEPW0KQ09ORklHX1ND
U0lfT1NEX0RQUklOVF9TRU5TRT0xCiMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0FUQT1tCiMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CkNP
TkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfQUNQST15CkNPTkZJR19TQVRB
X1pQT0REPXkKQ09ORklHX1NBVEFfUE1QPXkKCiMKIyBDb250cm9sbGVycyB3aXRoIG5vbi1T
RkYgbmF0aXZlIGludGVyZmFjZQojCkNPTkZJR19TQVRBX0FIQ0k9bQojIENPTkZJR19TQVRB
X0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5v
dCBzZXQKQ09ORklHX1NBVEFfQUNBUkRfQUhDST1tCkNPTkZJR19TQVRBX1NJTDI0PW0KQ09O
RklHX0FUQV9TRkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50
ZXJmYWNlCiMKQ09ORklHX1BEQ19BRE1BPW0KQ09ORklHX1NBVEFfUVNUT1I9bQpDT05GSUdf
U0FUQV9TWDQ9bQpDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRBIFNGRiBjb250cm9sbGVy
cyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPW0KQ09ORklHX1NBVEFfTVY9bQpDT05G
SUdfU0FUQV9OVj1tCkNPTkZJR19TQVRBX1BST01JU0U9bQpDT05GSUdfU0FUQV9TSUw9bQpD
T05GSUdfU0FUQV9TSVM9bQpDT05GSUdfU0FUQV9TVlc9bQpDT05GSUdfU0FUQV9VTEk9bQpD
T05GSUdfU0FUQV9WSUE9bQpDT05GSUdfU0FUQV9WSVRFU1NFPW0KCiMKIyBQQVRBIFNGRiBj
b250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX1BBVEFfQUxJPW0KQ09ORklHX1BBVEFf
QU1EPW0KQ09ORklHX1BBVEFfQVJUT1A9bQpDT05GSUdfUEFUQV9BVElJWFA9bQpDT05GSUdf
UEFUQV9BVFA4NjdYPW0KQ09ORklHX1BBVEFfQ01ENjRYPW0KIyBDT05GSUdfUEFUQV9DWVBS
RVNTIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfRUZBUj1tCkNPTkZJR19QQVRBX0hQVDM2Nj1t
CkNPTkZJR19QQVRBX0hQVDM3WD1tCiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfSVQ4MjEzPW0K
Q09ORklHX1BBVEFfSVQ4MjFYPW0KQ09ORklHX1BBVEFfSk1JQ1JPTj1tCkNPTkZJR19QQVRB
X01BUlZFTEw9bQpDT05GSUdfUEFUQV9ORVRDRUxMPW0KQ09ORklHX1BBVEFfTklOSkEzMj1t
CkNPTkZJR19QQVRBX05TODc0MTU9bQpDT05GSUdfUEFUQV9PTERQSUlYPW0KIyBDT05GSUdf
UEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfUERDMjAyN1g9bQpDT05GSUdf
UEFUQV9QRENfT0xEPW0KIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKQ09ORklH
X1BBVEFfUkRDPW0KQ09ORklHX1BBVEFfU0NIPW0KQ09ORklHX1BBVEFfU0VSVkVSV09SS1M9
bQpDT05GSUdfUEFUQV9TSUw2ODA9bQpDT05GSUdfUEFUQV9TSVM9bQpDT05GSUdfUEFUQV9U
T1NISUJBPW0KQ09ORklHX1BBVEFfVFJJRkxFWD1tCkNPTkZJR19QQVRBX1ZJQT1tCiMgQ09O
RklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CgojCiMgUElPLW9ubHkgU0ZGIGNvbnRyb2xs
ZXJzCiMKIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFf
TVBJSVg9bQpDT05GSUdfUEFUQV9OUzg3NDEwPW0KIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5v
dCBzZXQKQ09ORklHX1BBVEFfUENNQ0lBPW0KIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBu
b3Qgc2V0CkNPTkZJR19QQVRBX1JaMTAwMD1tCgojCiMgR2VuZXJpYyBmYWxsYmFjayAvIGxl
Z2FjeSBkcml2ZXJzCiMKIyBDT05GSUdfUEFUQV9BQ1BJIGlzIG5vdCBzZXQKQ09ORklHX0FU
QV9HRU5FUklDPW0KIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9
eQpDT05GSUdfQkxLX0RFVl9NRD1tCkNPTkZJR19NRF9MSU5FQVI9bQpDT05GSUdfTURfUkFJ
RDA9bQpDT05GSUdfTURfUkFJRDE9bQpDT05GSUdfTURfUkFJRDEwPW0KQ09ORklHX01EX1JB
SUQ0NTY9bQpDT05GSUdfTURfTVVMVElQQVRIPW0KQ09ORklHX01EX0ZBVUxUWT1tCiMgQ09O
RklHX01EX0NMVVNURVIgaXMgbm90IHNldApDT05GSUdfQkNBQ0hFPW0KIyBDT05GSUdfQkNB
Q0hFX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFX0NMT1NVUkVTX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CkNPTkZJR19CTEtfREVWX0RN
PW0KIyBDT05GSUdfRE1fTVFfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX0RNX0JVRklPPW0KQ09ORklHX0RNX0JJT19QUklTT049bQpD
T05GSUdfRE1fUEVSU0lTVEVOVF9EQVRBPW0KIyBDT05GSUdfRE1fREVCVUdfQkxPQ0tfU1RB
Q0tfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19ETV9DUllQVD1tCkNPTkZJR19ETV9TTkFQ
U0hPVD1tCkNPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCkNPTkZJR19ETV9DQUNIRT1t
CkNPTkZJR19ETV9DQUNIRV9NUT1tCkNPTkZJR19ETV9DQUNIRV9DTEVBTkVSPW0KQ09ORklH
X0RNX0VSQT1tCkNPTkZJR19ETV9NSVJST1I9bQpDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1t
CkNPTkZJR19ETV9SQUlEPW0KQ09ORklHX0RNX1pFUk89bQpDT05GSUdfRE1fTVVMVElQQVRI
PW0KQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCkNPTkZJR19ETV9NVUxUSVBBVEhfU1Q9bQpD
T05GSUdfRE1fREVMQVk9bQpDT05GSUdfRE1fVUVWRU5UPXkKQ09ORklHX0RNX0ZMQUtFWT1t
CkNPTkZJR19ETV9WRVJJVFk9bQpDT05GSUdfRE1fU1dJVENIPW0KQ09ORklHX0RNX0xPR19X
UklURVM9bQpDT05GSUdfVEFSR0VUX0NPUkU9bQpDT05GSUdfVENNX0lCTE9DSz1tCkNPTkZJ
R19UQ01fRklMRUlPPW0KQ09ORklHX1RDTV9QU0NTST1tCiMgQ09ORklHX1RDTV9VU0VSMiBp
cyBub3Qgc2V0CkNPTkZJR19MT09QQkFDS19UQVJHRVQ9bQpDT05GSUdfVENNX0ZDPW0KQ09O
RklHX0lTQ1NJX1RBUkdFVD1tCkNPTkZJR19TQlBfVEFSR0VUPW0KQ09ORklHX0ZVU0lPTj15
CkNPTkZJR19GVVNJT05fU1BJPW0KQ09ORklHX0ZVU0lPTl9GQz1tCkNPTkZJR19GVVNJT05f
U0FTPW0KQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOApDT05GSUdfRlVTSU9OX0NUTD1tCkNP
TkZJR19GVVNJT05fTEFOPW0KIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAoK
IwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKIwpDT05GSUdfRklSRVdJUkU9bQpD
T05GSUdfRklSRVdJUkVfT0hDST1tCkNPTkZJR19GSVJFV0lSRV9TQlAyPW0KQ09ORklHX0ZJ
UkVXSVJFX05FVD1tCkNPTkZJR19GSVJFV0lSRV9OT1NZPW0KQ09ORklHX01BQ0lOVE9TSF9E
UklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkK
Q09ORklHX01JST1tCkNPTkZJR19ORVRfQ09SRT15CkNPTkZJR19CT05ESU5HPW0KQ09ORklH
X0RVTU1ZPW0KQ09ORklHX0VRVUFMSVpFUj1tCkNPTkZJR19ORVRfRkM9eQpDT05GSUdfSUZC
PW0KQ09ORklHX05FVF9URUFNPW0KQ09ORklHX05FVF9URUFNX01PREVfQlJPQURDQVNUPW0K
Q09ORklHX05FVF9URUFNX01PREVfUk9VTkRST0JJTj1tCkNPTkZJR19ORVRfVEVBTV9NT0RF
X1JBTkRPTT1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCkNPTkZJR19O
RVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KQ09ORklHX01BQ1ZMQU49bQpDT05GSUdfTUFD
VlRBUD1tCkNPTkZJR19JUFZMQU49bQpDT05GSUdfVlhMQU49bQpDT05GSUdfTkVUQ09OU09M
RT1tCkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpDT05GSUdfTkVUUE9MTD15CkNPTkZJ
R19ORVRfUE9MTF9DT05UUk9MTEVSPXkKQ09ORklHX1RVTj1tCkNPTkZJR19WRVRIPW0KQ09O
RklHX1ZJUlRJT19ORVQ9bQpDT05GSUdfTkxNT049bQpDT05GSUdfU1VOR0VNX1BIWT1tCkNP
TkZJR19BUkNORVQ9bQpDT05GSUdfQVJDTkVUXzEyMDE9bQpDT05GSUdfQVJDTkVUXzEwNTE9
bQpDT05GSUdfQVJDTkVUX1JBVz1tCkNPTkZJR19BUkNORVRfQ0FQPW0KQ09ORklHX0FSQ05F
VF9DT005MHh4PW0KQ09ORklHX0FSQ05FVF9DT005MHh4SU89bQpDT05GSUdfQVJDTkVUX1JJ
TV9JPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMD1tCkNPTkZJR19BUkNORVRfQ09NMjAwMjBf
UENJPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DUz1tCkNPTkZJR19BVE1fRFJJVkVSUz15
CkNPTkZJR19BVE1fRFVNTVk9bQpDT05GSUdfQVRNX1RDUD1tCkNPTkZJR19BVE1fTEFOQUk9
bQpDT05GSUdfQVRNX0VOST1tCiMgQ09ORklHX0FUTV9FTklfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19BVE1fRU5JX1RVTkVfQlVSU1QgaXMgbm90IHNldApDT05GSUdfQVRNX0ZJUkVT
VFJFQU09bQpDT05GSUdfQVRNX1pBVE09bQojIENPTkZJR19BVE1fWkFUTV9ERUJVRyBpcyBu
b3Qgc2V0CkNPTkZJR19BVE1fTklDU1RBUj1tCkNPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VO
ST15CkNPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDU9eQpDT05GSUdfQVRNX0lEVDc3
MjUyPW0KIyBDT05GSUdfQVRNX0lEVDc3MjUyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldApDT05GSUdfQVRNX0lEVDc3MjUyX1VT
RV9TVU5JPXkKQ09ORklHX0FUTV9BTUJBU1NBRE9SPW0KIyBDT05GSUdfQVRNX0FNQkFTU0FE
T1JfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0hPUklaT049bQojIENPTkZJR19BVE1f
SE9SSVpPTl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fSUE9bQojIENPTkZJR19BVE1f
SUFfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0ZPUkUyMDBFPW0KIyBDT05GSUdfQVRN
X0ZPUkUyMDBFX1VTRV9UQVNLTEVUIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9GT1JFMjAwRV9U
WF9SRVRSWT0xNgpDT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKQ09ORklHX0FUTV9IRT1t
CkNPTkZJR19BVE1fSEVfVVNFX1NVTkk9eQpDT05GSUdfQVRNX1NPTE9TPW0KCiMKIyBDQUlG
IHRyYW5zcG9ydCBkcml2ZXJzCiMKQ09ORklHX1ZIT1NUX05FVD1tCkNPTkZJR19WSE9TVF9T
Q1NJPW0KQ09ORklHX1ZIT1NUX1JJTkc9bQpDT05GSUdfVkhPU1Q9bQoKIwojIERpc3RyaWJ1
dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVycwojCiMgQ09ORklHX05FVF9EU0FfTVY4
OEU2WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUg
aXMgbm90IHNldApDT05GSUdfRVRIRVJORVQ9eQpDT05GSUdfTURJTz1tCkNPTkZJR19ORVRf
VkVORE9SXzNDT009eQpDT05GSUdfUENNQ0lBXzNDNTc0PW0KQ09ORklHX1BDTUNJQV8zQzU4
OT1tCkNPTkZJR19WT1JURVg9bQpDT05GSUdfVFlQSE9PTj1tCkNPTkZJR19ORVRfVkVORE9S
X0FEQVBURUM9eQpDT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCkNPTkZJR19ORVRfVkVORE9S
X0FHRVJFPXkKQ09ORklHX0VUMTMxWD1tCkNPTkZJR19ORVRfVkVORE9SX0FMVEVPTj15CkNP
TkZJR19BQ0VOSUM9bQojIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQK
IyBDT05GSUdfQUxURVJBX1RTRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FNRD15
CkNPTkZJR19BTUQ4MTExX0VUSD1tCkNPTkZJR19QQ05FVDMyPW0KQ09ORklHX1BDTUNJQV9O
TUNMQU49bQojIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0FUSEVST1M9eQpDT05GSUdfQVRMMj1tCkNPTkZJR19BVEwxPW0KQ09ORklHX0FU
TDFFPW0KQ09ORklHX0FUTDFDPW0KQ09ORklHX0FMWD1tCkNPTkZJR19ORVRfQ0FERU5DRT15
CiMgQ09ORklHX01BQ0IgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTT15
CkNPTkZJR19CNDQ9bQpDT05GSUdfQjQ0X1BDSV9BVVRPU0VMRUNUPXkKQ09ORklHX0I0NF9Q
Q0lDT1JFX0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQ0X1BDST15CiMgQ09ORklHX0JDTUdFTkVU
IGlzIG5vdCBzZXQKQ09ORklHX0JOWDI9bQpDT05GSUdfQ05JQz1tCkNPTkZJR19USUdPTjM9
bQpDT05GSUdfQk5YMlg9bQpDT05GSUdfQk5YMlhfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRP
Ul9CUk9DQURFPXkKQ09ORklHX0JOQT1tCkNPTkZJR19ORVRfVkVORE9SX0NIRUxTSU89eQpD
T05GSUdfQ0hFTFNJT19UMT1tCkNPTkZJR19DSEVMU0lPX1QxXzFHPXkKQ09ORklHX0NIRUxT
SU9fVDM9bQpDT05GSUdfQ0hFTFNJT19UND1tCkNPTkZJR19DSEVMU0lPX1Q0X0RDQj15CiMg
Q09ORklHX0NIRUxTSU9fVDRfRkNPRSBpcyBub3Qgc2V0CkNPTkZJR19DSEVMU0lPX1Q0VkY9
bQpDT05GSUdfTkVUX1ZFTkRPUl9DSVNDTz15CkNPTkZJR19FTklDPW0KIyBDT05GSUdfQ1hf
RUNBVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9ERUM9eQpDT05GSUdfTkVUX1RVTElQPXkKQ09ORklHX0RFMjEwNFg9bQpDT05GSUdf
REUyMTA0WF9EU0w9MApDT05GSUdfVFVMSVA9bQojIENPTkZJR19UVUxJUF9NV0kgaXMgbm90
IHNldAojIENPTkZJR19UVUxJUF9NTUlPIGlzIG5vdCBzZXQKQ09ORklHX1RVTElQX05BUEk9
eQpDT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKIyBDT05GSUdfREU0WDUgaXMg
bm90IHNldApDT05GSUdfV0lOQk9ORF84NDA9bQpDT05GSUdfRE05MTAyPW0KQ09ORklHX1VM
STUyNlg9bQpDT05GSUdfUENNQ0lBX1hJUkNPTT1tCkNPTkZJR19ORVRfVkVORE9SX0RMSU5L
PXkKQ09ORklHX0RMMks9bQpDT05GSUdfU1VOREFOQ0U9bQojIENPTkZJR19TVU5EQU5DRV9N
TUlPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRU1VTEVYPXkKQ09ORklHX0JFMk5F
VD1tCkNPTkZJR19CRTJORVRfVlhMQU49eQpDT05GSUdfTkVUX1ZFTkRPUl9FWEFSPXkKQ09O
RklHX1MySU89bQpDT05GSUdfVlhHRT1tCiMgQ09ORklHX1ZYR0VfREVCVUdfVFJBQ0VfQUxM
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRlVKSVRTVT15CkNPTkZJR19QQ01DSUFf
Rk1WSjE4WD1tCkNPTkZJR19ORVRfVkVORE9SX0hQPXkKQ09ORklHX0hQMTAwPW0KQ09ORklH
X05FVF9WRU5ET1JfSU5URUw9eQpDT05GSUdfRTEwMD1tCkNPTkZJR19FMTAwMD1tCkNPTkZJ
R19FMTAwMEU9bQpDT05GSUdfSUdCPW0KQ09ORklHX0lHQl9IV01PTj15CkNPTkZJR19JR0Jf
RENBPXkKQ09ORklHX0lHQlZGPW0KQ09ORklHX0lYR0I9bQpDT05GSUdfSVhHQkU9bQpDT05G
SUdfSVhHQkVfVlhMQU49eQpDT05GSUdfSVhHQkVfSFdNT049eQpDT05GSUdfSVhHQkVfRENB
PXkKQ09ORklHX0lYR0JFX0RDQj15CkNPTkZJR19JWEdCRVZGPW0KQ09ORklHX0k0MEU9bQpD
T05GSUdfSTQwRV9WWExBTj15CkNPTkZJR19JNDBFX0RDQj15CkNPTkZJR19JNDBFX0ZDT0U9
eQpDT05GSUdfSTQwRVZGPW0KIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldApDT05GSUdfTkVU
X1ZFTkRPUl9JODI1WFg9eQpDT05GSUdfSVAxMDAwPW0KQ09ORklHX0pNRT1tCkNPTkZJR19O
RVRfVkVORE9SX01BUlZFTEw9eQojIENPTkZJR19NVk1ESU8gaXMgbm90IHNldApDT05GSUdf
U0tHRT1tCiMgQ09ORklHX1NLR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0tHRV9HRU5F
U0lTPXkKQ09ORklHX1NLWTI9bQojIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfTUVMTEFOT1g9eQpDT05GSUdfTUxYNF9FTj1tCkNPTkZJR19NTFg0
X0VOX0RDQj15CkNPTkZJR19NTFg0X0VOX1ZYTEFOPXkKQ09ORklHX01MWDRfQ09SRT1tCkNP
TkZJR19NTFg0X0RFQlVHPXkKQ09ORklHX01MWDVfQ09SRT1tCkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldApDT05GSUdfS1NaODg0
WF9QQ0k9bQpDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVA9eQojIENPTkZJR19FTkMyOEo2
MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQpDT05GSUdfTVlSSTEwR0U9
bQpDT05GSUdfTVlSSTEwR0VfRENBPXkKQ09ORklHX0ZFQUxOWD1tCkNPTkZJR19ORVRfVkVO
RE9SX05BVFNFTUk9eQpDT05GSUdfTkFUU0VNST1tCkNPTkZJR19OUzgzODIwPW0KQ09ORklH
X05FVF9WRU5ET1JfODM5MD15CkNPTkZJR19QQ01DSUFfQVhORVQ9bQpDT05GSUdfTkUyS19Q
Q0k9bQpDT05GSUdfUENNQ0lBX1BDTkVUPW0KQ09ORklHX05FVF9WRU5ET1JfTlZJRElBPXkK
Q09ORklHX0ZPUkNFREVUSD1tCkNPTkZJR19ORVRfVkVORE9SX09LST15CiMgQ09ORklHX0VU
SE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9QQUNLRVRfRU5HSU5FPXkKQ09ORklHX0hBTUFD
SEk9bQpDT05GSUdfWUVMTE9XRklOPW0KQ09ORklHX05FVF9WRU5ET1JfUUxPR0lDPXkKQ09O
RklHX1FMQTNYWFg9bQpDT05GSUdfUUxDTklDPW0KQ09ORklHX1FMQ05JQ19TUklPVj15CkNP
TkZJR19RTENOSUNfRENCPXkKQ09ORklHX1FMQ05JQ19WWExBTj15CkNPTkZJR19RTENOSUNf
SFdNT049eQpDT05GSUdfUUxHRT1tCkNPTkZJR19ORVRYRU5fTklDPW0KQ09ORklHX05FVF9W
RU5ET1JfUVVBTENPTU09eQpDT05GSUdfTkVUX1ZFTkRPUl9SRUFMVEVLPXkKIyBDT05GSUdf
QVRQIGlzIG5vdCBzZXQKQ09ORklHXzgxMzlDUD1tCkNPTkZJR184MTM5VE9PPW0KIyBDT05G
SUdfODEzOVRPT19QSU8gaXMgbm90IHNldApDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9
eQpDT05GSUdfODEzOVRPT184MTI5PXkKIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMg
bm90IHNldApDT05GSUdfUjgxNjk9bQpDT05GSUdfTkVUX1ZFTkRPUl9SREM9eQpDT05GSUdf
UjYwNDA9bQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9T
QU1TVU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZF
TkRPUl9TRUVRIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0lMQU49eQpDT05GSUdf
U0M5MjAzMT1tCkNPTkZJR19ORVRfVkVORE9SX1NJUz15CkNPTkZJR19TSVM5MDA9bQpDT05G
SUdfU0lTMTkwPW0KQ09ORklHX1NGQz1tCkNPTkZJR19TRkNfTVREPXkKQ09ORklHX1NGQ19N
Q0RJX01PTj15CkNPTkZJR19TRkNfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkK
Q09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCkNPTkZJR19FUElDMTAwPW0KIyBDT05GSUdfU01T
QzkxMVggaXMgbm90IHNldApDT05GSUdfU01TQzk0MjA9bQpDT05GSUdfTkVUX1ZFTkRPUl9T
VE1JQ1JPPXkKIyBDT05GSUdfU1RNTUFDX0VUSCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX1NVTj15CkNPTkZJR19IQVBQWU1FQUw9bQpDT05GSUdfU1VOR0VNPW0KQ09ORklHX0NB
U1NJTkk9bQpDT05GSUdfTklVPW0KQ09ORklHX05FVF9WRU5ET1JfVEVIVVRJPXkKQ09ORklH
X1RFSFVUST1tCkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05GSUdfVElfQ1BTV19BTEUg
aXMgbm90IHNldApDT05GSUdfVExBTj1tCkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CkNPTkZJ
R19WSUFfUkhJTkU9bQojIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSUFfVkVMT0NJVFk9bQpDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19X
SVpORVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT009eQpDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQpD
T05GSUdfRkREST15CkNPTkZJR19ERUZYWD1tCiMgQ09ORklHX0RFRlhYX01NSU8gaXMgbm90
IHNldApDT05GSUdfU0tGUD1tCkNPTkZJR19ISVBQST15CkNPTkZJR19ST0FEUlVOTkVSPW0K
IyBDT05GSUdfUk9BRFJVTk5FUl9MQVJHRV9SSU5HUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
U0IxMDAwPW0KQ09ORklHX1BIWUxJQj1tCgojCiMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwoj
CkNPTkZJR19BVDgwM1hfUEhZPW0KQ09ORklHX0FNRF9QSFk9bQpDT05GSUdfTUFSVkVMTF9Q
SFk9bQpDT05GSUdfREFWSUNPTV9QSFk9bQpDT05GSUdfUVNFTUlfUEhZPW0KQ09ORklHX0xY
VF9QSFk9bQpDT05GSUdfQ0lDQURBX1BIWT1tCkNPTkZJR19WSVRFU1NFX1BIWT1tCkNPTkZJ
R19TTVNDX1BIWT1tCkNPTkZJR19CUk9BRENPTV9QSFk9bQojIENPTkZJR19CQ003WFhYX1BI
WSBpcyBub3Qgc2V0CkNPTkZJR19CQ004N1hYX1BIWT1tCkNPTkZJR19JQ1BMVVNfUEhZPW0K
Q09ORklHX1JFQUxURUtfUEhZPW0KQ09ORklHX05BVElPTkFMX1BIWT1tCkNPTkZJR19TVEUx
MFhQPW0KQ09ORklHX0xTSV9FVDEwMTFDX1BIWT1tCkNPTkZJR19NSUNSRUxfUEhZPW0KIyBD
T05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5v
dCBzZXQKIyBDT05GSUdfTURJT19CQ01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUlD
UkVMX0tTODk5NU1BIGlzIG5vdCBzZXQKQ09ORklHX1BMSVA9bQpDT05GSUdfUFBQPW0KQ09O
RklHX1BQUF9CU0RDT01QPW0KQ09ORklHX1BQUF9ERUZMQVRFPW0KQ09ORklHX1BQUF9GSUxU
RVI9eQpDT05GSUdfUFBQX01QUEU9bQpDT05GSUdfUFBQX01VTFRJTElOSz15CkNPTkZJR19Q
UFBPQVRNPW0KQ09ORklHX1BQUE9FPW0KQ09ORklHX1BQVFA9bQpDT05GSUdfUFBQT0wyVFA9
bQpDT05GSUdfUFBQX0FTWU5DPW0KQ09ORklHX1BQUF9TWU5DX1RUWT1tCkNPTkZJR19TTElQ
PW0KQ09ORklHX1NMSEM9bQpDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKQ09ORklHX1NMSVBf
U01BUlQ9eQpDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKCiMKIyBIb3N0LXNpZGUgVVNCIHN1
cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnQKIwpDT05G
SUdfVVNCX05FVF9EUklWRVJTPW0KQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdF
VEg9bQpDT05GSUdfVVNCX1BFR0FTVVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdf
VVNCX1JUTDgxNTI9bQpDT05GSUdfVVNCX1VTQk5FVD1tCkNPTkZJR19VU0JfTkVUX0FYODgx
N1g9bQpDT05GSUdfVVNCX05FVF9BWDg4MTc5XzE3OEE9bQpDT05GSUdfVVNCX05FVF9DRENF
VEhFUj1tCkNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQpDT05GSUdfVVNCX05FVF9DRENfTkNN
PW0KQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ009bQpDT05GSUdfVVNCX05FVF9DRENf
TUJJTT1tCkNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCkNPTkZJR19VU0JfTkVUX1NSOTcwMD1t
CkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3NVhYPW0KQ09O
RklHX1VTQl9ORVRfU01TQzk1WFg9bQpDT05GSUdfVVNCX05FVF9HTDYyMEE9bQpDT05GSUdf
VVNCX05FVF9ORVQxMDgwPW0KQ09ORklHX1VTQl9ORVRfUExVU0I9bQpDT05GSUdfVVNCX05F
VF9NQ1M3ODMwPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCkNPTkZJR19VU0JfTkVU
X0NEQ19TVUJTRVQ9bQpDT05GSUdfVVNCX0FMSV9NNTYzMj15CkNPTkZJR19VU0JfQU4yNzIw
PXkKQ09ORklHX1VTQl9CRUxLSU49eQpDT05GSUdfVVNCX0FSTUxJTlVYPXkKQ09ORklHX1VT
Ql9FUFNPTjI4ODg9eQpDT05GSUdfVVNCX0tDMjE5MD15CkNPTkZJR19VU0JfTkVUX1pBVVJV
Uz1tCkNPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIPW0KQ09ORklHX1VTQl9ORVRfS0FMTUlB
PW0KQ09ORklHX1VTQl9ORVRfUU1JX1dXQU49bQpDT05GSUdfVVNCX0hTTz1tCkNPTkZJR19V
U0JfTkVUX0lOVDUxWDE9bQpDT05GSUdfVVNCX0NEQ19QSE9ORVQ9bQpDT05GSUdfVVNCX0lQ
SEVUSD1tCkNPTkZJR19VU0JfU0lFUlJBX05FVD1tCkNPTkZJR19VU0JfVkw2MDA9bQpDT05G
SUdfV0xBTj15CkNPTkZJR19QQ01DSUFfUkFZQ1M9bQpDT05GSUdfTElCRVJUQVNfVEhJTkZJ
Uk09bQojIENPTkZJR19MSUJFUlRBU19USElORklSTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJ
R19MSUJFUlRBU19USElORklSTV9VU0I9bQpDT05GSUdfQUlSTz1tCkNPTkZJR19BVE1FTD1t
CkNPTkZJR19QQ0lfQVRNRUw9bQpDT05GSUdfUENNQ0lBX0FUTUVMPW0KQ09ORklHX0FUNzZD
NTBYX1VTQj1tCkNPTkZJR19BSVJPX0NTPW0KQ09ORklHX1BDTUNJQV9XTDM1MDE9bQojIENP
TkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9aRDEyMDE9bQpDT05GSUdfVVNC
X05FVF9STkRJU19XTEFOPW0KQ09ORklHX1JUTDgxODA9bQpDT05GSUdfUlRMODE4Nz1tCkNP
TkZJR19SVEw4MTg3X0xFRFM9eQpDT05GSUdfQURNODIxMT1tCkNPTkZJR19NQUM4MDIxMV9I
V1NJTT1tCkNPTkZJR19NV0w4Sz1tCkNPTkZJR19BVEhfQ09NTU9OPW0KQ09ORklHX0FUSF9D
QVJEUz1tCiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVEg1Sz1tCiMg
Q09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINUtfVFJBQ0VSIGlz
IG5vdCBzZXQKQ09ORklHX0FUSDVLX1BDST15CkNPTkZJR19BVEg5S19IVz1tCkNPTkZJR19B
VEg5S19DT01NT049bQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBPUlQ9eQpDT05GSUdfQVRI
OUs9bQpDT05GSUdfQVRIOUtfUENJPXkKIyBDT05GSUdfQVRIOUtfQUhCIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIOUtfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFD
SyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CkNPTkZJR19BVEg5
S19SRktJTEw9eQojIENPTkZJR19BVEg5S19DSEFOTkVMX0NPTlRFWFQgaXMgbm90IHNldApD
T05GSUdfQVRIOUtfUENPRU09eQpDT05GSUdfQVRIOUtfSFRDPW0KIyBDT05GSUdfQVRIOUtf
SFRDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdfQ0FSTDkxNzA9bQpDT05GSUdfQ0FSTDkx
NzBfTEVEUz15CkNPTkZJR19DQVJMOTE3MF9XUEM9eQojIENPTkZJR19DQVJMOTE3MF9IV1JO
RyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0w9bQpDT05GSUdfQVRINktMX1NESU89bQpDT05G
SUdfQVRINktMX1VTQj1tCiMgQ09ORklHX0FUSDZLTF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FUSDZLTF9UUkFDSU5HIGlzIG5vdCBzZXQKQ09ORklHX0FSNTUyMz1tCkNPTkZJR19X
SUw2MjEwPW0KQ09ORklHX1dJTDYyMTBfSVNSX0NPUj15CkNPTkZJR19XSUw2MjEwX1RSQUNJ
Tkc9eQpDT05GSUdfQVRIMTBLPW0KQ09ORklHX0FUSDEwS19QQ0k9bQojIENPTkZJR19BVEgx
MEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVCVUdGUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0NOMzZYWCBp
cyBub3Qgc2V0CkNPTkZJR19CNDM9bQpDT05GSUdfQjQzX0JDTUE9eQpDT05GSUdfQjQzX1NT
Qj15CkNPTkZJR19CNDNfQlVTRVNfQkNNQV9BTkRfU1NCPXkKIyBDT05GSUdfQjQzX0JVU0VT
X0JDTUEgaXMgbm90IHNldAojIENPTkZJR19CNDNfQlVTRVNfU1NCIGlzIG5vdCBzZXQKQ09O
RklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkNPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNU
PXkKQ09ORklHX0I0M19QQ01DSUE9eQpDT05GSUdfQjQzX1NESU89eQpDT05GSUdfQjQzX0JD
TUFfUElPPXkKQ09ORklHX0I0M19QSU89eQpDT05GSUdfQjQzX1BIWV9HPXkKQ09ORklHX0I0
M19QSFlfTj15CkNPTkZJR19CNDNfUEhZX0xQPXkKQ09ORklHX0I0M19QSFlfSFQ9eQpDT05G
SUdfQjQzX0xFRFM9eQpDT05GSUdfQjQzX0hXUk5HPXkKIyBDT05GSUdfQjQzX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0I0M0xFR0FDWT1tCkNPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9T
RUxFQ1Q9eQpDT05GSUdfQjQzTEVHQUNZX1BDSUNPUkVfQVVUT1NFTEVDVD15CkNPTkZJR19C
NDNMRUdBQ1lfTEVEUz15CkNPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQpDT05GSUdfQjQzTEVH
QUNZX0RFQlVHPXkKQ09ORklHX0I0M0xFR0FDWV9ETUE9eQpDT05GSUdfQjQzTEVHQUNZX1BJ
Tz15CkNPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CiMgQ09ORklHX0I0M0xF
R0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0I0M0xFR0FDWV9QSU9fTU9ERSBp
cyBub3Qgc2V0CkNPTkZJR19CUkNNVVRJTD1tCkNPTkZJR19CUkNNU01BQz1tCkNPTkZJR19C
UkNNRk1BQz1tCkNPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDPXkKQ09ORklHX0JSQ01GTUFD
X1BST1RPX01TR0JVRj15CkNPTkZJR19CUkNNRk1BQ19TRElPPXkKQ09ORklHX0JSQ01GTUFD
X1VTQj15CkNPTkZJR19CUkNNRk1BQ19QQ0lFPXkKIyBDT05GSUdfQlJDTV9UUkFDSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNPTkZJR19IT1NUQVA9bQpD
T05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKIyBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFN
IGlzIG5vdCBzZXQKQ09ORklHX0hPU1RBUF9QTFg9bQpDT05GSUdfSE9TVEFQX1BDST1tCkNP
TkZJR19IT1NUQVBfQ1M9bQojIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKQ09ORklHX0lQ
VzIyMDA9bQpDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKQ09ORklHX0lQVzIyMDBfUkFESU9U
QVA9eQpDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUz15CkNPTkZJR19JUFcyMjAwX1FPUz15
CiMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfTElCSVBXPW0KIyBD
T05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lXTFdJRkk9bQpDT05GSUdf
SVdMV0lGSV9MRURTPXkKQ09ORklHX0lXTERWTT1tCkNPTkZJR19JV0xNVk09bQpDT05GSUdf
SVdMV0lGSV9PUE1PREVfTU9EVUxBUj15CiMgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVS
SU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMV0lGSV9VQVBTRCBpcyBub3Qgc2V0CgojCiMg
RGVidWdnaW5nIE9wdGlvbnMKIwojIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19JV0xF
R0FDWT1tCkNPTkZJR19JV0w0OTY1PW0KQ09ORklHX0lXTDM5NDU9bQoKIwojIGl3bDM5NDUg
LyBpd2w0OTY1IERlYnVnZ2luZyBPcHRpb25zCiMKIyBDT05GSUdfSVdMRUdBQ1lfREVCVUcg
aXMgbm90IHNldApDT05GSUdfTElCRVJUQVM9bQpDT05GSUdfTElCRVJUQVNfVVNCPW0KQ09O
RklHX0xJQkVSVEFTX0NTPW0KQ09ORklHX0xJQkVSVEFTX1NESU89bQojIENPTkZJR19MSUJF
UlRBU19TUEkgaXMgbm90IHNldAojIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19MSUJFUlRBU19NRVNIPXkKQ09ORklHX0hFUk1FUz1tCiMgQ09ORklHX0hFUk1F
U19QUklTTSBpcyBub3Qgc2V0CkNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CkNP
TkZJR19QTFhfSEVSTUVTPW0KQ09ORklHX1RNRF9IRVJNRVM9bQpDT05GSUdfTk9SVEVMX0hF
Uk1FUz1tCkNPTkZJR19QQ01DSUFfSEVSTUVTPW0KQ09ORklHX1BDTUNJQV9TUEVDVFJVTT1t
CkNPTkZJR19PUklOT0NPX1VTQj1tCkNPTkZJR19QNTRfQ09NTU9OPW0KQ09ORklHX1A1NF9V
U0I9bQpDT05GSUdfUDU0X1BDST1tCiMgQ09ORklHX1A1NF9TUEkgaXMgbm90IHNldApDT05G
SUdfUDU0X0xFRFM9eQpDT05GSUdfUlQyWDAwPW0KQ09ORklHX1JUMjQwMFBDST1tCkNPTkZJ
R19SVDI1MDBQQ0k9bQpDT05GSUdfUlQ2MVBDST1tCkNPTkZJR19SVDI4MDBQQ0k9bQpDT05G
SUdfUlQyODAwUENJX1JUMzNYWD15CkNPTkZJR19SVDI4MDBQQ0lfUlQzNVhYPXkKQ09ORklH
X1JUMjgwMFBDSV9SVDUzWFg9eQpDT05GSUdfUlQyODAwUENJX1JUMzI5MD15CkNPTkZJR19S
VDI1MDBVU0I9bQpDT05GSUdfUlQ3M1VTQj1tCkNPTkZJR19SVDI4MDBVU0I9bQpDT05GSUdf
UlQyODAwVVNCX1JUMzNYWD15CkNPTkZJR19SVDI4MDBVU0JfUlQzNVhYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDM1NzM9eQpDT05GSUdfUlQyODAwVVNCX1JUNTNYWD15CkNPTkZJR19SVDI4
MDBVU0JfUlQ1NVhYPXkKIyBDT05GSUdfUlQyODAwVVNCX1VOS05PV04gaXMgbm90IHNldApD
T05GSUdfUlQyODAwX0xJQj1tCkNPTkZJR19SVDI4MDBfTElCX01NSU89bQpDT05GSUdfUlQy
WDAwX0xJQl9NTUlPPW0KQ09ORklHX1JUMlgwMF9MSUJfUENJPW0KQ09ORklHX1JUMlgwMF9M
SUJfVVNCPW0KQ09ORklHX1JUMlgwMF9MSUI9bQpDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FS
RT15CkNPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15CkNPTkZJR19SVDJYMDBfTElCX0xFRFM9
eQojIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfUlRMX0NBUkRTPW0K
Q09ORklHX1JUTDgxOTJDRT1tCkNPTkZJR19SVEw4MTkyU0U9bQpDT05GSUdfUlRMODE5MkRF
PW0KQ09ORklHX1JUTDg3MjNBRT1tCkNPTkZJR19SVEw4NzIzQkU9bQpDT05GSUdfUlRMODE4
OEVFPW0KQ09ORklHX1JUTDgxOTJFRT1tCkNPTkZJR19SVEw4ODIxQUU9bQpDT05GSUdfUlRM
ODE5MkNVPW0KQ09ORklHX1JUTFdJRkk9bQpDT05GSUdfUlRMV0lGSV9QQ0k9bQpDT05GSUdf
UlRMV0lGSV9VU0I9bQojIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1JUTDgxOTJDX0NPTU1PTj1tCkNPTkZJR19SVEw4NzIzX0NPTU1PTj1tCkNPTkZJR19SVExC
VENPRVhJU1Q9bQojIENPTkZJR19XTF9USSBpcyBub3Qgc2V0CkNPTkZJR19aRDEyMTFSVz1t
CiMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVg9bQpD
T05GSUdfTVdJRklFWF9TRElPPW0KQ09ORklHX01XSUZJRVhfUENJRT1tCkNPTkZJR19NV0lG
SUVYX1VTQj1tCiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19SU0lfOTFYPW0K
Q09ORklHX1JTSV9ERUJVR0ZTPXkKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApDT05G
SUdfUlNJX1VTQj1tCgojCiMgV2lNQVggV2lyZWxlc3MgQnJvYWRiYW5kIGRldmljZXMKIwpD
T05GSUdfV0lNQVhfSTI0MDBNPW0KQ09ORklHX1dJTUFYX0kyNDAwTV9VU0I9bQpDT05GSUdf
V0lNQVhfSTI0MDBNX0RFQlVHX0xFVkVMPTgKQ09ORklHX1dBTj15CkNPTkZJR19MQU5NRURJ
QT1tCkNPTkZJR19IRExDPW0KQ09ORklHX0hETENfUkFXPW0KQ09ORklHX0hETENfUkFXX0VU
SD1tCkNPTkZJR19IRExDX0NJU0NPPW0KQ09ORklHX0hETENfRlI9bQpDT05GSUdfSERMQ19Q
UFA9bQojIENPTkZJR19IRExDX1gyNSBpcyBub3Qgc2V0CkNPTkZJR19QQ0kyMDBTWU49bQpD
T05GSUdfV0FOWEw9bQojIENPTkZJR19QQzMwMFRPTyBpcyBub3Qgc2V0CkNPTkZJR19GQVJT
WU5DPW0KQ09ORklHX0RTQ0M0PW0KQ09ORklHX0RTQ0M0X1BDSVNZTkM9eQpDT05GSUdfRFND
QzRfUENJX1JTVD15CkNPTkZJR19ETENJPW0KQ09ORklHX0RMQ0lfTUFYPTgKIyBDT05GSUdf
U0JOSSBpcyBub3Qgc2V0CkNPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9bQpDT05GSUdfWEVO
X05FVERFVl9GUk9OVEVORD1tCkNPTkZJR19YRU5fTkVUREVWX0JBQ0tFTkQ9bQpDT05GSUdf
Vk1YTkVUMz1tCkNPTkZJR19IWVBFUlZfTkVUPW0KQ09ORklHX0lTRE49eQojIENPTkZJR19J
U0ROX0k0TCBpcyBub3Qgc2V0CkNPTkZJR19JU0ROX0NBUEk9bQpDT05GSUdfQ0FQSV9UUkFD
RT15CkNPTkZJR19JU0ROX0NBUElfQ0FQSTIwPW0KQ09ORklHX0lTRE5fQ0FQSV9NSURETEVX
QVJFPXkKCiMKIyBDQVBJIGhhcmR3YXJlIGRyaXZlcnMKIwpDT05GSUdfQ0FQSV9BVk09eQpD
T05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0k9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQ
Q0lWND15CkNPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCkNPTkZJR19JU0ROX0RS
Vl9BVk1CMV9BVk1fQ1M9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfVDFQQ0k9bQpDT05GSUdf
SVNETl9EUlZfQVZNQjFfQzQ9bQpDT05GSUdfQ0FQSV9FSUNPTj15CkNPTkZJR19JU0ROX0RJ
VkFTPW0KQ09ORklHX0lTRE5fRElWQVNfQlJJUENJPXkKQ09ORklHX0lTRE5fRElWQVNfUFJJ
UENJPXkKQ09ORklHX0lTRE5fRElWQVNfRElWQUNBUEk9bQpDT05GSUdfSVNETl9ESVZBU19V
U0VSSURJPW0KQ09ORklHX0lTRE5fRElWQVNfTUFJTlQ9bQpDT05GSUdfSVNETl9EUlZfR0lH
QVNFVD1tCkNPTkZJR19HSUdBU0VUX0NBUEk9eQojIENPTkZJR19HSUdBU0VUX0RVTU1ZTEwg
aXMgbm90IHNldApDT05GSUdfR0lHQVNFVF9CQVNFPW0KQ09ORklHX0dJR0FTRVRfTTEwNT1t
CkNPTkZJR19HSUdBU0VUX00xMDE9bQojIENPTkZJR19HSUdBU0VUX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0hZU0ROPW0KQ09ORklHX0hZU0ROX0NBUEk9eQpDT05GSUdfTUlTRE49bQpD
T05GSUdfTUlTRE5fRFNQPW0KQ09ORklHX01JU0ROX0wxT0lQPW0KCiMKIyBtSVNETiBoYXJk
d2FyZSBkcml2ZXJzCiMKQ09ORklHX01JU0ROX0hGQ1BDST1tCkNPTkZJR19NSVNETl9IRkNN
VUxUST1tCkNPTkZJR19NSVNETl9IRkNVU0I9bQpDT05GSUdfTUlTRE5fQVZNRlJJVFo9bQpD
T05GSUdfTUlTRE5fU1BFRURGQVg9bQpDT05GSUdfTUlTRE5fSU5GSU5FT049bQpDT05GSUdf
TUlTRE5fVzY2OTI9bQojIENPTkZJR19NSVNETl9ORVRKRVQgaXMgbm90IHNldApDT05GSUdf
TUlTRE5fSVBBQz1tCkNPTkZJR19NSVNETl9JU0FSPW0KCiMKIyBJbnB1dCBkZXZpY2Ugc3Vw
cG9ydAojCkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KQ09ORklH
X0lOUFVUX1BPTExERVY9bQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD1tCiMgQ09ORklHX0lO
UFVUX01BVFJJWEtNQVAgaXMgbm90IHNldAoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwpD
T05GSUdfSU5QVVRfTU9VU0VERVY9eQpDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQpD
T05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNApDT05GSUdfSU5QVVRfTU9VU0VE
RVZfU0NSRUVOX1k9NzY4CkNPTkZJR19JTlBVVF9KT1lERVY9bQpDT05GSUdfSU5QVVRfRVZE
RVY9bQojIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNl
IERyaXZlcnMKIwpDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQURQ
NTU4OD1tCiMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODkgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfQVRLQkQ9eQojIENPTkZJR19LRVlCT0FSRF9RVDEwNzAgaXMgbm90IHNldApDT05G
SUdfS0VZQk9BUkRfUVQyMTYwPW0KQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KIyBDT05GSUdf
S0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0dQSU9fUE9MTEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0tFWUJPQVJEX1RDQTg0MTggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NQVRS
SVggaXMgbm90IHNldApDT05GSUdfS0VZQk9BUkRfTE04MzIzPW0KIyBDT05GSUdfS0VZQk9B
UkRfTE04MzMzIGlzIG5vdCBzZXQKQ09ORklHX0tFWUJPQVJEX01BWDczNTk9bQojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMg
bm90IHNldApDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KQ09ORklHX0tFWUJPQVJEX09QRU5D
T1JFUz1tCiMgQ09ORklHX0tFWUJPQVJEX1NBTVNVTkcgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfU1RPV0FXQVk9bQpDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KQ09ORklHX0tFWUJP
QVJEX1hUS0JEPW0KQ09ORklHX0lOUFVUX01PVVNFPXkKQ09ORklHX01PVVNFX1BTMj1tCkNP
TkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKQ09O
RklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQpDT05GSUdfTU9VU0VfUFMyX0NZUFJFU1M9eQpD
T05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5U
PXkKQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSD15CkNPTkZJR19NT1VTRV9QUzJfU0VOVEVM
SUM9eQojIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldApDT05GSUdfTU9V
U0VfUFMyX0ZPQ0FMVEVDSD15CiMgQ09ORklHX01PVVNFX1BTMl9WTU1PVVNFIGlzIG5vdCBz
ZXQKQ09ORklHX01PVVNFX1NFUklBTD1tCkNPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KQ09O
RklHX01PVVNFX0JDTTU5NzQ9bQpDT05GSUdfTU9VU0VfQ1lBUEE9bQojIENPTkZJR19NT1VT
RV9FTEFOX0kyQyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9WU1hYWEFBPW0KIyBDT05GSUdf
TU9VU0VfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDPW0KQ09O
RklHX01PVVNFX1NZTkFQVElDU19VU0I9bQpDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQpDT05G
SUdfSk9ZU1RJQ0tfQU5BTE9HPW0KQ09ORklHX0pPWVNUSUNLX0EzRD1tCkNPTkZJR19KT1lT
VElDS19BREk9bQpDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQpDT05GSUdfSk9ZU1RJQ0tfR0Yy
Sz1tCkNPTkZJR19KT1lTVElDS19HUklQPW0KQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQpD
T05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UPW0KQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUPW0K
Q09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQpDT05GSUdfSk9ZU1RJQ0tfVE1EQz1tCkNP
TkZJR19KT1lTVElDS19JRk9SQ0U9bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CkNP
TkZJR19KT1lTVElDS19JRk9SQ0VfMjMyPXkKQ09ORklHX0pPWVNUSUNLX1dBUlJJT1I9bQpD
T05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQpDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkI9bQpD
T05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQpD
T05GSUdfSk9ZU1RJQ0tfVFdJREpPWT1tCkNPTkZJR19KT1lTVElDS19aSEVOSFVBPW0KQ09O
RklHX0pPWVNUSUNLX0RCOT1tCkNPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KQ09ORklHX0pP
WVNUSUNLX1RVUkJPR1JBRlg9bQojIENPTkZJR19KT1lTVElDS19BUzUwMTEgaXMgbm90IHNl
dApDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVNUD1tCkNPTkZJR19KT1lTVElDS19YUEFEPW0KQ09O
RklHX0pPWVNUSUNLX1hQQURfRkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKQ09O
RklHX0pPWVNUSUNLX1dBTEtFUkEwNzAxPW0KQ09ORklHX0lOUFVUX1RBQkxFVD15CkNPTkZJ
R19UQUJMRVRfVVNCX0FDRUNBRD1tCkNPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCkNPTkZJ
R19UQUJMRVRfVVNCX0dUQ089bQpDT05GSUdfVEFCTEVUX1VTQl9IQU5XQU5HPW0KQ09ORklH
X1RBQkxFVF9VU0JfS0JUQUI9bQpDT05GSUdfVEFCTEVUX1NFUklBTF9XQUNPTTQ9bQpDT05G
SUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQpDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj1tCkNP
TkZJR19UT1VDSFNDUkVFTl9BRDc4Nzc9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5PW0K
Q09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkM9bQojIENPTkZJR19UT1VDSFNDUkVFTl9B
RDc4NzlfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCiMg
Q09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIgaXMgbm90IHNldAojIENPTkZJR19UT1VD
SFNDUkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RN
RzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JFIGlzIG5vdCBzZXQKQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk89bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJF
PW0KQ09ORklHX1RPVUNIU0NSRUVOX0VFVEk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRT
VT1tCiMgQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0lMSTIxMFggaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9
bQojIENPTkZJR19UT1VDSFNDUkVFTl9FTEFOIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NS
RUVOX0VMTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMT1tCiMgQ09ORklHX1RP
VUNIU0NSRUVOX1dBQ09NX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX01B
WDExODAxIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDA9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9NTVMxMTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fTVRP
VUNIPW0KQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9N
SzcxMj1tCkNPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVD1tCiMgQ09ORklHX1RPVUNIU0NS
RUVOX0VEVF9GVDVYMDYgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdI
VD1tCkNPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCiMgQ09ORklHX1RPVUNIU0NSRUVO
X1BJWENJUiBpcyBub3Qgc2V0CkNPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQpDT05GSUdf
VE9VQ0hTQ1JFRU5fV005NzA1PXkKQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15CkNPTkZJ
R19UT1VDSFNDUkVFTl9XTTk3MTM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lU
RT1tCkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkKQ09ORklHX1RPVUNI
U0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJCTz15CkNPTkZJ
R19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0RNQ19U
U0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VDSFND
UkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNP
TkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5f
VVNCX05FWElPPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQpDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCkNPTkZJR19UT1VDSFNDUkVFTl9UU0NfU0VSSU89
bQojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1IGlzIG5vdCBzZXQKQ09ORklHX1RPVUNI
U0NSRUVOX1RTQzIwMDc9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIgaXMgbm90IHNl
dApDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSNDA9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TWDg2
NTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1g9bQojIENPTkZJR19U
T1VDSFNDUkVFTl9aRk9SQ0UgaXMgbm90IHNldApDT05GSUdfSU5QVVRfTUlTQz15CiMgQ09O
RklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0JNQTE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lO
UFVUX1BDU1BLUj1tCiMgQ09ORklHX0lOUFVUX01NQTg0NTAgaXMgbm90IHNldAojIENPTkZJ
R19JTlBVVF9NUFUzMDUwIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FQQU5FTD1tCiMgQ09O
RklHX0lOUFVUX0dQMkEgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX0JFRVBFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVElMVF9QT0xMRUQgaXMgbm90IHNldApD
T05GSUdfSU5QVVRfQVRMQVNfQlROUz1tCkNPTkZJR19JTlBVVF9BVElfUkVNT1RFMj1tCkNP
TkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URT1tCiMgQ09ORklHX0lOUFVUX0tYVEo5IGlzIG5v
dCBzZXQKQ09ORklHX0lOUFVUX1BPV0VSTUFURT1tCkNPTkZJR19JTlBVVF9ZRUFMSU5LPW0K
Q09ORklHX0lOUFVUX0NNMTA5PW0KQ09ORklHX0lOUFVUX1VJTlBVVD1tCiMgQ09ORklHX0lO
UFVUX1BDRjg1NzQgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNP
REVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOUFVUX0lNU19QQ1UgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9DTUEzMDAwIGlz
IG5vdCBzZXQKQ09ORklHX0lOUFVUX1hFTl9LQkRERVZfRlJPTlRFTkQ9eQpDT05GSUdfSU5Q
VVRfSURFQVBBRF9TTElERUJBUj1tCiMgQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RSVjI2NjdfSEFQVElDUyBpcyBub3Qgc2V0Cgoj
CiMgSGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkKQ09ORklHX0FSQ0hfTUlH
SFRfSEFWRV9QQ19TRVJJTz15CkNPTkZJR19TRVJJT19JODA0Mj15CkNPTkZJR19TRVJJT19T
RVJQT1JUPW0KQ09ORklHX1NFUklPX0NUODJDNzEwPW0KQ09ORklHX1NFUklPX1BBUktCRD1t
CkNPTkZJR19TRVJJT19QQ0lQUzI9bQpDT05GSUdfU0VSSU9fTElCUFMyPXkKQ09ORklHX1NF
UklPX1JBVz1tCkNPTkZJR19TRVJJT19BTFRFUkFfUFMyPW0KIyBDT05GSUdfU0VSSU9fUFMy
TVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0FSQ19QUzIgaXMgbm90IHNldApDT05G
SUdfSFlQRVJWX0tFWUJPQVJEPW0KQ09ORklHX0dBTUVQT1JUPW0KQ09ORklHX0dBTUVQT1JU
X05TNTU4PW0KQ09ORklHX0dBTUVQT1JUX0w0PW0KQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9
bQpDT05GSUdfR0FNRVBPUlRfRk04MDE9bQoKIwojIENoYXJhY3RlciBkZXZpY2VzCiMKQ09O
RklHX1RUWT15CkNPTkZJR19WVD15CkNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CkNP
TkZJR19WVF9DT05TT0xFPXkKQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVA9eQpDT05GSUdfSFdf
Q09OU09MRT15CkNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQpDT05GSUdfVU5JWDk4
X1BUWVM9eQpDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiMgQ09ORklHX0xF
R0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CkNPTkZJ
R19ST0NLRVRQT1JUPW0KQ09ORklHX0NZQ0xBREVTPW0KIyBDT05GSUdfQ1laX0lOVFIgaXMg
bm90IHNldApDT05GSUdfTU9YQV9JTlRFTExJTz1tCkNPTkZJR19NT1hBX1NNQVJUSU89bQpD
T05GSUdfU1lOQ0xJTks9bQpDT05GSUdfU1lOQ0xJTktNUD1tCkNPTkZJR19TWU5DTElOS19H
VD1tCkNPTkZJR19OT1pPTUk9bQpDT05GSUdfSVNJPW0KQ09ORklHX05fSERMQz1tCkNPTkZJ
R19OX0dTTT1tCiMgQ09ORklHX1RSQUNFX1NJTksgaXMgbm90IHNldApDT05GSUdfREVWTUVN
PXkKIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpD
T05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09ORklHX1NFUklBTF84MjUwPXkKIyBDT05GSUdf
U0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF84MjUwX1BOUD15CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklHX1NFUklB
TF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFMXzgy
NTBfQ1M9bQpDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84
MjUwX1JVTlRJTUVfVUFSVFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05G
SUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CkNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9J
UlE9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EVz15CkNPTkZJR19TRVJJ
QUxfODI1MF9GSU5URUs9bQoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwoj
IENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgz
MTBYIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JF
X0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX0pTTT1tCiMgQ09ORklHX1NFUklBTF9TQ0NOWFAg
aXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9B
TFRFUkFfVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9JRlg2WDYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VSSUFMX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfUlAyPW0K
Q09ORklHX1NFUklBTF9SUDJfTlJfVUFSVFM9MzIKIyBDT05GSUdfU0VSSUFMX0ZTTF9MUFVB
UlQgaXMgbm90IHNldAojIENPTkZJR19UVFlfUFJJTlRLIGlzIG5vdCBzZXQKQ09ORklHX1BS
SU5URVI9bQojIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKQ09ORklHX1BQREVWPW0K
Q09ORklHX0hWQ19EUklWRVI9eQpDT05GSUdfSFZDX0lSUT15CkNPTkZJR19IVkNfWEVOPXkK
Q09ORklHX0hWQ19YRU5fRlJPTlRFTkQ9eQpDT05GSUdfVklSVElPX0NPTlNPTEU9bQpDT05G
SUdfSVBNSV9IQU5ETEVSPW0KIyBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCBpcyBub3Qgc2V0
CkNPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQpDT05GSUdfSVBNSV9TST1tCiMgQ09O
RklHX0lQTUlfU0lfUFJPQkVfREVGQVVMVFMgaXMgbm90IHNldAojIENPTkZJR19JUE1JX1NT
SUYgaXMgbm90IHNldApDT05GSUdfSVBNSV9XQVRDSERPRz1tCkNPTkZJR19JUE1JX1BPV0VS
T0ZGPW0KQ09ORklHX0hXX1JBTkRPTT1tCiMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVN
IGlzIG5vdCBzZXQKQ09ORklHX0hXX1JBTkRPTV9JTlRFTD1tCkNPTkZJR19IV19SQU5ET01f
QU1EPW0KQ09ORklHX0hXX1JBTkRPTV9WSUE9bQpDT05GSUdfSFdfUkFORE9NX1ZJUlRJTz1t
CkNPTkZJR19IV19SQU5ET01fVFBNPW0KQ09ORklHX05WUkFNPW0KQ09ORklHX1IzOTY0PW0K
Q09ORklHX0FQUExJQ09NPW0KCiMKIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKIwpDT05G
SUdfU1lOQ0xJTktfQ1M9bQpDT05GSUdfQ0FSRE1BTl80MDAwPW0KQ09ORklHX0NBUkRNQU5f
NDA0MD1tCkNPTkZJR19JUFdJUkVMRVNTPW0KQ09ORklHX01XQVZFPW0KQ09ORklHX1JBV19E
UklWRVI9bQpDT05GSUdfTUFYX1JBV19ERVZTPTI1NgpDT05GSUdfSFBFVD15CkNPTkZJR19I
UEVUX01NQVA9eQpDT05GSUdfSFBFVF9NTUFQX0RFRkFVTFQ9eQpDT05GSUdfSEFOR0NIRUNL
X1RJTUVSPW0KQ09ORklHX1RDR19UUE09bQpDT05GSUdfVENHX1RJUz1tCkNPTkZJR19UQ0df
VElTX0kyQ19BVE1FTD1tCkNPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTj1tCkNPTkZJR19U
Q0dfVElTX0kyQ19OVVZPVE9OPW0KQ09ORklHX1RDR19OU0M9bQpDT05GSUdfVENHX0FUTUVM
PW0KQ09ORklHX1RDR19JTkZJTkVPTj1tCkNPTkZJR19UQ0dfWEVOPW0KQ09ORklHX1RDR19D
UkI9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyND1tCkNPTkZJR19UQ0dfVElTX1NUMzNaUDI0
X0kyQz1tCiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfU1BJIGlzIG5vdCBzZXQKQ09ORklH
X1RFTENMT0NLPW0KQ09ORklHX0RFVlBPUlQ9eQojIENPTkZJR19YSUxMWUJVUyBpcyBub3Qg
c2V0CgojCiMgSTJDIHN1cHBvcnQKIwpDT05GSUdfSTJDPXkKQ09ORklHX0FDUElfSTJDX09Q
UkVHSU9OPXkKQ09ORklHX0kyQ19CT0FSRElORk89eQpDT05GSUdfSTJDX0NPTVBBVD15CkNP
TkZJR19JMkNfQ0hBUkRFVj1tCkNPTkZJR19JMkNfTVVYPW0KCiMKIyBNdWx0aXBsZXhlciBJ
MkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX01VWF9HUElPIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJDX01VWF9QQ0E5NTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QQ0E5
NTR4IGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QSU5DVFJMIGlzIG5vdCBzZXQKQ09O
RklHX0kyQ19IRUxQRVJfQVVUTz15CkNPTkZJR19JMkNfU01CVVM9bQpDT05GSUdfSTJDX0FM
R09CSVQ9bQpDT05GSUdfSTJDX0FMR09QQ0E9bQoKIwojIEkyQyBIYXJkd2FyZSBCdXMgc3Vw
cG9ydAojCgojCiMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0FMSTE1MzU9bQpDT05GSUdfSTJDX0FMSTE1NjM9bQpDT05GSUdfSTJDX0FMSTE1WDM9
bQpDT05GSUdfSTJDX0FNRDc1Nj1tCkNPTkZJR19JMkNfQU1ENzU2X1M0ODgyPW0KQ09ORklH
X0kyQ19BTUQ4MTExPW0KQ09ORklHX0kyQ19JODAxPW0KQ09ORklHX0kyQ19JU0NIPW0KQ09O
RklHX0kyQ19JU01UPW0KQ09ORklHX0kyQ19QSUlYND1tCkNPTkZJR19JMkNfTkZPUkNFMj1t
CkNPTkZJR19JMkNfTkZPUkNFMl9TNDk4NT1tCkNPTkZJR19JMkNfU0lTNTU5NT1tCkNPTkZJ
R19JMkNfU0lTNjMwPW0KQ09ORklHX0kyQ19TSVM5Nlg9bQpDT05GSUdfSTJDX1ZJQT1tCkNP
TkZJR19JMkNfVklBUFJPPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NDTUk9
bQoKIwojIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3Rl
bS1vbi1jaGlwKQojCiMgQ09ORklHX0kyQ19DQlVTX0dQSU8gaXMgbm90IHNldApDT05GSUdf
STJDX0RFU0lHTldBUkVfQ09SRT1tCkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT1t
CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QQ0k9bQojIENPTkZJR19JMkNfR1BJTyBpcyBub3Qg
c2V0CkNPTkZJR19JMkNfS0VNUExEPW0KQ09ORklHX0kyQ19PQ09SRVM9bQpDT05GSUdfSTJD
X1BDQV9QTEFURk9STT1tCiMgQ09ORklHX0kyQ19QWEFfUENJIGlzIG5vdCBzZXQKQ09ORklH
X0kyQ19TSU1URUM9bQojIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBFeHRl
cm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiMKQ09ORklHX0kyQ19ESU9MQU5fVTJD
PW0KQ09ORklHX0kyQ19QQVJQT1JUPW0KQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KQ09O
RklHX0kyQ19ST0JPVEZVWlpfT1NJRj1tCkNPTkZJR19JMkNfVEFPU19FVk09bQpDT05GSUdf
STJDX1RJTllfVVNCPW0KQ09ORklHX0kyQ19WSVBFUkJPQVJEPW0KCiMKIyBPdGhlciBJMkMv
U01CdXMgYnVzIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NUVUI9bQojIENPTkZJR19JMkNfU0xB
VkUgaXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApD
T05GSUdfU1BJX01BU1RFUj15CgojCiMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMK
IwojIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9CSVRCQU5HPW0K
Q09ORklHX1NQSV9CVVRURVJGTFk9bQojIENPTkZJR19TUElfQ0FERU5DRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9MTTcwX0xMUD1tCiMg
Q09ORklHX1NQSV9PQ19USU5ZIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9QWEEyWFhfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJ
X1NDMThJUzYwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9YQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAojIENPTkZJR19TUElfREVTSUdOV0FSRSBp
cyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1hc3RlcnMKIwojIENPTkZJR19TUElfU1BJ
REVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAojIENPTkZJ
R19TUE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSFNJIGlzIG5vdCBzZXQKCiMKIyBQUFMgc3Vw
cG9ydAojCkNPTkZJR19QUFM9bQojIENPTkZJR19QUFNfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19OVFBfUFBTIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBD
T05GSUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldApDT05GSUdfUFBTX0NMSUVOVF9M
RElTQz1tCkNPTkZJR19QUFNfQ0xJRU5UX1BBUlBPUlQ9bQojIENPTkZJR19QUFNfQ0xJRU5U
X0dQSU8gaXMgbm90IHNldAoKIwojIFBQUyBnZW5lcmF0b3JzIHN1cHBvcnQKIwoKIwojIFBU
UCBjbG9jayBzdXBwb3J0CiMKQ09ORklHX1BUUF8xNTg4X0NMT0NLPW0KCiMKIyBFbmFibGUg
UEhZTElCIGFuZCBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgdG8gc2VlIHRoZSBhZGRpdGlv
bmFsIGNsb2Nrcy4KIwpDT05GSUdfUElOQ1RSTD15CgojCiMgUGluIGNvbnRyb2xsZXJzCiMK
IyBDT05GSUdfREVCVUdfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfQU1E
IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9CQVlUUkFJTCBpcyBub3Qgc2V0CiMgQ09O
RklHX1BJTkNUUkxfQ0hFUlJZVklFVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VO
UklTRVBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElC
PXkKQ09ORklHX0dQSU9MSUI9eQpDT05GSUdfR1BJT19ERVZSRVM9eQpDT05GSUdfR1BJT19B
Q1BJPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU1lT
RlMgaXMgbm90IHNldAoKIwojIE1lbW9yeSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05G
SUdfR1BJT19EV0FQQiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fRjcxODhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19JQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAoj
IENPTkZJR19HUElPX0xZTlhQT0lOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TQ0gzMTFYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19WWDg1NSBpcyBub3Qgc2V0CgojCiMgSTJDIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5
NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05G
SUdfR1BJT19TWDE1MFggaXMgbm90IHNldAoKIwojIE1GRCBHUElPIGV4cGFuZGVycwojCkNP
TkZJR19HUElPX0tFTVBMRD1tCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19JTlRFTF9NSUQgaXMgbm90
IHNldApDT05GSUdfR1BJT19NTF9JT0g9bQojIENPTkZJR19HUElPX1JEQzMyMVggaXMgbm90
IHNldAoKIwojIFNQSSBHUElPIGV4cGFuZGVycwojCiMgQ09ORklHX0dQSU9fTUFYNzMwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAojIENPTkZJR19H
UElPX01DMzM4ODAgaXMgbm90IHNldAoKIwojIFVTQiBHUElPIGV4cGFuZGVycwojCkNPTkZJ
R19HUElPX1ZJUEVSQk9BUkQ9bQpDT05GSUdfVzE9bQpDT05GSUdfVzFfQ09OPXkKCiMKIyAx
LXdpcmUgQnVzIE1hc3RlcnMKIwpDT05GSUdfVzFfTUFTVEVSX01BVFJPWD1tCkNPTkZJR19X
MV9NQVNURVJfRFMyNDkwPW0KQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQojIENPTkZJR19X
MV9NQVNURVJfRFMxV00gaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBu
b3Qgc2V0CgojCiMgMS13aXJlIFNsYXZlcwojCkNPTkZJR19XMV9TTEFWRV9USEVSTT1tCkNP
TkZJR19XMV9TTEFWRV9TTUVNPW0KIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBz
ZXQKQ09ORklHX1cxX1NMQVZFX0RTMjQzMT1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQoj
IENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyOEUwNCBpcyBub3Qgc2V0CkNPTkZJR19XMV9TTEFWRV9CUTI3MDAwPW0KQ09ORklH
X1BPV0VSX1NVUFBMWT15CiMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVSSUNfQURDX0JB
VFRFUlkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BPV0VSIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKQ09ORklHX0JB
VFRFUllfU0JTPW0KIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcw
NDIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX01BWDg5MDMgaXMgbm90IHNldAojIENP
TkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDE1WCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNDE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVQg
aXMgbm90IHNldAojIENPTkZJR19QT1dFUl9BVlMgaXMgbm90IHNldApDT05GSUdfSFdNT049
eQpDT05GSUdfSFdNT05fVklEPW0KIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qg
c2V0CgojCiMgTmF0aXZlIGRyaXZlcnMKIwpDT05GSUdfU0VOU09SU19BQklUVUdVUlU9bQpD
T05GSUdfU0VOU09SU19BQklUVUdVUlUzPW0KIyBDT05GSUdfU0VOU09SU19BRDczMTQgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRDc0MTQ9bQpDT05GSUdfU0VOU09SU19BRDc0MTg9
bQpDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCkNP
TkZJR19TRU5TT1JTX0FETTEwMjY9bQpDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KQ09ORklH
X1NFTlNPUlNfQURNMTAzMT1tCkNPTkZJR19TRU5TT1JTX0FETTkyNDA9bQojIENPTkZJR19T
RU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTAgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRFQ3NDExPW0KQ09ORklHX1NFTlNPUlNfQURUNzQ2
Mj1tCkNPTkZJR19TRU5TT1JTX0FEVDc0NzA9bQpDT05GSUdfU0VOU09SU19BRFQ3NDc1PW0K
Q09ORklHX1NFTlNPUlNfQVNDNzYyMT1tCkNPTkZJR19TRU5TT1JTX0s4VEVNUD1tCkNPTkZJ
R19TRU5TT1JTX0sxMFRFTVA9bQpDT05GSUdfU0VOU09SU19GQU0xNUhfUE9XRVI9bQpDT05G
SUdfU0VOU09SU19BUFBMRVNNQz1tCkNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCkNPTkZJR19T
RU5TT1JTX0FUWFAxPW0KQ09ORklHX1NFTlNPUlNfRFM2MjA9bQpDT05GSUdfU0VOU09SU19E
UzE2MjE9bQpDT05GSUdfU0VOU09SU19JNUtfQU1CPW0KQ09ORklHX1NFTlNPUlNfRjcxODA1
Rj1tCkNPTkZJR19TRU5TT1JTX0Y3MTg4MkZHPW0KQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1t
CkNPTkZJR19TRU5TT1JTX0ZTQ0hNRD1tCkNPTkZJR19TRU5TT1JTX0dMNTE4U009bQpDT05G
SUdfU0VOU09SU19HTDUyMFNNPW0KQ09ORklHX1NFTlNPUlNfRzc2MEE9bQojIENPTkZJR19T
RU5TT1JTX0c3NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0dQSU9fRkFOIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19ISUg2MTMwIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNP
UlNfSUJNQUVNPW0KQ09ORklHX1NFTlNPUlNfSUJNUEVYPW0KIyBDT05GSUdfU0VOU09SU19J
SU9fSFdNT04gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1NTAwIGlzIG5vdCBzZXQK
Q09ORklHX1NFTlNPUlNfQ09SRVRFTVA9bQpDT05GSUdfU0VOU09SU19JVDg3PW0KQ09ORklH
X1NFTlNPUlNfSkM0Mj1tCiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldApD
T05GSUdfU0VOU09SU19MSU5FQUdFPW0KIyBDT05GSUdfU0VOU09SU19MVEMyOTQ1IGlzIG5v
dCBzZXQKQ09ORklHX1NFTlNPUlNfTFRDNDE1MT1tCkNPTkZJR19TRU5TT1JTX0xUQzQyMTU9
bQojIENPTkZJR19TRU5TT1JTX0xUQzQyMjIgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19M
VEM0MjQ1PW0KIyBDT05GSUdfU0VOU09SU19MVEM0MjYwIGlzIG5vdCBzZXQKQ09ORklHX1NF
TlNPUlNfTFRDNDI2MT1tCkNPTkZJR19TRU5TT1JTX01BWDExMTE9bQpDT05GSUdfU0VOU09S
U19NQVgxNjA2NT1tCkNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQpDT05GSUdfU0VOU09SU19N
QVgxNjY4PW0KIyBDT05GSUdfU0VOU09SU19NQVgxOTcgaXMgbm90IHNldApDT05GSUdfU0VO
U09SU19NQVg2NjM5PW0KQ09ORklHX1NFTlNPUlNfTUFYNjY0Mj1tCkNPTkZJR19TRU5TT1JT
X01BWDY2NTA9bQojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0hUVTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQ1AzMDIxIGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTUVORjIxQk1DX0hXTU9OPW0KQ09ORklHX1NFTlNP
UlNfQURDWFg9bQpDT05GSUdfU0VOU09SU19MTTYzPW0KQ09ORklHX1NFTlNPUlNfTE03MD1t
CkNPTkZJR19TRU5TT1JTX0xNNzM9bQpDT05GSUdfU0VOU09SU19MTTc1PW0KQ09ORklHX1NF
TlNPUlNfTE03Nz1tCkNPTkZJR19TRU5TT1JTX0xNNzg9bQpDT05GSUdfU0VOU09SU19MTTgw
PW0KQ09ORklHX1NFTlNPUlNfTE04Mz1tCkNPTkZJR19TRU5TT1JTX0xNODU9bQpDT05GSUdf
U0VOU09SU19MTTg3PW0KQ09ORklHX1NFTlNPUlNfTE05MD1tCkNPTkZJR19TRU5TT1JTX0xN
OTI9bQpDT05GSUdfU0VOU09SU19MTTkzPW0KIyBDT05GSUdfU0VOU09SU19MTTk1MjM0IGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTE05NTI0MT1tCkNPTkZJR19TRU5TT1JTX0xNOTUy
NDU9bQpDT05GSUdfU0VOU09SU19QQzg3MzYwPW0KQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1t
CkNPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SPW0KQ09ORklHX1NFTlNPUlNfTkNUNjY4
Mz1tCkNPTkZJR19TRU5TT1JTX05DVDY3NzU9bQojIENPTkZJR19TRU5TT1JTX05DVDc4MDIg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX05DVDc5MDQgaXMgbm90IHNldApDT05GSUdf
U0VOU09SU19QQ0Y4NTkxPW0KIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0hUMjE9bQojIENPTkZJ
R19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0lTNTU5NT1tCkNP
TkZJR19TRU5TT1JTX0RNRTE3Mzc9bQpDT05GSUdfU0VOU09SU19FTUMxNDAzPW0KQ09ORklH
X1NFTlNPUlNfRU1DMjEwMz1tCkNPTkZJR19TRU5TT1JTX0VNQzZXMjAxPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3TTE9bQpDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3QjM5Nz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2WFhfQ09NTU9OPW0KQ09O
RklHX1NFTlNPUlNfU0NINTYyNz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2MzY9bQpDT05GSUdf
U0VOU09SU19TTU02NjU9bQojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNl
dApDT05GSUdfU0VOU09SU19BRFMxMDE1PW0KQ09ORklHX1NFTlNPUlNfQURTNzgyOD1tCkNP
TkZJR19TRU5TT1JTX0FEUzc4NzE9bQpDT05GSUdfU0VOU09SU19BTUM2ODIxPW0KIyBDT05G
SUdfU0VOU09SU19JTkEyMDkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lOQTJYWCBp
cyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1RITUM1MD1tCkNPTkZJR19TRU5TT1JTX1RNUDEw
Mj1tCiMgQ09ORklHX1NFTlNPUlNfVE1QMTAzIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNf
VE1QNDAxPW0KQ09ORklHX1NFTlNPUlNfVE1QNDIxPW0KQ09ORklHX1NFTlNPUlNfVklBX0NQ
VVRFTVA9bQpDT05GSUdfU0VOU09SU19WSUE2ODZBPW0KQ09ORklHX1NFTlNPUlNfVlQxMjEx
PW0KQ09ORklHX1NFTlNPUlNfVlQ4MjMxPW0KQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCkNP
TkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQpDT05GSUdfU0VOU09SU19XODM3OTJEPW0KQ09ORklH
X1NFTlNPUlNfVzgzNzkzPW0KQ09ORklHX1NFTlNPUlNfVzgzNzk1PW0KIyBDT05GSUdfU0VO
U09SU19XODM3OTVfRkFOQ1RSTCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1c4M0w3ODVU
Uz1tCkNPTkZJR19TRU5TT1JTX1c4M0w3ODZORz1tCkNPTkZJR19TRU5TT1JTX1c4MzYyN0hG
PW0KQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05G
SUdfU0VOU09SU19BQ1BJX1BPV0VSPW0KQ09ORklHX1NFTlNPUlNfQVRLMDExMD1tCkNPTkZJ
R19USEVSTUFMPW0KQ09ORklHX1RIRVJNQUxfSFdNT049eQpDT05GSUdfVEhFUk1BTF9ERUZB
VUxUX0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJf
U0hBUkUgaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BB
Q0UgaXMgbm90IHNldApDT05GSUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CkNPTkZJR19U
SEVSTUFMX0dPVl9TVEVQX1dJU0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HPXkK
Q09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0U9eQojIENPTkZJR19USEVSTUFMX0VNVUxB
VElPTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9QT1dFUkNMQU1QPW0KQ09ORklHX1g4Nl9Q
S0dfVEVNUF9USEVSTUFMPW0KIyBDT05GSUdfSU5URUxfU09DX0RUU19USEVSTUFMIGlzIG5v
dCBzZXQKQ09ORklHX0lOVDM0MFhfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX1RIRVJNQUxfUkVM
PW0KCiMKIyBUZXhhcyBJbnN0cnVtZW50cyB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfV0FU
Q0hET0c9eQpDT05GSUdfV0FUQ0hET0dfQ09SRT15CiMgQ09ORklHX1dBVENIRE9HX05PV0FZ
T1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19T
T0ZUX1dBVENIRE9HPW0KQ09ORklHX01FTkYyMUJNQ19XQVRDSERPRz1tCiMgQ09ORklHX1hJ
TElOWF9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBREVOQ0VfV0FUQ0hET0cgaXMg
bm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1FVSVJF
X1dEVD1tCkNPTkZJR19BRFZBTlRFQ0hfV0RUPW0KQ09ORklHX0FMSU0xNTM1X1dEVD1tCkNP
TkZJR19BTElNNzEwMV9XRFQ9bQpDT05GSUdfRjcxODA4RV9XRFQ9bQpDT05GSUdfU1A1MTAw
X1RDTz1tCkNPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HPW0KQ09ORklHX0VVUk9URUNIX1dE
VD1tCkNPTkZJR19JQjcwMF9XRFQ9bQpDT05GSUdfSUJNQVNSPW0KQ09ORklHX1dBRkVSX1dE
VD1tCkNPTkZJR19JNjMwMEVTQl9XRFQ9bQpDT05GSUdfSUU2WFhfV0RUPW0KQ09ORklHX0lU
Q09fV0RUPW0KQ09ORklHX0lUQ09fVkVORE9SX1NVUFBPUlQ9eQpDT05GSUdfSVQ4NzEyRl9X
RFQ9bQpDT05GSUdfSVQ4N19XRFQ9bQpDT05GSUdfSFBfV0FUQ0hET0c9bQpDT05GSUdfS0VN
UExEX1dEVD1tCkNPTkZJR19IUFdEVF9OTUlfREVDT0RJTkc9eQpDT05GSUdfU0MxMjAwX1dE
VD1tCkNPTkZJR19QQzg3NDEzX1dEVD1tCkNPTkZJR19OVl9UQ089bQpDT05GSUdfNjBYWF9X
RFQ9bQpDT05GSUdfQ1BVNV9XRFQ9bQpDT05GSUdfU01TQ19TQ0gzMTFYX1dEVD1tCkNPTkZJ
R19TTVNDMzdCNzg3X1dEVD1tCkNPTkZJR19WSUFfV0RUPW0KQ09ORklHX1c4MzYyN0hGX1dE
VD1tCkNPTkZJR19XODM4NzdGX1dEVD1tCkNPTkZJR19XODM5NzdGX1dEVD1tCkNPTkZJR19N
QUNIWl9XRFQ9bQpDT05GSUdfU0JDX0VQWF9DM19XQVRDSERPRz1tCiMgQ09ORklHX01FTl9B
MjFfV0RUIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9XRFQ9bQoKIwojIFBDSS1iYXNlZCBXYXRj
aGRvZyBDYXJkcwojCkNPTkZJR19QQ0lQQ1dBVENIRE9HPW0KQ09ORklHX1dEVFBDST1tCgoj
CiMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiMKQ09ORklHX1VTQlBDV0FUQ0hET0c9bQpD
T05GSUdfU1NCX1BPU1NJQkxFPXkKCiMKIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKIwpD
T05GSUdfU1NCPW0KQ09ORklHX1NTQl9TUFJPTT15CkNPTkZJR19TU0JfQkxPQ0tJTz15CkNP
TkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15CkNPTkZJR19TU0JfUENJSE9TVD15CkNPTkZJ
R19TU0JfQjQzX1BDSV9CUklER0U9eQpDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9
eQpDT05GSUdfU1NCX1BDTUNJQUhPU1Q9eQpDT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxF
PXkKQ09ORklHX1NTQl9TRElPSE9TVD15CiMgQ09ORklHX1NTQl9TSUxFTlQgaXMgbm90IHNl
dAojIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldApDT05GSUdfU1NCX0RSSVZFUl9QQ0lD
T1JFX1BPU1NJQkxFPXkKQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15CiMgQ09ORklHX1NT
Ql9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19CQ01BX1BPU1NJQkxFPXkKCiMKIyBC
cm9hZGNvbSBzcGVjaWZpYyBBTUJBCiMKQ09ORklHX0JDTUE9bQpDT05GSUdfQkNNQV9CTE9D
S0lPPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQpDT05GSUdfQkNNQV9IT1NU
X1BDST15CiMgQ09ORklHX0JDTUFfSE9TVF9TT0MgaXMgbm90IHNldApDT05GSUdfQkNNQV9E
UklWRVJfUENJPXkKIyBDT05GSUdfQkNNQV9EUklWRVJfR01BQ19DTU4gaXMgbm90IHNldAoj
IENPTkZJR19CQ01BX0RSSVZFUl9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9ERUJV
RyBpcyBub3Qgc2V0CgojCiMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwojCkNPTkZJ
R19NRkRfQ09SRT1tCiMgQ09ORklHX01GRF9BUzM3MTEgaXMgbm90IHNldAojIENPTkZJR19Q
TUlDX0FEUDU1MjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQUFUMjg3MF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX0JDTTU5MFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FY
UDIwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9DUk9TX0VDIGlzIG5vdCBzZXQKIyBDT05G
SUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAojIENPTkZJR19NRkRfREE5MDUyX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X0RBOTA1NSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RMTjIgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUMxM1hYWF9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUMx
M1hYWF9JMkMgaXMgbm90IHNldAojIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKIyBD
T05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9JTlRFTF9RVUFSS19J
MkNfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19MUENfSUNIPW0KQ09ORklHX0xQQ19TQ0g9bQoj
IENPTkZJR19JTlRFTF9TT0NfUE1JQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9KQU5aX0NN
T0RJTyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfS0VNUExEPW0KIyBDT05GSUdfTUZEXzg4UE04
MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTgwNSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg3NzY5MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg3
Nzg0MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTA3IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg4OTk4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01UNjM5
NyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfTUVORjIxQk1DPW0KIyBDT05GSUdfRVpYX1BDQVAg
aXMgbm90IHNldApDT05GSUdfTUZEX1ZJUEVSQk9BUkQ9bQojIENPTkZJR19NRkRfUkVUVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1VD
QjE0MDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQK
Q09ORklHX01GRF9SVFNYX1BDST1tCiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldApD
T05GSUdfTUZEX1JUU1hfVVNCPW0KIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk41VDYxOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TRUNfQ09SRSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9TSTQ3NlhfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9TTTUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TS1k4MTQ1MiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9TTVNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMg
bm90IHNldAojIENPTkZJR19NRkRfU1lTQ09OIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJ
X0FNMzM1WF9UU0NBREMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTFAzOTQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQUxNQVMg
aXMgbm90IHNldAojIENPTkZJR19UUFM2MTA1WCBpcyBub3Qgc2V0CiMgQ09ORklHX1RQUzY1
MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjUwOTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjUyMTcgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfVFBTNjUyMTggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU4
NlggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfVFBTNjU5MTIgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTJfSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9UUFM4MDAzMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1RXTDYwNDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTDEy
NzNfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MTTM1MzMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9WWDg1NSBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUkla
T05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAojIENP
TkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTgzMVhfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQK
Q09ORklHX01FRElBX1NVUFBPUlQ9bQoKIwojIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiMK
Q09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUPXkKQ09ORklHX01FRElBX0FOQUxPR19UVl9T
VVBQT1JUPXkKQ09ORklHX01FRElBX0RJR0lUQUxfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJ
QV9SQURJT19TVVBQT1JUPXkKQ09ORklHX01FRElBX1NEUl9TVVBQT1JUPXkKQ09ORklHX01F
RElBX1JDX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQ09OVFJPTExFUj15CkNPTkZJR19WSURF
T19ERVY9bQojIENPTkZJR19WSURFT19WNEwyX1NVQkRFVl9BUEkgaXMgbm90IHNldApDT05G
SUdfVklERU9fVjRMMj1tCiMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19UVU5FUj1tCkNPTkZJR19WSURFT0JVRl9HRU49bQpDT05GSUdfVklERU9CVUZfRE1BX1NH
PW0KQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQpDT05GSUdfVklERU9CVUZfRFZCPW0KQ09O
RklHX1ZJREVPQlVGMl9DT1JFPW0KQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9bQpDT05GSUdf
VklERU9CVUYyX0RNQV9DT05USUc9bQpDT05GSUdfVklERU9CVUYyX1ZNQUxMT0M9bQpDT05G
SUdfVklERU9CVUYyX0RNQV9TRz1tCkNPTkZJR19WSURFT0JVRjJfRFZCPW0KQ09ORklHX0RW
Ql9DT1JFPW0KQ09ORklHX0RWQl9ORVQ9eQpDT05GSUdfVFRQQ0lfRUVQUk9NPW0KQ09ORklH
X0RWQl9NQVhfQURBUFRFUlM9OApDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTPXkKCiMKIyBN
ZWRpYSBkcml2ZXJzCiMKQ09ORklHX1JDX0NPUkU9bQpDT05GSUdfUkNfTUFQPW0KQ09ORklH
X1JDX0RFQ09ERVJTPXkKQ09ORklHX0xJUkM9bQpDT05GSUdfSVJfTElSQ19DT0RFQz1tCkNP
TkZJR19JUl9ORUNfREVDT0RFUj1tCkNPTkZJR19JUl9SQzVfREVDT0RFUj1tCkNPTkZJR19J
Ul9SQzZfREVDT0RFUj1tCkNPTkZJR19JUl9KVkNfREVDT0RFUj1tCkNPTkZJR19JUl9TT05Z
X0RFQ09ERVI9bQpDT05GSUdfSVJfU0FOWU9fREVDT0RFUj1tCkNPTkZJR19JUl9TSEFSUF9E
RUNPREVSPW0KQ09ORklHX0lSX01DRV9LQkRfREVDT0RFUj1tCkNPTkZJR19JUl9YTVBfREVD
T0RFUj1tCkNPTkZJR19SQ19ERVZJQ0VTPXkKQ09ORklHX1JDX0FUSV9SRU1PVEU9bQpDT05G
SUdfSVJfRU5FPW0KIyBDT05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9J
TU9OPW0KQ09ORklHX0lSX01DRVVTQj1tCkNPTkZJR19JUl9JVEVfQ0lSPW0KQ09ORklHX0lS
X0ZJTlRFSz1tCkNPTkZJR19JUl9OVVZPVE9OPW0KQ09ORklHX0lSX1JFRFJBVDM9bQpDT05G
SUdfSVJfU1RSRUFNWkFQPW0KQ09ORklHX0lSX1dJTkJPTkRfQ0lSPW0KQ09ORklHX0lSX0lH
T1JQTFVHVVNCPW0KQ09ORklHX0lSX0lHVUFOQT1tCkNPTkZJR19JUl9UVFVTQklSPW0KQ09O
RklHX1JDX0xPT1BCQUNLPW0KIyBDT05GSUdfSVJfR1BJT19DSVIgaXMgbm90IHNldApDT05G
SUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09ORklHX1VT
Ql9WSURFT19DTEFTUz1tCkNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQpD
T05GSUdfVVNCX0dTUENBPW0KQ09ORklHX1VTQl9NNTYwMj1tCkNPTkZJR19VU0JfU1RWMDZY
WD1tCkNPTkZJR19VU0JfR0w4NjA9bQpDT05GSUdfVVNCX0dTUENBX0JFTlE9bQpDT05GSUdf
VVNCX0dTUENBX0NPTkVYPW0KQ09ORklHX1VTQl9HU1BDQV9DUElBMT1tCkNPTkZJR19VU0Jf
R1NQQ0FfRFRDUzAzMz1tCkNPTkZJR19VU0JfR1NQQ0FfRVRPTVM9bQpDT05GSUdfVVNCX0dT
UENBX0ZJTkVQSVg9bQpDT05GSUdfVVNCX0dTUENBX0pFSUxJTko9bQpDT05GSUdfVVNCX0dT
UENBX0pMMjAwNUJDRD1tCkNPTkZJR19VU0JfR1NQQ0FfS0lORUNUPW0KQ09ORklHX1VTQl9H
U1BDQV9LT05JQ0E9bQpDT05GSUdfVVNCX0dTUENBX01BUlM9bQpDT05GSUdfVVNCX0dTUENB
X01SOTczMTBBPW0KQ09ORklHX1VTQl9HU1BDQV9OVzgwWD1tCkNPTkZJR19VU0JfR1NQQ0Ff
T1Y1MTk9bQpDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KQ09ORklHX1VTQl9HU1BDQV9PVjUz
NF85PW0KQ09ORklHX1VTQl9HU1BDQV9QQUMyMDc9bQpDT05GSUdfVVNCX0dTUENBX1BBQzcz
MDI9bQpDT05GSUdfVVNCX0dTUENBX1BBQzczMTE9bQpDT05GSUdfVVNCX0dTUENBX1NFNDAx
PW0KQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOD1tCkNPTkZJR19VU0JfR1NQQ0FfU045QzIw
WD1tCkNPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDA9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDU9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0ExNTI4PW0KQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1t
CkNPTkZJR19VU0JfR1NQQ0FfU1E5MDVDPW0KQ09ORklHX1VTQl9HU1BDQV9TUTkzMFg9bQpD
T05GSUdfVVNCX0dTUENBX1NUSzAxND1tCkNPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNT1tCkNP
TkZJR19VU0JfR1NQQ0FfU1RWMDY4MD1tCkNPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCkNP
TkZJR19VU0JfR1NQQ0FfVDYxMz1tCkNPTkZJR19VU0JfR1NQQ0FfVE9QUk89bQojIENPTkZJ
R19VU0JfR1NQQ0FfVE9VUFRFSyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMy
PW0KQ09ORklHX1VTQl9HU1BDQV9WQzAzMlg9bQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPW0K
Q09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJVD1tCkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9
bQpDT05GSUdfVVNCX1BXQz1tCiMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldApD
T05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CkNPTkZJR19WSURFT19DUElBMj1tCkNPTkZJ
R19VU0JfWlIzNjRYWD1tCkNPTkZJR19VU0JfU1RLV0VCQ0FNPW0KQ09ORklHX1VTQl9TMjI1
NT1tCkNPTkZJR19WSURFT19VU0JUVj1tCgojCiMgQW5hbG9nIFRWIFVTQiBkZXZpY2VzCiMK
Q09ORklHX1ZJREVPX1BWUlVTQjI9bQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNP
TkZJR19WSURFT19QVlJVU0IyX0RWQj15CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJ
RkMgaXMgbm90IHNldApDT05GSUdfVklERU9fSERQVlI9bQpDT05GSUdfVklERU9fVVNCVklT
SU9OPW0KQ09ORklHX1ZJREVPX1NUSzExNjBfQ09NTU9OPW0KQ09ORklHX1ZJREVPX1NUSzEx
NjBfQUM5Nz15CkNPTkZJR19WSURFT19TVEsxMTYwPW0KIyBDT05GSUdfVklERU9fR083MDA3
IGlzIG5vdCBzZXQKCiMKIyBBbmFsb2cvZGlnaXRhbCBUViBVU0IgZGV2aWNlcwojCkNPTkZJ
R19WSURFT19BVTA4Mjg9bQpDT05GSUdfVklERU9fQVUwODI4X1Y0TDI9eQpDT05GSUdfVklE
RU9fQVUwODI4X1JDPXkKQ09ORklHX1ZJREVPX0NYMjMxWFg9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYX0FMU0E9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9EVkI9bQpDT05GSUdfVklERU9fVE02MDAwPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9B
TFNBPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9EVkI9bQoKIwojIERpZ2l0YWwgVFYgVVNCIGRl
dmljZXMKIwpDT05GSUdfRFZCX1VTQj1tCiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90
IHNldApDT05GSUdfRFZCX1VTQl9BODAwPW0KQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0K
Q09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWT15CkNPTkZJR19EVkJfVVNCX0RJQlVT
Ql9NQz1tCkNPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQpDT05GSUdfRFZCX1VTQl9VTVRfMDEw
PW0KQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQpDT05GSUdfRFZCX1VTQl9NOTIwWD1tCkNPTkZJ
R19EVkJfVVNCX0RJR0lUVj1tCkNPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCkNPTkZJR19EVkJf
VVNCX1ZQNzAyWD1tCkNPTkZJR19EVkJfVVNCX0dQOFBTSz1tCkNPTkZJR19EVkJfVVNCX05P
VkFfVF9VU0IyPW0KQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KQ09ORklHX0RWQl9VU0JfRFRU
MjAwVT1tCkNPTkZJR19EVkJfVVNCX09QRVJBMT1tCkNPTkZJR19EVkJfVVNCX0FGOTAwNT1t
CkNPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQpDT05GSUdfRFZCX1VTQl9QQ1RWNDUy
RT1tCkNPTkZJR19EVkJfVVNCX0RXMjEwMj1tCkNPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDI9
bQpDT05GSUdfRFZCX1VTQl9EVFY1MTAwPW0KQ09ORklHX0RWQl9VU0JfRlJJSU89bQpDT05G
SUdfRFZCX1VTQl9BWjYwMjc9bQpDT05GSUdfRFZCX1VTQl9URUNITklTQVRfVVNCMj1tCkNP
TkZJR19EVkJfVVNCX1YyPW0KQ09ORklHX0RWQl9VU0JfQUY5MDE1PW0KQ09ORklHX0RWQl9V
U0JfQUY5MDM1PW0KQ09ORklHX0RWQl9VU0JfQU5ZU0VFPW0KQ09ORklHX0RWQl9VU0JfQVU2
NjEwPW0KQ09ORklHX0RWQl9VU0JfQVo2MDA3PW0KQ09ORklHX0RWQl9VU0JfQ0U2MjMwPW0K
Q09ORklHX0RWQl9VU0JfRUMxNjg9bQpDT05GSUdfRFZCX1VTQl9HTDg2MT1tCkNPTkZJR19E
VkJfVVNCX0xNRTI1MTA9bQpDT05GSUdfRFZCX1VTQl9NWEwxMTFTRj1tCkNPTkZJR19EVkJf
VVNCX1JUTDI4WFhVPW0KQ09ORklHX0RWQl9VU0JfRFZCU0tZPW0KQ09ORklHX0RWQl9UVFVT
Ql9CVURHRVQ9bQpDT05GSUdfRFZCX1RUVVNCX0RFQz1tCkNPTkZJR19TTVNfVVNCX0RSVj1t
CkNPTkZJR19EVkJfQjJDMl9GTEVYQ09QX1VTQj1tCiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhD
T1BfVVNCX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BUzEwMj1tCgojCiMgV2ViY2Ft
LCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVTQiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhY
WD1tCkNPTkZJR19WSURFT19FTTI4WFhfVjRMMj1tCkNPTkZJR19WSURFT19FTTI4WFhfQUxT
QT1tCkNPTkZJR19WSURFT19FTTI4WFhfRFZCPW0KQ09ORklHX1ZJREVPX0VNMjhYWF9SQz1t
CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0IgZGV2aWNlcwojCkNPTkZJR19VU0Jf
QUlSU1BZPW0KQ09ORklHX1VTQl9IQUNLUkY9bQpDT05GSUdfVVNCX01TSTI1MDA9bQpDT05G
SUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1cmUgc3VwcG9ydAojCkNP
TkZJR19WSURFT19NRVlFPW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0
CiMKQ09ORklHX1ZJREVPX0lWVFY9bQpDT05GSUdfVklERU9fSVZUVl9BTFNBPW0KQ09ORklH
X1ZJREVPX0ZCX0lWVFY9bQpDT05GSUdfVklERU9fWk9SQU49bQpDT05GSUdfVklERU9fWk9S
QU5fREMzMD1tCkNPTkZJR19WSURFT19aT1JBTl9aUjM2MDYwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0JVWj1tCkNPTkZJR19WSURFT19aT1JBTl9EQzEwPW0KQ09ORklHX1ZJREVPX1pPUkFO
X0xNTDMzPW0KQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzUjEwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0FWUzZFWUVTPW0KQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkk9bQpDT05GSUdfVklE
RU9fSEVYSVVNX09SSU9OPW0KQ09ORklHX1ZJREVPX01YQj1tCkNPTkZJR19WSURFT19TT0xP
NlgxMD1tCkNPTkZJR19WSURFT19UVzY4PW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZy9o
eWJyaWQgVFYgc3VwcG9ydAojCkNPTkZJR19WSURFT19DWDE4PW0KQ09ORklHX1ZJREVPX0NY
MThfQUxTQT1tCkNPTkZJR19WSURFT19DWDIzODg1PW0KQ09ORklHX01FRElBX0FMVEVSQV9D
ST1tCiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldApDT05GSUdfVklERU9fQ1g4
OD1tCkNPTkZJR19WSURFT19DWDg4X0FMU0E9bQpDT05GSUdfVklERU9fQ1g4OF9CTEFDS0JJ
UkQ9bQpDT05GSUdfVklERU9fQ1g4OF9EVkI9bQpDT05GSUdfVklERU9fQ1g4OF9FTkFCTEVf
VlAzMDU0PXkKQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KQ09ORklHX1ZJREVPX0NYODhf
TVBFRz1tCkNPTkZJR19WSURFT19CVDg0OD1tCkNPTkZJR19EVkJfQlQ4WFg9bQpDT05GSUdf
VklERU9fU0FBNzEzND1tCkNPTkZJR19WSURFT19TQUE3MTM0X0FMU0E9bQpDT05GSUdfVklE
RU9fU0FBNzEzNF9SQz15CkNPTkZJR19WSURFT19TQUE3MTM0X0RWQj1tCkNPTkZJR19WSURF
T19TQUE3MTY0PW0KCiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJ
R19EVkJfQVY3MTEwX0lSPXkKQ09ORklHX0RWQl9BVjcxMTA9bQpDT05GSUdfRFZCX0FWNzEx
MF9PU0Q9eQpDT05GSUdfRFZCX0JVREdFVF9DT1JFPW0KQ09ORklHX0RWQl9CVURHRVQ9bQpD
T05GSUdfRFZCX0JVREdFVF9DST1tCkNPTkZJR19EVkJfQlVER0VUX0FWPW0KQ09ORklHX0RW
Ql9CVURHRVRfUEFUQ0g9bQpDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQojIENPTkZJ
R19EVkJfQjJDMl9GTEVYQ09QX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUExV
VE8yPW0KQ09ORklHX0RWQl9ETTExMDU9bQpDT05GSUdfRFZCX1BUMT1tCkNPTkZJR19EVkJf
UFQzPW0KQ09ORklHX01BTlRJU19DT1JFPW0KQ09ORklHX0RWQl9NQU5USVM9bQpDT05GSUdf
RFZCX0hPUFBFUj1tCkNPTkZJR19EVkJfTkdFTkU9bQpDT05GSUdfRFZCX0REQlJJREdFPW0K
Q09ORklHX0RWQl9TTUlQQ0lFPW0KQ09ORklHX1Y0TF9QTEFURk9STV9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX0NBRkVfQ0NJQz1tCkNPTkZJR19WSURFT19WSUFfQ0FNRVJBPW0KIyBDT05G
SUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CkNPTkZJR19WNExfTUVNMk1FTV9EUklWRVJTPXkK
IyBDT05GSUdfVklERU9fTUVNMk1FTV9ERUlOVEVSTEFDRSBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX1NIX1ZFVSBpcyBub3Qgc2V0CkNPTkZJR19WNExfVEVTVF9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX1ZJVklEPW0KIyBDT05GSUdfVklERU9fVklNMk0gaXMgbm90IHNldAoKIwoj
IFN1cHBvcnRlZCBNTUMvU0RJTyBhZGFwdGVycwojCkNPTkZJR19TTVNfU0RJT19EUlY9bQpD
T05GSUdfUkFESU9fQURBUFRFUlM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD1tCkNPTkZJR19S
QURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD1tCiMgQ09ORklHX0kyQ19TSTQ3MFgg
aXMgbm90IHNldAojIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldApDT05GSUdfVVNC
X01SODAwPW0KQ09ORklHX1VTQl9EU0JSPW0KQ09ORklHX1JBRElPX01BWElSQURJTz1tCkNP
TkZJR19SQURJT19TSEFSSz1tCkNPTkZJR19SQURJT19TSEFSSzI9bQpDT05GSUdfVVNCX0tF
RU5FPW0KQ09ORklHX1VTQl9SQVJFTU9OTz1tCkNPTkZJR19VU0JfTUE5MDE9bQojIENPTkZJ
R19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fU0FBNzcwNkggaXMg
bm90IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFE
SU9fV0wxMjczIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBXTDEyOHggRk0g
ZHJpdmVyIChTVCBiYXNlZCkKIwoKIwojIFN1cHBvcnRlZCBGaXJlV2lyZSAoSUVFRSAxMzk0
KSBBZGFwdGVycwojCkNPTkZJR19EVkJfRklSRURUVj1tCkNPTkZJR19EVkJfRklSRURUVl9J
TlBVVD15CkNPTkZJR19NRURJQV9DT01NT05fT1BUSU9OUz15CgojCiMgY29tbW9uIGRyaXZl
ciBvcHRpb25zCiMKQ09ORklHX1ZJREVPX0NYMjM0MVg9bQpDT05GSUdfVklERU9fVFZFRVBS
T009bQpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT1tCkNPTkZJR19EVkJfQjJDMl9GTEVYQ09Q
PW0KQ09ORklHX1ZJREVPX1NBQTcxNDY9bQpDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCkNP
TkZJR19TTVNfU0lBTk9fTURUVj1tCkNPTkZJR19TTVNfU0lBTk9fUkM9eQojIENPTkZJR19T
TVNfU0lBTk9fREVCVUdGUyBpcyBub3Qgc2V0CgojCiMgTWVkaWEgYW5jaWxsYXJ5IGRyaXZl
cnMgKHR1bmVycywgc2Vuc29ycywgaTJjLCBmcm9udGVuZHMpCiMKQ09ORklHX01FRElBX1NV
QkRSVl9BVVRPU0VMRUNUPXkKQ09ORklHX01FRElBX0FUVEFDSD15CkNPTkZJR19WSURFT19J
Ul9JMkM9bQoKIwojIEF1ZGlvIGRlY29kZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKIwpD
T05GSUdfVklERU9fVFZBVURJTz1tCkNPTkZJR19WSURFT19UREE3NDMyPW0KQ09ORklHX1ZJ
REVPX1REQTk4NDA9bQpDT05GSUdfVklERU9fVEVBNjQxNUM9bQpDT05GSUdfVklERU9fVEVB
NjQyMD1tCkNPTkZJR19WSURFT19NU1AzNDAwPW0KQ09ORklHX1ZJREVPX0NTNTM0NT1tCkNP
TkZJR19WSURFT19DUzUzTDMyQT1tCkNPTkZJR19WSURFT19XTTg3NzU9bQpDT05GSUdfVklE
RU9fV004NzM5PW0KQ09ORklHX1ZJREVPX1ZQMjdTTVBYPW0KCiMKIyBSRFMgZGVjb2RlcnMK
IwpDT05GSUdfVklERU9fU0FBNjU4OD1tCgojCiMgVmlkZW8gZGVjb2RlcnMKIwpDT05GSUdf
VklERU9fQlQ4MTk9bQpDT05GSUdfVklERU9fQlQ4NTY9bQpDT05GSUdfVklERU9fQlQ4NjY9
bQpDT05GSUdfVklERU9fS1MwMTI3PW0KQ09ORklHX1ZJREVPX1NBQTcxMTA9bQpDT05GSUdf
VklERU9fU0FBNzExWD1tCkNPTkZJR19WSURFT19UVlA1MTUwPW0KQ09ORklHX1ZJREVPX1ZQ
WDMyMjA9bQoKIwojIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwojCkNPTkZJR19WSURFT19T
QUE3MTdYPW0KQ09ORklHX1ZJREVPX0NYMjU4NDA9bQoKIwojIFZpZGVvIGVuY29kZXJzCiMK
Q09ORklHX1ZJREVPX1NBQTcxMjc9bQpDT05GSUdfVklERU9fU0FBNzE4NT1tCkNPTkZJR19W
SURFT19BRFY3MTcwPW0KQ09ORklHX1ZJREVPX0FEVjcxNzU9bQoKIwojIENhbWVyYSBzZW5z
b3IgZGV2aWNlcwojCkNPTkZJR19WSURFT19PVjc2NzA9bQpDT05GSUdfVklERU9fTVQ5VjAx
MT1tCgojCiMgRmxhc2ggZGV2aWNlcwojCgojCiMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMK
IwpDT05GSUdfVklERU9fVVBENjQwMzFBPW0KQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KCiMK
IyBBdWRpby9WaWRlbyBjb21wcmVzc2lvbiBjaGlwcwojCkNPTkZJR19WSURFT19TQUE2NzUy
SFM9bQoKIwojIE1pc2NlbGxhbmVvdXMgaGVscGVyIGNoaXBzCiMKQ09ORklHX1ZJREVPX001
Mjc5MD1tCgojCiMgU2Vuc29ycyB1c2VkIG9uIHNvY19jYW1lcmEgZHJpdmVyCiMKQ09ORklH
X01FRElBX1RVTkVSPW0KQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCkNPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwPW0KQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQpDT05GSUdf
TUVESUFfVFVORVJfVERBMTgyNzE9bQpDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCkNP
TkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9
bQpDT05GSUdfTUVESUFfVFVORVJfTVNJMDAxPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjBY
WD1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQpDT05GSUdfTUVESUFfVFVORVJfTVQy
MDYzPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCkNPTkZJR19NRURJQV9UVU5FUl9N
VDIxMzE9bQpDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KQ09ORklHX01FRElBX1RVTkVS
X1hDMjAyOD1tCkNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05GSUdfTUVESUFfVFVO
RVJfWEM0MDAwPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDUwMDdUPW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KQ09ORklH
X01FRElBX1RVTkVSX01BWDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9bQpD
T05GSUdfTUVESUFfVFVORVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1t
CkNPTkZJR19NRURJQV9UVU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgy
MTI9bQpDT05GSUdfTUVESUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMy
NTgwPW0KQ09ORklHX01FRElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVO
RVJfVFVBOTAwMT1tCkNPTkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFf
VFVORVJfSVQ5MTNYPW0KQ09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDMwMVJGPW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQoKIwoj
IE11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TVEIw
ODk5PW0KQ09ORklHX0RWQl9TVEI2MTAwPW0KQ09ORklHX0RWQl9TVFYwOTB4PW0KQ09ORklH
X0RWQl9TVFY2MTEweD1tCkNPTkZJR19EVkJfTTg4RFMzMTAzPW0KCiMKIyBNdWx0aXN0YW5k
YXJkIChjYWJsZSArIHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0RSWEs9
bQpDT05GSUdfRFZCX1REQTE4MjcxQzJERD1tCkNPTkZJR19EVkJfU0kyMTY1PW0KCiMKIyBE
VkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0NYMjQxMTA9bQpDT05G
SUdfRFZCX0NYMjQxMjM9bQpDT05GSUdfRFZCX01UMzEyPW0KQ09ORklHX0RWQl9aTDEwMDM2
PW0KQ09ORklHX0RWQl9aTDEwMDM5PW0KQ09ORklHX0RWQl9TNUgxNDIwPW0KQ09ORklHX0RW
Ql9TVFYwMjg4PW0KQ09ORklHX0RWQl9TVEI2MDAwPW0KQ09ORklHX0RWQl9TVFYwMjk5PW0K
Q09ORklHX0RWQl9TVFY2MTEwPW0KQ09ORklHX0RWQl9TVFYwOTAwPW0KQ09ORklHX0RWQl9U
REE4MDgzPW0KQ09ORklHX0RWQl9UREExMDA4Nj1tCkNPTkZJR19EVkJfVERBODI2MT1tCkNP
TkZJR19EVkJfVkVTMVg5Mz1tCkNPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCkNPTkZJR19E
VkJfVFVORVJfQ1gyNDExMz1tCkNPTkZJR19EVkJfVERBODI2WD1tCkNPTkZJR19EVkJfVFVB
NjEwMD1tCkNPTkZJR19EVkJfQ1gyNDExNj1tCkNPTkZJR19EVkJfQ1gyNDExNz1tCkNPTkZJ
R19EVkJfU0kyMVhYPW0KQ09ORklHX0RWQl9UUzIwMjA9bQpDT05GSUdfRFZCX0RTMzAwMD1t
CkNPTkZJR19EVkJfTUI4NkExNj1tCkNPTkZJR19EVkJfVERBMTAwNzE9bQoKIwojIERWQi1U
ICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TUDg4NzA9bQpDT05GSUdf
RFZCX1NQODg3WD1tCkNPTkZJR19EVkJfQ1gyMjcwMD1tCkNPTkZJR19EVkJfQ1gyMjcwMj1t
CkNPTkZJR19EVkJfRFJYRD1tCkNPTkZJR19EVkJfTDY0NzgxPW0KQ09ORklHX0RWQl9UREEx
MDA0WD1tCkNPTkZJR19EVkJfTlhUNjAwMD1tCkNPTkZJR19EVkJfTVQzNTI9bQpDT05GSUdf
RFZCX1pMMTAzNTM9bQpDT05GSUdfRFZCX0RJQjMwMDBNQj1tCkNPTkZJR19EVkJfRElCMzAw
ME1DPW0KQ09ORklHX0RWQl9ESUI3MDAwTT1tCkNPTkZJR19EVkJfRElCNzAwMFA9bQpDT05G
SUdfRFZCX1REQTEwMDQ4PW0KQ09ORklHX0RWQl9BRjkwMTM9bQpDT05GSUdfRFZCX0VDMTAw
PW0KQ09ORklHX0RWQl9TVFYwMzY3PW0KQ09ORklHX0RWQl9DWEQyODIwUj1tCkNPTkZJR19E
VkJfUlRMMjgzMD1tCkNPTkZJR19EVkJfUlRMMjgzMj1tCkNPTkZJR19EVkJfUlRMMjgzMl9T
RFI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfQVMxMDJfRkU9bQoKIwojIERW
Qi1DIChjYWJsZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9WRVMxODIwPW0KQ09ORklHX0RW
Ql9UREExMDAyMT1tCkNPTkZJR19EVkJfVERBMTAwMjM9bQpDT05GSUdfRFZCX1NUVjAyOTc9
bQoKIwojIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBE
VFYpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfTlhUMjAwWD1tCkNPTkZJR19EVkJfT1I1MTIx
MT1tCkNPTkZJR19EVkJfT1I1MTEzMj1tCkNPTkZJR19EVkJfQkNNMzUxMD1tCkNPTkZJR19E
VkJfTEdEVDMzMFg9bQpDT05GSUdfRFZCX0xHRFQzMzA1PW0KQ09ORklHX0RWQl9MR0RUMzMw
NkE9bQpDT05GSUdfRFZCX0xHMjE2MD1tCkNPTkZJR19EVkJfUzVIMTQwOT1tCkNPTkZJR19E
VkJfQVU4NTIyPW0KQ09ORklHX0RWQl9BVTg1MjJfRFRWPW0KQ09ORklHX0RWQl9BVTg1MjJf
VjRMPW0KQ09ORklHX0RWQl9TNUgxNDExPW0KCiMKIyBJU0RCLVQgKHRlcnJlc3RyaWFsKSBm
cm9udGVuZHMKIwpDT05GSUdfRFZCX1M5MjE9bQpDT05GSUdfRFZCX0RJQjgwMDA9bQpDT05G
SUdfRFZCX01CODZBMjBTPW0KCiMKIyBJU0RCLVMgKHNhdGVsbGl0ZSkgJiBJU0RCLVQgKHRl
cnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1RDOTA1MjI9bQoKIwojIERpZ2l0
YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCiMKQ09ORklHX0RWQl9QTEw9bQpDT05G
SUdfRFZCX1RVTkVSX0RJQjAwNzA9bQpDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTA9bQoKIwoj
IFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKQ09ORklHX0RWQl9EUlgzOVhZSj1t
CkNPTkZJR19EVkJfTE5CUDIxPW0KQ09ORklHX0RWQl9MTkJQMjI9bQpDT05GSUdfRFZCX0lT
TDY0MDU9bQpDT05GSUdfRFZCX0lTTDY0MjE9bQpDT05GSUdfRFZCX0lTTDY0MjM9bQpDT05G
SUdfRFZCX0E4MjkzPW0KQ09ORklHX0RWQl9TUDI9bQpDT05GSUdfRFZCX0xHUzhHWFg9bQpD
T05GSUdfRFZCX0FUQk04ODMwPW0KQ09ORklHX0RWQl9UREE2NjV4PW0KQ09ORklHX0RWQl9J
WDI1MDVWPW0KQ09ORklHX0RWQl9NODhSUzIwMDA9bQpDT05GSUdfRFZCX0FGOTAzMz1tCgoj
CiMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1Z
X0ZFIGlzIG5vdCBzZXQKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09ORklHX0FHUD15CkNP
TkZJR19BR1BfQU1ENjQ9eQpDT05GSUdfQUdQX0lOVEVMPXkKQ09ORklHX0FHUF9TSVM9eQpD
T05GSUdfQUdQX1ZJQT15CkNPTkZJR19JTlRFTF9HVFQ9eQpDT05GSUdfVkdBX0FSQj15CkNP
TkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CkNPTkZJR19WR0FfU1dJVENIRVJPTz15CgojCiMg
RGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyCiMKQ09ORklHX0RSTT1tCkNPTkZJR19EUk1fTUlQ
SV9EU0k9eQpDT05GSUdfRFJNX0tNU19IRUxQRVI9bQpDT05GSUdfRFJNX0tNU19GQl9IRUxQ
RVI9eQpDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRT15CkNPTkZJR19EUk1fVFRNPW0K
CiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwojIENPTkZJR19EUk1fSTJDX0FE
Vjc1MTEgaXMgbm90IHNldApDT05GSUdfRFJNX0kyQ19DSDcwMDY9bQpDT05GSUdfRFJNX0ky
Q19TSUwxNjQ9bQojIENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYIGlzIG5vdCBzZXQKQ09O
RklHX0RSTV9UREZYPW0KQ09ORklHX0RSTV9SMTI4PW0KQ09ORklHX0RSTV9SQURFT049bQoj
IENPTkZJR19EUk1fUkFERU9OX1VTRVJQVFIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUkFE
RU9OX1VNUyBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTk9VVkVBVT1tCkNPTkZJR19OT1VWRUFV
X0RFQlVHPTUKQ09ORklHX05PVVZFQVVfREVCVUdfREVGQVVMVD0zCkNPTkZJR19EUk1fTk9V
VkVBVV9CQUNLTElHSFQ9eQojIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fSTkxNT1tCkNPTkZJR19EUk1fSTkxNV9LTVM9eQpDT05GSUdfRFJNX0k5MTVfRkJERVY9
eQojIENPTkZJR19EUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQT1JUIGlzIG5vdCBzZXQK
Q09ORklHX0RSTV9NR0E9bQpDT05GSUdfRFJNX1NJUz1tCkNPTkZJR19EUk1fVklBPW0KQ09O
RklHX0RSTV9TQVZBR0U9bQpDT05GSUdfRFJNX1ZHRU09bQpDT05GSUdfRFJNX1ZNV0dGWD1t
CkNPTkZJR19EUk1fVk1XR0ZYX0ZCQ09OPXkKQ09ORklHX0RSTV9HTUE1MDA9bQpDT05GSUdf
RFJNX0dNQTYwMD15CkNPTkZJR19EUk1fR01BMzYwMD15CkNPTkZJR19EUk1fVURMPW0KQ09O
RklHX0RSTV9BU1Q9bQpDT05GSUdfRFJNX01HQUcyMDA9bQpDT05GSUdfRFJNX0NJUlJVU19R
RU1VPW0KQ09ORklHX0RSTV9RWEw9bQpDT05GSUdfRFJNX0JPQ0hTPW0KQ09ORklHX0RSTV9Q
QU5FTD15CgojCiMgRGlzcGxheSBQYW5lbHMKIwojIENPTkZJR19IU0FfQU1EIGlzIG5vdCBz
ZXQKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwojCkNPTkZJR19GQj15CkNPTkZJR19GSVJN
V0FSRV9FRElEPXkKQ09ORklHX0ZCX0NNRExJTkU9eQpDT05GSUdfRkJfRERDPW0KQ09ORklH
X0ZCX0JPT1RfVkVTQV9TVVBQT1JUPXkKQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CkNPTkZJ
R19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldApDT05GSUdfRkJfU1lTX0ZJ
TExSRUNUPXkKQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15CkNPTkZJR19GQl9TWVNfSU1BR0VC
TElUPXkKIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldApDT05GSUdfRkJf
U1lTX0ZPUFM9eQpDT05GSUdfRkJfREVGRVJSRURfSU89eQpDT05GSUdfRkJfSEVDVUJBPW0K
Q09ORklHX0ZCX1NWR0FMSUI9bQojIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CkNP
TkZJR19GQl9CQUNLTElHSFQ9eQpDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1RJTEVCTElUVElORz15CgojCiMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKIwpD
T05GSUdfRkJfQ0lSUlVTPW0KQ09ORklHX0ZCX1BNMj1tCkNPTkZJR19GQl9QTTJfRklGT19E
SVNDT05ORUNUPXkKQ09ORklHX0ZCX0NZQkVSMjAwMD1tCkNPTkZJR19GQl9DWUJFUjIwMDBf
RERDPXkKQ09ORklHX0ZCX0FSQz1tCiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldApDT05GSUdfRkJfVkdBMTY9bQpDT05GSUdf
RkJfVVZFU0E9bQpDT05GSUdfRkJfVkVTQT15CkNPTkZJR19GQl9FRkk9eQpDT05GSUdfRkJf
TjQxMT1tCkNPTkZJR19GQl9IR0E9bQojIENPTkZJR19GQl9PUEVOQ09SRVMgaXMgbm90IHNl
dAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX05WSURJQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAojIENPTkZJR19GQl9JNzQw
IGlzIG5vdCBzZXQKQ09ORklHX0ZCX0xFODA1Nzg9bQpDT05GSUdfRkJfQ0FSSUxMT19SQU5D
SD1tCiMgQ09ORklHX0ZCX0lOVEVMIGlzIG5vdCBzZXQKQ09ORklHX0ZCX01BVFJPWD1tCkNP
TkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15
CkNPTkZJR19GQl9NQVRST1hfRz15CkNPTkZJR19GQl9NQVRST1hfSTJDPW0KQ09ORklHX0ZC
X01BVFJPWF9NQVZFTj1tCkNPTkZJR19GQl9SQURFT049bQpDT05GSUdfRkJfUkFERU9OX0ky
Qz15CkNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKIyBDT05GSUdfRkJfUkFERU9OX0RF
QlVHIGlzIG5vdCBzZXQKQ09ORklHX0ZCX0FUWTEyOD1tCkNPTkZJR19GQl9BVFkxMjhfQkFD
S0xJR0hUPXkKQ09ORklHX0ZCX0FUWT1tCkNPTkZJR19GQl9BVFlfQ1Q9eQojIENPTkZJR19G
Ql9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldApDT05GSUdfRkJfQVRZX0dYPXkKQ09ORklH
X0ZCX0FUWV9CQUNLTElHSFQ9eQpDT05GSUdfRkJfUzM9bQpDT05GSUdfRkJfUzNfRERDPXkK
Q09ORklHX0ZCX1NBVkFHRT1tCiMgQ09ORklHX0ZCX1NBVkFHRV9JMkMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0VfQUNDRUwgaXMgbm90IHNldApDT05GSUdfRkJfU0lTPW0KQ09O
RklHX0ZCX1NJU18zMDA9eQpDT05GSUdfRkJfU0lTXzMxNT15CkNPTkZJR19GQl9WSUE9bQoj
IENPTkZJR19GQl9WSUFfRElSRUNUX1BST0NGUyBpcyBub3Qgc2V0CkNPTkZJR19GQl9WSUFf
WF9DT01QQVRJQklMSVRZPXkKQ09ORklHX0ZCX05FT01BR0lDPW0KQ09ORklHX0ZCX0tZUk89
bQpDT05GSUdfRkJfM0RGWD1tCiMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldApD
T05GSUdfRkJfM0RGWF9JMkM9eQpDT05GSUdfRkJfVk9PRE9PMT1tCkNPTkZJR19GQl9WVDg2
MjM9bQpDT05GSUdfRkJfVFJJREVOVD1tCkNPTkZJR19GQl9BUks9bQpDT05GSUdfRkJfUE0z
PW0KIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CkNPTkZJR19GQl9TTVNDVUZYPW0K
Q09ORklHX0ZCX1VETD1tCkNPTkZJR19GQl9WSVJUVUFMPW0KQ09ORklHX1hFTl9GQkRFVl9G
Uk9OVEVORD15CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkNPTkZJR19GQl9N
Qjg2MlhYPW0KQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQz15CkNPTkZJR19GQl9NQjg2MlhY
X0kyQz15CiMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAojIENPTkZJR19GQl9B
VU9fSzE5MFggaXMgbm90IHNldApDT05GSUdfRkJfSFlQRVJWPW0KQ09ORklHX0ZCX1NJTVBM
RT15CkNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQojIENPTkZJR19MQ0RfQ0xBU1Nf
REVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENP
TkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CkNPTkZJR19CQUNLTElHSFRfQVBQ
TEU9bQojIENPTkZJR19CQUNLTElHSFRfU0FIQVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFD
S0xJR0hUX0FEUDg4NjAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MTTM2MzkgaXMgbm90IHNldAojIENPTkZJ
R19CQUNLTElHSFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdM
UCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldApDT05G
SUdfVkdBU1RBVEU9bQpDT05GSUdfSERNST15CgojCiMgQ29uc29sZSBkaXNwbGF5IGRyaXZl
ciBzdXBwb3J0CiMKQ09ORklHX1ZHQV9DT05TT0xFPXkKIyBDT05GSUdfVkdBQ09OX1NPRlRf
U0NST0xMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19EVU1NWV9DT05TT0xFPXkKQ09ORklHX0RV
TU1ZX0NPTlNPTEVfQ09MVU1OUz04MApDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTPTI1CkNP
TkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVf
REVURUNUX1BSSU1BUlk9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15
CiMgQ09ORklHX0xPR08gaXMgbm90IHNldApDT05GSUdfU09VTkQ9bQpDT05GSUdfU09VTkRf
T1NTX0NPUkU9eQojIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBpcyBub3Qgc2V0
CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NORF9QQ009bQpDT05G
SUdfU05EX0hXREVQPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9DT01QUkVT
U19PRkZMT0FEPW0KQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9TRVFVRU5DRVI9bQpD
T05GSUdfU05EX1NFUV9EVU1NWT1tCkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRf
TUlYRVJfT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BM
VUdJTlM9eQojIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfSFJUSU1FUj1tCkNPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CkNPTkZJR19T
TkRfRFlOQU1JQ19NSU5PUlM9eQpDT05GSUdfU05EX01BWF9DQVJEUz0zMgpDT05GSUdfU05E
X1NVUFBPUlRfT0xEX0FQST15CkNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQojIENPTkZJ
R19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVCVUcgaXMg
bm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05GSUdfU05EX0tDVExfSkFDSz15CkNP
TkZJR19TTkRfRE1BX1NHQlVGPXkKQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCkNPTkZJR19T
TkRfT1BMM19MSUJfU0VRPW0KIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldApDT05GSUdfU05EX0VNVTEwSzFf
U0VRPW0KQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCkNPTkZJR19TTkRfT1BMM19MSUI9bQpD
T05GSUdfU05EX1ZYX0xJQj1tCkNPTkZJR19TTkRfQUM5N19DT0RFQz1tCkNPTkZJR19TTkRf
RFJJVkVSUz15CkNPTkZJR19TTkRfUENTUD1tCkNPTkZJR19TTkRfRFVNTVk9bQpDT05GSUdf
U05EX0FMT09QPW0KQ09ORklHX1NORF9WSVJNSURJPW0KQ09ORklHX1NORF9NVFBBVj1tCkNP
TkZJR19TTkRfTVRTNjQ9bQpDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQpDT05GSUdfU05E
X01QVTQwMT1tCkNPTkZJR19TTkRfUE9SVE1BTjJYND1tCkNPTkZJR19TTkRfQUM5N19QT1dF
Ul9TQVZFPXkKQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0wCkNPTkZJR19T
TkRfU0JfQ09NTU9OPW0KQ09ORklHX1NORF9QQ0k9eQpDT05GSUdfU05EX0FEMTg4OT1tCkNP
TkZJR19TTkRfQUxTMzAwPW0KQ09ORklHX1NORF9BTFM0MDAwPW0KQ09ORklHX1NORF9BTEk1
NDUxPW0KQ09ORklHX1NORF9BU0lIUEk9bQpDT05GSUdfU05EX0FUSUlYUD1tCkNPTkZJR19T
TkRfQVRJSVhQX01PREVNPW0KQ09ORklHX1NORF9BVTg4MTA9bQpDT05GSUdfU05EX0FVODgy
MD1tCkNPTkZJR19TTkRfQVU4ODMwPW0KIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CkNP
TkZJR19TTkRfQVpUMzMyOD1tCkNPTkZJR19TTkRfQlQ4N1g9bQojIENPTkZJR19TTkRfQlQ4
N1hfT1ZFUkNMT0NLIGlzIG5vdCBzZXQKQ09ORklHX1NORF9DQTAxMDY9bQpDT05GSUdfU05E
X0NNSVBDST1tCkNPTkZJR19TTkRfT1hZR0VOX0xJQj1tCkNPTkZJR19TTkRfT1hZR0VOPW0K
Q09ORklHX1NORF9DUzQyODE9bQpDT05GSUdfU05EX0NTNDZYWD1tCkNPTkZJR19TTkRfQ1M0
NlhYX05FV19EU1A9eQpDT05GSUdfU05EX0NUWEZJPW0KQ09ORklHX1NORF9EQVJMQTIwPW0K
Q09ORklHX1NORF9HSU5BMjA9bQpDT05GSUdfU05EX0xBWUxBMjA9bQpDT05GSUdfU05EX0RB
UkxBMjQ9bQpDT05GSUdfU05EX0dJTkEyND1tCkNPTkZJR19TTkRfTEFZTEEyND1tCkNPTkZJ
R19TTkRfTU9OQT1tCkNPTkZJR19TTkRfTUlBPW0KQ09ORklHX1NORF9FQ0hPM0c9bQpDT05G
SUdfU05EX0lORElHTz1tCkNPTkZJR19TTkRfSU5ESUdPSU89bQpDT05GSUdfU05EX0lORElH
T0RKPW0KQ09ORklHX1NORF9JTkRJR09JT1g9bQpDT05GSUdfU05EX0lORElHT0RKWD1tCkNP
TkZJR19TTkRfRU1VMTBLMT1tCkNPTkZJR19TTkRfRU1VMTBLMVg9bQpDT05GSUdfU05EX0VO
UzEzNzA9bQpDT05GSUdfU05EX0VOUzEzNzE9bQpDT05GSUdfU05EX0VTMTkzOD1tCkNPTkZJ
R19TTkRfRVMxOTY4PW0KQ09ORklHX1NORF9FUzE5NjhfSU5QVVQ9eQpDT05GSUdfU05EX0VT
MTk2OF9SQURJTz15CkNPTkZJR19TTkRfRk04MDE9bQpDT05GSUdfU05EX0ZNODAxX1RFQTU3
NVhfQk9PTD15CkNPTkZJR19TTkRfSERTUD1tCkNPTkZJR19TTkRfSERTUE09bQpDT05GSUdf
U05EX0lDRTE3MTI9bQpDT05GSUdfU05EX0lDRTE3MjQ9bQpDT05GSUdfU05EX0lOVEVMOFgw
PW0KQ09ORklHX1NORF9JTlRFTDhYME09bQpDT05GSUdfU05EX0tPUkcxMjEyPW0KQ09ORklH
X1NORF9MT0xBPW0KQ09ORklHX1NORF9MWDY0NjRFUz1tCkNPTkZJR19TTkRfTUFFU1RSTzM9
bQpDT05GSUdfU05EX01BRVNUUk8zX0lOUFVUPXkKQ09ORklHX1NORF9NSVhBUlQ9bQpDT05G
SUdfU05EX05NMjU2PW0KQ09ORklHX1NORF9QQ1hIUj1tCkNPTkZJR19TTkRfUklQVElERT1t
CkNPTkZJR19TTkRfUk1FMzI9bQpDT05GSUdfU05EX1JNRTk2PW0KQ09ORklHX1NORF9STUU5
NjUyPW0KQ09ORklHX1NORF9TT05JQ1ZJQkVTPW0KQ09ORklHX1NORF9UUklERU5UPW0KQ09O
RklHX1NORF9WSUE4MlhYPW0KQ09ORklHX1NORF9WSUE4MlhYX01PREVNPW0KQ09ORklHX1NO
RF9WSVJUVU9TTz1tCkNPTkZJR19TTkRfVlgyMjI9bQpDT05GSUdfU05EX1lNRlBDST1tCgoj
CiMgSEQtQXVkaW8KIwpDT05GSUdfU05EX0hEQT1tCkNPTkZJR19TTkRfSERBX0lOVEVMPW0K
Q09ORklHX1NORF9IREFfRFNQX0xPQURFUj15CkNPTkZJR19TTkRfSERBX1BSRUFMTE9DX1NJ
WkU9NjQKQ09ORklHX1NORF9IREFfSFdERVA9eQpDT05GSUdfU05EX0hEQV9SRUNPTkZJRz15
CkNPTkZJR19TTkRfSERBX0lOUFVUX0JFRVA9eQpDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQ
X01PREU9MQpDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLPXkKQ09ORklHX1NORF9IREFfUEFU
Q0hfTE9BREVSPXkKQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz1tCkNPTkZJR19TTkRf
SERBX0NPREVDX0FOQUxPRz1tCkNPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPW0KQ09O
RklHX1NORF9IREFfQ09ERUNfVklBPW0KQ09ORklHX1NORF9IREFfQ09ERUNfSERNST1tCkNP
TkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DSVJSVVM9bQpDT05G
SUdfU05EX0hEQV9DT0RFQ19DT05FWEFOVD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEx
MD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEzMj1tCkNPTkZJR19TTkRfSERBX0NPREVD
X0NBMDEzMl9EU1A9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DTUVESUE9bQpDT05GSUdfU05E
X0hEQV9DT0RFQ19TSTMwNTQ9bQpDT05GSUdfU05EX0hEQV9HRU5FUklDPW0KQ09ORklHX1NO
RF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKQ09ORklHX1NORF9IREFfQ09SRT1tCkNPTkZJ
R19TTkRfU1BJPXkKQ09ORklHX1NORF9VU0I9eQpDT05GSUdfU05EX1VTQl9BVURJTz1tCkNP
TkZJR19TTkRfVVNCX1VBMTAxPW0KQ09ORklHX1NORF9VU0JfVVNYMlk9bQpDT05GSUdfU05E
X1VTQl9DQUlBUT1tCkNPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKQ09ORklHX1NORF9V
U0JfVVMxMjJMPW0KQ09ORklHX1NORF9VU0JfNkZJUkU9bQpDT05GSUdfU05EX1VTQl9ISUZB
Q0U9bQpDT05GSUdfU05EX0JDRDIwMDA9bQpDT05GSUdfU05EX1VTQl9MSU5FNj1tCkNPTkZJ
R19TTkRfVVNCX1BPRD1tCkNPTkZJR19TTkRfVVNCX1BPREhEPW0KQ09ORklHX1NORF9VU0Jf
VE9ORVBPUlQ9bQpDT05GSUdfU05EX1VTQl9WQVJJQVg9bQpDT05GSUdfU05EX0ZJUkVXSVJF
PXkKQ09ORklHX1NORF9GSVJFV0lSRV9MSUI9bQpDT05GSUdfU05EX0RJQ0U9bQpDT05GSUdf
U05EX09YRlc9bQpDT05GSUdfU05EX0lTSUdIVD1tCkNPTkZJR19TTkRfU0NTMVg9bQpDT05G
SUdfU05EX0ZJUkVXT1JLUz1tCkNPTkZJR19TTkRfQkVCT0I9bQpDT05GSUdfU05EX1BDTUNJ
QT15CkNPTkZJR19TTkRfVlhQT0NLRVQ9bQpDT05GSUdfU05EX1BEQVVESU9DRj1tCkNPTkZJ
R19TTkRfU09DPW0KIyBDT05GSUdfU05EX0FUTUVMX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9ERVNJR05XQVJFX0kyUyBpcyBub3Qgc2V0CgojCiMgU29DIEF1ZGlvIGZvciBGcmVl
c2NhbGUgQ1BVcwojCgojCiMgQ29tbW9uIFNvQyBBdWRpbyBvcHRpb25zIGZvciBGcmVlc2Nh
bGUgQ1BVczoKIwojIENPTkZJR19TTkRfU09DX0ZTTF9BU1JDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19GU0xfU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1BESUYgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX0ZTTF9FU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19JTVhf
QVVETVVYIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfSU5URUxfU1NUPW0KQ09ORklHX1NO
RF9TT0NfSU5URUxfU1NUX0FDUEk9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9IQVNXRUxMPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQkFZVFJBSUw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9I
QVNXRUxMX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRfUlQ1NjQwX01BQ0g9bQpD
T05GSUdfU05EX1NPQ19JTlRFTF9CWVRfTUFYOTgwOTBfTUFDSD1tCkNPTkZJR19TTkRfU09D
X0lOVEVMX0JST0FEV0VMTF9NQUNIPW0KIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9S
VDU2NDBfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NzJfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NDVfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUUNPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfWFRGUEdBX0kyUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0kyQ19BTkRfU1BJPW0KCiMKIyBDT0RFQyBkcml2ZXJzCiMKIyBDT05GSUdfU05EX1NPQ19B
REFVMTcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs0MTA0IGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19BSzQ1NTQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0FL
NDY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs1Mzg2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19BTEM1NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzM1
TDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDUxX0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
Q1M0Mkw1NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw3MyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0MjY1IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19D
UzQyNzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX0NTNDJYWDhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19IRE1JX0NPREVD
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19FUzgzMjggaXMgbm90IHNldApDT05GSUdf
U05EX1NPQ19NQVg5ODA5MD1tCiMgQ09ORklHX1NORF9TT0NfUENNMTY4MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfUENNMTc5MkEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09D
X1BDTTUxMnhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCkNPTkZJR19TTkRfU09DX1JUMjg2
PW0KIyBDT05GSUdfU05EX1NPQ19SVDU2MzEgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19S
VDU2NDA9bQojIENPTkZJR19TTkRfU09DX1JUNTY3N19TUEkgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1NHVEw1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TSVJGX0FV
RElPX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TUERJRiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TU000NTY3IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TVEEzMlggaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1NUQTM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjU1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTNTA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfVEZBOTg3OSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19TUEkgaXMgbm90
IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzMxWFggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UUzNB
MjI3RSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NTEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19XTTg1MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODU4
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19XTTg3MjggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODczMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XTTg3NDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19XTTg3NzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc3NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfV004ODA0X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfV004ODA0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg5NjIgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1dNODk3OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NJTVBMRV9DQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdf
U09VTkRfUFJJTUUgaXMgbm90IHNldApDT05GSUdfQUM5N19CVVM9bQoKIwojIEhJRCBzdXBw
b3J0CiMKQ09ORklHX0hJRD1tCkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJ
R19ISURSQVc9eQpDT05GSUdfVUhJRD1tCkNPTkZJR19ISURfR0VORVJJQz1tCgojCiMgU3Bl
Y2lhbCBISUQgZHJpdmVycwojCkNPTkZJR19ISURfQTRURUNIPW0KQ09ORklHX0hJRF9BQ1JV
WD1tCkNPTkZJR19ISURfQUNSVVhfRkY9eQpDT05GSUdfSElEX0FQUExFPW0KQ09ORklHX0hJ
RF9BUFBMRUlSPW0KQ09ORklHX0hJRF9BVVJFQUw9bQpDT05GSUdfSElEX0JFTEtJTj1tCiMg
Q09ORklHX0hJRF9CRVRPUF9GRiBpcyBub3Qgc2V0CkNPTkZJR19ISURfQ0hFUlJZPW0KQ09O
RklHX0hJRF9DSElDT05ZPW0KQ09ORklHX0hJRF9QUk9ESUtFWVM9bQpDT05GSUdfSElEX0NQ
MjExMj1tCkNPTkZJR19ISURfQ1lQUkVTUz1tCkNPTkZJR19ISURfRFJBR09OUklTRT1tCkNP
TkZJR19EUkFHT05SSVNFX0ZGPXkKQ09ORklHX0hJRF9FTVNfRkY9bQpDT05GSUdfSElEX0VM
RUNPTT1tCkNPTkZJR19ISURfRUxPPW0KQ09ORklHX0hJRF9FWktFWT1tCkNPTkZJR19ISURf
SE9MVEVLPW0KQ09ORklHX0hPTFRFS19GRj15CiMgQ09ORklHX0hJRF9HVDY4M1IgaXMgbm90
IHNldApDT05GSUdfSElEX0tFWVRPVUNIPW0KQ09ORklHX0hJRF9LWUU9bQpDT05GSUdfSElE
X1VDTE9HSUM9bQpDT05GSUdfSElEX1dBTFRPUD1tCkNPTkZJR19ISURfR1lSQVRJT049bQpD
T05GSUdfSElEX0lDQURFPW0KQ09ORklHX0hJRF9UV0lOSEFOPW0KQ09ORklHX0hJRF9LRU5T
SU5HVE9OPW0KQ09ORklHX0hJRF9MQ1BPV0VSPW0KQ09ORklHX0hJRF9MRU5PVk89bQpDT05G
SUdfSElEX0xPR0lURUNIPW0KQ09ORklHX0hJRF9MT0dJVEVDSF9ESj1tCkNPTkZJR19ISURf
TE9HSVRFQ0hfSElEUFA9bQpDT05GSUdfTE9HSVRFQ0hfRkY9eQpDT05GSUdfTE9HSVJVTUJM
RVBBRDJfRkY9eQpDT05GSUdfTE9HSUc5NDBfRkY9eQpDT05GSUdfTE9HSVdIRUVMU19GRj15
CkNPTkZJR19ISURfTUFHSUNNT1VTRT1tCkNPTkZJR19ISURfTUlDUk9TT0ZUPW0KQ09ORklH
X0hJRF9NT05URVJFWT1tCkNPTkZJR19ISURfTVVMVElUT1VDSD1tCkNPTkZJR19ISURfTlRS
SUc9bQpDT05GSUdfSElEX09SVEVLPW0KQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCkNPTkZJ
R19QQU5USEVSTE9SRF9GRj15CkNPTkZJR19ISURfUEVOTU9VTlQ9bQpDT05GSUdfSElEX1BF
VEFMWU5YPW0KQ09ORklHX0hJRF9QSUNPTENEPW0KQ09ORklHX0hJRF9QSUNPTENEX0ZCPXkK
Q09ORklHX0hJRF9QSUNPTENEX0JBQ0tMSUdIVD15CkNPTkZJR19ISURfUElDT0xDRF9MRURT
PXkKQ09ORklHX0hJRF9QSUNPTENEX0NJUj15CiMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBp
cyBub3Qgc2V0CkNPTkZJR19ISURfUFJJTUFYPW0KQ09ORklHX0hJRF9ST0NDQVQ9bQpDT05G
SUdfSElEX1NBSVRFSz1tCkNPTkZJR19ISURfU0FNU1VORz1tCkNPTkZJR19ISURfU09OWT1t
CkNPTkZJR19TT05ZX0ZGPXkKQ09ORklHX0hJRF9TUEVFRExJTks9bQpDT05GSUdfSElEX1NU
RUVMU0VSSUVTPW0KQ09ORklHX0hJRF9TVU5QTFVTPW0KQ09ORklHX0hJRF9STUk9bQpDT05G
SUdfSElEX0dSRUVOQVNJQT1tCkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElEX0hZ
UEVSVl9NT1VTRT1tCkNPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KQ09ORklHX1NNQVJUSk9Z
UExVU19GRj15CkNPTkZJR19ISURfVElWTz1tCkNPTkZJR19ISURfVE9QU0VFRD1tCkNPTkZJ
R19ISURfVEhJTkdNPW0KQ09ORklHX0hJRF9USFJVU1RNQVNURVI9bQpDT05GSUdfVEhSVVNU
TUFTVEVSX0ZGPXkKQ09ORklHX0hJRF9XQUNPTT1tCkNPTkZJR19ISURfV0lJTU9URT1tCkNP
TkZJR19ISURfWElOTU89bQpDT05GSUdfSElEX1pFUk9QTFVTPW0KQ09ORklHX1pFUk9QTFVT
X0ZGPXkKQ09ORklHX0hJRF9aWURBQ1JPTj1tCkNPTkZJR19ISURfU0VOU09SX0hVQj1tCiMg
Q09ORklHX0hJRF9TRU5TT1JfQ1VTVE9NX1NFTlNPUiBpcyBub3Qgc2V0CgojCiMgVVNCIEhJ
RCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9bQpDT05GSUdfSElEX1BJRD15CkNPTkZJR19V
U0JfSElEREVWPXkKCiMKIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwojCiMgQ09O
RklHX1VTQl9LQkQgaXMgbm90IHNldAojIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAoK
IwojIEkyQyBISUQgc3VwcG9ydAojCkNPTkZJR19JMkNfSElEPW0KQ09ORklHX1VTQl9PSENJ
X0xJVFRMRV9FTkRJQU49eQpDT05GSUdfVVNCX1NVUFBPUlQ9eQpDT05GSUdfVVNCX0NPTU1P
Tj1tCkNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQ09ORklHX1VTQj1tCkNPTkZJR19VU0Jf
QU5OT1VOQ0VfTkVXX0RFVklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMK
IwpDT05GSUdfVVNCX0RFRkFVTFRfUEVSU0lTVD15CkNPTkZJR19VU0JfRFlOQU1JQ19NSU5P
UlM9eQojIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX09UR19XSElU
RUxJU1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90
IHNldAojIENPTkZJR19VU0JfT1RHX0ZTTSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTU9OPW0K
Q09ORklHX1VTQl9XVVNCPW0KQ09ORklHX1VTQl9XVVNCX0NCQUY9bQojIENPTkZJR19VU0Jf
V1VTQl9DQkFGX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERy
aXZlcnMKIwojIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
WEhDSV9IQ0Q9bQpDT05GSUdfVVNCX1hIQ0lfUENJPW0KQ09ORklHX1VTQl9FSENJX0hDRD1t
CkNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CkNPTkZJR19VU0JfRUhDSV9UVF9ORVdT
Q0hFRD15CkNPTkZJR19VU0JfRUhDSV9QQ0k9bQojIENPTkZJR19VU0JfRUhDSV9IQ0RfUExB
VEZPUk0gaXMgbm90IHNldAojIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTUDEz
NjJfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0ZVU0JIMjAwX0hDRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NQVgz
NDIxX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfT0hDSV9IQ0Q9bQpDT05GSUdfVVNCX09I
Q0lfSENEX1BDST1tCiMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAojIENP
TkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0gaXMgbm90IHNldApDT05GSUdfVVNCX1VIQ0lf
SENEPW0KQ09ORklHX1VTQl9VMTMyX0hDRD1tCkNPTkZJR19VU0JfU0w4MTFfSENEPW0KIyBD
T05GSUdfVVNCX1NMODExX0hDRF9JU08gaXMgbm90IHNldApDT05GSUdfVVNCX1NMODExX0NT
PW0KIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfV0hD
SV9IQ0Q9bQpDT05GSUdfVVNCX0hXQV9IQ0Q9bQojIENPTkZJR19VU0JfSENEX0JDTUEgaXMg
bm90IHNldAojIENPTkZJR19VU0JfSENEX1NTQiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9I
Q0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKCiMKIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMK
IwpDT05GSUdfVVNCX0FDTT1tCkNPTkZJR19VU0JfUFJJTlRFUj1tCkNPTkZJR19VU0JfV0RN
PW0KQ09ORklHX1VTQl9UTUM9bQoKIwojIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24g
U0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKIwoKIwojIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNC
X1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiMKQ09ORklHX1VTQl9TVE9SQUdFPW0KIyBD
T05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfVVNCX1NUT1JBR0Vf
UkVBTFRFSz1tCkNPTkZJR19SRUFMVEVLX0FVVE9QTT15CkNPTkZJR19VU0JfU1RPUkFHRV9E
QVRBRkFCPW0KQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQpDT05GSUdfVVNCX1NUT1JB
R0VfSVNEMjAwPW0KQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KQ09ORklHX1VTQl9TVE9S
QUdFX1NERFIwOT1tCkNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQpDT05GSUdfVVNCX1NU
T1JBR0VfSlVNUFNIT1Q9bQpDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPW0KQ09ORklHX1VT
Ql9TVE9SQUdFX09ORVRPVUNIPW0KQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPW0KQ09ORklH
X1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0I9bQpDT05GSUdfVVNCX1NUT1JBR0VfRU5FX1VC
NjI1MD1tCkNPTkZJR19VU0JfVUFTPW0KCiMKIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKQ09O
RklHX1VTQl9NREM4MDA9bQpDT05GSUdfVVNCX01JQ1JPVEVLPW0KQ09ORklHX1VTQklQX0NP
UkU9bQpDT05GSUdfVVNCSVBfVkhDSV9IQ0Q9bQpDT05GSUdfVVNCSVBfSE9TVD1tCiMgQ09O
RklHX1VTQklQX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzIg
aXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUEgaXMgbm90IHNldAojIENPTkZJR19V
U0JfSVNQMTc2MCBpcyBub3Qgc2V0CgojCiMgVVNCIHBvcnQgZHJpdmVycwojCkNPTkZJR19V
U0JfVVNTNzIwPW0KQ09ORklHX1VTQl9TRVJJQUw9bQpDT05GSUdfVVNCX1NFUklBTF9HRU5F
UklDPXkKQ09ORklHX1VTQl9TRVJJQUxfU0lNUExFPW0KQ09ORklHX1VTQl9TRVJJQUxfQUlS
Q0FCTEU9bQpDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KQ09ORklHX1VTQl9TRVJJQUxf
QkVMS0lOPW0KQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDE9bQpDT05GSUdfVVNCX1NFUklBTF9X
SElURUhFQVQ9bQpDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9DUDIxMFg9bQpDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KQ09O
RklHX1VTQl9TRVJJQUxfRU1QRUc9bQpDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCkNP
TkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lSPW0KQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9FREdFUE9SVF9UST1tCkNPTkZJR19VU0JfU0VSSUFMX0Y4MTIzMj1tCkNP
TkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCkNPTkZJR19VU0JfU0VSSUFMX0lQVz1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lVVT1tCkNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KQ09O
RklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCkNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQpDT05G
SUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQpDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1t
CkNPTkZJR19VU0JfU0VSSUFMX01FVFJPPW0KQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1t
CkNPTkZJR19VU0JfU0VSSUFMX01PUzc3MTVfUEFSUE9SVD15CkNPTkZJR19VU0JfU0VSSUFM
X01PUzc4NDA9bQpDT05GSUdfVVNCX1NFUklBTF9NWFVQT1JUPW0KQ09ORklHX1VTQl9TRVJJ
QUxfTkFWTUFOPW0KQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KQ09ORklHX1VTQl9TRVJJ
QUxfT1RJNjg1OD1tCkNPTkZJR19VU0JfU0VSSUFMX1FDQVVYPW0KQ09ORklHX1VTQl9TRVJJ
QUxfUVVBTENPTU09bQpDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KQ09ORklHX1VTQl9T
RVJJQUxfU0FGRT1tCiMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNl
dApDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUz1tCkNPTkZJR19VU0JfU0VSSUFM
X1NZTUJPTD1tCkNPTkZJR19VU0JfU0VSSUFMX1RJPW0KQ09ORklHX1VTQl9TRVJJQUxfQ1lC
RVJKQUNLPW0KQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KQ09ORklHX1VTQl9TRVJJQUxf
V1dBTj1tCkNPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCkNPTkZJR19VU0JfU0VSSUFMX09N
TklORVQ9bQpDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KQ09ORklHX1VTQl9TRVJJQUxf
WFNFTlNfTVQ9bQpDT05GSUdfVVNCX1NFUklBTF9XSVNIQk9ORT1tCkNPTkZJR19VU0JfU0VS
SUFMX1NTVTEwMD1tCkNPTkZJR19VU0JfU0VSSUFMX1FUMj1tCkNPTkZJR19VU0JfU0VSSUFM
X0RFQlVHPW0KCiMKIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiMKQ09ORklHX1VTQl9F
TUk2Mj1tCkNPTkZJR19VU0JfRU1JMjY9bQpDT05GSUdfVVNCX0FEVVRVWD1tCkNPTkZJR19V
U0JfU0VWU0VHPW0KQ09ORklHX1VTQl9SSU81MDA9bQpDT05GSUdfVVNCX0xFR09UT1dFUj1t
CkNPTkZJR19VU0JfTENEPW0KQ09ORklHX1VTQl9MRUQ9bQpDT05GSUdfVVNCX0NZUFJFU1Nf
Q1k3QzYzPW0KQ09ORklHX1VTQl9DWVRIRVJNPW0KQ09ORklHX1VTQl9JRE1PVVNFPW0KQ09O
RklHX1VTQl9GVERJX0VMQU49bQpDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCkNPTkZJR19V
U0JfU0lTVVNCVkdBPW0KQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKQ09ORklHX1VTQl9M
RD1tCkNPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQpDT05GSUdfVVNCX0lPV0FSUklPUj1t
CkNPTkZJR19VU0JfVEVTVD1tCkNPTkZJR19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFPW0KQ09O
RklHX1VTQl9JU0lHSFRGVz1tCkNPTkZJR19VU0JfWVVSRVg9bQpDT05GSUdfVVNCX0VaVVNC
X0ZYMj1tCiMgQ09ORklHX1VTQl9IU0lDX1VTQjM1MDMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NIQU9TS0VZIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9BVE09bQpDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQpDT05G
SUdfVVNCX0NYQUNSVT1tCkNPTkZJR19VU0JfVUVBR0xFQVRNPW0KQ09ORklHX1VTQl9YVVNC
QVRNPW0KCiMKIyBVU0IgUGh5c2ljYWwgTGF5ZXIgZHJpdmVycwojCiMgQ09ORklHX1VTQl9Q
SFkgaXMgbm90IHNldAojIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxMzAxIGlzIG5v
dCBzZXQKQ09ORklHX1VTQl9HQURHRVQ9bQojIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0dBREdF
VF9WQlVTX0RSQVc9MgpDT05GSUdfVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTPTIK
CiMKIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCiMKIyBDT05GSUdfVVNCX0ZPVEcyMTBf
VURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dSX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9SOEE2NjU5NyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9QWEEyN1ggaXMgbm90IHNl
dAojIENPTkZJR19VU0JfTVZfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01WX1UzRCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
QkRDX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9BTUQ1NTM2VURDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX05FVDIyNzIgaXMgbm90IHNldApDT05GSUdfVVNCX05FVDIyODA9bQoj
IENPTkZJR19VU0JfR09LVSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRUcyMFQ9bQojIENPTkZJ
R19VU0JfRFVNTVlfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENPTkZJR19VU0JfQVVESU8g
aXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0df
TkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19TVE9SQUdF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAojIENP
TkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9H
X01VTFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dfREJHUCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfTEVEX1RSSUc9eQpDT05GSUdfVVdCPW0KQ09ORklHX1VXQl9IV0E9
bQpDT05GSUdfVVdCX1dIQ0k9bQpDT05GSUdfVVdCX0kxNDgwVT1tCkNPTkZJR19NTUM9bQoj
IENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfQ0xLR0FURSBpcyBu
b3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiMKQ09ORklHX01NQ19CTE9D
Sz1tCkNPTkZJR19NTUNfQkxPQ0tfTUlOT1JTPTI1NgpDT05GSUdfTU1DX0JMT0NLX0JPVU5D
RT15CkNPTkZJR19TRElPX1VBUlQ9bQojIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Cgoj
CiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfTU1DX1NE
SENJPW0KQ09ORklHX01NQ19TREhDSV9QQ0k9bQpDT05GSUdfTU1DX1JJQ09IX01NQz15CkNP
TkZJR19NTUNfU0RIQ0lfQUNQST1tCiMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qg
c2V0CkNPTkZJR19NTUNfV0JTRD1tCkNPTkZJR19NTUNfVElGTV9TRD1tCiMgQ09ORklHX01N
Q19TUEkgaXMgbm90IHNldApDT05GSUdfTU1DX1NEUklDT0hfQ1M9bQpDT05GSUdfTU1DX0NC
NzEwPW0KQ09ORklHX01NQ19WSUFfU0RNTUM9bQpDT05GSUdfTU1DX1ZVQjMwMD1tCkNPTkZJ
R19NTUNfVVNIQz1tCiMgQ09ORklHX01NQ19VU0RISTZST0wwIGlzIG5vdCBzZXQKQ09ORklH
X01NQ19SRUFMVEVLX1BDST1tCkNPTkZJR19NTUNfUkVBTFRFS19VU0I9bQpDT05GSUdfTU1D
X1RPU0hJQkFfUENJPW0KQ09ORklHX01FTVNUSUNLPW0KIyBDT05GSUdfTUVNU1RJQ0tfREVC
VUcgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIGRyaXZlcnMKIwojIENPTkZJR19NRU1T
VElDS19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKQ09ORklHX01TUFJPX0JMT0NLPW0KIyBD
T05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIEhvc3QgQ29udHJv
bGxlciBEcml2ZXJzCiMKQ09ORklHX01FTVNUSUNLX1RJRk1fTVM9bQpDT05GSUdfTUVNU1RJ
Q0tfSk1JQ1JPTl8zOFg9bQpDT05GSUdfTUVNU1RJQ0tfUjU5Mj1tCkNPTkZJR19NRU1TVElD
S19SRUFMVEVLX1BDST1tCkNPTkZJR19NRU1TVElDS19SRUFMVEVLX1VTQj1tCkNPTkZJR19O
RVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdfTEVEU19DTEFTU19GTEFT
SCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlcnMKIwojIENPTkZJR19MRURTX0xNMzUzMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19QQ0E5NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKQ09O
RklHX0xFRFNfTFAzOTQ0PW0KIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0xQNTUyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1NTYyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19MUDg1MDEgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xQ
ODg2MCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX0NMRVZPX01BSUw9bQpDT05GSUdfTEVEU19Q
Q0E5NTVYPW0KIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5vdCBzZXQKQ09ORklHX0xFRFNf
REFDMTI0UzA4NT1tCkNPTkZJR19MRURTX0JEMjgwMj1tCkNPTkZJR19MRURTX0lOVEVMX1NT
NDIwMD1tCkNPTkZJR19MRURTX0xUMzU5Mz1tCkNPTkZJR19MRURTX0RFTExfTkVUQk9PS1M9
bQojIENPTkZJR19MRURTX1RDQTY1MDcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1
eCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX01FTkYyMUJNQz1tCgojCiMgTEVEIGRyaXZlciBm
b3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAo
SElEX1RISU5HTSkKIwojIENPTkZJR19MRURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfUE04OTQxX1dMRUQgaXMgbm90IHNldAoKIwojIExFRCBUcmlnZ2VycwojCkNPTkZJ
R19MRURTX1RSSUdHRVJTPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCkNPTkZJR19M
RURTX1RSSUdHRVJfT05FU0hPVD1tCkNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0K
Q09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQpDT05GSUdfTEVEU19UUklHR0VSX0NQ
VT15CkNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCkNPTkZJR19MRURTX1RSSUdHRVJfREVG
QVVMVF9PTj1tCgojCiMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29u
ZmlnIChMRUQgdGFyZ2V0KQojCkNPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UPW0KQ09O
RklHX0xFRFNfVFJJR0dFUl9DQU1FUkE9bQpDT05GSUdfQUNDRVNTSUJJTElUWT15CkNPTkZJ
R19BMTFZX0JSQUlMTEVfQ09OU09MRT15CkNPTkZJR19JTkZJTklCQU5EPW0KQ09ORklHX0lO
RklOSUJBTkRfVVNFUl9NQUQ9bQpDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCkNP
TkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5E
X1BBR0lORz15CkNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQpDT05GSUdfSU5GSU5J
QkFORF9NVEhDQT1tCkNPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKQ09ORklHX0lO
RklOSUJBTkRfSVBBVEg9bQpDT05GSUdfSU5GSU5JQkFORF9RSUI9bQpDT05GSUdfSU5GSU5J
QkFORF9RSUJfRENBPXkKQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDA9bQojIENPTkZJR19J
TkZJTklCQU5EX0FNU08xMTAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRf
Q1hHQjM9bQojIENPTkZJR19JTkZJTklCQU5EX0NYR0IzX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX0lORklOSUJBTkRfQ1hHQjQ9bQpDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KQ09ORklH
X01MWDVfSU5GSU5JQkFORD1tCkNPTkZJR19JTkZJTklCQU5EX05FUz1tCiMgQ09ORklHX0lO
RklOSUJBTkRfTkVTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRfT0NSRE1B
PW0KIyBDT05GSUdfSU5GSU5JQkFORF9VU05JQyBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklC
QU5EX0lQT0lCPW0KQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQpDT05GSUdfSU5GSU5J
QkFORF9JUE9JQl9ERUJVRz15CiMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFU
QSBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklCQU5EX1NSUD1tCkNPTkZJR19JTkZJTklCQU5E
X1NSUFQ9bQpDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KQ09ORklHX0lORklOSUJBTkRfSVNF
UlQ9bQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FDWV9TWVNGUz15CiMgQ09ORklH
X0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19ERUNPREVfTUNFPW0KIyBDT05G
SUdfRURBQ19NQ0VfSU5KIGlzIG5vdCBzZXQKQ09ORklHX0VEQUNfTU1fRURBQz1tCkNPTkZJ
R19FREFDX0FNRDY0PW0KIyBDT05GSUdfRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04gaXMg
bm90IHNldApDT05GSUdfRURBQ19FNzUyWD1tCkNPTkZJR19FREFDX0k4Mjk3NVg9bQpDT05G
SUdfRURBQ19JMzAwMD1tCkNPTkZJR19FREFDX0kzMjAwPW0KQ09ORklHX0VEQUNfSUUzMTIw
MD1tCkNPTkZJR19FREFDX1gzOD1tCkNPTkZJR19FREFDX0k1NDAwPW0KQ09ORklHX0VEQUNf
STdDT1JFPW0KQ09ORklHX0VEQUNfSTUwMDA9bQpDT05GSUdfRURBQ19JNTEwMD1tCkNPTkZJ
R19FREFDX0k3MzAwPW0KQ09ORklHX0VEQUNfU0JSSURHRT1tCkNPTkZJR19SVENfTElCPXkK
Q09ORklHX1JUQ19DTEFTUz15CkNPTkZJR19SVENfSENUT1NZUz15CkNPTkZJR19SVENfU1lT
VE9IQz15CkNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiMgQ09ORklHX1JUQ19E
RUJVRyBpcyBub3Qgc2V0CgojCiMgUlRDIGludGVyZmFjZXMKIwpDT05GSUdfUlRDX0lOVEZf
U1lTRlM9eQpDT05GSUdfUlRDX0lOVEZfUFJPQz15CkNPTkZJR19SVENfSU5URl9ERVY9eQoj
IENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX1RFU1QgaXMgbm90IHNldAoKIwojIEkyQyBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JU
Q19EUlZfQUJCNVpFUzMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgwWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9NQVg2OTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwNTcgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0YyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTIzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0Y4NTA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9CUTMySyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMw
MjlDMiBpcyBub3Qgc2V0CgojCiMgU1BJIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RS
Vl9NNDFUOTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9E
UzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2
OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjM0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9SWDQ1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX01DUDc5NSBp
cyBub3Qgc2V0CgojCiMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl9D
TU9TPXkKIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX0RTMTUxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE2ODVfRkFNSUxZIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMjQwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX01TTTYyNDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9WMzAyMCBpcyBub3Qgc2V0CgojCiMgb24tQ1BVIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdf
UlRDX0RSVl9YR0VORSBpcyBub3Qgc2V0CgojCiMgSElEIFNlbnNvciBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FIGlzIG5vdCBzZXQKQ09ORklHX0RN
QURFVklDRVM9eQojIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBE
TUEgRGV2aWNlcwojCiMgQ09ORklHX0lOVEVMX01JQ19YMTAwX0RNQSBpcyBub3Qgc2V0CkNP
TkZJR19JTlRFTF9JT0FURE1BPW0KQ09ORklHX0RXX0RNQUNfQ09SRT1tCkNPTkZJR19EV19E
TUFDPW0KIyBDT05GSUdfRFdfRE1BQ19QQ0kgaXMgbm90IHNldAojIENPTkZJR19IU1VfRE1B
X1BDSSBpcyBub3Qgc2V0CkNPTkZJR19ETUFfRU5HSU5FPXkKQ09ORklHX0RNQV9BQ1BJPXkK
CiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19BU1lOQ19UWF9ETUE9eQojIENPTkZJR19ETUFU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX0RNQV9FTkdJTkVfUkFJRD15CkNPTkZJR19EQ0E9bQoj
IENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKQ09ORklHX1VJTz1tCkNPTkZJR19VSU9f
Q0lGPW0KIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKIyBDT05GSUdfVUlP
X0RNRU1fR0VOSVJRIGlzIG5vdCBzZXQKQ09ORklHX1VJT19BRUM9bQpDT05GSUdfVUlPX1NF
UkNPUzM9bQpDT05GSUdfVUlPX1BDSV9HRU5FUklDPW0KQ09ORklHX1VJT19ORVRYPW0KQ09O
RklHX1VJT19NRjYyND1tCkNPTkZJR19WRklPX0lPTU1VX1RZUEUxPW0KQ09ORklHX1ZGSU9f
VklSUUZEPW0KQ09ORklHX1ZGSU89bQpDT05GSUdfVkZJT19QQ0k9bQpDT05GSUdfVkZJT19Q
Q0lfVkdBPXkKQ09ORklHX1ZGSU9fUENJX01NQVA9eQpDT05GSUdfVkZJT19QQ0lfSU5UWD15
CkNPTkZJR19WSVJUX0RSSVZFUlM9eQpDT05GSUdfVklSVElPPW0KCiMKIyBWaXJ0aW8gZHJp
dmVycwojCkNPTkZJR19WSVJUSU9fUENJPW0KQ09ORklHX1ZJUlRJT19QQ0lfTEVHQUNZPXkK
Q09ORklHX1ZJUlRJT19CQUxMT09OPW0KQ09ORklHX1ZJUlRJT19JTlBVVD1tCiMgQ09ORklH
X1ZJUlRJT19NTUlPIGlzIG5vdCBzZXQKCiMKIyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBz
dXBwb3J0CiMKQ09ORklHX0hZUEVSVj1tCkNPTkZJR19IWVBFUlZfVVRJTFM9bQpDT05GSUdf
SFlQRVJWX0JBTExPT049bQoKIwojIFhlbiBkcml2ZXIgc3VwcG9ydAojCkNPTkZJR19YRU5f
QkFMTE9PTj15CiMgQ09ORklHX1hFTl9CQUxMT09OX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBz
ZXQKQ09ORklHX1hFTl9TQ1JVQl9QQUdFUz15CkNPTkZJR19YRU5fREVWX0VWVENITj1tCkNP
TkZJR19YRU5fQkFDS0VORD15CkNPTkZJR19YRU5GUz1tCkNPTkZJR19YRU5fQ09NUEFUX1hF
TkZTPXkKQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19YRU5fWEVOQlVTX0ZS
T05URU5EPXkKQ09ORklHX1hFTl9HTlRERVY9bQpDT05GSUdfWEVOX0dSQU5UX0RFVl9BTExP
Qz1tCkNPTkZJR19TV0lPVExCX1hFTj15CkNPTkZJR19YRU5fVE1FTT1tCkNPTkZJR19YRU5f
UENJREVWX0JBQ0tFTkQ9bQpDT05GSUdfWEVOX1NDU0lfQkFDS0VORD1tCkNPTkZJR19YRU5f
UFJJVkNNRD1tCkNPTkZJR19YRU5fQUNQSV9QUk9DRVNTT1I9bQpDT05GSUdfWEVOX01DRV9M
T0c9eQpDT05GSUdfWEVOX0hBVkVfUFZNTVU9eQpDT05GSUdfWEVOX0VGST15CkNPTkZJR19Y
RU5fQVVUT19YTEFURT15CkNPTkZJR19YRU5fQUNQST15CkNPTkZJR19TVEFHSU5HPXkKIyBD
T05GSUdfU0xJQ09TUyBpcyBub3Qgc2V0CkNPTkZJR19QUklTTTJfVVNCPW0KQ09ORklHX0NP
TUVEST1tCiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElf
REVGQVVMVF9CVUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFY
U0laRV9LQj0yMDQ4MApDT05GSUdfQ09NRURJX01JU0NfRFJJVkVSUz15CkNPTkZJR19DT01F
RElfQk9ORD1tCkNPTkZJR19DT01FRElfVEVTVD1tCkNPTkZJR19DT01FRElfUEFSUE9SVD1t
CkNPTkZJR19DT01FRElfU0VSSUFMMjAwMj1tCiMgQ09ORklHX0NPTUVESV9JU0FfRFJJVkVS
UyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfUENJX0RSSVZFUlM9bQpDT05GSUdfQ09NRURJ
XzgyNTVfUENJPW0KQ09ORklHX0NPTUVESV9BRERJX1dBVENIRE9HPW0KQ09ORklHX0NPTUVE
SV9BRERJX0FQQ0lfMTAzMj1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE1MDA9bQpDT05G
SUdfQ09NRURJX0FERElfQVBDSV8xNTE2PW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMTU2
ND1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE2WFg9bQpDT05GSUdfQ09NRURJX0FERElf
QVBDSV8yMDMyPW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMjIwMD1tCkNPTkZJR19DT01F
RElfQURESV9BUENJXzMxMjA9bQpDT05GSUdfQ09NRURJX0FERElfQVBDSV8zNTAxPW0KQ09O
RklHX0NPTUVESV9BRERJX0FQQ0lfM1hYWD1tCkNPTkZJR19DT01FRElfQURMX1BDSTYyMDg9
bQpDT05GSUdfQ09NRURJX0FETF9QQ0k3WDNYPW0KQ09ORklHX0NPTUVESV9BRExfUENJODE2
ND1tCkNPTkZJR19DT01FRElfQURMX1BDSTkxMTE9bQpDT05GSUdfQ09NRURJX0FETF9QQ0k5
MTE4PW0KQ09ORklHX0NPTUVESV9BRFZfUENJMTcxMD1tCkNPTkZJR19DT01FRElfQURWX1BD
STE3MjM9bQpDT05GSUdfQ09NRURJX0FEVl9QQ0kxNzI0PW0KQ09ORklHX0NPTUVESV9BRFZf
UENJX0RJTz1tCkNPTkZJR19DT01FRElfQU1QTENfRElPMjAwX1BDST1tCkNPTkZJR19DT01F
RElfQU1QTENfUEMyMzZfUENJPW0KQ09ORklHX0NPTUVESV9BTVBMQ19QQzI2M19QQ0k9bQpD
T05GSUdfQ09NRURJX0FNUExDX1BDSTIyND1tCkNPTkZJR19DT01FRElfQU1QTENfUENJMjMw
PW0KQ09ORklHX0NPTUVESV9DT05URUNfUENJX0RJTz1tCkNPTkZJR19DT01FRElfREFTMDhf
UENJPW0KQ09ORklHX0NPTUVESV9EVDMwMDA9bQpDT05GSUdfQ09NRURJX0RZTkFfUENJMTBY
WD1tCkNPTkZJR19DT01FRElfR1NDX0hQREk9bQpDT05GSUdfQ09NRURJX01GNlg0PW0KQ09O
RklHX0NPTUVESV9JQ1BfTVVMVEk9bQpDT05GSUdfQ09NRURJX0RBUUJPQVJEMjAwMD1tCkNP
TkZJR19DT01FRElfSlIzX1BDST1tCkNPTkZJR19DT01FRElfS0VfQ09VTlRFUj1tCkNPTkZJ
R19DT01FRElfQ0JfUENJREFTNjQ9bQpDT05GSUdfQ09NRURJX0NCX1BDSURBUz1tCkNPTkZJ
R19DT01FRElfQ0JfUENJRERBPW0KQ09ORklHX0NPTUVESV9DQl9QQ0lNREFTPW0KQ09ORklH
X0NPTUVESV9DQl9QQ0lNRERBPW0KQ09ORklHX0NPTUVESV9NRTQwMDA9bQpDT05GSUdfQ09N
RURJX01FX0RBUT1tCkNPTkZJR19DT01FRElfTklfNjUyNz1tCkNPTkZJR19DT01FRElfTklf
NjVYWD1tCkNPTkZJR19DT01FRElfTklfNjYwWD1tCkNPTkZJR19DT01FRElfTklfNjcwWD1t
CkNPTkZJR19DT01FRElfTklfTEFCUENfUENJPW0KQ09ORklHX0NPTUVESV9OSV9QQ0lESU89
bQpDT05GSUdfQ09NRURJX05JX1BDSU1JTz1tCkNPTkZJR19DT01FRElfUlRENTIwPW0KQ09O
RklHX0NPTUVESV9TNjI2PW0KQ09ORklHX0NPTUVESV9NSVRFPW0KQ09ORklHX0NPTUVESV9O
SV9USU9DTUQ9bQpDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTPW0KQ09ORklHX0NPTUVE
SV9DQl9EQVMxNl9DUz1tCkNPTkZJR19DT01FRElfREFTMDhfQ1M9bQpDT05GSUdfQ09NRURJ
X05JX0RBUV83MDBfQ1M9bQpDT05GSUdfQ09NRURJX05JX0RBUV9ESU8yNF9DUz1tCkNPTkZJ
R19DT01FRElfTklfTEFCUENfQ1M9bQpDT05GSUdfQ09NRURJX05JX01JT19DUz1tCkNPTkZJ
R19DT01FRElfUVVBVEVDSF9EQVFQX0NTPW0KQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz1t
CkNPTkZJR19DT01FRElfRFQ5ODEyPW0KQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPW0KQ09O
RklHX0NPTUVESV9VU0JEVVg9bQpDT05GSUdfQ09NRURJX1VTQkRVWEZBU1Q9bQpDT05GSUdf
Q09NRURJX1VTQkRVWFNJR01BPW0KQ09ORklHX0NPTUVESV9WTUs4MFhYPW0KQ09ORklHX0NP
TUVESV84MjU0PW0KQ09ORklHX0NPTUVESV84MjU1PW0KQ09ORklHX0NPTUVESV9LQ09NRURJ
TElCPW0KQ09ORklHX0NPTUVESV9BTVBMQ19ESU8yMDA9bQpDT05GSUdfQ09NRURJX0FNUExD
X1BDMjM2PW0KQ09ORklHX0NPTUVESV9EQVMwOD1tCkNPTkZJR19DT01FRElfTklfTEFCUEM9
bQpDT05GSUdfQ09NRURJX05JX1RJTz1tCiMgQ09ORklHX1BBTkVMIGlzIG5vdCBzZXQKQ09O
RklHX1JUTDgxOTJVPW0KQ09ORklHX1JUTExJQj1tCkNPTkZJR19SVExMSUJfQ1JZUFRPX0ND
TVA9bQpDT05GSUdfUlRMTElCX0NSWVBUT19US0lQPW0KQ09ORklHX1JUTExJQl9DUllQVE9f
V0VQPW0KQ09ORklHX1JUTDgxOTJFPW0KQ09ORklHX1I4NzEyVT1tCkNPTkZJR19SODE4OEVV
PW0KQ09ORklHXzg4RVVfQVBfTU9ERT15CkNPTkZJR19SODcyM0FVPW0KQ09ORklHXzg3MjNB
VV9BUF9NT0RFPXkKQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUPXkKQ09ORklHX1JUUzUyMDg9
bQojIENPTkZJR19WVDY2NTUgaXMgbm90IHNldApDT05GSUdfVlQ2NjU2PW0KCiMKIyBJSU8g
c3RhZ2luZyBkcml2ZXJzCiMKCiMKIyBBY2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMx
NjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjIwNCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwOSBpcyBub3Qgc2V0CiMg
Q09ORklHX0FESVMxNjIyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjI0MCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xJUzNMMDJEUSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDQTMwMDAgaXMg
bm90IHNldAoKIwojIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19B
RDc2MDYgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19B
RDc4MTYgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNldAojIENPTkZJR19B
RDcyODAgaXMgbm90IHNldAoKIwojIEFuYWxvZyBkaWdpdGFsIGJpLWRpcmVjdGlvbiBjb252
ZXJ0ZXJzCiMKIyBDT05GSUdfQURUNzMxNiBpcyBub3Qgc2V0CgojCiMgQ2FwYWNpdGFuY2Ug
dG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ3MTUwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3MTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzQ2IGlzIG5vdCBzZXQKCiMK
IyBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNl
dAojIENPTkZJR19BRDk4MzQgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgZ3lyb3Njb3BlIHNl
bnNvcnMKIwojIENPTkZJR19BRElTMTYwNjAgaXMgbm90IHNldAoKIwojIE5ldHdvcmsgQW5h
bHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ1OTMzIGlzIG5vdCBz
ZXQKCiMKIyBMaWdodCBzZW5zb3JzCiMKQ09ORklHX1NFTlNPUlNfSVNMMjkwMTg9bQojIENP
TkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKQ09ORklHX1RTTDI1ODM9bQojIENP
TkZJR19UU0wyeDd4IGlzIG5vdCBzZXQKCiMKIyBNYWduZXRvbWV0ZXIgc2Vuc29ycwojCiMg
Q09ORklHX1NFTlNPUlNfSE1DNTg0M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hNQzU4NDNfU1BJIGlzIG5vdCBzZXQKCiMKIyBBY3RpdmUgZW5lcmd5IG1ldGVyaW5nIElD
CiMKIyBDT05GSUdfQURFNzc1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0FERTc3NTQgaXMgbm90
IHNldAojIENPTkZJR19BREU3NzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfQURFNzc1OSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FERTc4NTQgaXMgbm90IHNldAoKIwojIFJlc29sdmVyIHRvIGRp
Z2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19QRVJJT0RJQ19SVENfVFJJ
R0dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TSU1QTEVfRFVNTVkgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfWEdJIGlzIG5vdCBzZXQKIyBDT05GSUdfRlQxMDAwIGlzIG5vdCBz
ZXQKCiMKIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCiMKQ09ORklHX1NQRUFLVVA9bQpDT05G
SUdfU1BFQUtVUF9TWU5USF9BQ05UU0E9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BUE9MTE89
bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BVURQVFI9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9C
TlM9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9ERUNUTEs9bQpDT05GSUdfU1BFQUtVUF9TWU5U
SF9ERUNFWFQ9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9MVExLPW0KQ09ORklHX1NQRUFLVVBf
U1lOVEhfU09GVD1tCkNPTkZJR19TUEVBS1VQX1NZTlRIX1NQS09VVD1tCkNPTkZJR19TUEVB
S1VQX1NZTlRIX1RYUFJUPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfRFVNTVk9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9TWU5BUFRJQ1NfSTJDX1JNSTQgaXMgbm90IHNldApDT05GSUdfU1RB
R0lOR19NRURJQT15CiMgQ09ORklHX0kyQ19CQ00yMDQ4IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0NYRDIwOTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EVDMxNTUgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfTU44ODQ3MiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NTjg4NDcz
IGlzIG5vdCBzZXQKQ09ORklHX0xJUkNfU1RBR0lORz15CkNPTkZJR19MSVJDX0JUODI5PW0K
Q09ORklHX0xJUkNfSU1PTj1tCiMgQ09ORklHX0xJUkNfUEFSQUxMRUwgaXMgbm90IHNldApD
T05GSUdfTElSQ19TQVNFTT1tCkNPTkZJR19MSVJDX1NFUklBTD1tCkNPTkZJR19MSVJDX1NF
UklBTF9UUkFOU01JVFRFUj15CkNPTkZJR19MSVJDX1NJUj1tCkNPTkZJR19MSVJDX1pJTE9H
PW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfVVNCX1dQQU5fSENEIGlzIG5vdCBzZXQKQ09O
RklHX1dJTUFYX0dETTcyWFg9bQojIENPTkZJR19XSU1BWF9HRE03MlhYX1FPUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1dJTUFYX0dETTcyWFhfS19NT0RFIGlzIG5vdCBzZXQKIyBDT05GSUdf
V0lNQVhfR0RNNzJYWF9XSU1BWDIgaXMgbm90IHNldApDT05GSUdfV0lNQVhfR0RNNzJYWF9V
U0I9eQojIENPTkZJR19XSU1BWF9HRE03MlhYX1NESU8gaXMgbm90IHNldApDT05GSUdfV0lN
QVhfR0RNNzJYWF9VU0JfUE09eQojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJUkVXSVJFX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TUElOQU5E
X01UMjlGIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9GUz1tCkNPTkZJR19MVVNUUkVfT0JE
X01BWF9JT0NUTF9CVUZGRVI9ODE5MgojIENPTkZJR19MVVNUUkVfREVCVUdfRVhQRU5TSVZF
X0NIRUNLIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9MTElURV9MTE9PUD1tCkNPTkZJR19M
TkVUPW0KQ09ORklHX0xORVRfTUFYX1BBWUxPQUQ9MTA0ODU3NgojIENPTkZJR19MTkVUX1NF
TEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0xORVRfWFBSVF9JQj1tCiMgQ09ORklHX0RHTkMg
aXMgbm90IHNldAojIENPTkZJR19ER0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfR1NfRlBHQUJP
T1QgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU0tFSU4gaXMgbm90IHNldAojIENPTkZJ
R19VTklTWVNTUEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVEZUIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09O
RklHX0FDRVJfV01JPW0KQ09ORklHX0FDRVJIREY9bQpDT05GSUdfQUxJRU5XQVJFX1dNST1t
CkNPTkZJR19BU1VTX0xBUFRPUD1tCkNPTkZJR19ERUxMX0xBUFRPUD1tCkNPTkZJR19ERUxM
X1dNST1tCkNPTkZJR19ERUxMX1dNSV9BSU89bQpDT05GSUdfREVMTF9TTU84ODAwPW0KQ09O
RklHX0ZVSklUU1VfTEFQVE9QPW0KIyBDT05GSUdfRlVKSVRTVV9MQVBUT1BfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlVKSVRTVV9UQUJMRVQ9bQpDT05GSUdfQU1JTE9fUkZLSUxMPW0K
Q09ORklHX0hQX0FDQ0VMPW0KQ09ORklHX0hQX1dJUkVMRVNTPW0KQ09ORklHX0hQX1dNST1t
CkNPTkZJR19NU0lfTEFQVE9QPW0KQ09ORklHX1BBTkFTT05JQ19MQVBUT1A9bQpDT05GSUdf
Q09NUEFMX0xBUFRPUD1tCkNPTkZJR19TT05ZX0xBUFRPUD1tCkNPTkZJR19TT05ZUElfQ09N
UEFUPXkKQ09ORklHX0lERUFQQURfTEFQVE9QPW0KQ09ORklHX1RISU5LUEFEX0FDUEk9bQpD
T05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQ9eQojIENPTkZJR19USElOS1BBRF9B
Q1BJX0RFQlVHRkFDSUxJVElFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RISU5LUEFEX0FDUElf
REVCVUcgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTIGlz
IG5vdCBzZXQKQ09ORklHX1RISU5LUEFEX0FDUElfVklERU89eQpDT05GSUdfVEhJTktQQURf
QUNQSV9IT1RLRVlfUE9MTD15CkNPTkZJR19TRU5TT1JTX0hEQVBTPW0KIyBDT05GSUdfSU5U
RUxfTUVOTE9XIGlzIG5vdCBzZXQKQ09ORklHX0VFRVBDX0xBUFRPUD1tCkNPTkZJR19BU1VT
X1dNST1tCkNPTkZJR19BU1VTX05CX1dNST1tCkNPTkZJR19FRUVQQ19XTUk9bQpDT05GSUdf
QUNQSV9XTUk9bQpDT05GSUdfTVNJX1dNST1tCkNPTkZJR19UT1BTVEFSX0xBUFRPUD1tCkNP
TkZJR19BQ1BJX1RPU0hJQkE9bQpDT05GSUdfVE9TSElCQV9CVF9SRktJTEw9bQpDT05GSUdf
VE9TSElCQV9IQVBTPW0KQ09ORklHX0FDUElfQ01QQz1tCkNPTkZJR19JTlRFTF9JUFM9bQpD
T05GSUdfSUJNX1JUTD1tCkNPTkZJR19TQU1TVU5HX0xBUFRPUD1tCkNPTkZJR19NWE1fV01J
PW0KQ09ORklHX0lOVEVMX09BS1RSQUlMPW0KQ09ORklHX1NBTVNVTkdfUTEwPW0KQ09ORklH
X0FQUExFX0dNVVg9bQpDT05GSUdfSU5URUxfUlNUPW0KQ09ORklHX0lOVEVMX1NNQVJUQ09O
TkVDVD1tCkNPTkZJR19QVlBBTklDPW0KQ09ORklHX0NIUk9NRV9QTEFURk9STVM9eQpDT05G
SUdfQ0hST01FT1NfTEFQVE9QPW0KQ09ORklHX0NIUk9NRU9TX1BTVE9SRT1tCkNPTkZJR19D
TEtERVZfTE9PS1VQPXkKQ09ORklHX0hBVkVfQ0xLX1BSRVBBUkU9eQpDT05GSUdfQ09NTU9O
X0NMSz15CgojCiMgQ29tbW9uIENsb2NrIEZyYW1ld29yawojCiMgQ09ORklHX0NPTU1PTl9D
TEtfU0k1MzUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19QWEEgaXMgbm90IHNl
dAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAoKIwojIEhhcmR3YXJl
IFNwaW5sb2NrIGRyaXZlcnMKIwoKIwojIENsb2NrIFNvdXJjZSBkcml2ZXJzCiMKQ09ORklH
X0NMS0VWVF9JODI1Mz15CkNPTkZJR19JODI1M19MT0NLPXkKQ09ORklHX0NMS0JMRF9JODI1
Mz15CiMgQ09ORklHX0FUTUVMX1BJVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX0NN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX01UVTIgaXMgbm90IHNldAojIENPTkZJ
R19TSF9USU1FUl9UTVUgaXMgbm90IHNldAojIENPTkZJR19FTV9USU1FUl9TVEkgaXMgbm90
IHNldAojIENPTkZJR19NQUlMQk9YIGlzIG5vdCBzZXQKQ09ORklHX0lPTU1VX0FQST15CkNP
TkZJR19JT01NVV9TVVBQT1JUPXkKCiMKIyBHZW5lcmljIElPTU1VIFBhZ2V0YWJsZSBTdXBw
b3J0CiMKQ09ORklHX0lPTU1VX0lPVkE9eQpDT05GSUdfQU1EX0lPTU1VPXkKIyBDT05GSUdf
QU1EX0lPTU1VX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0FNRF9JT01NVV9WMj15CkNPTkZJ
R19ETUFSX1RBQkxFPXkKQ09ORklHX0lOVEVMX0lPTU1VPXkKIyBDT05GSUdfSU5URUxfSU9N
TVVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9JT01NVV9GTE9QUFlfV0E9
eQpDT05GSUdfSVJRX1JFTUFQPXkKCiMKIyBSZW1vdGVwcm9jIGRyaXZlcnMKIwojIENPTkZJ
R19TVEVfTU9ERU1fUlBST0MgaXMgbm90IHNldAoKIwojIFJwbXNnIGRyaXZlcnMKIwoKIwoj
IFNPQyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmljIERyaXZlcnMKIwojIENPTkZJR19TT0Nf
VEkgaXMgbm90IHNldApDT05GSUdfUE1fREVWRlJFUT15CgojCiMgREVWRlJFUSBHb3Zlcm5v
cnMKIwpDT05GSUdfREVWRlJFUV9HT1ZfU0lNUExFX09OREVNQU5EPW0KIyBDT05GSUdfREVW
RlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9Q
T1dFUlNBVkUgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9VU0VSU1BBQ0UgaXMg
bm90IHNldAoKIwojIERFVkZSRVEgRHJpdmVycwojCiMgQ09ORklHX1BNX0RFVkZSRVFfRVZF
TlQgaXMgbm90IHNldAojIENPTkZJR19FWFRDT04gaXMgbm90IHNldApDT05GSUdfTUVNT1JZ
PXkKQ09ORklHX0lJTz1tCkNPTkZJR19JSU9fQlVGRkVSPXkKIyBDT05GSUdfSUlPX0JVRkZF
Ul9DQiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklH
R0VSRURfQlVGRkVSPW0KQ09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1F
UlNfUEVSX1RSSUdHRVI9MgoKIwojIEFjY2VsZXJvbWV0ZXJzCiMKIyBDT05GSUdfQk1BMTgw
IGlzIG5vdCBzZXQKQ09ORklHX0JNQzE1MF9BQ0NFTD1tCkNPTkZJR19ISURfU0VOU09SX0FD
Q0VMXzNEPW0KIyBDT05GSUdfSUlPX1NUX0FDQ0VMXzNBWElTIGlzIG5vdCBzZXQKIyBDT05G
SUdfS1hTRDkgaXMgbm90IHNldAojIENPTkZJR19NTUE4NDUyIGlzIG5vdCBzZXQKQ09ORklH
X0tYQ0pLMTAxMz1tCkNPTkZJR19NTUE5NTUxX0NPUkU9bQpDT05GSUdfTU1BOTU1MT1tCkNP
TkZJR19NTUE5NTUzPW0KCiMKIyBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBD
T05GSUdfQUQ3MjY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MjkxIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3Mjk4IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NDc2IGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3NzkxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzkzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3ODg3IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3OTIzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3OTlYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTAyNyBpcyBub3Qgc2V0CiMg
Q09ORklHX01BWDEzNjMgaXMgbm90IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUNQMzQyMiBpcyBub3Qgc2V0CiMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNl
dAojIENPTkZJR19USV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTI4UzA1
MiBpcyBub3Qgc2V0CkNPTkZJR19WSVBFUkJPQVJEX0FEQz1tCgojCiMgQW1wbGlmaWVycwoj
CiMgQ09ORklHX0FEODM2NiBpcyBub3Qgc2V0CgojCiMgSGlkIFNlbnNvciBJSU8gQ29tbW9u
CiMKQ09ORklHX0hJRF9TRU5TT1JfSUlPX0NPTU1PTj1tCkNPTkZJR19ISURfU0VOU09SX0lJ
T19UUklHR0VSPW0KCiMKIyBTU1AgU2Vuc29yIENvbW1vbgojCiMgQ09ORklHX0lJT19TU1Bf
U0VOU09SSFVCIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXJz
CiMKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NTA0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NjI0Ul9TUEkgaXMg
bm90IHNldAojIENPTkZJR19BRDU2ODYgaXMgbm90IHNldAojIENPTkZJR19BRDU3NTUgaXMg
bm90IHNldAojIENPTkZJR19BRDU3NjQgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMg
bm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAojIENPTkZJR19NQVg1MTcgaXMg
bm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDkyMiBp
cyBub3Qgc2V0CgojCiMgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBD
bG9jayBHZW5lcmF0b3IvRGlzdHJpYnV0aW9uCiMKIyBDT05GSUdfQUQ5NTIzIGlzIG5vdCBz
ZXQKCiMKIyBQaGFzZS1Mb2NrZWQgTG9vcCAoUExMKSBmcmVxdWVuY3kgc3ludGhlc2l6ZXJz
CiMKIyBDT05GSUdfQURGNDM1MCBpcyBub3Qgc2V0CgojCiMgRGlnaXRhbCBneXJvc2NvcGUg
c2Vuc29ycwojCiMgQ09ORklHX0FESVMxNjA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMx
NjEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWFJTNDUwIGlzIG5vdCBzZXQKQ09O
RklHX0JNRzE2MD1tCkNPTkZJR19ISURfU0VOU09SX0dZUk9fM0Q9bQojIENPTkZJR19JSU9f
U1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAgaXMgbm90IHNldAoK
IwojIEh1bWlkaXR5IHNlbnNvcnMKIwojIENPTkZJR19ESFQxMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CgojCiMg
SW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKIwojIENPTkZJR19BRElTMTY0MDAgaXMgbm90
IHNldAojIENPTkZJR19BRElTMTY0ODAgaXMgbm90IHNldApDT05GSUdfS01YNjE9bQpDT05G
SUdfSU5WX01QVTYwNTBfSUlPPW0KCiMKIyBMaWdodCBzZW5zb3JzCiMKIyBDT05GSUdfQURK
RF9TMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FQRFM5MzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAyMEEwMEYgaXMgbm90IHNl
dAojIENPTkZJR19JU0wyOTEyNSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX0FMUz1t
CkNPTkZJR19ISURfU0VOU09SX1BST1g9bQpDT05GSUdfSlNBMTIxMj1tCiMgQ09ORklHX0xU
UjUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUzM0MTQgaXMgbm90IHNldAojIENPTkZJR19U
Q1MzNDcyIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfVFNMMjU2Mz1tCiMgQ09ORklHX1RT
TDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAwMCBpcyBub3Qgc2V0CgojCiMgTWFn
bmV0b21ldGVyIHNlbnNvcnMKIwpDT05GSUdfQUs4OTc1PW0KIyBDT05GSUdfQUswOTkxMSBp
cyBub3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNP
Ul9NQUdORVRPTUVURVJfM0Q9bQojIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qg
c2V0CgojCiMgSW5jbGlub21ldGVyIHNlbnNvcnMKIwpDT05GSUdfSElEX1NFTlNPUl9JTkNM
SU5PTUVURVJfM0Q9bQpDT05GSUdfSElEX1NFTlNPUl9ERVZJQ0VfUk9UQVRJT049bQoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dF
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TWVNGU19UUklHR0VSIGlzIG5vdCBzZXQKCiMK
IyBQcmVzc3VyZSBzZW5zb3JzCiMKQ09ORklHX0JNUDI4MD1tCkNPTkZJR19ISURfU0VOU09S
X1BSRVNTPW0KIyBDT05GSUdfTVBMMTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMzExNSBp
cyBub3Qgc2V0CiMgQ09ORklHX01TNTYxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9Q
UkVTUyBpcyBub3Qgc2V0CiMgQ09ORklHX1Q1NDAzIGlzIG5vdCBzZXQKCiMKIyBMaWdodG5p
bmcgc2Vuc29ycwojCiMgQ09ORklHX0FTMzkzNSBpcyBub3Qgc2V0CgojCiMgUHJveGltaXR5
IHNlbnNvcnMKIwpDT05GSUdfU1g5NTAwPW0KCiMKIyBUZW1wZXJhdHVyZSBzZW5zb3JzCiMK
IyBDT05GSUdfTUxYOTA2MTQgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNl
dAojIENPTkZJR19OVEIgaXMgbm90IHNldAojIENPTkZJR19WTUVfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUFdNIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBBQ0tfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVTRVRfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZNQyBpcyBu
b3Qgc2V0CgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09O
RklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSQ0FQPXkKQ09O
RklHX0lOVEVMX1JBUEw9bQojIENPTkZJR19NQ0IgaXMgbm90IHNldApDT05GSUdfUkFTPXkK
Q09ORklHX1RIVU5ERVJCT0xUPW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfQU5EUk9JRCBp
cyBub3Qgc2V0CgojCiMgRmlybXdhcmUgRHJpdmVycwojCkNPTkZJR19FREQ9bQojIENPTkZJ
R19FRERfT0ZGIGlzIG5vdCBzZXQKQ09ORklHX0ZJUk1XQVJFX01FTU1BUD15CkNPTkZJR19E
RUxMX1JCVT1tCkNPTkZJR19EQ0RCQVM9bQpDT05GSUdfRE1JSUQ9eQpDT05GSUdfRE1JX1NZ
U0ZTPXkKQ09ORklHX0RNSV9TQ0FOX01BQ0hJTkVfTk9OX0VGSV9GQUxMQkFDSz15CkNPTkZJ
R19JU0NTSV9JQkZUX0ZJTkQ9eQpDT05GSUdfSVNDU0lfSUJGVD1tCiMgQ09ORklHX0dPT0dM
RV9GSVJNV0FSRSBpcyBub3Qgc2V0CgojCiMgRUZJIChFeHRlbnNpYmxlIEZpcm13YXJlIElu
dGVyZmFjZSkgU3VwcG9ydAojCkNPTkZJR19FRklfVkFSUz1tCkNPTkZJR19FRklfVkFSU19Q
U1RPUkU9bQojIENPTkZJR19FRklfVkFSU19QU1RPUkVfREVGQVVMVF9ESVNBQkxFIGlzIG5v
dCBzZXQKQ09ORklHX0VGSV9SVU5USU1FX01BUD15CkNPTkZJR19FRklfUlVOVElNRV9XUkFQ
UEVSUz15CkNPTkZJR19VRUZJX0NQRVI9eQoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19E
Q0FDSEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUM19GUyBpcyBub3Qgc2V0CkNPTkZJR19FWFQ0X0ZTPW0KQ09ORklHX0VYVDRfVVNF
X0ZPUl9FWFQyMz15CkNPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CkNPTkZJR19FWFQ0X0ZT
X1NFQ1VSSVRZPXkKIyBDT05GSUdfRVhUNF9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19KQkQyPW0KIyBDT05GSUdfSkJEMl9E
RUJVRyBpcyBub3Qgc2V0CkNPTkZJR19GU19NQkNBQ0hFPW0KQ09ORklHX1JFSVNFUkZTX0ZT
PW0KIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19SRUlTRVJG
U19QUk9DX0lORk8gaXMgbm90IHNldApDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQpDT05G
SUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZ
PXkKQ09ORklHX0pGU19GUz1tCkNPTkZJR19KRlNfUE9TSVhfQUNMPXkKQ09ORklHX0pGU19T
RUNVUklUWT15CiMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0pGU19T
VEFUSVNUSUNTIGlzIG5vdCBzZXQKQ09ORklHX1hGU19GUz1tCkNPTkZJR19YRlNfUVVPVEE9
eQpDT05GSUdfWEZTX1BPU0lYX0FDTD15CkNPTkZJR19YRlNfUlQ9eQojIENPTkZJR19YRlNf
V0FSTiBpcyBub3Qgc2V0CiMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19H
RlMyX0ZTPW0KQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09eQpDT05GSUdfT0NGUzJfRlM9
bQpDT05GSUdfT0NGUzJfRlNfTzJDQj1tCkNPTkZJR19PQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xV
U1RFUj1tCkNPTkZJR19PQ0ZTMl9GU19TVEFUUz15CkNPTkZJR19PQ0ZTMl9ERUJVR19NQVNL
TE9HPXkKIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfQlRSRlNf
RlM9bQpDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIyBDT05GSUdfQlRSRlNfRlNfQ0hF
Q0tfSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRSRlNfRlNfUlVOX1NBTklUWV9U
RVNUUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUUkZTX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRSRlNfQVNTRVJUIGlzIG5vdCBzZXQKQ09ORklHX05JTEZTMl9GUz1tCkNPTkZJR19G
MkZTX0ZTPW0KQ09ORklHX0YyRlNfU1RBVF9GUz15CkNPTkZJR19GMkZTX0ZTX1hBVFRSPXkK
Q09ORklHX0YyRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0YyRlNfRlNfU0VDVVJJVFk9eQoj
IENPTkZJR19GMkZTX0NIRUNLX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRjJGU19JT19UUkFD
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19GU19QT1NJ
WF9BQ0w9eQpDT05GSUdfRVhQT1JURlM9eQpDT05GSUdfRklMRV9MT0NLSU5HPXkKQ09ORklH
X0ZTTk9USUZZPXkKQ09ORklHX0ROT1RJRlk9eQpDT05GSUdfSU5PVElGWV9VU0VSPXkKQ09O
RklHX0ZBTk9USUZZPXkKIyBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TIGlz
IG5vdCBzZXQKQ09ORklHX1FVT1RBPXkKQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNF
PXkKQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQojIENPTkZJR19RVU9UQV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19RVU9UQV9UUkVFPW0KQ09ORklHX1FGTVRfVjE9bQpDT05GSUdf
UUZNVF9WMj1tCkNPTkZJR19RVU9UQUNUTD15CkNPTkZJR19RVU9UQUNUTF9DT01QQVQ9eQpD
T05GSUdfQVVUT0ZTNF9GUz1tCkNPTkZJR19GVVNFX0ZTPW0KQ09ORklHX0NVU0U9bQpDT05G
SUdfT1ZFUkxBWV9GUz1tCgojCiMgQ2FjaGVzCiMKQ09ORklHX0ZTQ0FDSEU9bQpDT05GSUdf
RlNDQUNIRV9TVEFUUz15CiMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTQ0FDSEVfT0JK
RUNUX0xJU1QgaXMgbm90IHNldApDT05GSUdfQ0FDSEVGSUxFUz1tCiMgQ09ORklHX0NBQ0hF
RklMRVNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBp
cyBub3Qgc2V0CgojCiMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYw
X0ZTPW0KQ09ORklHX0pPTElFVD15CkNPTkZJR19aSVNPRlM9eQpDT05GSUdfVURGX0ZTPW0K
Q09ORklHX1VERl9OTFM9eQoKIwojIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKIwpDT05GSUdf
RkFUX0ZTPW0KQ09ORklHX01TRE9TX0ZTPW0KQ09ORklHX1ZGQVRfRlM9bQpDT05GSUdfRkFU
X0RFRkFVTFRfQ09ERVBBR0U9NDM3CkNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9InV0
ZjgiCkNPTkZJR19OVEZTX0ZTPW0KIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19OVEZTX1JXPXkKCiMKIyBQc2V1ZG8gZmlsZXN5c3RlbXMKIwpDT05GSUdfUFJPQ19G
Uz15CkNPTkZJR19QUk9DX0tDT1JFPXkKQ09ORklHX1BST0NfVk1DT1JFPXkKQ09ORklHX1BS
T0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKQ09ORklHX0tFUk5GUz15
CkNPTkZJR19TWVNGUz15CkNPTkZJR19UTVBGUz15CkNPTkZJR19UTVBGU19QT1NJWF9BQ0w9
eQpDT05GSUdfVE1QRlNfWEFUVFI9eQpDT05GSUdfSFVHRVRMQkZTPXkKQ09ORklHX0hVR0VU
TEJfUEFHRT15CkNPTkZJR19DT05GSUdGU19GUz1tCkNPTkZJR19FRklWQVJfRlM9bQpDT05G
SUdfTUlTQ19GSUxFU1lTVEVNUz15CkNPTkZJR19BREZTX0ZTPW0KIyBDT05GSUdfQURGU19G
U19SVyBpcyBub3Qgc2V0CkNPTkZJR19BRkZTX0ZTPW0KQ09ORklHX0VDUllQVF9GUz1tCkNP
TkZJR19FQ1JZUFRfRlNfTUVTU0FHSU5HPXkKQ09ORklHX0hGU19GUz1tCkNPTkZJR19IRlNQ
TFVTX0ZTPW0KIyBDT05GSUdfSEZTUExVU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApDT05G
SUdfQkVGU19GUz1tCiMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfQkZT
X0ZTPW0KQ09ORklHX0VGU19GUz1tCkNPTkZJR19KRkZTMl9GUz1tCkNPTkZJR19KRkZTMl9G
U19ERUJVRz0wCkNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiMgQ09ORklHX0pGRlMy
X0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKQ09ORklHX0pGRlMyX1NVTU1BUlk9eQpDT05G
SUdfSkZGUzJfRlNfWEFUVFI9eQpDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKQ09ORklH
X0pGRlMyX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9
eQpDT05GSUdfSkZGUzJfWkxJQj15CkNPTkZJR19KRkZTMl9MWk89eQpDT05GSUdfSkZGUzJf
UlRJTUU9eQojIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiMgQ09ORklHX0pGRlMy
X0NNT0RFX05PTkUgaXMgbm90IHNldApDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQoj
IENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKIyBDT05GSUdfSkZGUzJfQ01P
REVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKQ09ORklHX1VCSUZTX0ZTPW0KQ09ORklHX1VCSUZT
X0ZTX0FEVkFOQ0VEX0NPTVBSPXkKQ09ORklHX1VCSUZTX0ZTX0xaTz15CkNPTkZJR19VQklG
U19GU19aTElCPXkKQ09ORklHX0xPR0ZTPW0KQ09ORklHX0NSQU1GUz1tCkNPTkZJR19TUVVB
U0hGUz1tCkNPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFPXkKIyBDT05GSUdfU1FVQVNIRlNf
RklMRV9ESVJFQ1QgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRT15
CiMgQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNf
WEFUVFI9eQpDT05GSUdfU1FVQVNIRlNfWkxJQj15CiMgQ09ORklHX1NRVUFTSEZTX0xaNCBp
cyBub3Qgc2V0CkNPTkZJR19TUVVBU0hGU19MWk89eQpDT05GSUdfU1FVQVNIRlNfWFo9eQoj
IENPTkZJR19TUVVBU0hGU180S19ERVZCTEtfU0laRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NB
Q0hFX1NJWkU9MwpDT05GSUdfVlhGU19GUz1tCkNPTkZJR19NSU5JWF9GUz1tCkNPTkZJR19P
TUZTX0ZTPW0KIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkNPTkZJR19RTlg0RlNfRlM9
bQpDT05GSUdfUU5YNkZTX0ZTPW0KIyBDT05GSUdfUU5YNkZTX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX1JPTUZTX0ZTPW0KIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLIGlzIG5v
dCBzZXQKIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CkNPTkZJR19S
T01GU19CQUNLRURfQllfQk9USD15CkNPTkZJR19ST01GU19PTl9CTE9DSz15CkNPTkZJR19S
T01GU19PTl9NVEQ9eQpDT05GSUdfUFNUT1JFPXkKIyBDT05GSUdfUFNUT1JFX0NPTlNPTEUg
aXMgbm90IHNldAojIENPTkZJR19QU1RPUkVfUE1TRyBpcyBub3Qgc2V0CiMgQ09ORklHX1BT
VE9SRV9GVFJBQ0UgaXMgbm90IHNldApDT05GSUdfUFNUT1JFX1JBTT1tCkNPTkZJR19TWVNW
X0ZTPW0KQ09ORklHX1VGU19GUz1tCiMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19FWE9GU19GUz1tCiMgQ09O
RklHX0VYT0ZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX09SRT1tCkNPTkZJR19ORVRXT1JL
X0ZJTEVTWVNURU1TPXkKQ09ORklHX05GU19GUz1tCkNPTkZJR19ORlNfVjI9bQpDT05GSUdf
TkZTX1YzPW0KQ09ORklHX05GU19WM19BQ0w9eQpDT05GSUdfTkZTX1Y0PW0KQ09ORklHX05G
U19TV0FQPXkKQ09ORklHX05GU19WNF8xPXkKQ09ORklHX05GU19WNF8yPXkKQ09ORklHX1BO
RlNfRklMRV9MQVlPVVQ9bQpDT05GSUdfUE5GU19CTE9DSz1tCkNPTkZJR19QTkZTX09CSkxB
WU9VVD1tCkNPTkZJR19QTkZTX0ZMRVhGSUxFX0xBWU9VVD1tCkNPTkZJR19ORlNfVjRfMV9J
TVBMRU1FTlRBVElPTl9JRF9ET01BSU49Imtlcm5lbC5vcmciCiMgQ09ORklHX05GU19WNF8x
X01JR1JBVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORlNfVjRfU0VDVVJJVFlfTEFCRUw9eQpD
T05GSUdfTkZTX0ZTQ0FDSEU9eQojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90
IHNldApDT05GSUdfTkZTX1VTRV9LRVJORUxfRE5TPXkKQ09ORklHX05GU19ERUJVRz15CkNP
TkZJR19ORlNEPW0KQ09ORklHX05GU0RfVjJfQUNMPXkKQ09ORklHX05GU0RfVjM9eQpDT05G
SUdfTkZTRF9WM19BQ0w9eQpDT05GSUdfTkZTRF9WND15CiMgQ09ORklHX05GU0RfUE5GUyBp
cyBub3Qgc2V0CkNPTkZJR19ORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMPXkKIyBDT05GSUdfTkZT
RF9GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfR1JBQ0VfUEVSSU9EPW0KQ09O
RklHX0xPQ0tEPW0KQ09ORklHX0xPQ0tEX1Y0PXkKQ09ORklHX05GU19BQ0xfU1VQUE9SVD1t
CkNPTkZJR19ORlNfQ09NTU9OPXkKQ09ORklHX1NVTlJQQz1tCkNPTkZJR19TVU5SUENfR1NT
PW0KQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTD15CkNPTkZJR19TVU5SUENfU1dBUD15CkNP
TkZJR19SUENTRUNfR1NTX0tSQjU9bQpDT05GSUdfU1VOUlBDX0RFQlVHPXkKQ09ORklHX1NV
TlJQQ19YUFJUX1JETUFfQ0xJRU5UPW0KQ09ORklHX1NVTlJQQ19YUFJUX1JETUFfU0VSVkVS
PW0KQ09ORklHX0NFUEhfRlM9bQpDT05GSUdfQ0VQSF9GU0NBQ0hFPXkKQ09ORklHX0NFUEhf
RlNfUE9TSVhfQUNMPXkKQ09ORklHX0NJRlM9bQojIENPTkZJR19DSUZTX1NUQVRTIGlzIG5v
dCBzZXQKQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKQ09ORklHX0NJRlNfVVBDQUxMPXkK
Q09ORklHX0NJRlNfWEFUVFI9eQpDT05GSUdfQ0lGU19QT1NJWD15CkNPTkZJR19DSUZTX0FD
TD15CkNPTkZJR19DSUZTX0RFQlVHPXkKIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNl
dApDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKQ09ORklHX0NJRlNfU01CMj15CkNPTkZJR19D
SUZTX0ZTQ0FDSEU9eQpDT05GSUdfTkNQX0ZTPW0KQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdO
SU5HPXkKQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQpDT05GSUdfTkNQRlNfU1RST05H
PXkKQ09ORklHX05DUEZTX05GU19OUz15CkNPTkZJR19OQ1BGU19PUzJfTlM9eQojIENPTkZJ
R19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CkNPTkZJR19OQ1BGU19OTFM9eQpDT05GSUdf
TkNQRlNfRVhUUkFTPXkKQ09ORklHX0NPREFfRlM9bQpDT05GSUdfQUZTX0ZTPW0KIyBDT05G
SUdfQUZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FGU19GU0NBQ0hFPXkKQ09ORklHXzlQ
X0ZTPW0KQ09ORklHXzlQX0ZTQ0FDSEU9eQpDT05GSUdfOVBfRlNfUE9TSVhfQUNMPXkKQ09O
RklHXzlQX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0i
dXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzcz
Nz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQ09ORklHX05MU19DT0RFUEFHRV84NTA9
bQpDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0K
Q09ORklHX05MU19DT0RFUEFHRV84NTc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCkNP
TkZJR19OTFNfQ09ERVBBR0VfODYxPW0KQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQpDT05G
SUdfTkxTX0NPREVQQUdFXzg2Mz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KQ09ORklH
X05MU19DT0RFUEFHRV84NjU9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCkNPTkZJR19O
TFNfQ09ERVBBR0VfODY5PW0KQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQpDT05GSUdfTkxT
X0NPREVQQUdFXzk1MD1tCkNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KQ09ORklHX05MU19D
T0RFUEFHRV85NDk9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCkNPTkZJR19OTFNfSVNP
ODg1OV84PW0KQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KQ09ORklHX05MU19DT0RFUEFH
RV8xMjUxPW0KQ09ORklHX05MU19BU0NJST1tCkNPTkZJR19OTFNfSVNPODg1OV8xPW0KQ09O
RklHX05MU19JU084ODU5XzI9bQpDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkNPTkZJR19OTFNf
SVNPODg1OV80PW0KQ09ORklHX05MU19JU084ODU5XzU9bQpDT05GSUdfTkxTX0lTTzg4NTlf
Nj1tCkNPTkZJR19OTFNfSVNPODg1OV83PW0KQ09ORklHX05MU19JU084ODU5Xzk9bQpDT05G
SUdfTkxTX0lTTzg4NTlfMTM9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQpDT05GSUdfTkxT
X0lTTzg4NTlfMTU9bQpDT05GSUdfTkxTX0tPSThfUj1tCkNPTkZJR19OTFNfS09JOF9VPW0K
Q09ORklHX05MU19NQUNfUk9NQU49bQpDT05GSUdfTkxTX01BQ19DRUxUSUM9bQpDT05GSUdf
TkxTX01BQ19DRU5URVVSTz1tCkNPTkZJR19OTFNfTUFDX0NST0FUSUFOPW0KQ09ORklHX05M
U19NQUNfQ1lSSUxMSUM9bQpDT05GSUdfTkxTX01BQ19HQUVMSUM9bQpDT05GSUdfTkxTX01B
Q19HUkVFSz1tCkNPTkZJR19OTFNfTUFDX0lDRUxBTkQ9bQpDT05GSUdfTkxTX01BQ19JTlVJ
VD1tCkNPTkZJR19OTFNfTUFDX1JPTUFOSUFOPW0KQ09ORklHX05MU19NQUNfVFVSS0lTSD1t
CkNPTkZJR19OTFNfVVRGOD1tCkNPTkZJR19ETE09bQpDT05GSUdfRExNX0RFQlVHPXkKCiMK
IyBLZXJuZWwgaGFja2luZwojCkNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKCiMK
IyBwcmludGsgYW5kIGRtZXNnIG9wdGlvbnMKIwpDT05GSUdfUFJJTlRLX1RJTUU9eQpDT05G
SUdfTUVTU0FHRV9MT0dMRVZFTF9ERUZBVUxUPTQKQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZ
PXkKQ09ORklHX0RZTkFNSUNfREVCVUc9eQoKIwojIENvbXBpbGUtdGltZSBjaGVja3MgYW5k
IGNvbXBpbGVyIG9wdGlvbnMKIwpDT05GSUdfREVCVUdfSU5GTz15CiMgQ09ORklHX0RFQlVH
X0lORk9fUkVEVUNFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMg
bm90IHNldAojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNCBpcyBub3Qgc2V0CiMgQ09ORklH
X0dEQl9TQ1JJUFRTIGlzIG5vdCBzZXQKQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9
eQpDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQpDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CkNP
TkZJR19TVFJJUF9BU01fU1lNUz15CiMgQ09ORklHX1JFQURBQkxFX0FTTSBpcyBub3Qgc2V0
CkNPTkZJR19VTlVTRURfU1lNQk9MUz15CiMgQ09ORklHX1BBR0VfT1dORVIgaXMgbm90IHNl
dApDT05GSUdfREVCVUdfRlM9eQojIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1dBTlRfRlJBTUVfUE9JTlRFUlM9eQojIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKQ09ORklH
X01BR0lDX1NZU1JRPXkKQ09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFPTB4MDFi
NgpDT05GSUdfREVCVUdfS0VSTkVMPXkKCiMKIyBNZW1vcnkgRGVidWdnaW5nCiMKIyBDT05G
SUdfUEFHRV9FWFRFTlNJT04gaXMgbm90IHNldAojIENPTkZJR19ERUJVR19QQUdFQUxMT0Mg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfU0xBQiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVHX0tNRU1MRUFLPXkKIyBD
T05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TVEFDS19V
U0FHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiMg
Q09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVH
X1NUQUNLT1ZFUkZMT1c9eQojIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBz
ZXQKQ09ORklHX0hBVkVfQVJDSF9LTUVNQ0hFQ0s9eQpDT05GSUdfSEFWRV9BUkNIX0tBU0FO
PXkKQ09ORklHX0tBU0FOX1NIQURPV19PRkZTRVQ9MHhkZmZmZmMwMDAwMDAwMDAwCiMgQ09O
RklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKCiMKIyBEZWJ1ZyBMb2NrdXBzIGFuZCBIYW5n
cwojCkNPTkZJR19MT0NLVVBfREVURUNUT1I9eQpDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RP
Uj15CiMgQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKQ09O
RklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVFPTAKIyBDT05GSUdfQk9PVFBB
UkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldApDT05GSUdfQk9PVFBBUkFNX1NPRlRM
T0NLVVBfUEFOSUNfVkFMVUU9MApDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CkNPTkZJR19E
RUZBVUxUX0hVTkdfVEFTS19USU1FT1VUPTEyMAojIENPTkZJR19CT09UUEFSQU1fSFVOR19U
QVNLX1BBTklDIGlzIG5vdCBzZXQKQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNf
VkFMVUU9MAojIENPTkZJR19QQU5JQ19PTl9PT1BTIGlzIG5vdCBzZXQKQ09ORklHX1BBTklD
X09OX09PUFNfVkFMVUU9MApDT05GSUdfUEFOSUNfVElNRU9VVD0wCkNPTkZJR19TQ0hFRF9E
RUJVRz15CiMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAojIENPTkZJR19TQ0hFRF9T
VEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19USU1FS0VFUElORyBp
cyBub3Qgc2V0CkNPTkZJR19USU1FUl9TVEFUUz15CgojCiMgTG9jayBEZWJ1Z2dpbmcgKHNw
aW5sb2NrcywgbXV0ZXhlcywgZXRjLi4uKQojCiMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19XV19NVVRFWF9TTE9X
UEFUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAoj
IENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9DS19TVEFUIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQIGlzIG5vdCBzZXQKIyBDT05G
SUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9D
S19UT1JUVVJFX1RFU1QgaXMgbm90IHNldApDT05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklH
X0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CkNP
TkZJR19ERUJVR19MSVNUPXkKIyBDT05GSUdfREVCVUdfUElfTElTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAoKIwojIFJD
VSBEZWJ1Z2dpbmcKIwojIENPTkZJR19QUk9WRV9SQ1UgaXMgbm90IHNldAojIENPTkZJR19T
UEFSU0VfUkNVX1BPSU5URVIgaXMgbm90IHNldAojIENPTkZJR19UT1JUVVJFX1RFU1QgaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9DUFVfU1RBTExfVElNRU9VVD0yMQojIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19C
TE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiMgQ09ORklHX05PVElGSUVSX0VSUk9SX0lOSkVD
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfU1RS
SUNUX1VTRVJfQ09QWV9DSEVDS1M9eQojIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZ
X0NIRUNLUyBpcyBub3Qgc2V0CkNPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkNP
TkZJR19OT1BfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQ09ORklH
X0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JB
UEhfRlBfVEVTVD15CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQ09ORklHX0hBVkVf
RFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9S
RUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQ09ORklHX0hBVkVf
RkVOVFJZPXkKQ09ORklHX0hBVkVfQ19SRUNPUkRNQ09VTlQ9eQpDT05GSUdfVFJBQ0VSX01B
WF9UUkFDRT15CkNPTkZJR19UUkFDRV9DTE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNP
TkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNP
TkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKQ09ORklHX1RSQUNJTkc9eQpDT05GSUdf
R0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQ09ORklHX0ZUUkFD
RT15CkNPTkZJR19GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJB
Q0VSPXkKIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TQ0hF
RF9UUkFDRVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX1NZU0NBTExTPXkKQ09ORklHX1RS
QUNFUl9TTkFQU0hPVD15CiMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVAg
aXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJ
TEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJPRklMRV9BTExf
QlJBTkNIRVMgaXMgbm90IHNldApDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKQ09ORklHX0JMS19E
RVZfSU9fVFJBQ0U9eQpDT05GSUdfS1BST0JFX0VWRU5UPXkKQ09ORklHX1VQUk9CRV9FVkVO
VD15CkNPTkZJR19QUk9CRV9FVkVOVFM9eQpDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQpDT05G
SUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKIyBDT05GSUdfRlVOQ1RJT05fUFJPRklM
RVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQojIENPTkZJR19G
VFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09ORklHX01NSU9UUkFDRT15CiMgQ09O
RklHX01NSU9UUkFDRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJBQ0VQT0lOVF9CRU5D
SE1BUksgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90
IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENP
TkZJR19UUkFDRV9FTlVNX01BUF9GSUxFIGlzIG5vdCBzZXQKCiMKIyBSdW50aW1lIFRlc3Rp
bmcKIwojIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JU
IGlzIG5vdCBzZXQKIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SQlRSRUVf
VEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BFUkNQVV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlDNjRfU0VM
RlRFU1QgaXMgbm90IHNldAojIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9IRVhEVU1QIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9TVFJJTkdf
SEVMUEVSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfS1NUUlRPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfUkhBU0hUQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1BST1ZJREVfT0hD
STEzOTRfRE1BX0lOSVQgaXMgbm90IHNldAojIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfVEVTVF9MS00gaXMgbm90IHNldAojIENPTkZJR19URVNUX1VTRVJf
Q09QWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQlBGIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9GSVJNV0FSRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBz
ZXQKQ09ORklHX01FTVRFU1Q9eQojIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKQ09ORklH
X0hBVkVfQVJDSF9LR0RCPXkKIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkNPTkZJR19TVFJJ
Q1RfREVWTUVNPXkKIyBDT05GSUdfWDg2X1ZFUkJPU0VfQk9PVFVQIGlzIG5vdCBzZXQKQ09O
RklHX0VBUkxZX1BSSU5USz15CiMgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQIGlzIG5vdCBz
ZXQKQ09ORklHX0VBUkxZX1BSSU5US19FRkk9eQojIENPTkZJR19YODZfUFREVU1QIGlzIG5v
dCBzZXQKQ09ORklHX0RFQlVHX1JPREFUQT15CiMgQ09ORklHX0RFQlVHX1JPREFUQV9URVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWD15CiMgQ09ORklHX0RF
QlVHX05YX1RFU1QgaXMgbm90IHNldApDT05GSUdfRE9VQkxFRkFVTFQ9eQojIENPTkZJR19E
RUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lPTU1VX0RFQlVHIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU9NTVVfU1RSRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTU1JT1RS
QUNFX1NVUFBPUlQ9eQojIENPTkZJR19YODZfREVDT0RFUl9TRUxGVEVTVCBpcyBub3Qgc2V0
CkNPTkZJR19JT19ERUxBWV9UWVBFXzBYODA9MApDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVE
PTEKQ09ORklHX0lPX0RFTEFZX1RZUEVfVURFTEFZPTIKQ09ORklHX0lPX0RFTEFZX1RZUEVf
Tk9ORT0zCkNPTkZJR19JT19ERUxBWV8wWDgwPXkKIyBDT05GSUdfSU9fREVMQVlfMFhFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0lPX0RFTEFZX1VERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lPX0RFTEFZX05PTkUgaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBF
PTAKIyBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMgaXMgbm90IHNldAojIENPTkZJR19DUEFf
REVCVUcgaXMgbm90IHNldApDT05GSUdfT1BUSU1JWkVfSU5MSU5JTkc9eQojIENPTkZJR19E
RUJVR19OTUlfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19YODZfREVCVUdfU1RBVElD
X0NQVV9IQVMgaXMgbm90IHNldAoKIwojIFNlY3VyaXR5IG9wdGlvbnMKIwpDT05GSUdfS0VZ
Uz15CiMgQ09ORklHX1BFUlNJU1RFTlRfS0VZUklOR1MgaXMgbm90IHNldAojIENPTkZJR19C
SUdfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSVVNURURfS0VZUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0VOQ1JZUFRFRF9LRVlTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfRE1F
U0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFk9eQpDT05GSUdfU0VDVVJJ
VFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklHX1NFQ1VSSVRZX05FVFdP
UktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdfSU5URUxfVFhUIGlz
IG5vdCBzZXQKQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CkNPTkZJR19TRUNVUklU
WV9TRUxJTlVYPXkKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU0gaXMgbm90
IHNldAojIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhf
QVZDX1NUQVRTPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVF
PTEKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWT0y
MDQ4CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FVRElUX0xPRz0xMDI0CiMgQ09ORklH
X1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVIgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVI9Ii9zYmluL3RvbW95by1pbml0IgpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUj0iL3NiaW4vaW5pdCIK
Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXkKQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0JP
T1RQQVJBTV9WQUxVRT0xCkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIPXkKQ09ORklH
X1NFQ1VSSVRZX1lBTUE9eQpDT05GSUdfU0VDVVJJVFlfWUFNQV9TVEFDS0VEPXkKQ09ORklH
X0lOVEVHUklUWT15CiMgQ09ORklHX0lOVEVHUklUWV9TSUdOQVRVUkUgaXMgbm90IHNldApD
T05GSUdfSU5URUdSSVRZX0FVRElUPXkKIyBDT05GSUdfSU1BIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVZNIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAoj
IENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVGQVVMVF9TRUNVUklUWV9ZQU1BIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJ
VFlfREFDPXkKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKQ09ORklHX1hPUl9CTE9DS1M9
bQpDT05GSUdfQVNZTkNfQ09SRT1tCkNPTkZJR19BU1lOQ19NRU1DUFk9bQpDT05GSUdfQVNZ
TkNfWE9SPW0KQ09ORklHX0FTWU5DX1BRPW0KQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0K
Q09ORklHX0NSWVBUTz15CgojCiMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiMKQ09ORklHX0NS
WVBUT19BTEdBUEk9eQpDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQpDT05GSUdfQ1JZUFRPX0FF
QUQ9bQpDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQpD
T05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdf
Q1JZUFRPX0hBU0gyPXkKQ09ORklHX0NSWVBUT19STkc9bQpDT05GSUdfQ1JZUFRPX1JORzI9
eQpDT05GSUdfQ1JZUFRPX1BDT01QPW0KQ09ORklHX0NSWVBUT19QQ09NUDI9eQpDT05GSUdf
Q1JZUFRPX01BTkFHRVI9eQpDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKIyBDT05GSUdfQ1JZ
UFRPX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RF
U1RTIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCkNPTkZJR19DUllQVE9f
TlVMTD1tCkNPTkZJR19DUllQVE9fUENSWVBUPW0KQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9
eQpDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiMgQ09ORklHX0NSWVBUT19NQ1JZUFREIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KQ09ORklHX0NSWVBUT19URVNUPW0KQ09O
RklHX0NSWVBUT19BQkxLX0hFTFBFUj1tCkNPTkZJR19DUllQVE9fR0xVRV9IRUxQRVJfWDg2
PW0KCiMKIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEK
IwpDT05GSUdfQ1JZUFRPX0NDTT1tCkNPTkZJR19DUllQVE9fR0NNPW0KQ09ORklHX0NSWVBU
T19TRVFJVj1tCgojCiMgQmxvY2sgbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NCQz1tCkNPTkZJ
R19DUllQVE9fQ1RSPW0KQ09ORklHX0NSWVBUT19DVFM9bQpDT05GSUdfQ1JZUFRPX0VDQj1t
CkNPTkZJR19DUllQVE9fTFJXPW0KQ09ORklHX0NSWVBUT19QQ0JDPW0KQ09ORklHX0NSWVBU
T19YVFM9bQoKIwojIEhhc2ggbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NNQUM9bQpDT05GSUdf
Q1JZUFRPX0hNQUM9bQpDT05GSUdfQ1JZUFRPX1hDQkM9bQpDT05GSUdfQ1JZUFRPX1ZNQUM9
bQoKIwojIERpZ2VzdAojCkNPTkZJR19DUllQVE9fQ1JDMzJDPW0KQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUw9bQpDT05GSUdfQ1JZUFRPX0NSQzMyPW0KQ09ORklHX0NSWVBUT19DUkMz
Ml9QQ0xNVUw9bQpDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRj15CkNPTkZJR19DUllQVE9fQ1JD
VDEwRElGX1BDTE1VTD1tCkNPTkZJR19DUllQVE9fR0hBU0g9bQpDT05GSUdfQ1JZUFRPX01E
ND1tCkNPTkZJR19DUllQVE9fTUQ1PXkKQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCkNP
TkZJR19DUllQVE9fUk1EMTI4PW0KQ09ORklHX0NSWVBUT19STUQxNjA9bQpDT05GSUdfQ1JZ
UFRPX1JNRDI1Nj1tCkNPTkZJR19DUllQVE9fUk1EMzIwPW0KQ09ORklHX0NSWVBUT19TSEEx
PXkKQ09ORklHX0NSWVBUT19TSEExX1NTU0UzPW0KQ09ORklHX0NSWVBUT19TSEEyNTZfU1NT
RTM9bQpDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMz1tCiMgQ09ORklHX0NSWVBUT19TSEEx
X01CIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19TSEEyNTY9bQpDT05GSUdfQ1JZUFRPX1NI
QTUxMj1tCkNPTkZJR19DUllQVE9fVEdSMTkyPW0KQ09ORklHX0NSWVBUT19XUDUxMj1tCkNP
TkZJR19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUw9bQoKIwojIENpcGhlcnMKIwpDT05G
SUdfQ1JZUFRPX0FFUz15CkNPTkZJR19DUllQVE9fQUVTX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQUVTX05JX0lOVEVMPW0KQ09ORklHX0NSWVBUT19BTlVCSVM9bQpDT05GSUdfQ1JZUFRP
X0FSQzQ9bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KQ09ORklHX0NSWVBUT19CTE9XRklT
SF9DT01NT049bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQ0FNRUxMSUE9bQpDT05GSUdfQ1JZUFRPX0NBTUVMTElBX1g4Nl82ND1tCkNPTkZJR19D
UllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fQ0FNRUxM
SUFfQUVTTklfQVZYMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX0NBU1RfQ09NTU9OPW0KQ09O
RklHX0NSWVBUT19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82ND1tCkNP
TkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQ9bQpD
T05GSUdfQ1JZUFRPX0RFUz1tCiMgQ09ORklHX0NSWVBUT19ERVMzX0VERV9YODZfNjQgaXMg
bm90IHNldApDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCkNPTkZJR19DUllQVE9fS0hBWkFEPW0K
Q09ORklHX0NSWVBUT19TQUxTQTIwPW0KQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82ND1t
CkNPTkZJR19DUllQVE9fU0VFRD1tCkNPTkZJR19DUllQVE9fU0VSUEVOVD1tCkNPTkZJR19D
UllQVE9fU0VSUEVOVF9TU0UyX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fU0VSUEVOVF9BVlhf
WDg2XzY0PW0KQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0PW0KQ09ORklHX0NS
WVBUT19URUE9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJ
U0hfQ09NTU9OPW0KQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fVFdPRklTSF9YODZfNjRfM1dBWT1tCkNPTkZJR19DUllQVE9fVFdPRklTSF9BVlhfWDg2
XzY0PW0KCiMKIyBDb21wcmVzc2lvbgojCkNPTkZJR19DUllQVE9fREVGTEFURT1tCkNPTkZJ
R19DUllQVE9fWkxJQj1tCkNPTkZJR19DUllQVE9fTFpPPXkKQ09ORklHX0NSWVBUT19MWjQ9
bQpDT05GSUdfQ1JZUFRPX0xaNEhDPW0KCiMKIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24K
IwpDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQojIENPTkZJR19DUllQVE9fRFJCR19NRU5V
IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19VU0VSX0FQST1tCkNPTkZJR19DUllQVE9fVVNF
Ul9BUElfSEFTSD1tCkNPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQojIENPTkZJ
R19DUllQVE9fVVNFUl9BUElfUk5HIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19IVz15CkNP
TkZJR19DUllQVE9fREVWX1BBRExPQ0s9bQpDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FF
Uz1tCkNPTkZJR19DUllQVE9fREVWX1BBRExPQ0tfU0hBPW0KQ09ORklHX0NSWVBUT19ERVZf
Q0NQPXkKQ09ORklHX0NSWVBUT19ERVZfQ0NQX0REPW0KQ09ORklHX0NSWVBUT19ERVZfQ0NQ
X0NSWVBUTz1tCkNPTkZJR19DUllQVE9fREVWX1FBVD1tCkNPTkZJR19DUllQVE9fREVWX1FB
VF9ESDg5NXhDQz1tCiMgQ09ORklHX0FTWU1NRVRSSUNfS0VZX1RZUEUgaXMgbm90IHNldApD
T05GSUdfSEFWRV9LVk09eQpDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUD15CkNPTkZJR19IQVZF
X0tWTV9JUlFGRD15CkNPTkZJR19IQVZFX0tWTV9JUlFfUk9VVElORz15CkNPTkZJR19IQVZF
X0tWTV9FVkVOVEZEPXkKQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRT15CkNPTkZJR19L
Vk1fTU1JTz15CkNPTkZJR19LVk1fQVNZTkNfUEY9eQpDT05GSUdfSEFWRV9LVk1fTVNJPXkK
Q09ORklHX0hBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQ9eQpDT05GSUdfS1ZNX1ZGSU89
eQpDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUPXkKQ09ORklHX0tW
TV9DT01QQVQ9eQpDT05GSUdfVklSVFVBTElaQVRJT049eQpDT05GSUdfS1ZNPW0KQ09ORklH
X0tWTV9JTlRFTD1tCkNPTkZJR19LVk1fQU1EPW0KIyBDT05GSUdfS1ZNX01NVV9BVURJVCBp
cyBub3Qgc2V0CkNPTkZJR19LVk1fREVWSUNFX0FTU0lHTk1FTlQ9eQpDT05GSUdfQklOQVJZ
X1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19SQUlENl9QUT1tCkNP
TkZJR19CSVRSRVZFUlNFPXkKIyBDT05GSUdfSEFWRV9BUkNIX0JJVFJFVkVSU0UgaXMgbm90
IHNldApDT05GSUdfUkFUSU9OQUw9eQpDT05GSUdfR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNF
Uj15CkNPTkZJR19HRU5FUklDX1NUUk5MRU5fVVNFUj15CkNPTkZJR19HRU5FUklDX05FVF9V
VElMUz15CkNPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUPXkKQ09ORklHX0dFTkVSSUNf
UENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdfR0VORVJJQ19JTz15
CkNPTkZJR19QRVJDUFVfUldTRU09eQpDT05GSUdfQVJDSF9VU0VfQ01QWENIR19MT0NLUkVG
PXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUj15CkNPTkZJR19DUkNfQ0NJVFQ9
bQpDT05GSUdfQ1JDMTY9bQpDT05GSUdfQ1JDX1QxMERJRj15CkNPTkZJR19DUkNfSVRVX1Q9
bQpDT05GSUdfQ1JDMzI9eQojIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNP
TkZJR19DUkMzMl9TTElDRUJZOD15CiMgQ09ORklHX0NSQzMyX1NMSUNFQlk0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JDMzJfU0FSV0FURSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX0JJ
VCBpcyBub3Qgc2V0CkNPTkZJR19DUkM3PW0KQ09ORklHX0xJQkNSQzMyQz1tCiMgQ09ORklH
X0NSQzggaXMgbm90IHNldAojIENPTkZJR19BVURJVF9BUkNIX0NPTVBBVF9HRU5FUklDIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
WkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0NPTVBSRVNTPW0KQ09O
RklHX0xaNEhDX0NPTVBSRVNTPW0KQ09ORklHX0xaNF9ERUNPTVBSRVNTPXkKQ09ORklHX1ha
X0RFQz15CkNPTkZJR19YWl9ERUNfWDg2PXkKIyBDT05GSUdfWFpfREVDX1BPV0VSUEMgaXMg
bm90IHNldAojIENPTkZJR19YWl9ERUNfSUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1haX0RF
Q19BUk0gaXMgbm90IHNldAojIENPTkZJR19YWl9ERUNfQVJNVEhVTUIgaXMgbm90IHNldAoj
IENPTkZJR19YWl9ERUNfU1BBUkMgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15
CkNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNP
TkZJR19ERUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RF
Q09NUFJFU1NfTFo0PXkKQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKQ09ORklHX1JFRURf
U09MT01PTj1tCkNPTkZJR19SRUVEX1NPTE9NT05fRU5DOD15CkNPTkZJR19SRUVEX1NPTE9N
T05fREVDOD15CkNPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpDT05GSUdfQkNIPW0KQ09O
RklHX1RFWFRTRUFSQ0g9eQpDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQpDT05GSUdfVEVYVFNF
QVJDSF9CTT1tCkNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCkNPTkZJR19CVFJFRT15CkNPTkZJ
R19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX0FTU09DSUFUSVZFX0FSUkFZPXkKQ09ORklHX0hB
U19JT01FTT15CkNPTkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09O
RklHX0NIRUNLX1NJR05BVFVSRT15CkNPTkZJR19DUFVfUk1BUD15CkNPTkZJR19EUUw9eQpD
T05GSUdfR0xPQj15CiMgQ09ORklHX0dMT0JfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
TkxBVFRSPXkKQ09ORklHX0FSQ0hfSEFTX0FUT01JQzY0X0RFQ19JRl9QT1NJVElWRT15CkNP
TkZJR19MUlVfQ0FDSEU9bQpDT05GSUdfQVZFUkFHRT15CkNPTkZJR19DT1JESUM9bQojIENP
TkZJR19ERFIgaXMgbm90IHNldApDT05GSUdfT0lEX1JFR0lTVFJZPW0KQ09ORklHX1VDUzJf
U1RSSU5HPXkKQ09ORklHX0ZPTlRfU1VQUE9SVD15CiMgQ09ORklHX0ZPTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0ZPTlRfOHg4PXkKQ09ORklHX0ZPTlRfOHgxNj15CkNPTkZJR19BUkNIX0hB
U19TR19DSEFJTj15Cg==
--------------020508020507050502090501
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------020508020507050502090501--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 12:56:02 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 12:56:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbpmD-0003Aa-JB; Tue, 15 Sep 2015 12:56:02 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1ZbpmB-0003A4-F4
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 12:56:00 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	2B/72-22089-E5518F55; Tue, 15 Sep 2015 12:55:58 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-9.tower-206.messagelabs.com!1442321748!35245317!1
X-Originating-IP: [209.85.212.169]
X-SpamReason: No, hits=2.4 required=7.0 tests=BIZ_TLD,BODY_RANDOM_LONG,
	UPPERCASE_50_75
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14496 invoked from network); 15 Sep 2015 12:55:48 -0000
Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com)
	(209.85.212.169)
	by server-9.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 12:55:48 -0000
Received: by wicge5 with SMTP id ge5so27742891wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 05:55:48 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:cc:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=C1jyZHvKH/qQcnQJAzP6350AZ5ZMecweIW+t9slVyms=;
	b=cQ82TDgK5kU2XY0iCjfQgYjn4Vbk14GBSlOHKqJ1ZlMA7BiuA6jzI99VFRxBSdzmTa
	jauppuZA1cRZdrnOyl8zxxgsO6GNm/2igwGiLP2EIAPI1vQj+Z6gjq/zkz/gA6ZjZyiO
	UeY3JjboExYpuW46lQ7GrdlT6fDxPsD3Ty6OoHG+KDtPhp01QODtXCwW5xyt/0NLjRRM
	MQXaoLT4sPYQVt7rVSUT6QM105ZLJOE3LOb6IAVejpOEZdEoGW7MpIil/Cr85o1W9FAt
	mQsu7Yd0nohuKndUGhw8dgjIQknXadeKsVkSAOSmDFhLMDLSsomTIgyZQE18B11wIfkc
	eXaw==
X-Gm-Message-State: ALoCoQlBdGD4F6r+Bj5S4zqAtvKVPqUyFwZcv6nIpQfGY6j7t7IMs1FdOuOUQ87XOvvQI8hCnD47
X-Received: by 10.194.105.73 with SMTP id gk9mr42819681wjb.122.1442321748056; 
	Tue, 15 Sep 2015 05:55:48 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	bi6sm20996223wjc.25.2015.09.15.05.55.41
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 05:55:47 -0700 (PDT)
To: Paul Durrant <Paul.Durrant@citrix.com>,
	Stefano Stabellini <Stefano.Stabellini@citrix.com>
References: <55D3A494.6020005@invisiblethingslab.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F58C418@AMSPEX01CL01.citrite.net>
	<55D64EA3.8060000@invisiblethingslab.com> <55D6DD80.8080806@m2r.biz>
	<55D72427.5060904@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ACB75@AMSPEX01CL01.citrite.net>
	<55E6B910.4040604@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5ADC46@AMSPEX01CL01.citrite.net>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B28A4@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041715120.2672@kaball.uk.xensource.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B3A95@AMSPEX01CL01.citrite.net>
	<alpine.DEB.2.02.1509041730440.2672@kaball.uk.xensource.com>
	<CABMPFziYi2A-hhACb9gcHP5fVuU7vE-tJtmsAOghkMifLuRRDA@mail.gmail.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B5A5E@AMSPEX01CL01.citrite.net>
	<55ED67EF.20008@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B604C@AMSPEX01CL01.citrite.net>
	<55ED8A96.5060806@m2r.biz>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5B64D3@AMSPEX01CL01.citrite.net>
	<55F1956B.4070201@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F8154F.3000109@m2r.biz>
Date: Tue, 15 Sep 2015 14:55:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F1956B.4070201@m2r.biz>
Content-Type: multipart/mixed; boundary="------------020508020507050502090501"
Cc: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
	xen-devel <xen-devel@lists.xensource.com>,
	=?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
Subject: [win-pv-devel] BUG: unable to handle kernel paging request - dom0
 with kernel 4.1.6 and xen 4.6.0-rc3
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------020508020507050502090501
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 26606
Content-Transfer-Encoding: quoted-printable

Il 10/09/2015 16:36, Fabio Fantoni ha scritto:
> Il 07/09/2015 16:41, Paul Durrant ha scritto:
>>> -----Original Message-----
>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>> Sent: 07 September 2015 14:01
>>> To: Paul Durrant; Stefano Stabellini
>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>
>>> Il 07/09/2015 13:57, Paul Durrant ha scritto:
>>>>> -----Original Message-----
>>>>> From: Fabio Fantoni [mailto:fabio.fantoni@m2r.biz]
>>>>> Sent: 07 September 2015 11:33
>>>>> To: Paul Durrant; Stefano Stabellini
>>>>> Cc: Rafa=C5=82 Wojdy=C5=82a; win-pv-devel@lists.xenproject.org
>>>>> Subject: Re: [win-pv-devel] Problems with xenvbd
>>>>>
>>>>> Il 07/09/2015 11:26, Paul Durrant ha scritto:
>>>>>> Fabio,
>>>>>>
>>>>>>      Can you confirm that you don't see any problem if you use 
>>>>>> standard
>>> IDE
>>>>> emulated disks=3F I certainly don't.
>>>>>>      Paul
>>>>> WIth ide instead ahci was with same results but about udev problem 
>>>>> now
>>>>> seems I found the cause, seems the dom0 kernel.
>>>>> With kernel 3.2.0-4-amd64 version 3.2.68-1+deb7u3 (from wheezy
>>>>> repository) don't works without udev file, with 3.16.0-0.bpo.4-amd64
>>>>> version 3.16.7-ckt11-1+deb8u3~bpo70+1 works.
>>>>> Initially new pv drivers was with network not working with kernel 
>>>>> <3.14
>>>>> but after seems was solved (I don't know the exactly commit) but 
>>>>> seems
>>>>> that xen without udev file a newer kernel is still needed.
>>>>> With 3.16 kernel I had other problems instead, for example with
>>>>> balloning (even if should not be used).
>>>>> With second test with kernel 3.16 I tried to remove a workaround of
>>>>> balloning problem (dom0_mem=3D2G,max:3G in grub.cfg instead
>>>>> dom0_mem=3D2G,max:2G), I nomore saw kern.log spam but W7 domU
>>>>> crashed at boot.
>>>>> Another strange things is even if with trace enabled don't show pv
>>>>> drivers debug lines with 3.16 kernel (on older tests with 3.16 did 
>>>>> if I
>>>>> remember good)
>>>>> In attachment the windows minidump.
>>>> That yielded:
>>>>
>>>> 0: kd> !analyze -v
>>>>
>>> **********************************************************
>>> *********************
>>>> * *
>>>> *                        Bugcheck 
>>>> Analysis                                    *
>>>> * *
>>>>
>>> **********************************************************
>>> *********************
>>>> SYSTEM_SERVICE_EXCEPTION (3b)
>>>> An exception happened while executing a system service routine.
>>>> Arguments:
>>>> Arg1: 00000000c0000005, Exception code that caused the bugcheck
>>>> Arg2: fffff80002a8a7c5, Address of the instruction which caused the
>>> bugcheck
>>>> Arg3: fffff88001e86c00, Address of the context record for the 
>>>> exception
>>> that caused the bugcheck
>>>> Arg4: 0000000000000000, zero.
>>>>
>>>> Debugging Details:
>>>> ------------------
>>>>
>>>>
>>>> EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%08lx
>>> referenced memory at 0x%08lx. The memory could not be %s.
>>>> FAULTING_IP:
>>>> nt!ExpInterlockedPopEntrySListFault16+0
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>>
>>>> CONTEXT:  fffff88001e86c00 -- (.cxr 0xfffff88001e86c00;r)
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Last set context:
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Resetting default scope
>>>>
>>>> CUSTOMER_CRASH_COUNT:  1
>>>>
>>>> DEFAULT_BUCKET_ID:  WIN7_DRIVER_FAULT
>>>>
>>>> BUGCHECK_STR:  0x3B
>>>>
>>>> PROCESS_NAME:  lsass.exe
>>>>
>>>> CURRENT_IRQL:  0
>>>>
>>>> ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) x86fre
>>>>
>>>> LAST_CONTROL_TRANSFER:  from 0000000000000000 to fffff80002a8a7c5
>>>>
>>>> STACK_TEXT:
>>>> fffff880`01e875e0 00000000`00000000 : 00000000`00000000
>>> 00000000`00000000 00000000`00000000 00000000`00000000 :
>>> nt!ExpInterlockedPopEntrySListFault16
>>>>
>>>> FOLLOWUP_IP:
>>>> nt!ExpInterlockedPopEntrySListFault16+0
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>>>
>>>> SYMBOL_STACK_INDEX:  0
>>>>
>>>> SYMBOL_NAME:  nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> FOLLOWUP_NAME:  MachineOwner
>>>>
>>>> MODULE_NAME: nt
>>>>
>>>> IMAGE_NAME:  ntkrnlmp.exe
>>>>
>>>> DEBUG_FLR_IMAGE_TIMESTAMP:  556356e8
>>>>
>>>> IMAGE_VERSION:  6.1.7601.18869
>>>>
>>>> STACK_COMMAND:  .cxr 0xfffff88001e86c00 ; kb
>>>>
>>>> FAILURE_BUCKET_ID: X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> BUCKET_ID:  X64_0x3B_nt!ExpInterlockedPopEntrySListFault16+0
>>>>
>>>> ANALYSIS_SOURCE:  KM
>>>>
>>>> FAILURE_ID_HASH_STRING:
>>> km:x64_0x3b_nt!expinterlockedpopentryslistfault16+0
>>>> FAILURE_ID_HASH: {b390bf2a-9c11-079f-34b0-5dffcabffe4b}
>>>>
>>>> Followup: MachineOwner
>>>> ---------
>>>>
>>>> 0: kd> .cxr 0xfffff88001e86c00;r
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> Last set context:
>>>> rax=3D0000000026f60003 rbx=3D0000000000000001 rcx=3Dfffff80002c1fc00
>>>> rdx=3D6c8b4830245c8b41 rsi=3Dfffff80002ccf8d0 rdi=3D0000000000000000
>>>> rip=3Dfffff80002a8a7c5 rsp=3Dfffff88001e875e0 rbp=3Dfffff88001e87640
>>>>    r8=3D6c8b4830245c8b40  r9=3Dfffff80002a1e000 r10=3Dfffff80002c1fc00
>>>> r11=3D0000000000000001 r12=3Dfffff88000967000 r13=3D0000000000000020
>>>> r14=3D0000000000000000 r15=3D0000000000001000
>>>> iopl=3D0         nv up ei pl nz na pe nc
>>>> cs=3D0010  ss=3D0018  ds=3D002b  es=3D002b  fs=3D0053 gs=3D002b             
>>>> efl=3D00010202
>>>> nt!ExpInterlockedPopEntrySListFault16:
>>>> fffff800`02a8a7c5 498b08          mov     rcx,qword ptr [r8]
>>> ds:002b:6c8b4830`245c8b40=3D=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F=3F
>>>> That's pretty strange. I'd say something is probably corrupt.
>>> The corruption I saw for sure about disks are using btrfs as dom0 fs 
>>> (in
>>> rare cases) and with qcow2 overlay.
>>> These tests are instead with ext4 and raw domUs disk.
>>> About others corruptions (not only disks) I don't know.
>> I'm just using a single layer qcow2.
>>
>>>>> I'm going crazy with these too many problems and haven't time to 
>>>>> do all
>>>>> useful tests :(
>>>> Too many moving parts I'd say. I've been running with a 4.2-rc dom0
>>> kernel, a Xen from about 3 weeks ago and upstream qemu from Xen's
>>> upstream tag (again from about 3 weeks ago) and I'm not seeing any
>>> problems. I do have a fairly standard config though; ide disks and 
>>> std-vga
>>> graphics.
>>>>     Paul
>>> About dom0 kernel, are you using build from a package o custom build=3F
>>> Can be useful for me try kernel 4.2 instead=3F
>>>
>> I'm building my own. I'm on a wheezy base but 3.2 is much too old a 
>> kernel for me.
>>
>>    Paul
>

Added xen-devel on cc and changed title.

> I tried with kernel 4.1.6 on dom0 built with make-kpkg with config 
> from Sid (that use same version) except 2 small changes (in 
> attachment), xen updated based on 4.6.0-rc3.
> I did some tests and domUs with new pv drivers seems ok also without 
> udev file (seems related to old dom0 kernels with new win pv drivers).
> I also tried a qcow2 overlay for some hours without saw errors or leak 
> on check (I'll keep tested further).
> Persist the very strange thing of qemu's xen trace not working even if 
> built with debug and domU's setting is the same.
> I tried also to remove the new pv driver from a W10 domU (for install 
> the new one), I removed them from control panel and I rebooted windows 
> but on reboot it hang on windows start.
> Nothing useful on qemu log, I did a xl destroy completed successfull 
> but it didn't kill qemu.
> The domU's xl cfg in attachment.
>> cat /etc/xen/qemu-trace-options
>> xen_platform_log
>
>
>> xl list
>> Name                                        ID   Mem VCPUs State   
>> Time(s)
>> Domain-0                                     0  2048     8 r-----     
>> 799.0
>> (null)                                       5   196     2 
>> --p--d       4.8
>
> In syslog I found this:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639088] BUG: unable to 
>> handle kernel paging request at ffff8800159b56c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639133] IP: 
>> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639169] PGD 1810067 PUD 
>> 1811067 PMD 7fe68067 PTE 80100000159b5065
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639210] Oops: 0003 [#1] SMP
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639229] Modules linked in: 
>> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
>> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev 
>> xen_evtchn xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad 
>> ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 
>> nfsd auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc 
>> bridge stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
>> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
>> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
>> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button 
>> processor wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 
>> dm_mod sd_mod sg sr_mod cdrom hid_generic ata_generic usbhid hid 
>> crc32c_intel ata_piix libata ehci_pci ehci_hcd bnx2 usbcore 
>> usb_common mpt2sas raid_class scsi_transport_sas scsi_mod
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639686] CPU: 2 PID: 5782 
>> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639721] Hardware name: Dell 
>> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639755] task: 
>> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639787] RIP: 
>> e030:[<ffffffff81069b7b>]  [<ffffffff81069b7b>] 
>> ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639830] RSP: 
>> e02b:ffff88001d52fb08  EFLAGS: 00010202
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639855] RAX: 
>> 0000000002020202 RBX: 0000000000000001 RCX: 8000000318bf2b67
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639887] RDX: 
>> ffff8800159b56c0 RSI: 00007ffab42d8000 RDI: ffff8800040232f8
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639918] RBP: 
>> ffffea0000566d70 R08: 0000000000000001 R09: 8000000318bf2b01
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639950] R10: 
>> 0000000000007ff0 R11: ffff8800000006c0 R12: ffff88003260cd08
>> Sep 10 15:53:27 testVS01OU kernel: [11777.639982] R13: 
>> ffff8800040232f8 R14: ffff8800703f7480 R15: 0000000000000015
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640021] FS: 
>> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640058] CS:  e033 DS: 0000 
>> ES: 0000 CR0: 000000008005003b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640084] CR2: 
>> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640113] Stack:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640120] 00007ffab42d8000 
>> ffffffff811927fd ffff880072dae350 ffff88007c88a2f0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640145] ffff88001d530000 
>> ffff8800703f74e8 fffffffeffffffff ffff8800703f7500
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640169] 8000000318bf2327 
>> ffff8800159b56c0 ffffffff815910cf ffff880072dae350
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640193] Call Trace:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640207] 
>> [<ffffffff811927fd>] =3F handle_mm_fault+0x28d/0x1700
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640226] 
>> [<ffffffff815910cf>] =3F schedule+0x2f/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640245] 
>> [<ffffffff812f8e24>] =3F call_rwsem_down_read_failed+0x14/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640266] 
>> [<ffffffff81064499>] =3F __do_page_fault+0x1b9/0x510
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640285] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640302] 
>> [<ffffffff812fe903>] =3F copy_page_to_iter+0x83/0x320
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640321] 
>> [<ffffffff81166e20>] =3F generic_file_read_iter+0x2c0/0x5c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640341] 
>> [<ffffffff8159491c>] =3F _raw_spin_lock_irq+0xc/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640360] 
>> [<ffffffff81212835>] =3F fsnotify+0x335/0x4b0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640378] 
>> [<ffffffff811d302f>] =3F __vfs_read+0xaf/0xe0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640395] 
>> [<ffffffff811d43ed>] =3F vfs_read+0x8d/0x150
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640411] 
>> [<ffffffff811d46ab>] =3F SyS_pread64+0x9b/0xb0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640428] 
>> [<ffffffff81594eb2>] =3F system_call_fastpath+0x16/0x75
>> Sep 10 15:53:27 testVS01OU kernel: [11777.640446] Code: c4 18 e9 99 
>> 30 10 00 66 0f 1f 84 00 00 00 00 00 66 66 66 66 90 53 48 3b 0a 41 0f 
>> 95 c1 45 85 c0 41 0f b6 d9 74 13 45 84 c9 74 0e <48> 89 0a 48 8b 7f 
>> 40 66 66 66 90 66 66 90 89 d8 5b c3 0f 1f 00
>> Sep 10 15:53:27 testVS01OU kernel: [11777.641970] RIP 
>> [<ffffffff81069b7b>] ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.642711]  RSP 
>> <ffff88001d52fb08>
>> Sep 10 15:53:27 testVS01OU kernel: [11777.643450] CR2: ffff8800159b56c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.647305] ------------[ cut 
>> here ]------------
>> Sep 10 15:53:27 testVS01OU kernel: [11777.648042] kernel BUG at 
>> arch/x86/mm/pageattr.c:214!
>> Sep 10 15:53:27 testVS01OU kernel: [11777.648764] invalid opcode: 
>> 0000 [#2] SMP
>> Sep 10 15:53:27 testVS01OU kernel: [11777.649483] Modules linked in: 
>> xt_physdev br_netfilter iptable_filter ip_tables x_tables tun 
>> xen_pciback xen_netback xen_blkback xen_gntalloc xen_gntdev 
>> xen_evtchn xenfs xen_privcmd ib_iser rdma_cm iw_cm ib_cm ib_sa ib_mad 
>> ib_core ib_addr iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi 
>> nfsd auth_rpcgss oid_registry nfs_acl nfs lockd grace fscache sunrpc 
>> bridge stp llc loop mgag200 ttm drm_kms_helper drm iTCO_wdt 
>> iTCO_vendor_support i7core_edac lpc_ich snd_pcm snd_timer snd dcdbas 
>> mfd_core edac_core i2c_algo_bit joydev ipmi_si tpm_tis soundcore 
>> ipmi_msghandler tpm coretemp pcspkr evdev 8250_fintek button 
>> processor wmi acpi_power_meter thermal_sys ext4 crc16 mbcache jbd2 
>> dm_mod sd_mod sg sr_mod cdrom hid_generic ata_generic usbhid hid 
>> crc32c_intel ata_piix libata ehci_pci ehci_hcd bnx2 usbcore 
>> usb_common mpt2sas raid_class scsi_transport_sas scsi_mod
>> Sep 10 15:53:27 testVS01OU kernel: [11777.654889] CPU: 2 PID: 5782 
>> Comm: qemu-system-i38 Not tainted 4.1.6-0m2r-amd64 #3
>> Sep 10 15:53:27 testVS01OU kernel: [11777.655624] Hardware name: Dell 
>> Inc. PowerEdge T310/02P9X9, BIOS 1.12.0 09/06/2013
>> Sep 10 15:53:27 testVS01OU kernel: [11777.656353] task: 
>> ffff880072dae350 ti: ffff88001d52c000 task.ti: ffff88001d52c000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.657082] RIP: 
>> e030:[<ffffffff8106749c>]  [<ffffffff8106749c>] 
>> change_page_attr_set_clr+0x44c/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.657824] RSP: 
>> e02b:ffff88001d52e9d8  EFLAGS: 00010046
>> Sep 10 15:53:27 testVS01OU kernel: [11777.658552] RAX: 
>> 201008001fc900f5 RBX: 0000000000000000 RCX: 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.659280] RDX: 
>> 0000000000000000 RSI: 0000000000000000 RDI: ffff88001d52ea08
>> Sep 10 15:53:27 testVS01OU kernel: [11777.660004] RBP: 
>> 0000000000000000 R08: 0000000000000001 R09: ffff880000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.660724] R10: 
>> 00000000deadbeef R11: 0000000000000000 R12: 0000000000000200
>> Sep 10 15:53:27 testVS01OU kernel: [11777.661437] R13: 
>> 0000000000000001 R14: 0000000000000000 R15: 0000000000000005
>> Sep 10 15:53:27 testVS01OU kernel: [11777.662148] FS: 
>> 00007ffabdff1700(0000) GS:ffff88007c880000(0000) knlGS:0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.662863] CS:  e033 DS: 0000 
>> ES: 0000 CR0: 000000008005003b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.663570] CR2: 
>> ffff8800159b56c0 CR3: 00000000327fc000 CR4: 0000000000002660
>> Sep 10 15:53:27 testVS01OU kernel: [11777.664280] Stack:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.665004] 0000000000000004 
>> ffff880000000000 0000000000000000 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.665722] 0000001000000040 
>> 0000000000000001 0000000000000000 0000000000000000
>> Sep 10 15:53:27 testVS01OU kernel: [11777.666428] 0000000000000010 
>> 0000000000000000 0000000500000001 000000000002348b
>> Sep 10 15:53:27 testVS01OU kernel: [11777.667143] Call Trace:
>> Sep 10 15:53:27 testVS01OU kernel: [11777.667834] 
>> [<ffffffff8106760f>] =3F _set_pages_array+0xdf/0x130
>> Sep 10 15:53:27 testVS01OU kernel: [11777.668534] 
>> [<ffffffffa036ef9e>] =3F ttm_set_pages_caching+0x4e/0x80 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.669237] 
>> [<ffffffffa036f0d0>] =3F ttm_alloc_new_pages.isra.5+0xb0/0x170 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.669952] 
>> [<ffffffffa036fb06>] =3F ttm_pool_populate+0x3c6/0x4c0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.670656] 
>> [<ffffffffa036c262>] =3F ttm_bo_move_memcpy+0x582/0x620 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.671355] 
>> [<ffffffff811a2558>] =3F __vmalloc_node_range+0x198/0x2a0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.672057] 
>> [<ffffffffa0369c77>] =3F ttm_bo_handle_move_mem+0x267/0x5e0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.672763] 
>> [<ffffffff810052f9>] =3F __raw_callee_save_xen_pmd_val+0x11/0x1e
>> Sep 10 15:53:27 testVS01OU kernel: [11777.673472] 
>> [<ffffffffa036a8bb>] =3F ttm_bo_mem_space+0xeb/0x360 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.674182] 
>> [<ffffffffa036ad0f>] =3F ttm_bo_validate+0x1df/0x1f0 [ttm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.674886] 
>> [<ffffffff8119fdfa>] =3F lazy_max_pages+0x1a/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.675592] 
>> [<ffffffff811a095d>] =3F free_vmap_area_noflush+0x2d/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.676305] 
>> [<ffffffffa0354b72>] =3F mgag200_bo_push_sysram+0x82/0xc0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.677025] 
>> [<ffffffffa034f9c1>] =3F 
>> mga_crtc_do_set_base.isra.8.constprop.20+0x81/0x3f0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.677755] 
>> [<ffffffff813221c8>] =3F pci_bus_write_config_dword+0x78/0x90
>> Sep 10 15:53:27 testVS01OU kernel: [11777.678471] 
>> [<ffffffffa03511ca>] =3F mga_crtc_mode_set+0x149a/0x25d0 [mgag200]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.679178] 
>> [<ffffffff812eb827>] =3F idr_get_empty_slot+0x187/0x3e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.679872] 
>> [<ffffffff812eb427>] =3F idr_mark_full+0x57/0x70
>> Sep 10 15:53:27 testVS01OU kernel: [11777.680562] 
>> [<ffffffff812ebd66>] =3F idr_alloc+0x76/0xd0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.681251] 
>> [<ffffffffa0388939>] =3F drm_crtc_helper_set_mode+0x309/0x540 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.681954] 
>> [<ffffffffa0389969>] =3F drm_crtc_helper_set_config+0x8d9/0xb00 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.682654] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.683358] 
>> [<ffffffffa0317998>] =3F drm_mode_set_config_internal+0x68/0x100 [drm]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.684050] 
>> [<ffffffffa03947cf>] =3F drm_fb_helper_pan_display+0x9f/0xe0 
>> [drm_kms_helper]
>> Sep 10 15:53:27 testVS01OU kernel: [11777.684726] 
>> [<ffffffff8135ba81>] =3F fb_pan_display+0xc1/0x180
>> Sep 10 15:53:27 testVS01OU kernel: [11777.685384] 
>> [<ffffffff81356166>] =3F bit_update_start+0x26/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.686021] 
>> [<ffffffff81355b01>] =3F fbcon_switch+0x391/0x540
>> Sep 10 15:53:27 testVS01OU kernel: [11777.686641] 
>> [<ffffffff813cd31f>] =3F redraw_screen+0x15f/0x240
>> Sep 10 15:53:27 testVS01OU kernel: [11777.687240] 
>> [<ffffffff813542aa>] =3F fbcon_blank+0x23a/0x2f0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.687819] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.688391] 
>> [<ffffffff810c923e>] =3F console_unlock+0x1ee/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.688956] 
>> [<ffffffff81150919>] =3F irq_work_queue+0x9/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.689510] 
>> [<ffffffff810c9042>] =3F wake_up_klogd+0x32/0x40
>> Sep 10 15:53:27 testVS01OU kernel: [11777.690054] 
>> [<ffffffff810c9dd0>] =3F vprintk_emit+0x2b0/0x4e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.690584] 
>> [<ffffffff81594af7>] =3F _raw_spin_lock_irqsave+0x17/0x70
>> Sep 10 15:53:27 testVS01OU kernel: [11777.691112] 
>> [<ffffffff810da4e6>] =3F internal_add_timer+0x36/0xa0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.691639] 
>> [<ffffffff81594b9c>] =3F _raw_spin_unlock_irqrestore+0x1c/0x50
>> Sep 10 15:53:27 testVS01OU kernel: [11777.692173] 
>> [<ffffffff810dc7d4>] =3F mod_timer+0x154/0x1d0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.692708] 
>> [<ffffffff813cde81>] =3F do_unblank_screen+0xb1/0x1e0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.693247] 
>> [<ffffffff812fa209>] =3F bust_spinlocks+0x19/0x40
>> Sep 10 15:53:27 testVS01OU kernel: [11777.693779] 
>> [<ffffffff810196a1>] =3F oops_end+0x41/0x120
>> Sep 10 15:53:27 testVS01OU kernel: [11777.694304] 
>> [<ffffffff8158b86d>] =3F no_context+0x2fc/0x336
>> Sep 10 15:53:27 testVS01OU kernel: [11777.694821] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.695330] 
>> [<ffffffff81069b7b>] =3F ptep_set_access_flags+0x1b/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.695834] 
>> [<ffffffff811927fd>] =3F handle_mm_fault+0x28d/0x1700
>> Sep 10 15:53:27 testVS01OU kernel: [11777.696343] 
>> [<ffffffff815910cf>] =3F schedule+0x2f/0x80
>> Sep 10 15:53:27 testVS01OU kernel: [11777.696854] 
>> [<ffffffff812f8e24>] =3F call_rwsem_down_read_failed+0x14/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.697363] 
>> [<ffffffff81064499>] =3F __do_page_fault+0x1b9/0x510
>> Sep 10 15:53:27 testVS01OU kernel: [11777.697896] 
>> [<ffffffff81596e58>] =3F page_fault+0x28/0x30
>> Sep 10 15:53:27 testVS01OU kernel: [11777.698398] 
>> [<ffffffff812fe903>] =3F copy_page_to_iter+0x83/0x320
>> Sep 10 15:53:27 testVS01OU kernel: [11777.698901] 
>> [<ffffffff81166e20>] =3F generic_file_read_iter+0x2c0/0x5c0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.699407] 
>> [<ffffffff8159491c>] =3F _raw_spin_lock_irq+0xc/0x60
>> Sep 10 15:53:27 testVS01OU kernel: [11777.699910] 
>> [<ffffffff81212835>] =3F fsnotify+0x335/0x4b0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.700411] 
>> [<ffffffff811d302f>] =3F __vfs_read+0xaf/0xe0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.700904] 
>> [<ffffffff811d43ed>] =3F vfs_read+0x8d/0x150
>> Sep 10 15:53:27 testVS01OU kernel: [11777.701393] 
>> [<ffffffff811d46ab>] =3F SyS_pread64+0x9b/0xb0
>> Sep 10 15:53:27 testVS01OU kernel: [11777.701877] 
>> [<ffffffff81594eb2>] =3F system_call_fastpath+0x16/0x75
>> Sep 10 15:53:27 testVS01OU kernel: [11777.702365] Code: f7 00 00 e9 
>> 25 ff ff ff 0f 0b 4c 89 e8 49 c1 ed 05 48 c1 e8 03 83 e0 03 4c 09 e8 
>> 80 b8 44 c9 82 81 00 41 0f 95 c5 e9 19 fd ff ff <0f> 0b 0f 0b 66 66 
>> 66 66 90 41 55 45 31 c0 31 d2 41 b9 04 00 00
>> Sep 10 15:53:27 testVS01OU kernel: [11777.703486] RIP 
>> [<ffffffff8106749c>] change_page_attr_set_clr+0x44c/0x450
>> Sep 10 15:53:27 testVS01OU kernel: [11777.704013]  RSP 
>> <ffff88001d52e9d8>
>> Sep 10 15:53:27 testVS01OU kernel: [11777.704528] ---[ end trace 
>> 0371e8f24f53a075 ]---
>
> If you need other informations/tests tell me and I'll post them.
> Any help is appreciated.
>
> Thanks for any reply and sorry for my bad english.


--------------020508020507050502090501
Content-Type: text/plain; charset=UTF-8;
 name="W10.cfg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="W10.cfg"

bmFtZT0nVzEwJwpidWlsZGVyPSJodm0iCiNkZXZpY2VfbW9kZWxfb3ZlcnJpZGU9Ii91c3Iv
bGliL3hlbi9iaW4vcWVtdS1nZGIiCm1lbW9yeT00MDk2CnZjcHVzPTIKYWNwaV9zMz0wCmFj
cGlfczQ9MApoZHR5cGU9ImFoY2kiCnZpZj1bJ2JyaWRnZT14ZW5icjAsbWFjPTAwOjE2OjNl
OmZlOjdhOmI5J10KI2Rpc2s9WycvbW50L3ZtL2Rpc2tzL1cxMC5kaXNrMS54bSxyYXcsaGRh
LHJ3JywnLHJhdyxoZGIscm8sY2Ryb20nXQpkaXNrPVsnL21udC92bS9kaXNrcy9XMTAuZGlz
azEuY293LXNuMSxxY293MixoZGEscncnLCcscmF3LGhkYixybyxjZHJvbSddCmJvb3Q9J2Nk
JwpkZXZpY2VfbW9kZWxfdmVyc2lvbj0icWVtdS14ZW4iCnZpcmlkaWFuPTEKeGVuX3BsYXRm
b3JtX3BjaT0xCnZuYz0wCiN2bmN1bnVzZWQ9MQojdm5jbGlzdGVuPSIwLjAuMC4wIgprZXlt
YXA9Iml0Igpvbl9jcmFzaD0iZGVzdHJveSIKdmdhPSJxeGwiCnNwaWNlPTEKc3BpY2Vob3N0
PScwLjAuMC4wJwpzcGljZXBvcnQ9NjAwMApzcGljZWRpc2FibGVfdGlja2V0aW5nPTEKc3Bp
Y2V2ZGFnZW50PTEKc3BpY2VfY2xpcGJvYXJkX3NoYXJpbmc9MAojc3BpY2VfaW1hZ2VfY29t
cHJlc3Npb249Imx6NCIKI3NwaWNlX3N0cmVhbWluZ192aWRlbz0ib2ZmIgojc3BpY2Vfc3Ry
ZWFtaW5nX3ZpZGVvPSJhbGwiCiNzcGljZV92aWRlb19jb2RlY3M9ImdzdHJlYW1lcjp2cDgi
CnNwaWNldXNicmVkaXJlY3Rpb249NApzb3VuZGh3PSJoZGEiCmxvY2FsdGltZT0xCiN1c2J2
ZXJzaW9uPTMKbXNfdm1fZ2VuaWQ9ImdlbmVyYXRlIgoKZGV2aWNlX21vZGVsX2FyZ3M9WyIt
dHJhY2UiLCJldmVudHM9L2V0Yy94ZW4vcWVtdS10cmFjZS1vcHRpb25zIl0KCg==
--------------020508020507050502090501
Content-Type: text/plain; charset=UTF-8;
 name=".config"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename=".config"

IwojIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULgojIExpbnV4
L3g4NiA0LjEuNiBLZXJuZWwgQ29uZmlndXJhdGlvbgojCkNPTkZJR182NEJJVD15CkNPTkZJ
R19YODZfNjQ9eQpDT05GSUdfWDg2PXkKQ09ORklHX0lOU1RSVUNUSU9OX0RFQ09ERVI9eQpD
T05GSUdfUEVSRl9FVkVOVFNfSU5URUxfVU5DT1JFPXkKQ09ORklHX09VVFBVVF9GT1JNQVQ9
ImVsZjY0LXg4Ni02NCIKQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdz
L3g4Nl82NF9kZWZjb25maWciCkNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpDT05GSUdfU1RB
Q0tUUkFDRV9TVVBQT1JUPXkKQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKQ09O
RklHX01NVT15CkNPTkZJR19ORUVEX0RNQV9NQVBfU1RBVEU9eQpDT05GSUdfTkVFRF9TR19E
TUFfTEVOR1RIPXkKQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CkNPTkZJR19HRU5FUklDX0JV
Rz15CkNPTkZJR19HRU5FUklDX0JVR19SRUxBVElWRV9QT0lOVEVSUz15CkNPTkZJR19HRU5F
UklDX0hXRUlHSFQ9eQpDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQpDT05GSUdfUldT
RU1fWENIR0FERF9BTEdPUklUSE09eQpDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9
eQpDT05GSUdfQVJDSF9IQVNfQ1BVX1JFTEFYPXkKQ09ORklHX0FSQ0hfSEFTX0NBQ0hFX0xJ
TkVfU0laRT15CkNPTkZJR19IQVZFX1NFVFVQX1BFUl9DUFVfQVJFQT15CkNPTkZJR19ORUVE
X1BFUl9DUFVfRU1CRURfRklSU1RfQ0hVTks9eQpDT05GSUdfTkVFRF9QRVJfQ1BVX1BBR0Vf
RklSU1RfQ0hVTks9eQpDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CkNPTkZJ
R19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQpDT05GSUdfQVJDSF9XQU5UX0hVR0VfUE1EX1NI
QVJFPXkKQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEI9eQpDT05GSUdfWk9ORV9E
TUEzMj15CkNPTkZJR19BVURJVF9BUkNIPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfT1BUSU1J
WkVEX0lOTElOSU5HPXkKQ09ORklHX0FSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DPXkK
Q09ORklHX0hBVkVfSU5URUxfVFhUPXkKQ09ORklHX1g4Nl82NF9TTVA9eQpDT05GSUdfWDg2
X0hUPXkKQ09ORklHX0FSQ0hfSFdFSUdIVF9DRkxBR1M9Ii1mY2FsbC1zYXZlZC1yZGkgLWZj
YWxsLXNhdmVkLXJzaSAtZmNhbGwtc2F2ZWQtcmR4IC1mY2FsbC1zYXZlZC1yY3ggLWZjYWxs
LXNhdmVkLXI4IC1mY2FsbC1zYXZlZC1yOSAtZmNhbGwtc2F2ZWQtcjEwIC1mY2FsbC1zYXZl
ZC1yMTEiCkNPTkZJR19BUkNIX1NVUFBPUlRTX1VQUk9CRVM9eQpDT05GSUdfRklYX0VBUkxZ
Q09OX01FTT15CkNPTkZJR19QR1RBQkxFX0xFVkVMUz00CkNPTkZJR19ERUZDT05GSUdfTElT
VD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCkNPTkZJR19JUlFfV09S
Sz15CkNPTkZJR19CVUlMRFRJTUVfRVhUQUJMRV9TT1JUPXkKCiMKIyBHZW5lcmFsIHNldHVw
CiMKQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgpDT05GSUdfQ1JPU1NfQ09NUElMRT0i
IgojIENPTkZJR19DT01QSUxFX1RFU1QgaXMgbm90IHNldApDT05GSUdfTE9DQUxWRVJTSU9O
PSIiCiMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVf
S0VSTkVMX0daSVA9eQpDT05GSUdfSEFWRV9LRVJORUxfQlpJUDI9eQpDT05GSUdfSEFWRV9L
RVJORUxfTFpNQT15CkNPTkZJR19IQVZFX0tFUk5FTF9YWj15CkNPTkZJR19IQVZFX0tFUk5F
TF9MWk89eQpDT05GSUdfSEFWRV9LRVJORUxfTFo0PXkKIyBDT05GSUdfS0VSTkVMX0daSVAg
aXMgbm90IHNldAojIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAojIENPTkZJR19L
RVJORUxfTFpNQSBpcyBub3Qgc2V0CkNPTkZJR19LRVJORUxfWFo9eQojIENPTkZJR19LRVJO
RUxfTFpPIGlzIG5vdCBzZXQKIyBDT05GSUdfS0VSTkVMX0xaNCBpcyBub3Qgc2V0CkNPTkZJ
R19ERUZBVUxUX0hPU1ROQU1FPSIobm9uZSkiCkNPTkZJR19TV0FQPXkKQ09ORklHX1NZU1ZJ
UEM9eQpDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpDT05GSUdfUE9TSVhfTVFVRVVFPXkKQ09O
RklHX1BPU0lYX01RVUVVRV9TWVNDVEw9eQpDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSD15
CkNPTkZJR19GSEFORExFPXkKQ09ORklHX1VTRUxJQj15CkNPTkZJR19BVURJVD15CkNPTkZJ
R19IQVZFX0FSQ0hfQVVESVRTWVNDQUxMPXkKQ09ORklHX0FVRElUU1lTQ0FMTD15CkNPTkZJ
R19BVURJVF9XQVRDSD15CkNPTkZJR19BVURJVF9UUkVFPXkKCiMKIyBJUlEgc3Vic3lzdGVt
CiMKQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKQ09ORklHX0dFTkVSSUNfSVJRX1NIT1c9
eQpDT05GSUdfR0VORVJJQ19JUlFfTEVHQUNZX0FMTE9DX0hXSVJRPXkKQ09ORklHX0dFTkVS
SUNfUEVORElOR19JUlE9eQpDT05GSUdfR0VORVJJQ19JUlFfQ0hJUD15CkNPTkZJR19JUlFf
RE9NQUlOPXkKQ09ORklHX0dFTkVSSUNfTVNJX0lSUT15CiMgQ09ORklHX0lSUV9ET01BSU5f
REVCVUcgaXMgbm90IHNldApDT05GSUdfSVJRX0ZPUkNFRF9USFJFQURJTkc9eQpDT05GSUdf
U1BBUlNFX0lSUT15CkNPTkZJR19DTE9DS1NPVVJDRV9XQVRDSERPRz15CkNPTkZJR19BUkNI
X0NMT0NLU09VUkNFX0RBVEE9eQpDT05GSUdfQ0xPQ0tTT1VSQ0VfVkFMSURBVEVfTEFTVF9D
WUNMRT15CkNPTkZJR19HRU5FUklDX1RJTUVfVlNZU0NBTEw9eQpDT05GSUdfR0VORVJJQ19D
TE9DS0VWRU5UUz15CkNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JST0FEQ0FTVD15CkNP
TkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX01JTl9BREpVU1Q9eQpDT05GSUdfR0VORVJJQ19D
TU9TX1VQREFURT15CgojCiMgVGltZXJzIHN1YnN5c3RlbQojCkNPTkZJR19USUNLX09ORVNI
T1Q9eQpDT05GSUdfTk9fSFpfQ09NTU9OPXkKIyBDT05GSUdfSFpfUEVSSU9ESUMgaXMgbm90
IHNldApDT05GSUdfTk9fSFpfSURMRT15CiMgQ09ORklHX05PX0haX0ZVTEwgaXMgbm90IHNl
dAojIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CkNPTkZJR19ISUdIX1JFU19USU1FUlM9eQoK
IwojIENQVS9UYXNrIHRpbWUgYW5kIHN0YXRzIGFjY291bnRpbmcKIwpDT05GSUdfVElDS19D
UFVfQUNDT1VOVElORz15CiMgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGlzIG5v
dCBzZXQKIyBDT05GSUdfSVJRX1RJTUVfQUNDT1VOVElORyBpcyBub3Qgc2V0CkNPTkZJR19C
U0RfUFJPQ0VTU19BQ0NUPXkKQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQpDT05GSUdf
VEFTS1NUQVRTPXkKQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CkNPTkZJR19UQVNLX1hBQ0NU
PXkKQ09ORklHX1RBU0tfSU9fQUNDT1VOVElORz15CgojCiMgUkNVIFN1YnN5c3RlbQojCkNP
TkZJR19UUkVFX1JDVT15CkNPTkZJR19TUkNVPXkKIyBDT05GSUdfVEFTS1NfUkNVIGlzIG5v
dCBzZXQKQ09ORklHX1JDVV9TVEFMTF9DT01NT049eQojIENPTkZJR19SQ1VfVVNFUl9RUyBp
cyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFOT1VUPTY0CkNPTkZJR19SQ1VfRkFOT1VUX0xFQUY9
MTYKIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkNPTkZJR19SQ1VfRkFT
VF9OT19IWj15CiMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9LVEhSRUFEX1BSSU89MAojIENPTkZJR19SQ1VfTk9DQl9DUFUgaXMgbm90IHNldAojIENP
TkZJR19SQ1VfRVhQRURJVEVfQk9PVCBpcyBub3Qgc2V0CkNPTkZJR19CVUlMRF9CSU4yQz15
CiMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcK
Q09ORklHX0xPR19DUFVfTUFYX0JVRl9TSElGVD0xMgpDT05GSUdfSEFWRV9VTlNUQUJMRV9T
Q0hFRF9DTE9DSz15CkNPTkZJR19BUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HPXkKQ09O
RklHX0FSQ0hfU1VQUE9SVFNfSU5UMTI4PXkKQ09ORklHX05VTUFfQkFMQU5DSU5HPXkKIyBD
T05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEIGlzIG5vdCBzZXQKQ09ORklH
X0NHUk9VUFM9eQojIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldApDT05GSUdfQ0dS
T1VQX0ZSRUVaRVI9eQpDT05GSUdfQ0dST1VQX0RFVklDRT15CkNPTkZJR19DUFVTRVRTPXkK
Q09ORklHX1BST0NfUElEX0NQVVNFVD15CkNPTkZJR19DR1JPVVBfQ1BVQUNDVD15CkNPTkZJ
R19QQUdFX0NPVU5URVI9eQpDT05GSUdfTUVNQ0c9eQpDT05GSUdfTUVNQ0dfU1dBUD15CiMg
Q09ORklHX01FTUNHX1NXQVBfRU5BQkxFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01FTUNHX0tN
RU0gaXMgbm90IHNldAojIENPTkZJR19DR1JPVVBfSFVHRVRMQiBpcyBub3Qgc2V0CkNPTkZJ
R19DR1JPVVBfUEVSRj15CkNPTkZJR19DR1JPVVBfU0NIRUQ9eQpDT05GSUdfRkFJUl9HUk9V
UF9TQ0hFRD15CiMgQ09ORklHX0NGU19CQU5EV0lEVEggaXMgbm90IHNldAojIENPTkZJR19S
VF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfQ0dST1VQPXkKIyBDT05GSUdf
REVCVUdfQkxLX0NHUk9VUCBpcyBub3Qgc2V0CkNPTkZJR19DSEVDS1BPSU5UX1JFU1RPUkU9
eQpDT05GSUdfTkFNRVNQQUNFUz15CkNPTkZJR19VVFNfTlM9eQpDT05GSUdfSVBDX05TPXkK
Q09ORklHX1VTRVJfTlM9eQpDT05GSUdfUElEX05TPXkKQ09ORklHX05FVF9OUz15CkNPTkZJ
R19TQ0hFRF9BVVRPR1JPVVA9eQojIENPTkZJR19TWVNGU19ERVBSRUNBVEVEIGlzIG5vdCBz
ZXQKQ09ORklHX1JFTEFZPXkKQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKQ09ORklHX0lOSVRS
QU1GU19TT1VSQ0U9IiIKQ09ORklHX1JEX0daSVA9eQpDT05GSUdfUkRfQlpJUDI9eQpDT05G
SUdfUkRfTFpNQT15CkNPTkZJR19SRF9YWj15CkNPTkZJR19SRF9MWk89eQpDT05GSUdfUkRf
TFo0PXkKIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldApDT05GSUdf
U1lTQ1RMPXkKQ09ORklHX0FOT05fSU5PREVTPXkKQ09ORklHX0hBVkVfVUlEMTY9eQpDT05G
SUdfU1lTQ1RMX0VYQ0VQVElPTl9UUkFDRT15CkNPTkZJR19IQVZFX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CUEY9eQpDT05GSUdfRVhQRVJUPXkKQ09ORklHX1VJRDE2PXkKQ09ORklH
X01VTFRJVVNFUj15CkNPTkZJR19TR0VUTUFTS19TWVNDQUxMPXkKQ09ORklHX1NZU0ZTX1NZ
U0NBTEw9eQojIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkNPTkZJR19LQUxM
U1lNUz15CiMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CkNPTkZJR19QUklOVEs9
eQpDT05GSUdfQlVHPXkKQ09ORklHX0VMRl9DT1JFPXkKQ09ORklHX1BDU1BLUl9QTEFURk9S
TT15CkNPTkZJR19CQVNFX0ZVTEw9eQpDT05GSUdfRlVURVg9eQpDT05GSUdfRVBPTEw9eQpD
T05GSUdfU0lHTkFMRkQ9eQpDT05GSUdfVElNRVJGRD15CkNPTkZJR19FVkVOVEZEPXkKIyBD
T05GSUdfQlBGX1NZU0NBTEwgaXMgbm90IHNldApDT05GSUdfU0hNRU09eQpDT05GSUdfQUlP
PXkKQ09ORklHX0FEVklTRV9TWVNDQUxMUz15CkNPTkZJR19QQ0lfUVVJUktTPXkKIyBDT05G
SUdfRU1CRURERUQgaXMgbm90IHNldApDT05GSUdfSEFWRV9QRVJGX0VWRU5UUz15CgojCiMg
S2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKIwpDT05GSUdfUEVSRl9F
VkVOVFM9eQojIENPTkZJR19ERUJVR19QRVJGX1VTRV9WTUFMTE9DIGlzIG5vdCBzZXQKQ09O
RklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0
CkNPTkZJR19TTEFCPXkKIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiMgQ09ORklHX1NMT0Ig
aXMgbm90IHNldAojIENPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlSSU5HIGlzIG5vdCBzZXQK
Q09ORklHX1BST0ZJTElORz15CkNPTkZJR19UUkFDRVBPSU5UUz15CkNPTkZJR19PUFJPRklM
RT1tCiMgQ09ORklHX09QUk9GSUxFX0VWRU5UX01VTFRJUExFWCBpcyBub3Qgc2V0CkNPTkZJ
R19IQVZFX09QUk9GSUxFPXkKQ09ORklHX09QUk9GSUxFX05NSV9USU1FUj15CkNPTkZJR19L
UFJPQkVTPXkKQ09ORklHX0pVTVBfTEFCRUw9eQpDT05GSUdfT1BUUFJPQkVTPXkKQ09ORklH
X0tQUk9CRVNfT05fRlRSQUNFPXkKQ09ORklHX1VQUk9CRVM9eQojIENPTkZJR19IQVZFXzY0
QklUX0FMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VO
QUxJR05FRF9BQ0NFU1M9eQpDT05GSUdfQVJDSF9VU0VfQlVJTFRJTl9CU1dBUD15CkNPTkZJ
R19LUkVUUFJPQkVTPXkKQ09ORklHX1VTRVJfUkVUVVJOX05PVElGSUVSPXkKQ09ORklHX0hB
VkVfSU9SRU1BUF9QUk9UPXkKQ09ORklHX0hBVkVfS1BST0JFUz15CkNPTkZJR19IQVZFX0tS
RVRQUk9CRVM9eQpDT05GSUdfSEFWRV9PUFRQUk9CRVM9eQpDT05GSUdfSEFWRV9LUFJPQkVT
X09OX0ZUUkFDRT15CkNPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKQ09ORklHX0hBVkVf
RE1BX0FUVFJTPXkKQ09ORklHX0hBVkVfRE1BX0NPTlRJR1VPVVM9eQpDT05GSUdfR0VORVJJ
Q19TTVBfSURMRV9USFJFQUQ9eQpDT05GSUdfSEFWRV9SRUdTX0FORF9TVEFDS19BQ0NFU1Nf
QVBJPXkKQ09ORklHX0hBVkVfQ0xLPXkKQ09ORklHX0hBVkVfRE1BX0FQSV9ERUJVRz15CkNP
TkZJR19IQVZFX0hXX0JSRUFLUE9JTlQ9eQpDT05GSUdfSEFWRV9NSVhFRF9CUkVBS1BPSU5U
U19SRUdTPXkKQ09ORklHX0hBVkVfVVNFUl9SRVRVUk5fTk9USUZJRVI9eQpDT05GSUdfSEFW
RV9QRVJGX0VWRU5UU19OTUk9eQpDT05GSUdfSEFWRV9QRVJGX1JFR1M9eQpDT05GSUdfSEFW
RV9QRVJGX1VTRVJfU1RBQ0tfRFVNUD15CkNPTkZJR19IQVZFX0FSQ0hfSlVNUF9MQUJFTD15
CkNPTkZJR19BUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIRz15CkNPTkZJR19IQVZFX0NNUFhD
SEdfTE9DQUw9eQpDT05GSUdfSEFWRV9DTVBYQ0hHX0RPVUJMRT15CkNPTkZJR19BUkNIX1dB
TlRfQ09NUEFUX0lQQ19QQVJTRV9WRVJTSU9OPXkKQ09ORklHX0FSQ0hfV0FOVF9PTERfQ09N
UEFUX0lQQz15CkNPTkZJR19IQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVI9eQpDT05GSUdfU0VD
Q09NUF9GSUxURVI9eQpDT05GSUdfSEFWRV9DQ19TVEFDS1BST1RFQ1RPUj15CkNPTkZJR19D
Q19TVEFDS1BST1RFQ1RPUj15CiMgQ09ORklHX0NDX1NUQUNLUFJPVEVDVE9SX05PTkUgaXMg
bm90IHNldApDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1JfUkVHVUxBUj15CiMgQ09ORklHX0ND
X1NUQUNLUFJPVEVDVE9SX1NUUk9ORyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0NPTlRFWFRf
VFJBQ0tJTkc9eQpDT05GSUdfSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTj15CkNPTkZJ
R19IQVZFX0lSUV9USU1FX0FDQ09VTlRJTkc9eQpDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFS
RU5UX0hVR0VQQUdFPXkKQ09ORklHX0hBVkVfQVJDSF9IVUdFX1ZNQVA9eQpDT05GSUdfSEFW
RV9BUkNIX1NPRlRfRElSVFk9eQpDT05GSUdfTU9EVUxFU19VU0VfRUxGX1JFTEE9eQpDT05G
SUdfSEFWRV9JUlFfRVhJVF9PTl9JUlFfU1RBQ0s9eQpDT05GSUdfQVJDSF9IQVNfRUxGX1JB
TkRPTUlaRT15CkNPTkZJR19PTERfU0lHU1VTUEVORDM9eQpDT05GSUdfQ09NUEFUX09MRF9T
SUdBQ1RJT049eQoKIwojIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZwojCiMgQ09ORklH
X0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfSEFTX0dDT1ZfUFJPRklMRV9B
TEw9eQojIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKQ09O
RklHX1NMQUJJTkZPPXkKQ09ORklHX1JUX01VVEVYRVM9eQpDT05GSUdfQkFTRV9TTUFMTD0w
CkNPTkZJR19NT0RVTEVTPXkKQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKQ09ORklHX01P
RFVMRV9VTkxPQUQ9eQpDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CkNPTkZJR19NT0RW
RVJTSU9OUz15CiMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiMg
Q09ORklHX01PRFVMRV9TSUcgaXMgbm90IHNldAojIENPTkZJR19NT0RVTEVfQ09NUFJFU1Mg
aXMgbm90IHNldApDT05GSUdfU1RPUF9NQUNISU5FPXkKQ09ORklHX0JMT0NLPXkKQ09ORklH
X0JMS19ERVZfQlNHPXkKQ09ORklHX0JMS19ERVZfQlNHTElCPXkKQ09ORklHX0JMS19ERVZf
SU5URUdSSVRZPXkKQ09ORklHX0JMS19ERVZfVEhST1RUTElORz15CiMgQ09ORklHX0JMS19D
TURMSU5FX1BBUlNFUiBpcyBub3Qgc2V0CgojCiMgUGFydGl0aW9uIFR5cGVzCiMKQ09ORklH
X1BBUlRJVElPTl9BRFZBTkNFRD15CkNPTkZJR19BQ09STl9QQVJUSVRJT049eQojIENPTkZJ
R19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKIyBDT05GSUdfQUNPUk5fUEFS
VElUSU9OX0VFU09YIGlzIG5vdCBzZXQKQ09ORklHX0FDT1JOX1BBUlRJVElPTl9JQ1M9eQoj
IENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FDT1JO
X1BBUlRJVElPTl9QT1dFUlRFQyBpcyBub3Qgc2V0CkNPTkZJR19BQ09STl9QQVJUSVRJT05f
UklTQ0lYPXkKIyBDT05GSUdfQUlYX1BBUlRJVElPTiBpcyBub3Qgc2V0CkNPTkZJR19PU0Zf
UEFSVElUSU9OPXkKQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CkNPTkZJR19BVEFSSV9QQVJU
SVRJT049eQpDT05GSUdfTUFDX1BBUlRJVElPTj15CkNPTkZJR19NU0RPU19QQVJUSVRJT049
eQpDT05GSUdfQlNEX0RJU0tMQUJFTD15CkNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQpD
T05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJF
TD15CkNPTkZJR19MRE1fUEFSVElUSU9OPXkKIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX1NHSV9QQVJUSVRJT049eQpDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CkNP
TkZJR19TVU5fUEFSVElUSU9OPXkKQ09ORklHX0tBUk1BX1BBUlRJVElPTj15CkNPTkZJR19F
RklfUEFSVElUSU9OPXkKIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0NNRExJTkVfUEFSVElUSU9OIGlzIG5vdCBzZXQKQ09ORklHX0JMT0NLX0NPTVBB
VD15CgojCiMgSU8gU2NoZWR1bGVycwojCkNPTkZJR19JT1NDSEVEX05PT1A9eQpDT05GSUdf
SU9TQ0hFRF9ERUFETElORT15CkNPTkZJR19JT1NDSEVEX0NGUT15CkNPTkZJR19DRlFfR1JP
VVBfSU9TQ0hFRD15CiMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9DRlE9eQojIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldApDT05G
SUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCkNPTkZJR19QUkVFTVBUX05PVElGSUVSUz15CkNP
TkZJR19QQURBVEE9eQpDT05GSUdfVU5JTkxJTkVfU1BJTl9VTkxPQ0s9eQpDT05GSUdfSU5M
SU5FX1NQSU5fVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQpDT05G
SUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CkNPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NL
PXkKQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKQ09ORklHX0FSQ0hfU1VQUE9S
VFNfQVRPTUlDX1JNVz15CkNPTkZJR19NVVRFWF9TUElOX09OX09XTkVSPXkKQ09ORklHX1JX
U0VNX1NQSU5fT05fT1dORVI9eQpDT05GSUdfTE9DS19TUElOX09OX09XTkVSPXkKQ09ORklH
X0FSQ0hfVVNFX1FVRVVFX1JXTE9DSz15CkNPTkZJR19RVUVVRV9SV0xPQ0s9eQpDT05GSUdf
RlJFRVpFUj15CgojCiMgUHJvY2Vzc29yIHR5cGUgYW5kIGZlYXR1cmVzCiMKQ09ORklHX1pP
TkVfRE1BPXkKQ09ORklHX1NNUD15CkNPTkZJR19YODZfRkVBVFVSRV9OQU1FUz15CkNPTkZJ
R19YODZfWDJBUElDPXkKQ09ORklHX1g4Nl9NUFBBUlNFPXkKIyBDT05GSUdfWDg2X0VYVEVO
REVEX1BMQVRGT1JNIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9JTlRFTF9MUFNTPXkKIyBDT05G
SUdfWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UgaXMgbm90IHNldApDT05GSUdfSU9TRl9NQkk9
bQojIENPTkZJR19JT1NGX01CSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19YODZfU1VQUE9S
VFNfTUVNT1JZX0ZBSUxVUkU9eQpDT05GSUdfU0NIRURfT01JVF9GUkFNRV9QT0lOVEVSPXkK
Q09ORklHX0hZUEVSVklTT1JfR1VFU1Q9eQpDT05GSUdfUEFSQVZJUlQ9eQojIENPTkZJR19Q
QVJBVklSVF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQVJBVklSVF9TUElOTE9DS1M9eQpD
T05GSUdfWEVOPXkKQ09ORklHX1hFTl9ET00wPXkKQ09ORklHX1hFTl9QVkhWTT15CkNPTkZJ
R19YRU5fTUFYX0RPTUFJTl9NRU1PUlk9NTAwCkNPTkZJR19YRU5fU0FWRV9SRVNUT1JFPXkK
IyBDT05GSUdfWEVOX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9QVkg9eQpDT05G
SUdfS1ZNX0dVRVNUPXkKIyBDT05GSUdfS1ZNX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HIGlzIG5vdCBzZXQKQ09ORklHX1BBUkFWSVJU
X0NMT0NLPXkKQ09ORklHX05PX0JPT1RNRU09eQojIENPTkZJR19NSzggaXMgbm90IHNldAoj
IENPTkZJR19NUFNDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUNPUkUyIGlzIG5vdCBzZXQKIyBD
T05GSUdfTUFUT00gaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19DUFU9eQpDT05GSUdfWDg2
X0lOVEVSTk9ERV9DQUNIRV9TSElGVD02CkNPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQ9NgpD
T05GSUdfWDg2X1RTQz15CkNPTkZJR19YODZfQ01QWENIRzY0PXkKQ09ORklHX1g4Nl9DTU9W
PXkKQ09ORklHX1g4Nl9NSU5JTVVNX0NQVV9GQU1JTFk9NjQKQ09ORklHX1g4Nl9ERUJVR0NU
TE1TUj15CiMgQ09ORklHX1BST0NFU1NPUl9TRUxFQ1QgaXMgbm90IHNldApDT05GSUdfQ1BV
X1NVUF9JTlRFTD15CkNPTkZJR19DUFVfU1VQX0FNRD15CkNPTkZJR19DUFVfU1VQX0NFTlRB
VVI9eQpDT05GSUdfSFBFVF9USU1FUj15CkNPTkZJR19IUEVUX0VNVUxBVEVfUlRDPXkKQ09O
RklHX0RNST15CkNPTkZJR19HQVJUX0lPTU1VPXkKQ09ORklHX0NBTEdBUllfSU9NTVU9eQpD
T05GSUdfQ0FMR0FSWV9JT01NVV9FTkFCTEVEX0JZX0RFRkFVTFQ9eQpDT05GSUdfU1dJT1RM
Qj15CkNPTkZJR19JT01NVV9IRUxQRVI9eQojIENPTkZJR19NQVhTTVAgaXMgbm90IHNldApD
T05GSUdfTlJfQ1BVUz01MTIKQ09ORklHX1NDSEVEX1NNVD15CkNPTkZJR19TQ0hFRF9NQz15
CiMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CkNPTkZJR19QUkVFTVBUX1ZPTFVO
VEFSWT15CiMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldApDT05GSUdfWDg2X0xPQ0FMX0FQ
SUM9eQpDT05GSUdfWDg2X0lPX0FQSUM9eQpDT05GSUdfWDg2X1JFUk9VVEVfRk9SX0JST0tF
Tl9CT09UX0lSUVM9eQpDT05GSUdfWDg2X01DRT15CkNPTkZJR19YODZfTUNFX0lOVEVMPXkK
Q09ORklHX1g4Nl9NQ0VfQU1EPXkKQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEPXkKQ09ORklH
X1g4Nl9NQ0VfSU5KRUNUPW0KQ09ORklHX1g4Nl9USEVSTUFMX1ZFQ1RPUj15CkNPTkZJR19Y
ODZfMTZCSVQ9eQpDT05GSUdfWDg2X0VTUEZJWDY0PXkKQ09ORklHX1g4Nl9WU1lTQ0FMTF9F
TVVMQVRJT049eQpDT05GSUdfSThLPW0KQ09ORklHX01JQ1JPQ09ERT15CkNPTkZJR19NSUNS
T0NPREVfSU5URUw9eQpDT05GSUdfTUlDUk9DT0RFX0FNRD15CkNPTkZJR19NSUNST0NPREVf
T0xEX0lOVEVSRkFDRT15CkNPTkZJR19NSUNST0NPREVfSU5URUxfRUFSTFk9eQpDT05GSUdf
TUlDUk9DT0RFX0FNRF9FQVJMWT15CkNPTkZJR19NSUNST0NPREVfRUFSTFk9eQpDT05GSUdf
WDg2X01TUj1tCkNPTkZJR19YODZfQ1BVSUQ9bQpDT05GSUdfQVJDSF9QSFlTX0FERFJfVF82
NEJJVD15CkNPTkZJR19BUkNIX0RNQV9BRERSX1RfNjRCSVQ9eQpDT05GSUdfWDg2X0RJUkVD
VF9HQlBBR0VTPXkKQ09ORklHX05VTUE9eQpDT05GSUdfQU1EX05VTUE9eQpDT05GSUdfWDg2
XzY0X0FDUElfTlVNQT15CkNPTkZJR19OT0RFU19TUEFOX09USEVSX05PREVTPXkKQ09ORklH
X05VTUFfRU1VPXkKQ09ORklHX05PREVTX1NISUZUPTYKQ09ORklHX0FSQ0hfU1BBUlNFTUVN
X0VOQUJMRT15CkNPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKQ09ORklHX0FSQ0hf
U0VMRUNUX01FTU9SWV9NT0RFTD15CiMgQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFIGlzIG5v
dCBzZXQKQ09ORklHX0FSQ0hfUFJPQ19LQ09SRV9URVhUPXkKQ09ORklHX0lMTEVHQUxfUE9J
TlRFUl9WQUxVRT0weGRlYWQwMDAwMDAwMDAwMDAKQ09ORklHX1NFTEVDVF9NRU1PUllfTU9E
RUw9eQpDT05GSUdfU1BBUlNFTUVNX01BTlVBTD15CkNPTkZJR19TUEFSU0VNRU09eQpDT05G
SUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CkNPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkK
Q09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VO
QUJMRT15CkNPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUj15CkNPTkZJ
R19TUEFSU0VNRU1fVk1FTU1BUD15CkNPTkZJR19IQVZFX01FTUJMT0NLPXkKQ09ORklHX0hB
VkVfTUVNQkxPQ0tfTk9ERV9NQVA9eQpDT05GSUdfQVJDSF9ESVNDQVJEX01FTUJMT0NLPXkK
Q09ORklHX01FTU9SWV9JU09MQVRJT049eQojIENPTkZJR19NT1ZBQkxFX05PREUgaXMgbm90
IHNldApDT05GSUdfSEFWRV9CT09UTUVNX0lORk9fTk9ERT15CkNPTkZJR19NRU1PUllfSE9U
UExVRz15CkNPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0U9eQpDT05GSUdfTUVNT1JZX0hP
VFJFTU9WRT15CkNPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQpDT05GSUdfU1BMSVRfUFRM
T0NLX0NQVVM9NApDT05GSUdfQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSz15CkNPTkZJ
R19NRU1PUllfQkFMTE9PTj15CkNPTkZJR19CQUxMT09OX0NPTVBBQ1RJT049eQpDT05GSUdf
Q09NUEFDVElPTj15CkNPTkZJR19NSUdSQVRJT049eQpDT05GSUdfQVJDSF9FTkFCTEVfSFVH
RVBBR0VfTUlHUkFUSU9OPXkKQ09ORklHX1BIWVNfQUREUl9UXzY0QklUPXkKQ09ORklHX1pP
TkVfRE1BX0ZMQUc9MQpDT05GSUdfQk9VTkNFPXkKQ09ORklHX1ZJUlRfVE9fQlVTPXkKQ09O
RklHX01NVV9OT1RJRklFUj15CkNPTkZJR19LU009eQpDT05GSUdfREVGQVVMVF9NTUFQX01J
Tl9BRERSPTY1NTM2CkNPTkZJR19BUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFPXkKQ09O
RklHX01FTU9SWV9GQUlMVVJFPXkKQ09ORklHX0hXUE9JU09OX0lOSkVDVD1tCkNPTkZJR19U
UkFOU1BBUkVOVF9IVUdFUEFHRT15CiMgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FM
V0FZUyBpcyBub3Qgc2V0CkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFPXkK
IyBDT05GSUdfQ0xFQU5DQUNIRSBpcyBub3Qgc2V0CkNPTkZJR19GUk9OVFNXQVA9eQojIENP
TkZJR19DTUEgaXMgbm90IHNldApDT05GSUdfTUVNX1NPRlRfRElSVFk9eQpDT05GSUdfWlNX
QVA9eQpDT05GSUdfWlBPT0w9eQpDT05GSUdfWkJVRD1tCkNPTkZJR19aU01BTExPQz1tCiMg
Q09ORklHX1BHVEFCTEVfTUFQUElORyBpcyBub3Qgc2V0CiMgQ09ORklHX1pTTUFMTE9DX1NU
QVQgaXMgbm90IHNldApDT05GSUdfR0VORVJJQ19FQVJMWV9JT1JFTUFQPXkKQ09ORklHX1g4
Nl9QTUVNX0xFR0FDWT15CiMgQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04gaXMg
bm90IHNldApDT05GSUdfWDg2X1JFU0VSVkVfTE9XPTY0CkNPTkZJR19NVFJSPXkKQ09ORklH
X01UUlJfU0FOSVRJWkVSPXkKQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxU
PTAKQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUPTEKQ09ORklH
X1g4Nl9QQVQ9eQpDT05GSUdfQVJDSF9VU0VTX1BHX1VOQ0FDSEVEPXkKQ09ORklHX0FSQ0hf
UkFORE9NPXkKQ09ORklHX1g4Nl9TTUFQPXkKIyBDT05GSUdfWDg2X0lOVEVMX01QWCBpcyBu
b3Qgc2V0CkNPTkZJR19FRkk9eQpDT05GSUdfRUZJX1NUVUI9eQpDT05GSUdfRUZJX01JWEVE
PXkKQ09ORklHX1NFQ0NPTVA9eQojIENPTkZJR19IWl8xMDAgaXMgbm90IHNldApDT05GSUdf
SFpfMjUwPXkKIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfSFpfMTAwMCBp
cyBub3Qgc2V0CkNPTkZJR19IWj0yNTAKQ09ORklHX1NDSEVEX0hSVElDSz15CkNPTkZJR19L
RVhFQz15CkNPTkZJR19DUkFTSF9EVU1QPXkKIyBDT05GSUdfS0VYRUNfSlVNUCBpcyBub3Qg
c2V0CkNPTkZJR19QSFlTSUNBTF9TVEFSVD0weDEwMDAwMDAKQ09ORklHX1JFTE9DQVRBQkxF
PXkKIyBDT05GSUdfUkFORE9NSVpFX0JBU0UgaXMgbm90IHNldApDT05GSUdfUEhZU0lDQUxf
QUxJR049MHgyMDAwMDAKQ09ORklHX0hPVFBMVUdfQ1BVPXkKIyBDT05GSUdfQk9PVFBBUkFN
X0hPVFBMVUdfQ1BVMCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0hPVFBMVUdfQ1BVMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0NPTVBBVF9WRFNPIGlzIG5vdCBzZXQKIyBDT05GSUdfQ01E
TElORV9CT09MIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTElWRVBBVENIPXkKQ09ORklHX0FS
Q0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9I
T1RSRU1PVkU9eQpDT05GSUdfVVNFX1BFUkNQVV9OVU1BX05PREVfSUQ9eQoKIwojIFBvd2Vy
IG1hbmFnZW1lbnQgYW5kIEFDUEkgb3B0aW9ucwojCkNPTkZJR19BUkNIX0hJQkVSTkFUSU9O
X0hFQURFUj15CkNPTkZJR19TVVNQRU5EPXkKQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CkNP
TkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTPXkKQ09ORklHX0hJQkVSTkFUSU9OPXkKQ09ORklH
X1BNX1NURF9QQVJUSVRJT049IiIKQ09ORklHX1BNX1NMRUVQPXkKQ09ORklHX1BNX1NMRUVQ
X1NNUD15CiMgQ09ORklHX1BNX0FVVE9TTEVFUCBpcyBub3Qgc2V0CiMgQ09ORklHX1BNX1dB
S0VMT0NLUyBpcyBub3Qgc2V0CkNPTkZJR19QTT15CkNPTkZJR19QTV9ERUJVRz15CkNPTkZJ
R19QTV9BRFZBTkNFRF9ERUJVRz15CiMgQ09ORklHX1BNX1RFU1RfU1VTUEVORCBpcyBub3Qg
c2V0CkNPTkZJR19QTV9TTEVFUF9ERUJVRz15CiMgQ09ORklHX0RQTV9XQVRDSERPRyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1BNX1RSQUNFX1JUQyBpcyBub3Qgc2V0CkNPTkZJR19QTV9DTEs9
eQojIENPTkZJR19XUV9QT1dFUl9FRkZJQ0lFTlRfREVGQVVMVCBpcyBub3Qgc2V0CkNPTkZJ
R19BQ1BJPXkKQ09ORklHX0FDUElfTEVHQUNZX1RBQkxFU19MT09LVVA9eQpDT05GSUdfQVJD
SF9NSUdIVF9IQVZFX0FDUElfUERDPXkKQ09ORklHX0FDUElfU1lTVEVNX1BPV0VSX1NUQVRF
U19TVVBQT1JUPXkKQ09ORklHX0FDUElfU0xFRVA9eQojIENPTkZJR19BQ1BJX1BST0NGU19Q
T1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfRUNfREVCVUdGUyBpcyBub3Qgc2V0CkNP
TkZJR19BQ1BJX0FDPW0KQ09ORklHX0FDUElfQkFUVEVSWT1tCkNPTkZJR19BQ1BJX0JVVFRP
Tj1tCkNPTkZJR19BQ1BJX1ZJREVPPW0KQ09ORklHX0FDUElfRkFOPW0KQ09ORklHX0FDUElf
RE9DSz15CkNPTkZJR19BQ1BJX1BST0NFU1NPUj1tCkNPTkZJR19BQ1BJX0lQTUk9bQpDT05G
SUdfQUNQSV9IT1RQTFVHX0NQVT15CkNPTkZJR19BQ1BJX1BST0NFU1NPUl9BR0dSRUdBVE9S
PW0KQ09ORklHX0FDUElfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX05VTUE9eQojIENPTkZJR19B
Q1BJX0NVU1RPTV9EU0RUIGlzIG5vdCBzZXQKQ09ORklHX0FDUElfSU5JVFJEX1RBQkxFX09W
RVJSSURFPXkKIyBDT05GSUdfQUNQSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1BJX1BD
SV9TTE9UPXkKQ09ORklHX1g4Nl9QTV9USU1FUj15CkNPTkZJR19BQ1BJX0NPTlRBSU5FUj15
CkNPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZPXkKQ09ORklHX0FDUElfSE9UUExVR19JT0FQ
SUM9eQpDT05GSUdfQUNQSV9TQlM9bQpDT05GSUdfQUNQSV9IRUQ9eQojIENPTkZJR19BQ1BJ
X0NVU1RPTV9NRVRIT0QgaXMgbm90IHNldApDT05GSUdfQUNQSV9CR1JUPXkKIyBDT05GSUdf
QUNQSV9SRURVQ0VEX0hBUkRXQVJFX09OTFkgaXMgbm90IHNldApDT05GSUdfSEFWRV9BQ1BJ
X0FQRUk9eQpDT05GSUdfSEFWRV9BQ1BJX0FQRUlfTk1JPXkKQ09ORklHX0FDUElfQVBFST15
CkNPTkZJR19BQ1BJX0FQRUlfR0hFUz15CkNPTkZJR19BQ1BJX0FQRUlfUENJRUFFUj15CkNP
TkZJR19BQ1BJX0FQRUlfTUVNT1JZX0ZBSUxVUkU9eQojIENPTkZJR19BQ1BJX0FQRUlfRUlO
SiBpcyBub3Qgc2V0CiMgQ09ORklHX0FDUElfQVBFSV9FUlNUX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX0FDUElfRVhUTE9HPXkKIyBDT05GSUdfUE1JQ19PUFJFR0lPTiBpcyBub3Qgc2V0
CkNPTkZJR19TRkk9eQoKIwojIENQVSBGcmVxdWVuY3kgc2NhbGluZwojCkNPTkZJR19DUFVf
RlJFUT15CkNPTkZJR19DUFVfRlJFUV9HT1ZfQ09NTU9OPXkKQ09ORklHX0NQVV9GUkVRX1NU
QVQ9bQojIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAojIENPTkZJ
R19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRSBpcyBub3Qgc2V0CiMgQ09ORklH
X0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CiMgQ09ORklHX0NQ
VV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJF
UV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09W
X0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CkNPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFO
Q0U9eQpDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCkNPTkZJR19DUFVfRlJFUV9H
T1ZfVVNFUlNQQUNFPW0KQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CkNPTkZJR19D
UFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KCiMKIyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcg
ZHJpdmVycwojCkNPTkZJR19YODZfSU5URUxfUFNUQVRFPXkKQ09ORklHX1g4Nl9QQ0NfQ1BV
RlJFUT1tCkNPTkZJR19YODZfQUNQSV9DUFVGUkVRPW0KQ09ORklHX1g4Nl9BQ1BJX0NQVUZS
RVFfQ1BCPXkKQ09ORklHX1g4Nl9QT1dFUk5PV19LOD1tCkNPTkZJR19YODZfQU1EX0ZSRVFf
U0VOU0lUSVZJVFk9bQpDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTz1tCkNPTkZJR19Y
ODZfUDRfQ0xPQ0tNT0Q9bQoKIwojIHNoYXJlZCBvcHRpb25zCiMKQ09ORklHX1g4Nl9TUEVF
RFNURVBfTElCPW0KCiMKIyBDUFUgSWRsZQojCkNPTkZJR19DUFVfSURMRT15CkNPTkZJR19D
UFVfSURMRV9HT1ZfTEFEREVSPXkKQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKIyBDT05G
SUdfQVJDSF9ORUVEU19DUFVfSURMRV9DT1VQTEVEIGlzIG5vdCBzZXQKQ09ORklHX0lOVEVM
X0lETEU9eQoKIwojIE1lbW9yeSBwb3dlciBzYXZpbmdzCiMKQ09ORklHX0k3MzAwX0lETEVf
SU9BVF9DSEFOTkVMPXkKQ09ORklHX0k3MzAwX0lETEU9bQoKIwojIEJ1cyBvcHRpb25zIChQ
Q0kgZXRjLikKIwpDT05GSUdfUENJPXkKQ09ORklHX1BDSV9ESVJFQ1Q9eQpDT05GSUdfUENJ
X01NQ09ORklHPXkKQ09ORklHX1BDSV9YRU49eQpDT05GSUdfUENJX0RPTUFJTlM9eQojIENP
TkZJR19QQ0lfQ05CMjBMRV9RVUlSSyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lFUE9SVEJVUz15
CkNPTkZJR19IT1RQTFVHX1BDSV9QQ0lFPXkKQ09ORklHX1BDSUVBRVI9eQojIENPTkZJR19Q
Q0lFX0VDUkMgaXMgbm90IHNldApDT05GSUdfUENJRUFFUl9JTkpFQ1Q9bQpDT05GSUdfUENJ
RUFTUE09eQojIENPTkZJR19QQ0lFQVNQTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lF
QVNQTV9ERUZBVUxUPXkKIyBDT05GSUdfUENJRUFTUE1fUE9XRVJTQVZFIGlzIG5vdCBzZXQK
IyBDT05GSUdfUENJRUFTUE1fUEVSRk9STUFOQ0UgaXMgbm90IHNldApDT05GSUdfUENJRV9Q
TUU9eQpDT05GSUdfUENJX0JVU19BRERSX1RfNjRCSVQ9eQpDT05GSUdfUENJX01TST15CiMg
Q09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19QQ0lfUkVBTExPQ19FTkFCTEVf
QVVUTz15CkNPTkZJR19QQ0lfU1RVQj1tCkNPTkZJR19YRU5fUENJREVWX0ZST05URU5EPW0K
Q09ORklHX0hUX0lSUT15CkNPTkZJR19QQ0lfQVRTPXkKQ09ORklHX1BDSV9JT1Y9eQpDT05G
SUdfUENJX1BSST15CkNPTkZJR19QQ0lfUEFTSUQ9eQpDT05GSUdfUENJX0xBQkVMPXkKCiMK
IyBQQ0kgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdfSVNBX0RNQV9BUEk9eQpD
T05GSUdfQU1EX05CPXkKQ09ORklHX1BDQ0FSRD1tCkNPTkZJR19QQ01DSUE9bQpDT05GSUdf
UENNQ0lBX0xPQURfQ0lTPXkKQ09ORklHX0NBUkRCVVM9eQoKIwojIFBDLWNhcmQgYnJpZGdl
cwojCkNPTkZJR19ZRU5UQT1tCkNPTkZJR19ZRU5UQV9PMj15CkNPTkZJR19ZRU5UQV9SSUNP
SD15CkNPTkZJR19ZRU5UQV9UST15CkNPTkZJR19ZRU5UQV9FTkVfVFVORT15CkNPTkZJR19Z
RU5UQV9UT1NISUJBPXkKQ09ORklHX1BENjcyOT1tCkNPTkZJR19JODIwOTI9bQpDT05GSUdf
UENDQVJEX05PTlNUQVRJQz15CkNPTkZJR19IT1RQTFVHX1BDST15CkNPTkZJR19IT1RQTFVH
X1BDSV9BQ1BJPXkKQ09ORklHX0hPVFBMVUdfUENJX0FDUElfSUJNPW0KQ09ORklHX0hPVFBM
VUdfUENJX0NQQ0k9eQpDT05GSUdfSE9UUExVR19QQ0lfQ1BDSV9aVDU1NTA9bQpDT05GSUdf
SE9UUExVR19QQ0lfQ1BDSV9HRU5FUklDPW0KQ09ORklHX0hPVFBMVUdfUENJX1NIUEM9bQoj
IENPTkZJR19SQVBJRElPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9TWVNGQj15CgojCiMgRXhl
Y3V0YWJsZSBmaWxlIGZvcm1hdHMgLyBFbXVsYXRpb25zCiMKQ09ORklHX0JJTkZNVF9FTEY9
eQpDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEY9eQpDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRf
RUxGX0hFQURFUlM9eQpDT05GSUdfQklORk1UX1NDUklQVD15CiMgQ09ORklHX0hBVkVfQU9V
VCBpcyBub3Qgc2V0CkNPTkZJR19CSU5GTVRfTUlTQz1tCkNPTkZJR19DT1JFRFVNUD15CkNP
TkZJR19JQTMyX0VNVUxBVElPTj15CkNPTkZJR19JQTMyX0FPVVQ9eQpDT05GSUdfWDg2X1gz
Mj15CkNPTkZJR19DT01QQVQ9eQpDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UPXkK
Q09ORklHX1NZU1ZJUENfQ09NUEFUPXkKQ09ORklHX0tFWVNfQ09NUEFUPXkKQ09ORklHX1g4
Nl9ERVZfRE1BX09QUz15CkNPTkZJR19QTUNfQVRPTT15CkNPTkZJR19ORVQ9eQpDT05GSUdf
Q09NUEFUX05FVExJTktfTUVTU0FHRVM9eQoKIwojIE5ldHdvcmtpbmcgb3B0aW9ucwojCkNP
TkZJR19QQUNLRVQ9eQpDT05GSUdfUEFDS0VUX0RJQUc9bQpDT05GSUdfVU5JWD15CkNPTkZJ
R19VTklYX0RJQUc9bQpDT05GSUdfWEZSTT15CkNPTkZJR19YRlJNX0FMR089bQpDT05GSUdf
WEZSTV9VU0VSPW0KQ09ORklHX1hGUk1fU1VCX1BPTElDWT15CkNPTkZJR19YRlJNX01JR1JB
VEU9eQojIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldApDT05GSUdfWEZSTV9J
UENPTVA9bQpDT05GSUdfTkVUX0tFWT1tCkNPTkZJR19ORVRfS0VZX01JR1JBVEU9eQpDT05G
SUdfSU5FVD15CkNPTkZJR19JUF9NVUxUSUNBU1Q9eQpDT05GSUdfSVBfQURWQU5DRURfUk9V
VEVSPXkKQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTPXkKQ09ORklHX0lQX01VTFRJUExFX1RB
QkxFUz15CkNPTkZJR19JUF9ST1VURV9NVUxUSVBBVEg9eQpDT05GSUdfSVBfUk9VVEVfVkVS
Qk9TRT15CkNPTkZJR19JUF9ST1VURV9DTEFTU0lEPXkKIyBDT05GSUdfSVBfUE5QIGlzIG5v
dCBzZXQKQ09ORklHX05FVF9JUElQPW0KQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCkNPTkZJ
R19ORVRfSVBfVFVOTkVMPW0KQ09ORklHX05FVF9JUEdSRT1tCkNPTkZJR19ORVRfSVBHUkVf
QlJPQURDQVNUPXkKQ09ORklHX0lQX01ST1VURT15CkNPTkZJR19JUF9NUk9VVEVfTVVMVElQ
TEVfVEFCTEVTPXkKQ09ORklHX0lQX1BJTVNNX1YxPXkKQ09ORklHX0lQX1BJTVNNX1YyPXkK
Q09ORklHX1NZTl9DT09LSUVTPXkKQ09ORklHX05FVF9JUFZUST1tCkNPTkZJR19ORVRfVURQ
X1RVTk5FTD1tCkNPTkZJR19ORVRfRk9VPW0KQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15
CkNPTkZJR19HRU5FVkU9bQpDT05GSUdfSU5FVF9BSD1tCkNPTkZJR19JTkVUX0VTUD1tCkNP
TkZJR19JTkVUX0lQQ09NUD1tCkNPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KQ09ORklHX0lO
RVRfVFVOTkVMPW0KQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCkNPTkZJR19J
TkVUX1hGUk1fTU9ERV9UVU5ORUw9bQpDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCkNP
TkZJR19JTkVUX0xSTz1tCkNPTkZJR19JTkVUX0RJQUc9bQpDT05GSUdfSU5FVF9UQ1BfRElB
Rz1tCkNPTkZJR19JTkVUX1VEUF9ESUFHPW0KQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEPXkK
Q09ORklHX1RDUF9DT05HX0JJQz1tCkNPTkZJR19UQ1BfQ09OR19DVUJJQz15CkNPTkZJR19U
Q1BfQ09OR19XRVNUV09PRD1tCkNPTkZJR19UQ1BfQ09OR19IVENQPW0KQ09ORklHX1RDUF9D
T05HX0hTVENQPW0KQ09ORklHX1RDUF9DT05HX0hZQkxBPW0KQ09ORklHX1RDUF9DT05HX1ZF
R0FTPW0KQ09ORklHX1RDUF9DT05HX1NDQUxBQkxFPW0KQ09ORklHX1RDUF9DT05HX0xQPW0K
Q09ORklHX1RDUF9DT05HX1ZFTk89bQpDT05GSUdfVENQX0NPTkdfWUVBSD1tCkNPTkZJR19U
Q1BfQ09OR19JTExJTk9JUz1tCkNPTkZJR19UQ1BfQ09OR19EQ1RDUD1tCkNPTkZJR19ERUZB
VUxUX0NVQklDPXkKIyBDT05GSUdfREVGQVVMVF9SRU5PIGlzIG5vdCBzZXQKQ09ORklHX0RF
RkFVTFRfVENQX0NPTkc9ImN1YmljIgpDT05GSUdfVENQX01ENVNJRz15CkNPTkZJR19JUFY2
PXkKQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQpDT05GSUdfSVBWNl9ST1VURV9JTkZPPXkK
Q09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQpDT05GSUdfSU5FVDZfQUg9bQpDT05GSUdf
SU5FVDZfRVNQPW0KQ09ORklHX0lORVQ2X0lQQ09NUD1tCkNPTkZJR19JUFY2X01JUDY9eQpD
T05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQpDT05GSUdfSU5FVDZfVFVOTkVMPW0KQ09ORklH
X0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQpDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RV
Tk5FTD1tCkNPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCkNPTkZJR19JTkVUNl9YRlJN
X01PREVfUk9VVEVPUFRJTUlaQVRJT049bQpDT05GSUdfSVBWNl9WVEk9bQpDT05GSUdfSVBW
Nl9TSVQ9bQpDT05GSUdfSVBWNl9TSVRfNlJEPXkKQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZ
UEU9eQpDT05GSUdfSVBWNl9UVU5ORUw9bQpDT05GSUdfSVBWNl9HUkU9bQpDT05GSUdfSVBW
Nl9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdfSVBWNl9TVUJUUkVFUz15CkNPTkZJR19JUFY2
X01ST1VURT15CkNPTkZJR19JUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVM9eQpDT05GSUdf
SVBWNl9QSU1TTV9WMj15CiMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKQ09ORklHX05F
VFdPUktfU0VDTUFSSz15CkNPTkZJR19ORVRfUFRQX0NMQVNTSUZZPXkKIyBDT05GSUdfTkVU
V09SS19QSFlfVElNRVNUQU1QSU5HIGlzIG5vdCBzZXQKQ09ORklHX05FVEZJTFRFUj15CiMg
Q09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19ORVRGSUxURVJfQURW
QU5DRUQ9eQpDT05GSUdfQlJJREdFX05FVEZJTFRFUj1tCgojCiMgQ29yZSBOZXRmaWx0ZXIg
Q29uZmlndXJhdGlvbgojCkNPTkZJR19ORVRGSUxURVJfTkVUTElOSz1tCkNPTkZJR19ORVRG
SUxURVJfTkVUTElOS19BQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0K
Q09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCkNPTkZJR19ORl9DT05OVFJBQ0s9bQpD
T05GSUdfTkZfTE9HX0NPTU1PTj1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTUFSSz15CkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0VDTUFSSz15CkNPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVM9eQpD
T05GSUdfTkZfQ09OTlRSQUNLX1BST0NGUz15CkNPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRT
PXkKQ09ORklHX05GX0NPTk5UUkFDS19USU1FT1VUPXkKQ09ORklHX05GX0NPTk5UUkFDS19U
SU1FU1RBTVA9eQpDT05GSUdfTkZfQ09OTlRSQUNLX0xBQkVMUz15CkNPTkZJR19ORl9DVF9Q
Uk9UT19EQ0NQPW0KQ09ORklHX05GX0NUX1BST1RPX0dSRT1tCkNPTkZJR19ORl9DVF9QUk9U
T19TQ1RQPW0KQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0FNQU5EQT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KQ09ORklHX05GX0NPTk5U
UkFDS19IMzIzPW0KQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQpDT05GSUdfTkZfQ09OTlRS
QUNLX0JST0FEQ0FTVD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU05NUD1tCkNPTkZJR19ORl9DT05OVFJBQ0tfUFBUUD1tCkNPTkZJ
R19ORl9DT05OVFJBQ0tfU0FORT1tCkNPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KQ09ORklH
X05GX0NPTk5UUkFDS19URlRQPW0KQ09ORklHX05GX0NUX05FVExJTks9bQpDT05GSUdfTkZf
Q1RfTkVUTElOS19USU1FT1VUPW0KQ09ORklHX05GX0NUX05FVExJTktfSEVMUEVSPW0KQ09O
RklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFX0NUPXkKQ09ORklHX05GX05BVD1tCkNPTkZJ
R19ORl9OQVRfTkVFREVEPXkKQ09ORklHX05GX05BVF9QUk9UT19EQ0NQPW0KQ09ORklHX05G
X05BVF9QUk9UT19VRFBMSVRFPW0KQ09ORklHX05GX05BVF9QUk9UT19TQ1RQPW0KQ09ORklH
X05GX05BVF9BTUFOREE9bQpDT05GSUdfTkZfTkFUX0ZUUD1tCkNPTkZJR19ORl9OQVRfSVJD
PW0KQ09ORklHX05GX05BVF9TSVA9bQpDT05GSUdfTkZfTkFUX1RGVFA9bQpDT05GSUdfTkZf
TkFUX1JFRElSRUNUPW0KQ09ORklHX05FVEZJTFRFUl9TWU5QUk9YWT1tCkNPTkZJR19ORl9U
QUJMRVM9bQpDT05GSUdfTkZfVEFCTEVTX0lORVQ9bQpDT05GSUdfTkZUX0VYVEhEUj1tCkNP
TkZJR19ORlRfTUVUQT1tCkNPTkZJR19ORlRfQ1Q9bQpDT05GSUdfTkZUX1JCVFJFRT1tCkNP
TkZJR19ORlRfSEFTSD1tCkNPTkZJR19ORlRfQ09VTlRFUj1tCkNPTkZJR19ORlRfTE9HPW0K
Q09ORklHX05GVF9MSU1JVD1tCkNPTkZJR19ORlRfTUFTUT1tCkNPTkZJR19ORlRfUkVESVI9
bQpDT05GSUdfTkZUX05BVD1tCkNPTkZJR19ORlRfUVVFVUU9bQpDT05GSUdfTkZUX1JFSkVD
VD1tCkNPTkZJR19ORlRfUkVKRUNUX0lORVQ9bQpDT05GSUdfTkZUX0NPTVBBVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRBQkxFUz1tCgojCiMgWHRhYmxlcyBjb21iaW5lZCBtb2R1bGVzCiMK
Q09ORklHX05FVEZJTFRFUl9YVF9NQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9DT05OTUFS
Sz1tCkNPTkZJR19ORVRGSUxURVJfWFRfU0VUPW0KCiMKIyBYdGFibGVzIHRhcmdldHMKIwpD
T05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9BVURJVD1tCkNPTkZJR19ORVRGSUxURVJfWFRf
VEFSR0VUX0NIRUNLU1VNPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9
bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCkNPTkZJR19ORVRGSUxU
RVJfWFRfVEFSR0VUX0NPTk5TRUNNQVJLPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRf
Q1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9UQVJHRVRfSEw9bQpDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITUFSSz1tCkNP
TkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0lETEVUSU1FUj1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX0xFRD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xPRz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX05BVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05FVE1BUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfVEFSR0VUX05GTE9HPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1t
CiMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTk9UUkFDSyBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1JBVEVFU1Q9bQpDT05GSUdfTkVURklMVEVSX1hUX1RB
UkdFVF9SRURJUkVDVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RFRT1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RSQUNFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfU0VDTUFSSz1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCkNPTkZJR19ORVRGSUxURVJfWFRfVEFS
R0VUX1RDUE9QVFNUUklQPW0KCiMKIyBYdGFibGVzIG1hdGNoZXMKIwpDT05GSUdfTkVURklM
VEVSX1hUX01BVENIX0FERFJUWVBFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9CUEY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJf
WFRfTUFUQ0hfQ0xVU1RFUj1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9DT05OTEFCRUw9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5M
SU1JVD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQpDT05GSUdfTkVU
RklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
Q1BVPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9ERVZHUk9VUD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1t
CkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRUNOPW0KQ09ORklHX05FVEZJTFRFUl9YVF9N
QVRDSF9FU1A9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCkNPTkZJ
R19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRD
SF9ITD1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBDT01QPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9JUFJBTkdFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFZT
PW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MMlRQPW0KQ09ORklHX05FVEZJTFRFUl9Y
VF9NQVRDSF9MRU5HVEg9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQ09O
RklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X01BUks9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCkNPTkZJR19O
RVRGSUxURVJfWFRfTUFUQ0hfTkZBQ0NUPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9P
U0Y9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KQ09ORklHX05FVEZJTFRF
Ul9YVF9NQVRDSF9QT0xJQ1k9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9
bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQpDT05GSUdfTkVURklMVEVS
X1hUX01BVENIX1FVT1RBPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0K
Q09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCkNPTkZJR19ORVRGSUxURVJfWFRf
TUFUQ0hfUkVDRU5UPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KQ09ORklH
X05FVEZJTFRFUl9YVF9NQVRDSF9TT0NLRVQ9bQpDT05GSUdfTkVURklMVEVSX1hUX01BVENI
X1NUQVRFPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQpDT05GSUdf
TkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCkNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hf
VENQTVNTPW0KQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KQ09ORklHX05FVEZJ
TFRFUl9YVF9NQVRDSF9VMzI9bQpDT05GSUdfSVBfU0VUPW0KQ09ORklHX0lQX1NFVF9NQVg9
MjU2CkNPTkZJR19JUF9TRVRfQklUTUFQX0lQPW0KQ09ORklHX0lQX1NFVF9CSVRNQVBfSVBN
QUM9bQpDT05GSUdfSVBfU0VUX0JJVE1BUF9QT1JUPW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQ
PW0KQ09ORklHX0lQX1NFVF9IQVNIX0lQTUFSSz1tCkNPTkZJR19JUF9TRVRfSEFTSF9JUFBP
UlQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQpDT05GSUdfSVBfU0VUX0hBU0hf
SVBQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCkNPTkZJR19JUF9TRVRfSEFT
SF9ORVRQT1JUTkVUPW0KQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCkNPTkZJR19JUF9TRVRf
SEFTSF9ORVRORVQ9bQpDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVD1tCkNPTkZJR19JUF9T
RVRfSEFTSF9ORVRJRkFDRT1tCkNPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQpDT05GSUdfSVBf
VlM9bQpDT05GSUdfSVBfVlNfSVBWNj15CiMgQ09ORklHX0lQX1ZTX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCgojCiMgSVBWUyB0cmFuc3BvcnQgcHJvdG9j
b2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAojCkNPTkZJR19JUF9WU19QUk9UT19UQ1A9eQpD
T05GSUdfSVBfVlNfUFJPVE9fVURQPXkKQ09ORklHX0lQX1ZTX1BST1RPX0FIX0VTUD15CkNP
TkZJR19JUF9WU19QUk9UT19FU1A9eQpDT05GSUdfSVBfVlNfUFJPVE9fQUg9eQpDT05GSUdf
SVBfVlNfUFJPVE9fU0NUUD15CgojCiMgSVBWUyBzY2hlZHVsZXIKIwpDT05GSUdfSVBfVlNf
UlI9bQpDT05GSUdfSVBfVlNfV1JSPW0KQ09ORklHX0lQX1ZTX0xDPW0KQ09ORklHX0lQX1ZT
X1dMQz1tCkNPTkZJR19JUF9WU19GTz1tCkNPTkZJR19JUF9WU19MQkxDPW0KQ09ORklHX0lQ
X1ZTX0xCTENSPW0KQ09ORklHX0lQX1ZTX0RIPW0KQ09ORklHX0lQX1ZTX1NIPW0KQ09ORklH
X0lQX1ZTX1NFRD1tCkNPTkZJR19JUF9WU19OUT1tCgojCiMgSVBWUyBTSCBzY2hlZHVsZXIK
IwpDT05GSUdfSVBfVlNfU0hfVEFCX0JJVFM9OAoKIwojIElQVlMgYXBwbGljYXRpb24gaGVs
cGVyCiMKQ09ORklHX0lQX1ZTX0ZUUD1tCkNPTkZJR19JUF9WU19ORkNUPXkKQ09ORklHX0lQ
X1ZTX1BFX1NJUD1tCgojCiMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiMKQ09ORklH
X05GX0RFRlJBR19JUFY0PW0KQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KQ09ORklHX05G
X0NPTk5UUkFDS19QUk9DX0NPTVBBVD15CkNPTkZJR19ORl9UQUJMRVNfSVBWND1tCkNPTkZJ
R19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCkNPTkZJR19ORlRfUkVKRUNUX0lQVjQ9bQpDT05G
SUdfTkZfVEFCTEVTX0FSUD1tCkNPTkZJR19ORl9MT0dfQVJQPW0KQ09ORklHX05GX0xPR19J
UFY0PW0KQ09ORklHX05GX1JFSkVDVF9JUFY0PW0KQ09ORklHX05GX05BVF9JUFY0PW0KQ09O
RklHX05GVF9DSEFJTl9OQVRfSVBWND1tCkNPTkZJR19ORl9OQVRfTUFTUVVFUkFERV9JUFY0
PW0KQ09ORklHX05GVF9NQVNRX0lQVjQ9bQojIENPTkZJR19ORlRfUkVESVJfSVBWNCBpcyBu
b3Qgc2V0CkNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCkNPTkZJR19ORl9OQVRfUFJPVE9f
R1JFPW0KQ09ORklHX05GX05BVF9QUFRQPW0KQ09ORklHX05GX05BVF9IMzIzPW0KQ09ORklH
X0lQX05GX0lQVEFCTEVTPW0KQ09ORklHX0lQX05GX01BVENIX0FIPW0KQ09ORklHX0lQX05G
X01BVENIX0VDTj1tCkNPTkZJR19JUF9ORl9NQVRDSF9SUEZJTFRFUj1tCkNPTkZJR19JUF9O
Rl9NQVRDSF9UVEw9bQpDT05GSUdfSVBfTkZfRklMVEVSPW0KQ09ORklHX0lQX05GX1RBUkdF
VF9SRUpFQ1Q9bQpDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KQ09ORklHX0lQX05G
X05BVD1tCkNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19JUF9ORl9U
QVJHRVRfTkVUTUFQPW0KQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkNPTkZJR19J
UF9ORl9NQU5HTEU9bQpDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCkNPTkZJR19J
UF9ORl9UQVJHRVRfRUNOPW0KQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQpDT05GSUdfSVBf
TkZfUkFXPW0KQ09ORklHX0lQX05GX1NFQ1VSSVRZPW0KQ09ORklHX0lQX05GX0FSUFRBQkxF
Uz1tCkNPTkZJR19JUF9ORl9BUlBGSUxURVI9bQpDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1t
CgojCiMgSVB2NjogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KIwpDT05GSUdfTkZfREVGUkFH
X0lQVjY9bQpDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQpDT05GSUdfTkZfVEFCTEVTX0lQ
VjY9bQpDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQpDT05GSUdfTkZUX1JFSkVDVF9J
UFY2PW0KQ09ORklHX05GX1JFSkVDVF9JUFY2PW0KQ09ORklHX05GX0xPR19JUFY2PW0KQ09O
RklHX05GX05BVF9JUFY2PW0KQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCkNPTkZJR19O
Rl9OQVRfTUFTUVVFUkFERV9JUFY2PW0KQ09ORklHX05GVF9NQVNRX0lQVjY9bQojIENPTkZJ
R19ORlRfUkVESVJfSVBWNiBpcyBub3Qgc2V0CkNPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQpD
T05GSUdfSVA2X05GX01BVENIX0FIPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCkNP
TkZJR19JUDZfTkZfTUFUQ0hfSEw9bQpDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9
bQpDT05GSUdfSVA2X05GX01BVENIX01IPW0KQ09ORklHX0lQNl9ORl9NQVRDSF9SUEZJTFRF
Uj1tCkNPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQpDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1t
CkNPTkZJR19JUDZfTkZfRklMVEVSPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0K
Q09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQpDT05GSUdfSVA2X05GX01BTkdMRT1t
CkNPTkZJR19JUDZfTkZfUkFXPW0KQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCkNPTkZJR19J
UDZfTkZfTkFUPW0KQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCkNPTkZJR19J
UDZfTkZfVEFSR0VUX05QVD1tCgojCiMgREVDbmV0OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlv
bgojCkNPTkZJR19ERUNORVRfTkZfR1JBQlVMQVRPUj1tCkNPTkZJR19ORl9UQUJMRVNfQlJJ
REdFPW0KQ09ORklHX05GVF9CUklER0VfTUVUQT1tCkNPTkZJR19ORlRfQlJJREdFX1JFSkVD
VD1tCkNPTkZJR19ORl9MT0dfQlJJREdFPW0KQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1t
CkNPTkZJR19CUklER0VfRUJUX0JST1VURT1tCkNPTkZJR19CUklER0VfRUJUX1RfRklMVEVS
PW0KQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQpDT05GSUdfQlJJREdFX0VCVF84MDJfMz1t
CkNPTkZJR19CUklER0VfRUJUX0FNT05HPW0KQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KQ09O
RklHX0JSSURHRV9FQlRfSVA9bQpDT05GSUdfQlJJREdFX0VCVF9JUDY9bQpDT05GSUdfQlJJ
REdFX0VCVF9MSU1JVD1tCkNPTkZJR19CUklER0VfRUJUX01BUks9bQpDT05GSUdfQlJJREdF
X0VCVF9QS1RUWVBFPW0KQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KQ09ORklHX0JSSURHRV9F
QlRfVkxBTj1tCkNPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KQ09ORklHX0JSSURHRV9F
QlRfRE5BVD1tCkNPTkZJR19CUklER0VfRUJUX01BUktfVD1tCkNPTkZJR19CUklER0VfRUJU
X1JFRElSRUNUPW0KQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCkNPTkZJR19CUklER0VfRUJU
X0xPRz1tCkNPTkZJR19CUklER0VfRUJUX05GTE9HPW0KQ09ORklHX0lQX0RDQ1A9bQpDT05G
SUdfSU5FVF9EQ0NQX0RJQUc9bQoKIwojIERDQ1AgQ0NJRHMgQ29uZmlndXJhdGlvbgojCiMg
Q09ORklHX0lQX0RDQ1BfQ0NJRDJfREVCVUcgaXMgbm90IHNldApDT05GSUdfSVBfRENDUF9D
Q0lEMz15CiMgQ09ORklHX0lQX0RDQ1BfQ0NJRDNfREVCVUcgaXMgbm90IHNldApDT05GSUdf
SVBfRENDUF9URlJDX0xJQj15CgojCiMgRENDUCBLZXJuZWwgSGFja2luZwojCiMgQ09ORklH
X0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldApDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCkNPTkZJ
R19JUF9TQ1RQPW0KQ09ORklHX05FVF9TQ1RQUFJPQkU9bQojIENPTkZJR19TQ1RQX0RCR19P
QkpDTlQgaXMgbm90IHNldApDT05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX01ENT15
CiMgQ09ORklHX1NDVFBfREVGQVVMVF9DT09LSUVfSE1BQ19TSEExIGlzIG5vdCBzZXQKIyBD
T05GSUdfU0NUUF9ERUZBVUxUX0NPT0tJRV9ITUFDX05PTkUgaXMgbm90IHNldApDT05GSUdf
U0NUUF9DT09LSUVfSE1BQ19NRDU9eQpDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkK
Q09ORklHX1JEUz1tCkNPTkZJR19SRFNfUkRNQT1tCkNPTkZJR19SRFNfVENQPW0KIyBDT05G
SUdfUkRTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX1RJUEM9bQpDT05GSUdfVElQQ19NRURJ
QV9JQj15CkNPTkZJR19USVBDX01FRElBX1VEUD15CkNPTkZJR19BVE09bQpDT05GSUdfQVRN
X0NMSVA9bQojIENPTkZJR19BVE1fQ0xJUF9OT19JQ01QIGlzIG5vdCBzZXQKQ09ORklHX0FU
TV9MQU5FPW0KQ09ORklHX0FUTV9NUE9BPW0KQ09ORklHX0FUTV9CUjI2ODQ9bQojIENPTkZJ
R19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKQ09ORklHX0wyVFA9bQpDT05GSUdf
TDJUUF9ERUJVR0ZTPW0KQ09ORklHX0wyVFBfVjM9eQpDT05GSUdfTDJUUF9JUD1tCkNPTkZJ
R19MMlRQX0VUSD1tCkNPTkZJR19TVFA9bQpDT05GSUdfR0FSUD1tCkNPTkZJR19NUlA9bQpD
T05GSUdfQlJJREdFPW0KQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HPXkKQ09ORklHX0JS
SURHRV9WTEFOX0ZJTFRFUklORz15CkNPTkZJR19IQVZFX05FVF9EU0E9eQpDT05GSUdfVkxB
Tl84MDIxUT1tCkNPTkZJR19WTEFOXzgwMjFRX0dWUlA9eQpDT05GSUdfVkxBTl84MDIxUV9N
VlJQPXkKQ09ORklHX0RFQ05FVD1tCiMgQ09ORklHX0RFQ05FVF9ST1VURVIgaXMgbm90IHNl
dApDT05GSUdfTExDPW0KQ09ORklHX0xMQzI9bQpDT05GSUdfSVBYPW0KIyBDT05GSUdfSVBY
X0lOVEVSTiBpcyBub3Qgc2V0CkNPTkZJR19BVEFMSz1tCkNPTkZJR19ERVZfQVBQTEVUQUxL
PW0KQ09ORklHX0lQRERQPW0KQ09ORklHX0lQRERQX0VOQ0FQPXkKIyBDT05GSUdfWDI1IGlz
IG5vdCBzZXQKQ09ORklHX0xBUEI9bQpDT05GSUdfUEhPTkVUPW0KQ09ORklHXzZMT1dQQU49
bQpDT05GSUdfNkxPV1BBTl9OSEM9bQpDT05GSUdfNkxPV1BBTl9OSENfREVTVD1tCkNPTkZJ
R182TE9XUEFOX05IQ19GUkFHTUVOVD1tCkNPTkZJR182TE9XUEFOX05IQ19IT1A9bQpDT05G
SUdfNkxPV1BBTl9OSENfSVBWNj1tCkNPTkZJR182TE9XUEFOX05IQ19NT0JJTElUWT1tCkNP
TkZJR182TE9XUEFOX05IQ19ST1VUSU5HPW0KQ09ORklHXzZMT1dQQU5fTkhDX1VEUD1tCkNP
TkZJR19JRUVFODAyMTU0PW0KQ09ORklHX0lFRUU4MDIxNTRfU09DS0VUPW0KQ09ORklHX0lF
RUU4MDIxNTRfNkxPV1BBTj1tCiMgQ09ORklHX01BQzgwMjE1NCBpcyBub3Qgc2V0CkNPTkZJ
R19ORVRfU0NIRUQ9eQoKIwojIFF1ZXVlaW5nL1NjaGVkdWxpbmcKIwpDT05GSUdfTkVUX1ND
SF9DQlE9bQpDT05GSUdfTkVUX1NDSF9IVEI9bQpDT05GSUdfTkVUX1NDSF9IRlNDPW0KQ09O
RklHX05FVF9TQ0hfQVRNPW0KQ09ORklHX05FVF9TQ0hfUFJJTz1tCkNPTkZJR19ORVRfU0NI
X01VTFRJUT1tCkNPTkZJR19ORVRfU0NIX1JFRD1tCkNPTkZJR19ORVRfU0NIX1NGQj1tCkNP
TkZJR19ORVRfU0NIX1NGUT1tCkNPTkZJR19ORVRfU0NIX1RFUUw9bQpDT05GSUdfTkVUX1ND
SF9UQkY9bQpDT05GSUdfTkVUX1NDSF9HUkVEPW0KQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0K
Q09ORklHX05FVF9TQ0hfTkVURU09bQpDT05GSUdfTkVUX1NDSF9EUlI9bQpDT05GSUdfTkVU
X1NDSF9NUVBSSU89bQpDT05GSUdfTkVUX1NDSF9DSE9LRT1tCkNPTkZJR19ORVRfU0NIX1FG
UT1tCkNPTkZJR19ORVRfU0NIX0NPREVMPW0KQ09ORklHX05FVF9TQ0hfRlFfQ09ERUw9bQpD
T05GSUdfTkVUX1NDSF9GUT1tCkNPTkZJR19ORVRfU0NIX0hIRj1tCkNPTkZJR19ORVRfU0NI
X1BJRT1tCkNPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQpDT05GSUdfTkVUX1NDSF9QTFVHPW0K
CiMKIyBDbGFzc2lmaWNhdGlvbgojCkNPTkZJR19ORVRfQ0xTPXkKQ09ORklHX05FVF9DTFNf
QkFTSUM9bQpDT05GSUdfTkVUX0NMU19UQ0lOREVYPW0KQ09ORklHX05FVF9DTFNfUk9VVEU0
PW0KQ09ORklHX05FVF9DTFNfRlc9bQpDT05GSUdfTkVUX0NMU19VMzI9bQpDT05GSUdfQ0xT
X1UzMl9QRVJGPXkKQ09ORklHX0NMU19VMzJfTUFSSz15CkNPTkZJR19ORVRfQ0xTX1JTVlA9
bQpDT05GSUdfTkVUX0NMU19SU1ZQNj1tCkNPTkZJR19ORVRfQ0xTX0ZMT1c9bQpDT05GSUdf
TkVUX0NMU19DR1JPVVA9bQpDT05GSUdfTkVUX0NMU19CUEY9bQpDT05GSUdfTkVUX0VNQVRD
SD15CkNPTkZJR19ORVRfRU1BVENIX1NUQUNLPTMyCkNPTkZJR19ORVRfRU1BVENIX0NNUD1t
CkNPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KQ09ORklHX05FVF9FTUFUQ0hfVTMyPW0KQ09O
RklHX05FVF9FTUFUQ0hfTUVUQT1tCkNPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQpDT05GSUdf
TkVUX0VNQVRDSF9DQU5JRD1tCkNPTkZJR19ORVRfRU1BVENIX0lQU0VUPW0KQ09ORklHX05F
VF9DTFNfQUNUPXkKQ09ORklHX05FVF9BQ1RfUE9MSUNFPW0KQ09ORklHX05FVF9BQ1RfR0FD
VD1tCkNPTkZJR19HQUNUX1BST0I9eQpDT05GSUdfTkVUX0FDVF9NSVJSRUQ9bQpDT05GSUdf
TkVUX0FDVF9JUFQ9bQpDT05GSUdfTkVUX0FDVF9OQVQ9bQpDT05GSUdfTkVUX0FDVF9QRURJ
VD1tCkNPTkZJR19ORVRfQUNUX1NJTVA9bQpDT05GSUdfTkVUX0FDVF9TS0JFRElUPW0KQ09O
RklHX05FVF9BQ1RfQ1NVTT1tCkNPTkZJR19ORVRfQUNUX1ZMQU49bQpDT05GSUdfTkVUX0FD
VF9CUEY9bQpDT05GSUdfTkVUX0FDVF9DT05OTUFSSz1tCkNPTkZJR19ORVRfQ0xTX0lORD15
CkNPTkZJR19ORVRfU0NIX0ZJRk89eQpDT05GSUdfRENCPXkKQ09ORklHX0ROU19SRVNPTFZF
Uj1tCkNPTkZJR19CQVRNQU5fQURWPW0KQ09ORklHX0JBVE1BTl9BRFZfQkxBPXkKQ09ORklH
X0JBVE1BTl9BRFZfREFUPXkKQ09ORklHX0JBVE1BTl9BRFZfTkM9eQpDT05GSUdfQkFUTUFO
X0FEVl9NQ0FTVD15CiMgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgaXMgbm90IHNldApDT05G
SUdfT1BFTlZTV0lUQ0g9bQpDT05GSUdfT1BFTlZTV0lUQ0hfR1JFPW0KQ09ORklHX09QRU5W
U1dJVENIX1ZYTEFOPW0KQ09ORklHX09QRU5WU1dJVENIX0dFTkVWRT1tCkNPTkZJR19WU09D
S0VUUz1tCkNPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUUz1tCkNPTkZJR19ORVRMSU5LX01N
QVA9eQpDT05GSUdfTkVUTElOS19ESUFHPW0KQ09ORklHX01QTFM9eQpDT05GSUdfTkVUX01Q
TFNfR1NPPXkKQ09ORklHX01QTFNfUk9VVElORz1tCiMgQ09ORklHX0hTUiBpcyBub3Qgc2V0
CiMgQ09ORklHX05FVF9TV0lUQ0hERVYgaXMgbm90IHNldApDT05GSUdfUlBTPXkKQ09ORklH
X1JGU19BQ0NFTD15CkNPTkZJR19YUFM9eQpDT05GSUdfQ0dST1VQX05FVF9QUklPPXkKQ09O
RklHX0NHUk9VUF9ORVRfQ0xBU1NJRD15CkNPTkZJR19ORVRfUlhfQlVTWV9QT0xMPXkKQ09O
RklHX0JRTD15CkNPTkZJR19CUEZfSklUPXkKQ09ORklHX05FVF9GTE9XX0xJTUlUPXkKCiMK
IyBOZXR3b3JrIHRlc3RpbmcKIwpDT05GSUdfTkVUX1BLVEdFTj1tCiMgQ09ORklHX05FVF9U
Q1BQUk9CRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfRFJPUF9NT05JVE9SPW0KQ09ORklHX0hB
TVJBRElPPXkKCiMKIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCiMKQ09ORklHX0FYMjU9bQoj
IENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldApDT05GSUdfTkVUUk9NPW0KQ09O
RklHX1JPU0U9bQoKIwojIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKIwpDT05GSUdf
TUtJU1M9bQpDT05GSUdfNlBBQ0s9bQpDT05GSUdfQlBRRVRIRVI9bQpDT05GSUdfQkFZQ09N
X1NFUl9GRFg9bQpDT05GSUdfQkFZQ09NX1NFUl9IRFg9bQpDT05GSUdfQkFZQ09NX1BBUj1t
CkNPTkZJR19ZQU09bQpDT05GSUdfQ0FOPW0KQ09ORklHX0NBTl9SQVc9bQpDT05GSUdfQ0FO
X0JDTT1tCkNPTkZJR19DQU5fR1c9bQoKIwojIENBTiBEZXZpY2UgRHJpdmVycwojCkNPTkZJ
R19DQU5fVkNBTj1tCkNPTkZJR19DQU5fU0xDQU49bQpDT05GSUdfQ0FOX0RFVj1tCkNPTkZJ
R19DQU5fQ0FMQ19CSVRUSU1JTkc9eQojIENPTkZJR19DQU5fTEVEUyBpcyBub3Qgc2V0CkNP
TkZJR19DQU5fU0pBMTAwMD1tCkNPTkZJR19DQU5fU0pBMTAwMF9JU0E9bQojIENPTkZJR19D
QU5fU0pBMTAwMF9QTEFURk9STSBpcyBub3Qgc2V0CkNPTkZJR19DQU5fRU1TX1BDTUNJQT1t
CkNPTkZJR19DQU5fRU1TX1BDST1tCkNPTkZJR19DQU5fUEVBS19QQ01DSUE9bQpDT05GSUdf
Q0FOX1BFQUtfUENJPW0KQ09ORklHX0NBTl9QRUFLX1BDSUVDPXkKQ09ORklHX0NBTl9LVkFT
RVJfUENJPW0KQ09ORklHX0NBTl9QTFhfUENJPW0KIyBDT05GSUdfQ0FOX0NfQ0FOIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FOX01fQ0FOIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0FOX0NDNzcw
IGlzIG5vdCBzZXQKCiMKIyBDQU4gU1BJIGludGVyZmFjZXMKIwojIENPTkZJR19DQU5fTUNQ
MjUxWCBpcyBub3Qgc2V0CgojCiMgQ0FOIFVTQiBpbnRlcmZhY2VzCiMKQ09ORklHX0NBTl9F
TVNfVVNCPW0KQ09ORklHX0NBTl9FU0RfVVNCMj1tCkNPTkZJR19DQU5fR1NfVVNCPW0KQ09O
RklHX0NBTl9LVkFTRVJfVVNCPW0KQ09ORklHX0NBTl9QRUFLX1VTQj1tCkNPTkZJR19DQU5f
OERFVl9VU0I9bQpDT05GSUdfQ0FOX1NPRlRJTkc9bQpDT05GSUdfQ0FOX1NPRlRJTkdfQ1M9
bQojIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19JUkRBPW0K
CiMKIyBJckRBIHByb3RvY29scwojCkNPTkZJR19JUkxBTj1tCkNPTkZJR19JUk5FVD1tCkNP
TkZJR19JUkNPTU09bQojIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKCiMKIyBJckRB
IG9wdGlvbnMKIwpDT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQpDT05GSUdfSVJEQV9G
QVNUX1JSPXkKIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CgojCiMgSW5mcmFyZWQt
cG9ydCBkZXZpY2UgZHJpdmVycwojCgojCiMgU0lSIGRldmljZSBkcml2ZXJzCiMKQ09ORklH
X0lSVFRZX1NJUj1tCgojCiMgRG9uZ2xlIHN1cHBvcnQKIwpDT05GSUdfRE9OR0xFPXkKQ09O
RklHX0VTSV9ET05HTEU9bQpDT05GSUdfQUNUSVNZU19ET05HTEU9bQpDT05GSUdfVEVLUkFN
X0RPTkdMRT1tCkNPTkZJR19UT0lNMzIzMl9ET05HTEU9bQpDT05GSUdfTElURUxJTktfRE9O
R0xFPW0KQ09ORklHX01BNjAwX0RPTkdMRT1tCkNPTkZJR19HSVJCSUxfRE9OR0xFPW0KQ09O
RklHX01DUDIxMjBfRE9OR0xFPW0KQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KQ09ORklH
X0FDVDIwMExfRE9OR0xFPW0KQ09ORklHX0tJTkdTVU5fRE9OR0xFPW0KQ09ORklHX0tTREFa
WkxFX0RPTkdMRT1tCkNPTkZJR19LUzk1OV9ET05HTEU9bQoKIwojIEZJUiBkZXZpY2UgZHJp
dmVycwojCkNPTkZJR19VU0JfSVJEQT1tCkNPTkZJR19TSUdNQVRFTF9GSVI9bQpDT05GSUdf
TlNDX0ZJUj1tCkNPTkZJR19XSU5CT05EX0ZJUj1tCkNPTkZJR19TTUNfSVJDQ19GSVI9bQpD
T05GSUdfQUxJX0ZJUj1tCkNPTkZJR19WTFNJX0ZJUj1tCkNPTkZJR19WSUFfRklSPW0KQ09O
RklHX01DU19GSVI9bQpDT05GSUdfQlQ9bQpDT05GSUdfQlRfQlJFRFI9eQpDT05GSUdfQlRf
UkZDT01NPW0KQ09ORklHX0JUX1JGQ09NTV9UVFk9eQpDT05GSUdfQlRfQk5FUD1tCkNPTkZJ
R19CVF9CTkVQX01DX0ZJTFRFUj15CkNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CkNP
TkZJR19CVF9DTVRQPW0KQ09ORklHX0JUX0hJRFA9bQpDT05GSUdfQlRfTEU9eQpDT05GSUdf
QlRfNkxPV1BBTj1tCiMgQ09ORklHX0JUX1NFTEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0JU
X0RFQlVHRlM9eQoKIwojIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwojCkNPTkZJR19CVF9J
TlRFTD1tCkNPTkZJR19CVF9CQ009bQpDT05GSUdfQlRfSENJQlRVU0I9bQpDT05GSUdfQlRf
SENJQlRVU0JfQkNNPXkKQ09ORklHX0JUX0hDSUJUU0RJTz1tCkNPTkZJR19CVF9IQ0lVQVJU
PW0KQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQpDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKQ09O
RklHX0JUX0hDSVVBUlRfQVRIM0s9eQpDT05GSUdfQlRfSENJVUFSVF9MTD15CkNPTkZJR19C
VF9IQ0lVQVJUXzNXSVJFPXkKQ09ORklHX0JUX0hDSVVBUlRfSU5URUw9eQpDT05GSUdfQlRf
SENJVUFSVF9CQ009eQpDT05GSUdfQlRfSENJQkNNMjAzWD1tCkNPTkZJR19CVF9IQ0lCUEEx
MFg9bQpDT05GSUdfQlRfSENJQkZVU0I9bQpDT05GSUdfQlRfSENJRFRMMT1tCkNPTkZJR19C
VF9IQ0lCVDNDPW0KQ09ORklHX0JUX0hDSUJMVUVDQVJEPW0KIyBDT05GSUdfQlRfSENJQlRV
QVJUIGlzIG5vdCBzZXQKQ09ORklHX0JUX0hDSVZIQ0k9bQpDT05GSUdfQlRfTVJWTD1tCkNP
TkZJR19CVF9NUlZMX1NESU89bQpDT05GSUdfQlRfQVRIM0s9bQpDT05GSUdfQUZfUlhSUEM9
bQojIENPTkZJR19BRl9SWFJQQ19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19SWEtBRD1tCkNP
TkZJR19GSUJfUlVMRVM9eQpDT05GSUdfV0lSRUxFU1M9eQpDT05GSUdfV0lSRUxFU1NfRVhU
PXkKQ09ORklHX1dFWFRfQ09SRT15CkNPTkZJR19XRVhUX1BST0M9eQpDT05GSUdfV0VYVF9T
UFk9eQpDT05GSUdfV0VYVF9QUklWPXkKQ09ORklHX0NGRzgwMjExPW0KIyBDT05GSUdfTkw4
MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0RFVkVMT1BFUl9X
QVJOSU5HUyBpcyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qg
c2V0CiMgQ09ORklHX0NGRzgwMjExX0NFUlRJRklDQVRJT05fT05VUyBpcyBub3Qgc2V0CkNP
TkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKIyBDT05GSUdfQ0ZHODAyMTFfREVCVUdGUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIGlzIG5vdCBzZXQK
Q09ORklHX0NGRzgwMjExX1dFWFQ9eQpDT05GSUdfQ0ZHODAyMTFfV0VYVF9FWFBPUlQ9eQpD
T05GSUdfTElCODAyMTE9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfV0VQPW0KQ09ORklHX0xJ
QjgwMjExX0NSWVBUX0NDTVA9bQpDT05GSUdfTElCODAyMTFfQ1JZUFRfVEtJUD1tCiMgQ09O
RklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01BQzgwMjExPW0KQ09ORklH
X01BQzgwMjExX0hBU19SQz15CkNPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CkNPTkZJ
R19NQUM4MDIxMV9SQ19NSU5TVFJFTF9IVD15CiMgQ09ORklHX01BQzgwMjExX1JDX01JTlNU
UkVMX1ZIVCBpcyBub3Qgc2V0CkNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVM
PXkKQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFQ9Im1pbnN0cmVsX2h0IgpDT05GSUdfTUFD
ODAyMTFfTUVTSD15CkNPTkZJR19NQUM4MDIxMV9MRURTPXkKIyBDT05GSUdfTUFDODAyMTFf
REVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX01FU1NBR0VfVFJBQ0lORyBp
cyBub3Qgc2V0CiMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldApDT05G
SUdfV0lNQVg9bQpDT05GSUdfV0lNQVhfREVCVUdfTEVWRUw9OApDT05GSUdfUkZLSUxMPW0K
Q09ORklHX1JGS0lMTF9MRURTPXkKQ09ORklHX1JGS0lMTF9JTlBVVD15CiMgQ09ORklHX1JG
S0lMTF9HUElPIGlzIG5vdCBzZXQKQ09ORklHX05FVF85UD1tCkNPTkZJR19ORVRfOVBfVklS
VElPPW0KQ09ORklHX05FVF85UF9SRE1BPW0KIyBDT05GSUdfTkVUXzlQX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfQ0FJRiBpcyBub3Qgc2V0CkNPTkZJR19DRVBIX0xJQj1tCiMgQ09O
RklHX0NFUEhfTElCX1BSRVRUWURFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQ0VQSF9MSUJf
VVNFX0ROU19SRVNPTFZFUiBpcyBub3Qgc2V0CkNPTkZJR19ORkM9bQpDT05GSUdfTkZDX0RJ
R0lUQUw9bQojIENPTkZJR19ORkNfTkNJIGlzIG5vdCBzZXQKQ09ORklHX05GQ19IQ0k9bQoj
IENPTkZJR19ORkNfU0hETEMgaXMgbm90IHNldAoKIwojIE5lYXIgRmllbGQgQ29tbXVuaWNh
dGlvbiAoTkZDKSBkZXZpY2VzCiMKQ09ORklHX05GQ19QTjUzMz1tCiMgQ09ORklHX05GQ19U
UkY3OTcwQSBpcyBub3Qgc2V0CkNPTkZJR19ORkNfTUVJX1BIWT1tCkNPTkZJR19ORkNfU0lN
PW0KQ09ORklHX05GQ19QT1JUMTAwPW0KQ09ORklHX05GQ19QTjU0ND1tCkNPTkZJR19ORkNf
UE41NDRfTUVJPW0KIyBDT05GSUdfTkZDX01JQ1JPUkVBRCBpcyBub3Qgc2V0CiMgQ09ORklH
X05GQ19TVDIxTkZDQSBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0JQRl9KSVQ9eQoKIwojIERl
dmljZSBEcml2ZXJzCiMKCiMKIyBHZW5lcmljIERyaXZlciBPcHRpb25zCiMKQ09ORklHX1VF
VkVOVF9IRUxQRVI9eQpDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCkNPTkZJR19ERVZU
TVBGUz15CiMgQ09ORklHX0RFVlRNUEZTX01PVU5UIGlzIG5vdCBzZXQKQ09ORklHX1NUQU5E
QUxPTkU9eQpDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CkNPTkZJR19GV19MT0FE
RVI9eQojIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldApDT05GSUdfRVhU
UkFfRklSTVdBUkU9IiIKQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUj15CiMgQ09ORklH
X0ZXX0xPQURFUl9VU0VSX0hFTFBFUl9GQUxMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19XQU5U
X0RFVl9DT1JFRFVNUD15CkNPTkZJR19BTExPV19ERVZfQ09SRURVTVA9eQpDT05GSUdfREVW
X0NPUkVEVU1QPXkKIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfREVWUkVTIGlzIG5vdCBzZXQKQ09ORklHX1NZU19IWVBFUlZJU09SPXkKIyBDT05G
SUdfR0VORVJJQ19DUFVfREVWSUNFUyBpcyBub3Qgc2V0CkNPTkZJR19HRU5FUklDX0NQVV9B
VVRPUFJPQkU9eQpDT05GSUdfUkVHTUFQPXkKQ09ORklHX1JFR01BUF9JMkM9bQpDT05GSUdf
UkVHTUFQX1NQST1tCkNPTkZJR19ETUFfU0hBUkVEX0JVRkZFUj15CiMgQ09ORklHX0ZFTkNF
X1RSQUNFIGlzIG5vdCBzZXQKCiMKIyBCdXMgZGV2aWNlcwojCkNPTkZJR19DT05ORUNUT1I9
eQpDT05GSUdfUFJPQ19FVkVOVFM9eQpDT05GSUdfTVREPW0KIyBDT05GSUdfTVREX1RFU1RT
IGlzIG5vdCBzZXQKQ09ORklHX01URF9SRURCT09UX1BBUlRTPW0KQ09ORklHX01URF9SRURC
T09UX0RJUkVDVE9SWV9CTE9DSz0tMQojIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFM
TE9DQVRFRCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldApDT05G
SUdfTVREX0FSN19QQVJUUz1tCgojCiMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBM
YXllcnMKIwpDT05GSUdfTVREX0JMS0RFVlM9bQpDT05GSUdfTVREX0JMT0NLPW0KQ09ORklH
X01URF9CTE9DS19STz1tCkNPTkZJR19GVEw9bQpDT05GSUdfTkZUTD1tCkNPTkZJR19ORlRM
X1JXPXkKQ09ORklHX0lORlRMPW0KQ09ORklHX1JGRF9GVEw9bQpDT05GSUdfU1NGREM9bQoj
IENPTkZJR19TTV9GVEwgaXMgbm90IHNldApDT05GSUdfTVREX09PUFM9bQpDT05GSUdfTVRE
X1NXQVA9bQojIENPTkZJR19NVERfUEFSVElUSU9ORURfTUFTVEVSIGlzIG5vdCBzZXQKCiMK
IyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwojCkNPTkZJR19NVERfQ0ZJPW0KQ09ORklH
X01URF9KRURFQ1BST0JFPW0KQ09ORklHX01URF9HRU5fUFJPQkU9bQojIENPTkZJR19NVERf
Q0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8x
PXkKQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKQ09ORklHX01URF9NQVBfQkFOS19X
SURUSF80PXkKIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAojIENP
TkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAojIENPTkZJR19NVERfTUFQ
X0JBTktfV0lEVEhfMzIgaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JMT15CkNPTkZJR19N
VERfQ0ZJX0kyPXkKIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9DRklfSTggaXMgbm90IHNldApDT05GSUdfTVREX0NGSV9JTlRFTEVYVD1tCkNPTkZJR19N
VERfQ0ZJX0FNRFNURD1tCkNPTkZJR19NVERfQ0ZJX1NUQUE9bQpDT05GSUdfTVREX0NGSV9V
VElMPW0KQ09ORklHX01URF9SQU09bQpDT05GSUdfTVREX1JPTT1tCkNPTkZJR19NVERfQUJT
RU5UPW0KCiMKIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiMKQ09ORklHX01U
RF9DT01QTEVYX01BUFBJTkdTPXkKQ09ORklHX01URF9QSFlTTUFQPW0KIyBDT05GSUdfTVRE
X1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKQ09ORklHX01URF9TQkNfR1hYPW0KIyBDT05G
SUdfTVREX0FNRDc2WFJPTSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9JQ0hYUk9NIGlzIG5v
dCBzZXQKIyBDT05GSUdfTVREX0VTQjJST00gaXMgbm90IHNldAojIENPTkZJR19NVERfQ0s4
MDRYUk9NIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX1NDQjJfRkxBU0ggaXMgbm90IHNldApD
T05GSUdfTVREX05FVHRlbD1tCiMgQ09ORklHX01URF9MNDQwR1ggaXMgbm90IHNldApDT05G
SUdfTVREX1BDST1tCkNPTkZJR19NVERfUENNQ0lBPW0KIyBDT05GSUdfTVREX1BDTUNJQV9B
Tk9OWU1PVVMgaXMgbm90IHNldAojIENPTkZJR19NVERfR1BJT19BRERSIGlzIG5vdCBzZXQK
Q09ORklHX01URF9JTlRFTF9WUl9OT1I9bQpDT05GSUdfTVREX1BMQVRSQU09bQojIENPTkZJ
R19NVERfTEFUQ0hfQUREUiBpcyBub3Qgc2V0CgojCiMgU2VsZi1jb250YWluZWQgTVREIGRl
dmljZSBkcml2ZXJzCiMKIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CkNPTkZJR19N
VERfREFUQUZMQVNIPW0KIyBDT05GSUdfTVREX0RBVEFGTEFTSF9XUklURV9WRVJJRlkgaXMg
bm90IHNldAojIENPTkZJR19NVERfREFUQUZMQVNIX09UUCBpcyBub3Qgc2V0CkNPTkZJR19N
VERfTTI1UDgwPW0KQ09ORklHX01URF9TU1QyNUw9bQpDT05GSUdfTVREX1NMUkFNPW0KQ09O
RklHX01URF9QSFJBTT1tCkNPTkZJR19NVERfTVREUkFNPW0KQ09ORklHX01URFJBTV9UT1RB
TF9TSVpFPTQwOTYKQ09ORklHX01URFJBTV9FUkFTRV9TSVpFPTEyOApDT05GSUdfTVREX0JM
T0NLMk1URD1tCgojCiMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCiMKIyBDT05GSUdf
TVREX0RPQ0czIGlzIG5vdCBzZXQKQ09ORklHX01URF9OQU5EX0VDQz1tCiMgQ09ORklHX01U
RF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldApDT05GSUdfTVREX05BTkQ9bQpDT05GSUdfTVRE
X05BTkRfQkNIPW0KQ09ORklHX01URF9OQU5EX0VDQ19CQ0g9eQpDT05GSUdfTVREX1NNX0NP
TU1PTj1tCiMgQ09ORklHX01URF9OQU5EX0RFTkFMSSBpcyBub3Qgc2V0CiMgQ09ORklHX01U
RF9OQU5EX0dQSU8gaXMgbm90IHNldAojIENPTkZJR19NVERfTkFORF9PTUFQX0JDSF9CVUlM
RCBpcyBub3Qgc2V0CkNPTkZJR19NVERfTkFORF9JRFM9bQpDT05GSUdfTVREX05BTkRfUklD
T0g9bQpDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCiMgQ09ORklHX01URF9OQU5EX0RJ
U0tPTkNISVBfUFJPQkVfQURWQU5DRUQgaXMgbm90IHNldApDT05GSUdfTVREX05BTkRfRElT
S09OQ0hJUF9QUk9CRV9BRERSRVNTPTAKIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9C
QlRXUklURSBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9OQU5EX0RPQ0c0IGlzIG5vdCBzZXQK
Q09ORklHX01URF9OQU5EX0NBRkU9bQpDT05GSUdfTVREX05BTkRfTkFORFNJTT1tCiMgQ09O
RklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdfTVREX05BTkRfSElT
STUwNCBpcyBub3Qgc2V0CkNPTkZJR19NVERfT05FTkFORD1tCkNPTkZJR19NVERfT05FTkFO
RF9WRVJJRllfV1JJVEU9eQojIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKQ09ORklHX01URF9PTkVO
QU5EXzJYX1BST0dSQU09eQoKIwojIExQRERSICYgTFBERFIyIFBDTSBtZW1vcnkgZHJpdmVy
cwojCkNPTkZJR19NVERfTFBERFI9bQpDT05GSUdfTVREX1FJTkZPX1BST0JFPW0KQ09ORklH
X01URF9TUElfTk9SPW0KQ09ORklHX01URF9TUElfTk9SX1VTRV80S19TRUNUT1JTPXkKQ09O
RklHX01URF9VQkk9bQpDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgpDT05GSUdf
TVREX1VCSV9CRUJfTElNSVQ9MjAKIyBDT05GSUdfTVREX1VCSV9GQVNUTUFQIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldApDT05GSUdfTVREX1VCSV9C
TE9DSz15CkNPTkZJR19BUkNIX01JR0hUX0hBVkVfUENfUEFSUE9SVD15CkNPTkZJR19QQVJQ
T1JUPW0KQ09ORklHX1BBUlBPUlRfUEM9bQpDT05GSUdfUEFSUE9SVF9TRVJJQUw9bQojIENP
TkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAojIENPTkZJR19QQVJQT1JUX1BDX1NV
UEVSSU8gaXMgbm90IHNldApDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQojIENPTkZJR19Q
QVJQT1JUX0dTQyBpcyBub3Qgc2V0CiMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qg
c2V0CkNPTkZJR19QQVJQT1JUXzEyODQ9eQpDT05GSUdfUEFSUE9SVF9OT1RfUEM9eQpDT05G
SUdfUE5QPXkKIyBDT05GSUdfUE5QX0RFQlVHX01FU1NBR0VTIGlzIG5vdCBzZXQKCiMKIyBQ
cm90b2NvbHMKIwpDT05GSUdfUE5QQUNQST15CkNPTkZJR19CTEtfREVWPXkKQ09ORklHX0JM
S19ERVZfTlVMTF9CTEs9bQpDT05GSUdfQkxLX0RFVl9GRD1tCiMgQ09ORklHX1BBUklERSBp
cyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1BDSUVTU0RfTVRJUDMyWFg9bQpDT05GSUdfWlJB
TT1tCkNPTkZJR19aUkFNX0xaNF9DT01QUkVTUz15CiMgQ09ORklHX1pSQU1fREVCVUcgaXMg
bm90IHNldApDT05GSUdfQkxLX0NQUV9DSVNTX0RBPW0KQ09ORklHX0NJU1NfU0NTSV9UQVBF
PXkKQ09ORklHX0JMS19ERVZfREFDOTYwPW0KQ09ORklHX0JMS19ERVZfVU1FTT1tCiMgQ09O
RklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0xPT1A9
bQpDT05GSUdfQkxLX0RFVl9MT09QX01JTl9DT1VOVD04CiMgQ09ORklHX0JMS19ERVZfQ1JZ
UFRPTE9PUCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX0RSQkQ9bQojIENPTkZJR19EUkJE
X0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX05CRD1tCkNPTkZJ
R19CTEtfREVWX05WTUU9bQpDT05GSUdfQkxLX0RFVl9TS0Q9bQpDT05GSUdfQkxLX0RFVl9P
U0Q9bQpDT05GSUdfQkxLX0RFVl9TWDg9bQpDT05GSUdfQkxLX0RFVl9SQU09bQpDT05GSUdf
QkxLX0RFVl9SQU1fQ09VTlQ9MTYKQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQ09O
RklHX0JMS19ERVZfUE1FTT1tCkNPTkZJR19DRFJPTV9QS1RDRFZEPW0KQ09ORklHX0NEUk9N
X1BLVENEVkRfQlVGRkVSUz04CiMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5v
dCBzZXQKQ09ORklHX0FUQV9PVkVSX0VUSD1tCkNPTkZJR19YRU5fQkxLREVWX0ZST05URU5E
PW0KQ09ORklHX1hFTl9CTEtERVZfQkFDS0VORD1tCkNPTkZJR19WSVJUSU9fQkxLPW0KIyBD
T05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CkNPTkZJR19CTEtfREVWX1JCRD1tCkNPTkZJ
R19CTEtfREVWX1JTWFg9bQoKIwojIE1pc2MgZGV2aWNlcwojCkNPTkZJR19TRU5TT1JTX0xJ
UzNMVjAyRD1tCkNPTkZJR19BRDUyNVhfRFBPVD1tCkNPTkZJR19BRDUyNVhfRFBPVF9JMkM9
bQpDT05GSUdfQUQ1MjVYX0RQT1RfU1BJPW0KIyBDT05GSUdfRFVNTVlfSVJRIGlzIG5vdCBz
ZXQKQ09ORklHX0lCTV9BU009bQpDT05GSUdfUEhBTlRPTT1tCkNPTkZJR19TR0lfSU9DND1t
CkNPTkZJR19USUZNX0NPUkU9bQpDT05GSUdfVElGTV83WFgxPW0KQ09ORklHX0lDUzkzMlM0
MDE9bQpDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTPW0KQ09ORklHX0hQX0lMTz1tCkNPTkZJ
R19BUERTOTgwMkFMUz1tCkNPTkZJR19JU0wyOTAwMz1tCkNPTkZJR19JU0wyOTAyMD1tCkNP
TkZJR19TRU5TT1JTX1RTTDI1NTA9bQpDT05GSUdfU0VOU09SU19CSDE3ODA9bQpDT05GSUdf
U0VOU09SU19CSDE3NzA9bQpDT05GSUdfU0VOU09SU19BUERTOTkwWD1tCkNPTkZJR19ITUM2
MzUyPW0KQ09ORklHX0RTMTY4Mj1tCkNPTkZJR19USV9EQUM3NTEyPW0KQ09ORklHX1ZNV0FS
RV9CQUxMT09OPW0KIyBDT05GSUdfQk1QMDg1X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX0JN
UDA4NV9TUEkgaXMgbm90IHNldAojIENPTkZJR19VU0JfU1dJVENIX0ZTQTk0ODAgaXMgbm90
IHNldAojIENPTkZJR19MQVRUSUNFX0VDUDNfQ09ORklHIGlzIG5vdCBzZXQKIyBDT05GSUdf
U1JBTSBpcyBub3Qgc2V0CkNPTkZJR19DMlBPUlQ9bQpDT05GSUdfQzJQT1JUX0RVUkFNQVJf
MjE1MD1tCgojCiMgRUVQUk9NIHN1cHBvcnQKIwpDT05GSUdfRUVQUk9NX0FUMjQ9bQpDT05G
SUdfRUVQUk9NX0FUMjU9bQpDT05GSUdfRUVQUk9NX0xFR0FDWT1tCkNPTkZJR19FRVBST01f
TUFYNjg3NT1tCkNPTkZJR19FRVBST01fOTNDWDY9bQojIENPTkZJR19FRVBST01fOTNYWDQ2
IGlzIG5vdCBzZXQKQ09ORklHX0NCNzEwX0NPUkU9bQojIENPTkZJR19DQjcxMF9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19DQjcxMF9ERUJVR19BU1NVTVBUSU9OUz15CgojCiMgVGV4YXMg
SW5zdHJ1bWVudHMgc2hhcmVkIHRyYW5zcG9ydCBsaW5lIGRpc2NpcGxpbmUKIwojIENPTkZJ
R19USV9TVCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX0xJUzNfSTJDPW0KCiMKIyBBbHRl
cmEgRlBHQSBmaXJtd2FyZSBkb3dubG9hZCBtb2R1bGUKIwpDT05GSUdfQUxURVJBX1NUQVBM
PW0KQ09ORklHX0lOVEVMX01FST1tCkNPTkZJR19JTlRFTF9NRUlfTUU9bQojIENPTkZJR19J
TlRFTF9NRUlfVFhFIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9WTUNJPW0KCiMKIyBJbnRl
bCBNSUMgQnVzIERyaXZlcgojCkNPTkZJR19JTlRFTF9NSUNfQlVTPW0KCiMKIyBJbnRlbCBN
SUMgSG9zdCBEcml2ZXIKIwpDT05GSUdfSU5URUxfTUlDX0hPU1Q9bQoKIwojIEludGVsIE1J
QyBDYXJkIERyaXZlcgojCiMgQ09ORklHX0lOVEVMX01JQ19DQVJEIGlzIG5vdCBzZXQKIyBD
T05GSUdfR0VOV1FFIGlzIG5vdCBzZXQKIyBDT05GSUdfRUNITyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NYTF9CQVNFIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfSURFPXkKIyBDT05GSUdfSURF
IGlzIG5vdCBzZXQKCiMKIyBTQ1NJIGRldmljZSBzdXBwb3J0CiMKQ09ORklHX1NDU0lfTU9E
PW0KQ09ORklHX1JBSURfQVRUUlM9bQpDT05GSUdfU0NTST1tCkNPTkZJR19TQ1NJX0RNQT15
CkNPTkZJR19TQ1NJX05FVExJTks9eQojIENPTkZJR19TQ1NJX01RX0RFRkFVTFQgaXMgbm90
IHNldAojIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAoKIwojIFNDU0kgc3VwcG9y
dCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCiMKQ09ORklHX0JMS19ERVZfU0Q9bQpDT05G
SUdfQ0hSX0RFVl9TVD1tCkNPTkZJR19DSFJfREVWX09TU1Q9bQpDT05GSUdfQkxLX0RFVl9T
Uj1tCkNPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CkNPTkZJR19DSFJfREVWX1NHPW0KQ09O
RklHX0NIUl9ERVZfU0NIPW0KQ09ORklHX1NDU0lfRU5DTE9TVVJFPW0KQ09ORklHX1NDU0lf
Q09OU1RBTlRTPXkKQ09ORklHX1NDU0lfTE9HR0lORz15CkNPTkZJR19TQ1NJX1NDQU5fQVNZ
TkM9eQoKIwojIFNDU0kgVHJhbnNwb3J0cwojCkNPTkZJR19TQ1NJX1NQSV9BVFRSUz1tCkNP
TkZJR19TQ1NJX0ZDX0FUVFJTPW0KQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQpDT05GSUdf
U0NTSV9TQVNfQVRUUlM9bQpDT05GSUdfU0NTSV9TQVNfTElCU0FTPW0KQ09ORklHX1NDU0lf
U0FTX0FUQT15CkNPTkZJR19TQ1NJX1NBU19IT1NUX1NNUD15CkNPTkZJR19TQ1NJX1NSUF9B
VFRSUz1tCkNPTkZJR19TQ1NJX0xPV0xFVkVMPXkKQ09ORklHX0lTQ1NJX1RDUD1tCkNPTkZJ
R19JU0NTSV9CT09UX1NZU0ZTPW0KQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0k9bQpDT05GSUdf
U0NTSV9DWEdCNF9JU0NTST1tCkNPTkZJR19TQ1NJX0JOWDJfSVNDU0k9bQpDT05GSUdfU0NT
SV9CTlgyWF9GQ09FPW0KQ09ORklHX0JFMklTQ1NJPW0KQ09ORklHX0JMS19ERVZfM1dfWFhY
WF9SQUlEPW0KQ09ORklHX1NDU0lfSFBTQT1tCkNPTkZJR19TQ1NJXzNXXzlYWFg9bQpDT05G
SUdfU0NTSV8zV19TQVM9bQpDT05GSUdfU0NTSV9BQ0FSRD1tCkNPTkZJR19TQ1NJX0FBQ1JB
SUQ9bQpDT05GSUdfU0NTSV9BSUM3WFhYPW0KQ09ORklHX0FJQzdYWFhfQ01EU19QRVJfREVW
SUNFPTgKQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQ09ORklHX0FJQzdY
WFhfREVCVUdfRU5BQkxFPXkKQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCkNPTkZJR19B
SUM3WFhYX1JFR19QUkVUVFlfUFJJTlQ9eQpDT05GSUdfU0NTSV9BSUM3OVhYPW0KQ09ORklH
X0FJQzc5WFhfQ01EU19QRVJfREVWSUNFPTMyCkNPTkZJR19BSUM3OVhYX1JFU0VUX0RFTEFZ
X01TPTE1MDAwCkNPTkZJR19BSUM3OVhYX0RFQlVHX0VOQUJMRT15CkNPTkZJR19BSUM3OVhY
X0RFQlVHX01BU0s9MApDT05GSUdfQUlDNzlYWF9SRUdfUFJFVFRZX1BSSU5UPXkKQ09ORklH
X1NDU0lfQUlDOTRYWD1tCiMgQ09ORklHX0FJQzk0WFhfREVCVUcgaXMgbm90IHNldApDT05G
SUdfU0NTSV9NVlNBUz1tCiMgQ09ORklHX1NDU0lfTVZTQVNfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19TQ1NJX01WU0FTX1RBU0tMRVQgaXMgbm90IHNldApDT05GSUdfU0NTSV9NVlVN
ST1tCkNPTkZJR19TQ1NJX0RQVF9JMk89bQpDT05GSUdfU0NTSV9BRFZBTlNZUz1tCkNPTkZJ
R19TQ1NJX0FSQ01TUj1tCkNPTkZJR19TQ1NJX0VTQVMyUj1tCkNPTkZJR19NRUdBUkFJRF9O
RVdHRU49eQpDT05GSUdfTUVHQVJBSURfTU09bQpDT05GSUdfTUVHQVJBSURfTUFJTEJPWD1t
CkNPTkZJR19NRUdBUkFJRF9MRUdBQ1k9bQpDT05GSUdfTUVHQVJBSURfU0FTPW0KQ09ORklH
X1NDU0lfTVBUMlNBUz1tCkNPTkZJR19TQ1NJX01QVDJTQVNfTUFYX1NHRT0xMjgKIyBDT05G
SUdfU0NTSV9NUFQyU0FTX0xPR0dJTkcgaXMgbm90IHNldApDT05GSUdfU0NTSV9NUFQzU0FT
PW0KQ09ORklHX1NDU0lfTVBUM1NBU19NQVhfU0dFPTEyOAojIENPTkZJR19TQ1NJX01QVDNT
QVNfTE9HR0lORyBpcyBub3Qgc2V0CkNPTkZJR19TQ1NJX1VGU0hDRD1tCkNPTkZJR19TQ1NJ
X1VGU0hDRF9QQ0k9bQojIENPTkZJR19TQ1NJX1VGU0hDRF9QTEFURk9STSBpcyBub3Qgc2V0
CkNPTkZJR19TQ1NJX0hQVElPUD1tCkNPTkZJR19TQ1NJX0JVU0xPR0lDPW0KIyBDT05GSUdf
U0NTSV9GTEFTSFBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX1ZNV0FSRV9QVlNDU0k9bQpDT05G
SUdfWEVOX1NDU0lfRlJPTlRFTkQ9bQpDT05GSUdfSFlQRVJWX1NUT1JBR0U9bQpDT05GSUdf
TElCRkM9bQpDT05GSUdfTElCRkNPRT1tCkNPTkZJR19GQ09FPW0KQ09ORklHX0ZDT0VfRk5J
Qz1tCkNPTkZJR19TQ1NJX0RNWDMxOTFEPW0KQ09ORklHX1NDU0lfRUFUQT1tCkNPTkZJR19T
Q1NJX0VBVEFfVEFHR0VEX1FVRVVFPXkKQ09ORklHX1NDU0lfRUFUQV9MSU5LRURfQ09NTUFO
RFM9eQpDT05GSUdfU0NTSV9FQVRBX01BWF9UQUdTPTE2CkNPTkZJR19TQ1NJX0ZVVFVSRV9E
T01BSU49bQpDT05GSUdfU0NTSV9HRFRIPW0KQ09ORklHX1NDU0lfSVNDST1tCkNPTkZJR19T
Q1NJX0lQUz1tCkNPTkZJR19TQ1NJX0lOSVRJTz1tCkNPTkZJR19TQ1NJX0lOSUExMDA9bQoj
IENPTkZJR19TQ1NJX1BQQSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDU0lfSU1NIGlzIG5vdCBz
ZXQKQ09ORklHX1NDU0lfU1RFWD1tCkNPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPW0KQ09ORklH
X1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MQpDT05GSUdfU0NTSV9TWU01
M0M4WFhfREVGQVVMVF9UQUdTPTE2CkNPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02
NApDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CkNPTkZJR19TQ1NJX0lQUj1tCiMgQ09O
RklHX1NDU0lfSVBSX1RSQUNFIGlzIG5vdCBzZXQKIyBDT05GSUdfU0NTSV9JUFJfRFVNUCBp
cyBub3Qgc2V0CkNPTkZJR19TQ1NJX1FMT0dJQ18xMjgwPW0KQ09ORklHX1NDU0lfUUxBX0ZD
PW0KQ09ORklHX1RDTV9RTEEyWFhYPW0KQ09ORklHX1NDU0lfUUxBX0lTQ1NJPW0KQ09ORklH
X1NDU0lfTFBGQz1tCiMgQ09ORklHX1NDU0lfTFBGQ19ERUJVR19GUyBpcyBub3Qgc2V0CkNP
TkZJR19TQ1NJX0RDMzk1eD1tCkNPTkZJR19TQ1NJX0FNNTNDOTc0PW0KQ09ORklHX1NDU0lf
V0Q3MTlYPW0KQ09ORklHX1NDU0lfREVCVUc9bQpDT05GSUdfU0NTSV9QTUNSQUlEPW0KQ09O
RklHX1NDU0lfUE04MDAxPW0KQ09ORklHX1NDU0lfQkZBX0ZDPW0KQ09ORklHX1NDU0lfVklS
VElPPW0KQ09ORklHX1NDU0lfQ0hFTFNJT19GQ09FPW0KQ09ORklHX1NDU0lfTE9XTEVWRUxf
UENNQ0lBPXkKQ09ORklHX1BDTUNJQV9BSEExNTJYPW0KQ09ORklHX1BDTUNJQV9GRE9NQUlO
PW0KQ09ORklHX1BDTUNJQV9RTE9HSUM9bQpDT05GSUdfUENNQ0lBX1NZTTUzQzUwMD1tCkNP
TkZJR19TQ1NJX0RIPW0KQ09ORklHX1NDU0lfREhfUkRBQz1tCkNPTkZJR19TQ1NJX0RIX0hQ
X1NXPW0KQ09ORklHX1NDU0lfREhfRU1DPW0KQ09ORklHX1NDU0lfREhfQUxVQT1tCkNPTkZJ
R19TQ1NJX09TRF9JTklUSUFUT1I9bQpDT05GSUdfU0NTSV9PU0RfVUxEPW0KQ09ORklHX1ND
U0lfT1NEX0RQUklOVF9TRU5TRT0xCiMgQ09ORklHX1NDU0lfT1NEX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0FUQT1tCiMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CkNP
TkZJR19BVEFfVkVSQk9TRV9FUlJPUj15CkNPTkZJR19BVEFfQUNQST15CkNPTkZJR19TQVRB
X1pQT0REPXkKQ09ORklHX1NBVEFfUE1QPXkKCiMKIyBDb250cm9sbGVycyB3aXRoIG5vbi1T
RkYgbmF0aXZlIGludGVyZmFjZQojCkNPTkZJR19TQVRBX0FIQ0k9bQojIENPTkZJR19TQVRB
X0FIQ0lfUExBVEZPUk0gaXMgbm90IHNldAojIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5v
dCBzZXQKQ09ORklHX1NBVEFfQUNBUkRfQUhDST1tCkNPTkZJR19TQVRBX1NJTDI0PW0KQ09O
RklHX0FUQV9TRkY9eQoKIwojIFNGRiBjb250cm9sbGVycyB3aXRoIGN1c3RvbSBETUEgaW50
ZXJmYWNlCiMKQ09ORklHX1BEQ19BRE1BPW0KQ09ORklHX1NBVEFfUVNUT1I9bQpDT05GSUdf
U0FUQV9TWDQ9bQpDT05GSUdfQVRBX0JNRE1BPXkKCiMKIyBTQVRBIFNGRiBjb250cm9sbGVy
cyB3aXRoIEJNRE1BCiMKQ09ORklHX0FUQV9QSUlYPW0KQ09ORklHX1NBVEFfTVY9bQpDT05G
SUdfU0FUQV9OVj1tCkNPTkZJR19TQVRBX1BST01JU0U9bQpDT05GSUdfU0FUQV9TSUw9bQpD
T05GSUdfU0FUQV9TSVM9bQpDT05GSUdfU0FUQV9TVlc9bQpDT05GSUdfU0FUQV9VTEk9bQpD
T05GSUdfU0FUQV9WSUE9bQpDT05GSUdfU0FUQV9WSVRFU1NFPW0KCiMKIyBQQVRBIFNGRiBj
b250cm9sbGVycyB3aXRoIEJNRE1BCiMKQ09ORklHX1BBVEFfQUxJPW0KQ09ORklHX1BBVEFf
QU1EPW0KQ09ORklHX1BBVEFfQVJUT1A9bQpDT05GSUdfUEFUQV9BVElJWFA9bQpDT05GSUdf
UEFUQV9BVFA4NjdYPW0KQ09ORklHX1BBVEFfQ01ENjRYPW0KIyBDT05GSUdfUEFUQV9DWVBS
RVNTIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfRUZBUj1tCkNPTkZJR19QQVRBX0hQVDM2Nj1t
CkNPTkZJR19QQVRBX0hQVDM3WD1tCiMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0
CiMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfSVQ4MjEzPW0K
Q09ORklHX1BBVEFfSVQ4MjFYPW0KQ09ORklHX1BBVEFfSk1JQ1JPTj1tCkNPTkZJR19QQVRB
X01BUlZFTEw9bQpDT05GSUdfUEFUQV9ORVRDRUxMPW0KQ09ORklHX1BBVEFfTklOSkEzMj1t
CkNPTkZJR19QQVRBX05TODc0MTU9bQpDT05GSUdfUEFUQV9PTERQSUlYPW0KIyBDT05GSUdf
UEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFfUERDMjAyN1g9bQpDT05GSUdf
UEFUQV9QRENfT0xEPW0KIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKQ09ORklH
X1BBVEFfUkRDPW0KQ09ORklHX1BBVEFfU0NIPW0KQ09ORklHX1BBVEFfU0VSVkVSV09SS1M9
bQpDT05GSUdfUEFUQV9TSUw2ODA9bQpDT05GSUdfUEFUQV9TSVM9bQpDT05GSUdfUEFUQV9U
T1NISUJBPW0KQ09ORklHX1BBVEFfVFJJRkxFWD1tCkNPTkZJR19QQVRBX1ZJQT1tCiMgQ09O
RklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CgojCiMgUElPLW9ubHkgU0ZGIGNvbnRyb2xs
ZXJzCiMKIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKQ09ORklHX1BBVEFf
TVBJSVg9bQpDT05GSUdfUEFUQV9OUzg3NDEwPW0KIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5v
dCBzZXQKQ09ORklHX1BBVEFfUENNQ0lBPW0KIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBu
b3Qgc2V0CkNPTkZJR19QQVRBX1JaMTAwMD1tCgojCiMgR2VuZXJpYyBmYWxsYmFjayAvIGxl
Z2FjeSBkcml2ZXJzCiMKIyBDT05GSUdfUEFUQV9BQ1BJIGlzIG5vdCBzZXQKQ09ORklHX0FU
QV9HRU5FUklDPW0KIyBDT05GSUdfUEFUQV9MRUdBQ1kgaXMgbm90IHNldApDT05GSUdfTUQ9
eQpDT05GSUdfQkxLX0RFVl9NRD1tCkNPTkZJR19NRF9MSU5FQVI9bQpDT05GSUdfTURfUkFJ
RDA9bQpDT05GSUdfTURfUkFJRDE9bQpDT05GSUdfTURfUkFJRDEwPW0KQ09ORklHX01EX1JB
SUQ0NTY9bQpDT05GSUdfTURfTVVMVElQQVRIPW0KQ09ORklHX01EX0ZBVUxUWT1tCiMgQ09O
RklHX01EX0NMVVNURVIgaXMgbm90IHNldApDT05GSUdfQkNBQ0hFPW0KIyBDT05GSUdfQkNB
Q0hFX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNBQ0hFX0NMT1NVUkVTX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0JMS19ERVZfRE1fQlVJTFRJTj15CkNPTkZJR19CTEtfREVWX0RN
PW0KIyBDT05GSUdfRE1fTVFfREVGQVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RNX0RFQlVH
IGlzIG5vdCBzZXQKQ09ORklHX0RNX0JVRklPPW0KQ09ORklHX0RNX0JJT19QUklTT049bQpD
T05GSUdfRE1fUEVSU0lTVEVOVF9EQVRBPW0KIyBDT05GSUdfRE1fREVCVUdfQkxPQ0tfU1RB
Q0tfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19ETV9DUllQVD1tCkNPTkZJR19ETV9TTkFQ
U0hPVD1tCkNPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCkNPTkZJR19ETV9DQUNIRT1t
CkNPTkZJR19ETV9DQUNIRV9NUT1tCkNPTkZJR19ETV9DQUNIRV9DTEVBTkVSPW0KQ09ORklH
X0RNX0VSQT1tCkNPTkZJR19ETV9NSVJST1I9bQpDT05GSUdfRE1fTE9HX1VTRVJTUEFDRT1t
CkNPTkZJR19ETV9SQUlEPW0KQ09ORklHX0RNX1pFUk89bQpDT05GSUdfRE1fTVVMVElQQVRI
PW0KQ09ORklHX0RNX01VTFRJUEFUSF9RTD1tCkNPTkZJR19ETV9NVUxUSVBBVEhfU1Q9bQpD
T05GSUdfRE1fREVMQVk9bQpDT05GSUdfRE1fVUVWRU5UPXkKQ09ORklHX0RNX0ZMQUtFWT1t
CkNPTkZJR19ETV9WRVJJVFk9bQpDT05GSUdfRE1fU1dJVENIPW0KQ09ORklHX0RNX0xPR19X
UklURVM9bQpDT05GSUdfVEFSR0VUX0NPUkU9bQpDT05GSUdfVENNX0lCTE9DSz1tCkNPTkZJ
R19UQ01fRklMRUlPPW0KQ09ORklHX1RDTV9QU0NTST1tCiMgQ09ORklHX1RDTV9VU0VSMiBp
cyBub3Qgc2V0CkNPTkZJR19MT09QQkFDS19UQVJHRVQ9bQpDT05GSUdfVENNX0ZDPW0KQ09O
RklHX0lTQ1NJX1RBUkdFVD1tCkNPTkZJR19TQlBfVEFSR0VUPW0KQ09ORklHX0ZVU0lPTj15
CkNPTkZJR19GVVNJT05fU1BJPW0KQ09ORklHX0ZVU0lPTl9GQz1tCkNPTkZJR19GVVNJT05f
U0FTPW0KQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOApDT05GSUdfRlVTSU9OX0NUTD1tCkNP
TkZJR19GVVNJT05fTEFOPW0KIyBDT05GSUdfRlVTSU9OX0xPR0dJTkcgaXMgbm90IHNldAoK
IwojIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKIwpDT05GSUdfRklSRVdJUkU9bQpD
T05GSUdfRklSRVdJUkVfT0hDST1tCkNPTkZJR19GSVJFV0lSRV9TQlAyPW0KQ09ORklHX0ZJ
UkVXSVJFX05FVD1tCkNPTkZJR19GSVJFV0lSRV9OT1NZPW0KQ09ORklHX01BQ0lOVE9TSF9E
UklWRVJTPXkKQ09ORklHX01BQ19FTVVNT1VTRUJUTj15CkNPTkZJR19ORVRERVZJQ0VTPXkK
Q09ORklHX01JST1tCkNPTkZJR19ORVRfQ09SRT15CkNPTkZJR19CT05ESU5HPW0KQ09ORklH
X0RVTU1ZPW0KQ09ORklHX0VRVUFMSVpFUj1tCkNPTkZJR19ORVRfRkM9eQpDT05GSUdfSUZC
PW0KQ09ORklHX05FVF9URUFNPW0KQ09ORklHX05FVF9URUFNX01PREVfQlJPQURDQVNUPW0K
Q09ORklHX05FVF9URUFNX01PREVfUk9VTkRST0JJTj1tCkNPTkZJR19ORVRfVEVBTV9NT0RF
X1JBTkRPTT1tCkNPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCkNPTkZJR19O
RVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KQ09ORklHX01BQ1ZMQU49bQpDT05GSUdfTUFD
VlRBUD1tCkNPTkZJR19JUFZMQU49bQpDT05GSUdfVlhMQU49bQpDT05GSUdfTkVUQ09OU09M
RT1tCkNPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpDT05GSUdfTkVUUE9MTD15CkNPTkZJ
R19ORVRfUE9MTF9DT05UUk9MTEVSPXkKQ09ORklHX1RVTj1tCkNPTkZJR19WRVRIPW0KQ09O
RklHX1ZJUlRJT19ORVQ9bQpDT05GSUdfTkxNT049bQpDT05GSUdfU1VOR0VNX1BIWT1tCkNP
TkZJR19BUkNORVQ9bQpDT05GSUdfQVJDTkVUXzEyMDE9bQpDT05GSUdfQVJDTkVUXzEwNTE9
bQpDT05GSUdfQVJDTkVUX1JBVz1tCkNPTkZJR19BUkNORVRfQ0FQPW0KQ09ORklHX0FSQ05F
VF9DT005MHh4PW0KQ09ORklHX0FSQ05FVF9DT005MHh4SU89bQpDT05GSUdfQVJDTkVUX1JJ
TV9JPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMD1tCkNPTkZJR19BUkNORVRfQ09NMjAwMjBf
UENJPW0KQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DUz1tCkNPTkZJR19BVE1fRFJJVkVSUz15
CkNPTkZJR19BVE1fRFVNTVk9bQpDT05GSUdfQVRNX1RDUD1tCkNPTkZJR19BVE1fTEFOQUk9
bQpDT05GSUdfQVRNX0VOST1tCiMgQ09ORklHX0FUTV9FTklfREVCVUcgaXMgbm90IHNldAoj
IENPTkZJR19BVE1fRU5JX1RVTkVfQlVSU1QgaXMgbm90IHNldApDT05GSUdfQVRNX0ZJUkVT
VFJFQU09bQpDT05GSUdfQVRNX1pBVE09bQojIENPTkZJR19BVE1fWkFUTV9ERUJVRyBpcyBu
b3Qgc2V0CkNPTkZJR19BVE1fTklDU1RBUj1tCkNPTkZJR19BVE1fTklDU1RBUl9VU0VfU1VO
ST15CkNPTkZJR19BVE1fTklDU1RBUl9VU0VfSURUNzcxMDU9eQpDT05GSUdfQVRNX0lEVDc3
MjUyPW0KIyBDT05GSUdfQVRNX0lEVDc3MjUyX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdf
QVRNX0lEVDc3MjUyX1JDVl9BTEwgaXMgbm90IHNldApDT05GSUdfQVRNX0lEVDc3MjUyX1VT
RV9TVU5JPXkKQ09ORklHX0FUTV9BTUJBU1NBRE9SPW0KIyBDT05GSUdfQVRNX0FNQkFTU0FE
T1JfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0hPUklaT049bQojIENPTkZJR19BVE1f
SE9SSVpPTl9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVE1fSUE9bQojIENPTkZJR19BVE1f
SUFfREVCVUcgaXMgbm90IHNldApDT05GSUdfQVRNX0ZPUkUyMDBFPW0KIyBDT05GSUdfQVRN
X0ZPUkUyMDBFX1VTRV9UQVNLTEVUIGlzIG5vdCBzZXQKQ09ORklHX0FUTV9GT1JFMjAwRV9U
WF9SRVRSWT0xNgpDT05GSUdfQVRNX0ZPUkUyMDBFX0RFQlVHPTAKQ09ORklHX0FUTV9IRT1t
CkNPTkZJR19BVE1fSEVfVVNFX1NVTkk9eQpDT05GSUdfQVRNX1NPTE9TPW0KCiMKIyBDQUlG
IHRyYW5zcG9ydCBkcml2ZXJzCiMKQ09ORklHX1ZIT1NUX05FVD1tCkNPTkZJR19WSE9TVF9T
Q1NJPW0KQ09ORklHX1ZIT1NUX1JJTkc9bQpDT05GSUdfVkhPU1Q9bQoKIwojIERpc3RyaWJ1
dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgZHJpdmVycwojCiMgQ09ORklHX05FVF9EU0FfTVY4
OEU2WFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX0RTQV9NVjg4RTZYWFhfTkVFRF9QUFUg
aXMgbm90IHNldApDT05GSUdfRVRIRVJORVQ9eQpDT05GSUdfTURJTz1tCkNPTkZJR19ORVRf
VkVORE9SXzNDT009eQpDT05GSUdfUENNQ0lBXzNDNTc0PW0KQ09ORklHX1BDTUNJQV8zQzU4
OT1tCkNPTkZJR19WT1JURVg9bQpDT05GSUdfVFlQSE9PTj1tCkNPTkZJR19ORVRfVkVORE9S
X0FEQVBURUM9eQpDT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCkNPTkZJR19ORVRfVkVORE9S
X0FHRVJFPXkKQ09ORklHX0VUMTMxWD1tCkNPTkZJR19ORVRfVkVORE9SX0FMVEVPTj15CkNP
TkZJR19BQ0VOSUM9bQojIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JIGlzIG5vdCBzZXQK
IyBDT05GSUdfQUxURVJBX1RTRSBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX0FNRD15
CkNPTkZJR19BTUQ4MTExX0VUSD1tCkNPTkZJR19QQ05FVDMyPW0KQ09ORklHX1BDTUNJQV9O
TUNMQU49bQojIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
VkVORE9SX0FUSEVST1M9eQpDT05GSUdfQVRMMj1tCkNPTkZJR19BVEwxPW0KQ09ORklHX0FU
TDFFPW0KQ09ORklHX0FUTDFDPW0KQ09ORklHX0FMWD1tCkNPTkZJR19ORVRfQ0FERU5DRT15
CiMgQ09ORklHX01BQ0IgaXMgbm90IHNldApDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTT15
CkNPTkZJR19CNDQ9bQpDT05GSUdfQjQ0X1BDSV9BVVRPU0VMRUNUPXkKQ09ORklHX0I0NF9Q
Q0lDT1JFX0FVVE9TRUxFQ1Q9eQpDT05GSUdfQjQ0X1BDST15CiMgQ09ORklHX0JDTUdFTkVU
IGlzIG5vdCBzZXQKQ09ORklHX0JOWDI9bQpDT05GSUdfQ05JQz1tCkNPTkZJR19USUdPTjM9
bQpDT05GSUdfQk5YMlg9bQpDT05GSUdfQk5YMlhfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRP
Ul9CUk9DQURFPXkKQ09ORklHX0JOQT1tCkNPTkZJR19ORVRfVkVORE9SX0NIRUxTSU89eQpD
T05GSUdfQ0hFTFNJT19UMT1tCkNPTkZJR19DSEVMU0lPX1QxXzFHPXkKQ09ORklHX0NIRUxT
SU9fVDM9bQpDT05GSUdfQ0hFTFNJT19UND1tCkNPTkZJR19DSEVMU0lPX1Q0X0RDQj15CiMg
Q09ORklHX0NIRUxTSU9fVDRfRkNPRSBpcyBub3Qgc2V0CkNPTkZJR19DSEVMU0lPX1Q0VkY9
bQpDT05GSUdfTkVUX1ZFTkRPUl9DSVNDTz15CkNPTkZJR19FTklDPW0KIyBDT05GSUdfQ1hf
RUNBVCBpcyBub3Qgc2V0CiMgQ09ORklHX0RORVQgaXMgbm90IHNldApDT05GSUdfTkVUX1ZF
TkRPUl9ERUM9eQpDT05GSUdfTkVUX1RVTElQPXkKQ09ORklHX0RFMjEwNFg9bQpDT05GSUdf
REUyMTA0WF9EU0w9MApDT05GSUdfVFVMSVA9bQojIENPTkZJR19UVUxJUF9NV0kgaXMgbm90
IHNldAojIENPTkZJR19UVUxJUF9NTUlPIGlzIG5vdCBzZXQKQ09ORklHX1RVTElQX05BUEk9
eQpDT05GSUdfVFVMSVBfTkFQSV9IV19NSVRJR0FUSU9OPXkKIyBDT05GSUdfREU0WDUgaXMg
bm90IHNldApDT05GSUdfV0lOQk9ORF84NDA9bQpDT05GSUdfRE05MTAyPW0KQ09ORklHX1VM
STUyNlg9bQpDT05GSUdfUENNQ0lBX1hJUkNPTT1tCkNPTkZJR19ORVRfVkVORE9SX0RMSU5L
PXkKQ09ORklHX0RMMks9bQpDT05GSUdfU1VOREFOQ0U9bQojIENPTkZJR19TVU5EQU5DRV9N
TUlPIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRU1VTEVYPXkKQ09ORklHX0JFMk5F
VD1tCkNPTkZJR19CRTJORVRfVlhMQU49eQpDT05GSUdfTkVUX1ZFTkRPUl9FWEFSPXkKQ09O
RklHX1MySU89bQpDT05GSUdfVlhHRT1tCiMgQ09ORklHX1ZYR0VfREVCVUdfVFJBQ0VfQUxM
IGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfRlVKSVRTVT15CkNPTkZJR19QQ01DSUFf
Rk1WSjE4WD1tCkNPTkZJR19ORVRfVkVORE9SX0hQPXkKQ09ORklHX0hQMTAwPW0KQ09ORklH
X05FVF9WRU5ET1JfSU5URUw9eQpDT05GSUdfRTEwMD1tCkNPTkZJR19FMTAwMD1tCkNPTkZJ
R19FMTAwMEU9bQpDT05GSUdfSUdCPW0KQ09ORklHX0lHQl9IV01PTj15CkNPTkZJR19JR0Jf
RENBPXkKQ09ORklHX0lHQlZGPW0KQ09ORklHX0lYR0I9bQpDT05GSUdfSVhHQkU9bQpDT05G
SUdfSVhHQkVfVlhMQU49eQpDT05GSUdfSVhHQkVfSFdNT049eQpDT05GSUdfSVhHQkVfRENB
PXkKQ09ORklHX0lYR0JFX0RDQj15CkNPTkZJR19JWEdCRVZGPW0KQ09ORklHX0k0MEU9bQpD
T05GSUdfSTQwRV9WWExBTj15CkNPTkZJR19JNDBFX0RDQj15CkNPTkZJR19JNDBFX0ZDT0U9
eQpDT05GSUdfSTQwRVZGPW0KIyBDT05GSUdfRk0xMEsgaXMgbm90IHNldApDT05GSUdfTkVU
X1ZFTkRPUl9JODI1WFg9eQpDT05GSUdfSVAxMDAwPW0KQ09ORklHX0pNRT1tCkNPTkZJR19O
RVRfVkVORE9SX01BUlZFTEw9eQojIENPTkZJR19NVk1ESU8gaXMgbm90IHNldApDT05GSUdf
U0tHRT1tCiMgQ09ORklHX1NLR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfU0tHRV9HRU5F
U0lTPXkKQ09ORklHX1NLWTI9bQojIENPTkZJR19TS1kyX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX05FVF9WRU5ET1JfTUVMTEFOT1g9eQpDT05GSUdfTUxYNF9FTj1tCkNPTkZJR19NTFg0
X0VOX0RDQj15CkNPTkZJR19NTFg0X0VOX1ZYTEFOPXkKQ09ORklHX01MWDRfQ09SRT1tCkNP
TkZJR19NTFg0X0RFQlVHPXkKQ09ORklHX01MWDVfQ09SRT1tCkNPTkZJR19ORVRfVkVORE9S
X01JQ1JFTD15CiMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldApDT05GSUdfS1NaODg0
WF9QQ0k9bQpDT05GSUdfTkVUX1ZFTkRPUl9NSUNST0NISVA9eQojIENPTkZJR19FTkMyOEo2
MCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVORE9SX01ZUkk9eQpDT05GSUdfTVlSSTEwR0U9
bQpDT05GSUdfTVlSSTEwR0VfRENBPXkKQ09ORklHX0ZFQUxOWD1tCkNPTkZJR19ORVRfVkVO
RE9SX05BVFNFTUk9eQpDT05GSUdfTkFUU0VNST1tCkNPTkZJR19OUzgzODIwPW0KQ09ORklH
X05FVF9WRU5ET1JfODM5MD15CkNPTkZJR19QQ01DSUFfQVhORVQ9bQpDT05GSUdfTkUyS19Q
Q0k9bQpDT05GSUdfUENNQ0lBX1BDTkVUPW0KQ09ORklHX05FVF9WRU5ET1JfTlZJRElBPXkK
Q09ORklHX0ZPUkNFREVUSD1tCkNPTkZJR19ORVRfVkVORE9SX09LST15CiMgQ09ORklHX0VU
SE9DIGlzIG5vdCBzZXQKQ09ORklHX05FVF9QQUNLRVRfRU5HSU5FPXkKQ09ORklHX0hBTUFD
SEk9bQpDT05GSUdfWUVMTE9XRklOPW0KQ09ORklHX05FVF9WRU5ET1JfUUxPR0lDPXkKQ09O
RklHX1FMQTNYWFg9bQpDT05GSUdfUUxDTklDPW0KQ09ORklHX1FMQ05JQ19TUklPVj15CkNP
TkZJR19RTENOSUNfRENCPXkKQ09ORklHX1FMQ05JQ19WWExBTj15CkNPTkZJR19RTENOSUNf
SFdNT049eQpDT05GSUdfUUxHRT1tCkNPTkZJR19ORVRYRU5fTklDPW0KQ09ORklHX05FVF9W
RU5ET1JfUVVBTENPTU09eQpDT05GSUdfTkVUX1ZFTkRPUl9SRUFMVEVLPXkKIyBDT05GSUdf
QVRQIGlzIG5vdCBzZXQKQ09ORklHXzgxMzlDUD1tCkNPTkZJR184MTM5VE9PPW0KIyBDT05G
SUdfODEzOVRPT19QSU8gaXMgbm90IHNldApDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9
eQpDT05GSUdfODEzOVRPT184MTI5PXkKIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMg
bm90IHNldApDT05GSUdfUjgxNjk9bQpDT05GSUdfTkVUX1ZFTkRPUl9SREM9eQpDT05GSUdf
UjYwNDA9bQpDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVI9eQpDT05GSUdfTkVUX1ZFTkRPUl9T
QU1TVU5HPXkKIyBDT05GSUdfU1hHQkVfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfTkVUX1ZF
TkRPUl9TRUVRIGlzIG5vdCBzZXQKQ09ORklHX05FVF9WRU5ET1JfU0lMQU49eQpDT05GSUdf
U0M5MjAzMT1tCkNPTkZJR19ORVRfVkVORE9SX1NJUz15CkNPTkZJR19TSVM5MDA9bQpDT05G
SUdfU0lTMTkwPW0KQ09ORklHX1NGQz1tCkNPTkZJR19TRkNfTVREPXkKQ09ORklHX1NGQ19N
Q0RJX01PTj15CkNPTkZJR19TRkNfU1JJT1Y9eQpDT05GSUdfTkVUX1ZFTkRPUl9TTVNDPXkK
Q09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCkNPTkZJR19FUElDMTAwPW0KIyBDT05GSUdfU01T
QzkxMVggaXMgbm90IHNldApDT05GSUdfU01TQzk0MjA9bQpDT05GSUdfTkVUX1ZFTkRPUl9T
VE1JQ1JPPXkKIyBDT05GSUdfU1RNTUFDX0VUSCBpcyBub3Qgc2V0CkNPTkZJR19ORVRfVkVO
RE9SX1NVTj15CkNPTkZJR19IQVBQWU1FQUw9bQpDT05GSUdfU1VOR0VNPW0KQ09ORklHX0NB
U1NJTkk9bQpDT05GSUdfTklVPW0KQ09ORklHX05FVF9WRU5ET1JfVEVIVVRJPXkKQ09ORklH
X1RFSFVUST1tCkNPTkZJR19ORVRfVkVORE9SX1RJPXkKIyBDT05GSUdfVElfQ1BTV19BTEUg
aXMgbm90IHNldApDT05GSUdfVExBTj1tCkNPTkZJR19ORVRfVkVORE9SX1ZJQT15CkNPTkZJ
R19WSUFfUkhJTkU9bQojIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CkNPTkZJ
R19WSUFfVkVMT0NJVFk9bQpDT05GSUdfTkVUX1ZFTkRPUl9XSVpORVQ9eQojIENPTkZJR19X
SVpORVRfVzUxMDAgaXMgbm90IHNldAojIENPTkZJR19XSVpORVRfVzUzMDAgaXMgbm90IHNl
dApDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT009eQpDT05GSUdfUENNQ0lBX1hJUkMyUFM9bQpD
T05GSUdfRkREST15CkNPTkZJR19ERUZYWD1tCiMgQ09ORklHX0RFRlhYX01NSU8gaXMgbm90
IHNldApDT05GSUdfU0tGUD1tCkNPTkZJR19ISVBQST15CkNPTkZJR19ST0FEUlVOTkVSPW0K
IyBDT05GSUdfUk9BRFJVTk5FUl9MQVJHRV9SSU5HUyBpcyBub3Qgc2V0CkNPTkZJR19ORVRf
U0IxMDAwPW0KQ09ORklHX1BIWUxJQj1tCgojCiMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwoj
CkNPTkZJR19BVDgwM1hfUEhZPW0KQ09ORklHX0FNRF9QSFk9bQpDT05GSUdfTUFSVkVMTF9Q
SFk9bQpDT05GSUdfREFWSUNPTV9QSFk9bQpDT05GSUdfUVNFTUlfUEhZPW0KQ09ORklHX0xY
VF9QSFk9bQpDT05GSUdfQ0lDQURBX1BIWT1tCkNPTkZJR19WSVRFU1NFX1BIWT1tCkNPTkZJ
R19TTVNDX1BIWT1tCkNPTkZJR19CUk9BRENPTV9QSFk9bQojIENPTkZJR19CQ003WFhYX1BI
WSBpcyBub3Qgc2V0CkNPTkZJR19CQ004N1hYX1BIWT1tCkNPTkZJR19JQ1BMVVNfUEhZPW0K
Q09ORklHX1JFQUxURUtfUEhZPW0KQ09ORklHX05BVElPTkFMX1BIWT1tCkNPTkZJR19TVEUx
MFhQPW0KQ09ORklHX0xTSV9FVDEwMTFDX1BIWT1tCkNPTkZJR19NSUNSRUxfUEhZPW0KIyBD
T05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5v
dCBzZXQKIyBDT05GSUdfTURJT19CQ01fVU5JTUFDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUlD
UkVMX0tTODk5NU1BIGlzIG5vdCBzZXQKQ09ORklHX1BMSVA9bQpDT05GSUdfUFBQPW0KQ09O
RklHX1BQUF9CU0RDT01QPW0KQ09ORklHX1BQUF9ERUZMQVRFPW0KQ09ORklHX1BQUF9GSUxU
RVI9eQpDT05GSUdfUFBQX01QUEU9bQpDT05GSUdfUFBQX01VTFRJTElOSz15CkNPTkZJR19Q
UFBPQVRNPW0KQ09ORklHX1BQUE9FPW0KQ09ORklHX1BQVFA9bQpDT05GSUdfUFBQT0wyVFA9
bQpDT05GSUdfUFBQX0FTWU5DPW0KQ09ORklHX1BQUF9TWU5DX1RUWT1tCkNPTkZJR19TTElQ
PW0KQ09ORklHX1NMSEM9bQpDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKQ09ORklHX1NMSVBf
U01BUlQ9eQpDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKCiMKIyBIb3N0LXNpZGUgVVNCIHN1
cHBvcnQgaXMgbmVlZGVkIGZvciBVU0IgTmV0d29yayBBZGFwdGVyIHN1cHBvcnQKIwpDT05G
SUdfVVNCX05FVF9EUklWRVJTPW0KQ09ORklHX1VTQl9DQVRDPW0KQ09ORklHX1VTQl9LQVdF
VEg9bQpDT05GSUdfVVNCX1BFR0FTVVM9bQpDT05GSUdfVVNCX1JUTDgxNTA9bQpDT05GSUdf
VVNCX1JUTDgxNTI9bQpDT05GSUdfVVNCX1VTQk5FVD1tCkNPTkZJR19VU0JfTkVUX0FYODgx
N1g9bQpDT05GSUdfVVNCX05FVF9BWDg4MTc5XzE3OEE9bQpDT05GSUdfVVNCX05FVF9DRENF
VEhFUj1tCkNPTkZJR19VU0JfTkVUX0NEQ19FRU09bQpDT05GSUdfVVNCX05FVF9DRENfTkNN
PW0KQ09ORklHX1VTQl9ORVRfSFVBV0VJX0NEQ19OQ009bQpDT05GSUdfVVNCX05FVF9DRENf
TUJJTT1tCkNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCkNPTkZJR19VU0JfTkVUX1NSOTcwMD1t
CkNPTkZJR19VU0JfTkVUX1NSOTgwMD1tCkNPTkZJR19VU0JfTkVUX1NNU0M3NVhYPW0KQ09O
RklHX1VTQl9ORVRfU01TQzk1WFg9bQpDT05GSUdfVVNCX05FVF9HTDYyMEE9bQpDT05GSUdf
VVNCX05FVF9ORVQxMDgwPW0KQ09ORklHX1VTQl9ORVRfUExVU0I9bQpDT05GSUdfVVNCX05F
VF9NQ1M3ODMwPW0KQ09ORklHX1VTQl9ORVRfUk5ESVNfSE9TVD1tCkNPTkZJR19VU0JfTkVU
X0NEQ19TVUJTRVQ9bQpDT05GSUdfVVNCX0FMSV9NNTYzMj15CkNPTkZJR19VU0JfQU4yNzIw
PXkKQ09ORklHX1VTQl9CRUxLSU49eQpDT05GSUdfVVNCX0FSTUxJTlVYPXkKQ09ORklHX1VT
Ql9FUFNPTjI4ODg9eQpDT05GSUdfVVNCX0tDMjE5MD15CkNPTkZJR19VU0JfTkVUX1pBVVJV
Uz1tCkNPTkZJR19VU0JfTkVUX0NYODIzMTBfRVRIPW0KQ09ORklHX1VTQl9ORVRfS0FMTUlB
PW0KQ09ORklHX1VTQl9ORVRfUU1JX1dXQU49bQpDT05GSUdfVVNCX0hTTz1tCkNPTkZJR19V
U0JfTkVUX0lOVDUxWDE9bQpDT05GSUdfVVNCX0NEQ19QSE9ORVQ9bQpDT05GSUdfVVNCX0lQ
SEVUSD1tCkNPTkZJR19VU0JfU0lFUlJBX05FVD1tCkNPTkZJR19VU0JfVkw2MDA9bQpDT05G
SUdfV0xBTj15CkNPTkZJR19QQ01DSUFfUkFZQ1M9bQpDT05GSUdfTElCRVJUQVNfVEhJTkZJ
Uk09bQojIENPTkZJR19MSUJFUlRBU19USElORklSTV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJ
R19MSUJFUlRBU19USElORklSTV9VU0I9bQpDT05GSUdfQUlSTz1tCkNPTkZJR19BVE1FTD1t
CkNPTkZJR19QQ0lfQVRNRUw9bQpDT05GSUdfUENNQ0lBX0FUTUVMPW0KQ09ORklHX0FUNzZD
NTBYX1VTQj1tCkNPTkZJR19BSVJPX0NTPW0KQ09ORklHX1BDTUNJQV9XTDM1MDE9bQojIENP
TkZJR19QUklTTTU0IGlzIG5vdCBzZXQKQ09ORklHX1VTQl9aRDEyMDE9bQpDT05GSUdfVVNC
X05FVF9STkRJU19XTEFOPW0KQ09ORklHX1JUTDgxODA9bQpDT05GSUdfUlRMODE4Nz1tCkNP
TkZJR19SVEw4MTg3X0xFRFM9eQpDT05GSUdfQURNODIxMT1tCkNPTkZJR19NQUM4MDIxMV9I
V1NJTT1tCkNPTkZJR19NV0w4Sz1tCkNPTkZJR19BVEhfQ09NTU9OPW0KQ09ORklHX0FUSF9D
QVJEUz1tCiMgQ09ORklHX0FUSF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19BVEg1Sz1tCiMg
Q09ORklHX0FUSDVLX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRINUtfVFJBQ0VSIGlz
IG5vdCBzZXQKQ09ORklHX0FUSDVLX1BDST15CkNPTkZJR19BVEg5S19IVz1tCkNPTkZJR19B
VEg5S19DT01NT049bQpDT05GSUdfQVRIOUtfQlRDT0VYX1NVUFBPUlQ9eQpDT05GSUdfQVRI
OUs9bQpDT05GSUdfQVRIOUtfUENJPXkKIyBDT05GSUdfQVRIOUtfQUhCIGlzIG5vdCBzZXQK
IyBDT05GSUdfQVRIOUtfREVCVUdGUyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX0RZTkFD
SyBpcyBub3Qgc2V0CiMgQ09ORklHX0FUSDlLX1dPVyBpcyBub3Qgc2V0CkNPTkZJR19BVEg5
S19SRktJTEw9eQojIENPTkZJR19BVEg5S19DSEFOTkVMX0NPTlRFWFQgaXMgbm90IHNldApD
T05GSUdfQVRIOUtfUENPRU09eQpDT05GSUdfQVRIOUtfSFRDPW0KIyBDT05GSUdfQVRIOUtf
SFRDX0RFQlVHRlMgaXMgbm90IHNldApDT05GSUdfQ0FSTDkxNzA9bQpDT05GSUdfQ0FSTDkx
NzBfTEVEUz15CkNPTkZJR19DQVJMOTE3MF9XUEM9eQojIENPTkZJR19DQVJMOTE3MF9IV1JO
RyBpcyBub3Qgc2V0CkNPTkZJR19BVEg2S0w9bQpDT05GSUdfQVRINktMX1NESU89bQpDT05G
SUdfQVRINktMX1VTQj1tCiMgQ09ORklHX0FUSDZLTF9ERUJVRyBpcyBub3Qgc2V0CiMgQ09O
RklHX0FUSDZLTF9UUkFDSU5HIGlzIG5vdCBzZXQKQ09ORklHX0FSNTUyMz1tCkNPTkZJR19X
SUw2MjEwPW0KQ09ORklHX1dJTDYyMTBfSVNSX0NPUj15CkNPTkZJR19XSUw2MjEwX1RSQUNJ
Tkc9eQpDT05GSUdfQVRIMTBLPW0KQ09ORklHX0FUSDEwS19QQ0k9bQojIENPTkZJR19BVEgx
MEtfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19BVEgxMEtfREVCVUdGUyBpcyBub3Qgc2V0
CiMgQ09ORklHX0FUSDEwS19UUkFDSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfV0NOMzZYWCBp
cyBub3Qgc2V0CkNPTkZJR19CNDM9bQpDT05GSUdfQjQzX0JDTUE9eQpDT05GSUdfQjQzX1NT
Qj15CkNPTkZJR19CNDNfQlVTRVNfQkNNQV9BTkRfU1NCPXkKIyBDT05GSUdfQjQzX0JVU0VT
X0JDTUEgaXMgbm90IHNldAojIENPTkZJR19CNDNfQlVTRVNfU1NCIGlzIG5vdCBzZXQKQ09O
RklHX0I0M19QQ0lfQVVUT1NFTEVDVD15CkNPTkZJR19CNDNfUENJQ09SRV9BVVRPU0VMRUNU
PXkKQ09ORklHX0I0M19QQ01DSUE9eQpDT05GSUdfQjQzX1NESU89eQpDT05GSUdfQjQzX0JD
TUFfUElPPXkKQ09ORklHX0I0M19QSU89eQpDT05GSUdfQjQzX1BIWV9HPXkKQ09ORklHX0I0
M19QSFlfTj15CkNPTkZJR19CNDNfUEhZX0xQPXkKQ09ORklHX0I0M19QSFlfSFQ9eQpDT05G
SUdfQjQzX0xFRFM9eQpDT05GSUdfQjQzX0hXUk5HPXkKIyBDT05GSUdfQjQzX0RFQlVHIGlz
IG5vdCBzZXQKQ09ORklHX0I0M0xFR0FDWT1tCkNPTkZJR19CNDNMRUdBQ1lfUENJX0FVVE9T
RUxFQ1Q9eQpDT05GSUdfQjQzTEVHQUNZX1BDSUNPUkVfQVVUT1NFTEVDVD15CkNPTkZJR19C
NDNMRUdBQ1lfTEVEUz15CkNPTkZJR19CNDNMRUdBQ1lfSFdSTkc9eQpDT05GSUdfQjQzTEVH
QUNZX0RFQlVHPXkKQ09ORklHX0I0M0xFR0FDWV9ETUE9eQpDT05GSUdfQjQzTEVHQUNZX1BJ
Tz15CkNPTkZJR19CNDNMRUdBQ1lfRE1BX0FORF9QSU9fTU9ERT15CiMgQ09ORklHX0I0M0xF
R0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0CiMgQ09ORklHX0I0M0xFR0FDWV9QSU9fTU9ERSBp
cyBub3Qgc2V0CkNPTkZJR19CUkNNVVRJTD1tCkNPTkZJR19CUkNNU01BQz1tCkNPTkZJR19C
UkNNRk1BQz1tCkNPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDPXkKQ09ORklHX0JSQ01GTUFD
X1BST1RPX01TR0JVRj15CkNPTkZJR19CUkNNRk1BQ19TRElPPXkKQ09ORklHX0JSQ01GTUFD
X1VTQj15CkNPTkZJR19CUkNNRk1BQ19QQ0lFPXkKIyBDT05GSUdfQlJDTV9UUkFDSU5HIGlz
IG5vdCBzZXQKIyBDT05GSUdfQlJDTURCRyBpcyBub3Qgc2V0CkNPTkZJR19IT1NUQVA9bQpD
T05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKIyBDT05GSUdfSE9TVEFQX0ZJUk1XQVJFX05WUkFN
IGlzIG5vdCBzZXQKQ09ORklHX0hPU1RBUF9QTFg9bQpDT05GSUdfSE9TVEFQX1BDST1tCkNP
TkZJR19IT1NUQVBfQ1M9bQojIENPTkZJR19JUFcyMTAwIGlzIG5vdCBzZXQKQ09ORklHX0lQ
VzIyMDA9bQpDT05GSUdfSVBXMjIwMF9NT05JVE9SPXkKQ09ORklHX0lQVzIyMDBfUkFESU9U
QVA9eQpDT05GSUdfSVBXMjIwMF9QUk9NSVNDVU9VUz15CkNPTkZJR19JUFcyMjAwX1FPUz15
CiMgQ09ORklHX0lQVzIyMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfTElCSVBXPW0KIyBD
T05GSUdfTElCSVBXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lXTFdJRkk9bQpDT05GSUdf
SVdMV0lGSV9MRURTPXkKQ09ORklHX0lXTERWTT1tCkNPTkZJR19JV0xNVk09bQpDT05GSUdf
SVdMV0lGSV9PUE1PREVfTU9EVUxBUj15CiMgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVS
SU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfSVdMV0lGSV9VQVBTRCBpcyBub3Qgc2V0CgojCiMg
RGVidWdnaW5nIE9wdGlvbnMKIwojIENPTkZJR19JV0xXSUZJX0RFQlVHIGlzIG5vdCBzZXQK
IyBDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORyBpcyBub3Qgc2V0CkNPTkZJR19JV0xF
R0FDWT1tCkNPTkZJR19JV0w0OTY1PW0KQ09ORklHX0lXTDM5NDU9bQoKIwojIGl3bDM5NDUg
LyBpd2w0OTY1IERlYnVnZ2luZyBPcHRpb25zCiMKIyBDT05GSUdfSVdMRUdBQ1lfREVCVUcg
aXMgbm90IHNldApDT05GSUdfTElCRVJUQVM9bQpDT05GSUdfTElCRVJUQVNfVVNCPW0KQ09O
RklHX0xJQkVSVEFTX0NTPW0KQ09ORklHX0xJQkVSVEFTX1NESU89bQojIENPTkZJR19MSUJF
UlRBU19TUEkgaXMgbm90IHNldAojIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0
CkNPTkZJR19MSUJFUlRBU19NRVNIPXkKQ09ORklHX0hFUk1FUz1tCiMgQ09ORklHX0hFUk1F
U19QUklTTSBpcyBub3Qgc2V0CkNPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVD15CkNP
TkZJR19QTFhfSEVSTUVTPW0KQ09ORklHX1RNRF9IRVJNRVM9bQpDT05GSUdfTk9SVEVMX0hF
Uk1FUz1tCkNPTkZJR19QQ01DSUFfSEVSTUVTPW0KQ09ORklHX1BDTUNJQV9TUEVDVFJVTT1t
CkNPTkZJR19PUklOT0NPX1VTQj1tCkNPTkZJR19QNTRfQ09NTU9OPW0KQ09ORklHX1A1NF9V
U0I9bQpDT05GSUdfUDU0X1BDST1tCiMgQ09ORklHX1A1NF9TUEkgaXMgbm90IHNldApDT05G
SUdfUDU0X0xFRFM9eQpDT05GSUdfUlQyWDAwPW0KQ09ORklHX1JUMjQwMFBDST1tCkNPTkZJ
R19SVDI1MDBQQ0k9bQpDT05GSUdfUlQ2MVBDST1tCkNPTkZJR19SVDI4MDBQQ0k9bQpDT05G
SUdfUlQyODAwUENJX1JUMzNYWD15CkNPTkZJR19SVDI4MDBQQ0lfUlQzNVhYPXkKQ09ORklH
X1JUMjgwMFBDSV9SVDUzWFg9eQpDT05GSUdfUlQyODAwUENJX1JUMzI5MD15CkNPTkZJR19S
VDI1MDBVU0I9bQpDT05GSUdfUlQ3M1VTQj1tCkNPTkZJR19SVDI4MDBVU0I9bQpDT05GSUdf
UlQyODAwVVNCX1JUMzNYWD15CkNPTkZJR19SVDI4MDBVU0JfUlQzNVhYPXkKQ09ORklHX1JU
MjgwMFVTQl9SVDM1NzM9eQpDT05GSUdfUlQyODAwVVNCX1JUNTNYWD15CkNPTkZJR19SVDI4
MDBVU0JfUlQ1NVhYPXkKIyBDT05GSUdfUlQyODAwVVNCX1VOS05PV04gaXMgbm90IHNldApD
T05GSUdfUlQyODAwX0xJQj1tCkNPTkZJR19SVDI4MDBfTElCX01NSU89bQpDT05GSUdfUlQy
WDAwX0xJQl9NTUlPPW0KQ09ORklHX1JUMlgwMF9MSUJfUENJPW0KQ09ORklHX1JUMlgwMF9M
SUJfVVNCPW0KQ09ORklHX1JUMlgwMF9MSUI9bQpDT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FS
RT15CkNPTkZJR19SVDJYMDBfTElCX0NSWVBUTz15CkNPTkZJR19SVDJYMDBfTElCX0xFRFM9
eQojIENPTkZJR19SVDJYMDBfREVCVUcgaXMgbm90IHNldApDT05GSUdfUlRMX0NBUkRTPW0K
Q09ORklHX1JUTDgxOTJDRT1tCkNPTkZJR19SVEw4MTkyU0U9bQpDT05GSUdfUlRMODE5MkRF
PW0KQ09ORklHX1JUTDg3MjNBRT1tCkNPTkZJR19SVEw4NzIzQkU9bQpDT05GSUdfUlRMODE4
OEVFPW0KQ09ORklHX1JUTDgxOTJFRT1tCkNPTkZJR19SVEw4ODIxQUU9bQpDT05GSUdfUlRM
ODE5MkNVPW0KQ09ORklHX1JUTFdJRkk9bQpDT05GSUdfUlRMV0lGSV9QQ0k9bQpDT05GSUdf
UlRMV0lGSV9VU0I9bQojIENPTkZJR19SVExXSUZJX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklH
X1JUTDgxOTJDX0NPTU1PTj1tCkNPTkZJR19SVEw4NzIzX0NPTU1PTj1tCkNPTkZJR19SVExC
VENPRVhJU1Q9bQojIENPTkZJR19XTF9USSBpcyBub3Qgc2V0CkNPTkZJR19aRDEyMTFSVz1t
CiMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX01XSUZJRVg9bQpD
T05GSUdfTVdJRklFWF9TRElPPW0KQ09ORklHX01XSUZJRVhfUENJRT1tCkNPTkZJR19NV0lG
SUVYX1VTQj1tCiMgQ09ORklHX0NXMTIwMCBpcyBub3Qgc2V0CkNPTkZJR19SU0lfOTFYPW0K
Q09ORklHX1JTSV9ERUJVR0ZTPXkKIyBDT05GSUdfUlNJX1NESU8gaXMgbm90IHNldApDT05G
SUdfUlNJX1VTQj1tCgojCiMgV2lNQVggV2lyZWxlc3MgQnJvYWRiYW5kIGRldmljZXMKIwpD
T05GSUdfV0lNQVhfSTI0MDBNPW0KQ09ORklHX1dJTUFYX0kyNDAwTV9VU0I9bQpDT05GSUdf
V0lNQVhfSTI0MDBNX0RFQlVHX0xFVkVMPTgKQ09ORklHX1dBTj15CkNPTkZJR19MQU5NRURJ
QT1tCkNPTkZJR19IRExDPW0KQ09ORklHX0hETENfUkFXPW0KQ09ORklHX0hETENfUkFXX0VU
SD1tCkNPTkZJR19IRExDX0NJU0NPPW0KQ09ORklHX0hETENfRlI9bQpDT05GSUdfSERMQ19Q
UFA9bQojIENPTkZJR19IRExDX1gyNSBpcyBub3Qgc2V0CkNPTkZJR19QQ0kyMDBTWU49bQpD
T05GSUdfV0FOWEw9bQojIENPTkZJR19QQzMwMFRPTyBpcyBub3Qgc2V0CkNPTkZJR19GQVJT
WU5DPW0KQ09ORklHX0RTQ0M0PW0KQ09ORklHX0RTQ0M0X1BDSVNZTkM9eQpDT05GSUdfRFND
QzRfUENJX1JTVD15CkNPTkZJR19ETENJPW0KQ09ORklHX0RMQ0lfTUFYPTgKIyBDT05GSUdf
U0JOSSBpcyBub3Qgc2V0CkNPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9bQpDT05GSUdfWEVO
X05FVERFVl9GUk9OVEVORD1tCkNPTkZJR19YRU5fTkVUREVWX0JBQ0tFTkQ9bQpDT05GSUdf
Vk1YTkVUMz1tCkNPTkZJR19IWVBFUlZfTkVUPW0KQ09ORklHX0lTRE49eQojIENPTkZJR19J
U0ROX0k0TCBpcyBub3Qgc2V0CkNPTkZJR19JU0ROX0NBUEk9bQpDT05GSUdfQ0FQSV9UUkFD
RT15CkNPTkZJR19JU0ROX0NBUElfQ0FQSTIwPW0KQ09ORklHX0lTRE5fQ0FQSV9NSURETEVX
QVJFPXkKCiMKIyBDQVBJIGhhcmR3YXJlIGRyaXZlcnMKIwpDT05GSUdfQ0FQSV9BVk09eQpD
T05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ0k9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQ
Q0lWND15CkNPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCkNPTkZJR19JU0ROX0RS
Vl9BVk1CMV9BVk1fQ1M9bQpDT05GSUdfSVNETl9EUlZfQVZNQjFfVDFQQ0k9bQpDT05GSUdf
SVNETl9EUlZfQVZNQjFfQzQ9bQpDT05GSUdfQ0FQSV9FSUNPTj15CkNPTkZJR19JU0ROX0RJ
VkFTPW0KQ09ORklHX0lTRE5fRElWQVNfQlJJUENJPXkKQ09ORklHX0lTRE5fRElWQVNfUFJJ
UENJPXkKQ09ORklHX0lTRE5fRElWQVNfRElWQUNBUEk9bQpDT05GSUdfSVNETl9ESVZBU19V
U0VSSURJPW0KQ09ORklHX0lTRE5fRElWQVNfTUFJTlQ9bQpDT05GSUdfSVNETl9EUlZfR0lH
QVNFVD1tCkNPTkZJR19HSUdBU0VUX0NBUEk9eQojIENPTkZJR19HSUdBU0VUX0RVTU1ZTEwg
aXMgbm90IHNldApDT05GSUdfR0lHQVNFVF9CQVNFPW0KQ09ORklHX0dJR0FTRVRfTTEwNT1t
CkNPTkZJR19HSUdBU0VUX00xMDE9bQojIENPTkZJR19HSUdBU0VUX0RFQlVHIGlzIG5vdCBz
ZXQKQ09ORklHX0hZU0ROPW0KQ09ORklHX0hZU0ROX0NBUEk9eQpDT05GSUdfTUlTRE49bQpD
T05GSUdfTUlTRE5fRFNQPW0KQ09ORklHX01JU0ROX0wxT0lQPW0KCiMKIyBtSVNETiBoYXJk
d2FyZSBkcml2ZXJzCiMKQ09ORklHX01JU0ROX0hGQ1BDST1tCkNPTkZJR19NSVNETl9IRkNN
VUxUST1tCkNPTkZJR19NSVNETl9IRkNVU0I9bQpDT05GSUdfTUlTRE5fQVZNRlJJVFo9bQpD
T05GSUdfTUlTRE5fU1BFRURGQVg9bQpDT05GSUdfTUlTRE5fSU5GSU5FT049bQpDT05GSUdf
TUlTRE5fVzY2OTI9bQojIENPTkZJR19NSVNETl9ORVRKRVQgaXMgbm90IHNldApDT05GSUdf
TUlTRE5fSVBBQz1tCkNPTkZJR19NSVNETl9JU0FSPW0KCiMKIyBJbnB1dCBkZXZpY2Ugc3Vw
cG9ydAojCkNPTkZJR19JTlBVVD15CkNPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KQ09ORklH
X0lOUFVUX1BPTExERVY9bQpDT05GSUdfSU5QVVRfU1BBUlNFS01BUD1tCiMgQ09ORklHX0lO
UFVUX01BVFJJWEtNQVAgaXMgbm90IHNldAoKIwojIFVzZXJsYW5kIGludGVyZmFjZXMKIwpD
T05GSUdfSU5QVVRfTU9VU0VERVY9eQpDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQpD
T05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNApDT05GSUdfSU5QVVRfTU9VU0VE
RVZfU0NSRUVOX1k9NzY4CkNPTkZJR19JTlBVVF9KT1lERVY9bQpDT05GSUdfSU5QVVRfRVZE
RVY9bQojIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CgojCiMgSW5wdXQgRGV2aWNl
IERyaXZlcnMKIwpDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQpDT05GSUdfS0VZQk9BUkRfQURQ
NTU4OD1tCiMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODkgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfQVRLQkQ9eQojIENPTkZJR19LRVlCT0FSRF9RVDEwNzAgaXMgbm90IHNldApDT05G
SUdfS0VZQk9BUkRfUVQyMTYwPW0KQ09ORklHX0tFWUJPQVJEX0xLS0JEPW0KIyBDT05GSUdf
S0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0tFWUJPQVJEX0dQSU9fUE9MTEVE
IGlzIG5vdCBzZXQKIyBDT05GSUdfS0VZQk9BUkRfVENBNjQxNiBpcyBub3Qgc2V0CiMgQ09O
RklHX0tFWUJPQVJEX1RDQTg0MTggaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NQVRS
SVggaXMgbm90IHNldApDT05GSUdfS0VZQk9BUkRfTE04MzIzPW0KIyBDT05GSUdfS0VZQk9B
UkRfTE04MzMzIGlzIG5vdCBzZXQKQ09ORklHX0tFWUJPQVJEX01BWDczNTk9bQojIENPTkZJ
R19LRVlCT0FSRF9NQ1MgaXMgbm90IHNldAojIENPTkZJR19LRVlCT0FSRF9NUFIxMjEgaXMg
bm90IHNldApDT05GSUdfS0VZQk9BUkRfTkVXVE9OPW0KQ09ORklHX0tFWUJPQVJEX09QRU5D
T1JFUz1tCiMgQ09ORklHX0tFWUJPQVJEX1NBTVNVTkcgaXMgbm90IHNldApDT05GSUdfS0VZ
Qk9BUkRfU1RPV0FXQVk9bQpDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KQ09ORklHX0tFWUJP
QVJEX1hUS0JEPW0KQ09ORklHX0lOUFVUX01PVVNFPXkKQ09ORklHX01PVVNFX1BTMj1tCkNP
TkZJR19NT1VTRV9QUzJfQUxQUz15CkNPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKQ09O
RklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQpDT05GSUdfTU9VU0VfUFMyX0NZUFJFU1M9eQpD
T05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5U
PXkKQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSD15CkNPTkZJR19NT1VTRV9QUzJfU0VOVEVM
SUM9eQojIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldApDT05GSUdfTU9V
U0VfUFMyX0ZPQ0FMVEVDSD15CiMgQ09ORklHX01PVVNFX1BTMl9WTU1PVVNFIGlzIG5vdCBz
ZXQKQ09ORklHX01PVVNFX1NFUklBTD1tCkNPTkZJR19NT1VTRV9BUFBMRVRPVUNIPW0KQ09O
RklHX01PVVNFX0JDTTU5NzQ9bQpDT05GSUdfTU9VU0VfQ1lBUEE9bQojIENPTkZJR19NT1VT
RV9FTEFOX0kyQyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9WU1hYWEFBPW0KIyBDT05GSUdf
TU9VU0VfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDPW0KQ09O
RklHX01PVVNFX1NZTkFQVElDU19VU0I9bQpDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQpDT05G
SUdfSk9ZU1RJQ0tfQU5BTE9HPW0KQ09ORklHX0pPWVNUSUNLX0EzRD1tCkNPTkZJR19KT1lT
VElDS19BREk9bQpDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQpDT05GSUdfSk9ZU1RJQ0tfR0Yy
Sz1tCkNPTkZJR19KT1lTVElDS19HUklQPW0KQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQpD
T05GSUdfSk9ZU1RJQ0tfR1VJTExFTU9UPW0KQ09ORklHX0pPWVNUSUNLX0lOVEVSQUNUPW0K
Q09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQpDT05GSUdfSk9ZU1RJQ0tfVE1EQz1tCkNP
TkZJR19KT1lTVElDS19JRk9SQ0U9bQpDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CkNP
TkZJR19KT1lTVElDS19JRk9SQ0VfMjMyPXkKQ09ORklHX0pPWVNUSUNLX1dBUlJJT1I9bQpD
T05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQpDT05GSUdfSk9ZU1RJQ0tfU1BBQ0VPUkI9bQpD
T05GSUdfSk9ZU1RJQ0tfU1BBQ0VCQUxMPW0KQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQpD
T05GSUdfSk9ZU1RJQ0tfVFdJREpPWT1tCkNPTkZJR19KT1lTVElDS19aSEVOSFVBPW0KQ09O
RklHX0pPWVNUSUNLX0RCOT1tCkNPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KQ09ORklHX0pP
WVNUSUNLX1RVUkJPR1JBRlg9bQojIENPTkZJR19KT1lTVElDS19BUzUwMTEgaXMgbm90IHNl
dApDT05GSUdfSk9ZU1RJQ0tfSk9ZRFVNUD1tCkNPTkZJR19KT1lTVElDS19YUEFEPW0KQ09O
RklHX0pPWVNUSUNLX1hQQURfRkY9eQpDT05GSUdfSk9ZU1RJQ0tfWFBBRF9MRURTPXkKQ09O
RklHX0pPWVNUSUNLX1dBTEtFUkEwNzAxPW0KQ09ORklHX0lOUFVUX1RBQkxFVD15CkNPTkZJ
R19UQUJMRVRfVVNCX0FDRUNBRD1tCkNPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCkNPTkZJ
R19UQUJMRVRfVVNCX0dUQ089bQpDT05GSUdfVEFCTEVUX1VTQl9IQU5XQU5HPW0KQ09ORklH
X1RBQkxFVF9VU0JfS0JUQUI9bQpDT05GSUdfVEFCTEVUX1NFUklBTF9XQUNPTTQ9bQpDT05G
SUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQpDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj1tCkNP
TkZJR19UT1VDSFNDUkVFTl9BRDc4Nzc9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5PW0K
Q09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkM9bQojIENPTkZJR19UT1VDSFNDUkVFTl9B
RDc4NzlfU1BJIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX0FUTUVMX01YVD1tCiMg
Q09ORklHX1RPVUNIU0NSRUVOX0FVT19QSVhDSVIgaXMgbm90IHNldAojIENPTkZJR19UT1VD
SFNDUkVFTl9CVTIxMDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1k4Q1RN
RzExMCBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX0NZVFRTUF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQ1lUVFNQNF9DT1JFIGlzIG5vdCBzZXQKQ09O
RklHX1RPVUNIU0NSRUVOX0RZTkFQUk89bQpDT05GSUdfVE9VQ0hTQ1JFRU5fSEFNUFNISVJF
PW0KQ09ORklHX1RPVUNIU0NSRUVOX0VFVEk9bQpDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRT
VT1tCiMgQ09ORklHX1RPVUNIU0NSRUVOX0dPT0RJWCBpcyBub3Qgc2V0CiMgQ09ORklHX1RP
VUNIU0NSRUVOX0lMSTIxMFggaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9
bQojIENPTkZJR19UT1VDSFNDUkVFTl9FTEFOIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NS
RUVOX0VMTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMT1tCiMgQ09ORklHX1RP
VUNIU0NSRUVOX1dBQ09NX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1RPVUNIU0NSRUVOX01B
WDExODAxIGlzIG5vdCBzZXQKQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDA9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9NTVMxMTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fTVRP
VUNIPW0KQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTz1tCkNPTkZJR19UT1VDSFNDUkVFTl9N
SzcxMj1tCkNPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVD1tCiMgQ09ORklHX1RPVUNIU0NS
RUVOX0VEVF9GVDVYMDYgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdI
VD1tCkNPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTj1tCiMgQ09ORklHX1RPVUNIU0NSRUVO
X1BJWENJUiBpcyBub3Qgc2V0CkNPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFg9bQpDT05GSUdf
VE9VQ0hTQ1JFRU5fV005NzA1PXkKQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMj15CkNPTkZJ
R19UT1VDSFNDUkVFTl9XTTk3MTM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lU
RT1tCkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfRUdBTEFYPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9QQU5KSVQ9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCXzNNPXkKQ09ORklHX1RPVUNI
U0NSRUVOX1VTQl9JVE09eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VUVVJCTz15CkNPTkZJ
R19UT1VDSFNDUkVFTl9VU0JfR1VOWkU9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0RNQ19U
U0MxMD15CkNPTkZJR19UT1VDSFNDUkVFTl9VU0JfSVJUT1VDSD15CkNPTkZJR19UT1VDSFND
UkVFTl9VU0JfSURFQUxURUs9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dFTkVSQUxfVE9V
Q0g9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0dPVE9QPXkKQ09ORklHX1RPVUNIU0NSRUVO
X1VTQl9KQVNURUM9eQpDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0VMTz15CkNPTkZJR19UT1VD
SFNDUkVFTl9VU0JfRTJJPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9aWVRST05JQz15CkNP
TkZJR19UT1VDSFNDUkVFTl9VU0JfRVRUX1RDNDVVU0I9eQpDT05GSUdfVE9VQ0hTQ1JFRU5f
VVNCX05FWElPPXkKQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9FQVNZVE9VQ0g9eQpDT05GSUdf
VE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMz1tCkNPTkZJR19UT1VDSFNDUkVFTl9UU0NfU0VSSU89
bQojIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA1IGlzIG5vdCBzZXQKQ09ORklHX1RPVUNI
U0NSRUVOX1RTQzIwMDc9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TVDEyMzIgaXMgbm90IHNl
dApDT05GSUdfVE9VQ0hTQ1JFRU5fU1VSNDA9bQojIENPTkZJR19UT1VDSFNDUkVFTl9TWDg2
NTQgaXMgbm90IHNldApDT05GSUdfVE9VQ0hTQ1JFRU5fVFBTNjUwN1g9bQojIENPTkZJR19U
T1VDSFNDUkVFTl9aRk9SQ0UgaXMgbm90IHNldApDT05GSUdfSU5QVVRfTUlTQz15CiMgQ09O
RklHX0lOUFVUX0FENzE0WCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0JNQTE1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OIGlzIG5vdCBzZXQKQ09ORklHX0lO
UFVUX1BDU1BLUj1tCiMgQ09ORklHX0lOUFVUX01NQTg0NTAgaXMgbm90IHNldAojIENPTkZJ
R19JTlBVVF9NUFUzMDUwIGlzIG5vdCBzZXQKQ09ORklHX0lOUFVUX0FQQU5FTD1tCiMgQ09O
RklHX0lOUFVUX0dQMkEgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX0JFRVBFUiBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0dQSU9fVElMVF9QT0xMRUQgaXMgbm90IHNldApD
T05GSUdfSU5QVVRfQVRMQVNfQlROUz1tCkNPTkZJR19JTlBVVF9BVElfUkVNT1RFMj1tCkNP
TkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URT1tCiMgQ09ORklHX0lOUFVUX0tYVEo5IGlzIG5v
dCBzZXQKQ09ORklHX0lOUFVUX1BPV0VSTUFURT1tCkNPTkZJR19JTlBVVF9ZRUFMSU5LPW0K
Q09ORklHX0lOUFVUX0NNMTA5PW0KQ09ORklHX0lOUFVUX1VJTlBVVD1tCiMgQ09ORklHX0lO
UFVUX1BDRjg1NzQgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNP
REVSIGlzIG5vdCBzZXQKIyBDT05GSUdfSU5QVVRfQURYTDM0WCBpcyBub3Qgc2V0CiMgQ09O
RklHX0lOUFVUX0lNU19QQ1UgaXMgbm90IHNldAojIENPTkZJR19JTlBVVF9DTUEzMDAwIGlz
IG5vdCBzZXQKQ09ORklHX0lOUFVUX1hFTl9LQkRERVZfRlJPTlRFTkQ9eQpDT05GSUdfSU5Q
VVRfSURFQVBBRF9TTElERUJBUj1tCiMgQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUyBp
cyBub3Qgc2V0CiMgQ09ORklHX0lOUFVUX0RSVjI2NjdfSEFQVElDUyBpcyBub3Qgc2V0Cgoj
CiMgSGFyZHdhcmUgSS9PIHBvcnRzCiMKQ09ORklHX1NFUklPPXkKQ09ORklHX0FSQ0hfTUlH
SFRfSEFWRV9QQ19TRVJJTz15CkNPTkZJR19TRVJJT19JODA0Mj15CkNPTkZJR19TRVJJT19T
RVJQT1JUPW0KQ09ORklHX1NFUklPX0NUODJDNzEwPW0KQ09ORklHX1NFUklPX1BBUktCRD1t
CkNPTkZJR19TRVJJT19QQ0lQUzI9bQpDT05GSUdfU0VSSU9fTElCUFMyPXkKQ09ORklHX1NF
UklPX1JBVz1tCkNPTkZJR19TRVJJT19BTFRFUkFfUFMyPW0KIyBDT05GSUdfU0VSSU9fUFMy
TVVMVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklPX0FSQ19QUzIgaXMgbm90IHNldApDT05G
SUdfSFlQRVJWX0tFWUJPQVJEPW0KQ09ORklHX0dBTUVQT1JUPW0KQ09ORklHX0dBTUVQT1JU
X05TNTU4PW0KQ09ORklHX0dBTUVQT1JUX0w0PW0KQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9
bQpDT05GSUdfR0FNRVBPUlRfRk04MDE9bQoKIwojIENoYXJhY3RlciBkZXZpY2VzCiMKQ09O
RklHX1RUWT15CkNPTkZJR19WVD15CkNPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CkNP
TkZJR19WVF9DT05TT0xFPXkKQ09ORklHX1ZUX0NPTlNPTEVfU0xFRVA9eQpDT05GSUdfSFdf
Q09OU09MRT15CkNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQpDT05GSUdfVU5JWDk4
X1BUWVM9eQpDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUz15CiMgQ09ORklHX0xF
R0FDWV9QVFlTIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CkNPTkZJ
R19ST0NLRVRQT1JUPW0KQ09ORklHX0NZQ0xBREVTPW0KIyBDT05GSUdfQ1laX0lOVFIgaXMg
bm90IHNldApDT05GSUdfTU9YQV9JTlRFTExJTz1tCkNPTkZJR19NT1hBX1NNQVJUSU89bQpD
T05GSUdfU1lOQ0xJTks9bQpDT05GSUdfU1lOQ0xJTktNUD1tCkNPTkZJR19TWU5DTElOS19H
VD1tCkNPTkZJR19OT1pPTUk9bQpDT05GSUdfSVNJPW0KQ09ORklHX05fSERMQz1tCkNPTkZJ
R19OX0dTTT1tCiMgQ09ORklHX1RSQUNFX1NJTksgaXMgbm90IHNldApDT05GSUdfREVWTUVN
PXkKIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CgojCiMgU2VyaWFsIGRyaXZlcnMKIwpD
T05GSUdfU0VSSUFMX0VBUkxZQ09OPXkKQ09ORklHX1NFUklBTF84MjUwPXkKIyBDT05GSUdf
U0VSSUFMXzgyNTBfREVQUkVDQVRFRF9PUFRJT05TIGlzIG5vdCBzZXQKQ09ORklHX1NFUklB
TF84MjUwX1BOUD15CkNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKQ09ORklHX1NFUklB
TF84MjUwX0RNQT15CkNPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQpDT05GSUdfU0VSSUFMXzgy
NTBfQ1M9bQpDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKQ09ORklHX1NFUklBTF84
MjUwX1JVTlRJTUVfVUFSVFM9NApDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQpDT05G
SUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CkNPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9J
UlE9eQojIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKQ09ORklH
X1NFUklBTF84MjUwX1JTQT15CkNPTkZJR19TRVJJQUxfODI1MF9EVz15CkNPTkZJR19TRVJJ
QUxfODI1MF9GSU5URUs9bQoKIwojIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKIwoj
IENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9NQVgz
MTBYIGlzIG5vdCBzZXQKQ09ORklHX1NFUklBTF9DT1JFPXkKQ09ORklHX1NFUklBTF9DT1JF
X0NPTlNPTEU9eQpDT05GSUdfU0VSSUFMX0pTTT1tCiMgQ09ORklHX1NFUklBTF9TQ0NOWFAg
aXMgbm90IHNldAojIENPTkZJR19TRVJJQUxfU0MxNklTN1hYIGlzIG5vdCBzZXQKIyBDT05G
SUdfU0VSSUFMX0FMVEVSQV9KVEFHVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9B
TFRFUkFfVUFSVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NFUklBTF9JRlg2WDYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfU0VSSUFMX0FSQyBpcyBub3Qgc2V0CkNPTkZJR19TRVJJQUxfUlAyPW0K
Q09ORklHX1NFUklBTF9SUDJfTlJfVUFSVFM9MzIKIyBDT05GSUdfU0VSSUFMX0ZTTF9MUFVB
UlQgaXMgbm90IHNldAojIENPTkZJR19UVFlfUFJJTlRLIGlzIG5vdCBzZXQKQ09ORklHX1BS
SU5URVI9bQojIENPTkZJR19MUF9DT05TT0xFIGlzIG5vdCBzZXQKQ09ORklHX1BQREVWPW0K
Q09ORklHX0hWQ19EUklWRVI9eQpDT05GSUdfSFZDX0lSUT15CkNPTkZJR19IVkNfWEVOPXkK
Q09ORklHX0hWQ19YRU5fRlJPTlRFTkQ9eQpDT05GSUdfVklSVElPX0NPTlNPTEU9bQpDT05G
SUdfSVBNSV9IQU5ETEVSPW0KIyBDT05GSUdfSVBNSV9QQU5JQ19FVkVOVCBpcyBub3Qgc2V0
CkNPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQpDT05GSUdfSVBNSV9TST1tCiMgQ09O
RklHX0lQTUlfU0lfUFJPQkVfREVGQVVMVFMgaXMgbm90IHNldAojIENPTkZJR19JUE1JX1NT
SUYgaXMgbm90IHNldApDT05GSUdfSVBNSV9XQVRDSERPRz1tCkNPTkZJR19JUE1JX1BPV0VS
T0ZGPW0KQ09ORklHX0hXX1JBTkRPTT1tCiMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVN
IGlzIG5vdCBzZXQKQ09ORklHX0hXX1JBTkRPTV9JTlRFTD1tCkNPTkZJR19IV19SQU5ET01f
QU1EPW0KQ09ORklHX0hXX1JBTkRPTV9WSUE9bQpDT05GSUdfSFdfUkFORE9NX1ZJUlRJTz1t
CkNPTkZJR19IV19SQU5ET01fVFBNPW0KQ09ORklHX05WUkFNPW0KQ09ORklHX1IzOTY0PW0K
Q09ORklHX0FQUExJQ09NPW0KCiMKIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKIwpDT05G
SUdfU1lOQ0xJTktfQ1M9bQpDT05GSUdfQ0FSRE1BTl80MDAwPW0KQ09ORklHX0NBUkRNQU5f
NDA0MD1tCkNPTkZJR19JUFdJUkVMRVNTPW0KQ09ORklHX01XQVZFPW0KQ09ORklHX1JBV19E
UklWRVI9bQpDT05GSUdfTUFYX1JBV19ERVZTPTI1NgpDT05GSUdfSFBFVD15CkNPTkZJR19I
UEVUX01NQVA9eQpDT05GSUdfSFBFVF9NTUFQX0RFRkFVTFQ9eQpDT05GSUdfSEFOR0NIRUNL
X1RJTUVSPW0KQ09ORklHX1RDR19UUE09bQpDT05GSUdfVENHX1RJUz1tCkNPTkZJR19UQ0df
VElTX0kyQ19BVE1FTD1tCkNPTkZJR19UQ0dfVElTX0kyQ19JTkZJTkVPTj1tCkNPTkZJR19U
Q0dfVElTX0kyQ19OVVZPVE9OPW0KQ09ORklHX1RDR19OU0M9bQpDT05GSUdfVENHX0FUTUVM
PW0KQ09ORklHX1RDR19JTkZJTkVPTj1tCkNPTkZJR19UQ0dfWEVOPW0KQ09ORklHX1RDR19D
UkI9bQpDT05GSUdfVENHX1RJU19TVDMzWlAyND1tCkNPTkZJR19UQ0dfVElTX1NUMzNaUDI0
X0kyQz1tCiMgQ09ORklHX1RDR19USVNfU1QzM1pQMjRfU1BJIGlzIG5vdCBzZXQKQ09ORklH
X1RFTENMT0NLPW0KQ09ORklHX0RFVlBPUlQ9eQojIENPTkZJR19YSUxMWUJVUyBpcyBub3Qg
c2V0CgojCiMgSTJDIHN1cHBvcnQKIwpDT05GSUdfSTJDPXkKQ09ORklHX0FDUElfSTJDX09Q
UkVHSU9OPXkKQ09ORklHX0kyQ19CT0FSRElORk89eQpDT05GSUdfSTJDX0NPTVBBVD15CkNP
TkZJR19JMkNfQ0hBUkRFVj1tCkNPTkZJR19JMkNfTVVYPW0KCiMKIyBNdWx0aXBsZXhlciBJ
MkMgQ2hpcCBzdXBwb3J0CiMKIyBDT05GSUdfSTJDX01VWF9HUElPIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJDX01VWF9QQ0E5NTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QQ0E5
NTR4IGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX01VWF9QSU5DVFJMIGlzIG5vdCBzZXQKQ09O
RklHX0kyQ19IRUxQRVJfQVVUTz15CkNPTkZJR19JMkNfU01CVVM9bQpDT05GSUdfSTJDX0FM
R09CSVQ9bQpDT05GSUdfSTJDX0FMR09QQ0E9bQoKIwojIEkyQyBIYXJkd2FyZSBCdXMgc3Vw
cG9ydAojCgojCiMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKIwpDT05GSUdf
STJDX0FMSTE1MzU9bQpDT05GSUdfSTJDX0FMSTE1NjM9bQpDT05GSUdfSTJDX0FMSTE1WDM9
bQpDT05GSUdfSTJDX0FNRDc1Nj1tCkNPTkZJR19JMkNfQU1ENzU2X1M0ODgyPW0KQ09ORklH
X0kyQ19BTUQ4MTExPW0KQ09ORklHX0kyQ19JODAxPW0KQ09ORklHX0kyQ19JU0NIPW0KQ09O
RklHX0kyQ19JU01UPW0KQ09ORklHX0kyQ19QSUlYND1tCkNPTkZJR19JMkNfTkZPUkNFMj1t
CkNPTkZJR19JMkNfTkZPUkNFMl9TNDk4NT1tCkNPTkZJR19JMkNfU0lTNTU5NT1tCkNPTkZJ
R19JMkNfU0lTNjMwPW0KQ09ORklHX0kyQ19TSVM5Nlg9bQpDT05GSUdfSTJDX1ZJQT1tCkNP
TkZJR19JMkNfVklBUFJPPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NDTUk9
bQoKIwojIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3Rl
bS1vbi1jaGlwKQojCiMgQ09ORklHX0kyQ19DQlVTX0dQSU8gaXMgbm90IHNldApDT05GSUdf
STJDX0RFU0lHTldBUkVfQ09SRT1tCkNPTkZJR19JMkNfREVTSUdOV0FSRV9QTEFURk9STT1t
CkNPTkZJR19JMkNfREVTSUdOV0FSRV9QQ0k9bQojIENPTkZJR19JMkNfR1BJTyBpcyBub3Qg
c2V0CkNPTkZJR19JMkNfS0VNUExEPW0KQ09ORklHX0kyQ19PQ09SRVM9bQpDT05GSUdfSTJD
X1BDQV9QTEFURk9STT1tCiMgQ09ORklHX0kyQ19QWEFfUENJIGlzIG5vdCBzZXQKQ09ORklH
X0kyQ19TSU1URUM9bQojIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKCiMKIyBFeHRl
cm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiMKQ09ORklHX0kyQ19ESU9MQU5fVTJD
PW0KQ09ORklHX0kyQ19QQVJQT1JUPW0KQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUPW0KQ09O
RklHX0kyQ19ST0JPVEZVWlpfT1NJRj1tCkNPTkZJR19JMkNfVEFPU19FVk09bQpDT05GSUdf
STJDX1RJTllfVVNCPW0KQ09ORklHX0kyQ19WSVBFUkJPQVJEPW0KCiMKIyBPdGhlciBJMkMv
U01CdXMgYnVzIGRyaXZlcnMKIwpDT05GSUdfSTJDX1NUVUI9bQojIENPTkZJR19JMkNfU0xB
VkUgaXMgbm90IHNldAojIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiMgQ09O
RklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBp
cyBub3Qgc2V0CkNPTkZJR19TUEk9eQojIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldApD
T05GSUdfU1BJX01BU1RFUj15CgojCiMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMK
IwojIENPTkZJR19TUElfQUxURVJBIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9CSVRCQU5HPW0K
Q09ORklHX1NQSV9CVVRURVJGTFk9bQojIENPTkZJR19TUElfQ0FERU5DRSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKQ09ORklHX1NQSV9MTTcwX0xMUD1tCiMg
Q09ORklHX1NQSV9PQ19USU5ZIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1BYQTJYWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NQSV9QWEEyWFhfUENJIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJ
X1NDMThJUzYwMiBpcyBub3Qgc2V0CiMgQ09ORklHX1NQSV9YQ09NTSBpcyBub3Qgc2V0CiMg
Q09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAojIENPTkZJR19TUElfREVTSUdOV0FSRSBp
cyBub3Qgc2V0CgojCiMgU1BJIFByb3RvY29sIE1hc3RlcnMKIwojIENPTkZJR19TUElfU1BJ
REVWIGlzIG5vdCBzZXQKIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAojIENPTkZJ
R19TUE1JIGlzIG5vdCBzZXQKIyBDT05GSUdfSFNJIGlzIG5vdCBzZXQKCiMKIyBQUFMgc3Vw
cG9ydAojCkNPTkZJR19QUFM9bQojIENPTkZJR19QUFNfREVCVUcgaXMgbm90IHNldAojIENP
TkZJR19OVFBfUFBTIGlzIG5vdCBzZXQKCiMKIyBQUFMgY2xpZW50cyBzdXBwb3J0CiMKIyBD
T05GSUdfUFBTX0NMSUVOVF9LVElNRVIgaXMgbm90IHNldApDT05GSUdfUFBTX0NMSUVOVF9M
RElTQz1tCkNPTkZJR19QUFNfQ0xJRU5UX1BBUlBPUlQ9bQojIENPTkZJR19QUFNfQ0xJRU5U
X0dQSU8gaXMgbm90IHNldAoKIwojIFBQUyBnZW5lcmF0b3JzIHN1cHBvcnQKIwoKIwojIFBU
UCBjbG9jayBzdXBwb3J0CiMKQ09ORklHX1BUUF8xNTg4X0NMT0NLPW0KCiMKIyBFbmFibGUg
UEhZTElCIGFuZCBORVRXT1JLX1BIWV9USU1FU1RBTVBJTkcgdG8gc2VlIHRoZSBhZGRpdGlv
bmFsIGNsb2Nrcy4KIwpDT05GSUdfUElOQ1RSTD15CgojCiMgUGluIGNvbnRyb2xsZXJzCiMK
IyBDT05GSUdfREVCVUdfUElOQ1RSTCBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfQU1E
IGlzIG5vdCBzZXQKIyBDT05GSUdfUElOQ1RSTF9CQVlUUkFJTCBpcyBub3Qgc2V0CiMgQ09O
RklHX1BJTkNUUkxfQ0hFUlJZVklFVyBpcyBub3Qgc2V0CiMgQ09ORklHX1BJTkNUUkxfU1VO
UklTRVBPSU5UIGlzIG5vdCBzZXQKQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElC
PXkKQ09ORklHX0dQSU9MSUI9eQpDT05GSUdfR1BJT19ERVZSRVM9eQpDT05GSUdfR1BJT19B
Q1BJPXkKIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU1lT
RlMgaXMgbm90IHNldAoKIwojIE1lbW9yeSBtYXBwZWQgR1BJTyBkcml2ZXJzCiMKIyBDT05G
SUdfR1BJT19EV0FQQiBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fRjcxODhYIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19HRU5FUklDX1BMQVRGT1JNIGlzIG5vdCBzZXQKIyBDT05GSUdf
R1BJT19JQ0ggaXMgbm90IHNldAojIENPTkZJR19HUElPX0lUODc2MUUgaXMgbm90IHNldAoj
IENPTkZJR19HUElPX0xZTlhQT0lOVCBpcyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fU0NIIGlz
IG5vdCBzZXQKIyBDT05GSUdfR1BJT19TQ0gzMTFYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJ
T19WWDg1NSBpcyBub3Qgc2V0CgojCiMgSTJDIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19NQVg3MzAwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0E5
NTNYIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKIyBDT05G
SUdfR1BJT19TWDE1MFggaXMgbm90IHNldAoKIwojIE1GRCBHUElPIGV4cGFuZGVycwojCkNP
TkZJR19HUElPX0tFTVBMRD1tCgojCiMgUENJIEdQSU8gZXhwYW5kZXJzCiMKIyBDT05GSUdf
R1BJT19BTUQ4MTExIGlzIG5vdCBzZXQKIyBDT05GSUdfR1BJT19JTlRFTF9NSUQgaXMgbm90
IHNldApDT05GSUdfR1BJT19NTF9JT0g9bQojIENPTkZJR19HUElPX1JEQzMyMVggaXMgbm90
IHNldAoKIwojIFNQSSBHUElPIGV4cGFuZGVycwojCiMgQ09ORklHX0dQSU9fTUFYNzMwMSBp
cyBub3Qgc2V0CiMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAojIENPTkZJR19H
UElPX01DMzM4ODAgaXMgbm90IHNldAoKIwojIFVTQiBHUElPIGV4cGFuZGVycwojCkNPTkZJ
R19HUElPX1ZJUEVSQk9BUkQ9bQpDT05GSUdfVzE9bQpDT05GSUdfVzFfQ09OPXkKCiMKIyAx
LXdpcmUgQnVzIE1hc3RlcnMKIwpDT05GSUdfVzFfTUFTVEVSX01BVFJPWD1tCkNPTkZJR19X
MV9NQVNURVJfRFMyNDkwPW0KQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQojIENPTkZJR19X
MV9NQVNURVJfRFMxV00gaXMgbm90IHNldAojIENPTkZJR19XMV9NQVNURVJfR1BJTyBpcyBu
b3Qgc2V0CgojCiMgMS13aXJlIFNsYXZlcwojCkNPTkZJR19XMV9TTEFWRV9USEVSTT1tCkNP
TkZJR19XMV9TTEFWRV9TTUVNPW0KIyBDT05GSUdfVzFfU0xBVkVfRFMyNDA4IGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDEzIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNDA2IGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNDIzIGlzIG5vdCBz
ZXQKQ09ORklHX1cxX1NMQVZFX0RTMjQzMT1tCkNPTkZJR19XMV9TTEFWRV9EUzI0MzM9bQoj
IENPTkZJR19XMV9TTEFWRV9EUzI0MzNfQ1JDIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyNzYwIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfVzFfU0xBVkVfRFMyNzgxIGlzIG5vdCBzZXQKIyBDT05GSUdfVzFfU0xB
VkVfRFMyOEUwNCBpcyBub3Qgc2V0CkNPTkZJR19XMV9TTEFWRV9CUTI3MDAwPW0KQ09ORklH
X1BPV0VSX1NVUFBMWT15CiMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0
CiMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0dFTkVSSUNfQURDX0JB
VFRFUlkgaXMgbm90IHNldAojIENPTkZJR19URVNUX1BPV0VSIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9EUzI3ODAgaXMgbm90IHNldAojIENPTkZJR19CQVRURVJZX0RTMjc4MSBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfRFMyNzgyIGlzIG5vdCBzZXQKQ09ORklHX0JB
VFRFUllfU0JTPW0KIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKIyBDT05G
SUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBVFRFUllfTUFYMTcw
NDIgaXMgbm90IHNldAojIENPTkZJR19DSEFSR0VSX01BWDg5MDMgaXMgbm90IHNldAojIENP
TkZJR19DSEFSR0VSX0xQODcyNyBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfR1BJTyBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDE1WCBpcyBub3Qgc2V0CiMgQ09ORklH
X0NIQVJHRVJfQlEyNDE5MCBpcyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfQlEyNDczNSBp
cyBub3Qgc2V0CiMgQ09ORklHX0NIQVJHRVJfU01CMzQ3IGlzIG5vdCBzZXQKIyBDT05GSUdf
QkFUVEVSWV9HQVVHRV9MVEMyOTQxIGlzIG5vdCBzZXQKIyBDT05GSUdfUE9XRVJfUkVTRVQg
aXMgbm90IHNldAojIENPTkZJR19QT1dFUl9BVlMgaXMgbm90IHNldApDT05GSUdfSFdNT049
eQpDT05GSUdfSFdNT05fVklEPW0KIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qg
c2V0CgojCiMgTmF0aXZlIGRyaXZlcnMKIwpDT05GSUdfU0VOU09SU19BQklUVUdVUlU9bQpD
T05GSUdfU0VOU09SU19BQklUVUdVUlUzPW0KIyBDT05GSUdfU0VOU09SU19BRDczMTQgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRDc0MTQ9bQpDT05GSUdfU0VOU09SU19BRDc0MTg9
bQpDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KQ09ORklHX1NFTlNPUlNfQURNMTAyNT1tCkNP
TkZJR19TRU5TT1JTX0FETTEwMjY9bQpDT05GSUdfU0VOU09SU19BRE0xMDI5PW0KQ09ORklH
X1NFTlNPUlNfQURNMTAzMT1tCkNPTkZJR19TRU5TT1JTX0FETTkyNDA9bQojIENPTkZJR19T
RU5TT1JTX0FEVDczMTAgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0FEVDc0MTAgaXMg
bm90IHNldApDT05GSUdfU0VOU09SU19BRFQ3NDExPW0KQ09ORklHX1NFTlNPUlNfQURUNzQ2
Mj1tCkNPTkZJR19TRU5TT1JTX0FEVDc0NzA9bQpDT05GSUdfU0VOU09SU19BRFQ3NDc1PW0K
Q09ORklHX1NFTlNPUlNfQVNDNzYyMT1tCkNPTkZJR19TRU5TT1JTX0s4VEVNUD1tCkNPTkZJ
R19TRU5TT1JTX0sxMFRFTVA9bQpDT05GSUdfU0VOU09SU19GQU0xNUhfUE9XRVI9bQpDT05G
SUdfU0VOU09SU19BUFBMRVNNQz1tCkNPTkZJR19TRU5TT1JTX0FTQjEwMD1tCkNPTkZJR19T
RU5TT1JTX0FUWFAxPW0KQ09ORklHX1NFTlNPUlNfRFM2MjA9bQpDT05GSUdfU0VOU09SU19E
UzE2MjE9bQpDT05GSUdfU0VOU09SU19JNUtfQU1CPW0KQ09ORklHX1NFTlNPUlNfRjcxODA1
Rj1tCkNPTkZJR19TRU5TT1JTX0Y3MTg4MkZHPW0KQ09ORklHX1NFTlNPUlNfRjc1Mzc1Uz1t
CkNPTkZJR19TRU5TT1JTX0ZTQ0hNRD1tCkNPTkZJR19TRU5TT1JTX0dMNTE4U009bQpDT05G
SUdfU0VOU09SU19HTDUyMFNNPW0KQ09ORklHX1NFTlNPUlNfRzc2MEE9bQojIENPTkZJR19T
RU5TT1JTX0c3NjIgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0dQSU9fRkFOIGlzIG5v
dCBzZXQKIyBDT05GSUdfU0VOU09SU19ISUg2MTMwIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNP
UlNfSUJNQUVNPW0KQ09ORklHX1NFTlNPUlNfSUJNUEVYPW0KIyBDT05GSUdfU0VOU09SU19J
SU9fSFdNT04gaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0k1NTAwIGlzIG5vdCBzZXQK
Q09ORklHX1NFTlNPUlNfQ09SRVRFTVA9bQpDT05GSUdfU0VOU09SU19JVDg3PW0KQ09ORklH
X1NFTlNPUlNfSkM0Mj1tCiMgQ09ORklHX1NFTlNPUlNfUE9XUjEyMjAgaXMgbm90IHNldApD
T05GSUdfU0VOU09SU19MSU5FQUdFPW0KIyBDT05GSUdfU0VOU09SU19MVEMyOTQ1IGlzIG5v
dCBzZXQKQ09ORklHX1NFTlNPUlNfTFRDNDE1MT1tCkNPTkZJR19TRU5TT1JTX0xUQzQyMTU9
bQojIENPTkZJR19TRU5TT1JTX0xUQzQyMjIgaXMgbm90IHNldApDT05GSUdfU0VOU09SU19M
VEM0MjQ1PW0KIyBDT05GSUdfU0VOU09SU19MVEM0MjYwIGlzIG5vdCBzZXQKQ09ORklHX1NF
TlNPUlNfTFRDNDI2MT1tCkNPTkZJR19TRU5TT1JTX01BWDExMTE9bQpDT05GSUdfU0VOU09S
U19NQVgxNjA2NT1tCkNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQpDT05GSUdfU0VOU09SU19N
QVgxNjY4PW0KIyBDT05GSUdfU0VOU09SU19NQVgxOTcgaXMgbm90IHNldApDT05GSUdfU0VO
U09SU19NQVg2NjM5PW0KQ09ORklHX1NFTlNPUlNfTUFYNjY0Mj1tCkNPTkZJR19TRU5TT1JT
X01BWDY2NTA9bQojIENPTkZJR19TRU5TT1JTX01BWDY2OTcgaXMgbm90IHNldAojIENPTkZJ
R19TRU5TT1JTX0hUVTIxIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VOU09SU19NQ1AzMDIxIGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTUVORjIxQk1DX0hXTU9OPW0KQ09ORklHX1NFTlNP
UlNfQURDWFg9bQpDT05GSUdfU0VOU09SU19MTTYzPW0KQ09ORklHX1NFTlNPUlNfTE03MD1t
CkNPTkZJR19TRU5TT1JTX0xNNzM9bQpDT05GSUdfU0VOU09SU19MTTc1PW0KQ09ORklHX1NF
TlNPUlNfTE03Nz1tCkNPTkZJR19TRU5TT1JTX0xNNzg9bQpDT05GSUdfU0VOU09SU19MTTgw
PW0KQ09ORklHX1NFTlNPUlNfTE04Mz1tCkNPTkZJR19TRU5TT1JTX0xNODU9bQpDT05GSUdf
U0VOU09SU19MTTg3PW0KQ09ORklHX1NFTlNPUlNfTE05MD1tCkNPTkZJR19TRU5TT1JTX0xN
OTI9bQpDT05GSUdfU0VOU09SU19MTTkzPW0KIyBDT05GSUdfU0VOU09SU19MTTk1MjM0IGlz
IG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfTE05NTI0MT1tCkNPTkZJR19TRU5TT1JTX0xNOTUy
NDU9bQpDT05GSUdfU0VOU09SU19QQzg3MzYwPW0KQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1t
CkNPTkZJR19TRU5TT1JTX05UQ19USEVSTUlTVE9SPW0KQ09ORklHX1NFTlNPUlNfTkNUNjY4
Mz1tCkNPTkZJR19TRU5TT1JTX05DVDY3NzU9bQojIENPTkZJR19TRU5TT1JTX05DVDc4MDIg
aXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX05DVDc5MDQgaXMgbm90IHNldApDT05GSUdf
U0VOU09SU19QQ0Y4NTkxPW0KIyBDT05GSUdfUE1CVVMgaXMgbm90IHNldAojIENPTkZJR19T
RU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0hUMjE9bQojIENPTkZJ
R19TRU5TT1JTX1NIVEMxIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfU0lTNTU5NT1tCkNP
TkZJR19TRU5TT1JTX0RNRTE3Mzc9bQpDT05GSUdfU0VOU09SU19FTUMxNDAzPW0KQ09ORklH
X1NFTlNPUlNfRU1DMjEwMz1tCkNPTkZJR19TRU5TT1JTX0VNQzZXMjAxPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3TTE9bQpDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyPW0KQ09ORklHX1NF
TlNPUlNfU01TQzQ3QjM5Nz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2WFhfQ09NTU9OPW0KQ09O
RklHX1NFTlNPUlNfU0NINTYyNz1tCkNPTkZJR19TRU5TT1JTX1NDSDU2MzY9bQpDT05GSUdf
U0VOU09SU19TTU02NjU9bQojIENPTkZJR19TRU5TT1JTX0FEQzEyOEQ4MTggaXMgbm90IHNl
dApDT05GSUdfU0VOU09SU19BRFMxMDE1PW0KQ09ORklHX1NFTlNPUlNfQURTNzgyOD1tCkNP
TkZJR19TRU5TT1JTX0FEUzc4NzE9bQpDT05GSUdfU0VOU09SU19BTUM2ODIxPW0KIyBDT05G
SUdfU0VOU09SU19JTkEyMDkgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JTX0lOQTJYWCBp
cyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1RITUM1MD1tCkNPTkZJR19TRU5TT1JTX1RNUDEw
Mj1tCiMgQ09ORklHX1NFTlNPUlNfVE1QMTAzIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNf
VE1QNDAxPW0KQ09ORklHX1NFTlNPUlNfVE1QNDIxPW0KQ09ORklHX1NFTlNPUlNfVklBX0NQ
VVRFTVA9bQpDT05GSUdfU0VOU09SU19WSUE2ODZBPW0KQ09ORklHX1NFTlNPUlNfVlQxMjEx
PW0KQ09ORklHX1NFTlNPUlNfVlQ4MjMxPW0KQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCkNP
TkZJR19TRU5TT1JTX1c4Mzc5MUQ9bQpDT05GSUdfU0VOU09SU19XODM3OTJEPW0KQ09ORklH
X1NFTlNPUlNfVzgzNzkzPW0KQ09ORklHX1NFTlNPUlNfVzgzNzk1PW0KIyBDT05GSUdfU0VO
U09SU19XODM3OTVfRkFOQ1RSTCBpcyBub3Qgc2V0CkNPTkZJR19TRU5TT1JTX1c4M0w3ODVU
Uz1tCkNPTkZJR19TRU5TT1JTX1c4M0w3ODZORz1tCkNPTkZJR19TRU5TT1JTX1c4MzYyN0hG
PW0KQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGPW0KCiMKIyBBQ1BJIGRyaXZlcnMKIwpDT05G
SUdfU0VOU09SU19BQ1BJX1BPV0VSPW0KQ09ORklHX1NFTlNPUlNfQVRLMDExMD1tCkNPTkZJ
R19USEVSTUFMPW0KQ09ORklHX1RIRVJNQUxfSFdNT049eQpDT05GSUdfVEhFUk1BTF9ERUZB
VUxUX0dPVl9TVEVQX1dJU0U9eQojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX0ZBSVJf
U0hBUkUgaXMgbm90IHNldAojIENPTkZJR19USEVSTUFMX0RFRkFVTFRfR09WX1VTRVJfU1BB
Q0UgaXMgbm90IHNldApDT05GSUdfVEhFUk1BTF9HT1ZfRkFJUl9TSEFSRT15CkNPTkZJR19U
SEVSTUFMX0dPVl9TVEVQX1dJU0U9eQpDT05GSUdfVEhFUk1BTF9HT1ZfQkFOR19CQU5HPXkK
Q09ORklHX1RIRVJNQUxfR09WX1VTRVJfU1BBQ0U9eQojIENPTkZJR19USEVSTUFMX0VNVUxB
VElPTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9QT1dFUkNMQU1QPW0KQ09ORklHX1g4Nl9Q
S0dfVEVNUF9USEVSTUFMPW0KIyBDT05GSUdfSU5URUxfU09DX0RUU19USEVSTUFMIGlzIG5v
dCBzZXQKQ09ORklHX0lOVDM0MFhfVEhFUk1BTD1tCkNPTkZJR19BQ1BJX1RIRVJNQUxfUkVM
PW0KCiMKIyBUZXhhcyBJbnN0cnVtZW50cyB0aGVybWFsIGRyaXZlcnMKIwpDT05GSUdfV0FU
Q0hET0c9eQpDT05GSUdfV0FUQ0hET0dfQ09SRT15CiMgQ09ORklHX1dBVENIRE9HX05PV0FZ
T1VUIGlzIG5vdCBzZXQKCiMKIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycwojCkNPTkZJR19T
T0ZUX1dBVENIRE9HPW0KQ09ORklHX01FTkYyMUJNQ19XQVRDSERPRz1tCiMgQ09ORklHX1hJ
TElOWF9XQVRDSERPRyBpcyBub3Qgc2V0CiMgQ09ORklHX0NBREVOQ0VfV0FUQ0hET0cgaXMg
bm90IHNldAojIENPTkZJR19EV19XQVRDSERPRyBpcyBub3Qgc2V0CkNPTkZJR19BQ1FVSVJF
X1dEVD1tCkNPTkZJR19BRFZBTlRFQ0hfV0RUPW0KQ09ORklHX0FMSU0xNTM1X1dEVD1tCkNP
TkZJR19BTElNNzEwMV9XRFQ9bQpDT05GSUdfRjcxODA4RV9XRFQ9bQpDT05GSUdfU1A1MTAw
X1RDTz1tCkNPTkZJR19TQkNfRklUUEMyX1dBVENIRE9HPW0KQ09ORklHX0VVUk9URUNIX1dE
VD1tCkNPTkZJR19JQjcwMF9XRFQ9bQpDT05GSUdfSUJNQVNSPW0KQ09ORklHX1dBRkVSX1dE
VD1tCkNPTkZJR19JNjMwMEVTQl9XRFQ9bQpDT05GSUdfSUU2WFhfV0RUPW0KQ09ORklHX0lU
Q09fV0RUPW0KQ09ORklHX0lUQ09fVkVORE9SX1NVUFBPUlQ9eQpDT05GSUdfSVQ4NzEyRl9X
RFQ9bQpDT05GSUdfSVQ4N19XRFQ9bQpDT05GSUdfSFBfV0FUQ0hET0c9bQpDT05GSUdfS0VN
UExEX1dEVD1tCkNPTkZJR19IUFdEVF9OTUlfREVDT0RJTkc9eQpDT05GSUdfU0MxMjAwX1dE
VD1tCkNPTkZJR19QQzg3NDEzX1dEVD1tCkNPTkZJR19OVl9UQ089bQpDT05GSUdfNjBYWF9X
RFQ9bQpDT05GSUdfQ1BVNV9XRFQ9bQpDT05GSUdfU01TQ19TQ0gzMTFYX1dEVD1tCkNPTkZJ
R19TTVNDMzdCNzg3X1dEVD1tCkNPTkZJR19WSUFfV0RUPW0KQ09ORklHX1c4MzYyN0hGX1dE
VD1tCkNPTkZJR19XODM4NzdGX1dEVD1tCkNPTkZJR19XODM5NzdGX1dEVD1tCkNPTkZJR19N
QUNIWl9XRFQ9bQpDT05GSUdfU0JDX0VQWF9DM19XQVRDSERPRz1tCiMgQ09ORklHX01FTl9B
MjFfV0RUIGlzIG5vdCBzZXQKQ09ORklHX1hFTl9XRFQ9bQoKIwojIFBDSS1iYXNlZCBXYXRj
aGRvZyBDYXJkcwojCkNPTkZJR19QQ0lQQ1dBVENIRE9HPW0KQ09ORklHX1dEVFBDST1tCgoj
CiMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiMKQ09ORklHX1VTQlBDV0FUQ0hET0c9bQpD
T05GSUdfU1NCX1BPU1NJQkxFPXkKCiMKIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKIwpD
T05GSUdfU1NCPW0KQ09ORklHX1NTQl9TUFJPTT15CkNPTkZJR19TU0JfQkxPQ0tJTz15CkNP
TkZJR19TU0JfUENJSE9TVF9QT1NTSUJMRT15CkNPTkZJR19TU0JfUENJSE9TVD15CkNPTkZJ
R19TU0JfQjQzX1BDSV9CUklER0U9eQpDT05GSUdfU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEU9
eQpDT05GSUdfU1NCX1BDTUNJQUhPU1Q9eQpDT05GSUdfU1NCX1NESU9IT1NUX1BPU1NJQkxF
PXkKQ09ORklHX1NTQl9TRElPSE9TVD15CiMgQ09ORklHX1NTQl9TSUxFTlQgaXMgbm90IHNl
dAojIENPTkZJR19TU0JfREVCVUcgaXMgbm90IHNldApDT05GSUdfU1NCX0RSSVZFUl9QQ0lD
T1JFX1BPU1NJQkxFPXkKQ09ORklHX1NTQl9EUklWRVJfUENJQ09SRT15CiMgQ09ORklHX1NT
Ql9EUklWRVJfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19CQ01BX1BPU1NJQkxFPXkKCiMKIyBC
cm9hZGNvbSBzcGVjaWZpYyBBTUJBCiMKQ09ORklHX0JDTUE9bQpDT05GSUdfQkNNQV9CTE9D
S0lPPXkKQ09ORklHX0JDTUFfSE9TVF9QQ0lfUE9TU0lCTEU9eQpDT05GSUdfQkNNQV9IT1NU
X1BDST15CiMgQ09ORklHX0JDTUFfSE9TVF9TT0MgaXMgbm90IHNldApDT05GSUdfQkNNQV9E
UklWRVJfUENJPXkKIyBDT05GSUdfQkNNQV9EUklWRVJfR01BQ19DTU4gaXMgbm90IHNldAoj
IENPTkZJR19CQ01BX0RSSVZFUl9HUElPIGlzIG5vdCBzZXQKIyBDT05GSUdfQkNNQV9ERUJV
RyBpcyBub3Qgc2V0CgojCiMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwojCkNPTkZJ
R19NRkRfQ09SRT1tCiMgQ09ORklHX01GRF9BUzM3MTEgaXMgbm90IHNldAojIENPTkZJR19Q
TUlDX0FEUDU1MjAgaXMgbm90IHNldAojIENPTkZJR19NRkRfQUFUMjg3MF9DT1JFIGlzIG5v
dCBzZXQKIyBDT05GSUdfTUZEX0JDTTU5MFhYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0FY
UDIwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9DUk9TX0VDIGlzIG5vdCBzZXQKIyBDT05G
SUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAojIENPTkZJR19NRkRfREE5MDUyX1NQSSBpcyBu
b3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNTJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZE
X0RBOTA1NSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9EQTkwNjMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfREE5MTUwIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX0RMTjIgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfTUMxM1hYWF9TUEkgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUMx
M1hYWF9JMkMgaXMgbm90IHNldAojIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKIyBD
T05GSUdfSFRDX0kyQ1BMRCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9JTlRFTF9RVUFSS19J
MkNfR1BJTyBpcyBub3Qgc2V0CkNPTkZJR19MUENfSUNIPW0KQ09ORklHX0xQQ19TQ0g9bQoj
IENPTkZJR19JTlRFTF9TT0NfUE1JQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9KQU5aX0NN
T0RJTyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfS0VNUExEPW0KIyBDT05GSUdfTUZEXzg4UE04
MDAgaXMgbm90IHNldAojIENPTkZJR19NRkRfODhQTTgwNSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF84OFBNODYwWCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVgxNDU3NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg3NzY5MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg3
Nzg0MyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9NQVg4OTA3IGlzIG5vdCBzZXQKIyBDT05G
SUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAojIENPTkZJR19NRkRfTUFYODk5NyBpcyBub3Qg
c2V0CiMgQ09ORklHX01GRF9NQVg4OTk4IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX01UNjM5
NyBpcyBub3Qgc2V0CkNPTkZJR19NRkRfTUVORjIxQk1DPW0KIyBDT05GSUdfRVpYX1BDQVAg
aXMgbm90IHNldApDT05GSUdfTUZEX1ZJUEVSQk9BUkQ9bQojIENPTkZJR19NRkRfUkVUVSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiMgQ09ORklHX1VD
QjE0MDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9SREMzMjFYIGlzIG5vdCBzZXQK
Q09ORklHX01GRF9SVFNYX1BDST1tCiMgQ09ORklHX01GRF9SVDUwMzMgaXMgbm90IHNldApD
T05GSUdfTUZEX1JUU1hfVVNCPW0KIyBDT05GSUdfTUZEX1JDNVQ1ODMgaXMgbm90IHNldAoj
IENPTkZJR19NRkRfUk41VDYxOCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TRUNfQ09SRSBp
cyBub3Qgc2V0CiMgQ09ORklHX01GRF9TSTQ3NlhfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9TTTUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9TS1k4MTQ1MiBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9TTVNDIGlzIG5vdCBzZXQKIyBDT05GSUdfQUJYNTAwX0NPUkUgaXMg
bm90IHNldAojIENPTkZJR19NRkRfU1lTQ09OIGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1RJ
X0FNMzM1WF9UU0NBREMgaXMgbm90IHNldAojIENPTkZJR19NRkRfTFAzOTQzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfTUZEX0xQODc4OCBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9QQUxNQVMg
aXMgbm90IHNldAojIENPTkZJR19UUFM2MTA1WCBpcyBub3Qgc2V0CiMgQ09ORklHX1RQUzY1
MDEwIGlzIG5vdCBzZXQKIyBDT05GSUdfVFBTNjUwN1ggaXMgbm90IHNldAojIENPTkZJR19N
RkRfVFBTNjUwOTAgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjUyMTcgaXMgbm90IHNl
dAojIENPTkZJR19NRkRfVFBTNjUyMTggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU4
NlggaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTAgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfVFBTNjU5MTIgaXMgbm90IHNldAojIENPTkZJR19NRkRfVFBTNjU5MTJfSTJDIGlz
IG5vdCBzZXQKIyBDT05GSUdfTUZEX1RQUzY1OTEyX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklH
X01GRF9UUFM4MDAzMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qg
c2V0CiMgQ09ORklHX1RXTDYwNDBfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTDEy
NzNfQ09SRSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9MTTM1MzMgaXMgbm90IHNldAojIENP
TkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9WWDg1NSBpcyBub3Qgc2V0
CiMgQ09ORklHX01GRF9BUklaT05BX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9BUkla
T05BX1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAojIENP
TkZJR19NRkRfV004MzFYX0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX01GRF9XTTgzMVhfU1BJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAojIENPTkZJ
R19NRkRfV004OTk0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQK
Q09ORklHX01FRElBX1NVUFBPUlQ9bQoKIwojIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CiMK
Q09ORklHX01FRElBX0NBTUVSQV9TVVBQT1JUPXkKQ09ORklHX01FRElBX0FOQUxPR19UVl9T
VVBQT1JUPXkKQ09ORklHX01FRElBX0RJR0lUQUxfVFZfU1VQUE9SVD15CkNPTkZJR19NRURJ
QV9SQURJT19TVVBQT1JUPXkKQ09ORklHX01FRElBX1NEUl9TVVBQT1JUPXkKQ09ORklHX01F
RElBX1JDX1NVUFBPUlQ9eQpDT05GSUdfTUVESUFfQ09OVFJPTExFUj15CkNPTkZJR19WSURF
T19ERVY9bQojIENPTkZJR19WSURFT19WNEwyX1NVQkRFVl9BUEkgaXMgbm90IHNldApDT05G
SUdfVklERU9fVjRMMj1tCiMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CiMg
Q09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CkNPTkZJR19WSURF
T19UVU5FUj1tCkNPTkZJR19WSURFT0JVRl9HRU49bQpDT05GSUdfVklERU9CVUZfRE1BX1NH
PW0KQ09ORklHX1ZJREVPQlVGX1ZNQUxMT0M9bQpDT05GSUdfVklERU9CVUZfRFZCPW0KQ09O
RklHX1ZJREVPQlVGMl9DT1JFPW0KQ09ORklHX1ZJREVPQlVGMl9NRU1PUFM9bQpDT05GSUdf
VklERU9CVUYyX0RNQV9DT05USUc9bQpDT05GSUdfVklERU9CVUYyX1ZNQUxMT0M9bQpDT05G
SUdfVklERU9CVUYyX0RNQV9TRz1tCkNPTkZJR19WSURFT0JVRjJfRFZCPW0KQ09ORklHX0RW
Ql9DT1JFPW0KQ09ORklHX0RWQl9ORVQ9eQpDT05GSUdfVFRQQ0lfRUVQUk9NPW0KQ09ORklH
X0RWQl9NQVhfQURBUFRFUlM9OApDT05GSUdfRFZCX0RZTkFNSUNfTUlOT1JTPXkKCiMKIyBN
ZWRpYSBkcml2ZXJzCiMKQ09ORklHX1JDX0NPUkU9bQpDT05GSUdfUkNfTUFQPW0KQ09ORklH
X1JDX0RFQ09ERVJTPXkKQ09ORklHX0xJUkM9bQpDT05GSUdfSVJfTElSQ19DT0RFQz1tCkNP
TkZJR19JUl9ORUNfREVDT0RFUj1tCkNPTkZJR19JUl9SQzVfREVDT0RFUj1tCkNPTkZJR19J
Ul9SQzZfREVDT0RFUj1tCkNPTkZJR19JUl9KVkNfREVDT0RFUj1tCkNPTkZJR19JUl9TT05Z
X0RFQ09ERVI9bQpDT05GSUdfSVJfU0FOWU9fREVDT0RFUj1tCkNPTkZJR19JUl9TSEFSUF9E
RUNPREVSPW0KQ09ORklHX0lSX01DRV9LQkRfREVDT0RFUj1tCkNPTkZJR19JUl9YTVBfREVD
T0RFUj1tCkNPTkZJR19SQ19ERVZJQ0VTPXkKQ09ORklHX1JDX0FUSV9SRU1PVEU9bQpDT05G
SUdfSVJfRU5FPW0KIyBDT05GSUdfSVJfSElYNUhEMiBpcyBub3Qgc2V0CkNPTkZJR19JUl9J
TU9OPW0KQ09ORklHX0lSX01DRVVTQj1tCkNPTkZJR19JUl9JVEVfQ0lSPW0KQ09ORklHX0lS
X0ZJTlRFSz1tCkNPTkZJR19JUl9OVVZPVE9OPW0KQ09ORklHX0lSX1JFRFJBVDM9bQpDT05G
SUdfSVJfU1RSRUFNWkFQPW0KQ09ORklHX0lSX1dJTkJPTkRfQ0lSPW0KQ09ORklHX0lSX0lH
T1JQTFVHVVNCPW0KQ09ORklHX0lSX0lHVUFOQT1tCkNPTkZJR19JUl9UVFVTQklSPW0KQ09O
RklHX1JDX0xPT1BCQUNLPW0KIyBDT05GSUdfSVJfR1BJT19DSVIgaXMgbm90IHNldApDT05G
SUdfTUVESUFfVVNCX1NVUFBPUlQ9eQoKIwojIFdlYmNhbSBkZXZpY2VzCiMKQ09ORklHX1VT
Ql9WSURFT19DTEFTUz1tCkNPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQpD
T05GSUdfVVNCX0dTUENBPW0KQ09ORklHX1VTQl9NNTYwMj1tCkNPTkZJR19VU0JfU1RWMDZY
WD1tCkNPTkZJR19VU0JfR0w4NjA9bQpDT05GSUdfVVNCX0dTUENBX0JFTlE9bQpDT05GSUdf
VVNCX0dTUENBX0NPTkVYPW0KQ09ORklHX1VTQl9HU1BDQV9DUElBMT1tCkNPTkZJR19VU0Jf
R1NQQ0FfRFRDUzAzMz1tCkNPTkZJR19VU0JfR1NQQ0FfRVRPTVM9bQpDT05GSUdfVVNCX0dT
UENBX0ZJTkVQSVg9bQpDT05GSUdfVVNCX0dTUENBX0pFSUxJTko9bQpDT05GSUdfVVNCX0dT
UENBX0pMMjAwNUJDRD1tCkNPTkZJR19VU0JfR1NQQ0FfS0lORUNUPW0KQ09ORklHX1VTQl9H
U1BDQV9LT05JQ0E9bQpDT05GSUdfVVNCX0dTUENBX01BUlM9bQpDT05GSUdfVVNCX0dTUENB
X01SOTczMTBBPW0KQ09ORklHX1VTQl9HU1BDQV9OVzgwWD1tCkNPTkZJR19VU0JfR1NQQ0Ff
T1Y1MTk9bQpDT05GSUdfVVNCX0dTUENBX09WNTM0PW0KQ09ORklHX1VTQl9HU1BDQV9PVjUz
NF85PW0KQ09ORklHX1VTQl9HU1BDQV9QQUMyMDc9bQpDT05GSUdfVVNCX0dTUENBX1BBQzcz
MDI9bQpDT05GSUdfVVNCX0dTUENBX1BBQzczMTE9bQpDT05GSUdfVVNCX0dTUENBX1NFNDAx
PW0KQ09ORklHX1VTQl9HU1BDQV9TTjlDMjAyOD1tCkNPTkZJR19VU0JfR1NQQ0FfU045QzIw
WD1tCkNPTkZJR19VU0JfR1NQQ0FfU09OSVhCPW0KQ09ORklHX1VTQl9HU1BDQV9TT05JWEo9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDA9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDU9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDY9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDg9bQpDT05GSUdfVVNCX0dTUENBX1NQQ0E1NjE9
bQpDT05GSUdfVVNCX0dTUENBX1NQQ0ExNTI4PW0KQ09ORklHX1VTQl9HU1BDQV9TUTkwNT1t
CkNPTkZJR19VU0JfR1NQQ0FfU1E5MDVDPW0KQ09ORklHX1VTQl9HU1BDQV9TUTkzMFg9bQpD
T05GSUdfVVNCX0dTUENBX1NUSzAxND1tCkNPTkZJR19VU0JfR1NQQ0FfU1RLMTEzNT1tCkNP
TkZJR19VU0JfR1NQQ0FfU1RWMDY4MD1tCkNPTkZJR19VU0JfR1NQQ0FfU1VOUExVUz1tCkNP
TkZJR19VU0JfR1NQQ0FfVDYxMz1tCkNPTkZJR19VU0JfR1NQQ0FfVE9QUk89bQojIENPTkZJ
R19VU0JfR1NQQ0FfVE9VUFRFSyBpcyBub3Qgc2V0CkNPTkZJR19VU0JfR1NQQ0FfVFY4NTMy
PW0KQ09ORklHX1VTQl9HU1BDQV9WQzAzMlg9bQpDT05GSUdfVVNCX0dTUENBX1ZJQ0FNPW0K
Q09ORklHX1VTQl9HU1BDQV9YSVJMSU5LX0NJVD1tCkNPTkZJR19VU0JfR1NQQ0FfWkMzWFg9
bQpDT05GSUdfVVNCX1BXQz1tCiMgQ09ORklHX1VTQl9QV0NfREVCVUcgaXMgbm90IHNldApD
T05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVj15CkNPTkZJR19WSURFT19DUElBMj1tCkNPTkZJ
R19VU0JfWlIzNjRYWD1tCkNPTkZJR19VU0JfU1RLV0VCQ0FNPW0KQ09ORklHX1VTQl9TMjI1
NT1tCkNPTkZJR19WSURFT19VU0JUVj1tCgojCiMgQW5hbG9nIFRWIFVTQiBkZXZpY2VzCiMK
Q09ORklHX1ZJREVPX1BWUlVTQjI9bQpDT05GSUdfVklERU9fUFZSVVNCMl9TWVNGUz15CkNP
TkZJR19WSURFT19QVlJVU0IyX0RWQj15CiMgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJ
RkMgaXMgbm90IHNldApDT05GSUdfVklERU9fSERQVlI9bQpDT05GSUdfVklERU9fVVNCVklT
SU9OPW0KQ09ORklHX1ZJREVPX1NUSzExNjBfQ09NTU9OPW0KQ09ORklHX1ZJREVPX1NUSzEx
NjBfQUM5Nz15CkNPTkZJR19WSURFT19TVEsxMTYwPW0KIyBDT05GSUdfVklERU9fR083MDA3
IGlzIG5vdCBzZXQKCiMKIyBBbmFsb2cvZGlnaXRhbCBUViBVU0IgZGV2aWNlcwojCkNPTkZJ
R19WSURFT19BVTA4Mjg9bQpDT05GSUdfVklERU9fQVUwODI4X1Y0TDI9eQpDT05GSUdfVklE
RU9fQVUwODI4X1JDPXkKQ09ORklHX1ZJREVPX0NYMjMxWFg9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9SQz15CkNPTkZJR19WSURFT19DWDIzMVhYX0FMU0E9bQpDT05GSUdfVklERU9fQ1gy
MzFYWF9EVkI9bQpDT05GSUdfVklERU9fVE02MDAwPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9B
TFNBPW0KQ09ORklHX1ZJREVPX1RNNjAwMF9EVkI9bQoKIwojIERpZ2l0YWwgVFYgVVNCIGRl
dmljZXMKIwpDT05GSUdfRFZCX1VTQj1tCiMgQ09ORklHX0RWQl9VU0JfREVCVUcgaXMgbm90
IHNldApDT05GSUdfRFZCX1VTQl9BODAwPW0KQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0K
Q09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWT15CkNPTkZJR19EVkJfVVNCX0RJQlVT
Ql9NQz1tCkNPTkZJR19EVkJfVVNCX0RJQjA3MDA9bQpDT05GSUdfRFZCX1VTQl9VTVRfMDEw
PW0KQ09ORklHX0RWQl9VU0JfQ1hVU0I9bQpDT05GSUdfRFZCX1VTQl9NOTIwWD1tCkNPTkZJ
R19EVkJfVVNCX0RJR0lUVj1tCkNPTkZJR19EVkJfVVNCX1ZQNzA0NT1tCkNPTkZJR19EVkJf
VVNCX1ZQNzAyWD1tCkNPTkZJR19EVkJfVVNCX0dQOFBTSz1tCkNPTkZJR19EVkJfVVNCX05P
VkFfVF9VU0IyPW0KQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KQ09ORklHX0RWQl9VU0JfRFRU
MjAwVT1tCkNPTkZJR19EVkJfVVNCX09QRVJBMT1tCkNPTkZJR19EVkJfVVNCX0FGOTAwNT1t
CkNPTkZJR19EVkJfVVNCX0FGOTAwNV9SRU1PVEU9bQpDT05GSUdfRFZCX1VTQl9QQ1RWNDUy
RT1tCkNPTkZJR19EVkJfVVNCX0RXMjEwMj1tCkNPTkZJR19EVkJfVVNCX0NJTkVSR1lfVDI9
bQpDT05GSUdfRFZCX1VTQl9EVFY1MTAwPW0KQ09ORklHX0RWQl9VU0JfRlJJSU89bQpDT05G
SUdfRFZCX1VTQl9BWjYwMjc9bQpDT05GSUdfRFZCX1VTQl9URUNITklTQVRfVVNCMj1tCkNP
TkZJR19EVkJfVVNCX1YyPW0KQ09ORklHX0RWQl9VU0JfQUY5MDE1PW0KQ09ORklHX0RWQl9V
U0JfQUY5MDM1PW0KQ09ORklHX0RWQl9VU0JfQU5ZU0VFPW0KQ09ORklHX0RWQl9VU0JfQVU2
NjEwPW0KQ09ORklHX0RWQl9VU0JfQVo2MDA3PW0KQ09ORklHX0RWQl9VU0JfQ0U2MjMwPW0K
Q09ORklHX0RWQl9VU0JfRUMxNjg9bQpDT05GSUdfRFZCX1VTQl9HTDg2MT1tCkNPTkZJR19E
VkJfVVNCX0xNRTI1MTA9bQpDT05GSUdfRFZCX1VTQl9NWEwxMTFTRj1tCkNPTkZJR19EVkJf
VVNCX1JUTDI4WFhVPW0KQ09ORklHX0RWQl9VU0JfRFZCU0tZPW0KQ09ORklHX0RWQl9UVFVT
Ql9CVURHRVQ9bQpDT05GSUdfRFZCX1RUVVNCX0RFQz1tCkNPTkZJR19TTVNfVVNCX0RSVj1t
CkNPTkZJR19EVkJfQjJDMl9GTEVYQ09QX1VTQj1tCiMgQ09ORklHX0RWQl9CMkMyX0ZMRVhD
T1BfVVNCX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0RWQl9BUzEwMj1tCgojCiMgV2ViY2Ft
LCBUViAoYW5hbG9nL2RpZ2l0YWwpIFVTQiBkZXZpY2VzCiMKQ09ORklHX1ZJREVPX0VNMjhY
WD1tCkNPTkZJR19WSURFT19FTTI4WFhfVjRMMj1tCkNPTkZJR19WSURFT19FTTI4WFhfQUxT
QT1tCkNPTkZJR19WSURFT19FTTI4WFhfRFZCPW0KQ09ORklHX1ZJREVPX0VNMjhYWF9SQz1t
CgojCiMgU29mdHdhcmUgZGVmaW5lZCByYWRpbyBVU0IgZGV2aWNlcwojCkNPTkZJR19VU0Jf
QUlSU1BZPW0KQ09ORklHX1VTQl9IQUNLUkY9bQpDT05GSUdfVVNCX01TSTI1MDA9bQpDT05G
SUdfTUVESUFfUENJX1NVUFBPUlQ9eQoKIwojIE1lZGlhIGNhcHR1cmUgc3VwcG9ydAojCkNP
TkZJR19WSURFT19NRVlFPW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZyBUViBzdXBwb3J0
CiMKQ09ORklHX1ZJREVPX0lWVFY9bQpDT05GSUdfVklERU9fSVZUVl9BTFNBPW0KQ09ORklH
X1ZJREVPX0ZCX0lWVFY9bQpDT05GSUdfVklERU9fWk9SQU49bQpDT05GSUdfVklERU9fWk9S
QU5fREMzMD1tCkNPTkZJR19WSURFT19aT1JBTl9aUjM2MDYwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0JVWj1tCkNPTkZJR19WSURFT19aT1JBTl9EQzEwPW0KQ09ORklHX1ZJREVPX1pPUkFO
X0xNTDMzPW0KQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzUjEwPW0KQ09ORklHX1ZJREVPX1pP
UkFOX0FWUzZFWUVTPW0KQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkk9bQpDT05GSUdfVklE
RU9fSEVYSVVNX09SSU9OPW0KQ09ORklHX1ZJREVPX01YQj1tCkNPTkZJR19WSURFT19TT0xP
NlgxMD1tCkNPTkZJR19WSURFT19UVzY4PW0KCiMKIyBNZWRpYSBjYXB0dXJlL2FuYWxvZy9o
eWJyaWQgVFYgc3VwcG9ydAojCkNPTkZJR19WSURFT19DWDE4PW0KQ09ORklHX1ZJREVPX0NY
MThfQUxTQT1tCkNPTkZJR19WSURFT19DWDIzODg1PW0KQ09ORklHX01FRElBX0FMVEVSQV9D
ST1tCiMgQ09ORklHX1ZJREVPX0NYMjU4MjEgaXMgbm90IHNldApDT05GSUdfVklERU9fQ1g4
OD1tCkNPTkZJR19WSURFT19DWDg4X0FMU0E9bQpDT05GSUdfVklERU9fQ1g4OF9CTEFDS0JJ
UkQ9bQpDT05GSUdfVklERU9fQ1g4OF9EVkI9bQpDT05GSUdfVklERU9fQ1g4OF9FTkFCTEVf
VlAzMDU0PXkKQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0PW0KQ09ORklHX1ZJREVPX0NYODhf
TVBFRz1tCkNPTkZJR19WSURFT19CVDg0OD1tCkNPTkZJR19EVkJfQlQ4WFg9bQpDT05GSUdf
VklERU9fU0FBNzEzND1tCkNPTkZJR19WSURFT19TQUE3MTM0X0FMU0E9bQpDT05GSUdfVklE
RU9fU0FBNzEzNF9SQz15CkNPTkZJR19WSURFT19TQUE3MTM0X0RWQj1tCkNPTkZJR19WSURF
T19TQUE3MTY0PW0KCiMKIyBNZWRpYSBkaWdpdGFsIFRWIFBDSSBBZGFwdGVycwojCkNPTkZJ
R19EVkJfQVY3MTEwX0lSPXkKQ09ORklHX0RWQl9BVjcxMTA9bQpDT05GSUdfRFZCX0FWNzEx
MF9PU0Q9eQpDT05GSUdfRFZCX0JVREdFVF9DT1JFPW0KQ09ORklHX0RWQl9CVURHRVQ9bQpD
T05GSUdfRFZCX0JVREdFVF9DST1tCkNPTkZJR19EVkJfQlVER0VUX0FWPW0KQ09ORklHX0RW
Ql9CVURHRVRfUEFUQ0g9bQpDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9QQ0k9bQojIENPTkZJ
R19EVkJfQjJDMl9GTEVYQ09QX1BDSV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19EVkJfUExV
VE8yPW0KQ09ORklHX0RWQl9ETTExMDU9bQpDT05GSUdfRFZCX1BUMT1tCkNPTkZJR19EVkJf
UFQzPW0KQ09ORklHX01BTlRJU19DT1JFPW0KQ09ORklHX0RWQl9NQU5USVM9bQpDT05GSUdf
RFZCX0hPUFBFUj1tCkNPTkZJR19EVkJfTkdFTkU9bQpDT05GSUdfRFZCX0REQlJJREdFPW0K
Q09ORklHX0RWQl9TTUlQQ0lFPW0KQ09ORklHX1Y0TF9QTEFURk9STV9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX0NBRkVfQ0NJQz1tCkNPTkZJR19WSURFT19WSUFfQ0FNRVJBPW0KIyBDT05G
SUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CkNPTkZJR19WNExfTUVNMk1FTV9EUklWRVJTPXkK
IyBDT05GSUdfVklERU9fTUVNMk1FTV9ERUlOVEVSTEFDRSBpcyBub3Qgc2V0CiMgQ09ORklH
X1ZJREVPX1NIX1ZFVSBpcyBub3Qgc2V0CkNPTkZJR19WNExfVEVTVF9EUklWRVJTPXkKQ09O
RklHX1ZJREVPX1ZJVklEPW0KIyBDT05GSUdfVklERU9fVklNMk0gaXMgbm90IHNldAoKIwoj
IFN1cHBvcnRlZCBNTUMvU0RJTyBhZGFwdGVycwojCkNPTkZJR19TTVNfU0RJT19EUlY9bQpD
T05GSUdfUkFESU9fQURBUFRFUlM9eQpDT05GSUdfUkFESU9fVEVBNTc1WD1tCkNPTkZJR19S
QURJT19TSTQ3MFg9eQpDT05GSUdfVVNCX1NJNDcwWD1tCiMgQ09ORklHX0kyQ19TSTQ3MFgg
aXMgbm90IHNldAojIENPTkZJR19SQURJT19TSTQ3MTMgaXMgbm90IHNldApDT05GSUdfVVNC
X01SODAwPW0KQ09ORklHX1VTQl9EU0JSPW0KQ09ORklHX1JBRElPX01BWElSQURJTz1tCkNP
TkZJR19SQURJT19TSEFSSz1tCkNPTkZJR19SQURJT19TSEFSSzI9bQpDT05GSUdfVVNCX0tF
RU5FPW0KQ09ORklHX1VTQl9SQVJFTU9OTz1tCkNPTkZJR19VU0JfTUE5MDE9bQojIENPTkZJ
R19SQURJT19URUE1NzY0IGlzIG5vdCBzZXQKIyBDT05GSUdfUkFESU9fU0FBNzcwNkggaXMg
bm90IHNldAojIENPTkZJR19SQURJT19URUY2ODYyIGlzIG5vdCBzZXQKIyBDT05GSUdfUkFE
SU9fV0wxMjczIGlzIG5vdCBzZXQKCiMKIyBUZXhhcyBJbnN0cnVtZW50cyBXTDEyOHggRk0g
ZHJpdmVyIChTVCBiYXNlZCkKIwoKIwojIFN1cHBvcnRlZCBGaXJlV2lyZSAoSUVFRSAxMzk0
KSBBZGFwdGVycwojCkNPTkZJR19EVkJfRklSRURUVj1tCkNPTkZJR19EVkJfRklSRURUVl9J
TlBVVD15CkNPTkZJR19NRURJQV9DT01NT05fT1BUSU9OUz15CgojCiMgY29tbW9uIGRyaXZl
ciBvcHRpb25zCiMKQ09ORklHX1ZJREVPX0NYMjM0MVg9bQpDT05GSUdfVklERU9fVFZFRVBS
T009bQpDT05GSUdfQ1lQUkVTU19GSVJNV0FSRT1tCkNPTkZJR19EVkJfQjJDMl9GTEVYQ09Q
PW0KQ09ORklHX1ZJREVPX1NBQTcxNDY9bQpDT05GSUdfVklERU9fU0FBNzE0Nl9WVj1tCkNP
TkZJR19TTVNfU0lBTk9fTURUVj1tCkNPTkZJR19TTVNfU0lBTk9fUkM9eQojIENPTkZJR19T
TVNfU0lBTk9fREVCVUdGUyBpcyBub3Qgc2V0CgojCiMgTWVkaWEgYW5jaWxsYXJ5IGRyaXZl
cnMgKHR1bmVycywgc2Vuc29ycywgaTJjLCBmcm9udGVuZHMpCiMKQ09ORklHX01FRElBX1NV
QkRSVl9BVVRPU0VMRUNUPXkKQ09ORklHX01FRElBX0FUVEFDSD15CkNPTkZJR19WSURFT19J
Ul9JMkM9bQoKIwojIEF1ZGlvIGRlY29kZXJzLCBwcm9jZXNzb3JzIGFuZCBtaXhlcnMKIwpD
T05GSUdfVklERU9fVFZBVURJTz1tCkNPTkZJR19WSURFT19UREE3NDMyPW0KQ09ORklHX1ZJ
REVPX1REQTk4NDA9bQpDT05GSUdfVklERU9fVEVBNjQxNUM9bQpDT05GSUdfVklERU9fVEVB
NjQyMD1tCkNPTkZJR19WSURFT19NU1AzNDAwPW0KQ09ORklHX1ZJREVPX0NTNTM0NT1tCkNP
TkZJR19WSURFT19DUzUzTDMyQT1tCkNPTkZJR19WSURFT19XTTg3NzU9bQpDT05GSUdfVklE
RU9fV004NzM5PW0KQ09ORklHX1ZJREVPX1ZQMjdTTVBYPW0KCiMKIyBSRFMgZGVjb2RlcnMK
IwpDT05GSUdfVklERU9fU0FBNjU4OD1tCgojCiMgVmlkZW8gZGVjb2RlcnMKIwpDT05GSUdf
VklERU9fQlQ4MTk9bQpDT05GSUdfVklERU9fQlQ4NTY9bQpDT05GSUdfVklERU9fQlQ4NjY9
bQpDT05GSUdfVklERU9fS1MwMTI3PW0KQ09ORklHX1ZJREVPX1NBQTcxMTA9bQpDT05GSUdf
VklERU9fU0FBNzExWD1tCkNPTkZJR19WSURFT19UVlA1MTUwPW0KQ09ORklHX1ZJREVPX1ZQ
WDMyMjA9bQoKIwojIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycwojCkNPTkZJR19WSURFT19T
QUE3MTdYPW0KQ09ORklHX1ZJREVPX0NYMjU4NDA9bQoKIwojIFZpZGVvIGVuY29kZXJzCiMK
Q09ORklHX1ZJREVPX1NBQTcxMjc9bQpDT05GSUdfVklERU9fU0FBNzE4NT1tCkNPTkZJR19W
SURFT19BRFY3MTcwPW0KQ09ORklHX1ZJREVPX0FEVjcxNzU9bQoKIwojIENhbWVyYSBzZW5z
b3IgZGV2aWNlcwojCkNPTkZJR19WSURFT19PVjc2NzA9bQpDT05GSUdfVklERU9fTVQ5VjAx
MT1tCgojCiMgRmxhc2ggZGV2aWNlcwojCgojCiMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMK
IwpDT05GSUdfVklERU9fVVBENjQwMzFBPW0KQ09ORklHX1ZJREVPX1VQRDY0MDgzPW0KCiMK
IyBBdWRpby9WaWRlbyBjb21wcmVzc2lvbiBjaGlwcwojCkNPTkZJR19WSURFT19TQUE2NzUy
SFM9bQoKIwojIE1pc2NlbGxhbmVvdXMgaGVscGVyIGNoaXBzCiMKQ09ORklHX1ZJREVPX001
Mjc5MD1tCgojCiMgU2Vuc29ycyB1c2VkIG9uIHNvY19jYW1lcmEgZHJpdmVyCiMKQ09ORklH
X01FRElBX1RVTkVSPW0KQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT1tCkNPTkZJR19NRURJ
QV9UVU5FUl9UREE4MjkwPW0KQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQpDT05GSUdf
TUVESUFfVFVORVJfVERBMTgyNzE9bQpDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz1tCkNP
TkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KQ09ORklHX01FRElBX1RVTkVSX1RFQTU3Njc9
bQpDT05GSUdfTUVESUFfVFVORVJfTVNJMDAxPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjBY
WD1tCkNPTkZJR19NRURJQV9UVU5FUl9NVDIwNjA9bQpDT05GSUdfTUVESUFfVFVORVJfTVQy
MDYzPW0KQ09ORklHX01FRElBX1RVTkVSX01UMjI2Nj1tCkNPTkZJR19NRURJQV9UVU5FUl9N
VDIxMzE9bQpDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwPW0KQ09ORklHX01FRElBX1RVTkVS
X1hDMjAyOD1tCkNPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQpDT05GSUdfTUVESUFfVFVO
RVJfWEM0MDAwPW0KQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDUwMDdUPW0KQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KQ09ORklH
X01FRElBX1RVTkVSX01BWDIxNjU9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgyMTg9bQpD
T05GSUdfTUVESUFfVFVORVJfRkMwMDExPW0KQ09ORklHX01FRElBX1RVTkVSX0ZDMDAxMj1t
CkNPTkZJR19NRURJQV9UVU5FUl9GQzAwMTM9bQpDT05GSUdfTUVESUFfVFVORVJfVERBMTgy
MTI9bQpDT05GSUdfTUVESUFfVFVORVJfRTQwMDA9bQpDT05GSUdfTUVESUFfVFVORVJfRkMy
NTgwPW0KQ09ORklHX01FRElBX1RVTkVSX004OFJTNjAwMFQ9bQpDT05GSUdfTUVESUFfVFVO
RVJfVFVBOTAwMT1tCkNPTkZJR19NRURJQV9UVU5FUl9TSTIxNTc9bQpDT05GSUdfTUVESUFf
VFVORVJfSVQ5MTNYPW0KQ09ORklHX01FRElBX1RVTkVSX1I4MjBUPW0KQ09ORklHX01FRElB
X1RVTkVSX01YTDMwMVJGPW0KQ09ORklHX01FRElBX1RVTkVSX1FNMUQxQzAwNDI9bQoKIwoj
IE11bHRpc3RhbmRhcmQgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TVEIw
ODk5PW0KQ09ORklHX0RWQl9TVEI2MTAwPW0KQ09ORklHX0RWQl9TVFYwOTB4PW0KQ09ORklH
X0RWQl9TVFY2MTEweD1tCkNPTkZJR19EVkJfTTg4RFMzMTAzPW0KCiMKIyBNdWx0aXN0YW5k
YXJkIChjYWJsZSArIHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0RSWEs9
bQpDT05GSUdfRFZCX1REQTE4MjcxQzJERD1tCkNPTkZJR19EVkJfU0kyMTY1PW0KCiMKIyBE
VkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX0NYMjQxMTA9bQpDT05G
SUdfRFZCX0NYMjQxMjM9bQpDT05GSUdfRFZCX01UMzEyPW0KQ09ORklHX0RWQl9aTDEwMDM2
PW0KQ09ORklHX0RWQl9aTDEwMDM5PW0KQ09ORklHX0RWQl9TNUgxNDIwPW0KQ09ORklHX0RW
Ql9TVFYwMjg4PW0KQ09ORklHX0RWQl9TVEI2MDAwPW0KQ09ORklHX0RWQl9TVFYwMjk5PW0K
Q09ORklHX0RWQl9TVFY2MTEwPW0KQ09ORklHX0RWQl9TVFYwOTAwPW0KQ09ORklHX0RWQl9U
REE4MDgzPW0KQ09ORklHX0RWQl9UREExMDA4Nj1tCkNPTkZJR19EVkJfVERBODI2MT1tCkNP
TkZJR19EVkJfVkVTMVg5Mz1tCkNPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCkNPTkZJR19E
VkJfVFVORVJfQ1gyNDExMz1tCkNPTkZJR19EVkJfVERBODI2WD1tCkNPTkZJR19EVkJfVFVB
NjEwMD1tCkNPTkZJR19EVkJfQ1gyNDExNj1tCkNPTkZJR19EVkJfQ1gyNDExNz1tCkNPTkZJ
R19EVkJfU0kyMVhYPW0KQ09ORklHX0RWQl9UUzIwMjA9bQpDT05GSUdfRFZCX0RTMzAwMD1t
CkNPTkZJR19EVkJfTUI4NkExNj1tCkNPTkZJR19EVkJfVERBMTAwNzE9bQoKIwojIERWQi1U
ICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9TUDg4NzA9bQpDT05GSUdf
RFZCX1NQODg3WD1tCkNPTkZJR19EVkJfQ1gyMjcwMD1tCkNPTkZJR19EVkJfQ1gyMjcwMj1t
CkNPTkZJR19EVkJfRFJYRD1tCkNPTkZJR19EVkJfTDY0NzgxPW0KQ09ORklHX0RWQl9UREEx
MDA0WD1tCkNPTkZJR19EVkJfTlhUNjAwMD1tCkNPTkZJR19EVkJfTVQzNTI9bQpDT05GSUdf
RFZCX1pMMTAzNTM9bQpDT05GSUdfRFZCX0RJQjMwMDBNQj1tCkNPTkZJR19EVkJfRElCMzAw
ME1DPW0KQ09ORklHX0RWQl9ESUI3MDAwTT1tCkNPTkZJR19EVkJfRElCNzAwMFA9bQpDT05G
SUdfRFZCX1REQTEwMDQ4PW0KQ09ORklHX0RWQl9BRjkwMTM9bQpDT05GSUdfRFZCX0VDMTAw
PW0KQ09ORklHX0RWQl9TVFYwMzY3PW0KQ09ORklHX0RWQl9DWEQyODIwUj1tCkNPTkZJR19E
VkJfUlRMMjgzMD1tCkNPTkZJR19EVkJfUlRMMjgzMj1tCkNPTkZJR19EVkJfUlRMMjgzMl9T
RFI9bQpDT05GSUdfRFZCX1NJMjE2OD1tCkNPTkZJR19EVkJfQVMxMDJfRkU9bQoKIwojIERW
Qi1DIChjYWJsZSkgZnJvbnRlbmRzCiMKQ09ORklHX0RWQl9WRVMxODIwPW0KQ09ORklHX0RW
Ql9UREExMDAyMT1tCkNPTkZJR19EVkJfVERBMTAwMjM9bQpDT05GSUdfRFZCX1NUVjAyOTc9
bQoKIwojIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0cmlhbC9DYWJsZSBE
VFYpIGZyb250ZW5kcwojCkNPTkZJR19EVkJfTlhUMjAwWD1tCkNPTkZJR19EVkJfT1I1MTIx
MT1tCkNPTkZJR19EVkJfT1I1MTEzMj1tCkNPTkZJR19EVkJfQkNNMzUxMD1tCkNPTkZJR19E
VkJfTEdEVDMzMFg9bQpDT05GSUdfRFZCX0xHRFQzMzA1PW0KQ09ORklHX0RWQl9MR0RUMzMw
NkE9bQpDT05GSUdfRFZCX0xHMjE2MD1tCkNPTkZJR19EVkJfUzVIMTQwOT1tCkNPTkZJR19E
VkJfQVU4NTIyPW0KQ09ORklHX0RWQl9BVTg1MjJfRFRWPW0KQ09ORklHX0RWQl9BVTg1MjJf
VjRMPW0KQ09ORklHX0RWQl9TNUgxNDExPW0KCiMKIyBJU0RCLVQgKHRlcnJlc3RyaWFsKSBm
cm9udGVuZHMKIwpDT05GSUdfRFZCX1M5MjE9bQpDT05GSUdfRFZCX0RJQjgwMDA9bQpDT05G
SUdfRFZCX01CODZBMjBTPW0KCiMKIyBJU0RCLVMgKHNhdGVsbGl0ZSkgJiBJU0RCLVQgKHRl
cnJlc3RyaWFsKSBmcm9udGVuZHMKIwpDT05GSUdfRFZCX1RDOTA1MjI9bQoKIwojIERpZ2l0
YWwgdGVycmVzdHJpYWwgb25seSB0dW5lcnMvUExMCiMKQ09ORklHX0RWQl9QTEw9bQpDT05G
SUdfRFZCX1RVTkVSX0RJQjAwNzA9bQpDT05GSUdfRFZCX1RVTkVSX0RJQjAwOTA9bQoKIwoj
IFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCiMKQ09ORklHX0RWQl9EUlgzOVhZSj1t
CkNPTkZJR19EVkJfTE5CUDIxPW0KQ09ORklHX0RWQl9MTkJQMjI9bQpDT05GSUdfRFZCX0lT
TDY0MDU9bQpDT05GSUdfRFZCX0lTTDY0MjE9bQpDT05GSUdfRFZCX0lTTDY0MjM9bQpDT05G
SUdfRFZCX0E4MjkzPW0KQ09ORklHX0RWQl9TUDI9bQpDT05GSUdfRFZCX0xHUzhHWFg9bQpD
T05GSUdfRFZCX0FUQk04ODMwPW0KQ09ORklHX0RWQl9UREE2NjV4PW0KQ09ORklHX0RWQl9J
WDI1MDVWPW0KQ09ORklHX0RWQl9NODhSUzIwMDA9bQpDT05GSUdfRFZCX0FGOTAzMz1tCgoj
CiMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCiMKIyBDT05GSUdfRFZCX0RVTU1Z
X0ZFIGlzIG5vdCBzZXQKCiMKIyBHcmFwaGljcyBzdXBwb3J0CiMKQ09ORklHX0FHUD15CkNP
TkZJR19BR1BfQU1ENjQ9eQpDT05GSUdfQUdQX0lOVEVMPXkKQ09ORklHX0FHUF9TSVM9eQpD
T05GSUdfQUdQX1ZJQT15CkNPTkZJR19JTlRFTF9HVFQ9eQpDT05GSUdfVkdBX0FSQj15CkNP
TkZJR19WR0FfQVJCX01BWF9HUFVTPTE2CkNPTkZJR19WR0FfU1dJVENIRVJPTz15CgojCiMg
RGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyCiMKQ09ORklHX0RSTT1tCkNPTkZJR19EUk1fTUlQ
SV9EU0k9eQpDT05GSUdfRFJNX0tNU19IRUxQRVI9bQpDT05GSUdfRFJNX0tNU19GQl9IRUxQ
RVI9eQpDT05GSUdfRFJNX0xPQURfRURJRF9GSVJNV0FSRT15CkNPTkZJR19EUk1fVFRNPW0K
CiMKIyBJMkMgZW5jb2RlciBvciBoZWxwZXIgY2hpcHMKIwojIENPTkZJR19EUk1fSTJDX0FE
Vjc1MTEgaXMgbm90IHNldApDT05GSUdfRFJNX0kyQ19DSDcwMDY9bQpDT05GSUdfRFJNX0ky
Q19TSUwxNjQ9bQojIENPTkZJR19EUk1fSTJDX05YUF9UREE5OThYIGlzIG5vdCBzZXQKQ09O
RklHX0RSTV9UREZYPW0KQ09ORklHX0RSTV9SMTI4PW0KQ09ORklHX0RSTV9SQURFT049bQoj
IENPTkZJR19EUk1fUkFERU9OX1VTRVJQVFIgaXMgbm90IHNldAojIENPTkZJR19EUk1fUkFE
RU9OX1VNUyBpcyBub3Qgc2V0CkNPTkZJR19EUk1fTk9VVkVBVT1tCkNPTkZJR19OT1VWRUFV
X0RFQlVHPTUKQ09ORklHX05PVVZFQVVfREVCVUdfREVGQVVMVD0zCkNPTkZJR19EUk1fTk9V
VkVBVV9CQUNLTElHSFQ9eQojIENPTkZJR19EUk1fSTgxMCBpcyBub3Qgc2V0CkNPTkZJR19E
Uk1fSTkxNT1tCkNPTkZJR19EUk1fSTkxNV9LTVM9eQpDT05GSUdfRFJNX0k5MTVfRkJERVY9
eQojIENPTkZJR19EUk1fSTkxNV9QUkVMSU1JTkFSWV9IV19TVVBQT1JUIGlzIG5vdCBzZXQK
Q09ORklHX0RSTV9NR0E9bQpDT05GSUdfRFJNX1NJUz1tCkNPTkZJR19EUk1fVklBPW0KQ09O
RklHX0RSTV9TQVZBR0U9bQpDT05GSUdfRFJNX1ZHRU09bQpDT05GSUdfRFJNX1ZNV0dGWD1t
CkNPTkZJR19EUk1fVk1XR0ZYX0ZCQ09OPXkKQ09ORklHX0RSTV9HTUE1MDA9bQpDT05GSUdf
RFJNX0dNQTYwMD15CkNPTkZJR19EUk1fR01BMzYwMD15CkNPTkZJR19EUk1fVURMPW0KQ09O
RklHX0RSTV9BU1Q9bQpDT05GSUdfRFJNX01HQUcyMDA9bQpDT05GSUdfRFJNX0NJUlJVU19R
RU1VPW0KQ09ORklHX0RSTV9RWEw9bQpDT05GSUdfRFJNX0JPQ0hTPW0KQ09ORklHX0RSTV9Q
QU5FTD15CgojCiMgRGlzcGxheSBQYW5lbHMKIwojIENPTkZJR19IU0FfQU1EIGlzIG5vdCBz
ZXQKCiMKIyBGcmFtZSBidWZmZXIgRGV2aWNlcwojCkNPTkZJR19GQj15CkNPTkZJR19GSVJN
V0FSRV9FRElEPXkKQ09ORklHX0ZCX0NNRExJTkU9eQpDT05GSUdfRkJfRERDPW0KQ09ORklH
X0ZCX0JPT1RfVkVTQV9TVVBQT1JUPXkKQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CkNPTkZJ
R19GQl9DRkJfQ09QWUFSRUE9eQpDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiMgQ09ORklH
X0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldApDT05GSUdfRkJfU1lTX0ZJ
TExSRUNUPXkKQ09ORklHX0ZCX1NZU19DT1BZQVJFQT15CkNPTkZJR19GQl9TWVNfSU1BR0VC
TElUPXkKIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldApDT05GSUdfRkJf
U1lTX0ZPUFM9eQpDT05GSUdfRkJfREVGRVJSRURfSU89eQpDT05GSUdfRkJfSEVDVUJBPW0K
Q09ORklHX0ZCX1NWR0FMSUI9bQojIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CkNP
TkZJR19GQl9CQUNLTElHSFQ9eQpDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKQ09ORklHX0ZC
X1RJTEVCTElUVElORz15CgojCiMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKIwpD
T05GSUdfRkJfQ0lSUlVTPW0KQ09ORklHX0ZCX1BNMj1tCkNPTkZJR19GQl9QTTJfRklGT19E
SVNDT05ORUNUPXkKQ09ORklHX0ZCX0NZQkVSMjAwMD1tCkNPTkZJR19GQl9DWUJFUjIwMDBf
RERDPXkKQ09ORklHX0ZCX0FSQz1tCiMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQK
IyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldApDT05GSUdfRkJfVkdBMTY9bQpDT05GSUdf
RkJfVVZFU0E9bQpDT05GSUdfRkJfVkVTQT15CkNPTkZJR19GQl9FRkk9eQpDT05GSUdfRkJf
TjQxMT1tCkNPTkZJR19GQl9IR0E9bQojIENPTkZJR19GQl9PUEVOQ09SRVMgaXMgbm90IHNl
dAojIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX05WSURJQSBp
cyBub3Qgc2V0CiMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAojIENPTkZJR19GQl9JNzQw
IGlzIG5vdCBzZXQKQ09ORklHX0ZCX0xFODA1Nzg9bQpDT05GSUdfRkJfQ0FSSUxMT19SQU5D
SD1tCiMgQ09ORklHX0ZCX0lOVEVMIGlzIG5vdCBzZXQKQ09ORklHX0ZCX01BVFJPWD1tCkNP
TkZJR19GQl9NQVRST1hfTUlMTEVOSVVNPXkKQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15
CkNPTkZJR19GQl9NQVRST1hfRz15CkNPTkZJR19GQl9NQVRST1hfSTJDPW0KQ09ORklHX0ZC
X01BVFJPWF9NQVZFTj1tCkNPTkZJR19GQl9SQURFT049bQpDT05GSUdfRkJfUkFERU9OX0ky
Qz15CkNPTkZJR19GQl9SQURFT05fQkFDS0xJR0hUPXkKIyBDT05GSUdfRkJfUkFERU9OX0RF
QlVHIGlzIG5vdCBzZXQKQ09ORklHX0ZCX0FUWTEyOD1tCkNPTkZJR19GQl9BVFkxMjhfQkFD
S0xJR0hUPXkKQ09ORklHX0ZCX0FUWT1tCkNPTkZJR19GQl9BVFlfQ1Q9eQojIENPTkZJR19G
Ql9BVFlfR0VORVJJQ19MQ0QgaXMgbm90IHNldApDT05GSUdfRkJfQVRZX0dYPXkKQ09ORklH
X0ZCX0FUWV9CQUNLTElHSFQ9eQpDT05GSUdfRkJfUzM9bQpDT05GSUdfRkJfUzNfRERDPXkK
Q09ORklHX0ZCX1NBVkFHRT1tCiMgQ09ORklHX0ZCX1NBVkFHRV9JMkMgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TQVZBR0VfQUNDRUwgaXMgbm90IHNldApDT05GSUdfRkJfU0lTPW0KQ09O
RklHX0ZCX1NJU18zMDA9eQpDT05GSUdfRkJfU0lTXzMxNT15CkNPTkZJR19GQl9WSUE9bQoj
IENPTkZJR19GQl9WSUFfRElSRUNUX1BST0NGUyBpcyBub3Qgc2V0CkNPTkZJR19GQl9WSUFf
WF9DT01QQVRJQklMSVRZPXkKQ09ORklHX0ZCX05FT01BR0lDPW0KQ09ORklHX0ZCX0tZUk89
bQpDT05GSUdfRkJfM0RGWD1tCiMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldApD
T05GSUdfRkJfM0RGWF9JMkM9eQpDT05GSUdfRkJfVk9PRE9PMT1tCkNPTkZJR19GQl9WVDg2
MjM9bQpDT05GSUdfRkJfVFJJREVOVD1tCkNPTkZJR19GQl9BUks9bQpDT05GSUdfRkJfUE0z
PW0KIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CkNPTkZJR19GQl9TTVNDVUZYPW0K
Q09ORklHX0ZCX1VETD1tCkNPTkZJR19GQl9WSVJUVUFMPW0KQ09ORklHX1hFTl9GQkRFVl9G
Uk9OVEVORD15CiMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CkNPTkZJR19GQl9N
Qjg2MlhYPW0KQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQz15CkNPTkZJR19GQl9NQjg2MlhY
X0kyQz15CiMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAojIENPTkZJR19GQl9B
VU9fSzE5MFggaXMgbm90IHNldApDT05GSUdfRkJfSFlQRVJWPW0KQ09ORklHX0ZCX1NJTVBM
RT15CkNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQojIENPTkZJR19MQ0RfQ0xBU1Nf
REVWSUNFIGlzIG5vdCBzZXQKQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQojIENP
TkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CkNPTkZJR19CQUNLTElHSFRfQVBQ
TEU9bQojIENPTkZJR19CQUNLTElHSFRfU0FIQVJBIGlzIG5vdCBzZXQKIyBDT05GSUdfQkFD
S0xJR0hUX0FEUDg4NjAgaXMgbm90IHNldAojIENPTkZJR19CQUNLTElHSFRfQURQODg3MCBp
cyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MTTM2MzkgaXMgbm90IHNldAojIENPTkZJ
R19CQUNLTElHSFRfR1BJTyBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9MVjUyMDdM
UCBpcyBub3Qgc2V0CiMgQ09ORklHX0JBQ0tMSUdIVF9CRDYxMDcgaXMgbm90IHNldApDT05G
SUdfVkdBU1RBVEU9bQpDT05GSUdfSERNST15CgojCiMgQ29uc29sZSBkaXNwbGF5IGRyaXZl
ciBzdXBwb3J0CiMKQ09ORklHX1ZHQV9DT05TT0xFPXkKIyBDT05GSUdfVkdBQ09OX1NPRlRf
U0NST0xMQkFDSyBpcyBub3Qgc2V0CkNPTkZJR19EVU1NWV9DT05TT0xFPXkKQ09ORklHX0RV
TU1ZX0NPTlNPTEVfQ09MVU1OUz04MApDT05GSUdfRFVNTVlfQ09OU09MRV9ST1dTPTI1CkNP
TkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVf
REVURUNUX1BSSU1BUlk9eQpDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTj15
CiMgQ09ORklHX0xPR08gaXMgbm90IHNldApDT05GSUdfU09VTkQ9bQpDT05GSUdfU09VTkRf
T1NTX0NPUkU9eQojIENPTkZJR19TT1VORF9PU1NfQ09SRV9QUkVDTEFJTSBpcyBub3Qgc2V0
CkNPTkZJR19TTkQ9bQpDT05GSUdfU05EX1RJTUVSPW0KQ09ORklHX1NORF9QQ009bQpDT05G
SUdfU05EX0hXREVQPW0KQ09ORklHX1NORF9SQVdNSURJPW0KQ09ORklHX1NORF9DT01QUkVT
U19PRkZMT0FEPW0KQ09ORklHX1NORF9KQUNLPXkKQ09ORklHX1NORF9TRVFVRU5DRVI9bQpD
T05GSUdfU05EX1NFUV9EVU1NWT1tCkNPTkZJR19TTkRfT1NTRU1VTD15CkNPTkZJR19TTkRf
TUlYRVJfT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTPW0KQ09ORklHX1NORF9QQ01fT1NTX1BM
VUdJTlM9eQojIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CkNPTkZJR19T
TkRfSFJUSU1FUj1tCkNPTkZJR19TTkRfU0VRX0hSVElNRVJfREVGQVVMVD15CkNPTkZJR19T
TkRfRFlOQU1JQ19NSU5PUlM9eQpDT05GSUdfU05EX01BWF9DQVJEUz0zMgpDT05GSUdfU05E
X1NVUFBPUlRfT0xEX0FQST15CkNPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQojIENPTkZJ
R19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAojIENPTkZJR19TTkRfREVCVUcgaXMg
bm90IHNldApDT05GSUdfU05EX1ZNQVNURVI9eQpDT05GSUdfU05EX0tDVExfSkFDSz15CkNP
TkZJR19TTkRfRE1BX1NHQlVGPXkKQ09ORklHX1NORF9SQVdNSURJX1NFUT1tCkNPTkZJR19T
TkRfT1BMM19MSUJfU0VRPW0KIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldApDT05GSUdfU05EX0VNVTEwSzFf
U0VRPW0KQ09ORklHX1NORF9NUFU0MDFfVUFSVD1tCkNPTkZJR19TTkRfT1BMM19MSUI9bQpD
T05GSUdfU05EX1ZYX0xJQj1tCkNPTkZJR19TTkRfQUM5N19DT0RFQz1tCkNPTkZJR19TTkRf
RFJJVkVSUz15CkNPTkZJR19TTkRfUENTUD1tCkNPTkZJR19TTkRfRFVNTVk9bQpDT05GSUdf
U05EX0FMT09QPW0KQ09ORklHX1NORF9WSVJNSURJPW0KQ09ORklHX1NORF9NVFBBVj1tCkNP
TkZJR19TTkRfTVRTNjQ9bQpDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQpDT05GSUdfU05E
X01QVTQwMT1tCkNPTkZJR19TTkRfUE9SVE1BTjJYND1tCkNPTkZJR19TTkRfQUM5N19QT1dF
Ul9TQVZFPXkKQ09ORklHX1NORF9BQzk3X1BPV0VSX1NBVkVfREVGQVVMVD0wCkNPTkZJR19T
TkRfU0JfQ09NTU9OPW0KQ09ORklHX1NORF9QQ0k9eQpDT05GSUdfU05EX0FEMTg4OT1tCkNP
TkZJR19TTkRfQUxTMzAwPW0KQ09ORklHX1NORF9BTFM0MDAwPW0KQ09ORklHX1NORF9BTEk1
NDUxPW0KQ09ORklHX1NORF9BU0lIUEk9bQpDT05GSUdfU05EX0FUSUlYUD1tCkNPTkZJR19T
TkRfQVRJSVhQX01PREVNPW0KQ09ORklHX1NORF9BVTg4MTA9bQpDT05GSUdfU05EX0FVODgy
MD1tCkNPTkZJR19TTkRfQVU4ODMwPW0KIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0CkNP
TkZJR19TTkRfQVpUMzMyOD1tCkNPTkZJR19TTkRfQlQ4N1g9bQojIENPTkZJR19TTkRfQlQ4
N1hfT1ZFUkNMT0NLIGlzIG5vdCBzZXQKQ09ORklHX1NORF9DQTAxMDY9bQpDT05GSUdfU05E
X0NNSVBDST1tCkNPTkZJR19TTkRfT1hZR0VOX0xJQj1tCkNPTkZJR19TTkRfT1hZR0VOPW0K
Q09ORklHX1NORF9DUzQyODE9bQpDT05GSUdfU05EX0NTNDZYWD1tCkNPTkZJR19TTkRfQ1M0
NlhYX05FV19EU1A9eQpDT05GSUdfU05EX0NUWEZJPW0KQ09ORklHX1NORF9EQVJMQTIwPW0K
Q09ORklHX1NORF9HSU5BMjA9bQpDT05GSUdfU05EX0xBWUxBMjA9bQpDT05GSUdfU05EX0RB
UkxBMjQ9bQpDT05GSUdfU05EX0dJTkEyND1tCkNPTkZJR19TTkRfTEFZTEEyND1tCkNPTkZJ
R19TTkRfTU9OQT1tCkNPTkZJR19TTkRfTUlBPW0KQ09ORklHX1NORF9FQ0hPM0c9bQpDT05G
SUdfU05EX0lORElHTz1tCkNPTkZJR19TTkRfSU5ESUdPSU89bQpDT05GSUdfU05EX0lORElH
T0RKPW0KQ09ORklHX1NORF9JTkRJR09JT1g9bQpDT05GSUdfU05EX0lORElHT0RKWD1tCkNP
TkZJR19TTkRfRU1VMTBLMT1tCkNPTkZJR19TTkRfRU1VMTBLMVg9bQpDT05GSUdfU05EX0VO
UzEzNzA9bQpDT05GSUdfU05EX0VOUzEzNzE9bQpDT05GSUdfU05EX0VTMTkzOD1tCkNPTkZJ
R19TTkRfRVMxOTY4PW0KQ09ORklHX1NORF9FUzE5NjhfSU5QVVQ9eQpDT05GSUdfU05EX0VT
MTk2OF9SQURJTz15CkNPTkZJR19TTkRfRk04MDE9bQpDT05GSUdfU05EX0ZNODAxX1RFQTU3
NVhfQk9PTD15CkNPTkZJR19TTkRfSERTUD1tCkNPTkZJR19TTkRfSERTUE09bQpDT05GSUdf
U05EX0lDRTE3MTI9bQpDT05GSUdfU05EX0lDRTE3MjQ9bQpDT05GSUdfU05EX0lOVEVMOFgw
PW0KQ09ORklHX1NORF9JTlRFTDhYME09bQpDT05GSUdfU05EX0tPUkcxMjEyPW0KQ09ORklH
X1NORF9MT0xBPW0KQ09ORklHX1NORF9MWDY0NjRFUz1tCkNPTkZJR19TTkRfTUFFU1RSTzM9
bQpDT05GSUdfU05EX01BRVNUUk8zX0lOUFVUPXkKQ09ORklHX1NORF9NSVhBUlQ9bQpDT05G
SUdfU05EX05NMjU2PW0KQ09ORklHX1NORF9QQ1hIUj1tCkNPTkZJR19TTkRfUklQVElERT1t
CkNPTkZJR19TTkRfUk1FMzI9bQpDT05GSUdfU05EX1JNRTk2PW0KQ09ORklHX1NORF9STUU5
NjUyPW0KQ09ORklHX1NORF9TT05JQ1ZJQkVTPW0KQ09ORklHX1NORF9UUklERU5UPW0KQ09O
RklHX1NORF9WSUE4MlhYPW0KQ09ORklHX1NORF9WSUE4MlhYX01PREVNPW0KQ09ORklHX1NO
RF9WSVJUVU9TTz1tCkNPTkZJR19TTkRfVlgyMjI9bQpDT05GSUdfU05EX1lNRlBDST1tCgoj
CiMgSEQtQXVkaW8KIwpDT05GSUdfU05EX0hEQT1tCkNPTkZJR19TTkRfSERBX0lOVEVMPW0K
Q09ORklHX1NORF9IREFfRFNQX0xPQURFUj15CkNPTkZJR19TTkRfSERBX1BSRUFMTE9DX1NJ
WkU9NjQKQ09ORklHX1NORF9IREFfSFdERVA9eQpDT05GSUdfU05EX0hEQV9SRUNPTkZJRz15
CkNPTkZJR19TTkRfSERBX0lOUFVUX0JFRVA9eQpDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQ
X01PREU9MQpDT05GSUdfU05EX0hEQV9JTlBVVF9KQUNLPXkKQ09ORklHX1NORF9IREFfUEFU
Q0hfTE9BREVSPXkKQ09ORklHX1NORF9IREFfQ09ERUNfUkVBTFRFSz1tCkNPTkZJR19TTkRf
SERBX0NPREVDX0FOQUxPRz1tCkNPTkZJR19TTkRfSERBX0NPREVDX1NJR01BVEVMPW0KQ09O
RklHX1NORF9IREFfQ09ERUNfVklBPW0KQ09ORklHX1NORF9IREFfQ09ERUNfSERNST1tCkNP
TkZJR19TTkRfSERBX0k5MTU9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DSVJSVVM9bQpDT05G
SUdfU05EX0hEQV9DT0RFQ19DT05FWEFOVD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEx
MD1tCkNPTkZJR19TTkRfSERBX0NPREVDX0NBMDEzMj1tCkNPTkZJR19TTkRfSERBX0NPREVD
X0NBMDEzMl9EU1A9eQpDT05GSUdfU05EX0hEQV9DT0RFQ19DTUVESUE9bQpDT05GSUdfU05E
X0hEQV9DT0RFQ19TSTMwNTQ9bQpDT05GSUdfU05EX0hEQV9HRU5FUklDPW0KQ09ORklHX1NO
RF9IREFfUE9XRVJfU0FWRV9ERUZBVUxUPTAKQ09ORklHX1NORF9IREFfQ09SRT1tCkNPTkZJ
R19TTkRfU1BJPXkKQ09ORklHX1NORF9VU0I9eQpDT05GSUdfU05EX1VTQl9BVURJTz1tCkNP
TkZJR19TTkRfVVNCX1VBMTAxPW0KQ09ORklHX1NORF9VU0JfVVNYMlk9bQpDT05GSUdfU05E
X1VTQl9DQUlBUT1tCkNPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKQ09ORklHX1NORF9V
U0JfVVMxMjJMPW0KQ09ORklHX1NORF9VU0JfNkZJUkU9bQpDT05GSUdfU05EX1VTQl9ISUZB
Q0U9bQpDT05GSUdfU05EX0JDRDIwMDA9bQpDT05GSUdfU05EX1VTQl9MSU5FNj1tCkNPTkZJ
R19TTkRfVVNCX1BPRD1tCkNPTkZJR19TTkRfVVNCX1BPREhEPW0KQ09ORklHX1NORF9VU0Jf
VE9ORVBPUlQ9bQpDT05GSUdfU05EX1VTQl9WQVJJQVg9bQpDT05GSUdfU05EX0ZJUkVXSVJF
PXkKQ09ORklHX1NORF9GSVJFV0lSRV9MSUI9bQpDT05GSUdfU05EX0RJQ0U9bQpDT05GSUdf
U05EX09YRlc9bQpDT05GSUdfU05EX0lTSUdIVD1tCkNPTkZJR19TTkRfU0NTMVg9bQpDT05G
SUdfU05EX0ZJUkVXT1JLUz1tCkNPTkZJR19TTkRfQkVCT0I9bQpDT05GSUdfU05EX1BDTUNJ
QT15CkNPTkZJR19TTkRfVlhQT0NLRVQ9bQpDT05GSUdfU05EX1BEQVVESU9DRj1tCkNPTkZJ
R19TTkRfU09DPW0KIyBDT05GSUdfU05EX0FUTUVMX1NPQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1NORF9ERVNJR05XQVJFX0kyUyBpcyBub3Qgc2V0CgojCiMgU29DIEF1ZGlvIGZvciBGcmVl
c2NhbGUgQ1BVcwojCgojCiMgQ29tbW9uIFNvQyBBdWRpbyBvcHRpb25zIGZvciBGcmVlc2Nh
bGUgQ1BVczoKIwojIENPTkZJR19TTkRfU09DX0ZTTF9BU1JDIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19GU0xfU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1NJ
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19GU0xfU1BESUYgaXMgbm90IHNldAojIENP
TkZJR19TTkRfU09DX0ZTTF9FU0FJIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19JTVhf
QVVETVVYIGlzIG5vdCBzZXQKQ09ORklHX1NORF9TT0NfSU5URUxfU1NUPW0KQ09ORklHX1NO
RF9TT0NfSU5URUxfU1NUX0FDUEk9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9IQVNXRUxMPW0K
Q09ORklHX1NORF9TT0NfSU5URUxfQkFZVFJBSUw9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9I
QVNXRUxMX01BQ0g9bQpDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRfUlQ1NjQwX01BQ0g9bQpD
T05GSUdfU05EX1NPQ19JTlRFTF9CWVRfTUFYOTgwOTBfTUFDSD1tCkNPTkZJR19TTkRfU09D
X0lOVEVMX0JST0FEV0VMTF9NQUNIPW0KIyBDT05GSUdfU05EX1NPQ19JTlRFTF9CWVRDUl9S
VDU2NDBfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NzJfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfSU5URUxfQ0hUX0JTV19S
VDU2NDVfTUFDSCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfUUNPTSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfWFRGUEdBX0kyUyBpcyBub3Qgc2V0CkNPTkZJR19TTkRfU09D
X0kyQ19BTkRfU1BJPW0KCiMKIyBDT0RFQyBkcml2ZXJzCiMKIyBDT05GSUdfU05EX1NPQ19B
REFVMTcwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs0MTA0IGlzIG5vdCBzZXQK
IyBDT05GSUdfU05EX1NPQ19BSzQ1NTQgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0FL
NDY0MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQUs1Mzg2IGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19BTEM1NjIzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzM1
TDMyIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19DUzQyTDUxX0kyQyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw1MiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0Nf
Q1M0Mkw1NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfQ1M0Mkw3MyBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfQ1M0MjY1IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19D
UzQyNzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9JMkMgaXMgbm90IHNl
dAojIENPTkZJR19TTkRfU09DX0NTNDI3MV9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX0NTNDJYWDhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19IRE1JX0NPREVD
IGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19FUzgzMjggaXMgbm90IHNldApDT05GSUdf
U05EX1NPQ19NQVg5ODA5MD1tCiMgQ09ORklHX1NORF9TT0NfUENNMTY4MSBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfUENNMTc5MkEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09D
X1BDTTUxMnhfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19QQ001MTJ4X1NQSSBp
cyBub3Qgc2V0CkNPTkZJR19TTkRfU09DX1JMNjIzMT1tCkNPTkZJR19TTkRfU09DX1JUMjg2
PW0KIyBDT05GSUdfU05EX1NPQ19SVDU2MzEgaXMgbm90IHNldApDT05GSUdfU05EX1NPQ19S
VDU2NDA9bQojIENPTkZJR19TTkRfU09DX1JUNTY3N19TUEkgaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1NHVEw1MDAwIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TSVJGX0FV
RElPX0NPREVDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TUERJRiBpcyBub3Qgc2V0
CiMgQ09ORklHX1NORF9TT0NfU1NNMjYwMl9TUEkgaXMgbm90IHNldAojIENPTkZJR19TTkRf
U09DX1NTTTI2MDJfSTJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TU000NTY3IGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19TVEEzMlggaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1NUQTM1MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTMjU1MiBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVEFTNTA4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfVEZBOTg3OSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVExWMzIwQUlDMjNf
STJDIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UTFYzMjBBSUMyM19TUEkgaXMgbm90
IHNldAojIENPTkZJR19TTkRfU09DX1RMVjMyMEFJQzMxWFggaXMgbm90IHNldAojIENPTkZJ
R19TTkRfU09DX1RMVjMyMEFJQzNYIGlzIG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19UUzNB
MjI3RSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NTEwIGlzIG5vdCBzZXQKIyBD
T05GSUdfU05EX1NPQ19XTTg1MjMgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODU4
MCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzExIGlzIG5vdCBzZXQKIyBDT05G
SUdfU05EX1NPQ19XTTg3MjggaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODczMSBp
cyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzM3IGlzIG5vdCBzZXQKIyBDT05GSUdf
U05EX1NPQ19XTTg3NDEgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc1MCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004NzUzIGlzIG5vdCBzZXQKIyBDT05GSUdfU05E
X1NPQ19XTTg3NzAgaXMgbm90IHNldAojIENPTkZJR19TTkRfU09DX1dNODc3NiBpcyBub3Qg
c2V0CiMgQ09ORklHX1NORF9TT0NfV004ODA0X0kyQyBpcyBub3Qgc2V0CiMgQ09ORklHX1NO
RF9TT0NfV004ODA0X1NQSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfV004OTAzIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NPQ19XTTg5NjIgaXMgbm90IHNldAojIENPTkZJR19T
TkRfU09DX1dNODk3OCBpcyBub3Qgc2V0CiMgQ09ORklHX1NORF9TT0NfVFBBNjEzMEEyIGlz
IG5vdCBzZXQKIyBDT05GSUdfU05EX1NJTVBMRV9DQVJEIGlzIG5vdCBzZXQKIyBDT05GSUdf
U09VTkRfUFJJTUUgaXMgbm90IHNldApDT05GSUdfQUM5N19CVVM9bQoKIwojIEhJRCBzdXBw
b3J0CiMKQ09ORklHX0hJRD1tCkNPTkZJR19ISURfQkFUVEVSWV9TVFJFTkdUSD15CkNPTkZJ
R19ISURSQVc9eQpDT05GSUdfVUhJRD1tCkNPTkZJR19ISURfR0VORVJJQz1tCgojCiMgU3Bl
Y2lhbCBISUQgZHJpdmVycwojCkNPTkZJR19ISURfQTRURUNIPW0KQ09ORklHX0hJRF9BQ1JV
WD1tCkNPTkZJR19ISURfQUNSVVhfRkY9eQpDT05GSUdfSElEX0FQUExFPW0KQ09ORklHX0hJ
RF9BUFBMRUlSPW0KQ09ORklHX0hJRF9BVVJFQUw9bQpDT05GSUdfSElEX0JFTEtJTj1tCiMg
Q09ORklHX0hJRF9CRVRPUF9GRiBpcyBub3Qgc2V0CkNPTkZJR19ISURfQ0hFUlJZPW0KQ09O
RklHX0hJRF9DSElDT05ZPW0KQ09ORklHX0hJRF9QUk9ESUtFWVM9bQpDT05GSUdfSElEX0NQ
MjExMj1tCkNPTkZJR19ISURfQ1lQUkVTUz1tCkNPTkZJR19ISURfRFJBR09OUklTRT1tCkNP
TkZJR19EUkFHT05SSVNFX0ZGPXkKQ09ORklHX0hJRF9FTVNfRkY9bQpDT05GSUdfSElEX0VM
RUNPTT1tCkNPTkZJR19ISURfRUxPPW0KQ09ORklHX0hJRF9FWktFWT1tCkNPTkZJR19ISURf
SE9MVEVLPW0KQ09ORklHX0hPTFRFS19GRj15CiMgQ09ORklHX0hJRF9HVDY4M1IgaXMgbm90
IHNldApDT05GSUdfSElEX0tFWVRPVUNIPW0KQ09ORklHX0hJRF9LWUU9bQpDT05GSUdfSElE
X1VDTE9HSUM9bQpDT05GSUdfSElEX1dBTFRPUD1tCkNPTkZJR19ISURfR1lSQVRJT049bQpD
T05GSUdfSElEX0lDQURFPW0KQ09ORklHX0hJRF9UV0lOSEFOPW0KQ09ORklHX0hJRF9LRU5T
SU5HVE9OPW0KQ09ORklHX0hJRF9MQ1BPV0VSPW0KQ09ORklHX0hJRF9MRU5PVk89bQpDT05G
SUdfSElEX0xPR0lURUNIPW0KQ09ORklHX0hJRF9MT0dJVEVDSF9ESj1tCkNPTkZJR19ISURf
TE9HSVRFQ0hfSElEUFA9bQpDT05GSUdfTE9HSVRFQ0hfRkY9eQpDT05GSUdfTE9HSVJVTUJM
RVBBRDJfRkY9eQpDT05GSUdfTE9HSUc5NDBfRkY9eQpDT05GSUdfTE9HSVdIRUVMU19GRj15
CkNPTkZJR19ISURfTUFHSUNNT1VTRT1tCkNPTkZJR19ISURfTUlDUk9TT0ZUPW0KQ09ORklH
X0hJRF9NT05URVJFWT1tCkNPTkZJR19ISURfTVVMVElUT1VDSD1tCkNPTkZJR19ISURfTlRS
SUc9bQpDT05GSUdfSElEX09SVEVLPW0KQ09ORklHX0hJRF9QQU5USEVSTE9SRD1tCkNPTkZJ
R19QQU5USEVSTE9SRF9GRj15CkNPTkZJR19ISURfUEVOTU9VTlQ9bQpDT05GSUdfSElEX1BF
VEFMWU5YPW0KQ09ORklHX0hJRF9QSUNPTENEPW0KQ09ORklHX0hJRF9QSUNPTENEX0ZCPXkK
Q09ORklHX0hJRF9QSUNPTENEX0JBQ0tMSUdIVD15CkNPTkZJR19ISURfUElDT0xDRF9MRURT
PXkKQ09ORklHX0hJRF9QSUNPTENEX0NJUj15CiMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBp
cyBub3Qgc2V0CkNPTkZJR19ISURfUFJJTUFYPW0KQ09ORklHX0hJRF9ST0NDQVQ9bQpDT05G
SUdfSElEX1NBSVRFSz1tCkNPTkZJR19ISURfU0FNU1VORz1tCkNPTkZJR19ISURfU09OWT1t
CkNPTkZJR19TT05ZX0ZGPXkKQ09ORklHX0hJRF9TUEVFRExJTks9bQpDT05GSUdfSElEX1NU
RUVMU0VSSUVTPW0KQ09ORklHX0hJRF9TVU5QTFVTPW0KQ09ORklHX0hJRF9STUk9bQpDT05G
SUdfSElEX0dSRUVOQVNJQT1tCkNPTkZJR19HUkVFTkFTSUFfRkY9eQpDT05GSUdfSElEX0hZ
UEVSVl9NT1VTRT1tCkNPTkZJR19ISURfU01BUlRKT1lQTFVTPW0KQ09ORklHX1NNQVJUSk9Z
UExVU19GRj15CkNPTkZJR19ISURfVElWTz1tCkNPTkZJR19ISURfVE9QU0VFRD1tCkNPTkZJ
R19ISURfVEhJTkdNPW0KQ09ORklHX0hJRF9USFJVU1RNQVNURVI9bQpDT05GSUdfVEhSVVNU
TUFTVEVSX0ZGPXkKQ09ORklHX0hJRF9XQUNPTT1tCkNPTkZJR19ISURfV0lJTU9URT1tCkNP
TkZJR19ISURfWElOTU89bQpDT05GSUdfSElEX1pFUk9QTFVTPW0KQ09ORklHX1pFUk9QTFVT
X0ZGPXkKQ09ORklHX0hJRF9aWURBQ1JPTj1tCkNPTkZJR19ISURfU0VOU09SX0hVQj1tCiMg
Q09ORklHX0hJRF9TRU5TT1JfQ1VTVE9NX1NFTlNPUiBpcyBub3Qgc2V0CgojCiMgVVNCIEhJ
RCBzdXBwb3J0CiMKQ09ORklHX1VTQl9ISUQ9bQpDT05GSUdfSElEX1BJRD15CkNPTkZJR19V
U0JfSElEREVWPXkKCiMKIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycwojCiMgQ09O
RklHX1VTQl9LQkQgaXMgbm90IHNldAojIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAoK
IwojIEkyQyBISUQgc3VwcG9ydAojCkNPTkZJR19JMkNfSElEPW0KQ09ORklHX1VTQl9PSENJ
X0xJVFRMRV9FTkRJQU49eQpDT05GSUdfVVNCX1NVUFBPUlQ9eQpDT05GSUdfVVNCX0NPTU1P
Tj1tCkNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKQ09ORklHX1VTQj1tCkNPTkZJR19VU0Jf
QU5OT1VOQ0VfTkVXX0RFVklDRVM9eQoKIwojIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMK
IwpDT05GSUdfVVNCX0RFRkFVTFRfUEVSU0lTVD15CkNPTkZJR19VU0JfRFlOQU1JQ19NSU5P
UlM9eQojIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX09UR19XSElU
RUxJU1QgaXMgbm90IHNldAojIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90
IHNldAojIENPTkZJR19VU0JfT1RHX0ZTTSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfTU9OPW0K
Q09ORklHX1VTQl9XVVNCPW0KQ09ORklHX1VTQl9XVVNCX0NCQUY9bQojIENPTkZJR19VU0Jf
V1VTQl9DQkFGX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBVU0IgSG9zdCBDb250cm9sbGVyIERy
aXZlcnMKIwojIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0Jf
WEhDSV9IQ0Q9bQpDT05GSUdfVVNCX1hIQ0lfUENJPW0KQ09ORklHX1VTQl9FSENJX0hDRD1t
CkNPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CkNPTkZJR19VU0JfRUhDSV9UVF9ORVdT
Q0hFRD15CkNPTkZJR19VU0JfRUhDSV9QQ0k9bQojIENPTkZJR19VU0JfRUhDSV9IQ0RfUExB
VEZPUk0gaXMgbm90IHNldAojIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0lTUDEz
NjJfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0ZVU0JIMjAwX0hDRCBpcyBub3Qgc2V0
CiMgQ09ORklHX1VTQl9GT1RHMjEwX0hDRCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NQVgz
NDIxX0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfT0hDSV9IQ0Q9bQpDT05GSUdfVVNCX09I
Q0lfSENEX1BDST1tCiMgQ09ORklHX1VTQl9PSENJX0hDRF9TU0IgaXMgbm90IHNldAojIENP
TkZJR19VU0JfT0hDSV9IQ0RfUExBVEZPUk0gaXMgbm90IHNldApDT05GSUdfVVNCX1VIQ0lf
SENEPW0KQ09ORklHX1VTQl9VMTMyX0hDRD1tCkNPTkZJR19VU0JfU0w4MTFfSENEPW0KIyBD
T05GSUdfVVNCX1NMODExX0hDRF9JU08gaXMgbm90IHNldApDT05GSUdfVVNCX1NMODExX0NT
PW0KIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CkNPTkZJR19VU0JfV0hD
SV9IQ0Q9bQpDT05GSUdfVVNCX0hXQV9IQ0Q9bQojIENPTkZJR19VU0JfSENEX0JDTUEgaXMg
bm90IHNldAojIENPTkZJR19VU0JfSENEX1NTQiBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9I
Q0RfVEVTVF9NT0RFIGlzIG5vdCBzZXQKCiMKIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMK
IwpDT05GSUdfVVNCX0FDTT1tCkNPTkZJR19VU0JfUFJJTlRFUj1tCkNPTkZJR19VU0JfV0RN
PW0KQ09ORklHX1VTQl9UTUM9bQoKIwojIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24g
U0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKIwoKIwojIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNC
X1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiMKQ09ORklHX1VTQl9TVE9SQUdFPW0KIyBD
T05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApDT05GSUdfVVNCX1NUT1JBR0Vf
UkVBTFRFSz1tCkNPTkZJR19SRUFMVEVLX0FVVE9QTT15CkNPTkZJR19VU0JfU1RPUkFHRV9E
QVRBRkFCPW0KQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQpDT05GSUdfVVNCX1NUT1JB
R0VfSVNEMjAwPW0KQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPW0KQ09ORklHX1VTQl9TVE9S
QUdFX1NERFIwOT1tCkNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9bQpDT05GSUdfVVNCX1NU
T1JBR0VfSlVNUFNIT1Q9bQpDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBPW0KQ09ORklHX1VT
Ql9TVE9SQUdFX09ORVRPVUNIPW0KQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BPW0KQ09ORklH
X1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0I9bQpDT05GSUdfVVNCX1NUT1JBR0VfRU5FX1VC
NjI1MD1tCkNPTkZJR19VU0JfVUFTPW0KCiMKIyBVU0IgSW1hZ2luZyBkZXZpY2VzCiMKQ09O
RklHX1VTQl9NREM4MDA9bQpDT05GSUdfVVNCX01JQ1JPVEVLPW0KQ09ORklHX1VTQklQX0NP
UkU9bQpDT05GSUdfVVNCSVBfVkhDSV9IQ0Q9bQpDT05GSUdfVVNCSVBfSE9TVD1tCiMgQ09O
RklHX1VTQklQX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9EV0MzIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0RXQzIg
aXMgbm90IHNldAojIENPTkZJR19VU0JfQ0hJUElERUEgaXMgbm90IHNldAojIENPTkZJR19V
U0JfSVNQMTc2MCBpcyBub3Qgc2V0CgojCiMgVVNCIHBvcnQgZHJpdmVycwojCkNPTkZJR19V
U0JfVVNTNzIwPW0KQ09ORklHX1VTQl9TRVJJQUw9bQpDT05GSUdfVVNCX1NFUklBTF9HRU5F
UklDPXkKQ09ORklHX1VTQl9TRVJJQUxfU0lNUExFPW0KQ09ORklHX1VTQl9TRVJJQUxfQUlS
Q0FCTEU9bQpDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2PW0KQ09ORklHX1VTQl9TRVJJQUxf
QkVMS0lOPW0KQ09ORklHX1VTQl9TRVJJQUxfQ0gzNDE9bQpDT05GSUdfVVNCX1NFUklBTF9X
SElURUhFQVQ9bQpDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9DUDIxMFg9bQpDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KQ09O
RklHX1VTQl9TRVJJQUxfRU1QRUc9bQpDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCkNP
TkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lSPW0KQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQ9bQpDT05GSUdf
VVNCX1NFUklBTF9FREdFUE9SVF9UST1tCkNPTkZJR19VU0JfU0VSSUFMX0Y4MTIzMj1tCkNP
TkZJR19VU0JfU0VSSUFMX0dBUk1JTj1tCkNPTkZJR19VU0JfU0VSSUFMX0lQVz1tCkNPTkZJ
R19VU0JfU0VSSUFMX0lVVT1tCkNPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBPW0KQ09O
RklHX1VTQl9TRVJJQUxfS0VZU1BBTj1tCkNPTkZJR19VU0JfU0VSSUFMX0tMU0k9bQpDT05G
SUdfVVNCX1NFUklBTF9LT0JJTF9TQ1Q9bQpDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1t
CkNPTkZJR19VU0JfU0VSSUFMX01FVFJPPW0KQ09ORklHX1VTQl9TRVJJQUxfTU9TNzcyMD1t
CkNPTkZJR19VU0JfU0VSSUFMX01PUzc3MTVfUEFSUE9SVD15CkNPTkZJR19VU0JfU0VSSUFM
X01PUzc4NDA9bQpDT05GSUdfVVNCX1NFUklBTF9NWFVQT1JUPW0KQ09ORklHX1VTQl9TRVJJ
QUxfTkFWTUFOPW0KQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KQ09ORklHX1VTQl9TRVJJ
QUxfT1RJNjg1OD1tCkNPTkZJR19VU0JfU0VSSUFMX1FDQVVYPW0KQ09ORklHX1VTQl9TRVJJ
QUxfUVVBTENPTU09bQpDT05GSUdfVVNCX1NFUklBTF9TUENQOFg1PW0KQ09ORklHX1VTQl9T
RVJJQUxfU0FGRT1tCiMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNl
dApDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUz1tCkNPTkZJR19VU0JfU0VSSUFM
X1NZTUJPTD1tCkNPTkZJR19VU0JfU0VSSUFMX1RJPW0KQ09ORklHX1VTQl9TRVJJQUxfQ1lC
RVJKQUNLPW0KQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KQ09ORklHX1VTQl9TRVJJQUxf
V1dBTj1tCkNPTkZJR19VU0JfU0VSSUFMX09QVElPTj1tCkNPTkZJR19VU0JfU0VSSUFMX09N
TklORVQ9bQpDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OPW0KQ09ORklHX1VTQl9TRVJJQUxf
WFNFTlNfTVQ9bQpDT05GSUdfVVNCX1NFUklBTF9XSVNIQk9ORT1tCkNPTkZJR19VU0JfU0VS
SUFMX1NTVTEwMD1tCkNPTkZJR19VU0JfU0VSSUFMX1FUMj1tCkNPTkZJR19VU0JfU0VSSUFM
X0RFQlVHPW0KCiMKIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCiMKQ09ORklHX1VTQl9F
TUk2Mj1tCkNPTkZJR19VU0JfRU1JMjY9bQpDT05GSUdfVVNCX0FEVVRVWD1tCkNPTkZJR19V
U0JfU0VWU0VHPW0KQ09ORklHX1VTQl9SSU81MDA9bQpDT05GSUdfVVNCX0xFR09UT1dFUj1t
CkNPTkZJR19VU0JfTENEPW0KQ09ORklHX1VTQl9MRUQ9bQpDT05GSUdfVVNCX0NZUFJFU1Nf
Q1k3QzYzPW0KQ09ORklHX1VTQl9DWVRIRVJNPW0KQ09ORklHX1VTQl9JRE1PVVNFPW0KQ09O
RklHX1VTQl9GVERJX0VMQU49bQpDT05GSUdfVVNCX0FQUExFRElTUExBWT1tCkNPTkZJR19V
U0JfU0lTVVNCVkdBPW0KQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKQ09ORklHX1VTQl9M
RD1tCkNPTkZJR19VU0JfVFJBTkNFVklCUkFUT1I9bQpDT05GSUdfVVNCX0lPV0FSUklPUj1t
CkNPTkZJR19VU0JfVEVTVD1tCkNPTkZJR19VU0JfRUhTRVRfVEVTVF9GSVhUVVJFPW0KQ09O
RklHX1VTQl9JU0lHSFRGVz1tCkNPTkZJR19VU0JfWVVSRVg9bQpDT05GSUdfVVNCX0VaVVNC
X0ZYMj1tCiMgQ09ORklHX1VTQl9IU0lDX1VTQjM1MDMgaXMgbm90IHNldAojIENPTkZJR19V
U0JfTElOS19MQVlFUl9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NIQU9TS0VZIGlz
IG5vdCBzZXQKQ09ORklHX1VTQl9BVE09bQpDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQpDT05G
SUdfVVNCX0NYQUNSVT1tCkNPTkZJR19VU0JfVUVBR0xFQVRNPW0KQ09ORklHX1VTQl9YVVNC
QVRNPW0KCiMKIyBVU0IgUGh5c2ljYWwgTGF5ZXIgZHJpdmVycwojCiMgQ09ORklHX1VTQl9Q
SFkgaXMgbm90IHNldAojIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9JU1AxMzAxIGlzIG5v
dCBzZXQKQ09ORklHX1VTQl9HQURHRVQ9bQojIENPTkZJR19VU0JfR0FER0VUX0RFQlVHIGlz
IG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CiMg
Q09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfVVNCX0dBREdF
VF9WQlVTX0RSQVc9MgpDT05GSUdfVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTPTIK
CiMKIyBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyCiMKIyBDT05GSUdfVVNCX0ZPVEcyMTBf
VURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dSX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklH
X1VTQl9SOEE2NjU5NyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9QWEEyN1ggaXMgbm90IHNl
dAojIENPTkZJR19VU0JfTVZfVURDIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX01WX1UzRCBp
cyBub3Qgc2V0CiMgQ09ORklHX1VTQl9NNjY1OTIgaXMgbm90IHNldAojIENPTkZJR19VU0Jf
QkRDX1VEQyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9BTUQ1NTM2VURDIGlzIG5vdCBzZXQK
IyBDT05GSUdfVVNCX05FVDIyNzIgaXMgbm90IHNldApDT05GSUdfVVNCX05FVDIyODA9bQoj
IENPTkZJR19VU0JfR09LVSBpcyBub3Qgc2V0CkNPTkZJR19VU0JfRUcyMFQ9bQojIENPTkZJ
R19VU0JfRFVNTVlfSENEIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0NPTkZJR0ZTIGlzIG5v
dCBzZXQKIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAojIENPTkZJR19VU0JfQVVESU8g
aXMgbm90IHNldAojIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0df
TkNNIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0ZVTkNUSU9ORlMgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUFTU19TVE9SQUdF
IGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dBREdFVF9UQVJHRVQgaXMgbm90IHNldAojIENP
TkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAojIENPTkZJR19VU0JfTUlESV9HQURHRVQg
aXMgbm90IHNldAojIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKIyBDT05GSUdf
VVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAojIENPTkZJR19VU0JfR19OT0tJQSBpcyBu
b3Qgc2V0CiMgQ09ORklHX1VTQl9HX0FDTV9NUyBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9H
X01VTFRJIGlzIG5vdCBzZXQKIyBDT05GSUdfVVNCX0dfSElEIGlzIG5vdCBzZXQKIyBDT05G
SUdfVVNCX0dfREJHUCBpcyBub3Qgc2V0CiMgQ09ORklHX1VTQl9HX1dFQkNBTSBpcyBub3Qg
c2V0CkNPTkZJR19VU0JfTEVEX1RSSUc9eQpDT05GSUdfVVdCPW0KQ09ORklHX1VXQl9IV0E9
bQpDT05GSUdfVVdCX1dIQ0k9bQpDT05GSUdfVVdCX0kxNDgwVT1tCkNPTkZJR19NTUM9bQoj
IENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19NTUNfQ0xLR0FURSBpcyBu
b3Qgc2V0CgojCiMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCiMKQ09ORklHX01NQ19CTE9D
Sz1tCkNPTkZJR19NTUNfQkxPQ0tfTUlOT1JTPTI1NgpDT05GSUdfTU1DX0JMT0NLX0JPVU5D
RT15CkNPTkZJR19TRElPX1VBUlQ9bQojIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0Cgoj
CiMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKIwpDT05GSUdfTU1DX1NE
SENJPW0KQ09ORklHX01NQ19TREhDSV9QQ0k9bQpDT05GSUdfTU1DX1JJQ09IX01NQz15CkNP
TkZJR19NTUNfU0RIQ0lfQUNQST1tCiMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qg
c2V0CkNPTkZJR19NTUNfV0JTRD1tCkNPTkZJR19NTUNfVElGTV9TRD1tCiMgQ09ORklHX01N
Q19TUEkgaXMgbm90IHNldApDT05GSUdfTU1DX1NEUklDT0hfQ1M9bQpDT05GSUdfTU1DX0NC
NzEwPW0KQ09ORklHX01NQ19WSUFfU0RNTUM9bQpDT05GSUdfTU1DX1ZVQjMwMD1tCkNPTkZJ
R19NTUNfVVNIQz1tCiMgQ09ORklHX01NQ19VU0RISTZST0wwIGlzIG5vdCBzZXQKQ09ORklH
X01NQ19SRUFMVEVLX1BDST1tCkNPTkZJR19NTUNfUkVBTFRFS19VU0I9bQpDT05GSUdfTU1D
X1RPU0hJQkFfUENJPW0KQ09ORklHX01FTVNUSUNLPW0KIyBDT05GSUdfTUVNU1RJQ0tfREVC
VUcgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIGRyaXZlcnMKIwojIENPTkZJR19NRU1T
VElDS19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKQ09ORklHX01TUFJPX0JMT0NLPW0KIyBD
T05GSUdfTVNfQkxPQ0sgaXMgbm90IHNldAoKIwojIE1lbW9yeVN0aWNrIEhvc3QgQ29udHJv
bGxlciBEcml2ZXJzCiMKQ09ORklHX01FTVNUSUNLX1RJRk1fTVM9bQpDT05GSUdfTUVNU1RJ
Q0tfSk1JQ1JPTl8zOFg9bQpDT05GSUdfTUVNU1RJQ0tfUjU5Mj1tCkNPTkZJR19NRU1TVElD
S19SRUFMVEVLX1BDST1tCkNPTkZJR19NRU1TVElDS19SRUFMVEVLX1VTQj1tCkNPTkZJR19O
RVdfTEVEUz15CkNPTkZJR19MRURTX0NMQVNTPXkKIyBDT05GSUdfTEVEU19DTEFTU19GTEFT
SCBpcyBub3Qgc2V0CgojCiMgTEVEIGRyaXZlcnMKIwojIENPTkZJR19MRURTX0xNMzUzMCBp
cyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTE0zNjQyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVE
U19QQ0E5NTMyIGlzIG5vdCBzZXQKIyBDT05GSUdfTEVEU19HUElPIGlzIG5vdCBzZXQKQ09O
RklHX0xFRFNfTFAzOTQ0PW0KIyBDT05GSUdfTEVEU19MUDU1MjEgaXMgbm90IHNldAojIENP
TkZJR19MRURTX0xQNTUyMyBpcyBub3Qgc2V0CiMgQ09ORklHX0xFRFNfTFA1NTYyIGlzIG5v
dCBzZXQKIyBDT05GSUdfTEVEU19MUDg1MDEgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xQ
ODg2MCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX0NMRVZPX01BSUw9bQpDT05GSUdfTEVEU19Q
Q0E5NTVYPW0KIyBDT05GSUdfTEVEU19QQ0E5NjNYIGlzIG5vdCBzZXQKQ09ORklHX0xFRFNf
REFDMTI0UzA4NT1tCkNPTkZJR19MRURTX0JEMjgwMj1tCkNPTkZJR19MRURTX0lOVEVMX1NT
NDIwMD1tCkNPTkZJR19MRURTX0xUMzU5Mz1tCkNPTkZJR19MRURTX0RFTExfTkVUQk9PS1M9
bQojIENPTkZJR19MRURTX1RDQTY1MDcgaXMgbm90IHNldAojIENPTkZJR19MRURTX0xNMzU1
eCBpcyBub3Qgc2V0CkNPTkZJR19MRURTX01FTkYyMUJNQz1tCgojCiMgTEVEIGRyaXZlciBm
b3IgYmxpbmsoMSkgVVNCIFJHQiBMRUQgaXMgdW5kZXIgU3BlY2lhbCBISUQgZHJpdmVycyAo
SElEX1RISU5HTSkKIwojIENPTkZJR19MRURTX0JMSU5LTSBpcyBub3Qgc2V0CiMgQ09ORklH
X0xFRFNfUE04OTQxX1dMRUQgaXMgbm90IHNldAoKIwojIExFRCBUcmlnZ2VycwojCkNPTkZJ
R19MRURTX1RSSUdHRVJTPXkKQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUj1tCkNPTkZJR19M
RURTX1RSSUdHRVJfT05FU0hPVD1tCkNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPW0K
Q09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQ9bQpDT05GSUdfTEVEU19UUklHR0VSX0NQ
VT15CkNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz1tCkNPTkZJR19MRURTX1RSSUdHRVJfREVG
QVVMVF9PTj1tCgojCiMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29u
ZmlnIChMRUQgdGFyZ2V0KQojCkNPTkZJR19MRURTX1RSSUdHRVJfVFJBTlNJRU5UPW0KQ09O
RklHX0xFRFNfVFJJR0dFUl9DQU1FUkE9bQpDT05GSUdfQUNDRVNTSUJJTElUWT15CkNPTkZJ
R19BMTFZX0JSQUlMTEVfQ09OU09MRT15CkNPTkZJR19JTkZJTklCQU5EPW0KQ09ORklHX0lO
RklOSUJBTkRfVVNFUl9NQUQ9bQpDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCkNP
TkZJR19JTkZJTklCQU5EX1VTRVJfTUVNPXkKQ09ORklHX0lORklOSUJBTkRfT05fREVNQU5E
X1BBR0lORz15CkNPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQpDT05GSUdfSU5GSU5J
QkFORF9NVEhDQT1tCkNPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKQ09ORklHX0lO
RklOSUJBTkRfSVBBVEg9bQpDT05GSUdfSU5GSU5JQkFORF9RSUI9bQpDT05GSUdfSU5GSU5J
QkFORF9RSUJfRENBPXkKQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDA9bQojIENPTkZJR19J
TkZJTklCQU5EX0FNU08xMTAwX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRf
Q1hHQjM9bQojIENPTkZJR19JTkZJTklCQU5EX0NYR0IzX0RFQlVHIGlzIG5vdCBzZXQKQ09O
RklHX0lORklOSUJBTkRfQ1hHQjQ9bQpDT05GSUdfTUxYNF9JTkZJTklCQU5EPW0KQ09ORklH
X01MWDVfSU5GSU5JQkFORD1tCkNPTkZJR19JTkZJTklCQU5EX05FUz1tCiMgQ09ORklHX0lO
RklOSUJBTkRfTkVTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0lORklOSUJBTkRfT0NSRE1B
PW0KIyBDT05GSUdfSU5GSU5JQkFORF9VU05JQyBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklC
QU5EX0lQT0lCPW0KQ09ORklHX0lORklOSUJBTkRfSVBPSUJfQ009eQpDT05GSUdfSU5GSU5J
QkFORF9JUE9JQl9ERUJVRz15CiMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFU
QSBpcyBub3Qgc2V0CkNPTkZJR19JTkZJTklCQU5EX1NSUD1tCkNPTkZJR19JTkZJTklCQU5E
X1NSUFQ9bQpDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KQ09ORklHX0lORklOSUJBTkRfSVNF
UlQ9bQpDT05GSUdfRURBQz15CkNPTkZJR19FREFDX0xFR0FDWV9TWVNGUz15CiMgQ09ORklH
X0VEQUNfREVCVUcgaXMgbm90IHNldApDT05GSUdfRURBQ19ERUNPREVfTUNFPW0KIyBDT05G
SUdfRURBQ19NQ0VfSU5KIGlzIG5vdCBzZXQKQ09ORklHX0VEQUNfTU1fRURBQz1tCkNPTkZJ
R19FREFDX0FNRDY0PW0KIyBDT05GSUdfRURBQ19BTUQ2NF9FUlJPUl9JTkpFQ1RJT04gaXMg
bm90IHNldApDT05GSUdfRURBQ19FNzUyWD1tCkNPTkZJR19FREFDX0k4Mjk3NVg9bQpDT05G
SUdfRURBQ19JMzAwMD1tCkNPTkZJR19FREFDX0kzMjAwPW0KQ09ORklHX0VEQUNfSUUzMTIw
MD1tCkNPTkZJR19FREFDX1gzOD1tCkNPTkZJR19FREFDX0k1NDAwPW0KQ09ORklHX0VEQUNf
STdDT1JFPW0KQ09ORklHX0VEQUNfSTUwMDA9bQpDT05GSUdfRURBQ19JNTEwMD1tCkNPTkZJ
R19FREFDX0k3MzAwPW0KQ09ORklHX0VEQUNfU0JSSURHRT1tCkNPTkZJR19SVENfTElCPXkK
Q09ORklHX1JUQ19DTEFTUz15CkNPTkZJR19SVENfSENUT1NZUz15CkNPTkZJR19SVENfU1lT
VE9IQz15CkNPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCiMgQ09ORklHX1JUQ19E
RUJVRyBpcyBub3Qgc2V0CgojCiMgUlRDIGludGVyZmFjZXMKIwpDT05GSUdfUlRDX0lOVEZf
U1lTRlM9eQpDT05GSUdfUlRDX0lOVEZfUFJPQz15CkNPTkZJR19SVENfSU5URl9ERVY9eQoj
IENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX1RFU1QgaXMgbm90IHNldAoKIwojIEkyQyBSVEMgZHJpdmVycwojCiMgQ09ORklHX1JU
Q19EUlZfQUJCNVpFUzMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0FCWDgwWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRD
X0RSVl9EUzEzNzQgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjMyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9NQVg2OTAwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9JU0wxMjAyMiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfSVNMMTIwNTcgaXMgbm90
IHNldAojIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0YyMTI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTIzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9QQ0Y4NTA2MyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9CUTMySyBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9S
WDg1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRU0zMDI3IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SVjMw
MjlDMiBpcyBub3Qgc2V0CgojCiMgU1BJIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdfUlRDX0RS
Vl9NNDFUOTMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0
CiMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9E
UzEzNDMgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMTM0NyBpcyBub3Qgc2V0CiMg
Q09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NQVg2
OTAyIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMzMjM0
IGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIyBDT05G
SUdfUlRDX0RSVl9SWDQ1ODEgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX01DUDc5NSBp
cyBub3Qgc2V0CgojCiMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKIwpDT05GSUdfUlRDX0RSVl9D
TU9TPXkKIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX0RTMTUxMSBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBz
ZXQKIyBDT05GSUdfUlRDX0RSVl9EUzE2ODVfRkFNSUxZIGlzIG5vdCBzZXQKIyBDT05GSUdf
UlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0RTMjQwNCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAojIENPTkZJR19S
VENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5v
dCBzZXQKIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAojIENPTkZJR19SVENf
RFJWX01TTTYyNDIgaXMgbm90IHNldAojIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qg
c2V0CiMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKIyBDT05GSUdfUlRDX0RS
Vl9WMzAyMCBpcyBub3Qgc2V0CgojCiMgb24tQ1BVIFJUQyBkcml2ZXJzCiMKIyBDT05GSUdf
UlRDX0RSVl9YR0VORSBpcyBub3Qgc2V0CgojCiMgSElEIFNlbnNvciBSVEMgZHJpdmVycwoj
CiMgQ09ORklHX1JUQ19EUlZfSElEX1NFTlNPUl9USU1FIGlzIG5vdCBzZXQKQ09ORklHX0RN
QURFVklDRVM9eQojIENPTkZJR19ETUFERVZJQ0VTX0RFQlVHIGlzIG5vdCBzZXQKCiMKIyBE
TUEgRGV2aWNlcwojCiMgQ09ORklHX0lOVEVMX01JQ19YMTAwX0RNQSBpcyBub3Qgc2V0CkNP
TkZJR19JTlRFTF9JT0FURE1BPW0KQ09ORklHX0RXX0RNQUNfQ09SRT1tCkNPTkZJR19EV19E
TUFDPW0KIyBDT05GSUdfRFdfRE1BQ19QQ0kgaXMgbm90IHNldAojIENPTkZJR19IU1VfRE1B
X1BDSSBpcyBub3Qgc2V0CkNPTkZJR19ETUFfRU5HSU5FPXkKQ09ORklHX0RNQV9BQ1BJPXkK
CiMKIyBETUEgQ2xpZW50cwojCkNPTkZJR19BU1lOQ19UWF9ETUE9eQojIENPTkZJR19ETUFU
RVNUIGlzIG5vdCBzZXQKQ09ORklHX0RNQV9FTkdJTkVfUkFJRD15CkNPTkZJR19EQ0E9bQoj
IENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKQ09ORklHX1VJTz1tCkNPTkZJR19VSU9f
Q0lGPW0KIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKIyBDT05GSUdfVUlP
X0RNRU1fR0VOSVJRIGlzIG5vdCBzZXQKQ09ORklHX1VJT19BRUM9bQpDT05GSUdfVUlPX1NF
UkNPUzM9bQpDT05GSUdfVUlPX1BDSV9HRU5FUklDPW0KQ09ORklHX1VJT19ORVRYPW0KQ09O
RklHX1VJT19NRjYyND1tCkNPTkZJR19WRklPX0lPTU1VX1RZUEUxPW0KQ09ORklHX1ZGSU9f
VklSUUZEPW0KQ09ORklHX1ZGSU89bQpDT05GSUdfVkZJT19QQ0k9bQpDT05GSUdfVkZJT19Q
Q0lfVkdBPXkKQ09ORklHX1ZGSU9fUENJX01NQVA9eQpDT05GSUdfVkZJT19QQ0lfSU5UWD15
CkNPTkZJR19WSVJUX0RSSVZFUlM9eQpDT05GSUdfVklSVElPPW0KCiMKIyBWaXJ0aW8gZHJp
dmVycwojCkNPTkZJR19WSVJUSU9fUENJPW0KQ09ORklHX1ZJUlRJT19QQ0lfTEVHQUNZPXkK
Q09ORklHX1ZJUlRJT19CQUxMT09OPW0KQ09ORklHX1ZJUlRJT19JTlBVVD1tCiMgQ09ORklH
X1ZJUlRJT19NTUlPIGlzIG5vdCBzZXQKCiMKIyBNaWNyb3NvZnQgSHlwZXItViBndWVzdCBz
dXBwb3J0CiMKQ09ORklHX0hZUEVSVj1tCkNPTkZJR19IWVBFUlZfVVRJTFM9bQpDT05GSUdf
SFlQRVJWX0JBTExPT049bQoKIwojIFhlbiBkcml2ZXIgc3VwcG9ydAojCkNPTkZJR19YRU5f
QkFMTE9PTj15CiMgQ09ORklHX1hFTl9CQUxMT09OX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBz
ZXQKQ09ORklHX1hFTl9TQ1JVQl9QQUdFUz15CkNPTkZJR19YRU5fREVWX0VWVENITj1tCkNP
TkZJR19YRU5fQkFDS0VORD15CkNPTkZJR19YRU5GUz1tCkNPTkZJR19YRU5fQ09NUEFUX1hF
TkZTPXkKQ09ORklHX1hFTl9TWVNfSFlQRVJWSVNPUj15CkNPTkZJR19YRU5fWEVOQlVTX0ZS
T05URU5EPXkKQ09ORklHX1hFTl9HTlRERVY9bQpDT05GSUdfWEVOX0dSQU5UX0RFVl9BTExP
Qz1tCkNPTkZJR19TV0lPVExCX1hFTj15CkNPTkZJR19YRU5fVE1FTT1tCkNPTkZJR19YRU5f
UENJREVWX0JBQ0tFTkQ9bQpDT05GSUdfWEVOX1NDU0lfQkFDS0VORD1tCkNPTkZJR19YRU5f
UFJJVkNNRD1tCkNPTkZJR19YRU5fQUNQSV9QUk9DRVNTT1I9bQpDT05GSUdfWEVOX01DRV9M
T0c9eQpDT05GSUdfWEVOX0hBVkVfUFZNTVU9eQpDT05GSUdfWEVOX0VGST15CkNPTkZJR19Y
RU5fQVVUT19YTEFURT15CkNPTkZJR19YRU5fQUNQST15CkNPTkZJR19TVEFHSU5HPXkKIyBD
T05GSUdfU0xJQ09TUyBpcyBub3Qgc2V0CkNPTkZJR19QUklTTTJfVVNCPW0KQ09ORklHX0NP
TUVEST1tCiMgQ09ORklHX0NPTUVESV9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElf
REVGQVVMVF9CVUZfU0laRV9LQj0yMDQ4CkNPTkZJR19DT01FRElfREVGQVVMVF9CVUZfTUFY
U0laRV9LQj0yMDQ4MApDT05GSUdfQ09NRURJX01JU0NfRFJJVkVSUz15CkNPTkZJR19DT01F
RElfQk9ORD1tCkNPTkZJR19DT01FRElfVEVTVD1tCkNPTkZJR19DT01FRElfUEFSUE9SVD1t
CkNPTkZJR19DT01FRElfU0VSSUFMMjAwMj1tCiMgQ09ORklHX0NPTUVESV9JU0FfRFJJVkVS
UyBpcyBub3Qgc2V0CkNPTkZJR19DT01FRElfUENJX0RSSVZFUlM9bQpDT05GSUdfQ09NRURJ
XzgyNTVfUENJPW0KQ09ORklHX0NPTUVESV9BRERJX1dBVENIRE9HPW0KQ09ORklHX0NPTUVE
SV9BRERJX0FQQ0lfMTAzMj1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE1MDA9bQpDT05G
SUdfQ09NRURJX0FERElfQVBDSV8xNTE2PW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMTU2
ND1tCkNPTkZJR19DT01FRElfQURESV9BUENJXzE2WFg9bQpDT05GSUdfQ09NRURJX0FERElf
QVBDSV8yMDMyPW0KQ09ORklHX0NPTUVESV9BRERJX0FQQ0lfMjIwMD1tCkNPTkZJR19DT01F
RElfQURESV9BUENJXzMxMjA9bQpDT05GSUdfQ09NRURJX0FERElfQVBDSV8zNTAxPW0KQ09O
RklHX0NPTUVESV9BRERJX0FQQ0lfM1hYWD1tCkNPTkZJR19DT01FRElfQURMX1BDSTYyMDg9
bQpDT05GSUdfQ09NRURJX0FETF9QQ0k3WDNYPW0KQ09ORklHX0NPTUVESV9BRExfUENJODE2
ND1tCkNPTkZJR19DT01FRElfQURMX1BDSTkxMTE9bQpDT05GSUdfQ09NRURJX0FETF9QQ0k5
MTE4PW0KQ09ORklHX0NPTUVESV9BRFZfUENJMTcxMD1tCkNPTkZJR19DT01FRElfQURWX1BD
STE3MjM9bQpDT05GSUdfQ09NRURJX0FEVl9QQ0kxNzI0PW0KQ09ORklHX0NPTUVESV9BRFZf
UENJX0RJTz1tCkNPTkZJR19DT01FRElfQU1QTENfRElPMjAwX1BDST1tCkNPTkZJR19DT01F
RElfQU1QTENfUEMyMzZfUENJPW0KQ09ORklHX0NPTUVESV9BTVBMQ19QQzI2M19QQ0k9bQpD
T05GSUdfQ09NRURJX0FNUExDX1BDSTIyND1tCkNPTkZJR19DT01FRElfQU1QTENfUENJMjMw
PW0KQ09ORklHX0NPTUVESV9DT05URUNfUENJX0RJTz1tCkNPTkZJR19DT01FRElfREFTMDhf
UENJPW0KQ09ORklHX0NPTUVESV9EVDMwMDA9bQpDT05GSUdfQ09NRURJX0RZTkFfUENJMTBY
WD1tCkNPTkZJR19DT01FRElfR1NDX0hQREk9bQpDT05GSUdfQ09NRURJX01GNlg0PW0KQ09O
RklHX0NPTUVESV9JQ1BfTVVMVEk9bQpDT05GSUdfQ09NRURJX0RBUUJPQVJEMjAwMD1tCkNP
TkZJR19DT01FRElfSlIzX1BDST1tCkNPTkZJR19DT01FRElfS0VfQ09VTlRFUj1tCkNPTkZJ
R19DT01FRElfQ0JfUENJREFTNjQ9bQpDT05GSUdfQ09NRURJX0NCX1BDSURBUz1tCkNPTkZJ
R19DT01FRElfQ0JfUENJRERBPW0KQ09ORklHX0NPTUVESV9DQl9QQ0lNREFTPW0KQ09ORklH
X0NPTUVESV9DQl9QQ0lNRERBPW0KQ09ORklHX0NPTUVESV9NRTQwMDA9bQpDT05GSUdfQ09N
RURJX01FX0RBUT1tCkNPTkZJR19DT01FRElfTklfNjUyNz1tCkNPTkZJR19DT01FRElfTklf
NjVYWD1tCkNPTkZJR19DT01FRElfTklfNjYwWD1tCkNPTkZJR19DT01FRElfTklfNjcwWD1t
CkNPTkZJR19DT01FRElfTklfTEFCUENfUENJPW0KQ09ORklHX0NPTUVESV9OSV9QQ0lESU89
bQpDT05GSUdfQ09NRURJX05JX1BDSU1JTz1tCkNPTkZJR19DT01FRElfUlRENTIwPW0KQ09O
RklHX0NPTUVESV9TNjI2PW0KQ09ORklHX0NPTUVESV9NSVRFPW0KQ09ORklHX0NPTUVESV9O
SV9USU9DTUQ9bQpDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTPW0KQ09ORklHX0NPTUVE
SV9DQl9EQVMxNl9DUz1tCkNPTkZJR19DT01FRElfREFTMDhfQ1M9bQpDT05GSUdfQ09NRURJ
X05JX0RBUV83MDBfQ1M9bQpDT05GSUdfQ09NRURJX05JX0RBUV9ESU8yNF9DUz1tCkNPTkZJ
R19DT01FRElfTklfTEFCUENfQ1M9bQpDT05GSUdfQ09NRURJX05JX01JT19DUz1tCkNPTkZJ
R19DT01FRElfUVVBVEVDSF9EQVFQX0NTPW0KQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUz1t
CkNPTkZJR19DT01FRElfRFQ5ODEyPW0KQ09ORklHX0NPTUVESV9OSV9VU0I2NTAxPW0KQ09O
RklHX0NPTUVESV9VU0JEVVg9bQpDT05GSUdfQ09NRURJX1VTQkRVWEZBU1Q9bQpDT05GSUdf
Q09NRURJX1VTQkRVWFNJR01BPW0KQ09ORklHX0NPTUVESV9WTUs4MFhYPW0KQ09ORklHX0NP
TUVESV84MjU0PW0KQ09ORklHX0NPTUVESV84MjU1PW0KQ09ORklHX0NPTUVESV9LQ09NRURJ
TElCPW0KQ09ORklHX0NPTUVESV9BTVBMQ19ESU8yMDA9bQpDT05GSUdfQ09NRURJX0FNUExD
X1BDMjM2PW0KQ09ORklHX0NPTUVESV9EQVMwOD1tCkNPTkZJR19DT01FRElfTklfTEFCUEM9
bQpDT05GSUdfQ09NRURJX05JX1RJTz1tCiMgQ09ORklHX1BBTkVMIGlzIG5vdCBzZXQKQ09O
RklHX1JUTDgxOTJVPW0KQ09ORklHX1JUTExJQj1tCkNPTkZJR19SVExMSUJfQ1JZUFRPX0ND
TVA9bQpDT05GSUdfUlRMTElCX0NSWVBUT19US0lQPW0KQ09ORklHX1JUTExJQl9DUllQVE9f
V0VQPW0KQ09ORklHX1JUTDgxOTJFPW0KQ09ORklHX1I4NzEyVT1tCkNPTkZJR19SODE4OEVV
PW0KQ09ORklHXzg4RVVfQVBfTU9ERT15CkNPTkZJR19SODcyM0FVPW0KQ09ORklHXzg3MjNB
VV9BUF9NT0RFPXkKQ09ORklHXzg3MjNBVV9CVF9DT0VYSVNUPXkKQ09ORklHX1JUUzUyMDg9
bQojIENPTkZJR19WVDY2NTUgaXMgbm90IHNldApDT05GSUdfVlQ2NjU2PW0KCiMKIyBJSU8g
c3RhZ2luZyBkcml2ZXJzCiMKCiMKIyBBY2NlbGVyb21ldGVycwojCiMgQ09ORklHX0FESVMx
NjIwMSBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwMyBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjIwNCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjIwOSBpcyBub3Qgc2V0CiMg
Q09ORklHX0FESVMxNjIyMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjI0MCBpcyBub3Qg
c2V0CiMgQ09ORklHX0xJUzNMMDJEUSBpcyBub3Qgc2V0CiMgQ09ORklHX1NDQTMwMDAgaXMg
bm90IHNldAoKIwojIEFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlcnMKIwojIENPTkZJR19B
RDc2MDYgaXMgbm90IHNldAojIENPTkZJR19BRDc3ODAgaXMgbm90IHNldAojIENPTkZJR19B
RDc4MTYgaXMgbm90IHNldAojIENPTkZJR19BRDcxOTIgaXMgbm90IHNldAojIENPTkZJR19B
RDcyODAgaXMgbm90IHNldAoKIwojIEFuYWxvZyBkaWdpdGFsIGJpLWRpcmVjdGlvbiBjb252
ZXJ0ZXJzCiMKIyBDT05GSUdfQURUNzMxNiBpcyBub3Qgc2V0CgojCiMgQ2FwYWNpdGFuY2Ug
dG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ3MTUwIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3MTUyIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzQ2IGlzIG5vdCBzZXQKCiMK
IyBEaXJlY3QgRGlnaXRhbCBTeW50aGVzaXMKIwojIENPTkZJR19BRDk4MzIgaXMgbm90IHNl
dAojIENPTkZJR19BRDk4MzQgaXMgbm90IHNldAoKIwojIERpZ2l0YWwgZ3lyb3Njb3BlIHNl
bnNvcnMKIwojIENPTkZJR19BRElTMTYwNjAgaXMgbm90IHNldAoKIwojIE5ldHdvcmsgQW5h
bHl6ZXIsIEltcGVkYW5jZSBDb252ZXJ0ZXJzCiMKIyBDT05GSUdfQUQ1OTMzIGlzIG5vdCBz
ZXQKCiMKIyBMaWdodCBzZW5zb3JzCiMKQ09ORklHX1NFTlNPUlNfSVNMMjkwMTg9bQojIENP
TkZJR19TRU5TT1JTX0lTTDI5MDI4IGlzIG5vdCBzZXQKQ09ORklHX1RTTDI1ODM9bQojIENP
TkZJR19UU0wyeDd4IGlzIG5vdCBzZXQKCiMKIyBNYWduZXRvbWV0ZXIgc2Vuc29ycwojCiMg
Q09ORklHX1NFTlNPUlNfSE1DNTg0M19JMkMgaXMgbm90IHNldAojIENPTkZJR19TRU5TT1JT
X0hNQzU4NDNfU1BJIGlzIG5vdCBzZXQKCiMKIyBBY3RpdmUgZW5lcmd5IG1ldGVyaW5nIElD
CiMKIyBDT05GSUdfQURFNzc1MyBpcyBub3Qgc2V0CiMgQ09ORklHX0FERTc3NTQgaXMgbm90
IHNldAojIENPTkZJR19BREU3NzU4IGlzIG5vdCBzZXQKIyBDT05GSUdfQURFNzc1OSBpcyBu
b3Qgc2V0CiMgQ09ORklHX0FERTc4NTQgaXMgbm90IHNldAoKIwojIFJlc29sdmVyIHRvIGRp
Z2l0YWwgY29udmVydGVycwojCiMgQ09ORklHX0FEMlM5MCBpcyBub3Qgc2V0CiMgQ09ORklH
X0FEMlMxMjAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQyUzEyMTAgaXMgbm90IHNldAoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19QRVJJT0RJQ19SVENfVFJJ
R0dFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TSU1QTEVfRFVNTVkgaXMgbm90IHNldAoj
IENPTkZJR19GQl9TTTdYWCBpcyBub3Qgc2V0CiMgQ09ORklHX0ZCX1NNNzUwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfRkJfWEdJIGlzIG5vdCBzZXQKIyBDT05GSUdfRlQxMDAwIGlzIG5vdCBz
ZXQKCiMKIyBTcGVha3VwIGNvbnNvbGUgc3BlZWNoCiMKQ09ORklHX1NQRUFLVVA9bQpDT05G
SUdfU1BFQUtVUF9TWU5USF9BQ05UU0E9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BUE9MTE89
bQpDT05GSUdfU1BFQUtVUF9TWU5USF9BVURQVFI9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9C
TlM9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9ERUNUTEs9bQpDT05GSUdfU1BFQUtVUF9TWU5U
SF9ERUNFWFQ9bQpDT05GSUdfU1BFQUtVUF9TWU5USF9MVExLPW0KQ09ORklHX1NQRUFLVVBf
U1lOVEhfU09GVD1tCkNPTkZJR19TUEVBS1VQX1NZTlRIX1NQS09VVD1tCkNPTkZJR19TUEVB
S1VQX1NZTlRIX1RYUFJUPW0KQ09ORklHX1NQRUFLVVBfU1lOVEhfRFVNTVk9bQojIENPTkZJ
R19UT1VDSFNDUkVFTl9TWU5BUFRJQ1NfSTJDX1JNSTQgaXMgbm90IHNldApDT05GSUdfU1RB
R0lOR19NRURJQT15CiMgQ09ORklHX0kyQ19CQ00yMDQ4IGlzIG5vdCBzZXQKIyBDT05GSUdf
RFZCX0NYRDIwOTkgaXMgbm90IHNldAojIENPTkZJR19WSURFT19EVDMxNTUgaXMgbm90IHNl
dAojIENPTkZJR19EVkJfTU44ODQ3MiBpcyBub3Qgc2V0CiMgQ09ORklHX0RWQl9NTjg4NDcz
IGlzIG5vdCBzZXQKQ09ORklHX0xJUkNfU1RBR0lORz15CkNPTkZJR19MSVJDX0JUODI5PW0K
Q09ORklHX0xJUkNfSU1PTj1tCiMgQ09ORklHX0xJUkNfUEFSQUxMRUwgaXMgbm90IHNldApD
T05GSUdfTElSQ19TQVNFTT1tCkNPTkZJR19MSVJDX1NFUklBTD1tCkNPTkZJR19MSVJDX1NF
UklBTF9UUkFOU01JVFRFUj15CkNPTkZJR19MSVJDX1NJUj1tCkNPTkZJR19MSVJDX1pJTE9H
PW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfVVNCX1dQQU5fSENEIGlzIG5vdCBzZXQKQ09O
RklHX1dJTUFYX0dETTcyWFg9bQojIENPTkZJR19XSU1BWF9HRE03MlhYX1FPUyBpcyBub3Qg
c2V0CiMgQ09ORklHX1dJTUFYX0dETTcyWFhfS19NT0RFIGlzIG5vdCBzZXQKIyBDT05GSUdf
V0lNQVhfR0RNNzJYWF9XSU1BWDIgaXMgbm90IHNldApDT05GSUdfV0lNQVhfR0RNNzJYWF9V
U0I9eQojIENPTkZJR19XSU1BWF9HRE03MlhYX1NESU8gaXMgbm90IHNldApDT05GSUdfV0lN
QVhfR0RNNzJYWF9VU0JfUE09eQojIENPTkZJR19MVEVfR0RNNzI0WCBpcyBub3Qgc2V0CiMg
Q09ORklHX0ZJUkVXSVJFX1NFUklBTCBpcyBub3Qgc2V0CiMgQ09ORklHX01URF9TUElOQU5E
X01UMjlGIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9GUz1tCkNPTkZJR19MVVNUUkVfT0JE
X01BWF9JT0NUTF9CVUZGRVI9ODE5MgojIENPTkZJR19MVVNUUkVfREVCVUdfRVhQRU5TSVZF
X0NIRUNLIGlzIG5vdCBzZXQKQ09ORklHX0xVU1RSRV9MTElURV9MTE9PUD1tCkNPTkZJR19M
TkVUPW0KQ09ORklHX0xORVRfTUFYX1BBWUxPQUQ9MTA0ODU3NgojIENPTkZJR19MTkVUX1NF
TEZURVNUIGlzIG5vdCBzZXQKQ09ORklHX0xORVRfWFBSVF9JQj1tCiMgQ09ORklHX0RHTkMg
aXMgbm90IHNldAojIENPTkZJR19ER0FQIGlzIG5vdCBzZXQKIyBDT05GSUdfR1NfRlBHQUJP
T1QgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fU0tFSU4gaXMgbm90IHNldAojIENPTkZJ
R19VTklTWVNTUEFSIGlzIG5vdCBzZXQKIyBDT05GSUdfRkJfVEZUIGlzIG5vdCBzZXQKIyBD
T05GSUdfSTJPIGlzIG5vdCBzZXQKQ09ORklHX1g4Nl9QTEFURk9STV9ERVZJQ0VTPXkKQ09O
RklHX0FDRVJfV01JPW0KQ09ORklHX0FDRVJIREY9bQpDT05GSUdfQUxJRU5XQVJFX1dNST1t
CkNPTkZJR19BU1VTX0xBUFRPUD1tCkNPTkZJR19ERUxMX0xBUFRPUD1tCkNPTkZJR19ERUxM
X1dNST1tCkNPTkZJR19ERUxMX1dNSV9BSU89bQpDT05GSUdfREVMTF9TTU84ODAwPW0KQ09O
RklHX0ZVSklUU1VfTEFQVE9QPW0KIyBDT05GSUdfRlVKSVRTVV9MQVBUT1BfREVCVUcgaXMg
bm90IHNldApDT05GSUdfRlVKSVRTVV9UQUJMRVQ9bQpDT05GSUdfQU1JTE9fUkZLSUxMPW0K
Q09ORklHX0hQX0FDQ0VMPW0KQ09ORklHX0hQX1dJUkVMRVNTPW0KQ09ORklHX0hQX1dNST1t
CkNPTkZJR19NU0lfTEFQVE9QPW0KQ09ORklHX1BBTkFTT05JQ19MQVBUT1A9bQpDT05GSUdf
Q09NUEFMX0xBUFRPUD1tCkNPTkZJR19TT05ZX0xBUFRPUD1tCkNPTkZJR19TT05ZUElfQ09N
UEFUPXkKQ09ORklHX0lERUFQQURfTEFQVE9QPW0KQ09ORklHX1RISU5LUEFEX0FDUEk9bQpD
T05GSUdfVEhJTktQQURfQUNQSV9BTFNBX1NVUFBPUlQ9eQojIENPTkZJR19USElOS1BBRF9B
Q1BJX0RFQlVHRkFDSUxJVElFUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RISU5LUEFEX0FDUElf
REVCVUcgaXMgbm90IHNldAojIENPTkZJR19USElOS1BBRF9BQ1BJX1VOU0FGRV9MRURTIGlz
IG5vdCBzZXQKQ09ORklHX1RISU5LUEFEX0FDUElfVklERU89eQpDT05GSUdfVEhJTktQQURf
QUNQSV9IT1RLRVlfUE9MTD15CkNPTkZJR19TRU5TT1JTX0hEQVBTPW0KIyBDT05GSUdfSU5U
RUxfTUVOTE9XIGlzIG5vdCBzZXQKQ09ORklHX0VFRVBDX0xBUFRPUD1tCkNPTkZJR19BU1VT
X1dNST1tCkNPTkZJR19BU1VTX05CX1dNST1tCkNPTkZJR19FRUVQQ19XTUk9bQpDT05GSUdf
QUNQSV9XTUk9bQpDT05GSUdfTVNJX1dNST1tCkNPTkZJR19UT1BTVEFSX0xBUFRPUD1tCkNP
TkZJR19BQ1BJX1RPU0hJQkE9bQpDT05GSUdfVE9TSElCQV9CVF9SRktJTEw9bQpDT05GSUdf
VE9TSElCQV9IQVBTPW0KQ09ORklHX0FDUElfQ01QQz1tCkNPTkZJR19JTlRFTF9JUFM9bQpD
T05GSUdfSUJNX1JUTD1tCkNPTkZJR19TQU1TVU5HX0xBUFRPUD1tCkNPTkZJR19NWE1fV01J
PW0KQ09ORklHX0lOVEVMX09BS1RSQUlMPW0KQ09ORklHX1NBTVNVTkdfUTEwPW0KQ09ORklH
X0FQUExFX0dNVVg9bQpDT05GSUdfSU5URUxfUlNUPW0KQ09ORklHX0lOVEVMX1NNQVJUQ09O
TkVDVD1tCkNPTkZJR19QVlBBTklDPW0KQ09ORklHX0NIUk9NRV9QTEFURk9STVM9eQpDT05G
SUdfQ0hST01FT1NfTEFQVE9QPW0KQ09ORklHX0NIUk9NRU9TX1BTVE9SRT1tCkNPTkZJR19D
TEtERVZfTE9PS1VQPXkKQ09ORklHX0hBVkVfQ0xLX1BSRVBBUkU9eQpDT05GSUdfQ09NTU9O
X0NMSz15CgojCiMgQ29tbW9uIENsb2NrIEZyYW1ld29yawojCiMgQ09ORklHX0NPTU1PTl9D
TEtfU0k1MzUxIGlzIG5vdCBzZXQKIyBDT05GSUdfQ09NTU9OX0NMS19QWEEgaXMgbm90IHNl
dAojIENPTkZJR19DT01NT05fQ0xLX0NEQ0U3MDYgaXMgbm90IHNldAoKIwojIEhhcmR3YXJl
IFNwaW5sb2NrIGRyaXZlcnMKIwoKIwojIENsb2NrIFNvdXJjZSBkcml2ZXJzCiMKQ09ORklH
X0NMS0VWVF9JODI1Mz15CkNPTkZJR19JODI1M19MT0NLPXkKQ09ORklHX0NMS0JMRF9JODI1
Mz15CiMgQ09ORklHX0FUTUVMX1BJVCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX0NN
VCBpcyBub3Qgc2V0CiMgQ09ORklHX1NIX1RJTUVSX01UVTIgaXMgbm90IHNldAojIENPTkZJ
R19TSF9USU1FUl9UTVUgaXMgbm90IHNldAojIENPTkZJR19FTV9USU1FUl9TVEkgaXMgbm90
IHNldAojIENPTkZJR19NQUlMQk9YIGlzIG5vdCBzZXQKQ09ORklHX0lPTU1VX0FQST15CkNP
TkZJR19JT01NVV9TVVBQT1JUPXkKCiMKIyBHZW5lcmljIElPTU1VIFBhZ2V0YWJsZSBTdXBw
b3J0CiMKQ09ORklHX0lPTU1VX0lPVkE9eQpDT05GSUdfQU1EX0lPTU1VPXkKIyBDT05GSUdf
QU1EX0lPTU1VX1NUQVRTIGlzIG5vdCBzZXQKQ09ORklHX0FNRF9JT01NVV9WMj15CkNPTkZJ
R19ETUFSX1RBQkxFPXkKQ09ORklHX0lOVEVMX0lPTU1VPXkKIyBDT05GSUdfSU5URUxfSU9N
TVVfREVGQVVMVF9PTiBpcyBub3Qgc2V0CkNPTkZJR19JTlRFTF9JT01NVV9GTE9QUFlfV0E9
eQpDT05GSUdfSVJRX1JFTUFQPXkKCiMKIyBSZW1vdGVwcm9jIGRyaXZlcnMKIwojIENPTkZJ
R19TVEVfTU9ERU1fUlBST0MgaXMgbm90IHNldAoKIwojIFJwbXNnIGRyaXZlcnMKIwoKIwoj
IFNPQyAoU3lzdGVtIE9uIENoaXApIHNwZWNpZmljIERyaXZlcnMKIwojIENPTkZJR19TT0Nf
VEkgaXMgbm90IHNldApDT05GSUdfUE1fREVWRlJFUT15CgojCiMgREVWRlJFUSBHb3Zlcm5v
cnMKIwpDT05GSUdfREVWRlJFUV9HT1ZfU0lNUExFX09OREVNQU5EPW0KIyBDT05GSUdfREVW
RlJFUV9HT1ZfUEVSRk9STUFOQ0UgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9Q
T1dFUlNBVkUgaXMgbm90IHNldAojIENPTkZJR19ERVZGUkVRX0dPVl9VU0VSU1BBQ0UgaXMg
bm90IHNldAoKIwojIERFVkZSRVEgRHJpdmVycwojCiMgQ09ORklHX1BNX0RFVkZSRVFfRVZF
TlQgaXMgbm90IHNldAojIENPTkZJR19FWFRDT04gaXMgbm90IHNldApDT05GSUdfTUVNT1JZ
PXkKQ09ORklHX0lJTz1tCkNPTkZJR19JSU9fQlVGRkVSPXkKIyBDT05GSUdfSUlPX0JVRkZF
Ul9DQiBpcyBub3Qgc2V0CkNPTkZJR19JSU9fS0ZJRk9fQlVGPW0KQ09ORklHX0lJT19UUklH
R0VSRURfQlVGRkVSPW0KQ09ORklHX0lJT19UUklHR0VSPXkKQ09ORklHX0lJT19DT05TVU1F
UlNfUEVSX1RSSUdHRVI9MgoKIwojIEFjY2VsZXJvbWV0ZXJzCiMKIyBDT05GSUdfQk1BMTgw
IGlzIG5vdCBzZXQKQ09ORklHX0JNQzE1MF9BQ0NFTD1tCkNPTkZJR19ISURfU0VOU09SX0FD
Q0VMXzNEPW0KIyBDT05GSUdfSUlPX1NUX0FDQ0VMXzNBWElTIGlzIG5vdCBzZXQKIyBDT05G
SUdfS1hTRDkgaXMgbm90IHNldAojIENPTkZJR19NTUE4NDUyIGlzIG5vdCBzZXQKQ09ORklH
X0tYQ0pLMTAxMz1tCkNPTkZJR19NTUE5NTUxX0NPUkU9bQpDT05GSUdfTU1BOTU1MT1tCkNP
TkZJR19NTUE5NTUzPW0KCiMKIyBBbmFsb2cgdG8gZGlnaXRhbCBjb252ZXJ0ZXJzCiMKIyBD
T05GSUdfQUQ3MjY2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3MjkxIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3Mjk4IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NDc2IGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3NzkxIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3NzkzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3ODg3IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ3OTIzIGlzIG5vdCBzZXQKIyBD
T05GSUdfQUQ3OTlYIGlzIG5vdCBzZXQKIyBDT05GSUdfTUFYMTAyNyBpcyBub3Qgc2V0CiMg
Q09ORklHX01BWDEzNjMgaXMgbm90IHNldAojIENPTkZJR19NQ1AzMjBYIGlzIG5vdCBzZXQK
IyBDT05GSUdfTUNQMzQyMiBpcyBub3Qgc2V0CiMgQ09ORklHX05BVTc4MDIgaXMgbm90IHNl
dAojIENPTkZJR19USV9BREMwODFDIGlzIG5vdCBzZXQKIyBDT05GSUdfVElfQURDMTI4UzA1
MiBpcyBub3Qgc2V0CkNPTkZJR19WSVBFUkJPQVJEX0FEQz1tCgojCiMgQW1wbGlmaWVycwoj
CiMgQ09ORklHX0FEODM2NiBpcyBub3Qgc2V0CgojCiMgSGlkIFNlbnNvciBJSU8gQ29tbW9u
CiMKQ09ORklHX0hJRF9TRU5TT1JfSUlPX0NPTU1PTj1tCkNPTkZJR19ISURfU0VOU09SX0lJ
T19UUklHR0VSPW0KCiMKIyBTU1AgU2Vuc29yIENvbW1vbgojCiMgQ09ORklHX0lJT19TU1Bf
U0VOU09SSFVCIGlzIG5vdCBzZXQKCiMKIyBEaWdpdGFsIHRvIGFuYWxvZyBjb252ZXJ0ZXJz
CiMKIyBDT05GSUdfQUQ1MDY0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1MzYwIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1MzgwIGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDIxIGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NDQ2IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NDQ5IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQUQ1NTA0IGlzIG5vdCBzZXQKIyBDT05GSUdfQUQ1NjI0Ul9TUEkgaXMg
bm90IHNldAojIENPTkZJR19BRDU2ODYgaXMgbm90IHNldAojIENPTkZJR19BRDU3NTUgaXMg
bm90IHNldAojIENPTkZJR19BRDU3NjQgaXMgbm90IHNldAojIENPTkZJR19BRDU3OTEgaXMg
bm90IHNldAojIENPTkZJR19BRDczMDMgaXMgbm90IHNldAojIENPTkZJR19NQVg1MTcgaXMg
bm90IHNldAojIENPTkZJR19NQ1A0NzI1IGlzIG5vdCBzZXQKIyBDT05GSUdfTUNQNDkyMiBp
cyBub3Qgc2V0CgojCiMgRnJlcXVlbmN5IFN5bnRoZXNpemVycyBERFMvUExMCiMKCiMKIyBD
bG9jayBHZW5lcmF0b3IvRGlzdHJpYnV0aW9uCiMKIyBDT05GSUdfQUQ5NTIzIGlzIG5vdCBz
ZXQKCiMKIyBQaGFzZS1Mb2NrZWQgTG9vcCAoUExMKSBmcmVxdWVuY3kgc3ludGhlc2l6ZXJz
CiMKIyBDT05GSUdfQURGNDM1MCBpcyBub3Qgc2V0CgojCiMgRGlnaXRhbCBneXJvc2NvcGUg
c2Vuc29ycwojCiMgQ09ORklHX0FESVMxNjA4MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMx
NjEzMCBpcyBub3Qgc2V0CiMgQ09ORklHX0FESVMxNjEzNiBpcyBub3Qgc2V0CiMgQ09ORklH
X0FESVMxNjI2MCBpcyBub3Qgc2V0CiMgQ09ORklHX0FEWFJTNDUwIGlzIG5vdCBzZXQKQ09O
RklHX0JNRzE2MD1tCkNPTkZJR19ISURfU0VOU09SX0dZUk9fM0Q9bQojIENPTkZJR19JSU9f
U1RfR1lST18zQVhJUyBpcyBub3Qgc2V0CiMgQ09ORklHX0lURzMyMDAgaXMgbm90IHNldAoK
IwojIEh1bWlkaXR5IHNlbnNvcnMKIwojIENPTkZJR19ESFQxMSBpcyBub3Qgc2V0CiMgQ09O
RklHX1NJNzAwNSBpcyBub3Qgc2V0CiMgQ09ORklHX1NJNzAyMCBpcyBub3Qgc2V0CgojCiMg
SW5lcnRpYWwgbWVhc3VyZW1lbnQgdW5pdHMKIwojIENPTkZJR19BRElTMTY0MDAgaXMgbm90
IHNldAojIENPTkZJR19BRElTMTY0ODAgaXMgbm90IHNldApDT05GSUdfS01YNjE9bQpDT05G
SUdfSU5WX01QVTYwNTBfSUlPPW0KCiMKIyBMaWdodCBzZW5zb3JzCiMKIyBDT05GSUdfQURK
RF9TMzExIGlzIG5vdCBzZXQKIyBDT05GSUdfQUwzMzIwQSBpcyBub3Qgc2V0CiMgQ09ORklH
X0FQRFM5MzAwIGlzIG5vdCBzZXQKIyBDT05GSUdfQ00zMjE4MSBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzIzMiBpcyBub3Qgc2V0CiMgQ09ORklHX0NNMzMyMyBpcyBub3Qgc2V0CiMgQ09O
RklHX0NNMzY2NTEgaXMgbm90IHNldAojIENPTkZJR19HUDJBUDAyMEEwMEYgaXMgbm90IHNl
dAojIENPTkZJR19JU0wyOTEyNSBpcyBub3Qgc2V0CkNPTkZJR19ISURfU0VOU09SX0FMUz1t
CkNPTkZJR19ISURfU0VOU09SX1BST1g9bQpDT05GSUdfSlNBMTIxMj1tCiMgQ09ORklHX0xU
UjUwMSBpcyBub3Qgc2V0CiMgQ09ORklHX1RDUzM0MTQgaXMgbm90IHNldAojIENPTkZJR19U
Q1MzNDcyIGlzIG5vdCBzZXQKQ09ORklHX1NFTlNPUlNfVFNMMjU2Mz1tCiMgQ09ORklHX1RT
TDQ1MzEgaXMgbm90IHNldAojIENPTkZJR19WQ05MNDAwMCBpcyBub3Qgc2V0CgojCiMgTWFn
bmV0b21ldGVyIHNlbnNvcnMKIwpDT05GSUdfQUs4OTc1PW0KIyBDT05GSUdfQUswOTkxMSBp
cyBub3Qgc2V0CiMgQ09ORklHX01BRzMxMTAgaXMgbm90IHNldApDT05GSUdfSElEX1NFTlNP
Ul9NQUdORVRPTUVURVJfM0Q9bQojIENPTkZJR19JSU9fU1RfTUFHTl8zQVhJUyBpcyBub3Qg
c2V0CgojCiMgSW5jbGlub21ldGVyIHNlbnNvcnMKIwpDT05GSUdfSElEX1NFTlNPUl9JTkNM
SU5PTUVURVJfM0Q9bQpDT05GSUdfSElEX1NFTlNPUl9ERVZJQ0VfUk9UQVRJT049bQoKIwoj
IFRyaWdnZXJzIC0gc3RhbmRhbG9uZQojCiMgQ09ORklHX0lJT19JTlRFUlJVUFRfVFJJR0dF
UiBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TWVNGU19UUklHR0VSIGlzIG5vdCBzZXQKCiMK
IyBQcmVzc3VyZSBzZW5zb3JzCiMKQ09ORklHX0JNUDI4MD1tCkNPTkZJR19ISURfU0VOU09S
X1BSRVNTPW0KIyBDT05GSUdfTVBMMTE1IGlzIG5vdCBzZXQKIyBDT05GSUdfTVBMMzExNSBp
cyBub3Qgc2V0CiMgQ09ORklHX01TNTYxMSBpcyBub3Qgc2V0CiMgQ09ORklHX0lJT19TVF9Q
UkVTUyBpcyBub3Qgc2V0CiMgQ09ORklHX1Q1NDAzIGlzIG5vdCBzZXQKCiMKIyBMaWdodG5p
bmcgc2Vuc29ycwojCiMgQ09ORklHX0FTMzkzNSBpcyBub3Qgc2V0CgojCiMgUHJveGltaXR5
IHNlbnNvcnMKIwpDT05GSUdfU1g5NTAwPW0KCiMKIyBUZW1wZXJhdHVyZSBzZW5zb3JzCiMK
IyBDT05GSUdfTUxYOTA2MTQgaXMgbm90IHNldAojIENPTkZJR19UTVAwMDYgaXMgbm90IHNl
dAojIENPTkZJR19OVEIgaXMgbm90IHNldAojIENPTkZJR19WTUVfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUFdNIGlzIG5vdCBzZXQKIyBDT05GSUdfSVBBQ0tfQlVTIGlzIG5vdCBzZXQK
IyBDT05GSUdfUkVTRVRfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZNQyBpcyBu
b3Qgc2V0CgojCiMgUEhZIFN1YnN5c3RlbQojCkNPTkZJR19HRU5FUklDX1BIWT15CiMgQ09O
RklHX0JDTV9LT05BX1VTQjJfUEhZIGlzIG5vdCBzZXQKQ09ORklHX1BPV0VSQ0FQPXkKQ09O
RklHX0lOVEVMX1JBUEw9bQojIENPTkZJR19NQ0IgaXMgbm90IHNldApDT05GSUdfUkFTPXkK
Q09ORklHX1RIVU5ERVJCT0xUPW0KCiMKIyBBbmRyb2lkCiMKIyBDT05GSUdfQU5EUk9JRCBp
cyBub3Qgc2V0CgojCiMgRmlybXdhcmUgRHJpdmVycwojCkNPTkZJR19FREQ9bQojIENPTkZJ
R19FRERfT0ZGIGlzIG5vdCBzZXQKQ09ORklHX0ZJUk1XQVJFX01FTU1BUD15CkNPTkZJR19E
RUxMX1JCVT1tCkNPTkZJR19EQ0RCQVM9bQpDT05GSUdfRE1JSUQ9eQpDT05GSUdfRE1JX1NZ
U0ZTPXkKQ09ORklHX0RNSV9TQ0FOX01BQ0hJTkVfTk9OX0VGSV9GQUxMQkFDSz15CkNPTkZJ
R19JU0NTSV9JQkZUX0ZJTkQ9eQpDT05GSUdfSVNDU0lfSUJGVD1tCiMgQ09ORklHX0dPT0dM
RV9GSVJNV0FSRSBpcyBub3Qgc2V0CgojCiMgRUZJIChFeHRlbnNpYmxlIEZpcm13YXJlIElu
dGVyZmFjZSkgU3VwcG9ydAojCkNPTkZJR19FRklfVkFSUz1tCkNPTkZJR19FRklfVkFSU19Q
U1RPUkU9bQojIENPTkZJR19FRklfVkFSU19QU1RPUkVfREVGQVVMVF9ESVNBQkxFIGlzIG5v
dCBzZXQKQ09ORklHX0VGSV9SVU5USU1FX01BUD15CkNPTkZJR19FRklfUlVOVElNRV9XUkFQ
UEVSUz15CkNPTkZJR19VRUZJX0NQRVI9eQoKIwojIEZpbGUgc3lzdGVtcwojCkNPTkZJR19E
Q0FDSEVfV09SRF9BQ0NFU1M9eQojIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUM19GUyBpcyBub3Qgc2V0CkNPTkZJR19FWFQ0X0ZTPW0KQ09ORklHX0VYVDRfVVNF
X0ZPUl9FWFQyMz15CkNPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CkNPTkZJR19FWFQ0X0ZT
X1NFQ1VSSVRZPXkKIyBDT05GSUdfRVhUNF9FTkNSWVBUSU9OIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19KQkQyPW0KIyBDT05GSUdfSkJEMl9E
RUJVRyBpcyBub3Qgc2V0CkNPTkZJR19GU19NQkNBQ0hFPW0KQ09ORklHX1JFSVNFUkZTX0ZT
PW0KIyBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19SRUlTRVJG
U19QUk9DX0lORk8gaXMgbm90IHNldApDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQpDT05G
SUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZ
PXkKQ09ORklHX0pGU19GUz1tCkNPTkZJR19KRlNfUE9TSVhfQUNMPXkKQ09ORklHX0pGU19T
RUNVUklUWT15CiMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0pGU19T
VEFUSVNUSUNTIGlzIG5vdCBzZXQKQ09ORklHX1hGU19GUz1tCkNPTkZJR19YRlNfUVVPVEE9
eQpDT05GSUdfWEZTX1BPU0lYX0FDTD15CkNPTkZJR19YRlNfUlQ9eQojIENPTkZJR19YRlNf
V0FSTiBpcyBub3Qgc2V0CiMgQ09ORklHX1hGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19H
RlMyX0ZTPW0KQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE09eQpDT05GSUdfT0NGUzJfRlM9
bQpDT05GSUdfT0NGUzJfRlNfTzJDQj1tCkNPTkZJR19PQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xV
U1RFUj1tCkNPTkZJR19PQ0ZTMl9GU19TVEFUUz15CkNPTkZJR19PQ0ZTMl9ERUJVR19NQVNL
TE9HPXkKIyBDT05GSUdfT0NGUzJfREVCVUdfRlMgaXMgbm90IHNldApDT05GSUdfQlRSRlNf
RlM9bQpDT05GSUdfQlRSRlNfRlNfUE9TSVhfQUNMPXkKIyBDT05GSUdfQlRSRlNfRlNfQ0hF
Q0tfSU5URUdSSVRZIGlzIG5vdCBzZXQKIyBDT05GSUdfQlRSRlNfRlNfUlVOX1NBTklUWV9U
RVNUUyBpcyBub3Qgc2V0CiMgQ09ORklHX0JUUkZTX0RFQlVHIGlzIG5vdCBzZXQKIyBDT05G
SUdfQlRSRlNfQVNTRVJUIGlzIG5vdCBzZXQKQ09ORklHX05JTEZTMl9GUz1tCkNPTkZJR19G
MkZTX0ZTPW0KQ09ORklHX0YyRlNfU1RBVF9GUz15CkNPTkZJR19GMkZTX0ZTX1hBVFRSPXkK
Q09ORklHX0YyRlNfRlNfUE9TSVhfQUNMPXkKQ09ORklHX0YyRlNfRlNfU0VDVVJJVFk9eQoj
IENPTkZJR19GMkZTX0NIRUNLX0ZTIGlzIG5vdCBzZXQKIyBDT05GSUdfRjJGU19JT19UUkFD
RSBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTX0RBWCBpcyBub3Qgc2V0CkNPTkZJR19GU19QT1NJ
WF9BQ0w9eQpDT05GSUdfRVhQT1JURlM9eQpDT05GSUdfRklMRV9MT0NLSU5HPXkKQ09ORklH
X0ZTTk9USUZZPXkKQ09ORklHX0ROT1RJRlk9eQpDT05GSUdfSU5PVElGWV9VU0VSPXkKQ09O
RklHX0ZBTk9USUZZPXkKIyBDT05GSUdfRkFOT1RJRllfQUNDRVNTX1BFUk1JU1NJT05TIGlz
IG5vdCBzZXQKQ09ORklHX1FVT1RBPXkKQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNF
PXkKQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkc9eQojIENPTkZJR19RVU9UQV9ERUJVRyBp
cyBub3Qgc2V0CkNPTkZJR19RVU9UQV9UUkVFPW0KQ09ORklHX1FGTVRfVjE9bQpDT05GSUdf
UUZNVF9WMj1tCkNPTkZJR19RVU9UQUNUTD15CkNPTkZJR19RVU9UQUNUTF9DT01QQVQ9eQpD
T05GSUdfQVVUT0ZTNF9GUz1tCkNPTkZJR19GVVNFX0ZTPW0KQ09ORklHX0NVU0U9bQpDT05G
SUdfT1ZFUkxBWV9GUz1tCgojCiMgQ2FjaGVzCiMKQ09ORklHX0ZTQ0FDSEU9bQpDT05GSUdf
RlNDQUNIRV9TVEFUUz15CiMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQK
IyBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBub3Qgc2V0CiMgQ09ORklHX0ZTQ0FDSEVfT0JK
RUNUX0xJU1QgaXMgbm90IHNldApDT05GSUdfQ0FDSEVGSUxFUz1tCiMgQ09ORklHX0NBQ0hF
RklMRVNfREVCVUcgaXMgbm90IHNldAojIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBp
cyBub3Qgc2V0CgojCiMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwojCkNPTkZJR19JU085NjYw
X0ZTPW0KQ09ORklHX0pPTElFVD15CkNPTkZJR19aSVNPRlM9eQpDT05GSUdfVURGX0ZTPW0K
Q09ORklHX1VERl9OTFM9eQoKIwojIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKIwpDT05GSUdf
RkFUX0ZTPW0KQ09ORklHX01TRE9TX0ZTPW0KQ09ORklHX1ZGQVRfRlM9bQpDT05GSUdfRkFU
X0RFRkFVTFRfQ09ERVBBR0U9NDM3CkNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9InV0
ZjgiCkNPTkZJR19OVEZTX0ZTPW0KIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CkNP
TkZJR19OVEZTX1JXPXkKCiMKIyBQc2V1ZG8gZmlsZXN5c3RlbXMKIwpDT05GSUdfUFJPQ19G
Uz15CkNPTkZJR19QUk9DX0tDT1JFPXkKQ09ORklHX1BST0NfVk1DT1JFPXkKQ09ORklHX1BS
T0NfU1lTQ1RMPXkKQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKQ09ORklHX0tFUk5GUz15
CkNPTkZJR19TWVNGUz15CkNPTkZJR19UTVBGUz15CkNPTkZJR19UTVBGU19QT1NJWF9BQ0w9
eQpDT05GSUdfVE1QRlNfWEFUVFI9eQpDT05GSUdfSFVHRVRMQkZTPXkKQ09ORklHX0hVR0VU
TEJfUEFHRT15CkNPTkZJR19DT05GSUdGU19GUz1tCkNPTkZJR19FRklWQVJfRlM9bQpDT05G
SUdfTUlTQ19GSUxFU1lTVEVNUz15CkNPTkZJR19BREZTX0ZTPW0KIyBDT05GSUdfQURGU19G
U19SVyBpcyBub3Qgc2V0CkNPTkZJR19BRkZTX0ZTPW0KQ09ORklHX0VDUllQVF9GUz1tCkNP
TkZJR19FQ1JZUFRfRlNfTUVTU0FHSU5HPXkKQ09ORklHX0hGU19GUz1tCkNPTkZJR19IRlNQ
TFVTX0ZTPW0KIyBDT05GSUdfSEZTUExVU19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApDT05G
SUdfQkVGU19GUz1tCiMgQ09ORklHX0JFRlNfREVCVUcgaXMgbm90IHNldApDT05GSUdfQkZT
X0ZTPW0KQ09ORklHX0VGU19GUz1tCkNPTkZJR19KRkZTMl9GUz1tCkNPTkZJR19KRkZTMl9G
U19ERUJVRz0wCkNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CiMgQ09ORklHX0pGRlMy
X0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKQ09ORklHX0pGRlMyX1NVTU1BUlk9eQpDT05G
SUdfSkZGUzJfRlNfWEFUVFI9eQpDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMPXkKQ09ORklH
X0pGRlMyX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9
eQpDT05GSUdfSkZGUzJfWkxJQj15CkNPTkZJR19KRkZTMl9MWk89eQpDT05GSUdfSkZGUzJf
UlRJTUU9eQojIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiMgQ09ORklHX0pGRlMy
X0NNT0RFX05PTkUgaXMgbm90IHNldApDT05GSUdfSkZGUzJfQ01PREVfUFJJT1JJVFk9eQoj
IENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKIyBDT05GSUdfSkZGUzJfQ01P
REVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKQ09ORklHX1VCSUZTX0ZTPW0KQ09ORklHX1VCSUZT
X0ZTX0FEVkFOQ0VEX0NPTVBSPXkKQ09ORklHX1VCSUZTX0ZTX0xaTz15CkNPTkZJR19VQklG
U19GU19aTElCPXkKQ09ORklHX0xPR0ZTPW0KQ09ORklHX0NSQU1GUz1tCkNPTkZJR19TUVVB
U0hGUz1tCkNPTkZJR19TUVVBU0hGU19GSUxFX0NBQ0hFPXkKIyBDT05GSUdfU1FVQVNIRlNf
RklMRV9ESVJFQ1QgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNfREVDT01QX1NJTkdMRT15
CiMgQ09ORklHX1NRVUFTSEZTX0RFQ09NUF9NVUxUSSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0RFQ09NUF9NVUxUSV9QRVJDUFUgaXMgbm90IHNldApDT05GSUdfU1FVQVNIRlNf
WEFUVFI9eQpDT05GSUdfU1FVQVNIRlNfWkxJQj15CiMgQ09ORklHX1NRVUFTSEZTX0xaNCBp
cyBub3Qgc2V0CkNPTkZJR19TUVVBU0hGU19MWk89eQpDT05GSUdfU1FVQVNIRlNfWFo9eQoj
IENPTkZJR19TUVVBU0hGU180S19ERVZCTEtfU0laRSBpcyBub3Qgc2V0CiMgQ09ORklHX1NR
VUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NB
Q0hFX1NJWkU9MwpDT05GSUdfVlhGU19GUz1tCkNPTkZJR19NSU5JWF9GUz1tCkNPTkZJR19P
TUZTX0ZTPW0KIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CkNPTkZJR19RTlg0RlNfRlM9
bQpDT05GSUdfUU5YNkZTX0ZTPW0KIyBDT05GSUdfUU5YNkZTX0RFQlVHIGlzIG5vdCBzZXQK
Q09ORklHX1JPTUZTX0ZTPW0KIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLIGlzIG5v
dCBzZXQKIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CkNPTkZJR19S
T01GU19CQUNLRURfQllfQk9USD15CkNPTkZJR19ST01GU19PTl9CTE9DSz15CkNPTkZJR19S
T01GU19PTl9NVEQ9eQpDT05GSUdfUFNUT1JFPXkKIyBDT05GSUdfUFNUT1JFX0NPTlNPTEUg
aXMgbm90IHNldAojIENPTkZJR19QU1RPUkVfUE1TRyBpcyBub3Qgc2V0CiMgQ09ORklHX1BT
VE9SRV9GVFJBQ0UgaXMgbm90IHNldApDT05GSUdfUFNUT1JFX1JBTT1tCkNPTkZJR19TWVNW
X0ZTPW0KQ09ORklHX1VGU19GUz1tCiMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0
CiMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CkNPTkZJR19FWE9GU19GUz1tCiMgQ09O
RklHX0VYT0ZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX09SRT1tCkNPTkZJR19ORVRXT1JL
X0ZJTEVTWVNURU1TPXkKQ09ORklHX05GU19GUz1tCkNPTkZJR19ORlNfVjI9bQpDT05GSUdf
TkZTX1YzPW0KQ09ORklHX05GU19WM19BQ0w9eQpDT05GSUdfTkZTX1Y0PW0KQ09ORklHX05G
U19TV0FQPXkKQ09ORklHX05GU19WNF8xPXkKQ09ORklHX05GU19WNF8yPXkKQ09ORklHX1BO
RlNfRklMRV9MQVlPVVQ9bQpDT05GSUdfUE5GU19CTE9DSz1tCkNPTkZJR19QTkZTX09CSkxB
WU9VVD1tCkNPTkZJR19QTkZTX0ZMRVhGSUxFX0xBWU9VVD1tCkNPTkZJR19ORlNfVjRfMV9J
TVBMRU1FTlRBVElPTl9JRF9ET01BSU49Imtlcm5lbC5vcmciCiMgQ09ORklHX05GU19WNF8x
X01JR1JBVElPTiBpcyBub3Qgc2V0CkNPTkZJR19ORlNfVjRfU0VDVVJJVFlfTEFCRUw9eQpD
T05GSUdfTkZTX0ZTQ0FDSEU9eQojIENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMgaXMgbm90
IHNldApDT05GSUdfTkZTX1VTRV9LRVJORUxfRE5TPXkKQ09ORklHX05GU19ERUJVRz15CkNP
TkZJR19ORlNEPW0KQ09ORklHX05GU0RfVjJfQUNMPXkKQ09ORklHX05GU0RfVjM9eQpDT05G
SUdfTkZTRF9WM19BQ0w9eQpDT05GSUdfTkZTRF9WND15CiMgQ09ORklHX05GU0RfUE5GUyBp
cyBub3Qgc2V0CkNPTkZJR19ORlNEX1Y0X1NFQ1VSSVRZX0xBQkVMPXkKIyBDT05GSUdfTkZT
RF9GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldApDT05GSUdfR1JBQ0VfUEVSSU9EPW0KQ09O
RklHX0xPQ0tEPW0KQ09ORklHX0xPQ0tEX1Y0PXkKQ09ORklHX05GU19BQ0xfU1VQUE9SVD1t
CkNPTkZJR19ORlNfQ09NTU9OPXkKQ09ORklHX1NVTlJQQz1tCkNPTkZJR19TVU5SUENfR1NT
PW0KQ09ORklHX1NVTlJQQ19CQUNLQ0hBTk5FTD15CkNPTkZJR19TVU5SUENfU1dBUD15CkNP
TkZJR19SUENTRUNfR1NTX0tSQjU9bQpDT05GSUdfU1VOUlBDX0RFQlVHPXkKQ09ORklHX1NV
TlJQQ19YUFJUX1JETUFfQ0xJRU5UPW0KQ09ORklHX1NVTlJQQ19YUFJUX1JETUFfU0VSVkVS
PW0KQ09ORklHX0NFUEhfRlM9bQpDT05GSUdfQ0VQSF9GU0NBQ0hFPXkKQ09ORklHX0NFUEhf
RlNfUE9TSVhfQUNMPXkKQ09ORklHX0NJRlM9bQojIENPTkZJR19DSUZTX1NUQVRTIGlzIG5v
dCBzZXQKQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKQ09ORklHX0NJRlNfVVBDQUxMPXkK
Q09ORklHX0NJRlNfWEFUVFI9eQpDT05GSUdfQ0lGU19QT1NJWD15CkNPTkZJR19DSUZTX0FD
TD15CkNPTkZJR19DSUZTX0RFQlVHPXkKIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNl
dApDT05GSUdfQ0lGU19ERlNfVVBDQUxMPXkKQ09ORklHX0NJRlNfU01CMj15CkNPTkZJR19D
SUZTX0ZTQ0FDSEU9eQpDT05GSUdfTkNQX0ZTPW0KQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdO
SU5HPXkKQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQpDT05GSUdfTkNQRlNfU1RST05H
PXkKQ09ORklHX05DUEZTX05GU19OUz15CkNPTkZJR19OQ1BGU19PUzJfTlM9eQojIENPTkZJ
R19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CkNPTkZJR19OQ1BGU19OTFM9eQpDT05GSUdf
TkNQRlNfRVhUUkFTPXkKQ09ORklHX0NPREFfRlM9bQpDT05GSUdfQUZTX0ZTPW0KIyBDT05G
SUdfQUZTX0RFQlVHIGlzIG5vdCBzZXQKQ09ORklHX0FGU19GU0NBQ0hFPXkKQ09ORklHXzlQ
X0ZTPW0KQ09ORklHXzlQX0ZTQ0FDSEU9eQpDT05GSUdfOVBfRlNfUE9TSVhfQUNMPXkKQ09O
RklHXzlQX0ZTX1NFQ1VSSVRZPXkKQ09ORklHX05MUz15CkNPTkZJR19OTFNfREVGQVVMVD0i
dXRmOCIKQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzcz
Nz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KQ09ORklHX05MU19DT0RFUEFHRV84NTA9
bQpDT05GSUdfTkxTX0NPREVQQUdFXzg1Mj1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0K
Q09ORklHX05MU19DT0RFUEFHRV84NTc9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2MD1tCkNP
TkZJR19OTFNfQ09ERVBBR0VfODYxPW0KQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQpDT05G
SUdfTkxTX0NPREVQQUdFXzg2Mz1tCkNPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KQ09ORklH
X05MU19DT0RFUEFHRV84NjU9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg2Nj1tCkNPTkZJR19O
TFNfQ09ERVBBR0VfODY5PW0KQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQpDT05GSUdfTkxT
X0NPREVQQUdFXzk1MD1tCkNPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KQ09ORklHX05MU19D
T0RFUEFHRV85NDk9bQpDT05GSUdfTkxTX0NPREVQQUdFXzg3ND1tCkNPTkZJR19OTFNfSVNP
ODg1OV84PW0KQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KQ09ORklHX05MU19DT0RFUEFH
RV8xMjUxPW0KQ09ORklHX05MU19BU0NJST1tCkNPTkZJR19OTFNfSVNPODg1OV8xPW0KQ09O
RklHX05MU19JU084ODU5XzI9bQpDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkNPTkZJR19OTFNf
SVNPODg1OV80PW0KQ09ORklHX05MU19JU084ODU5XzU9bQpDT05GSUdfTkxTX0lTTzg4NTlf
Nj1tCkNPTkZJR19OTFNfSVNPODg1OV83PW0KQ09ORklHX05MU19JU084ODU5Xzk9bQpDT05G
SUdfTkxTX0lTTzg4NTlfMTM9bQpDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQpDT05GSUdfTkxT
X0lTTzg4NTlfMTU9bQpDT05GSUdfTkxTX0tPSThfUj1tCkNPTkZJR19OTFNfS09JOF9VPW0K
Q09ORklHX05MU19NQUNfUk9NQU49bQpDT05GSUdfTkxTX01BQ19DRUxUSUM9bQpDT05GSUdf
TkxTX01BQ19DRU5URVVSTz1tCkNPTkZJR19OTFNfTUFDX0NST0FUSUFOPW0KQ09ORklHX05M
U19NQUNfQ1lSSUxMSUM9bQpDT05GSUdfTkxTX01BQ19HQUVMSUM9bQpDT05GSUdfTkxTX01B
Q19HUkVFSz1tCkNPTkZJR19OTFNfTUFDX0lDRUxBTkQ9bQpDT05GSUdfTkxTX01BQ19JTlVJ
VD1tCkNPTkZJR19OTFNfTUFDX1JPTUFOSUFOPW0KQ09ORklHX05MU19NQUNfVFVSS0lTSD1t
CkNPTkZJR19OTFNfVVRGOD1tCkNPTkZJR19ETE09bQpDT05GSUdfRExNX0RFQlVHPXkKCiMK
IyBLZXJuZWwgaGFja2luZwojCkNPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKCiMK
IyBwcmludGsgYW5kIGRtZXNnIG9wdGlvbnMKIwpDT05GSUdfUFJJTlRLX1RJTUU9eQpDT05G
SUdfTUVTU0FHRV9MT0dMRVZFTF9ERUZBVUxUPTQKQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZ
PXkKQ09ORklHX0RZTkFNSUNfREVCVUc9eQoKIwojIENvbXBpbGUtdGltZSBjaGVja3MgYW5k
IGNvbXBpbGVyIG9wdGlvbnMKIwpDT05GSUdfREVCVUdfSU5GTz15CiMgQ09ORklHX0RFQlVH
X0lORk9fUkVEVUNFRCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0lORk9fU1BMSVQgaXMg
bm90IHNldAojIENPTkZJR19ERUJVR19JTkZPX0RXQVJGNCBpcyBub3Qgc2V0CiMgQ09ORklH
X0dEQl9TQ1JJUFRTIGlzIG5vdCBzZXQKQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9
eQpDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQpDT05GSUdfRlJBTUVfV0FSTj0yMDQ4CkNP
TkZJR19TVFJJUF9BU01fU1lNUz15CiMgQ09ORklHX1JFQURBQkxFX0FTTSBpcyBub3Qgc2V0
CkNPTkZJR19VTlVTRURfU1lNQk9MUz15CiMgQ09ORklHX1BBR0VfT1dORVIgaXMgbm90IHNl
dApDT05GSUdfREVCVUdfRlM9eQojIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQK
IyBDT05GSUdfREVCVUdfU0VDVElPTl9NSVNNQVRDSCBpcyBub3Qgc2V0CkNPTkZJR19BUkNI
X1dBTlRfRlJBTUVfUE9JTlRFUlM9eQojIENPTkZJR19GUkFNRV9QT0lOVEVSIGlzIG5vdCBz
ZXQKIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKQ09ORklH
X01BR0lDX1NZU1JRPXkKQ09ORklHX01BR0lDX1NZU1JRX0RFRkFVTFRfRU5BQkxFPTB4MDFi
NgpDT05GSUdfREVCVUdfS0VSTkVMPXkKCiMKIyBNZW1vcnkgRGVidWdnaW5nCiMKIyBDT05G
SUdfUEFHRV9FWFRFTlNJT04gaXMgbm90IHNldAojIENPTkZJR19ERUJVR19QQUdFQUxMT0Mg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfU0xBQiBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVHX0tNRU1MRUFLPXkKIyBD
T05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19TVEFDS19V
U0FHRSBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVCVUdfVklSVFVBTCBpcyBub3Qgc2V0CkNPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiMg
Q09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyBpcyBub3Qgc2V0CkNPTkZJR19IQVZFX0RFQlVH
X1NUQUNLT1ZFUkZMT1c9eQojIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XIGlzIG5vdCBz
ZXQKQ09ORklHX0hBVkVfQVJDSF9LTUVNQ0hFQ0s9eQpDT05GSUdfSEFWRV9BUkNIX0tBU0FO
PXkKQ09ORklHX0tBU0FOX1NIQURPV19PRkZTRVQ9MHhkZmZmZmMwMDAwMDAwMDAwCiMgQ09O
RklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKCiMKIyBEZWJ1ZyBMb2NrdXBzIGFuZCBIYW5n
cwojCkNPTkZJR19MT0NLVVBfREVURUNUT1I9eQpDT05GSUdfSEFSRExPQ0tVUF9ERVRFQ1RP
Uj15CiMgQ09ORklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKQ09O
RklHX0JPT1RQQVJBTV9IQVJETE9DS1VQX1BBTklDX1ZBTFVFPTAKIyBDT05GSUdfQk9PVFBB
UkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldApDT05GSUdfQk9PVFBBUkFNX1NPRlRM
T0NLVVBfUEFOSUNfVkFMVUU9MApDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CkNPTkZJR19E
RUZBVUxUX0hVTkdfVEFTS19USU1FT1VUPTEyMAojIENPTkZJR19CT09UUEFSQU1fSFVOR19U
QVNLX1BBTklDIGlzIG5vdCBzZXQKQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNf
VkFMVUU9MAojIENPTkZJR19QQU5JQ19PTl9PT1BTIGlzIG5vdCBzZXQKQ09ORklHX1BBTklD
X09OX09PUFNfVkFMVUU9MApDT05GSUdfUEFOSUNfVElNRU9VVD0wCkNPTkZJR19TQ0hFRF9E
RUJVRz15CiMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAojIENPTkZJR19TQ0hFRF9T
VEFDS19FTkRfQ0hFQ0sgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19USU1FS0VFUElORyBp
cyBub3Qgc2V0CkNPTkZJR19USU1FUl9TVEFUUz15CgojCiMgTG9jayBEZWJ1Z2dpbmcgKHNw
aW5sb2NrcywgbXV0ZXhlcywgZXRjLi4uKQojCiMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMg
aXMgbm90IHNldAojIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CiMgQ09ORklH
X0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19XV19NVVRFWF9TTE9X
UEFUSCBpcyBub3Qgc2V0CiMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAoj
IENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9DS19TVEFUIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQIGlzIG5vdCBzZXQKIyBDT05G
SUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKIyBDT05GSUdfTE9D
S19UT1JUVVJFX1RFU1QgaXMgbm90IHNldApDT05GSUdfU1RBQ0tUUkFDRT15CiMgQ09ORklH
X0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CkNP
TkZJR19ERUJVR19MSVNUPXkKIyBDT05GSUdfREVCVUdfUElfTElTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAoKIwojIFJD
VSBEZWJ1Z2dpbmcKIwojIENPTkZJR19QUk9WRV9SQ1UgaXMgbm90IHNldAojIENPTkZJR19T
UEFSU0VfUkNVX1BPSU5URVIgaXMgbm90IHNldAojIENPTkZJR19UT1JUVVJFX1RFU1QgaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKQ09ORklHX1JD
VV9DUFVfU1RBTExfVElNRU9VVD0yMQojIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0lORk8gaXMg
bm90IHNldAojIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAojIENPTkZJR19ERUJVR19C
TE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiMgQ09ORklHX05PVElGSUVSX0VSUk9SX0lOSkVD
VElPTiBpcyBub3Qgc2V0CiMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiMg
Q09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldApDT05GSUdfQVJDSF9IQVNfREVCVUdfU1RS
SUNUX1VTRVJfQ09QWV9DSEVDS1M9eQojIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZ
X0NIRUNLUyBpcyBub3Qgc2V0CkNPTkZJR19VU0VSX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkNP
TkZJR19OT1BfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKQ09ORklH
X0hBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSPXkKQ09ORklHX0hBVkVfRlVOQ1RJT05fR1JB
UEhfRlBfVEVTVD15CkNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQ09ORklHX0hBVkVf
RFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9S
RUNPUkQ9eQpDT05GSUdfSEFWRV9TWVNDQUxMX1RSQUNFUE9JTlRTPXkKQ09ORklHX0hBVkVf
RkVOVFJZPXkKQ09ORklHX0hBVkVfQ19SRUNPUkRNQ09VTlQ9eQpDT05GSUdfVFJBQ0VSX01B
WF9UUkFDRT15CkNPTkZJR19UUkFDRV9DTE9DSz15CkNPTkZJR19SSU5HX0JVRkZFUj15CkNP
TkZJR19FVkVOVF9UUkFDSU5HPXkKQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUj15CkNP
TkZJR19SSU5HX0JVRkZFUl9BTExPV19TV0FQPXkKQ09ORklHX1RSQUNJTkc9eQpDT05GSUdf
R0VORVJJQ19UUkFDRVI9eQpDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKQ09ORklHX0ZUUkFD
RT15CkNPTkZJR19GVU5DVElPTl9UUkFDRVI9eQpDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJB
Q0VSPXkKIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAojIENPTkZJR19TQ0hF
RF9UUkFDRVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX1NZU0NBTExTPXkKQ09ORklHX1RS
QUNFUl9TTkFQU0hPVD15CiMgQ09ORklHX1RSQUNFUl9TTkFQU0hPVF9QRVJfQ1BVX1NXQVAg
aXMgbm90IHNldApDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CiMgQ09ORklHX1BST0ZJ
TEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKIyBDT05GSUdfUFJPRklMRV9BTExf
QlJBTkNIRVMgaXMgbm90IHNldApDT05GSUdfU1RBQ0tfVFJBQ0VSPXkKQ09ORklHX0JMS19E
RVZfSU9fVFJBQ0U9eQpDT05GSUdfS1BST0JFX0VWRU5UPXkKQ09ORklHX1VQUk9CRV9FVkVO
VD15CkNPTkZJR19QUk9CRV9FVkVOVFM9eQpDT05GSUdfRFlOQU1JQ19GVFJBQ0U9eQpDT05G
SUdfRFlOQU1JQ19GVFJBQ0VfV0lUSF9SRUdTPXkKIyBDT05GSUdfRlVOQ1RJT05fUFJPRklM
RVIgaXMgbm90IHNldApDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQojIENPTkZJR19G
VFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKQ09ORklHX01NSU9UUkFDRT15CiMgQ09O
RklHX01NSU9UUkFDRV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfVFJBQ0VQT0lOVF9CRU5D
SE1BUksgaXMgbm90IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9CRU5DSE1BUksgaXMgbm90
IHNldAojIENPTkZJR19SSU5HX0JVRkZFUl9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAojIENP
TkZJR19UUkFDRV9FTlVNX01BUF9GSUxFIGlzIG5vdCBzZXQKCiMKIyBSdW50aW1lIFRlc3Rp
bmcKIwojIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfTElTVF9TT1JU
IGlzIG5vdCBzZXQKIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CiMg
Q09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAojIENPTkZJR19SQlRSRUVf
VEVTVCBpcyBub3Qgc2V0CiMgQ09ORklHX0lOVEVSVkFMX1RSRUVfVEVTVCBpcyBub3Qgc2V0
CiMgQ09ORklHX1BFUkNQVV9URVNUIGlzIG5vdCBzZXQKIyBDT05GSUdfQVRPTUlDNjRfU0VM
RlRFU1QgaXMgbm90IHNldAojIENPTkZJR19BU1lOQ19SQUlENl9URVNUIGlzIG5vdCBzZXQK
IyBDT05GSUdfVEVTVF9IRVhEVU1QIGlzIG5vdCBzZXQKIyBDT05GSUdfVEVTVF9TVFJJTkdf
SEVMUEVSUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfS1NUUlRPWCBpcyBub3Qgc2V0CiMg
Q09ORklHX1RFU1RfUkhBU0hUQUJMRSBpcyBub3Qgc2V0CiMgQ09ORklHX1BST1ZJREVfT0hD
STEzOTRfRE1BX0lOSVQgaXMgbm90IHNldAojIENPTkZJR19ETUFfQVBJX0RFQlVHIGlzIG5v
dCBzZXQKIyBDT05GSUdfVEVTVF9MS00gaXMgbm90IHNldAojIENPTkZJR19URVNUX1VTRVJf
Q09QWSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfQlBGIGlzIG5vdCBzZXQKIyBDT05GSUdf
VEVTVF9GSVJNV0FSRSBpcyBub3Qgc2V0CiMgQ09ORklHX1RFU1RfVURFTEFZIGlzIG5vdCBz
ZXQKQ09ORklHX01FTVRFU1Q9eQojIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKQ09ORklH
X0hBVkVfQVJDSF9LR0RCPXkKIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkNPTkZJR19TVFJJ
Q1RfREVWTUVNPXkKIyBDT05GSUdfWDg2X1ZFUkJPU0VfQk9PVFVQIGlzIG5vdCBzZXQKQ09O
RklHX0VBUkxZX1BSSU5USz15CiMgQ09ORklHX0VBUkxZX1BSSU5US19EQkdQIGlzIG5vdCBz
ZXQKQ09ORklHX0VBUkxZX1BSSU5US19FRkk9eQojIENPTkZJR19YODZfUFREVU1QIGlzIG5v
dCBzZXQKQ09ORklHX0RFQlVHX1JPREFUQT15CiMgQ09ORklHX0RFQlVHX1JPREFUQV9URVNU
IGlzIG5vdCBzZXQKQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWD15CiMgQ09ORklHX0RF
QlVHX05YX1RFU1QgaXMgbm90IHNldApDT05GSUdfRE9VQkxFRkFVTFQ9eQojIENPTkZJR19E
RUJVR19UTEJGTFVTSCBpcyBub3Qgc2V0CiMgQ09ORklHX0lPTU1VX0RFQlVHIGlzIG5vdCBz
ZXQKIyBDT05GSUdfSU9NTVVfU1RSRVNTIGlzIG5vdCBzZXQKQ09ORklHX0hBVkVfTU1JT1RS
QUNFX1NVUFBPUlQ9eQojIENPTkZJR19YODZfREVDT0RFUl9TRUxGVEVTVCBpcyBub3Qgc2V0
CkNPTkZJR19JT19ERUxBWV9UWVBFXzBYODA9MApDT05GSUdfSU9fREVMQVlfVFlQRV8wWEVE
PTEKQ09ORklHX0lPX0RFTEFZX1RZUEVfVURFTEFZPTIKQ09ORklHX0lPX0RFTEFZX1RZUEVf
Tk9ORT0zCkNPTkZJR19JT19ERUxBWV8wWDgwPXkKIyBDT05GSUdfSU9fREVMQVlfMFhFRCBp
cyBub3Qgc2V0CiMgQ09ORklHX0lPX0RFTEFZX1VERUxBWSBpcyBub3Qgc2V0CiMgQ09ORklH
X0lPX0RFTEFZX05PTkUgaXMgbm90IHNldApDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBF
PTAKIyBDT05GSUdfREVCVUdfQk9PVF9QQVJBTVMgaXMgbm90IHNldAojIENPTkZJR19DUEFf
REVCVUcgaXMgbm90IHNldApDT05GSUdfT1BUSU1JWkVfSU5MSU5JTkc9eQojIENPTkZJR19E
RUJVR19OTUlfU0VMRlRFU1QgaXMgbm90IHNldAojIENPTkZJR19YODZfREVCVUdfU1RBVElD
X0NQVV9IQVMgaXMgbm90IHNldAoKIwojIFNlY3VyaXR5IG9wdGlvbnMKIwpDT05GSUdfS0VZ
Uz15CiMgQ09ORklHX1BFUlNJU1RFTlRfS0VZUklOR1MgaXMgbm90IHNldAojIENPTkZJR19C
SUdfS0VZUyBpcyBub3Qgc2V0CiMgQ09ORklHX1RSVVNURURfS0VZUyBpcyBub3Qgc2V0CiMg
Q09ORklHX0VOQ1JZUFRFRF9LRVlTIGlzIG5vdCBzZXQKIyBDT05GSUdfU0VDVVJJVFlfRE1F
U0dfUkVTVFJJQ1QgaXMgbm90IHNldApDT05GSUdfU0VDVVJJVFk9eQpDT05GSUdfU0VDVVJJ
VFlGUz15CkNPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQ09ORklHX1NFQ1VSSVRZX05FVFdP
UktfWEZSTT15CkNPTkZJR19TRUNVUklUWV9QQVRIPXkKIyBDT05GSUdfSU5URUxfVFhUIGlz
IG5vdCBzZXQKQ09ORklHX0xTTV9NTUFQX01JTl9BRERSPTY1NTM2CkNPTkZJR19TRUNVUklU
WV9TRUxJTlVYPXkKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU0gaXMgbm90
IHNldAojIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0RJU0FCTEUgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfU0VMSU5VWF9ERVZFTE9QPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhf
QVZDX1NUQVRTPXkKQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQ0hFQ0tSRVFQUk9UX1ZBTFVF
PTEKIyBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9QT0xJQ1lEQl9WRVJTSU9OX01BWCBpcyBu
b3Qgc2V0CiMgQ09ORklHX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKQ09ORklHX1NFQ1VS
SVRZX1RPTU9ZTz15CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FDQ0VQVF9FTlRSWT0y
MDQ4CkNPTkZJR19TRUNVUklUWV9UT01PWU9fTUFYX0FVRElUX0xPRz0xMDI0CiMgQ09ORklH
X1NFQ1VSSVRZX1RPTU9ZT19PTUlUX1VTRVJTUEFDRV9MT0FERVIgaXMgbm90IHNldApDT05G
SUdfU0VDVVJJVFlfVE9NT1lPX1BPTElDWV9MT0FERVI9Ii9zYmluL3RvbW95by1pbml0IgpD
T05GSUdfU0VDVVJJVFlfVE9NT1lPX0FDVElWQVRJT05fVFJJR0dFUj0iL3NiaW4vaW5pdCIK
Q09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SPXkKQ09ORklHX1NFQ1VSSVRZX0FQUEFSTU9SX0JP
T1RQQVJBTV9WQUxVRT0xCkNPTkZJR19TRUNVUklUWV9BUFBBUk1PUl9IQVNIPXkKQ09ORklH
X1NFQ1VSSVRZX1lBTUE9eQpDT05GSUdfU0VDVVJJVFlfWUFNQV9TVEFDS0VEPXkKQ09ORklH
X0lOVEVHUklUWT15CiMgQ09ORklHX0lOVEVHUklUWV9TSUdOQVRVUkUgaXMgbm90IHNldApD
T05GSUdfSU5URUdSSVRZX0FVRElUPXkKIyBDT05GSUdfSU1BIGlzIG5vdCBzZXQKIyBDT05G
SUdfRVZNIGlzIG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlz
IG5vdCBzZXQKIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAoj
IENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0FQUEFSTU9SIGlzIG5vdCBzZXQKIyBDT05GSUdf
REVGQVVMVF9TRUNVUklUWV9ZQU1BIGlzIG5vdCBzZXQKQ09ORklHX0RFRkFVTFRfU0VDVVJJ
VFlfREFDPXkKQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKQ09ORklHX1hPUl9CTE9DS1M9
bQpDT05GSUdfQVNZTkNfQ09SRT1tCkNPTkZJR19BU1lOQ19NRU1DUFk9bQpDT05GSUdfQVNZ
TkNfWE9SPW0KQ09ORklHX0FTWU5DX1BRPW0KQ09ORklHX0FTWU5DX1JBSUQ2X1JFQ09WPW0K
Q09ORklHX0NSWVBUTz15CgojCiMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiMKQ09ORklHX0NS
WVBUT19BTEdBUEk9eQpDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQpDT05GSUdfQ1JZUFRPX0FF
QUQ9bQpDT05GSUdfQ1JZUFRPX0FFQUQyPXkKQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQpD
T05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9eQpDT05GSUdfQ1JZUFRPX0hBU0g9eQpDT05GSUdf
Q1JZUFRPX0hBU0gyPXkKQ09ORklHX0NSWVBUT19STkc9bQpDT05GSUdfQ1JZUFRPX1JORzI9
eQpDT05GSUdfQ1JZUFRPX1BDT01QPW0KQ09ORklHX0NSWVBUT19QQ09NUDI9eQpDT05GSUdf
Q1JZUFRPX01BTkFHRVI9eQpDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKIyBDT05GSUdfQ1JZ
UFRPX1VTRVIgaXMgbm90IHNldAojIENPTkZJR19DUllQVE9fTUFOQUdFUl9ESVNBQkxFX1RF
U1RTIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCkNPTkZJR19DUllQVE9f
TlVMTD1tCkNPTkZJR19DUllQVE9fUENSWVBUPW0KQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9
eQpDT05GSUdfQ1JZUFRPX0NSWVBURD1tCiMgQ09ORklHX0NSWVBUT19NQ1JZUFREIGlzIG5v
dCBzZXQKQ09ORklHX0NSWVBUT19BVVRIRU5DPW0KQ09ORklHX0NSWVBUT19URVNUPW0KQ09O
RklHX0NSWVBUT19BQkxLX0hFTFBFUj1tCkNPTkZJR19DUllQVE9fR0xVRV9IRUxQRVJfWDg2
PW0KCiMKIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEK
IwpDT05GSUdfQ1JZUFRPX0NDTT1tCkNPTkZJR19DUllQVE9fR0NNPW0KQ09ORklHX0NSWVBU
T19TRVFJVj1tCgojCiMgQmxvY2sgbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NCQz1tCkNPTkZJ
R19DUllQVE9fQ1RSPW0KQ09ORklHX0NSWVBUT19DVFM9bQpDT05GSUdfQ1JZUFRPX0VDQj1t
CkNPTkZJR19DUllQVE9fTFJXPW0KQ09ORklHX0NSWVBUT19QQ0JDPW0KQ09ORklHX0NSWVBU
T19YVFM9bQoKIwojIEhhc2ggbW9kZXMKIwpDT05GSUdfQ1JZUFRPX0NNQUM9bQpDT05GSUdf
Q1JZUFRPX0hNQUM9bQpDT05GSUdfQ1JZUFRPX1hDQkM9bQpDT05GSUdfQ1JZUFRPX1ZNQUM9
bQoKIwojIERpZ2VzdAojCkNPTkZJR19DUllQVE9fQ1JDMzJDPW0KQ09ORklHX0NSWVBUT19D
UkMzMkNfSU5URUw9bQpDT05GSUdfQ1JZUFRPX0NSQzMyPW0KQ09ORklHX0NSWVBUT19DUkMz
Ml9QQ0xNVUw9bQpDT05GSUdfQ1JZUFRPX0NSQ1QxMERJRj15CkNPTkZJR19DUllQVE9fQ1JD
VDEwRElGX1BDTE1VTD1tCkNPTkZJR19DUllQVE9fR0hBU0g9bQpDT05GSUdfQ1JZUFRPX01E
ND1tCkNPTkZJR19DUllQVE9fTUQ1PXkKQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCkNP
TkZJR19DUllQVE9fUk1EMTI4PW0KQ09ORklHX0NSWVBUT19STUQxNjA9bQpDT05GSUdfQ1JZ
UFRPX1JNRDI1Nj1tCkNPTkZJR19DUllQVE9fUk1EMzIwPW0KQ09ORklHX0NSWVBUT19TSEEx
PXkKQ09ORklHX0NSWVBUT19TSEExX1NTU0UzPW0KQ09ORklHX0NSWVBUT19TSEEyNTZfU1NT
RTM9bQpDT05GSUdfQ1JZUFRPX1NIQTUxMl9TU1NFMz1tCiMgQ09ORklHX0NSWVBUT19TSEEx
X01CIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19TSEEyNTY9bQpDT05GSUdfQ1JZUFRPX1NI
QTUxMj1tCkNPTkZJR19DUllQVE9fVEdSMTkyPW0KQ09ORklHX0NSWVBUT19XUDUxMj1tCkNP
TkZJR19DUllQVE9fR0hBU0hfQ0xNVUxfTklfSU5URUw9bQoKIwojIENpcGhlcnMKIwpDT05G
SUdfQ1JZUFRPX0FFUz15CkNPTkZJR19DUllQVE9fQUVTX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQUVTX05JX0lOVEVMPW0KQ09ORklHX0NSWVBUT19BTlVCSVM9bQpDT05GSUdfQ1JZUFRP
X0FSQzQ9bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KQ09ORklHX0NSWVBUT19CTE9XRklT
SF9DT01NT049bQpDT05GSUdfQ1JZUFRPX0JMT1dGSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fQ0FNRUxMSUE9bQpDT05GSUdfQ1JZUFRPX0NBTUVMTElBX1g4Nl82ND1tCkNPTkZJR19D
UllQVE9fQ0FNRUxMSUFfQUVTTklfQVZYX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fQ0FNRUxM
SUFfQUVTTklfQVZYMl9YODZfNjQ9bQpDT05GSUdfQ1JZUFRPX0NBU1RfQ09NTU9OPW0KQ09O
RklHX0NSWVBUT19DQVNUNT1tCkNPTkZJR19DUllQVE9fQ0FTVDVfQVZYX1g4Nl82ND1tCkNP
TkZJR19DUllQVE9fQ0FTVDY9bQpDT05GSUdfQ1JZUFRPX0NBU1Q2X0FWWF9YODZfNjQ9bQpD
T05GSUdfQ1JZUFRPX0RFUz1tCiMgQ09ORklHX0NSWVBUT19ERVMzX0VERV9YODZfNjQgaXMg
bm90IHNldApDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCkNPTkZJR19DUllQVE9fS0hBWkFEPW0K
Q09ORklHX0NSWVBUT19TQUxTQTIwPW0KQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82ND1t
CkNPTkZJR19DUllQVE9fU0VFRD1tCkNPTkZJR19DUllQVE9fU0VSUEVOVD1tCkNPTkZJR19D
UllQVE9fU0VSUEVOVF9TU0UyX1g4Nl82ND1tCkNPTkZJR19DUllQVE9fU0VSUEVOVF9BVlhf
WDg2XzY0PW0KQ09ORklHX0NSWVBUT19TRVJQRU5UX0FWWDJfWDg2XzY0PW0KQ09ORklHX0NS
WVBUT19URUE9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpDT05GSUdfQ1JZUFRPX1RXT0ZJ
U0hfQ09NTU9OPW0KQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82ND1tCkNPTkZJR19DUllQ
VE9fVFdPRklTSF9YODZfNjRfM1dBWT1tCkNPTkZJR19DUllQVE9fVFdPRklTSF9BVlhfWDg2
XzY0PW0KCiMKIyBDb21wcmVzc2lvbgojCkNPTkZJR19DUllQVE9fREVGTEFURT1tCkNPTkZJ
R19DUllQVE9fWkxJQj1tCkNPTkZJR19DUllQVE9fTFpPPXkKQ09ORklHX0NSWVBUT19MWjQ9
bQpDT05GSUdfQ1JZUFRPX0xaNEhDPW0KCiMKIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24K
IwpDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9bQojIENPTkZJR19DUllQVE9fRFJCR19NRU5V
IGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19VU0VSX0FQST1tCkNPTkZJR19DUllQVE9fVVNF
Ul9BUElfSEFTSD1tCkNPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQojIENPTkZJ
R19DUllQVE9fVVNFUl9BUElfUk5HIGlzIG5vdCBzZXQKQ09ORklHX0NSWVBUT19IVz15CkNP
TkZJR19DUllQVE9fREVWX1BBRExPQ0s9bQpDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FF
Uz1tCkNPTkZJR19DUllQVE9fREVWX1BBRExPQ0tfU0hBPW0KQ09ORklHX0NSWVBUT19ERVZf
Q0NQPXkKQ09ORklHX0NSWVBUT19ERVZfQ0NQX0REPW0KQ09ORklHX0NSWVBUT19ERVZfQ0NQ
X0NSWVBUTz1tCkNPTkZJR19DUllQVE9fREVWX1FBVD1tCkNPTkZJR19DUllQVE9fREVWX1FB
VF9ESDg5NXhDQz1tCiMgQ09ORklHX0FTWU1NRVRSSUNfS0VZX1RZUEUgaXMgbm90IHNldApD
T05GSUdfSEFWRV9LVk09eQpDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUD15CkNPTkZJR19IQVZF
X0tWTV9JUlFGRD15CkNPTkZJR19IQVZFX0tWTV9JUlFfUk9VVElORz15CkNPTkZJR19IQVZF
X0tWTV9FVkVOVEZEPXkKQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRT15CkNPTkZJR19L
Vk1fTU1JTz15CkNPTkZJR19LVk1fQVNZTkNfUEY9eQpDT05GSUdfSEFWRV9LVk1fTVNJPXkK
Q09ORklHX0hBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQ9eQpDT05GSUdfS1ZNX1ZGSU89
eQpDT05GSUdfS1ZNX0dFTkVSSUNfRElSVFlMT0dfUkVBRF9QUk9URUNUPXkKQ09ORklHX0tW
TV9DT01QQVQ9eQpDT05GSUdfVklSVFVBTElaQVRJT049eQpDT05GSUdfS1ZNPW0KQ09ORklH
X0tWTV9JTlRFTD1tCkNPTkZJR19LVk1fQU1EPW0KIyBDT05GSUdfS1ZNX01NVV9BVURJVCBp
cyBub3Qgc2V0CkNPTkZJR19LVk1fREVWSUNFX0FTU0lHTk1FTlQ9eQpDT05GSUdfQklOQVJZ
X1BSSU5URj15CgojCiMgTGlicmFyeSByb3V0aW5lcwojCkNPTkZJR19SQUlENl9QUT1tCkNP
TkZJR19CSVRSRVZFUlNFPXkKIyBDT05GSUdfSEFWRV9BUkNIX0JJVFJFVkVSU0UgaXMgbm90
IHNldApDT05GSUdfUkFUSU9OQUw9eQpDT05GSUdfR0VORVJJQ19TVFJOQ1BZX0ZST01fVVNF
Uj15CkNPTkZJR19HRU5FUklDX1NUUk5MRU5fVVNFUj15CkNPTkZJR19HRU5FUklDX05FVF9V
VElMUz15CkNPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUPXkKQ09ORklHX0dFTkVSSUNf
UENJX0lPTUFQPXkKQ09ORklHX0dFTkVSSUNfSU9NQVA9eQpDT05GSUdfR0VORVJJQ19JTz15
CkNPTkZJR19QRVJDUFVfUldTRU09eQpDT05GSUdfQVJDSF9VU0VfQ01QWENIR19MT0NLUkVG
PXkKQ09ORklHX0FSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUj15CkNPTkZJR19DUkNfQ0NJVFQ9
bQpDT05GSUdfQ1JDMTY9bQpDT05GSUdfQ1JDX1QxMERJRj15CkNPTkZJR19DUkNfSVRVX1Q9
bQpDT05GSUdfQ1JDMzI9eQojIENPTkZJR19DUkMzMl9TRUxGVEVTVCBpcyBub3Qgc2V0CkNP
TkZJR19DUkMzMl9TTElDRUJZOD15CiMgQ09ORklHX0NSQzMyX1NMSUNFQlk0IGlzIG5vdCBz
ZXQKIyBDT05GSUdfQ1JDMzJfU0FSV0FURSBpcyBub3Qgc2V0CiMgQ09ORklHX0NSQzMyX0JJ
VCBpcyBub3Qgc2V0CkNPTkZJR19DUkM3PW0KQ09ORklHX0xJQkNSQzMyQz1tCiMgQ09ORklH
X0NSQzggaXMgbm90IHNldAojIENPTkZJR19BVURJVF9BUkNIX0NPTVBBVF9HRU5FUklDIGlz
IG5vdCBzZXQKIyBDT05GSUdfUkFORE9NMzJfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
WkxJQl9JTkZMQVRFPXkKQ09ORklHX1pMSUJfREVGTEFURT15CkNPTkZJR19MWk9fQ09NUFJF
U1M9eQpDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQpDT05GSUdfTFo0X0NPTVBSRVNTPW0KQ09O
RklHX0xaNEhDX0NPTVBSRVNTPW0KQ09ORklHX0xaNF9ERUNPTVBSRVNTPXkKQ09ORklHX1ha
X0RFQz15CkNPTkZJR19YWl9ERUNfWDg2PXkKIyBDT05GSUdfWFpfREVDX1BPV0VSUEMgaXMg
bm90IHNldAojIENPTkZJR19YWl9ERUNfSUE2NCBpcyBub3Qgc2V0CiMgQ09ORklHX1haX0RF
Q19BUk0gaXMgbm90IHNldAojIENPTkZJR19YWl9ERUNfQVJNVEhVTUIgaXMgbm90IHNldAoj
IENPTkZJR19YWl9ERUNfU1BBUkMgaXMgbm90IHNldApDT05GSUdfWFpfREVDX0JDSj15CiMg
Q09ORklHX1haX0RFQ19URVNUIGlzIG5vdCBzZXQKQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15
CkNPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CkNP
TkZJR19ERUNPTVBSRVNTX1haPXkKQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKQ09ORklHX0RF
Q09NUFJFU1NfTFo0PXkKQ09ORklHX0dFTkVSSUNfQUxMT0NBVE9SPXkKQ09ORklHX1JFRURf
U09MT01PTj1tCkNPTkZJR19SRUVEX1NPTE9NT05fRU5DOD15CkNPTkZJR19SRUVEX1NPTE9N
T05fREVDOD15CkNPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpDT05GSUdfQkNIPW0KQ09O
RklHX1RFWFRTRUFSQ0g9eQpDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQpDT05GSUdfVEVYVFNF
QVJDSF9CTT1tCkNPTkZJR19URVhUU0VBUkNIX0ZTTT1tCkNPTkZJR19CVFJFRT15CkNPTkZJ
R19JTlRFUlZBTF9UUkVFPXkKQ09ORklHX0FTU09DSUFUSVZFX0FSUkFZPXkKQ09ORklHX0hB
U19JT01FTT15CkNPTkZJR19IQVNfSU9QT1JUX01BUD15CkNPTkZJR19IQVNfRE1BPXkKQ09O
RklHX0NIRUNLX1NJR05BVFVSRT15CkNPTkZJR19DUFVfUk1BUD15CkNPTkZJR19EUUw9eQpD
T05GSUdfR0xPQj15CiMgQ09ORklHX0dMT0JfU0VMRlRFU1QgaXMgbm90IHNldApDT05GSUdf
TkxBVFRSPXkKQ09ORklHX0FSQ0hfSEFTX0FUT01JQzY0X0RFQ19JRl9QT1NJVElWRT15CkNP
TkZJR19MUlVfQ0FDSEU9bQpDT05GSUdfQVZFUkFHRT15CkNPTkZJR19DT1JESUM9bQojIENP
TkZJR19ERFIgaXMgbm90IHNldApDT05GSUdfT0lEX1JFR0lTVFJZPW0KQ09ORklHX1VDUzJf
U1RSSU5HPXkKQ09ORklHX0ZPTlRfU1VQUE9SVD15CiMgQ09ORklHX0ZPTlRTIGlzIG5vdCBz
ZXQKQ09ORklHX0ZPTlRfOHg4PXkKQ09ORklHX0ZPTlRfOHgxNj15CkNPTkZJR19BUkNIX0hB
U19TR19DSEFJTj15Cg==
--------------020508020507050502090501
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------020508020507050502090501--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 13:03:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 13:03:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbptm-0003zf-7P; Tue, 15 Sep 2015 13:03:50 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbptk-0003za-Gv
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 13:03:49 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	82/B9-16618-33718F55; Tue, 15 Sep 2015 13:03:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-27.messagelabs.com!1442322224!49958853!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31838 invoked from network); 15 Sep 2015 13:03:44 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 13:03:44 -0000
Received: by wicge5 with SMTP id ge5so28087734wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 06:03:44 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=CaSGI8/OuS15sfUqTm2xWpzMfxP9F8PDz397Iv+o9us=;
	b=JMToGjgBi+iRKUPkHtJRxNf0pblhJ7nhmh7FtormpIGuBNfNCkud/A5TYTOui3+NqP
	g+C/NBNWV2j392BWqKsAfVuFhsCXLg+KZoW3wWDLZUTsZP/6ijwHRsKIP5qjNa4ebzCU
	zft0FnmmESIy2s3fPyDByULEZIg5zF+HhsLZKDjTJ1ihY54O2FFIN2gMZ0oNVcOm0O+C
	oHMvFZt9GBai2127BGcGjYlNXKpHFQFO0ZW/FsSHSGT2cVzj6pTvh2krZmOqIFDLsE/v
	58/DQTm2xS0ThxrSUBMYpAqf8qV+xyjZt3cIqfhy7sky80dFZUaKNfRGucPbYq3Dit0d
	eOIg==
X-Gm-Message-State: ALoCoQmBEvIlxMPnBF+8zKXfZ7hEvVgPHcAocHACU3E+xwXqfhrsxM6l96ifInl268Z3El2gyDRV
X-Received: by 10.180.218.103 with SMTP id pf7mr7151771wic.6.1442322223031;
	Tue, 15 Sep 2015 06:03:43 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	ka10sm6242636wjc.30.2015.09.15.06.03.41
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 06:03:42 -0700 (PDT)
To: Ben Chalmers <ben.chalmers@citrix.com>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F8172F.7080300@m2r.biz>
Date: Tue, 15 Sep 2015 15:03:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5107653087097644656=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============5107653087097644656==
Content-Type: multipart/alternative;
 boundary="------------040308020809070900070009"

This is a multi-part message in MIME format.
--------------040308020809070900070009
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 5381
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 13:16, Ben Chalmers ha scritto:
>
> There was a problem with driver uninstall, which Paul fixed in
>
> http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a
>
> Alternatively:
>
> removing xenfilt from UpperFilters of 
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class subkeys
>
> {4D36E96A-E325-11CE-BFC1-08002BE10318}
>
> {4D36E97D-E325-11CE-BFC1-08002BE10318}
>

I found the keys but not xenfilt from UpperFilters in them.

> And setting
>
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start to 3
>
> are frequently good (if somewhat severe) ways of avoiding 7B BSODs 
> when things go wrong.
>
> Ben Chalmers
>

Thanks, this solved the boot problem after drivers uninstall but after 
new pv build install and reboot disk the emulated one only and also 
emulated network card is still present (even if disabled).
I should restore start keys of previous status after install of new 
build for correct pv working=3F

Why is possible remove all drivers related services, registry keys and 
files from driver uninstall=3F

Thanks for any reply and sorry for my bad english.

>
> *From: *Fabio Fantoni
> *Sent: *15 September 2015 12:06
> *To: *Paul Durrant;Joel Noyce-Barnham;win-pv-devel@lists.xenproject.org
> *Subject: *Re: [win-pv-devel] PV Drivers Offline Removal
>
> Il 15/09/2015 10:59, Paul Durrant ha scritto:
>
>     Joel,
>
>       Offline removal should be quite possible. The thing that needs
>     to be cleaned up to make sure the image will reboot are the
>     =E2=80=98unplug=E2=80=99 values that are used early on in boot to request unplug
>     of emulated devices in QEMU. Look under
>     HKLM/system/currentcontrolset/services/xen and you should see a
>     key called =E2=80=98Unplug=E2=80=99. If you delete that key then the next reboot
>     should use emulated devices and so should be fine with no PV drivers.
>
>       Cheers,
>
>       Paul
>
>
> Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
> removed them from control panel, I also executed a bat I posted some 
> months ago here for remove other related things, I tried also to 
> remove the registry key above, with both ide and ahci disk, with 
> xen_platform_pci=3D0 but in all cases gave me always 
> INACCESSIBLE_BOOT_DEVICE blue screen :(
> Someone know other things I can try=3F
>
> First test with uninstall only from control panel game me also a more 
> important problem (here there are also dom0 and domU details): 
> http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html
>
> Thanks for any reply and sorry for my bad english.
>
>
>     *From:*win-pv-devel-bounces@lists.xenproject.org
>     <mailto:win-pv-devel-bounces@lists.xenproject.org>
>     [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of
>     *Joel Noyce-Barnham
>     *Sent:* 14 September 2015 18:21
>     *To:* win-pv-devel@lists.xenproject.org
>     <mailto:win-pv-devel@lists.xenproject.org>
>     *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
>     Hi All,
>
>     We are currently using the GPLPV drivers but are hoping to move to
>     the new Xen WINPV drivers as they are actively developed and have
>     some new features which we are interested in. We currently have a
>     process where VMs can be moved from our Xen hypervisor into EC2.
>     This process relies on the fact that we are able to remove the
>     drivers from an offline image. Previously we have been removing
>     the drivers successfully by converting the disk images to a VHD
>     file, using Dism to remove the drivers
>     (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx)
>     and then importing the resulting VHD into EC2. This works with the
>     GPLPV drivers but with the new WINPV drivers it creates an
>     unbootable image (the import into EC2 fails and the image can also
>     not be booted on the original hypervisor).
>
>     I have found some previous posts on this mailing list
>     (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html)
>     discussing removing the drivers and I am able to successfully
>     remove the drivers from an online image but sadly our process
>     requires that this removal be performed offline.
>
>     I am just wondering if anyone else is using Dism in windows to
>     remove the PV drivers from an offline image=3F Or if anyone else has
>     successfully removed the WINPV drivers from an offline image at
>     all=3F Any pointers anyone can give would be appreciated. The only
>     way we have so far found to make the image boot after removing the
>     drivers with Dism is by manual modification of a large number of
>     registry keys which seems like a far from ideal solution.
>
>     Thanks for any help,
>     Joel
>
>     Zynstra is a private limited company registered in England and
>     Wales (registered number 07864369). Our registered office and
>     Headquarters are at The Innovation Centre, Broad Quay, Bath, BA1
>     1UD. This email, its contents and any attachments are
>     confidential. If you have received this message in error please
>     delete it from your system and advise the sender immediately.
>


--------------040308020809070900070009
Content-Type: text/html; charset=utf-8
Content-Length: 14306
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 13:16, Ben Chalmers ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
      <meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.spelle
	{mso-style-name:spelle;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
      <div class=3D"WordSection1">
        <p>There was a problem with driver uninstall, which Paul fixed
          in</p>
        <p><o:p>=C2=A0</o:p></p>
        <p><a moz-do-not-send=3D"true"
href=3D"http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a">http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a</a></p>
        <p><o:p>=C2=A0</o:p></p>
        <p>Alternatively:</p>
        <p><o:p>=C2=A0</o:p></p>
        <p>removing xenfilt from UpperFilters of
          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
          subkeys
        </p>
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E96A-E325-11CE-BFC1-08002BE10318}<o:p></o:p></span></p>
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E97D-E325-11CE-BFC1-08002BE10318}</span></p>
      </div>
    </blockquote>
    <br>
    I found the keys but not xenfilt from UpperFilters in them.<br>
    <br>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white"><o:p></o:p></span></p>
        <p><o:p>=C2=A0</o:p></p>
        <p>And setting </p>
        <p><o:p>=C2=A0</o:p></p>
        <p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start
          to 3 </p>
        <p><o:p>=C2=A0</o:p></p>
        <p>are frequently good (if somewhat severe) ways of avoiding 7B
          BSODs when things go wrong.</p>
        <p><o:p>=C2=A0</o:p></p>
        <p>Ben Chalmers</p>
      </div>
    </blockquote>
    <br>
    Thanks, this solved the boot problem after drivers uninstall but
    after new pv build install and reboot disk the emulated one only and
    also emulated network card is still present (even if disabled).<br>
    I should restore start keys of previous status after install of new
    build for correct pv working=3F<br>
    <br>
    Why is possible remove all drivers related services, registry keys
    and files from driver uninstall=3F<br>
    <br>
    Thanks for any reply and sorry for my bad english.<br>
    <br>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p><o:p>=C2=A0</o:p></p>
        <p><o:p>=C2=A0</o:p></p>
        <div
          style=3D"mso-element:para-border-div;border:none;border-top:solid
          #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
          <p style=3D"border:none;padding:0cm"><br>
            <b>From: </b>Fabio Fantoni<br>
            <b>Sent: </b>15 September 2015 12:06<br>
            <b>To: </b>Paul Durrant;Joel
            <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Noyce-Barnham;win-pv-devel@lists.xenproject.org">Noyce-Barnham;win-pv-devel@lists.xenproject.org</a><br>
            <b>Subject: </b>Re: [win-pv-devel] PV Drivers Offline
            Removal</p>
        </div>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><span
            style=3D"font-size:12.0pt;font-family:&quot;Times New
            Roman&quot;,serif">Il 15/09/2015 10:59, Paul Durrant ha
            scritto:</span><span
            style=3D"font-size:12.0pt;font-family:&quot;Times New
            Roman&quot;,serif"><o:p></o:p></span></p>
        <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">Joel,</span><span
                style=3D"font-family:&quot;Times New Roman&quot;,serif"><o:p></o:p></span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Offline removal
                should be quite possible. The thing that needs to be
                cleaned up to make sure the image will reboot are the
                =E2=80=98unplug=E2=80=99 values that are used early on in boot to
                request unplug of emulated devices in QEMU. Look under
                HKLM/system/<span class=3D"spelle">currentcontrolset</span>/services/xen
                and you should see a key called =E2=80=98Unplug=E2=80=99. If you delete
                that key then the next reboot should use emulated
                devices and so should be fine with no PV drivers.</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Cheers,</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Paul</span></p>
          </div>
        </blockquote>
        <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt"><br>
            Hi I'm unable to boot windows 10 after new pv drivers
            uninstall, I removed them from control panel, I also
            executed a bat I posted some months ago here for remove
            other related things, I tried also to remove the registry
            key above, with both ide and ahci disk, with
            xen_platform_pci=3D0 but in all cases gave me always
            INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
            Someone know other things I can try=3F<br>
            <br>
            First test with uninstall only from control panel game me
            also a more important problem (here there are also dom0 and
            domU details):
            <a moz-do-not-send=3D"true"
href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html"
              target=3D"_BLANK">
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
            <br>
            Thanks for any reply and sorry for my bad english.<br>
            <br>
            <br>
            <o:p></o:p></span></p>
        <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <div style=3D"border:none;border-left:solid blue
              1.5pt;padding:0cm 0cm 0cm 4.0pt">
              <div>
                <div style=3D"border:none;border-top:solid #B5C4DF
                  1.0pt;padding:3.0pt 0cm 0cm 0cm">
                  <p class=3D"MsoNormal"><b><span
                        style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                        lang=3D"EN-US">From:</span></b><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                      lang=3D"EN-US">
                      <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                      [<a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                      <b>On Behalf Of </b>Joel Noyce-Barnham<br>
                      <b>Sent:</b> 14 September 2015 18:21<br>
                      <b>To:</b> <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                      <b>Subject:</b> [win-pv-devel] PV Drivers Offline
                      Removal</span></p>
                </div>
              </div>
              <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt">=C2=A0</span></p>
              <div id=3D"divtagdefaultwrapper">
                <p style=3D"background:white"><span style=3D"color:black">Hi
                    All,<br>
                    <br>
                    We are currently using the GPLPV drivers but are
                    hoping to move to the new Xen WINPV drivers as they
                    are actively developed and have some new features
                    which we are interested in. We currently have a
                    process where VMs can be moved from our Xen
                    hypervisor into EC2. This process relies on the fact
                    that we are able to remove the drivers from an
                    offline image. Previously we have been removing the
                    drivers successfully by converting the disk images
                    to a VHD file, using Dism to remove the drivers (<a
                      moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"
                      target=3D"_BLANK"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                    and then importing the resulting VHD into EC2. This
                    works with the GPLPV drivers but with the new WINPV
                    drivers it creates an unbootable image (the import
                    into EC2 fails and the image can also not be booted
                    on the original hypervisor).<br>
                    <br>
                    I have found some previous posts on this mailing
                    list (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"
                      target=3D"_BLANK">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                    discussing removing the drivers and I am able to
                    successfully remove the drivers from an online image
                    but sadly our process requires that this removal be
                    performed offline.<br>
                    <br>
                    I am just wondering if anyone else is using Dism in
                    windows to remove the PV drivers from an offline
                    image=3F Or if anyone else has successfully removed
                    the WINPV drivers from an offline image at all=3F Any
                    pointers anyone can give would be appreciated. The
                    only way we have so far found to make the image boot
                    after removing the drivers with Dism is by manual
                    modification of a large number of registry keys
                    which seems like a far from ideal solution.<br>
                    <br>
                    Thanks for any help,<br>
                    Joel</span></p>
              </div>
              <p style=3D"line-height:10.0pt"><span
                  style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,serif;color:gray">Zynstra
                  is a private limited company registered in England and
                  Wales (registered number 07864369). Our registered
                  office and Headquarters are at The Innovation Centre,
                  Broad Quay, Bath, BA1 1UD. This email, its contents
                  and any attachments are confidential. If you have
                  received this message in error please delete it from
                  your system and advise the sender immediately.
                </span></p>
            </div>
          </div>
        </blockquote>
        <p class=3D"MsoNormal"
style=3D"mso-margin-top-alt:0cm;margin-right:36.0pt;margin-bottom:5.0pt;margin-left:36.0pt"><span
            style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><o:p>=C2=A0</o:p></p>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------040308020809070900070009--


--===============5107653087097644656==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5107653087097644656==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 13:03:51 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 13:03:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbptm-0003zf-7P; Tue, 15 Sep 2015 13:03:50 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbptk-0003za-Gv
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 13:03:49 +0000
Received: from [193.109.254.147] by server-6.bemta-14.messagelabs.com id
	82/B9-16618-33718F55; Tue, 15 Sep 2015 13:03:47 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-12.tower-27.messagelabs.com!1442322224!49958853!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 31838 invoked from network); 15 Sep 2015 13:03:44 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-12.tower-27.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 13:03:44 -0000
Received: by wicge5 with SMTP id ge5so28087734wic.0
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 06:03:44 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=CaSGI8/OuS15sfUqTm2xWpzMfxP9F8PDz397Iv+o9us=;
	b=JMToGjgBi+iRKUPkHtJRxNf0pblhJ7nhmh7FtormpIGuBNfNCkud/A5TYTOui3+NqP
	g+C/NBNWV2j392BWqKsAfVuFhsCXLg+KZoW3wWDLZUTsZP/6ijwHRsKIP5qjNa4ebzCU
	zft0FnmmESIy2s3fPyDByULEZIg5zF+HhsLZKDjTJ1ihY54O2FFIN2gMZ0oNVcOm0O+C
	oHMvFZt9GBai2127BGcGjYlNXKpHFQFO0ZW/FsSHSGT2cVzj6pTvh2krZmOqIFDLsE/v
	58/DQTm2xS0ThxrSUBMYpAqf8qV+xyjZt3cIqfhy7sky80dFZUaKNfRGucPbYq3Dit0d
	eOIg==
X-Gm-Message-State: ALoCoQmBEvIlxMPnBF+8zKXfZ7hEvVgPHcAocHACU3E+xwXqfhrsxM6l96ifInl268Z3El2gyDRV
X-Received: by 10.180.218.103 with SMTP id pf7mr7151771wic.6.1442322223031;
	Tue, 15 Sep 2015 06:03:43 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	ka10sm6242636wjc.30.2015.09.15.06.03.41
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 06:03:42 -0700 (PDT)
To: Ben Chalmers <ben.chalmers@citrix.com>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F8172F.7080300@m2r.biz>
Date: Tue, 15 Sep 2015 15:03:43 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============5107653087097644656=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--===============5107653087097644656==
Content-Type: multipart/alternative;
 boundary="------------040308020809070900070009"

This is a multi-part message in MIME format.
--------------040308020809070900070009
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 5381
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 13:16, Ben Chalmers ha scritto:
>
> There was a problem with driver uninstall, which Paul fixed in
>
> http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a
>
> Alternatively:
>
> removing xenfilt from UpperFilters of 
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class subkeys
>
> {4D36E96A-E325-11CE-BFC1-08002BE10318}
>
> {4D36E97D-E325-11CE-BFC1-08002BE10318}
>

I found the keys but not xenfilt from UpperFilters in them.

> And setting
>
> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start to 3
>
> are frequently good (if somewhat severe) ways of avoiding 7B BSODs 
> when things go wrong.
>
> Ben Chalmers
>

Thanks, this solved the boot problem after drivers uninstall but after 
new pv build install and reboot disk the emulated one only and also 
emulated network card is still present (even if disabled).
I should restore start keys of previous status after install of new 
build for correct pv working=3F

Why is possible remove all drivers related services, registry keys and 
files from driver uninstall=3F

Thanks for any reply and sorry for my bad english.

>
> *From: *Fabio Fantoni
> *Sent: *15 September 2015 12:06
> *To: *Paul Durrant;Joel Noyce-Barnham;win-pv-devel@lists.xenproject.org
> *Subject: *Re: [win-pv-devel] PV Drivers Offline Removal
>
> Il 15/09/2015 10:59, Paul Durrant ha scritto:
>
>     Joel,
>
>       Offline removal should be quite possible. The thing that needs
>     to be cleaned up to make sure the image will reboot are the
>     =E2=80=98unplug=E2=80=99 values that are used early on in boot to request unplug
>     of emulated devices in QEMU. Look under
>     HKLM/system/currentcontrolset/services/xen and you should see a
>     key called =E2=80=98Unplug=E2=80=99. If you delete that key then the next reboot
>     should use emulated devices and so should be fine with no PV drivers.
>
>       Cheers,
>
>       Paul
>
>
> Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
> removed them from control panel, I also executed a bat I posted some 
> months ago here for remove other related things, I tried also to 
> remove the registry key above, with both ide and ahci disk, with 
> xen_platform_pci=3D0 but in all cases gave me always 
> INACCESSIBLE_BOOT_DEVICE blue screen :(
> Someone know other things I can try=3F
>
> First test with uninstall only from control panel game me also a more 
> important problem (here there are also dom0 and domU details): 
> http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html
>
> Thanks for any reply and sorry for my bad english.
>
>
>     *From:*win-pv-devel-bounces@lists.xenproject.org
>     <mailto:win-pv-devel-bounces@lists.xenproject.org>
>     [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of
>     *Joel Noyce-Barnham
>     *Sent:* 14 September 2015 18:21
>     *To:* win-pv-devel@lists.xenproject.org
>     <mailto:win-pv-devel@lists.xenproject.org>
>     *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
>     Hi All,
>
>     We are currently using the GPLPV drivers but are hoping to move to
>     the new Xen WINPV drivers as they are actively developed and have
>     some new features which we are interested in. We currently have a
>     process where VMs can be moved from our Xen hypervisor into EC2.
>     This process relies on the fact that we are able to remove the
>     drivers from an offline image. Previously we have been removing
>     the drivers successfully by converting the disk images to a VHD
>     file, using Dism to remove the drivers
>     (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx)
>     and then importing the resulting VHD into EC2. This works with the
>     GPLPV drivers but with the new WINPV drivers it creates an
>     unbootable image (the import into EC2 fails and the image can also
>     not be booted on the original hypervisor).
>
>     I have found some previous posts on this mailing list
>     (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html)
>     discussing removing the drivers and I am able to successfully
>     remove the drivers from an online image but sadly our process
>     requires that this removal be performed offline.
>
>     I am just wondering if anyone else is using Dism in windows to
>     remove the PV drivers from an offline image=3F Or if anyone else has
>     successfully removed the WINPV drivers from an offline image at
>     all=3F Any pointers anyone can give would be appreciated. The only
>     way we have so far found to make the image boot after removing the
>     drivers with Dism is by manual modification of a large number of
>     registry keys which seems like a far from ideal solution.
>
>     Thanks for any help,
>     Joel
>
>     Zynstra is a private limited company registered in England and
>     Wales (registered number 07864369). Our registered office and
>     Headquarters are at The Innovation Centre, Broad Quay, Bath, BA1
>     1UD. This email, its contents and any attachments are
>     confidential. If you have received this message in error please
>     delete it from your system and advise the sender immediately.
>


--------------040308020809070900070009
Content-Type: text/html; charset=utf-8
Content-Length: 14306
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 13:16, Ben Chalmers ha
      scritto:<br>
    </div>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
      <meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered
        medium)">
      <style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.spelle
	{mso-style-name:spelle;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
      <div class=3D"WordSection1">
        <p>There was a problem with driver uninstall, which Paul fixed
          in</p>
        <p><o:p>=C2=A0</o:p></p>
        <p><a moz-do-not-send=3D"true"
href=3D"http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a">http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a</a></p>
        <p><o:p>=C2=A0</o:p></p>
        <p>Alternatively:</p>
        <p><o:p>=C2=A0</o:p></p>
        <p>removing xenfilt from UpperFilters of
          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
          subkeys
        </p>
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E96A-E325-11CE-BFC1-08002BE10318}<o:p></o:p></span></p>
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E97D-E325-11CE-BFC1-08002BE10318}</span></p>
      </div>
    </blockquote>
    <br>
    I found the keys but not xenfilt from UpperFilters in them.<br>
    <br>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white"><o:p></o:p></span></p>
        <p><o:p>=C2=A0</o:p></p>
        <p>And setting </p>
        <p><o:p>=C2=A0</o:p></p>
        <p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start
          to 3 </p>
        <p><o:p>=C2=A0</o:p></p>
        <p>are frequently good (if somewhat severe) ways of avoiding 7B
          BSODs when things go wrong.</p>
        <p><o:p>=C2=A0</o:p></p>
        <p>Ben Chalmers</p>
      </div>
    </blockquote>
    <br>
    Thanks, this solved the boot problem after drivers uninstall but
    after new pv build install and reboot disk the emulated one only and
    also emulated network card is still present (even if disabled).<br>
    I should restore start keys of previous status after install of new
    build for correct pv working=3F<br>
    <br>
    Why is possible remove all drivers related services, registry keys
    and files from driver uninstall=3F<br>
    <br>
    Thanks for any reply and sorry for my bad english.<br>
    <br>
    <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
      type=3D"cite">
      <div class=3D"WordSection1">
        <p><o:p>=C2=A0</o:p></p>
        <p><o:p>=C2=A0</o:p></p>
        <div
          style=3D"mso-element:para-border-div;border:none;border-top:solid
          #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
          <p style=3D"border:none;padding:0cm"><br>
            <b>From: </b>Fabio Fantoni<br>
            <b>Sent: </b>15 September 2015 12:06<br>
            <b>To: </b>Paul Durrant;Joel
            <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Noyce-Barnham;win-pv-devel@lists.xenproject.org">Noyce-Barnham;win-pv-devel@lists.xenproject.org</a><br>
            <b>Subject: </b>Re: [win-pv-devel] PV Drivers Offline
            Removal</p>
        </div>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><span
            style=3D"font-size:12.0pt;font-family:&quot;Times New
            Roman&quot;,serif">Il 15/09/2015 10:59, Paul Durrant ha
            scritto:</span><span
            style=3D"font-size:12.0pt;font-family:&quot;Times New
            Roman&quot;,serif"><o:p></o:p></span></p>
        <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">Joel,</span><span
                style=3D"font-family:&quot;Times New Roman&quot;,serif"><o:p></o:p></span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Offline removal
                should be quite possible. The thing that needs to be
                cleaned up to make sure the image will reboot are the
                =E2=80=98unplug=E2=80=99 values that are used early on in boot to
                request unplug of emulated devices in QEMU. Look under
                HKLM/system/<span class=3D"spelle">currentcontrolset</span>/services/xen
                and you should see a key called =E2=80=98Unplug=E2=80=99. If you delete
                that key then the next reboot should use emulated
                devices and so should be fine with no PV drivers.</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Cheers,</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Paul</span></p>
          </div>
        </blockquote>
        <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt"><br>
            Hi I'm unable to boot windows 10 after new pv drivers
            uninstall, I removed them from control panel, I also
            executed a bat I posted some months ago here for remove
            other related things, I tried also to remove the registry
            key above, with both ide and ahci disk, with
            xen_platform_pci=3D0 but in all cases gave me always
            INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
            Someone know other things I can try=3F<br>
            <br>
            First test with uninstall only from control panel game me
            also a more important problem (here there are also dom0 and
            domU details):
            <a moz-do-not-send=3D"true"
href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html"
              target=3D"_BLANK">
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
            <br>
            Thanks for any reply and sorry for my bad english.<br>
            <br>
            <br>
            <o:p></o:p></span></p>
        <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
          <div>
            <p class=3D"MsoNormal"><span
                style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
            <div style=3D"border:none;border-left:solid blue
              1.5pt;padding:0cm 0cm 0cm 4.0pt">
              <div>
                <div style=3D"border:none;border-top:solid #B5C4DF
                  1.0pt;padding:3.0pt 0cm 0cm 0cm">
                  <p class=3D"MsoNormal"><b><span
                        style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                        lang=3D"EN-US">From:</span></b><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                      lang=3D"EN-US">
                      <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                      [<a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                      <b>On Behalf Of </b>Joel Noyce-Barnham<br>
                      <b>Sent:</b> 14 September 2015 18:21<br>
                      <b>To:</b> <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                      <b>Subject:</b> [win-pv-devel] PV Drivers Offline
                      Removal</span></p>
                </div>
              </div>
              <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt">=C2=A0</span></p>
              <div id=3D"divtagdefaultwrapper">
                <p style=3D"background:white"><span style=3D"color:black">Hi
                    All,<br>
                    <br>
                    We are currently using the GPLPV drivers but are
                    hoping to move to the new Xen WINPV drivers as they
                    are actively developed and have some new features
                    which we are interested in. We currently have a
                    process where VMs can be moved from our Xen
                    hypervisor into EC2. This process relies on the fact
                    that we are able to remove the drivers from an
                    offline image. Previously we have been removing the
                    drivers successfully by converting the disk images
                    to a VHD file, using Dism to remove the drivers (<a
                      moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"
                      target=3D"_BLANK"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                    and then importing the resulting VHD into EC2. This
                    works with the GPLPV drivers but with the new WINPV
                    drivers it creates an unbootable image (the import
                    into EC2 fails and the image can also not be booted
                    on the original hypervisor).<br>
                    <br>
                    I have found some previous posts on this mailing
                    list (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"
                      target=3D"_BLANK">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                    discussing removing the drivers and I am able to
                    successfully remove the drivers from an online image
                    but sadly our process requires that this removal be
                    performed offline.<br>
                    <br>
                    I am just wondering if anyone else is using Dism in
                    windows to remove the PV drivers from an offline
                    image=3F Or if anyone else has successfully removed
                    the WINPV drivers from an offline image at all=3F Any
                    pointers anyone can give would be appreciated. The
                    only way we have so far found to make the image boot
                    after removing the drivers with Dism is by manual
                    modification of a large number of registry keys
                    which seems like a far from ideal solution.<br>
                    <br>
                    Thanks for any help,<br>
                    Joel</span></p>
              </div>
              <p style=3D"line-height:10.0pt"><span
                  style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,serif;color:gray">Zynstra
                  is a private limited company registered in England and
                  Wales (registered number 07864369). Our registered
                  office and Headquarters are at The Innovation Centre,
                  Broad Quay, Bath, BA1 1UD. This email, its contents
                  and any attachments are confidential. If you have
                  received this message in error please delete it from
                  your system and advise the sender immediately.
                </span></p>
            </div>
          </div>
        </blockquote>
        <p class=3D"MsoNormal"
style=3D"mso-margin-top-alt:0cm;margin-right:36.0pt;margin-bottom:5.0pt;margin-left:36.0pt"><span
            style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></p>
        <p class=3D"MsoNormal"><o:p>=C2=A0</o:p></p>
        <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
            Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------040308020809070900070009--


--===============5107653087097644656==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============5107653087097644656==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 13:19:21 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 13:19:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbq8m-0006Sg-IY; Tue, 15 Sep 2015 13:19:20 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbq8l-0006Sb-Aa
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 13:19:19 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	5B/68-06179-6DA18F55; Tue, 15 Sep 2015 13:19:18 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-206.messagelabs.com!1442323156!19544330!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6130 invoked from network); 15 Sep 2015 13:19:16 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 13:19:16 -0000
Received: by wiclk2 with SMTP id lk2so27035969wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 06:19:16 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=w1S2If8DF735/z3/6aNOyZysyeA5W2R4infCemyMas0=;
	b=c9tMawfUp8OqF2+9dCHEEIsp9rB+C181vM5WRrrSXFQeqqsWaEO2tSsdS5XJlxcSxZ
	ZzfiH9yKOQ3q3P3iBpAfnHyMViDS+mtHJZA9BLbHJpJiq+zS63mLr+CBVMYSqCkAhXuY
	FmEAL0z6Zgn+ds1octzKcv1vX6d79MgDFb8HNvkVC6I35gwAh/xC99t+YKmNEwQEMEBf
	ouYRdB9SqgeU6Hcl15/pHQnxhwEWa9h00h2Jd+NXlRHpJgtlF39gwZXgC81LgwrX82Re
	vrY7M8PoTo3pLj2CuGSQU2wP6P2qoxFHOaNhIjkBFM5f4+gPfdO4JCiZYKKM4ofGkl7D
	koZw==
X-Gm-Message-State: ALoCoQkV2a3bjz/bYUHOozvL6CLyQziSw2qbfMDziUgY4rmQVOdIjcV+HeztnvHBqEFixBh83s4n
X-Received: by 10.180.187.141 with SMTP id fs13mr7578512wic.13.1442323156104; 
	Tue, 15 Sep 2015 06:19:16 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lz10sm21043767wjb.48.2015.09.15.06.19.13
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 06:19:15 -0700 (PDT)
To: Ben Chalmers <ben.chalmers@citrix.com>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
	<55F8172F.7080300@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F81AD2.1060802@m2r.biz>
Date: Tue, 15 Sep 2015 15:19:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F8172F.7080300@m2r.biz>
Content-Type: multipart/mixed; boundary="------------050505080603030902010907"
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------050505080603030902010907
Content-Type: multipart/alternative;
 boundary="------------000805000808010901020804"


--------------000805000808010901020804
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 5931
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 15:03, Fabio Fantoni ha scritto:
> Il 15/09/2015 13:16, Ben Chalmers ha scritto:
>>
>> There was a problem with driver uninstall, which Paul fixed in
>>
>> http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a
>>
>> Alternatively:
>>
>> removing xenfilt from UpperFilters of 
>> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class subkeys
>>
>> {4D36E96A-E325-11CE-BFC1-08002BE10318}
>>
>> {4D36E97D-E325-11CE-BFC1-08002BE10318}
>>
>
> I found the keys but not xenfilt from UpperFilters in them.
>
>> And setting
>>
>> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start to 3
>>
>> are frequently good (if somewhat severe) ways of avoiding 7B BSODs 
>> when things go wrong.
>>
>> Ben Chalmers
>>
>
> Thanks, this solved the boot problem after drivers uninstall but after 
> new pv build install and reboot disk the emulated one only and also 
> emulated network card is still present (even if disabled).

This was with hdtype=3D"ide", with ahci instead network seems ok with pv 
only and disks show both emulated and pv devices (see attachment), this 
is probably related on what Stefano Stabellini told about unplug support 
missed for ahci disks for xen in upstream qemu.
I can't take qemu's trace because is recently not working for unknow reason.

> I should restore start keys of previous status after install of new 
> build for correct pv working=3F
>
> Why is possible remove all drivers related services, registry keys and 
> files from driver uninstall=3F
>
> Thanks for any reply and sorry for my bad english.
>
>>
>> *From: *Fabio Fantoni
>> *Sent: *15 September 2015 12:06
>> *To: *Paul Durrant;Joel Noyce-Barnham;win-pv-devel@lists.xenproject.org
>> *Subject: *Re: [win-pv-devel] PV Drivers Offline Removal
>>
>> Il 15/09/2015 10:59, Paul Durrant ha scritto:
>>
>>     Joel,
>>
>>       Offline removal should be quite possible. The thing that needs
>>     to be cleaned up to make sure the image will reboot are the
>>     =E2=80=98unplug=E2=80=99 values that are used early on in boot to request unplug
>>     of emulated devices in QEMU. Look under
>>     HKLM/system/currentcontrolset/services/xen and you should see a
>>     key called =E2=80=98Unplug=E2=80=99. If you delete that key then the next reboot
>>     should use emulated devices and so should be fine with no PV drivers.
>>
>>       Cheers,
>>
>>       Paul
>>
>>
>> Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
>> removed them from control panel, I also executed a bat I posted some 
>> months ago here for remove other related things, I tried also to 
>> remove the registry key above, with both ide and ahci disk, with 
>> xen_platform_pci=3D0 but in all cases gave me always 
>> INACCESSIBLE_BOOT_DEVICE blue screen :(
>> Someone know other things I can try=3F
>>
>> First test with uninstall only from control panel game me also a more 
>> important problem (here there are also dom0 and domU details): 
>> http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html
>>
>> Thanks for any reply and sorry for my bad english.
>>
>>
>>     *From:*win-pv-devel-bounces@lists.xenproject.org
>>     <mailto:win-pv-devel-bounces@lists.xenproject.org>
>>     [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of
>>     *Joel Noyce-Barnham
>>     *Sent:* 14 September 2015 18:21
>>     *To:* win-pv-devel@lists.xenproject.org
>>     <mailto:win-pv-devel@lists.xenproject.org>
>>     *Subject:* [win-pv-devel] PV Drivers Offline Removal
>>
>>     Hi All,
>>
>>     We are currently using the GPLPV drivers but are hoping to move
>>     to the new Xen WINPV drivers as they are actively developed and
>>     have some new features which we are interested in. We currently
>>     have a process where VMs can be moved from our Xen hypervisor
>>     into EC2. This process relies on the fact that we are able to
>>     remove the drivers from an offline image. Previously we have been
>>     removing the drivers successfully by converting the disk images
>>     to a VHD file, using Dism to remove the drivers
>>     (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx)
>>     and then importing the resulting VHD into EC2. This works with
>>     the GPLPV drivers but with the new WINPV drivers it creates an
>>     unbootable image (the import into EC2 fails and the image can
>>     also not be booted on the original hypervisor).
>>
>>     I have found some previous posts on this mailing list
>>     (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html)
>>     discussing removing the drivers and I am able to successfully
>>     remove the drivers from an online image but sadly our process
>>     requires that this removal be performed offline.
>>
>>     I am just wondering if anyone else is using Dism in windows to
>>     remove the PV drivers from an offline image=3F Or if anyone else
>>     has successfully removed the WINPV drivers from an offline image
>>     at all=3F Any pointers anyone can give would be appreciated. The
>>     only way we have so far found to make the image boot after
>>     removing the drivers with Dism is by manual modification of a
>>     large number of registry keys which seems like a far from ideal
>>     solution.
>>
>>     Thanks for any help,
>>     Joel
>>
>>     Zynstra is a private limited company registered in England and
>>     Wales (registered number 07864369). Our registered office and
>>     Headquarters are at The Innovation Centre, Broad Quay, Bath, BA1
>>     1UD. This email, its contents and any attachments are
>>     confidential. If you have received this message in error please
>>     delete it from your system and advise the sender immediately.
>>
>


--------------000805000808010901020804
Content-Type: text/html; charset=utf-8
Content-Length: 15481
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 15:03, Fabio Fantoni ha
      scritto:<br>
    </div>
    <blockquote cite=3D"mid:55F8172F.7080300@m2r.biz" type=3D"cite">
      <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
      <div class=3D"moz-cite-prefix">Il 15/09/2015 13:16, Ben Chalmers ha
        scritto:<br>
      </div>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <meta http-equiv=3D"Content-Type" content=3D"text/html;
          charset=3Dutf-8">
        <meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered
          medium)">
        <style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.spelle
	{mso-style-name:spelle;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
        <div class=3D"WordSection1">
          <p>There was a problem with driver uninstall, which Paul fixed
            in</p>
          <p><o:p>=C2=A0</o:p></p>
          <p><a moz-do-not-send=3D"true"
href=3D"http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a">http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a</a></p>
          <p><o:p>=C2=A0</o:p></p>
          <p>Alternatively:</p>
          <p><o:p>=C2=A0</o:p></p>
          <p>removing xenfilt from UpperFilters of
            HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
            subkeys </p>
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E96A-E325-11CE-BFC1-08002BE10318}<o:p></o:p></span></p>
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E97D-E325-11CE-BFC1-08002BE10318}</span></p>
        </div>
      </blockquote>
      <br>
      I found the keys but not xenfilt from UpperFilters in them.<br>
      <br>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <div class=3D"WordSection1">
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white"><o:p></o:p></span></p>
          <p><o:p>=C2=A0</o:p></p>
          <p>And setting </p>
          <p><o:p>=C2=A0</o:p></p>
          <p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start

            to 3 </p>
          <p><o:p>=C2=A0</o:p></p>
          <p>are frequently good (if somewhat severe) ways of avoiding
            7B BSODs when things go wrong.</p>
          <p><o:p>=C2=A0</o:p></p>
          <p>Ben Chalmers</p>
        </div>
      </blockquote>
      <br>
      Thanks, this solved the boot problem after drivers uninstall but
      after new pv build install and reboot disk the emulated one only
      and also emulated network card is still present (even if
      disabled).<br>
    </blockquote>
    <br>
    This was with hdtype=3D"ide", with ahci instead network seems ok with
    pv only and disks show both emulated and pv devices (see
    attachment), this is probably related on what Stefano Stabellini
    told about unplug support missed for ahci disks for xen in upstream
    qemu.<br>
    I can't take qemu's trace because is recently not working for unknow
    reason.<br>
    <br>
    <blockquote cite=3D"mid:55F8172F.7080300@m2r.biz" type=3D"cite"> I
      should restore start keys of previous status after install of new
      build for correct pv working=3F<br>
      <br>
      Why is possible remove all drivers related services, registry keys
      and files from driver uninstall=3F<br>
      <br>
      Thanks for any reply and sorry for my bad english.<br>
      <br>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <div class=3D"WordSection1">
          <p><o:p>=C2=A0</o:p></p>
          <p><o:p>=C2=A0</o:p></p>
          <div
            style=3D"mso-element:para-border-div;border:none;border-top:solid
            #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
            <p style=3D"border:none;padding:0cm"><br>
              <b>From: </b>Fabio Fantoni<br>
              <b>Sent: </b>15 September 2015 12:06<br>
              <b>To: </b>Paul Durrant;Joel <a moz-do-not-send=3D"true"
                class=3D"moz-txt-link-abbreviated"
                href=3D"mailto:Noyce-Barnham;win-pv-devel@lists.xenproject.org">Noyce-Barnham;win-pv-devel@lists.xenproject.org</a><br>
              <b>Subject: </b>Re: [win-pv-devel] PV Drivers Offline
              Removal</p>
          </div>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><span
              style=3D"font-size:12.0pt;font-family:&quot;Times New
              Roman&quot;,serif">Il 15/09/2015 10:59, Paul Durrant ha
              scritto:</span><span
              style=3D"font-size:12.0pt;font-family:&quot;Times New
              Roman&quot;,serif"><o:p></o:p></span></p>
          <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
            <div>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">Joel,</span><span
                  style=3D"font-family:&quot;Times New Roman&quot;,serif"><o:p></o:p></span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Offline
                  removal should be quite possible. The thing that needs
                  to be cleaned up to make sure the image will reboot
                  are the =E2=80=98unplug=E2=80=99 values that are used early on in boot
                  to request unplug of emulated devices in QEMU. Look
                  under HKLM/system/<span class=3D"spelle">currentcontrolset</span>/services/xen

                  and you should see a key called =E2=80=98Unplug=E2=80=99. If you
                  delete that key then the next reboot should use
                  emulated devices and so should be fine with no PV
                  drivers.</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Cheers,</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Paul</span></p>
            </div>
          </blockquote>
          <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt"><br>
              Hi I'm unable to boot windows 10 after new pv drivers
              uninstall, I removed them from control panel, I also
              executed a bat I posted some months ago here for remove
              other related things, I tried also to remove the registry
              key above, with both ide and ahci disk, with
              xen_platform_pci=3D0 but in all cases gave me always
              INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
              Someone know other things I can try=3F<br>
              <br>
              First test with uninstall only from control panel game me
              also a more important problem (here there are also dom0
              and domU details): <a moz-do-not-send=3D"true"
href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html"
                target=3D"_BLANK">
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
              <br>
              Thanks for any reply and sorry for my bad english.<br>
              <br>
              <br>
              <o:p></o:p></span></p>
          <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
            <div>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <div style=3D"border:none;border-left:solid blue
                1.5pt;padding:0cm 0cm 0cm 4.0pt">
                <div>
                  <div style=3D"border:none;border-top:solid #B5C4DF
                    1.0pt;padding:3.0pt 0cm 0cm 0cm">
                    <p class=3D"MsoNormal"><b><span
                          style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                          lang=3D"EN-US">From:</span></b><span
                        style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                        lang=3D"EN-US"> <a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                        [<a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                        <b>On Behalf Of </b>Joel Noyce-Barnham<br>
                        <b>Sent:</b> 14 September 2015 18:21<br>
                        <b>To:</b> <a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                        <b>Subject:</b> [win-pv-devel] PV Drivers
                        Offline Removal</span></p>
                  </div>
                </div>
                <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt">=C2=A0</span></p>
                <div id=3D"divtagdefaultwrapper">
                  <p style=3D"background:white"><span style=3D"color:black">Hi

                      All,<br>
                      <br>
                      We are currently using the GPLPV drivers but are
                      hoping to move to the new Xen WINPV drivers as
                      they are actively developed and have some new
                      features which we are interested in. We currently
                      have a process where VMs can be moved from our Xen
                      hypervisor into EC2. This process relies on the
                      fact that we are able to remove the drivers from
                      an offline image. Previously we have been removing
                      the drivers successfully by converting the disk
                      images to a VHD file, using Dism to remove the
                      drivers (<a moz-do-not-send=3D"true"
                        class=3D"moz-txt-link-freetext"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
                      and then importing the resulting VHD into EC2.
                      This works with the GPLPV drivers but with the new
                      WINPV drivers it creates an unbootable image (the
                      import into EC2 fails and the image can also not
                      be booted on the original hypervisor).<br>
                      <br>
                      I have found some previous posts on this mailing
                      list (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"
                        target=3D"_BLANK">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                      discussing removing the drivers and I am able to
                      successfully remove the drivers from an online
                      image but sadly our process requires that this
                      removal be performed offline.<br>
                      <br>
                      I am just wondering if anyone else is using Dism
                      in windows to remove the PV drivers from an
                      offline image=3F Or if anyone else has successfully
                      removed the WINPV drivers from an offline image at
                      all=3F Any pointers anyone can give would be
                      appreciated. The only way we have so far found to
                      make the image boot after removing the drivers
                      with Dism is by manual modification of a large
                      number of registry keys which seems like a far
                      from ideal solution.<br>
                      <br>
                      Thanks for any help,<br>
                      Joel</span></p>
                </div>
                <p style=3D"line-height:10.0pt"><span
                    style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,serif;color:gray">Zynstra

                    is a private limited company registered in England
                    and Wales (registered number 07864369). Our
                    registered office and Headquarters are at The
                    Innovation Centre, Broad Quay, Bath, BA1 1UD. This
                    email, its contents and any attachments are
                    confidential. If you have received this message in
                    error please delete it from your system and advise
                    the sender immediately. </span></p>
              </div>
            </div>
          </blockquote>
          <p class=3D"MsoNormal"
style=3D"mso-margin-top-alt:0cm;margin-right:36.0pt;margin-bottom:5.0pt;margin-left:36.0pt"><span
              style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><o:p>=C2=A0</o:p></p>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>

--------------000805000808010901020804--

--------------050505080603030902010907
Content-Type: image/jpeg;
 name="devices.JPG"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="devices.JPG"

/9j/4AAQSkZJRgABAQEAYABgAAD/4RCaRXhpZgAATU0AKgAAAAgABAE7AAIAAAANAAAISodp
AAQAAAABAAAIWJydAAEAAAAaAAAQeOocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVtaWxpbyBC
cnVuYQAAAAHqHAAHAAAIDAAACGoAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAbQBpAGwAaQBvACAAQgByAHUA
bgBhAAAA/+EKZWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2lu
PSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1s
bnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6
YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxu
czpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLz48cmRmOkRlc2NyaXB0
aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJm
MWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmNy
ZWF0b3I+PHJkZjpTZXEgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy
LXJkZi1zeW50YXgtbnMjIj48cmRmOmxpPkVtaWxpbyBCcnVuYTwvcmRmOmxpPjwvcmRmOlNl
cT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94Onht
cG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwR
GBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQq
HBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/
wAARCAI8Aw0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA
tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2Jy
ggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqD
hIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi
4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLR
ChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2rw54c0OfwrpUs+jafJJJZQs7vaoW
YlASSSOTWl/wi/h//oBab/4Bx/4UeFv+RP0b/rwg/wDRa03WvEthodvvnLXEu8ILe32tJkjP
IJAUcdWIHvXRVq1PaS957s56VKn7OPurZEH9k+Ec4+waJn08mL/CrP8Awi/h/wD6AWm/+Acf
+FefWHi83gaC4N9YOsBj+z3LxmJk8nsUZl3b8cZzzjHUD0vVNSh0rR7rUpwzw2sLTMIxksFG
cD3rL21Xq395apU27cqKv/CL+H/+gFpv/gHH/hR/wi/h/wD6AWm/+Acf+FZ1hrV7BqTx+IdY
0KIraNdS2EOUntV4OWZpDvQDILbE5APtVkeM9GNsJg97kyCJYf7OuPOYlSwIi8veVwCdwXHB
54qva1P5n94eyp/yr7ix/wAIv4f/AOgFpv8A4Bx/4Uf8Iv4f/wCgFpv/AIBx/wCFZSeNba5v
NUtVEth/Z13BAZ7qxnZJA5jGMbVwxMm0cns+CtacXinR5tXOmx3Lm48xoQxt5BE0ijLIspXY
zjByoYkYPHBpe1qfzP7x+yp/yr7h3/CL+H/+gFpv/gHH/hR/wi/h/wD6AWm/+Acf+FVtP8a+
H9UDG0vzsW2a682aCSJGiXG51d1AYLkA4JweDir+la3ZazHI9i048ogOlxbSQOMjIO2RVOD2
OMHB54NP2tT+Z/eHsqf8q+4h/wCEX8P/APQC03/wDj/wo/4Rfw//ANALTf8AwDj/AMKw7vx5
aS6ksOmXca2gsLu6lu57OYqvlbNroPl81PmblCc44NbDeKtKia7WWaYixhM1zMtnMYYwqBz+
8Clc7SDtyW56Uva1LX5n94exp/yr7iT/AIRfw/8A9ALTf/AOP/Cj/hF/D/8A0AtN/wDAOP8A
wqCLxloU1rdXCXrLFaojyF4JELK5wjICoMgYjClMhjwM0f8ACY6MbQTiW6Y+d5HkLYzm4Em3
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
XetaZ9gktItHluEl5cIRcLiOA5kbcXJG3nA6mei7lpK/lp/wTqJPF2mWLXz3uoLKkN1Hbxw2
1lM0wd4lkWMKu5pWKtu+ReF6j5Sae/jTQk022vVuZpkundIYbezmlnZkOHHkohkBUjDAqNp4
OKy5vAtx9rk1Cx1VLe/F/FfW7y2vmRxstqLZkdQ6lwV3HhlIJHpy9fBd/aPZ6hpmswR6zC1w
Z7m4sTLBOJ2V5AIlkUqAyJt+ckBcHdkmqf8AX3L/AIP/AASVsn/X9bBbePrFPFOp6RqsvkGG
9gtrUrbSn/WwxsvmtgrGWdyq7tucYGSDW/o2oLqNrNIl1FdeVdTQF4oGiClJGUphiSSuMFhw
SMgAHFY134Ma8j1YSagA+p6haXzFYOIzB5Pygbud3k9e27vjnV0DRv7Ds7mDz/P8+9uLvds2
7fNlaTb1PTdjPfHQUaW/ry/4I3t/Xn/wDUooopCCiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjn/wBW
P99f/QhXgHi3/l0/4H/7LXv8/wDqx/vr/wChCvAPFv8Ay6f8D/8AZa9HLP8Ae4fP8medmf8A
uk/l+aNvSP8AmBf9fVn/AOjEr2ivF9I/5gX/AF9Wf/oxK9oriq/xJerO2l/Dj6IKKKKzNBok
RpGRXUuuNyg8jPTNOrCvY3m8Sw/2WjR3EQBupiPkMZ6KR/EfT0/lu0AYOu+JIbG6j0uzlV9T
uOEiX5mX3x6/XgdT71/DPixdUvrnSNQikt9Uszh1kjKiUf3h2PvjjuOOnHtDJ8MPG1xq2po1
/o+rPtfUpBumtGJ6Mf7v+e2Ku6A//CbatqF1pep+JINMSdtl0L5UikOc4jTZnaOnXpQM7/Ut
StdI06a+1CXyreEZdgpY9cABQCWJJAAAJJIA5qrpGsXGptILnRNR0vaAyG98oiUeo8uR8duG
2nnp1xF4r0q51jQGg08xfa4Z4bqBZjhHeKVZArHBIBK4yASM5rE10654p8J3dp/wjd5YOrwP
La3d1b/6ZGsqtLCpjkYYZFZfnKg7gDwSQL+v8/6/UDtKqy6laQ6pbadLLtu7qOSWGPaTuVCo
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
260fT3Gs6Whv4obeYxWtyZFljcOXdWMan5EikYjbzgDvTPEPxIOj6XLfWWmpfLHPcIsIlmMs
sUOBJIqxQyYAfK5fag+XLDdXRQ+FNHhls5TavNLZ28ltDLcXEkziN8blLOxLdMZbJAyBgE1V
uvAXhy8060sZrGUW1pA9tGkd3NGWifG9HKuDIpwCQ5OTz1pve/8AX9f5vsiI6JJ/1/X6IytS
+Ic2n/23MNG8200yW3t43WdmluJ51iMaiNI2IX99yRuPHyqxOBveF9buNf0b7Xe6bNp06ytG
0Mkcyg46MvmxxuVII5KLzkc4yXT+FdFubPULWeyDw6kyNdKZG+dkVURgc5UgImCuCCoPXmre
l6Xb6RZ/ZrSS7kj3Fs3d5Lcvk/7crM2PbOKNB9EXKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARP8AfNNp
7gljgGm7T6H8qskSlFG0+h/KjafQ/lQAwkLJlzgY4JprvhhtOOn41Ng+howfQ0hFccYy54c5
6cdafvO4DPO4gj2qXB9DRg+hoGQF2EandyRnnFPcZKc45/pUmD6GjB9DQIiDMzAbsfe7e9N8
xjt5C5APJxmp8H0NGD6GgCBmyGBfoR0xgc04sRvO7gYA6VLg+howfQ0AMjJZMk55606lwfQ0
YPoaAEopcH0NGD6GgBKKXB9DRg+hoASilwfQ0YPoaAEopcH0NGD6GgBKKXB9DRg+hoAloooq
SwooooAKKKKACiiigAooooAKKKKAI5/9WP8AfX/0IV4B4t/5dP8Agf8A7LXv8/8Aqx/vr/6E
K8A8W/8ALp/wP/2WvRyz/e4fP8medmf+6T+X5o29I/5gX/X1Z/8AoxK9orxfSP8AmBf9fVn/
AOjEr2iuKr/El6s7aX8OPogooorM0Ko1CA6k1ixZJwodQwwHH+ye+KtVk3unz6lq0JnCxWlq
RIjKfnkf69VA/X+WtQBzXiTxRPo2qWenwWW83nyi5d8LEdrnpjn7nTI61d8OP5ltdMZPNYzj
c5PU+Wlc/wCOPAt74j1S31XT9T8iW0iAW1aP5ZSN/wDFu+Unf6HpWh4Cjmi0W5juUZJUudrq
45B8qPINV0F1NLxJqk+j6THdWyxs7XlrbkSAkbZbiONjwRzhzj3x1qta+N9AvdZGl215I10Z
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
rawWzxIC8S20zOSSMgmVcdekYx1OeVt/E+oXWqWerWOsDXdah0DUp308W6j7FcjyD9n2oAww
wxscl+OvNe1UUvT+tLf8H/Iadmv66nkOn+MdWfQYJLzxlpjWU9/FHdavZXtvdPp8TRO2JD9n
jji3OiKN8bY3sCc4x6B4M1C61Pw6J7u6+3KJ5Ut73ywn2qFXISXCgL8wAOVAVuoABFb1FO+r
/rt/XzJ6L+u/9fIKKKKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKAI5/8AVj/fX/0IV4B4t/5dP+B/+y17/P8A6sf76/8AoQrwDxb/AMun/A//AGWvRyz/
AHuHz/JnnZn/ALpP5fmjb0j/AJgX/X1Z/wDoxK9orxfSP+YF/wBfVn/6MSvaK4qv8SXqztpf
w4+iCiiiszQzbnU3sdUSK9jVLSfCwzg9H/ut6Z7f5xpVRfTEm1UXtzI0vlgCGJh8sZ7t7n3q
9QBy82o6ndN59reG3iflI1iVsL2ySCc8H/DO0OwanqdgDc3V758MXMkckKrlec4Kjg8Z7jqO
m1mgvfhJ4E1G9lu7zw5bSTzMXkfe43E9Tw1JafCHwHY3cVza+G7ZJomDo29ztI6Hlqu6J1On
1XTINWsWtrqS6jTIbdaXcts+R/txMrY9s4rzXS/FMng34Y6LqiJda3e39kLu6ju9Ru7iZgqA
u6DZNtHIBJ8tASuWGa9WPI5rnbvwF4dvdNs7CeykFtZWzWkKRXc0f7lgA0bFXBdTtHDZHFQt
L/L9f+AWrdTA8TeOtWgsfEUOk2dnaT2WnS3FpJeXjRzzbYlcyxxGFldF3HkMRuXawXOafeeN
5tCF1carpjyajHptnIYrW8lnikkmnkiRFQR8cgEssZYg42ttAPRzeD9Gubue4uobi4M8D27R
T3s0kSxsoVgkTOUQlRglQDyeeTTG8FaDJZzWs9pJcRzWqWkjXF1LK5jR2dBvZi2VZyQ2dwOM
HgYP6/P/AIALbX+tv8mY+n+O9Sv7vSrQ+Hjbz3n2hp/tMs0CxRwtFl0EsCyPlZeMovzLjp81
TeCvHU/jCaRjolzY2jwC4tbiSKcCRCeAxkhRN2CDiNpB1+bgE7Vj4Z0zT7i3uIRdzT2yypFL
d309y6rJs3jdI7Eg+WvB6Y4xk5TRvC+l+H5ZG0hLmBHBAtzezPBGCc4SFnKRjP8AdUY6dKen
9f16C6eZr0UUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigCOf8A1Y/31/8AQhXgHi3/AJdP+B/+y17/AD/6sf76/wDoQrwDxb/y6f8AA/8A
2WvRyz/e4fP8medmf+6T+X5o29I/5gX/AF9Wf/oxK9orxfSP+YF/19Wf/oxK9oriq/xJerO2
l/Dj6IKKKKzNDKi8T6LNoc2sR6jCdPgLCWfOAhU4II65z26nIx1FaNvcRXdrFcW7h4pkDow/
iUjIP5VzN78PNEvvEy6vMkgVmEs9krYguJl+7I6dCwyfrnnvnqqAGPNFGcSSIh9GYCkS4hlb
bHNG7YzhWBNeW+Lrv4iJ4ivF0HSFubIP+5dowcjA/wBoVV8L3PxIbxNpn9s6P5Fq1wRdOIVA
SPHBDByeTntQK9j0fxVq9xoehC9tEjeT7XbQYlBI2yTxxt0I5w5x74qlqPjCDRfEuoW2sSxW
2mWlja3HnlGLCSaaSLBxnjKp24ySTjpqeIdHGv6FPp5na2dyjxTqgYxSIwdG2ng4ZQcd6wJv
BF7qKXlxrWrwz6jdy2eZrayMUUcVtMJVRYzIxyzb8sWP3hxxgi317/h/wNytLf13LjeNdKuL
eC5s72SOMXjWs1vNplx9oaRYWl8oRkK6PtAYZU5HABLA1nQfEWC78FaV4kFvc2cFwyvdRy6b
dSiOPblzvWP5QoO4SMNjbSMjO5b0vgzzfETar9vxu1ZNS8ryf7tobfZnd77s49sd65+/+FVz
qPhnTtEu9YsLiCwtZbSIXOk+aoRgoSQI0uBOgUgScj5jhRmj/gf8H+v6b0/r5/8AAO41bXdP
0SxjutQmYRyuscSwwvNJMx5CoiAs5wCcKDwCegNc3ovj23vbc3upX1rb2wk1ArGtrJukht5g
gfdn5SFIypXLFuMYIrY1rQbq+tNNOmahHZ32mTLLBNNb+dG37to2V0DKSCrnowIODnscS1+H
s1uiNNqdtezBNRDi70/fDKbuVZDvjDjKrtxtz8wPUUdX8/8Agf1/w5K1Sv8AP8f+AbcvjHSI
LC3upvt6C5dkhtzplz9pkK/eIg8vzcDu23HI55FFx4y0O11ZdOnupUnLRo7fZZTHE8mNiSSh
dkbNkYV2BO5eORnHtPBGq6dFYXNjr0I1WzM6CW4s5JrfyZWVjEsTT71CmNNv7w4wRjBAE9z4
MvJ9UvGXV4k03UrmG7vrX7GTI8saoP3cu/CI3lJkFWP3sMMjD6/1/X9bMOh1tFFFIAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCOf/Vj/AH1/9CFe
AeLf+XT/AIH/AOy17/P/AKsf76/+hCvAPFv/AC6f8D/9lr0cs/3uHz/JnnZn/uk/l+aNvSP+
YF/19Wf/AKMSvaK8X0j/AJgX/X1Z/wDoxK9oriq/xJerO2l/Dj6IKKKKzNAooooAKKKKACiu
W8d+Lo/COlwXM0Msqzy+X+6IBGBnvXnB+OFpJK0aWuoKVVnO6dFGACTyWHPHTvRoldibSV2e
4VzFx44t4Zrp4dI1S602zkMV1qkEcZgiZTh+C4kcIeGKIwBBGcqcaXhjWV8Q+F7DVkRo1u4R
IFfGR9cVyV22v+HfCup6JB4audURmuDBfW8sbReVNIzZkQt5xZQ5yqI+7aMHLYCba2KWp0dv
4q+2eJLvSrLRtQuI7ORI7jUEaAQIWiWQdZRIfldeiHk1HpHjjSNY8ESeKYPPisIonlkSVB5q
BBkgqCeSMEAE5yPWua8M6NPp/i+6vF0bXpbS6Nv9kvReeRAI1tI4iZrVpkbdlW+9ESOPQYb4
c8FazY2WhWFzDHDp72tvNq0JkBZbm3UBAMZDbiI8kHGIMfxU5aJ28v8Ag/130EtrvyOr8PeM
LDxIYRZQXURm06DUVE6KMRylwqnDH5h5ZyOnTk05fF1g3hCy8RiG5+x3v2fy02r5g86RUXI3
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
T+ENGuNYfUzBcRXMrK8wt7yaGOdl4BliRwkhwAMupyAAeABTbPwXodjqrahBbTtM073ISa8m
lhjmcktIkTuURiWb5lUH5iO5rdooWmwFXUdNtNWs/suoRebD5kcu3cV+ZHDqcgg8MoP4VTvP
DGkXxvjc2m437RvcFZXUl4wAki4I2OuBh1w3yrz8oxrUUAYkHg/RINPlsxaSSRzzx3E0k9zL
LNLJGysjPK7F22lVwCxAAx04qabwxo05vTJYR5vrmK6uWUlTLLEUMbEg548teOnHPU51aKP6
/r7kAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARz/wCrH++v/oQr
wDxb/wAun/A//Za9/n/1Y/31/wDQhXgHi3/l0/4H/wCy16OWf73D5/kzzsz/AN0n8vzRt6R/
zAv+vqz/APRiV7RXi+kf8wL/AK+rP/0Yle0VxVf4kvVnbS/hx9EFFFFZmgUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUARz/6sf76/+hCvAPFv/Lp/wP8A9lr3+f8A1Y/31/8AQhXgHi3/AJdP+B/+
y16OWf73D5/kzzsz/wB0n8vzRt6R/wAwL/r6s/8A0Yle0V474ftLi8bRltYmlMUttM+0fdRX
VmJ+gFeveevpJ/37b/CuKr/El6s7aX8OPoiSio/PX0k/79t/hR56+kn/AH7b/CszQkoqPz19
JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/f
tv8ACgCSio/PX0k/79t/hR56+kn/AH7b/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0
k/79t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8A
ftv8KAJKKj89fST/AL9t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP
+/bf4UeevpJ/37b/AAoAkoqPz19JP+/bf4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9
+2/woAkoqPz19JP+/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/
79t/hR56+kn/AH7b/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ft
v8KAJKKj89fST/v23+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/
AL9t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/
AAoAkoqPz19JP+/bf4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+
/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/79t/hR56+kn/AH7b
/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8KAJKKj89fST/v2
3+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/AL9t/hR56+kn/ftv
8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/AAoAkoqPz19JP+/b
f4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/C
gCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/79t/hR56+kn/AH7b/CgCSio/PX0k/wC/
bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/wAK
AJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/AL9t/hR56+kn/ftv8KAJKKj89fST/v23
+FHnr6Sf9+2/woAJ/wDVj/fX/wBCFeAeLf8Al0/4H/7LXvskgdQqq+d69UI7j2rwLxb/AMun
/A//AGWvRyz/AHuHz/JnnZn/ALpP5fmjt/ASK5hDqGH2JeCM/wB2u38iL/nkn/fIrifAH3of
+vJf/Za7quKr/El6s7aX8OPoiPyIv+eSf98ijyIv+eSf98ipKKzNCPyIv+eSf98ijyIv+eSf
98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98i
jyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyI
v+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fI
qSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8i
L/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/n
kn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKko
oAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/5
5J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/
3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI
/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf
98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98i
jyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIpoij85l8tMBQR8o96mq
Mf8AHw/+4v8AM0AHkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEf
kRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8A
PJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf8
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
1PtXdl+GnTxMZNrr+TOHMMTCphpRSfT80f/Z
--------------050505080603030902010907
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------050505080603030902010907--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 13:19:21 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 13:19:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zbq8m-0006Sg-IY; Tue, 15 Sep 2015 13:19:20 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <fabio.fantoni@m2r.biz>) id 1Zbq8l-0006Sb-Aa
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 13:19:19 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	5B/68-06179-6DA18F55; Tue, 15 Sep 2015 13:19:18 +0000
X-Env-Sender: fabio.fantoni@m2r.biz
X-Msg-Ref: server-15.tower-206.messagelabs.com!1442323156!19544330!1
X-Originating-IP: [209.85.212.171]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 6130 invoked from network); 15 Sep 2015 13:19:16 -0000
Received: from mail-wi0-f171.google.com (HELO mail-wi0-f171.google.com)
	(209.85.212.171)
	by server-15.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 13:19:16 -0000
Received: by wiclk2 with SMTP id lk2so27035969wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 06:19:16 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:subject:to:references:from:cc:message-id:date
	:user-agent:mime-version:in-reply-to:content-type;
	bh=w1S2If8DF735/z3/6aNOyZysyeA5W2R4infCemyMas0=;
	b=c9tMawfUp8OqF2+9dCHEEIsp9rB+C181vM5WRrrSXFQeqqsWaEO2tSsdS5XJlxcSxZ
	ZzfiH9yKOQ3q3P3iBpAfnHyMViDS+mtHJZA9BLbHJpJiq+zS63mLr+CBVMYSqCkAhXuY
	FmEAL0z6Zgn+ds1octzKcv1vX6d79MgDFb8HNvkVC6I35gwAh/xC99t+YKmNEwQEMEBf
	ouYRdB9SqgeU6Hcl15/pHQnxhwEWa9h00h2Jd+NXlRHpJgtlF39gwZXgC81LgwrX82Re
	vrY7M8PoTo3pLj2CuGSQU2wP6P2qoxFHOaNhIjkBFM5f4+gPfdO4JCiZYKKM4ofGkl7D
	koZw==
X-Gm-Message-State: ALoCoQkV2a3bjz/bYUHOozvL6CLyQziSw2qbfMDziUgY4rmQVOdIjcV+HeztnvHBqEFixBh83s4n
X-Received: by 10.180.187.141 with SMTP id fs13mr7578512wic.13.1442323156104; 
	Tue, 15 Sep 2015 06:19:16 -0700 (PDT)
Received: from [192.168.1.11] (ip-73-126.sn2.eutelia.it. [83.211.73.126])
	by smtp.googlemail.com with ESMTPSA id
	lz10sm21043767wjb.48.2015.09.15.06.19.13
	(version=TLSv1/SSLv3 cipher=OTHER);
	Tue, 15 Sep 2015 06:19:15 -0700 (PDT)
To: Ben Chalmers <ben.chalmers@citrix.com>,
	Paul Durrant <Paul.Durrant@citrix.com>,
	Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net>
	<55F8172F.7080300@m2r.biz>
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Message-ID: <55F81AD2.1060802@m2r.biz>
Date: Tue, 15 Sep 2015 15:19:14 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <55F8172F.7080300@m2r.biz>
Content-Type: multipart/mixed; boundary="------------050505080603030902010907"
Cc: Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

This is a multi-part message in MIME format.
--------------050505080603030902010907
Content-Type: multipart/alternative;
 boundary="------------000805000808010901020804"


--------------000805000808010901020804
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Length: 5931
Content-Transfer-Encoding: quoted-printable

Il 15/09/2015 15:03, Fabio Fantoni ha scritto:
> Il 15/09/2015 13:16, Ben Chalmers ha scritto:
>>
>> There was a problem with driver uninstall, which Paul fixed in
>>
>> http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a
>>
>> Alternatively:
>>
>> removing xenfilt from UpperFilters of 
>> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class subkeys
>>
>> {4D36E96A-E325-11CE-BFC1-08002BE10318}
>>
>> {4D36E97D-E325-11CE-BFC1-08002BE10318}
>>
>
> I found the keys but not xenfilt from UpperFilters in them.
>
>> And setting
>>
>> HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start to 3
>>
>> are frequently good (if somewhat severe) ways of avoiding 7B BSODs 
>> when things go wrong.
>>
>> Ben Chalmers
>>
>
> Thanks, this solved the boot problem after drivers uninstall but after 
> new pv build install and reboot disk the emulated one only and also 
> emulated network card is still present (even if disabled).

This was with hdtype=3D"ide", with ahci instead network seems ok with pv 
only and disks show both emulated and pv devices (see attachment), this 
is probably related on what Stefano Stabellini told about unplug support 
missed for ahci disks for xen in upstream qemu.
I can't take qemu's trace because is recently not working for unknow reason.

> I should restore start keys of previous status after install of new 
> build for correct pv working=3F
>
> Why is possible remove all drivers related services, registry keys and 
> files from driver uninstall=3F
>
> Thanks for any reply and sorry for my bad english.
>
>>
>> *From: *Fabio Fantoni
>> *Sent: *15 September 2015 12:06
>> *To: *Paul Durrant;Joel Noyce-Barnham;win-pv-devel@lists.xenproject.org
>> *Subject: *Re: [win-pv-devel] PV Drivers Offline Removal
>>
>> Il 15/09/2015 10:59, Paul Durrant ha scritto:
>>
>>     Joel,
>>
>>       Offline removal should be quite possible. The thing that needs
>>     to be cleaned up to make sure the image will reboot are the
>>     =E2=80=98unplug=E2=80=99 values that are used early on in boot to request unplug
>>     of emulated devices in QEMU. Look under
>>     HKLM/system/currentcontrolset/services/xen and you should see a
>>     key called =E2=80=98Unplug=E2=80=99. If you delete that key then the next reboot
>>     should use emulated devices and so should be fine with no PV drivers.
>>
>>       Cheers,
>>
>>       Paul
>>
>>
>> Hi I'm unable to boot windows 10 after new pv drivers uninstall, I 
>> removed them from control panel, I also executed a bat I posted some 
>> months ago here for remove other related things, I tried also to 
>> remove the registry key above, with both ide and ahci disk, with 
>> xen_platform_pci=3D0 but in all cases gave me always 
>> INACCESSIBLE_BOOT_DEVICE blue screen :(
>> Someone know other things I can try=3F
>>
>> First test with uninstall only from control panel game me also a more 
>> important problem (here there are also dom0 and domU details): 
>> http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html
>>
>> Thanks for any reply and sorry for my bad english.
>>
>>
>>     *From:*win-pv-devel-bounces@lists.xenproject.org
>>     <mailto:win-pv-devel-bounces@lists.xenproject.org>
>>     [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of
>>     *Joel Noyce-Barnham
>>     *Sent:* 14 September 2015 18:21
>>     *To:* win-pv-devel@lists.xenproject.org
>>     <mailto:win-pv-devel@lists.xenproject.org>
>>     *Subject:* [win-pv-devel] PV Drivers Offline Removal
>>
>>     Hi All,
>>
>>     We are currently using the GPLPV drivers but are hoping to move
>>     to the new Xen WINPV drivers as they are actively developed and
>>     have some new features which we are interested in. We currently
>>     have a process where VMs can be moved from our Xen hypervisor
>>     into EC2. This process relies on the fact that we are able to
>>     remove the drivers from an offline image. Previously we have been
>>     removing the drivers successfully by converting the disk images
>>     to a VHD file, using Dism to remove the drivers
>>     (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx)
>>     and then importing the resulting VHD into EC2. This works with
>>     the GPLPV drivers but with the new WINPV drivers it creates an
>>     unbootable image (the import into EC2 fails and the image can
>>     also not be booted on the original hypervisor).
>>
>>     I have found some previous posts on this mailing list
>>     (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html)
>>     discussing removing the drivers and I am able to successfully
>>     remove the drivers from an online image but sadly our process
>>     requires that this removal be performed offline.
>>
>>     I am just wondering if anyone else is using Dism in windows to
>>     remove the PV drivers from an offline image=3F Or if anyone else
>>     has successfully removed the WINPV drivers from an offline image
>>     at all=3F Any pointers anyone can give would be appreciated. The
>>     only way we have so far found to make the image boot after
>>     removing the drivers with Dism is by manual modification of a
>>     large number of registry keys which seems like a far from ideal
>>     solution.
>>
>>     Thanks for any help,
>>     Joel
>>
>>     Zynstra is a private limited company registered in England and
>>     Wales (registered number 07864369). Our registered office and
>>     Headquarters are at The Innovation Centre, Broad Quay, Bath, BA1
>>     1UD. This email, its contents and any attachments are
>>     confidential. If you have received this message in error please
>>     delete it from your system and advise the sender immediately.
>>
>


--------------000805000808010901020804
Content-Type: text/html; charset=utf-8
Content-Length: 15481
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
  </head>
  <body bgcolor=3D"#FFFFFF" text=3D"#000000">
    <div class=3D"moz-cite-prefix">Il 15/09/2015 15:03, Fabio Fantoni ha
      scritto:<br>
    </div>
    <blockquote cite=3D"mid:55F8172F.7080300@m2r.biz" type=3D"cite">
      <meta content=3D"text/html; charset=3Dutf-8" http-equiv=3D"Content-Type">
      <div class=3D"moz-cite-prefix">Il 15/09/2015 13:16, Ben Chalmers ha
        scritto:<br>
      </div>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <meta http-equiv=3D"Content-Type" content=3D"text/html;
          charset=3Dutf-8">
        <meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered
          medium)">
        <style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Consolas;
	panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-priority:99;
	color:#954F72;
	text-decoration:underline;}
p
	{mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
span.spelle
	{mso-style-name:spelle;}
.MsoChpDefault
	{mso-style-type:export-only;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
        <div class=3D"WordSection1">
          <p>There was a problem with driver uninstall, which Paul fixed
            in</p>
          <p><o:p>=C2=A0</o:p></p>
          <p><a moz-do-not-send=3D"true"
href=3D"http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a">http://xenbits.xen.org/gitweb/=3Fp=3Dpvdrivers/win/xenvbd.git;a=3Dcommit;h=3D59797d160517e47a249e67f030bb5d2943f8177a</a></p>
          <p><o:p>=C2=A0</o:p></p>
          <p>Alternatively:</p>
          <p><o:p>=C2=A0</o:p></p>
          <p>removing xenfilt from UpperFilters of
            HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class
            subkeys </p>
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E96A-E325-11CE-BFC1-08002BE10318}<o:p></o:p></span></p>
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white">{4D36E97D-E325-11CE-BFC1-08002BE10318}</span></p>
        </div>
      </blockquote>
      <br>
      I found the keys but not xenfilt from UpperFilters in them.<br>
      <br>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <div class=3D"WordSection1">
          <p><span
style=3D"font-size:9.0pt;font-family:Consolas;color:#333333;background:white"><o:p></o:p></span></p>
          <p><o:p>=C2=A0</o:p></p>
          <p>And setting </p>
          <p><o:p>=C2=A0</o:p></p>
          <p>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Xen*\Start

            to 3 </p>
          <p><o:p>=C2=A0</o:p></p>
          <p>are frequently good (if somewhat severe) ways of avoiding
            7B BSODs when things go wrong.</p>
          <p><o:p>=C2=A0</o:p></p>
          <p>Ben Chalmers</p>
        </div>
      </blockquote>
      <br>
      Thanks, this solved the boot problem after drivers uninstall but
      after new pv build install and reboot disk the emulated one only
      and also emulated network card is still present (even if
      disabled).<br>
    </blockquote>
    <br>
    This was with hdtype=3D"ide", with ahci instead network seems ok with
    pv only and disks show both emulated and pv devices (see
    attachment), this is probably related on what Stefano Stabellini
    told about unplug support missed for ahci disks for xen in upstream
    qemu.<br>
    I can't take qemu's trace because is recently not working for unknow
    reason.<br>
    <br>
    <blockquote cite=3D"mid:55F8172F.7080300@m2r.biz" type=3D"cite"> I
      should restore start keys of previous status after install of new
      build for correct pv working=3F<br>
      <br>
      Why is possible remove all drivers related services, registry keys
      and files from driver uninstall=3F<br>
      <br>
      Thanks for any reply and sorry for my bad english.<br>
      <br>
      <blockquote
cite=3D"mid:1AD33E34BA5E3649B4F6C7FE476686F4211A6AD9@AMSPEX01CL03.citrite.net"
        type=3D"cite">
        <div class=3D"WordSection1">
          <p><o:p>=C2=A0</o:p></p>
          <p><o:p>=C2=A0</o:p></p>
          <div
            style=3D"mso-element:para-border-div;border:none;border-top:solid
            #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
            <p style=3D"border:none;padding:0cm"><br>
              <b>From: </b>Fabio Fantoni<br>
              <b>Sent: </b>15 September 2015 12:06<br>
              <b>To: </b>Paul Durrant;Joel <a moz-do-not-send=3D"true"
                class=3D"moz-txt-link-abbreviated"
                href=3D"mailto:Noyce-Barnham;win-pv-devel@lists.xenproject.org">Noyce-Barnham;win-pv-devel@lists.xenproject.org</a><br>
              <b>Subject: </b>Re: [win-pv-devel] PV Drivers Offline
              Removal</p>
          </div>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><span
              style=3D"font-size:12.0pt;font-family:&quot;Times New
              Roman&quot;,serif">Il 15/09/2015 10:59, Paul Durrant ha
              scritto:</span><span
              style=3D"font-size:12.0pt;font-family:&quot;Times New
              Roman&quot;,serif"><o:p></o:p></span></p>
          <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
            <div>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">Joel,</span><span
                  style=3D"font-family:&quot;Times New Roman&quot;,serif"><o:p></o:p></span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Offline
                  removal should be quite possible. The thing that needs
                  to be cleaned up to make sure the image will reboot
                  are the =E2=80=98unplug=E2=80=99 values that are used early on in boot
                  to request unplug of emulated devices in QEMU. Look
                  under HKLM/system/<span class=3D"spelle">currentcontrolset</span>/services/xen

                  and you should see a key called =E2=80=98Unplug=E2=80=99. If you
                  delete that key then the next reboot should use
                  emulated devices and so should be fine with no PV
                  drivers.</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Cheers,</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0 Paul</span></p>
            </div>
          </blockquote>
          <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt"><br>
              Hi I'm unable to boot windows 10 after new pv drivers
              uninstall, I removed them from control panel, I also
              executed a bat I posted some months ago here for remove
              other related things, I tried also to remove the registry
              key above, with both ide and ahci disk, with
              xen_platform_pci=3D0 but in all cases gave me always
              INACCESSIBLE_BOOT_DEVICE blue screen :(<br>
              Someone know other things I can try=3F<br>
              <br>
              First test with uninstall only from control panel game me
              also a more important problem (here there are also dom0
              and domU details): <a moz-do-not-send=3D"true"
href=3D"http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html"
                target=3D"_BLANK">
http://lists.xen.org/archives/html/win-pv-devel/2015-09/msg00063.html</a><br>
              <br>
              Thanks for any reply and sorry for my bad english.<br>
              <br>
              <br>
              <o:p></o:p></span></p>
          <blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
            <div>
              <p class=3D"MsoNormal"><span
                  style=3D"font-size:10.0pt;color:#1F497D">=C2=A0</span></p>
              <div style=3D"border:none;border-left:solid blue
                1.5pt;padding:0cm 0cm 0cm 4.0pt">
                <div>
                  <div style=3D"border:none;border-top:solid #B5C4DF
                    1.0pt;padding:3.0pt 0cm 0cm 0cm">
                    <p class=3D"MsoNormal"><b><span
                          style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                          lang=3D"EN-US">From:</span></b><span
                        style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,sans-serif"
                        lang=3D"EN-US"> <a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a>
                        [<a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
                        <b>On Behalf Of </b>Joel Noyce-Barnham<br>
                        <b>Sent:</b> 14 September 2015 18:21<br>
                        <b>To:</b> <a moz-do-not-send=3D"true"
                          href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                        <b>Subject:</b> [win-pv-devel] PV Drivers
                        Offline Removal</span></p>
                  </div>
                </div>
                <p class=3D"MsoNormal"><span style=3D"font-size:12.0pt">=C2=A0</span></p>
                <div id=3D"divtagdefaultwrapper">
                  <p style=3D"background:white"><span style=3D"color:black">Hi

                      All,<br>
                      <br>
                      We are currently using the GPLPV drivers but are
                      hoping to move to the new Xen WINPV drivers as
                      they are actively developed and have some new
                      features which we are interested in. We currently
                      have a process where VMs can be moved from our Xen
                      hypervisor into EC2. This process relies on the
                      fact that we are able to remove the drivers from
                      an offline image. Previously we have been removing
                      the drivers successfully by converting the disk
                      images to a VHD file, using Dism to remove the
                      drivers (<a moz-do-not-send=3D"true"
                        class=3D"moz-txt-link-freetext"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
                      and then importing the resulting VHD into EC2.
                      This works with the GPLPV drivers but with the new
                      WINPV drivers it creates an unbootable image (the
                      import into EC2 fails and the image can also not
                      be booted on the original hypervisor).<br>
                      <br>
                      I have found some previous posts on this mailing
                      list (<a moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"
                        target=3D"_BLANK">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)
                      discussing removing the drivers and I am able to
                      successfully remove the drivers from an online
                      image but sadly our process requires that this
                      removal be performed offline.<br>
                      <br>
                      I am just wondering if anyone else is using Dism
                      in windows to remove the PV drivers from an
                      offline image=3F Or if anyone else has successfully
                      removed the WINPV drivers from an offline image at
                      all=3F Any pointers anyone can give would be
                      appreciated. The only way we have so far found to
                      make the image boot after removing the drivers
                      with Dism is by manual modification of a large
                      number of registry keys which seems like a far
                      from ideal solution.<br>
                      <br>
                      Thanks for any help,<br>
                      Joel</span></p>
                </div>
                <p style=3D"line-height:10.0pt"><span
                    style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,serif;color:gray">Zynstra

                    is a private limited company registered in England
                    and Wales (registered number 07864369). Our
                    registered office and Headquarters are at The
                    Innovation Centre, Broad Quay, Bath, BA1 1UD. This
                    email, its contents and any attachments are
                    confidential. If you have received this message in
                    error please delete it from your system and advise
                    the sender immediately. </span></p>
              </div>
            </div>
          </blockquote>
          <p class=3D"MsoNormal"
style=3D"mso-margin-top-alt:0cm;margin-right:36.0pt;margin-bottom:5.0pt;margin-left:36.0pt"><span
              style=3D"font-size:12.0pt"><o:p>=C2=A0</o:p></span></p>
          <p class=3D"MsoNormal"><o:p>=C2=A0</o:p></p>
          <p class=3D"MsoNormal"><span style=3D"font-family:&quot;Times New
              Roman&quot;,serif"><o:p>=C2=A0</o:p></span></p>
        </div>
      </blockquote>
      <br>
    </blockquote>
    <br>
  </body>
</html>

--------------000805000808010901020804--

--------------050505080603030902010907
Content-Type: image/jpeg;
 name="devices.JPG"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="devices.JPG"

/9j/4AAQSkZJRgABAQEAYABgAAD/4RCaRXhpZgAATU0AKgAAAAgABAE7AAIAAAANAAAISodp
AAQAAAABAAAIWJydAAEAAAAaAAAQeOocAAcAAAgMAAAAPgAAAAAc6gAAAAgAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVtaWxpbyBC
cnVuYQAAAAHqHAAHAAAIDAAACGoAAAAAHOoAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAbQBpAGwAaQBvACAAQgByAHUA
bgBhAAAA/+EKZWh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2lu
PSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4NCjx4OnhtcG1ldGEgeG1s
bnM6eD0iYWRvYmU6bnM6bWV0YS8iPjxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53
My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+PHJkZjpEZXNjcmlwdGlvbiByZGY6
YWJvdXQ9InV1aWQ6ZmFmNWJkZDUtYmEzZC0xMWRhLWFkMzEtZDMzZDc1MTgyZjFiIiB4bWxu
czpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLz48cmRmOkRlc2NyaXB0
aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJm
MWIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmNy
ZWF0b3I+PHJkZjpTZXEgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIy
LXJkZi1zeW50YXgtbnMjIj48cmRmOmxpPkVtaWxpbyBCcnVuYTwvcmRmOmxpPjwvcmRmOlNl
cT4NCgkJCTwvZGM6Y3JlYXRvcj48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpSREY+PC94Onht
cG1ldGE+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw/eHBhY2tldCBlbmQ9J3cnPz7/2wBDAAcFBQYFBAcGBQYIBwcIChELCgkJChUPEAwR
GBUaGRgVGBcbHichGx0lHRcYIi4iJSgpKywrGiAvMy8qMicqKyr/2wBDAQcICAoJChQLCxQq
HBgcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKir/
wAARCAI8Aw0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QA
tRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2Jy
ggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqD
hIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi
4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLR
ChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6
goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2rw54c0OfwrpUs+jafJJJZQs7vaoW
YlASSSOTWl/wi/h//oBab/4Bx/4UeFv+RP0b/rwg/wDRa03WvEthodvvnLXEu8ILe32tJkjP
IJAUcdWIHvXRVq1PaS957s56VKn7OPurZEH9k+Ec4+waJn08mL/CrP8Awi/h/wD6AWm/+Acf
+FefWHi83gaC4N9YOsBj+z3LxmJk8nsUZl3b8cZzzjHUD0vVNSh0rR7rUpwzw2sLTMIxksFG
cD3rL21Xq395apU27cqKv/CL+H/+gFpv/gHH/hR/wi/h/wD6AWm/+Acf+FZ1hrV7BqTx+IdY
0KIraNdS2EOUntV4OWZpDvQDILbE5APtVkeM9GNsJg97kyCJYf7OuPOYlSwIi8veVwCdwXHB
54qva1P5n94eyp/yr7ix/wAIv4f/AOgFpv8A4Bx/4Uf8Iv4f/wCgFpv/AIBx/wCFZSeNba5v
NUtVEth/Z13BAZ7qxnZJA5jGMbVwxMm0cns+CtacXinR5tXOmx3Lm48xoQxt5BE0ijLIspXY
zjByoYkYPHBpe1qfzP7x+yp/yr7h3/CL+H/+gFpv/gHH/hR/wi/h/wD6AWm/+Acf+FVtP8a+
H9UDG0vzsW2a682aCSJGiXG51d1AYLkA4JweDir+la3ZazHI9i048ogOlxbSQOMjIO2RVOD2
OMHB54NP2tT+Z/eHsqf8q+4h/wCEX8P/APQC03/wDj/wo/4Rfw//ANALTf8AwDj/AMKw7vx5
aS6ksOmXca2gsLu6lu57OYqvlbNroPl81PmblCc44NbDeKtKia7WWaYixhM1zMtnMYYwqBz+
8Clc7SDtyW56Uva1LX5n94exp/yr7iT/AIRfw/8A9ALTf/AOP/Cj/hF/D/8A0AtN/wDAOP8A
wqCLxloU1rdXCXrLFaojyF4JELK5wjICoMgYjClMhjwM0f8ACY6MbQTiW6Y+d5HkLYzm4Em3
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
XetaZ9gktItHluEl5cIRcLiOA5kbcXJG3nA6mei7lpK/lp/wTqJPF2mWLXz3uoLKkN1Hbxw2
1lM0wd4lkWMKu5pWKtu+ReF6j5Sae/jTQk022vVuZpkundIYbezmlnZkOHHkohkBUjDAqNp4
OKy5vAtx9rk1Cx1VLe/F/FfW7y2vmRxstqLZkdQ6lwV3HhlIJHpy9fBd/aPZ6hpmswR6zC1w
Z7m4sTLBOJ2V5AIlkUqAyJt+ckBcHdkmqf8AX3L/AIP/AASVsn/X9bBbePrFPFOp6RqsvkGG
9gtrUrbSn/WwxsvmtgrGWdyq7tucYGSDW/o2oLqNrNIl1FdeVdTQF4oGiClJGUphiSSuMFhw
SMgAHFY134Ma8j1YSagA+p6haXzFYOIzB5Pygbud3k9e27vjnV0DRv7Ds7mDz/P8+9uLvds2
7fNlaTb1PTdjPfHQUaW/ry/4I3t/Xn/wDUooopCCiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAjn/wBW
P99f/QhXgHi3/l0/4H/7LXv8/wDqx/vr/wChCvAPFv8Ay6f8D/8AZa9HLP8Ae4fP8medmf8A
uk/l+aNvSP8AmBf9fVn/AOjEr2ivF9I/5gX/AF9Wf/oxK9oriq/xJerO2l/Dj6IKKKKzNBok
RpGRXUuuNyg8jPTNOrCvY3m8Sw/2WjR3EQBupiPkMZ6KR/EfT0/lu0AYOu+JIbG6j0uzlV9T
uOEiX5mX3x6/XgdT71/DPixdUvrnSNQikt9Uszh1kjKiUf3h2PvjjuOOnHtDJ8MPG1xq2po1
/o+rPtfUpBumtGJ6Mf7v+e2Ku6A//CbatqF1pep+JINMSdtl0L5UikOc4jTZnaOnXpQM7/Ut
StdI06a+1CXyreEZdgpY9cABQCWJJAAAJJIA5qrpGsXGptILnRNR0vaAyG98oiUeo8uR8duG
2nnp1xF4r0q51jQGg08xfa4Z4bqBZjhHeKVZArHBIBK4yASM5rE10654p8J3dp/wjd5YOrwP
La3d1b/6ZGsqtLCpjkYYZFZfnKg7gDwSQL+v8/6/UDtKqy6laQ6pbadLLtu7qOSWGPaTuVCo
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
260fT3Gs6Whv4obeYxWtyZFljcOXdWMan5EikYjbzgDvTPEPxIOj6XLfWWmpfLHPcIsIlmMs
sUOBJIqxQyYAfK5fag+XLDdXRQ+FNHhls5TavNLZ28ltDLcXEkziN8blLOxLdMZbJAyBgE1V
uvAXhy8060sZrGUW1pA9tGkd3NGWifG9HKuDIpwCQ5OTz1pve/8AX9f5vsiI6JJ/1/X6IytS
+Ic2n/23MNG8200yW3t43WdmluJ51iMaiNI2IX99yRuPHyqxOBveF9buNf0b7Xe6bNp06ytG
0Mkcyg46MvmxxuVII5KLzkc4yXT+FdFubPULWeyDw6kyNdKZG+dkVURgc5UgImCuCCoPXmre
l6Xb6RZ/ZrSS7kj3Fs3d5Lcvk/7crM2PbOKNB9EXKKKKQBRRRQAUUUUAFFFFABRRRQAUUUUA
FFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARP8AfNNp
7gljgGm7T6H8qskSlFG0+h/KjafQ/lQAwkLJlzgY4JprvhhtOOn41Ng+howfQ0hFccYy54c5
6cdafvO4DPO4gj2qXB9DRg+hoGQF2EandyRnnFPcZKc45/pUmD6GjB9DQIiDMzAbsfe7e9N8
xjt5C5APJxmp8H0NGD6GgCBmyGBfoR0xgc04sRvO7gYA6VLg+howfQ0AMjJZMk55606lwfQ0
YPoaAEopcH0NGD6GgBKKXB9DRg+hoASilwfQ0YPoaAEopcH0NGD6GgBKKXB9DRg+hoAloooq
SwooooAKKKKACiiigAooooAKKKKAI5/9WP8AfX/0IV4B4t/5dP8Agf8A7LXv8/8Aqx/vr/6E
K8A8W/8ALp/wP/2WvRyz/e4fP8medmf+6T+X5o29I/5gX/X1Z/8AoxK9orxfSP8AmBf9fVn/
AOjEr2iuKr/El6s7aX8OPogooorM0Ko1CA6k1ixZJwodQwwHH+ye+KtVk3unz6lq0JnCxWlq
RIjKfnkf69VA/X+WtQBzXiTxRPo2qWenwWW83nyi5d8LEdrnpjn7nTI61d8OP5ltdMZPNYzj
c5PU+Wlc/wCOPAt74j1S31XT9T8iW0iAW1aP5ZSN/wDFu+Unf6HpWh4Cjmi0W5juUZJUudrq
45B8qPINV0F1NLxJqk+j6THdWyxs7XlrbkSAkbZbiONjwRzhzj3x1qta+N9AvdZGl215I10Z
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
rawWzxIC8S20zOSSMgmVcdekYx1OeVt/E+oXWqWerWOsDXdah0DUp308W6j7FcjyD9n2oAww
wxscl+OvNe1UUvT+tLf8H/Iadmv66nkOn+MdWfQYJLzxlpjWU9/FHdavZXtvdPp8TRO2JD9n
jji3OiKN8bY3sCc4x6B4M1C61Pw6J7u6+3KJ5Ut73ywn2qFXISXCgL8wAOVAVuoABFb1FO+r
/rt/XzJ6L+u/9fIKKKKQwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKAI5/8AVj/fX/0IV4B4t/5dP+B/+y17/P8A6sf76/8AoQrwDxb/AMun/A//AGWvRyz/
AHuHz/JnnZn/ALpP5fmjb0j/AJgX/X1Z/wDoxK9orxfSP+YF/wBfVn/6MSvaK4qv8SXqztpf
w4+iCiiiszQzbnU3sdUSK9jVLSfCwzg9H/ut6Z7f5xpVRfTEm1UXtzI0vlgCGJh8sZ7t7n3q
9QBy82o6ndN59reG3iflI1iVsL2ySCc8H/DO0OwanqdgDc3V758MXMkckKrlec4Kjg8Z7jqO
m1mgvfhJ4E1G9lu7zw5bSTzMXkfe43E9Tw1JafCHwHY3cVza+G7ZJomDo29ztI6Hlqu6J1On
1XTINWsWtrqS6jTIbdaXcts+R/txMrY9s4rzXS/FMng34Y6LqiJda3e39kLu6ju9Ru7iZgqA
u6DZNtHIBJ8tASuWGa9WPI5rnbvwF4dvdNs7CeykFtZWzWkKRXc0f7lgA0bFXBdTtHDZHFQt
L/L9f+AWrdTA8TeOtWgsfEUOk2dnaT2WnS3FpJeXjRzzbYlcyxxGFldF3HkMRuXawXOafeeN
5tCF1carpjyajHptnIYrW8lnikkmnkiRFQR8cgEssZYg42ttAPRzeD9Gubue4uobi4M8D27R
T3s0kSxsoVgkTOUQlRglQDyeeTTG8FaDJZzWs9pJcRzWqWkjXF1LK5jR2dBvZi2VZyQ2dwOM
HgYP6/P/AIALbX+tv8mY+n+O9Sv7vSrQ+Hjbz3n2hp/tMs0CxRwtFl0EsCyPlZeMovzLjp81
TeCvHU/jCaRjolzY2jwC4tbiSKcCRCeAxkhRN2CDiNpB1+bgE7Vj4Z0zT7i3uIRdzT2yypFL
d309y6rJs3jdI7Eg+WvB6Y4xk5TRvC+l+H5ZG0hLmBHBAtzezPBGCc4SFnKRjP8AdUY6dKen
9f16C6eZr0UUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
AKKKKACiiigCOf8A1Y/31/8AQhXgHi3/AJdP+B/+y17/AD/6sf76/wDoQrwDxb/y6f8AA/8A
2WvRyz/e4fP8medmf+6T+X5o29I/5gX/AF9Wf/oxK9orxfSP+YF/19Wf/oxK9oriq/xJerO2
l/Dj6IKKKKzNDKi8T6LNoc2sR6jCdPgLCWfOAhU4II65z26nIx1FaNvcRXdrFcW7h4pkDow/
iUjIP5VzN78PNEvvEy6vMkgVmEs9krYguJl+7I6dCwyfrnnvnqqAGPNFGcSSIh9GYCkS4hlb
bHNG7YzhWBNeW+Lrv4iJ4ivF0HSFubIP+5dowcjA/wBoVV8L3PxIbxNpn9s6P5Fq1wRdOIVA
SPHBDByeTntQK9j0fxVq9xoehC9tEjeT7XbQYlBI2yTxxt0I5w5x74qlqPjCDRfEuoW2sSxW
2mWlja3HnlGLCSaaSLBxnjKp24ySTjpqeIdHGv6FPp5na2dyjxTqgYxSIwdG2ng4ZQcd6wJv
BF7qKXlxrWrwz6jdy2eZrayMUUcVtMJVRYzIxyzb8sWP3hxxgi317/h/wNytLf13LjeNdKuL
eC5s72SOMXjWs1vNplx9oaRYWl8oRkK6PtAYZU5HABLA1nQfEWC78FaV4kFvc2cFwyvdRy6b
dSiOPblzvWP5QoO4SMNjbSMjO5b0vgzzfETar9vxu1ZNS8ryf7tobfZnd77s49sd65+/+FVz
qPhnTtEu9YsLiCwtZbSIXOk+aoRgoSQI0uBOgUgScj5jhRmj/gf8H+v6b0/r5/8AAO41bXdP
0SxjutQmYRyuscSwwvNJMx5CoiAs5wCcKDwCegNc3ovj23vbc3upX1rb2wk1ArGtrJukht5g
gfdn5SFIypXLFuMYIrY1rQbq+tNNOmahHZ32mTLLBNNb+dG37to2V0DKSCrnowIODnscS1+H
s1uiNNqdtezBNRDi70/fDKbuVZDvjDjKrtxtz8wPUUdX8/8Agf1/w5K1Sv8AP8f+AbcvjHSI
LC3upvt6C5dkhtzplz9pkK/eIg8vzcDu23HI55FFx4y0O11ZdOnupUnLRo7fZZTHE8mNiSSh
dkbNkYV2BO5eORnHtPBGq6dFYXNjr0I1WzM6CW4s5JrfyZWVjEsTT71CmNNv7w4wRjBAE9z4
MvJ9UvGXV4k03UrmG7vrX7GTI8saoP3cu/CI3lJkFWP3sMMjD6/1/X9bMOh1tFFFIAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCOf/Vj/AH1/9CFe
AeLf+XT/AIH/AOy17/P/AKsf76/+hCvAPFv/AC6f8D/9lr0cs/3uHz/JnnZn/uk/l+aNvSP+
YF/19Wf/AKMSvaK8X0j/AJgX/X1Z/wDoxK9oriq/xJerO2l/Dj6IKKKKzNAooooAKKKKACiu
W8d+Lo/COlwXM0Msqzy+X+6IBGBnvXnB+OFpJK0aWuoKVVnO6dFGACTyWHPHTvRoldibSV2e
4VzFx44t4Zrp4dI1S602zkMV1qkEcZgiZTh+C4kcIeGKIwBBGcqcaXhjWV8Q+F7DVkRo1u4R
IFfGR9cVyV22v+HfCup6JB4audURmuDBfW8sbReVNIzZkQt5xZQ5yqI+7aMHLYCba2KWp0dv
4q+2eJLvSrLRtQuI7ORI7jUEaAQIWiWQdZRIfldeiHk1HpHjjSNY8ESeKYPPisIonlkSVB5q
BBkgqCeSMEAE5yPWua8M6NPp/i+6vF0bXpbS6Nv9kvReeRAI1tI4iZrVpkbdlW+9ESOPQYb4
c8FazY2WhWFzDHDp72tvNq0JkBZbm3UBAMZDbiI8kHGIMfxU5aJ28v8Ag/130EtrvyOr8PeM
LDxIYRZQXURm06DUVE6KMRylwqnDH5h5ZyOnTk05fF1g3hCy8RiG5+x3v2fy02r5g86RUXI3
Y4LjPJ4z1rktA0nxD4StNMuE8Pz6lO2gwafNBb3UCtbzRM7DdvdQUPmH5lLEbehzWlf+EL0f
CXTfDMebi5thYRzGCYxZEc0TSMr5UjAViCCDxxzVO19O6/N/pYeidv62X6nU3Gr29vr1lpDp
Ibi8hmnjYAbAsRQNk5zn94uOOx6VmReN9Lm0XW9TiS5aHRfNM67AGkWNSd0eTgqdrAEkZINY
GreEdQ0jXoNT8JRX95OmmXkCtf6tNcrHM5h8vieU4HysTtxkLzziqF54K8VWGlXtjBPY6pb3
fh+bStlpaG0KusZ8hmMk77iSzrkY5fJ46R0+/wDX/JfeOKV1f+v6/Q6F/iHbQWN5LeaJq1rd
WotmFjIIDLMtxJ5cTIVlMeC+QcuCMcjpmWbx9a22nX8t3pGqW97YSQJLpsiReefPcJEysJDE
ysxIyHwNpBwRiue1HwnqumaVe2Wladdaok72F2kst4sk6tDPGz2/mTOGKhVZ0y2AWcZHGZ9f
0bXNcg1DWhos0NwxsI7bTWnhNw0cF0JpGZhJ5QJ5wA54UZILbRel/K/4af1+JMdVrv8A8N/X
4G/F43szHcLfafqGn3lrPbQzWVyieYv2iQRxOCjsjISTyrHG1geRimt44tltNSvxpOpNpmnx
XEh1BViMUxgyJEQeZvByrAFlVSV4PIzlahousa9cz6xLpb2MkkunRQWU00ZmWKG7WaSRyjFB
wThVZuF65baKGuaBrV/JrsGg6HeaXDe2F9FdRy3kJtr+Z0KxvEgkOxyxyXKx5BO7Jxiennr+
St/XyKildX7r/gncafrtvqeoz2tlDNIluimW5wvlJIQD5Wc5LgEE4BAzyc8Vp1zHg/StQ8Nx
tocsBl0yNPOtLveu5Cxy8MnO5mDEkPg7gfmO4Zbp6btfQzjdrUKKKKRQUUUUAFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFF
FABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA
UUUUAFFFFABRRRQAUUUUAFFFFAEc/wDqx/vr/wChCvAPFv8Ay6f8D/8AZa9/n/1Y/wB9f/Qh
XgHi3/l0/wCB/wDstejln+9w+f5M87M/90n8vzRt6R/zAv8Ar6s//RiV7RXi+kf8wL/r6s//
AEYle0VxVf4kvVnbS/hx9EFFFFZmgUUUUAFFFFAGVd3IlkaOaCCVUYgCRN1VttqeunWX/fgV
V1rVrHSGebUrqO2jaQqrSHAJ54rAk+IHhxTga3YZ95a6v3cdGcv7x6pnYx37xRhIookReAqr
gD8KgHiSBoo5VurQxySmFHEgw7gkFAc8tkEY68GqtleQahYw3dpIssMyh0dDkMPUGuHs7mD/
AITYaiVYaJdTyw2MnmAx/bdu15AMcBwHRTnG5W/56CqlGC2X9f1+Nieadnr/AF/X4XO0t/iD
oN3FPLa69o88dvt8547yNhFuO1dxDcZPAz1NaUmurDOkMstvHK6M6xs2GZVxuYDPIGRk9siv
FtK1CDVPhFZ6bca1o+phG01GsbVAJbdftMQKzfvWye33U6HjnjR1GGI+JovDXiOeaO1tdGv0
+2njdaOYArliCNygMrZ/u7iMNT5Y9u/4K/8AXzLvK+56L/wsLQP7N/tH+39G+xeb5P2n7ZH5
fmYzs3bsbsc464q4/iuyj0kaq9/YrpxQOLwzKIdp6HfnGPfNeWz6xf63c6TFp1/pd3Pa60kU
GswQGS2uf9EmOCquMsuSDtfGSDxyom0240/SpdFvNZZYLOzmvVvmmP7my1GSRWJY4ARfmlCM
cDDrzluVyxfT+tP8/vt3J5pK2v8AWv8Al+fY9Nh8U2lxpZ1O3vbKWwCNIbtJQ0W1c5beDjAw
cnPaobLxppepwCfTtV027iaUQCSC5V1MhGQmQ33sdutc54nvrDUvhn4hu9JngubeXTrkieBg
ySHy2BIYcN0xkZ6e1ZMvh/VrrTNR1m9itre+Ntava21lO0oLWzGVWZ2RMsxO3G3AAHJzw3GC
eq0Vg5pWWurv+n+Z3eoeMdN0hWbVdT06xVSqsbm4WMAtkqDuYddrY9cH0qWDxNbXNvbT213Z
zQ3ZxbyRyhlmOCcIQcNwpPHYH0rzCXVbL7PoXim/uY7S01PXzcie6cRKkP2aaOLJbG0FVU4P
dj61LBHby69b3tkuNKvvELzW7RrhZv8AiXyiSVMdQzBiGH3vvDOclcsddP603+8fNLv0b/P/
ACPQoPGulXTXC22raZM1rIsU4juVYwuzbVVsN8pLcAHknirkevLNczW8MtvJPb7fOiVstHuG
RuGcjI5Ga8bvtQWTwvNoOg6pp+q21ibBbHVLdQ/2cfa41SGbadrMMBuCuQDlR1PdeE5rb+xJ
9OmjeDUbUkalC775GkbJMu4AFg/3lYAccYBBUCjFpu39f1+m4nKS6nR2Pi2x1Se4h0zULC8l
tW2XEdvMsjQtkjDAE7TkHr6GobfxzpF5bXVxaaxpc8FmM3MsV0jLAOfvkNheh6+leYrexz6B
caDpN1beItJ06C2P2rT1DyC1EyiS2lCZDuY1JwuCwyCo4J6TVtX8J+IPD8jWniHT4YrRoZRe
wSo6WjLIrRiQ/dUblHysRn2PIOWFtv6/r/h+5zSvudjZeKrPUo4ZNOvrG7S4VnhaCYOJFUhW
KkHkAkAkdCRUMnjbSotYGky6tpiakSFFm1ygmJIyBs3buRz0rifD2rya34q0q6lW2Zha6jH9
pswRDdhZbYecmcnafqeQRkjk52r32lSz+O9DuZoJ9SvZ4xaaeGDTzObWHYyJnPDAHd0XaSSA
CQ+WNk7dL/iOLk3a/wDVz1SLXVnlmjglt5JIG2SojZMbYBwwB4OCDg9iKWPWxNLNFDJBJJAw
SVFbJjYgMAwzwcEHnsRXl+t+JdT05dUF5r0dhDYX8UTMJbeGaRPsiOyQmZSjOXYthsZGQGFG
k6tcJ8QtTgluZNO0+4vYH+0Soga5mNrBtt23DCEgk8AFiMKRg5FGDdrf1p/X4E807Xb6XPQr
/wAbaVpV7FZ6pq2mWV1MAY4Li5SN3BOAQrMCckYrS/tOb+7H+R/xrzrVdW0XTviFqkGv3Vqk
d3otvGttMwLXX72cFEj6yE5xtAJOQMc1z76x4i0J9A0aXVLHRUh0y3cf2ndpbi4k3FXiJaGT
eVUICqMjfNnJyCEowfT+tf8AIbc1fXb/ACX+Z7Dca39ktpLi7eCCCJS8ksp2qijqSScAe9PX
VJWUMojIIyCAef1rzO/8Ra3FpmtW8V40d54fs7uW6n8lD5rbGNscFccr85wByuOh5vWmuy3H
i6W01LXRp80Xl/YtKzCn9oI0QYyfOpdvnLr+7K42c0csOwNzXXv+n+Z3/wDac392P8j/AI1p
RMXhRj1ZQTivIvhz4i1fXLmdtZ1fTriRoA8unxXaNPZybsFTEIUaMDJBDtIcgfN1J9bt/wDj
2i/3B/Ks6sYqKaNKblzOL6ElFFFc5uFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQ
AUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFF
FFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARz/wCrH++v/oQrwDxb/wAun/A/
/Za9/n/1Y/31/wDQhXgHi3/l0/4H/wCy16OWf73D5/kzzsz/AN0n8vzRt6R/zAv+vqz/APRi
V7RXi+kf8wL/AK+rP/0Yle0VxVf4kvVnbS/hx9EFFFFZmgUVm3OpvY6okV7GqWk+FhnB6P8A
3W9M9v8AONKgAJwMngVTh1ewuJlihuo3dvugHh/oeh/Cqmv3QOmXNtErPKyYwOh9V/EcfjXK
w3k2qXyQxq4naQYyW/vAg4Iwm0Dt1+tAjd8Q+D7TxLF5OqIJIllMigSMpB59PrXOJ8FfDUch
kit5Y3ZWQsl3KCQRgjg9CDiul8dXFza+FxLZTSwy/brJd8TFW2m6iDDI7FSQfYmsfXvE134f
8YatPFFLfxQ6fpyJZCfYvmTXcsW4ZyA2CPrtAz6Xzc268vwF7Ncr/rrb9Tc0zw2mkaXb6fY7
Ut7dBHGpckgD3NWv7Mm/vR/mf8K5mTxfezXMNpeaOkOr2+rmw8mHVJBb7zaNOjlxGC6EYBVk
4POCVGcKTx1rNr8M/D+s6tAlzqbxC+aOyu5/MmiRAWcpFbMuCGKsHAjUsp3g7SLVWVvu/En2
Mb/15/5Hof8AZk396P8AM/4Uf2ZN/ej/ADP+FYvjMnUG8L2y3N5bW9/qqpN9ku5LZ3T7NM+0
vGytjKqcA9qx4Lq/0fVpIzqdzc6Zo+tx2zPc3DO3kXEC4R2zlyksiEM+W2nk9ye2n1/rb/MX
sYWuu1/z/wAjsv7Mm/vR/mf8KP7Mm/vR/mf8K4e2in8Ra74f/tLUNUS21WDUdQEVrqM9thN8
AgGYnU4WNhx0yzHvWhpeo397oFposmoXFxdS6ncWf25XCyvbQStukJXGDtURlhzuYHjsKtPT
+utvwB0YpX/rr/kdR/Zk396P8z/hR/Zk396P8z/hWHodi3iWS51jUtR1FLiDUJ4ILe2vZYIr
dYpWRVMakLITt3HzA2d2B8uBXPQi6tdKuvElvqup/b4vEktt5MuoSyQTQm+MPk+S7GNRtIAK
qCCBg9QRVpu39dv8/wDK4OjFX9bfn/kd7/Zk396P8z/hR/Zk396P8z/hXN+O9fFx4Q1GPTF1
eOe2vbSGTy4J7J5A11GrLFM4jDbhkblfHI5AOayLCe/l02DTlv8AU7Gx1XXXtAl1dvJe2USQ
szwtMWYhnkibDBzhZAVb7uBVpv8Ar0/z/rQHRilf+trnd/2ZN/ej/M/4Uf2ZN/ej/M/4VwPi
oX2kW2saBpGsajFCw02WGd7ySae0aa88pwJXYuVYLnBP94dDgHiXxRqmqaNo8djdS2F3aXdr
JrH2ZypV/tSW5gJH8LP5h9xH6NRGtKVrdXb+vQHRiv6+77zvv7Mm/vR/mf8ACj+zJv70f5n/
AArUoo9tMPYxMv8Asyb+9H+Z/wAKP7Mm/vR/mf8ACtSij20w9jEy/wCzJv70f5n/AAo/syb+
9H+Z/wAK1KKPbTD2MTL/ALMm/vR/mf8ACj+zJv70f5n/AArUoo9tMPYxMv8Asyb+9H+Z/wAK
P7Mm/vR/mf8ACtSij20w9jEy/wCzJv70f5n/AArSiUpCinqqgHFOoqJTctyowUdgoooqCwoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigCOf/Vj/AH1/9CFeAeLf+XT/AIH/AOy17/P/AKsf76/+hCvAPFv/AC6f8D/9
lr0cs/3uHz/JnnZn/uk/l+aNvSP+YF/19Wf/AKMSvaK8X0j/AJgX/X1Z/wDoxK9oriq/xJer
O2l/Dj6IKKKKzNCi+mJNqovbmRpfLAEMTD5Yz3b3PvV6iigDzDxT8L9c17X7u/svErWUU77l
iG/5OAOzCoPDfwn17RfEGm3934m+1RWk5lkTMuZlIwFOXK4HXp3r1aigVrlbUtOtNX02fT9S
gW4tbhCksT9GB/l9RyKy7fwZodvZT2otppkuJop5pLm8mnlkeJlaPMjuXIUqMLnHXjk1u0Ue
YzLbw3pL6kb9rTNybtb0v5j/AOuWLyQ2M4/1fy46d8Z5rMk+HXhmWwisns7n7NCkkSRjULgA
RvjdFxJzGdo/dn5RjgCunooHdmXq/hzTdcs7W21COfZaSiWBre7lt3jcKVBDxsrfdZh1701v
C+jP4buNBeyV9OukdJ4mdi02/wC8zOTuZiTksTuJ5zmtaigW1vIxdT8JaRqzWTXMd1E9hG0V
s9nfT2rRo23K5idSQdi8HPSrNlodjp11FNZRCFILYWsEEahY4U3ZO0AcZO3P+6PfOjRQHSxi
T+ENGuNYfUzBcRXMrK8wt7yaGOdl4BliRwkhwAMupyAAeABTbPwXodjqrahBbTtM073ISa8m
lhjmcktIkTuURiWb5lUH5iO5rdooWmwFXUdNtNWs/suoRebD5kcu3cV+ZHDqcgg8MoP4VTvP
DGkXxvjc2m437RvcFZXUl4wAki4I2OuBh1w3yrz8oxrUUAYkHg/RINPlsxaSSRzzx3E0k9zL
LNLJGysjPK7F22lVwCxAAx04qabwxo05vTJYR5vrmK6uWUlTLLEUMbEg548teOnHPU51aKP6
/r7kAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUU
UAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAB
RRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUARz/wCrH++v/oQr
wDxb/wAun/A//Za9/n/1Y/31/wDQhXgHi3/l0/4H/wCy16OWf73D5/kzzsz/AN0n8vzRt6R/
zAv+vqz/APRiV7RXi+kf8wL/AK+rP/0Yle0VxVf4kvVnbS/hx9EFFFFZmgUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRR
QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAF
FFFABRRRQAUUUUARz/6sf76/+hCvAPFv/Lp/wP8A9lr3+f8A1Y/31/8AQhXgHi3/AJdP+B/+
y16OWf73D5/kzzsz/wB0n8vzRt6R/wAwL/r6s/8A0Yle0V474ftLi8bRltYmlMUttM+0fdRX
VmJ+gFeveevpJ/37b/CuKr/El6s7aX8OPoiSio/PX0k/79t/hR56+kn/AH7b/CszQkoqPz19
JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/f
tv8ACgCSio/PX0k/79t/hR56+kn/AH7b/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0
k/79t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8A
ftv8KAJKKj89fST/AL9t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP
+/bf4UeevpJ/37b/AAoAkoqPz19JP+/bf4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9
+2/woAkoqPz19JP+/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/
79t/hR56+kn/AH7b/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ft
v8KAJKKj89fST/v23+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/
AL9t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/
AAoAkoqPz19JP+/bf4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+
/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/79t/hR56+kn/AH7b
/CgCSio/PX0k/wC/bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8KAJKKj89fST/v2
3+FHnr6Sf9+2/wAKAJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/AL9t/hR56+kn/ftv
8KAJKKj89fST/v23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/AAoAkoqPz19JP+/b
f4UeevpJ/wB+2/woAkoqPz19JP8Av23+FHnr6Sf9+2/woAkoqPz19JP+/bf4UeevpJ/37b/C
gCSio/PX0k/79t/hR56+kn/ftv8ACgCSio/PX0k/79t/hR56+kn/AH7b/CgCSio/PX0k/wC/
bf4UeevpJ/37b/CgCSio/PX0k/79t/hR56+kn/ftv8KAJKKj89fST/v23+FHnr6Sf9+2/wAK
AJKKj89fST/v23+FHnr6Sf8Aftv8KAJKKj89fST/AL9t/hR56+kn/ftv8KAJKKj89fST/v23
+FHnr6Sf9+2/woAJ/wDVj/fX/wBCFeAeLf8Al0/4H/7LXvskgdQqq+d69UI7j2rwLxb/AMun
/A//AGWvRyz/AHuHz/JnnZn/ALpP5fmjt/ASK5hDqGH2JeCM/wB2u38iL/nkn/fIrifAH3of
+vJf/Za7quKr/El6s7aX8OPoiPyIv+eSf98ijyIv+eSf98ipKKzNCPyIv+eSf98ijyIv+eSf
98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98i
jyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyI
v+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fI
qSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8i
L/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/n
kn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKko
oAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/3yKPIi/5
5J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI/Ii/55J/
3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf98ipKKAI
/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98ijyIv+eSf
98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIo8iL/nkn/fIqSigCPyIv+eSf98i
jyIv+eSf98ipKKAI/Ii/55J/3yKPIi/55J/3yKkooAj8iL/nkn/fIpoij85l8tMBQR8o96mq
Mf8AHw/+4v8AM0AHkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEf
kRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8A
PJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf88k/75FHkRf8APJP++RUlFAEfkRf8
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
1PtXdl+GnTxMZNrr+TOHMMTCphpRSfT80f/Z
--------------050505080603030902010907
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--------------050505080603030902010907--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:30:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:30:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrFF-00074v-Mg; Tue, 15 Sep 2015 14:30:05 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbrFE-00074o-Vw
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:30:05 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	2F/D5-03763-C6B28F55; Tue, 15 Sep 2015 14:30:04 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1442327402!44531430!1
X-Originating-IP: [209.85.220.54]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29143 invoked from network); 15 Sep 2015 14:30:03 -0000
Received: from mail-pa0-f54.google.com (HELO mail-pa0-f54.google.com)
	(209.85.220.54)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 14:30:03 -0000
Received: by padhy16 with SMTP id hy16so178374660pad.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 07:30:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=4JN5CMQUkOuxSCUbG+PuPc4adDY5OtkdqAntq3oXePA=;
	b=fmXD4kc50N2owGfT+2go0XAxJZCnhuiyKZNchmaNW4NcuQ5W39Ur9DR5rQAfwHgMco
	sBTFKwZcqpvwO0/rD2oGFDtQxgm3eW8P68LdbCh2ebmyl0b5OlQ9nWD3zevU2nmKhQ9P
	q9rfX/wG/9/onHWqkzLl+WK6QdFHcdJDJN3EZ281aZFlbzE/RX+KtWbJRXS56lRwwnGd
	FDt2PdacuZgBAUTPvNerB14Q3MHhGBQeLcv3fr13dgqERkKcNaoFp+YHPTuUE6ex6B2n
	Bz7ohZRzXQwbuPbcOXtYaQ1JlqRKrLS3ZdUS7iDkrcILPj76z7+TDNROcRGjU9Pu8tUR
	5mSQ==
X-Received: by 10.69.0.166 with SMTP id az6mr47325872pbd.168.1442327401995;
	Tue, 15 Sep 2015 07:30:01 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	gq7sm22601754pac.5.2015.09.15.07.30.00
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 07:30:01 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 15:29:52 +0100
Message-Id: <1442327392-11684-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Cope with zero-length binary values
	in the registry
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

It appears that it is legitimate for the registry to contain zero-length
binary values, so the registry access code needs to cope with them and
the settings copy code needs to allow for them too.

Reported-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/registry.c | 21 +++++++++++++++------
 src/xenvif/settings.c |  3 ++-
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index f903922..23b948b 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -30,6 +30,7 @@
  */
 
 #include <ntddk.h>
+#include <stdlib.h>
 
 #include "registry.h"
 #include "assert.h"
@@ -937,25 +938,30 @@ RegistryQueryBinaryValue(
     if (!NT_SUCCESS(status))
         goto fail4;
 
+    *Buffer = NULL;
+
     switch (Partial->Type) {
     case REG_BINARY:
+        *Length = Partial->DataLength;
+
+        if (*Length == 0)
+            break;
+
         *Buffer = __RegistryAllocate(Partial->DataLength);
 
         status = STATUS_NO_MEMORY;
         if (*Buffer == NULL)
             break;
 
-        *Length = Partial->DataLength;
         RtlCopyMemory(*Buffer, Partial->Data, Partial->DataLength);
         break;
 
     default:
         status = STATUS_INVALID_PARAMETER;
-        *Buffer = NULL;
         break;
     }
 
-    if (*Buffer == NULL)
+    if (!NT_SUCCESS(status))
         goto fail5;
 
     __RegistryFree(Partial);
@@ -996,7 +1002,7 @@ RegistryUpdateBinaryValue(
         goto fail1;
 
     Partial = __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data) +
-                                 Length);
+                                 __min(Length, 1));
 
     status = STATUS_NO_MEMORY;
     if (Partial == NULL)
@@ -1004,8 +1010,11 @@ RegistryUpdateBinaryValue(
 
     Partial->TitleIndex = 0;
     Partial->Type = REG_BINARY;
-    Partial->DataLength = Length;
-    RtlCopyMemory(Partial->Data, Buffer, Partial->DataLength);
+
+    if (Length != 0) {
+        Partial->DataLength = Length;
+        RtlCopyMemory(Partial->Data, Buffer, Partial->DataLength);
+    }
 
     status = ZwSetValueKey(Key,
                            &Unicode,
diff --git a/src/xenvif/settings.c b/src/xenvif/settings.c
index 96b06a2..3ce4771 100644
--- a/src/xenvif/settings.c
+++ b/src/xenvif/settings.c
@@ -119,7 +119,8 @@ SettingsCopyInterfaceValue(
                                              ValueName->Buffer,
                                              Value,
                                              Length);
-            RegistryFreeBinaryValue(Value);
+            if (Length != 0)
+                RegistryFreeBinaryValue(Value);
         }
 
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:30:07 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:30:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrFF-00074v-Mg; Tue, 15 Sep 2015 14:30:05 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZbrFE-00074o-Vw
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:30:05 +0000
Received: from [85.158.137.68] by server-16.bemta-3.messagelabs.com id
	2F/D5-03763-C6B28F55; Tue, 15 Sep 2015 14:30:04 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1442327402!44531430!1
X-Originating-IP: [209.85.220.54]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29143 invoked from network); 15 Sep 2015 14:30:03 -0000
Received: from mail-pa0-f54.google.com (HELO mail-pa0-f54.google.com)
	(209.85.220.54)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 14:30:03 -0000
Received: by padhy16 with SMTP id hy16so178374660pad.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 15 Sep 2015 07:30:02 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=4JN5CMQUkOuxSCUbG+PuPc4adDY5OtkdqAntq3oXePA=;
	b=fmXD4kc50N2owGfT+2go0XAxJZCnhuiyKZNchmaNW4NcuQ5W39Ur9DR5rQAfwHgMco
	sBTFKwZcqpvwO0/rD2oGFDtQxgm3eW8P68LdbCh2ebmyl0b5OlQ9nWD3zevU2nmKhQ9P
	q9rfX/wG/9/onHWqkzLl+WK6QdFHcdJDJN3EZ281aZFlbzE/RX+KtWbJRXS56lRwwnGd
	FDt2PdacuZgBAUTPvNerB14Q3MHhGBQeLcv3fr13dgqERkKcNaoFp+YHPTuUE6ex6B2n
	Bz7ohZRzXQwbuPbcOXtYaQ1JlqRKrLS3ZdUS7iDkrcILPj76z7+TDNROcRGjU9Pu8tUR
	5mSQ==
X-Received: by 10.69.0.166 with SMTP id az6mr47325872pbd.168.1442327401995;
	Tue, 15 Sep 2015 07:30:01 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id
	gq7sm22601754pac.5.2015.09.15.07.30.00
	(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 15 Sep 2015 07:30:01 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 15 Sep 2015 15:29:52 +0100
Message-Id: <1442327392-11684-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH for 8.1] Cope with zero-length binary values
	in the registry
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

It appears that it is legitimate for the registry to contain zero-length
binary values, so the registry access code needs to cope with them and
the settings copy code needs to allow for them too.

Reported-by: Rafal Wojdyla <omeg@invisiblethingslab.com>
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/registry.c | 21 +++++++++++++++------
 src/xenvif/settings.c |  3 ++-
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index f903922..23b948b 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -30,6 +30,7 @@
  */
 
 #include <ntddk.h>
+#include <stdlib.h>
 
 #include "registry.h"
 #include "assert.h"
@@ -937,25 +938,30 @@ RegistryQueryBinaryValue(
     if (!NT_SUCCESS(status))
         goto fail4;
 
+    *Buffer = NULL;
+
     switch (Partial->Type) {
     case REG_BINARY:
+        *Length = Partial->DataLength;
+
+        if (*Length == 0)
+            break;
+
         *Buffer = __RegistryAllocate(Partial->DataLength);
 
         status = STATUS_NO_MEMORY;
         if (*Buffer == NULL)
             break;
 
-        *Length = Partial->DataLength;
         RtlCopyMemory(*Buffer, Partial->Data, Partial->DataLength);
         break;
 
     default:
         status = STATUS_INVALID_PARAMETER;
-        *Buffer = NULL;
         break;
     }
 
-    if (*Buffer == NULL)
+    if (!NT_SUCCESS(status))
         goto fail5;
 
     __RegistryFree(Partial);
@@ -996,7 +1002,7 @@ RegistryUpdateBinaryValue(
         goto fail1;
 
     Partial = __RegistryAllocate(FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data) +
-                                 Length);
+                                 __min(Length, 1));
 
     status = STATUS_NO_MEMORY;
     if (Partial == NULL)
@@ -1004,8 +1010,11 @@ RegistryUpdateBinaryValue(
 
     Partial->TitleIndex = 0;
     Partial->Type = REG_BINARY;
-    Partial->DataLength = Length;
-    RtlCopyMemory(Partial->Data, Buffer, Partial->DataLength);
+
+    if (Length != 0) {
+        Partial->DataLength = Length;
+        RtlCopyMemory(Partial->Data, Buffer, Partial->DataLength);
+    }
 
     status = ZwSetValueKey(Key,
                            &Unicode,
diff --git a/src/xenvif/settings.c b/src/xenvif/settings.c
index 96b06a2..3ce4771 100644
--- a/src/xenvif/settings.c
+++ b/src/xenvif/settings.c
@@ -119,7 +119,8 @@ SettingsCopyInterfaceValue(
                                              ValueName->Buffer,
                                              Value,
                                              Length);
-            RegistryFreeBinaryValue(Value);
+            if (Length != 0)
+                RegistryFreeBinaryValue(Value);
         }
 
         break;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:33:19 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:33:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrIM-0007Sv-Rh; Tue, 15 Sep 2015 14:33:18 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZbrIL-0007Sj-3K
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:33:17 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	BD/09-01143-C2C28F55; Tue, 15 Sep 2015 14:33:16 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1442327594!17619365!1
X-Originating-IP: [157.55.234.68]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18299 invoked from network); 15 Sep 2015 14:33:14 -0000
Received: from mail-db3on0068.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.68)
	by server-16.tower-27.messagelabs.com with AES256-SHA encrypted SMTP;
	15 Sep 2015 14:33:14 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Tue, 15 Sep 2015 14:33:12 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Tue, 15 Sep 2015 14:33:12 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J0=
Date: Tue, 15 Sep 2015 14:33:12 +0000
Message-ID: <DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1478;
	5:qaCShfalpGjJeoq3kTJfs9fCjyxwIEVl6DWFzeUntEn9WEWf+tCsuySyb690J0TJ6uQzHZ3I9bOn8OvszRHfbGRQbyxGIaNZDq/gC6+4THXgIGVsIQrZcWKM2NLdwq6X6yetXE+HYLm5vkyHqxLG2w==;
	24:HQ8C8BUaNW+ygX5cue6SiZFMI2vrWq6i6F1iJyAQZ4Jmc6V191Fc1owoYZ3tsbQDYoSmjNQaHjnGESZS/ZAHFHPjTcEJAfEfc/ck0L0zKzc=;
	20:hu7EwjSRjK6OThREPQXzUL6vnrEG3pex7DN4Lp4+AvgAuC8HtwSepjaAn1TTAkKimnWHdX/ejauDd7TFqS1Xuw==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1478;
x-microsoft-antispam-prvs: <DB5PR04MB1478F3D26DEC9C71EA4F6A49C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(8121501046)(520075)(5005006)(520078)(3002001);
	SRVR:DB5PR04MB1478; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1478; 
x-forefront-prvs: 070092A9D3
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(189002)(51914003)(3905003)(199003)(53754006)(5002640100001)(107886002)(4001540100001)(86362001)(97736004)(10400500002)(5001860100001)(92566002)(15975445007)(5001830100001)(5001770100001)(19617315012)(102836002)(64706001)(5004730100002)(66066001)(77096005)(81156007)(40100003)(62966003)(68736005)(5007970100001)(76576001)(11100500001)(5001960100002)(77156002)(122556002)(19580405001)(106116001)(19580395003)(33656002)(189998001)(106356001)(105586002)(74316001)(2950100001)(2900100001)(19627405001)(5003600100002)(76176999)(16236675004)(19625215002)(87936001)(54356999)(50986999)(5890100001)(46102003)(2501003)(101416001)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1478;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Sep 2015 14:33:12.5824 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1478
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4330845411925600826=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4330845411925600826==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 15 September 2015 09:59<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Joel,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/<span style=3D"">currentcontrolset</span>=
/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Cheers,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> win-pv-devel@lists.xenpr=
oject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt"><font color=3D"gray" face=3D"Cambria" size=
=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;Cambria&quot;,&quo=
t;serif&quot;; color:gray">Zynstra is a private limited company registered =
in England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immedia</span></font></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_--


--===============4330845411925600826==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4330845411925600826==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:33:19 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:33:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrIM-0007Sv-Rh; Tue, 15 Sep 2015 14:33:18 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZbrIL-0007Sj-3K
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:33:17 +0000
Received: from [193.109.254.147] by server-10.bemta-14.messagelabs.com id
	BD/09-01143-C2C28F55; Tue, 15 Sep 2015 14:33:16 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-16.tower-27.messagelabs.com!1442327594!17619365!1
X-Originating-IP: [157.55.234.68]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18299 invoked from network); 15 Sep 2015 14:33:14 -0000
Received: from mail-db3on0068.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.68)
	by server-16.tower-27.messagelabs.com with AES256-SHA encrypted SMTP;
	15 Sep 2015 14:33:14 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Tue, 15 Sep 2015 14:33:12 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Tue, 15 Sep 2015 14:33:12 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J0=
Date: Tue, 15 Sep 2015 14:33:12 +0000
Message-ID: <DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1478;
	5:qaCShfalpGjJeoq3kTJfs9fCjyxwIEVl6DWFzeUntEn9WEWf+tCsuySyb690J0TJ6uQzHZ3I9bOn8OvszRHfbGRQbyxGIaNZDq/gC6+4THXgIGVsIQrZcWKM2NLdwq6X6yetXE+HYLm5vkyHqxLG2w==;
	24:HQ8C8BUaNW+ygX5cue6SiZFMI2vrWq6i6F1iJyAQZ4Jmc6V191Fc1owoYZ3tsbQDYoSmjNQaHjnGESZS/ZAHFHPjTcEJAfEfc/ck0L0zKzc=;
	20:hu7EwjSRjK6OThREPQXzUL6vnrEG3pex7DN4Lp4+AvgAuC8HtwSepjaAn1TTAkKimnWHdX/ejauDd7TFqS1Xuw==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1478;
x-microsoft-antispam-prvs: <DB5PR04MB1478F3D26DEC9C71EA4F6A49C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(8121501046)(520075)(5005006)(520078)(3002001);
	SRVR:DB5PR04MB1478; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1478; 
x-forefront-prvs: 070092A9D3
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(189002)(51914003)(3905003)(199003)(53754006)(5002640100001)(107886002)(4001540100001)(86362001)(97736004)(10400500002)(5001860100001)(92566002)(15975445007)(5001830100001)(5001770100001)(19617315012)(102836002)(64706001)(5004730100002)(66066001)(77096005)(81156007)(40100003)(62966003)(68736005)(5007970100001)(76576001)(11100500001)(5001960100002)(77156002)(122556002)(19580405001)(106116001)(19580395003)(33656002)(189998001)(106356001)(105586002)(74316001)(2950100001)(2900100001)(19627405001)(5003600100002)(76176999)(16236675004)(19625215002)(87936001)(54356999)(50986999)(5890100001)(46102003)(2501003)(101416001)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1478;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; MX:1; A:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Sep 2015 14:33:12.5824 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1478
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4330845411925600826=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4330845411925600826==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounce=
s@lists.xenproject.org] On Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
1">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 15 September 2015 09:59<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Joel,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Offline removal should be quite possible. The thing that needs to be=
 cleaned up to make sure the image will reboot are the &#8216;unplug&#8217;=
 values that are used early on in boot to request unplug of emulated device=
s in QEMU. Look under HKLM/system/<span style=3D"">currentcontrolset</span>=
/services/xen
 and you should see a key called &#8216;Unplug&#8217;. If you delete that k=
ey then the next reboot should use emulated devices and so should be fine w=
ith no PV drivers.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Cheers,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 win-pv-devel-bounces@lists.xenproject.org [mailto:win-pv-devel-bounces@lis=
ts.xenproject.org]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> win-pv-devel@lists.xenpr=
oject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt"><font color=3D"gray" face=3D"Cambria" size=
=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;Cambria&quot;,&quo=
t;serif&quot;; color:gray">Zynstra is a private limited company registered =
in England and Wales (registered number 07864369). Our registered
 office and Headquarters are at The Innovation Centre, Broad Quay, Bath, BA=
1 1UD. This email, its contents and any attachments are confidential. If yo=
u have received this message in error please delete it from your system and=
 advise the sender immedia</span></font></p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB1478295A30F1808E5C370756C65C0DB5PR04MB1478eurp_--


--===============4330845411925600826==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4330845411925600826==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:40:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:40:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrPL-0008II-1o; Tue, 15 Sep 2015 14:40:31 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbrPJ-0008IA-Ud
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:40:30 +0000
Received: from [85.158.137.68] by server-14.bemta-3.messagelabs.com id
	14/1B-05979-CDD28F55; Tue, 15 Sep 2015 14:40:28 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1442328027!44535879!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4629 invoked from network); 15 Sep 2015 14:40:27 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 14:40:27 -0000
X-IronPort-AV: E=Sophos;i="5.17,536,1437436800"; d="scan'208,217";a="2994523"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQA==
Date: Tue, 15 Sep 2015 14:40:18 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4409724978320381499=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4409724978320381499==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Thanks. It would be good to confirm it actually works J

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal

Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel
________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EFCC.D6D51500"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-alt:Wingdings;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-alt:Wingdings;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Thanks. It would be good to confirm it actually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;mso-ascii-font-family:Calibr=
i;mso-hansi-font-family:Calibri;mso-bidi-font-family:&quot;Times New Roman&=
quot;;color:#1F497D;mso-char-type:symbol;mso-symbol-font-family:Wingdings">=
<span style=3D"mso-char-type:symbol;mso-symbol-font-family:Wingdings">J</sp=
an></span></font><font size=3D"2" color=3D"#1f497d" face=3D"Calibri"><span =
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&=
quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"><o:p>=
</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<o:p></o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black">=
<span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black"><span style=3D"color:black"><o:p></o:p></span></fon=
t></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black"><span style=3D"co=
lor:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_--


--===============4409724978320381499==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4409724978320381499==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 15 14:40:31 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 15 Sep 2015 14:40:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZbrPL-0008II-1o; Tue, 15 Sep 2015 14:40:31 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=69347d9cf=Paul.Durrant@citrix.com>)
	id 1ZbrPJ-0008IA-Ud
	for win-pv-devel@lists.xenproject.org; Tue, 15 Sep 2015 14:40:30 +0000
Received: from [85.158.137.68] by server-14.bemta-3.messagelabs.com id
	14/1B-05979-CDD28F55; Tue, 15 Sep 2015 14:40:28 +0000
X-Env-Sender: prvs=69347d9cf=Paul.Durrant@citrix.com
X-Msg-Ref: server-8.tower-31.messagelabs.com!1442328027!44535879!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 4629 invoked from network); 15 Sep 2015 14:40:27 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-8.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	15 Sep 2015 14:40:27 -0000
X-IronPort-AV: E=Sophos;i="5.17,536,1437436800"; d="scan'208,217";a="2994523"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQA==
Date: Tue, 15 Sep 2015 14:40:18 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4409724978320381499=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4409724978320381499==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Thanks. It would be good to confirm it actually works J

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal

Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel
________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0EFCC.D6D51500"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-alt:Wingdings;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-alt:Wingdings;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Thanks. It would be good to confirm it actually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;mso-ascii-font-family:Calibr=
i;mso-hansi-font-family:Calibri;mso-bidi-font-family:&quot;Times New Roman&=
quot;;color:#1F497D;mso-char-type:symbol;mso-symbol-font-family:Wingdings">=
<span style=3D"mso-char-type:symbol;mso-symbol-font-family:Wingdings">J</sp=
an></span></font><font size=3D"2" color=3D"#1f497d" face=3D"Calibri"><span =
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&=
quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"><o:p>=
</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<o:p></o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black">=
<span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black"><span style=3D"color:black"><o:p></o:p></span></fon=
t></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black"><span style=3D"co=
lor:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EAAMSPEX01CL01cit_--


--===============4409724978320381499==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4409724978320381499==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 10:26:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 10:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zc9um-0005Qq-Ue; Wed, 16 Sep 2015 10:26:12 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1Zc9ul-0005Ql-AH
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 10:26:11 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	9A/A7-24494-2C349F55; Wed, 16 Sep 2015 10:26:10 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1442399166!32638036!1
X-Originating-IP: [157.55.234.60]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 691 invoked from network); 16 Sep 2015 10:26:07 -0000
Received: from mail-db3on0060.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.60)
	by server-16.tower-206.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 10:26:07 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1479.eurprd04.prod.outlook.com (10.162.221.149) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 10:26:04 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Wed, 16 Sep 2015 10:26:04 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRude
Date: Wed, 16 Sep 2015 10:26:04 +0000
Message-ID: <DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1479;
	5:pdKLT+Yht9BvDorkZWNI6MtlhuWUqM92e969ExzlDTE+yYrlYoZIdd1VAER4galxPg3jZI0A+WJwg/eH++WMsUXABsyhSKk7IwRjZGNRDOxwRXMFAHmjHWwx5WniS4O1/G88l4n7WxpiGh7qsYp4dg==;
	24:VM8meG5BTSPXJovic4vepOvUkkPiUidoxeauMfeDfzJopYtoavv0z8n3Gw887tlWgccEFepdgr3QRMR2NoVfc1qKlHc5qTcjEUlcjse03L8=;
	20:AH7dKno8s38jPi+ZKJYf81KkVogMx3J66RpoFO5NIzUdTIFjGajgKvugjOOiziqQLGIwMiKib3Mf+JVo122fkg==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1479;
x-microsoft-antispam-prvs: <DB5PR04MB1479E20733A966571E6296F4C65B0@DB5PR04MB1479.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(520075)(5005006)(520078)(520058)(8121501046)(3002001);
	SRVR:DB5PR04MB1479; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1479; 
x-forefront-prvs: 07013D7479
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(199003)(3905003)(53754006)(51914003)(189002)(19627405001)(5001860100001)(2501003)(2900100001)(77156002)(54356999)(105586002)(50986999)(4001540100001)(101416001)(106356001)(10400500002)(5002640100001)(86362001)(5001960100002)(19580405001)(19617315012)(16236675004)(5003600100002)(107886002)(2950100001)(106116001)(19580395003)(76576001)(66066001)(40100003)(92566002)(5890100001)(33656002)(62966003)(97736004)(76176999)(5001770100001)(87936001)(122556002)(68736005)(74316001)(15975445007)(77096005)(11100500001)(81156007)(93886004)(19625215002)(189998001)(5001830100001)(64706001)(102836002)(5007970100001)(46102003)(5004730100002)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1479;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2015 10:26:04.5077 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1479
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4790600746595325093=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4790600746595325093==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Hi Paul,


I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.


I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.


Cheers,

Joel


________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Thanks. It would be good to confirm it actually works J



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the =91unplug=92 values that =
are used early on in boot to request unplug of emulated devices in QEMU. Lo=
ok under HKLM/system/currentcontrolset/services/xen and you should see a ke=
y called =91Unplug=92. If you delete that key then the next reboot should u=
se emulated devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi Paul,</p>
<p><br>
</p>
<p>I have now got the 8.1.0-rc2 installed and working. I tried removing the=
 Unplug value you suggested and then rebooting but that value just seems to=
 reappeared and the drivers still seem to be in use - they are reported by =
driverquery and the devices appear
 in 'Computer Management'. I have also tried removing the drivers with Dism=
 and changing the Unplug value after removing the drivers with Dism which b=
oth resulted in an unbootable system like before.</p>
<p><br>
</p>
<p>I'll try the other suggestions people here made and see if those are any=
 help but is there anything you would recommend or some information I can f=
ind to help debug this? I only built the 8.1.0-rc2 code but I'm happy to re=
try with the code from master if
 there's been any changes in this area since the RC.</p>
<p><br>
</p>
<p>Cheers,</p>
<p>Joel<br>
</p>
<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 15 September 2015 15:40<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Thanks. It would be good to confirm it actually works
</span></font><font color=3D"#1f497d" face=3D"Wingdings" size=3D"2"><span s=
tyle=3D"font-size:11.0pt; font-family:Wingdings; color:#1F497D"><span style=
=3D"">J</span></span></font><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D"></span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<b><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-si=
ze:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:bl=
ack; font-weight:bold">From:</span></font></b><font color=3D"black" face=3D=
"Calibri" size=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Cal=
ibri&quot;,&quot;sans-serif&quot;; color:black">
 Paul Durrant &lt;<a style=3D"color: blue; text-decoration: underline;" hre=
f=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font></p>
<div>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Joel,</span></font><font color=3D"black=
"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Offline removal should be quite =
possible. The thing that needs to be cleaned up to make sure the image
 will reboot are the =91unplug=92 values that are used early on in boot to =
request unplug of emulated devices in QEMU. Look under HKLM/system/currentc=
ontrolset/services/xen and you should see a key called =91Unplug=92. If you=
 delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
<a style=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv=
-devel-bounces@lists.xenproject.org">
win-pv-devel-bounces@lists.xenproject.org</a> [<a title=3D"Ctrl&#43;Click o=
r tap to follow the link" style=3D"color: blue; text-decoration: underline;=
" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-d=
evel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a style=3D"color: blue;=
 text-decoration: underline;" href=3D"mailto:win-pv-devel@lists.xenproject.=
org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black"><span style=3D"co=
lor:black"></span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt; background:white"><font color=3D"gray" face=
=3D"Cambria" size=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;C=
ambria&quot;,&quot;serif&quot;; color:gray">Zynstra is a private limited co=
mpany registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black"></spa=
n></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_--


--===============4790600746595325093==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4790600746595325093==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 10:26:15 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 10:26:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zc9um-0005Qq-Ue; Wed, 16 Sep 2015 10:26:12 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1Zc9ul-0005Ql-AH
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 10:26:11 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	9A/A7-24494-2C349F55; Wed, 16 Sep 2015 10:26:10 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-16.tower-206.messagelabs.com!1442399166!32638036!1
X-Originating-IP: [157.55.234.60]
X-SpamReason: No, hits=0.3 required=7.0 tests=HTML_60_70,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 691 invoked from network); 16 Sep 2015 10:26:07 -0000
Received: from mail-db3on0060.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.60)
	by server-16.tower-206.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 10:26:07 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1479.eurprd04.prod.outlook.com (10.162.221.149) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 10:26:04 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Wed, 16 Sep 2015 10:26:04 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRude
Date: Wed, 16 Sep 2015 10:26:04 +0000
Message-ID: <DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1479;
	5:pdKLT+Yht9BvDorkZWNI6MtlhuWUqM92e969ExzlDTE+yYrlYoZIdd1VAER4galxPg3jZI0A+WJwg/eH++WMsUXABsyhSKk7IwRjZGNRDOxwRXMFAHmjHWwx5WniS4O1/G88l4n7WxpiGh7qsYp4dg==;
	24:VM8meG5BTSPXJovic4vepOvUkkPiUidoxeauMfeDfzJopYtoavv0z8n3Gw887tlWgccEFepdgr3QRMR2NoVfc1qKlHc5qTcjEUlcjse03L8=;
	20:AH7dKno8s38jPi+ZKJYf81KkVogMx3J66RpoFO5NIzUdTIFjGajgKvugjOOiziqQLGIwMiKib3Mf+JVo122fkg==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1479;
x-microsoft-antispam-prvs: <DB5PR04MB1479E20733A966571E6296F4C65B0@DB5PR04MB1479.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(520075)(5005006)(520078)(520058)(8121501046)(3002001);
	SRVR:DB5PR04MB1479; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1479; 
x-forefront-prvs: 07013D7479
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(199003)(3905003)(53754006)(51914003)(189002)(19627405001)(5001860100001)(2501003)(2900100001)(77156002)(54356999)(105586002)(50986999)(4001540100001)(101416001)(106356001)(10400500002)(5002640100001)(86362001)(5001960100002)(19580405001)(19617315012)(16236675004)(5003600100002)(107886002)(2950100001)(106116001)(19580395003)(76576001)(66066001)(40100003)(92566002)(5890100001)(33656002)(62966003)(97736004)(76176999)(5001770100001)(87936001)(122556002)(68736005)(74316001)(15975445007)(77096005)(11100500001)(81156007)(93886004)(19625215002)(189998001)(5001830100001)(64706001)(102836002)(5007970100001)(46102003)(5004730100002)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1479;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2015 10:26:04.5077 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1479
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4790600746595325093=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4790600746595325093==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_"

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Hi Paul,


I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.


I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.


Cheers,

Joel


________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Thanks. It would be good to confirm it actually works J



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the =91unplug=92 values that =
are used early on in boot to request unplug of emulated devices in QEMU. Lo=
ok under HKLM/system/currentcontrolset/services/xen and you should see a ke=
y called =91Unplug=92. If you delete that key then the next reboot should u=
se emulated devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi Paul,</p>
<p><br>
</p>
<p>I have now got the 8.1.0-rc2 installed and working. I tried removing the=
 Unplug value you suggested and then rebooting but that value just seems to=
 reappeared and the drivers still seem to be in use - they are reported by =
driverquery and the devices appear
 in 'Computer Management'. I have also tried removing the drivers with Dism=
 and changing the Unplug value after removing the drivers with Dism which b=
oth resulted in an unbootable system like before.</p>
<p><br>
</p>
<p>I'll try the other suggestions people here made and see if those are any=
 help but is there anything you would recommend or some information I can f=
ind to help debug this? I only built the 8.1.0-rc2 code but I'm happy to re=
try with the code from master if
 there's been any changes in this area since the RC.</p>
<p><br>
</p>
<p>Cheers,</p>
<p>Joel<br>
</p>
<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 15 September 2015 15:40<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Thanks. It would be good to confirm it actually works
</span></font><font color=3D"#1f497d" face=3D"Wingdings" size=3D"2"><span s=
tyle=3D"font-size:11.0pt; font-family:Wingdings; color:#1F497D"><span style=
=3D"">J</span></span></font><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D"></span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<b><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-si=
ze:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:bl=
ack; font-weight:bold">From:</span></font></b><font color=3D"black" face=3D=
"Calibri" size=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Cal=
ibri&quot;,&quot;sans-serif&quot;; color:black">
 Paul Durrant &lt;<a style=3D"color: blue; text-decoration: underline;" hre=
f=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font></p>
<div>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Joel,</span></font><font color=3D"black=
"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Offline removal should be quite =
possible. The thing that needs to be cleaned up to make sure the image
 will reboot are the =91unplug=92 values that are used early on in boot to =
request unplug of emulated devices in QEMU. Look under HKLM/system/currentc=
ontrolset/services/xen and you should see a key called =91Unplug=92. If you=
 delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
<a style=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv=
-devel-bounces@lists.xenproject.org">
win-pv-devel-bounces@lists.xenproject.org</a> [<a title=3D"Ctrl&#43;Click o=
r tap to follow the link" style=3D"color: blue; text-decoration: underline;=
" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-d=
evel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a style=3D"color: blue;=
 text-decoration: underline;" href=3D"mailto:win-pv-devel@lists.xenproject.=
org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black"><span style=3D"co=
lor:black"></span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt; background:white"><font color=3D"gray" face=
=3D"Cambria" size=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;C=
ambria&quot;,&quot;serif&quot;; color:gray">Zynstra is a private limited co=
mpany registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black"></spa=
n></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB1478C888513D5947E0E50D76C65B0DB5PR04MB1478eurp_--


--===============4790600746595325093==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4790600746595325093==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 10:30:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 10:30:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zc9yb-0006Nj-92; Wed, 16 Sep 2015 10:30:09 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=694cbda5f=Paul.Durrant@citrix.com>)
	id 1Zc9yZ-0006Ne-4z
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 10:30:07 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	10/12-06179-EA449F55; Wed, 16 Sep 2015 10:30:06 +0000
X-Env-Sender: prvs=694cbda5f=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1442399404!3389633!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14314 invoked from network); 16 Sep 2015 10:30:04 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Sep 2015 10:30:04 -0000
X-IronPort-AV: E=Sophos;i="5.17,538,1437436800"; d="scan'208,217";a="3075049"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dA=
Date: Wed, 16 Sep 2015 10:30:03 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2413641350145338907=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============2413641350145338907==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

Yes, you need to remove the drivers *and* the unplug keys... sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I'll also try to repro.
Assuming you're using qemu trad, I just need the qemu log from /var/log/xen=
.

  Cheers,

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal


Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F073.0B5094C0"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Yes, you need to remove the drivers *<b><span style=3D"font-weight:bold">a=
nd</span></b>*
 the unplug keys&#8230; sorry if that was not clear. Doing that should work=
 so could you send me logs of your failed VM boot? I&#8217;ll also try to r=
epro.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Assuming you&#8217;re using qemu
<span class=3D"SpellE">trad</span>, I just need the qemu log from /<span cl=
ass=3D"SpellE">var</span>/log/xen.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I have now got the 8.1.0-rc2 installed and wo=
rking. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I'll try the other suggestions people here ma=
de and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.<o:p></o:p></span></font></p=
>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black"><o:p>&nbsp;</o:p></span></f=
ont></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Thanks. It would be good to confirm it ac=
tually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></fon=
t><font color=3D"black"><span style=3D"color:black"><o:p></o:p></span></fon=
t></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
<o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font><font color=3D"black"><span style=3D"color:black"><o:p></=
o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
</span></font><font color=3D"black"><span style=3D"color:black"><o:p></o:p>=
</span></font></p>
<div>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black" =
face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailt=
o:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color=
:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_--


--===============2413641350145338907==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============2413641350145338907==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 10:30:09 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 10:30:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zc9yb-0006Nj-92; Wed, 16 Sep 2015 10:30:09 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=694cbda5f=Paul.Durrant@citrix.com>)
	id 1Zc9yZ-0006Ne-4z
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 10:30:07 +0000
Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id
	10/12-06179-EA449F55; Wed, 16 Sep 2015 10:30:06 +0000
X-Env-Sender: prvs=694cbda5f=Paul.Durrant@citrix.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1442399404!3389633!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 14314 invoked from network); 16 Sep 2015 10:30:04 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Sep 2015 10:30:04 -0000
X-IronPort-AV: E=Sophos;i="5.17,538,1437436800"; d="scan'208,217";a="3075049"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dA=
Date: Wed, 16 Sep 2015 10:30:03 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2413641350145338907=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============2413641350145338907==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

Yes, you need to remove the drivers *and* the unplug keys... sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I'll also try to repro.
Assuming you're using qemu trad, I just need the qemu log from /var/log/xen=
.

  Cheers,

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal


Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F073.0B5094C0"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
span.SpellE
	{mso-style-name:"";
	mso-spl-e:yes;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Yes, you need to remove the drivers *<b><span style=3D"font-weight:bold">a=
nd</span></b>*
 the unplug keys&#8230; sorry if that was not clear. Doing that should work=
 so could you send me logs of your failed VM boot? I&#8217;ll also try to r=
epro.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Assuming you&#8217;re using qemu
<span class=3D"SpellE">trad</span>, I just need the qemu log from /<span cl=
ass=3D"SpellE">var</span>/log/xen.<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Cheers,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I have now got the 8.1.0-rc2 installed and wo=
rking. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I'll try the other suggestions people here ma=
de and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.<o:p></o:p></span></font></p=
>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black"><o:p>&nbsp;</o:p></span></f=
ont></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Thanks. It would be good to confirm it ac=
tually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></fon=
t><font color=3D"black"><span style=3D"color:black"><o:p></o:p></span></fon=
t></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
<o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font><font color=3D"black"><span style=3D"color:black"><o:p></=
o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
</span></font><font color=3D"black"><span style=3D"color:black"><o:p></o:p>=
</span></font></p>
<div>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black" =
face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailt=
o:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color=
:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4EAMSPEX01CL01cit_--


--===============2413641350145338907==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============2413641350145338907==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 11:23:27 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 11:23:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcAoA-0003JH-5n; Wed, 16 Sep 2015 11:23:26 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZcAo9-0003JC-Ba
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 11:23:25 +0000
Received: from [85.158.139.211] by server-10.bemta-5.messagelabs.com id
	88/73-32110-C2159F55; Wed, 16 Sep 2015 11:23:24 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1442402602!35519045!1
X-Originating-IP: [157.55.234.71]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1988 invoked from network); 16 Sep 2015 11:23:23 -0000
Received: from mail-db3on0071.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.71)
	by server-12.tower-206.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 11:23:23 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1479.eurprd04.prod.outlook.com (10.162.221.149) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 11:23:20 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Wed, 16 Sep 2015 11:23:20 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dCAAAum/w==
Date: Wed, 16 Sep 2015 11:23:20 +0000
Message-ID: <DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1479;
	5:6+SuFBuzhqDGTYdyW8DkxviNoVp+hFWBzliv5qhTflCNbQD66vMWN8VVSZix6O2tsONFF4K7uj728I1BPDlDZbUONkkdUdCVQOB5r5cCyGezAu63da4D1U01I3IQHO+Sb275G4q4Hll5BelMq39cDQ==;
	24:HtZxLiPrHXQjH4fzmH00VU9Fwzr+RwlqA0EHwHUXOpRSDfjdRay3iGQHp7P6KfUtozwGoeuF/HnLBvXaiReVUJK5WsLc3k2yLjFsiGu73NM=;
	20:lSzdvumyTQOV7xonUikfRMIL4WQh8fakHBC2JHecc9JgLXKUO4jKk1+cxaeAjlcCkO++OxbqV+pR3JR3ZhO5fg==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1479;
x-microsoft-antispam-prvs: <DB5PR04MB1479F7EBCD57F6BC6FD1732BC65B0@DB5PR04MB1479.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(520075)(5005006)(520078)(520058)(8121501046)(3002001);
	SRVR:DB5PR04MB1479; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1479; 
x-forefront-prvs: 07013D7479
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(199003)(3905003)(53754006)(51914003)(189002)(51714002)(19627405001)(5001860100001)(2501003)(2900100001)(77156002)(105586002)(54356999)(50986999)(4001540100001)(101416001)(10400500002)(106356001)(5002640100001)(86362001)(5001960100002)(19617315012)(16236675004)(19580405001)(5003600100002)(107886002)(2950100001)(106116001)(19580395003)(76576001)(66066001)(40100003)(92566002)(5890100001)(33656002)(62966003)(97736004)(76176999)(5001770100001)(122556002)(87936001)(68736005)(74316001)(15975445007)(77096005)(11100500001)(81156007)(93886004)(19625215002)(189998001)(5001830100001)(64706001)(102836002)(5007970100001)(46102003)(5004730100002)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1479;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2015 11:23:20.5938 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1479
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============7639406512177657061=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============7639406512177657061==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_"

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Paul,


Just to be clear I've previously had success removing the drivers online us=
ing the uninstallers so I would assume that still works. The way I am remov=
ing the drivers at the moment is using Dism so that the process is fully of=
fline. I have tried also removing that unplug value after removing the driv=
ers with Dism which gives me the same windows blue screen (and then being r=
ebooted into automatic repair) as without modifying the Unplug value.


I am happy to send over the logs if this is something that should work but =
I don't want to waste your time if this is not something you hope to suppor=
t.


Cheers,

Joel


________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 16 September 2015 11:30
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Joel,



Yes, you need to remove the drivers *and* the unplug keys=85 sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I=92ll also try to repro.

Assuming you=92re using qemu trad, I just need the qemu log from /var/log/x=
en.



  Cheers,



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal



Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel



________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the =91unplug=92 values that =
are used early on in boot to request unplug of emulated devices in QEMU. Lo=
ok under HKLM/system/currentcontrolset/services/xen and you should see a ke=
y called =91Unplug=92. If you delete that key then the next reboot should u=
se emulated devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Paul,</p>
<p><br>
</p>
<p>Just to be clear I've previously had success removing the drivers online=
 using the uninstallers so I would assume that still works. The way I am re=
moving the drivers at the moment is using Dism so that the process is fully=
 offline. I have tried also removing
 that unplug value after removing the drivers with Dism which gives me the =
same windows blue screen (and then being rebooted into automatic repair) as=
 without modifying the Unplug value.</p>
<p><br>
</p>
<p>I am happy to send over the logs if this is something that should work b=
ut I don't want to waste your time if this is not something you hope to sup=
port.<br>
</p>
<p><br>
</p>
<p>Cheers,</p>
<p>Joel<br>
</p>
<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 16 September 2015 11:30<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Joel,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Yes, you need to remove the drivers *<b><span style=3D"font-weight:bo=
ld">and</span></b>* the unplug keys=85 sorry if that was not clear.
 Doing that should work so could you send me logs of your failed VM boot? I=
=92ll also try to repro.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Assuming you=92re using qemu
<span style=3D"">trad</span>, I just need the qemu log from /<span style=3D=
"">var</span>/log/xen.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Cheers,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi Paul,</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">I have now got the 8.1.0-rc2 installed an=
d working. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">I'll try the other suggestions people her=
e made and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Cheers,</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Joel</span></font></p>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<b><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-si=
ze:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:bl=
ack; font-weight:bold">From:</span></font></b><font color=3D"black" face=3D=
"Calibri" size=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Cal=
ibri&quot;,&quot;sans-serif&quot;; color:black">
 Paul Durrant &lt;<a style=3D"color: blue; text-decoration: underline;" hre=
f=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font></p>
<div>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Thanks. It would be good to confirm it =
actually works
</span></font><font color=3D"#1f497d" face=3D"Wingdings" size=3D"2"><span s=
tyle=3D"font-size:11.0pt; font-family:Wingdings; color:#1F497D">J</span></f=
ont><font color=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
 Joel Noyce-Barnham [<a style=3D"color: blue; text-decoration: underline;" =
href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zy=
nstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a style=
=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-devel@l=
ists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
</span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font><font color=3D"black"><span style=3D"color:black"></span>=
</font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Calibri" siz=
e=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&q=
uot;sans-serif&quot;; color:black; font-weight:bold">From:</span></font></b=
><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-size=
:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:blac=
k">
 Paul Durrant &lt;<a title=3D"Ctrl&#43;Click or tap to follow the link" sty=
le=3D"color: blue; text-decoration: underline;" href=3D"mailto:Paul.Durrant=
@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font><font color=3D"black"><span style=3D"color:black"></span></fo=
nt></p>
<div>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Joel,</span></font><font color=3D"black=
" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;san=
s-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Offline removal should be quite =
possible. The thing that needs to be cleaned up to make sure the image
 will reboot are the =91unplug=92 values that are used early on in boot to =
request unplug of emulated devices in QEMU. Look under HKLM/system/currentc=
ontrolset/services/xen and you should see a key called =91Unplug=92. If you=
 delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
<a style=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv=
-devel-bounces@lists.xenproject.org">
win-pv-devel-bounces@lists.xenproject.org</a> [<a style=3D"color: blue; tex=
t-decoration: underline;" href=3D"mailto:win-pv-devel-bounces@lists.xenproj=
ect.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailto:win-pv-d=
evel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a style=3D"color: blue;=
 text-decoration: underline;" href=3D"mailto:win-pv-devel@lists.xenproject.=
org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; colo=
r:black"></span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot=
;Calibri&quot;,&quot;sans-serif&quot;; color:black"></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt; background:white"><font color=3D"gray" face=
=3D"Cambria" size=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;C=
ambria&quot;,&quot;serif&quot;; color:gray">Zynstra is a private limited co=
mpany registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black"></spa=
n></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_--


--===============7639406512177657061==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============7639406512177657061==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 11:23:27 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 11:23:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcAoA-0003JH-5n; Wed, 16 Sep 2015 11:23:26 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZcAo9-0003JC-Ba
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 11:23:25 +0000
Received: from [85.158.139.211] by server-10.bemta-5.messagelabs.com id
	88/73-32110-C2159F55; Wed, 16 Sep 2015 11:23:24 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-12.tower-206.messagelabs.com!1442402602!35519045!1
X-Originating-IP: [157.55.234.71]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 1988 invoked from network); 16 Sep 2015 11:23:23 -0000
Received: from mail-db3on0071.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.71)
	by server-12.tower-206.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 11:23:23 -0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com (10.162.221.148) by
	DB5PR04MB1479.eurprd04.prod.outlook.com (10.162.221.149) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 11:23:20 +0000
Received: from DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) by
	DB5PR04MB1478.eurprd04.prod.outlook.com ([10.162.221.148]) with mapi id
	15.01.0268.017; Wed, 16 Sep 2015 11:23:20 +0000
From: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dCAAAum/w==
Date: Wed, 16 Sep 2015 11:23:20 +0000
Message-ID: <DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
Accept-Language: en-GB, en-US
Content-Language: en-GB
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [193.63.64.25]
x-microsoft-exchange-diagnostics: 1; DB5PR04MB1479;
	5:6+SuFBuzhqDGTYdyW8DkxviNoVp+hFWBzliv5qhTflCNbQD66vMWN8VVSZix6O2tsONFF4K7uj728I1BPDlDZbUONkkdUdCVQOB5r5cCyGezAu63da4D1U01I3IQHO+Sb275G4q4Hll5BelMq39cDQ==;
	24:HtZxLiPrHXQjH4fzmH00VU9Fwzr+RwlqA0EHwHUXOpRSDfjdRay3iGQHp7P6KfUtozwGoeuF/HnLBvXaiReVUJK5WsLc3k2yLjFsiGu73NM=;
	20:lSzdvumyTQOV7xonUikfRMIL4WQh8fakHBC2JHecc9JgLXKUO4jKk1+cxaeAjlcCkO++OxbqV+pR3JR3ZhO5fg==
x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB5PR04MB1479;
x-microsoft-antispam-prvs: <DB5PR04MB1479F7EBCD57F6BC6FD1732BC65B0@DB5PR04MB1479.eurprd04.prod.outlook.com>
x-exchange-antispam-report-test: UriScan:(108003899814671);
x-exchange-antispam-report-cfa-test: BCL:0; PCL:0;
	RULEID:(601004)(520075)(5005006)(520078)(520058)(8121501046)(3002001);
	SRVR:DB5PR04MB1479; BCL:0; PCL:0; RULEID:; SRVR:DB5PR04MB1479; 
x-forefront-prvs: 07013D7479
x-forefront-antispam-report: SFV:NSPM;
	SFS:(10009020)(199003)(3905003)(53754006)(51914003)(189002)(51714002)(19627405001)(5001860100001)(2501003)(2900100001)(77156002)(105586002)(54356999)(50986999)(4001540100001)(101416001)(10400500002)(106356001)(5002640100001)(86362001)(5001960100002)(19617315012)(16236675004)(19580405001)(5003600100002)(107886002)(2950100001)(106116001)(19580395003)(76576001)(66066001)(40100003)(92566002)(5890100001)(33656002)(62966003)(97736004)(76176999)(5001770100001)(122556002)(87936001)(68736005)(74316001)(15975445007)(77096005)(11100500001)(81156007)(93886004)(19625215002)(189998001)(5001830100001)(64706001)(102836002)(5007970100001)(46102003)(5004730100002)(7059030);
	DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB1479;
	H:DB5PR04MB1478.eurprd04.prod.outlook.com; FPR:; SPF:None;
	PTR:InfoNoRecords; A:1; MX:1; LANG:en; 
received-spf: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
spamdiagnosticoutput: 1:23
spamdiagnosticmetadata: NSPM
MIME-Version: 1.0
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2015 11:23:20.5938 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 4c2b4c7a-32de-4e00-8ebe-361d80e7a665
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB1479
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============7639406512177657061=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============7639406512177657061==
Content-Language: en-GB
Content-Type: multipart/alternative;
	boundary="_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_"

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Paul,


Just to be clear I've previously had success removing the drivers online us=
ing the uninstallers so I would assume that still works. The way I am remov=
ing the drivers at the moment is using Dism so that the process is fully of=
fline. I have tried also removing that unplug value after removing the driv=
ers with Dism which gives me the same windows blue screen (and then being r=
ebooted into automatic repair) as without modifying the Unplug value.


I am happy to send over the logs if this is something that should work but =
I don't want to waste your time if this is not something you hope to suppor=
t.


Cheers,

Joel


________________________________
From: Paul Durrant <Paul.Durrant@citrix.com>
Sent: 16 September 2015 11:30
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org
Subject: RE: PV Drivers Offline Removal


Joel,



Yes, you need to remove the drivers *and* the unplug keys=85 sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I=92ll also try to repro.

Assuming you=92re using qemu trad, I just need the qemu log from /var/log/x=
en.



  Cheers,



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal



Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel



________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the =91unplug=92 values that =
are used early on in boot to request unplug of emulated devices in QEMU. Lo=
ok under HKLM/system/currentcontrolset/services/xen and you should see a ke=
y called =91Unplug=92. If you delete that key then the next reboot should u=
se emulated devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<style type=3D"text/css" style=3D"display:none;"><!-- P {margin-top:0;margi=
n-bottom:0;} --></style>
</head>
<body dir=3D"ltr">
<div id=3D"divtagdefaultwrapper" style=3D"font-size:12pt;color:#000000;back=
ground-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Paul,</p>
<p><br>
</p>
<p>Just to be clear I've previously had success removing the drivers online=
 using the uninstallers so I would assume that still works. The way I am re=
moving the drivers at the moment is using Dism so that the process is fully=
 offline. I have tried also removing
 that unplug value after removing the drivers with Dism which gives me the =
same windows blue screen (and then being rebooted into automatic repair) as=
 without modifying the Unplug value.</p>
<p><br>
</p>
<p>I am happy to send over the logs if this is something that should work b=
ut I don't want to waste your time if this is not something you hope to sup=
port.<br>
</p>
<p><br>
</p>
<p>Cheers,</p>
<p>Joel<br>
</p>
<br>
<br>
<div style=3D"color: rgb(0, 0, 0);">
<hr tabindex=3D"-1" style=3D"display:inline-block; width:98%">
<div id=3D"divRplyFwdMsg" dir=3D"ltr"><font style=3D"font-size:11pt" color=
=3D"#000000" face=3D"Calibri, sans-serif"><b>From:</b> Paul Durrant &lt;Pau=
l.Durrant@citrix.com&gt;<br>
<b>Sent:</b> 16 September 2015 11:30<br>
<b>To:</b> Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<br>
<b>Subject:</b> RE: PV Drivers Offline Removal</font>
<div>&nbsp;</div>
</div>
<div>
<div style=3D"">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Joel,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Yes, you need to remove the drivers *<b><span style=3D"font-weight:bo=
ld">and</span></b>* the unplug keys=85 sorry if that was not clear.
 Doing that should work so could you send me logs of your failed VM boot? I=
=92ll also try to repro.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">Assuming you=92re using qemu
<span style=3D"">trad</span>, I just need the qemu log from /<span style=3D=
"">var</span>/log/xen.</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Cheers,</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D"><span style=3D"">&nbsp;
</span>Paul</span></font></p>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font color=3D"#1f497d" face=3D"Calibri" size=3D"2"><span style=3D"font-siz=
e:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:#1F=
497D">&nbsp;</span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<b><font face=3D"Tahoma" size=3D"2"><span style=3D"font-size:10.0pt; font-f=
amily:&quot;Tahoma&quot;,&quot;sans-serif&quot;; font-weight:bold" lang=3D"=
EN-US">From:</span></font></b><font face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
" lang=3D"EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font></p>
</div>
</div>
<p style=3D"margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;T=
imes New Roman&quot;,&quot;serif&quot;;">
<font face=3D"Times New Roman" size=3D"3"><span style=3D"font-size:12.0pt">=
&nbsp;</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi Paul,</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">I have now got the 8.1.0-rc2 installed an=
d working. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">I'll try the other suggestions people her=
e made and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Cheers,</span></font></p>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Joel</span></font></p>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<b><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-si=
ze:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:bl=
ack; font-weight:bold">From:</span></font></b><font color=3D"black" face=3D=
"Calibri" size=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Cal=
ibri&quot;,&quot;sans-serif&quot;; color:black">
 Paul Durrant &lt;<a style=3D"color: blue; text-decoration: underline;" hre=
f=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font></p>
<div>
<p style=3D"background: white none repeat scroll 0% 0%; margin: 0cm 0cm 0.0=
001pt; font-size: 12pt; font-family: &quot;Times New Roman&quot;,&quot;seri=
f&quot;;">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">&nbsp;</span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Thanks. It would be good to confirm it =
actually works
</span></font><font color=3D"#1f497d" face=3D"Wingdings" size=3D"2"><span s=
tyle=3D"font-size:11.0pt; font-family:Wingdings; color:#1F497D">J</span></f=
ont><font color=3D"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black"><span style=3D"color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k"><span style=3D"color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
 Joel Noyce-Barnham [<a style=3D"color: blue; text-decoration: underline;" =
href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zy=
nstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a style=
=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-devel@l=
ists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
</span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel</span></font><font color=3D"black"><span style=3D"color:black"></span>=
</font></p>
<div>
<div style=3D"text-align: center; background: white none repeat scroll 0% 0=
%; margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: &quot;Times New =
Roman&quot;,&quot;serif&quot;;" align=3D"center">
<font color=3D"black" face=3D"Calibri" size=3D"3"><span style=3D"font-size:=
12.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black=
">
<hr align=3D"center" size=3D"2" width=3D"98%">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Calibri" siz=
e=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&q=
uot;sans-serif&quot;; color:black; font-weight:bold">From:</span></font></b=
><font color=3D"black" face=3D"Calibri" size=3D"2"><span style=3D"font-size=
:11.0pt; font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:blac=
k">
 Paul Durrant &lt;<a title=3D"Ctrl&#43;Click or tap to follow the link" sty=
le=3D"color: blue; text-decoration: underline;" href=3D"mailto:Paul.Durrant=
@citrix.com">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a s=
tyle=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv-dev=
el@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black">
</span></font><font color=3D"black"><span style=3D"color:black"></span></fo=
nt></p>
<div>
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">Joel,</span></font><font color=3D"black=
" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;san=
s-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Offline removal should be quite =
possible. The thing that needs to be cleaned up to make sure the image
 will reboot are the =91unplug=92 values that are used early on in boot to =
request unplug of emulated devices in QEMU. Look under HKLM/system/currentc=
ontrolset/services/xen and you should see a key called =91Unplug=92. If you=
 delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp; Paul</span></font><font color=3D=
"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black"></span></font></p>
<p style=3D"background:white"><font color=3D"#1f497d" face=3D"Calibri" size=
=3D"2"><span style=3D"font-size:11.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:#1F497D">&nbsp;</span></font><font color=3D"blac=
k" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sa=
ns-serif&quot;; color:black"></span></font></p>
<div style=3D"border:none; border-left:solid blue 1.5pt; padding:0cm 0cm 0c=
m 4.0pt">
<div>
<div style=3D"border:none; border-top:solid #B5C4DF 1.0pt; padding:3.0pt 0c=
m 0cm 0cm">
<p style=3D"background:white"><b><font color=3D"black" face=3D"Tahoma" size=
=3D"2"><span style=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quo=
t;sans-serif&quot;; color:black; font-weight:bold" lang=3D"EN-US">From:</sp=
an></font></b><font color=3D"black" face=3D"Tahoma" size=3D"2"><span style=
=3D"font-size:10.0pt; font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;=
; color:black" lang=3D"EN-US">
<a style=3D"color: blue; text-decoration: underline;" href=3D"mailto:win-pv=
-devel-bounces@lists.xenproject.org">
win-pv-devel-bounces@lists.xenproject.org</a> [<a style=3D"color: blue; tex=
t-decoration: underline;" href=3D"mailto:win-pv-devel-bounces@lists.xenproj=
ect.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailto:win-pv-d=
evel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a style=3D"color: blue;=
 text-decoration: underline;" href=3D"mailto:win-pv-devel@lists.xenproject.=
org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; colo=
r:black"></span></font></p>
</div>
</div>
<p style=3D"background:white"><font color=3D"black" face=3D"Times New Roman=
" size=3D"3"><span style=3D"font-size:12.0pt; color:black">&nbsp;</span></f=
ont><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot=
;Calibri&quot;,&quot;sans-serif&quot;; color:black"></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font color=3D"black" face=3D"Calibri" size=
=3D"3"><span style=3D"font-size:12.0pt; font-family:&quot;Calibri&quot;,&qu=
ot;sans-serif&quot;; color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a style=3D"color: blue; text-decoration: underline;" href=3D"h=
ttps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">ht=
tps://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a style=3D"color: b=
lue; text-decoration: underline;" href=3D"http://lists.xenproject.org/archi=
ves/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/ar=
chives/html/win-pv-devel/2015-03/msg00076.html</a>)
 discussing removing the drivers and I am able to successfully remove the d=
rivers from an online image but sadly our process requires that this remova=
l be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel</span></font></p>
</div>
<p style=3D"line-height:10.0pt; background:white"><font color=3D"gray" face=
=3D"Cambria" size=3D"1"><span style=3D"font-size:8.0pt; font-family:&quot;C=
ambria&quot;,&quot;serif&quot;; color:gray">Zynstra is a private limited co=
mpany registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;; color:black"></spa=
n></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_DB5PR04MB147876DB7629AAF830959BC2C65B0DB5PR04MB1478eurp_--


--===============7639406512177657061==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============7639406512177657061==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 11:51:08 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 11:51:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcBEx-0006qn-Sd; Wed, 16 Sep 2015 11:51:07 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=694cbda5f=Paul.Durrant@citrix.com>)
	id 1ZcBEw-0006qO-3E
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 11:51:06 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	27/40-10678-9A759F55; Wed, 16 Sep 2015 11:51:05 +0000
X-Env-Sender: prvs=694cbda5f=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-31.messagelabs.com!1442404262!43601724!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20019 invoked from network); 16 Sep 2015 11:51:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Sep 2015 11:51:03 -0000
X-IronPort-AV: E=Sophos;i="5.17,539,1437436800"; d="scan'208,217";a="3079798"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dCAAAum/4AAC58A
Date: Wed, 16 Sep 2015 11:51:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
	<DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4312166601436427436=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4312166601436427436==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

What BSOD code was it? I'm assuming 0x7B.

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 12:23
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal


Paul,



Just to be clear I've previously had success removing the drivers online us=
ing the uninstallers so I would assume that still works. The way I am remov=
ing the drivers at the moment is using Dism so that the process is fully of=
fline. I have tried also removing that unplug value after removing the driv=
ers with Dism which gives me the same windows blue screen (and then being r=
ebooted into automatic repair) as without modifying the Unplug value.



I am happy to send over the logs if this is something that should work but =
I don't want to waste your time if this is not something you hope to suppor=
t.



Cheers,

Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 16 September 2015 11:30
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Joel,



Yes, you need to remove the drivers *and* the unplug keys... sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I'll also try to repro.

Assuming you're using qemu trad, I just need the qemu log from /var/log/xen=
.



  Cheers,



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel



________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F07E.5A9E3E50"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>What BSOD code was it? I&#8217;m assuming 0x7B.<o:p></o:p></span></font></=
p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 12:2=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Just to be clear I've previously had success =
removing the drivers online using the uninstallers so I would
 assume that still works. The way I am removing the drivers at the moment i=
s using Dism so that the process is fully offline. I have tried also removi=
ng that unplug value after removing the drivers with Dism which gives me th=
e same windows blue screen (and
 then being rebooted into automatic repair) as without modifying the Unplug=
 value.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I am happy to send over the logs if this is s=
omething that should work but I don't want to waste your time
 if this is not something you hope to support.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black"><o:p>&nbsp;</o:p></span></f=
ont></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:3=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black">=
<span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Yes, you need to remove the drivers *<b><=
span style=3D"font-weight:bold">and</span></b>* the unplug keys&#8230;
 sorry if that was not clear. Doing that should work so could you send me l=
ogs of your failed VM boot? I&#8217;ll also try to repro.</span></font><fon=
t color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Assuming you&#8217;re using qemu trad, I =
just need the qemu log from /var/log/xen.</span></font><font color=3D"black=
"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
<o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I have now got the 8.1.0-rc2 installed and wo=
rking. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I'll try the other suggestions people here ma=
de and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.<o:p></o:p></span></font></p=
>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
</span></font><font color=3D"black"><span style=3D"color:black"><o:p></o:p>=
</span></font></p>
<div>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Thanks. It would be good to confirm it ac=
tually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:=
p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<o:p></o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com" title=3D"Ctrl&=
#43;Click or tap to follow the link">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black" =
face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailt=
o:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color=
:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_--


--===============4312166601436427436==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4312166601436427436==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 11:51:08 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 11:51:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcBEx-0006qn-Sd; Wed, 16 Sep 2015 11:51:07 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=694cbda5f=Paul.Durrant@citrix.com>)
	id 1ZcBEw-0006qO-3E
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 11:51:06 +0000
Received: from [85.158.137.68] by server-9.bemta-3.messagelabs.com id
	27/40-10678-9A759F55; Wed, 16 Sep 2015 11:51:05 +0000
X-Env-Sender: prvs=694cbda5f=Paul.Durrant@citrix.com
X-Msg-Ref: server-4.tower-31.messagelabs.com!1442404262!43601724!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.0 required=7.0 tests=HTML_MESSAGE,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 20019 invoked from network); 16 Sep 2015 11:51:03 -0000
Received: from smtp.eu.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-4.tower-31.messagelabs.com with RC4-SHA encrypted SMTP;
	16 Sep 2015 11:51:03 -0000
X-IronPort-AV: E=Sophos;i="5.17,539,1437436800"; d="scan'208,217";a="3079798"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: Joel Noyce-Barnham <joel.noyce-barnham@zynstra.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: PV Drivers Offline Removal
Thread-Index: AQHQ7xHHYeexgNh0gU2avNlJwgQ4/Z49SghAgAAH/J2AAFikQIABRudegAAE0dCAAAum/4AAC58A
Date: Wed, 16 Sep 2015 11:51:01 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>,
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
	<DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
In-Reply-To: <DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============4312166601436427436=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============4312166601436427436==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_"

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Joel,

What BSOD code was it? I'm assuming 0x7B.

  Paul

From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 12:23
To: Paul Durrant; win-pv-devel@lists.xenproject.org
Subject: Re: PV Drivers Offline Removal


Paul,



Just to be clear I've previously had success removing the drivers online us=
ing the uninstallers so I would assume that still works. The way I am remov=
ing the drivers at the moment is using Dism so that the process is fully of=
fline. I have tried also removing that unplug value after removing the driv=
ers with Dism which gives me the same windows blue screen (and then being r=
ebooted into automatic repair) as without modifying the Unplug value.



I am happy to send over the logs if this is something that should work but =
I don't want to waste your time if this is not something you hope to suppor=
t.



Cheers,

Joel

________________________________
From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 16 September 2015 11:30
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal


Joel,



Yes, you need to remove the drivers *and* the unplug keys... sorry if that =
was not clear. Doing that should work so could you send me logs of your fai=
led VM boot? I'll also try to repro.

Assuming you're using qemu trad, I just need the qemu log from /var/log/xen=
.



  Cheers,



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 16 September 2015 11:26
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Hi Paul,



I have now got the 8.1.0-rc2 installed and working. I tried removing the Un=
plug value you suggested and then rebooting but that value just seems to re=
appeared and the drivers still seem to be in use - they are reported by dri=
verquery and the devices appear in 'Computer Management'. I have also tried=
 removing the drivers with Dism and changing the Unplug value after removin=
g the drivers with Dism which both resulted in an unbootable system like be=
fore.



I'll try the other suggestions people here made and see if those are any he=
lp but is there anything you would recommend or some information I can find=
 to help debug this? I only built the 8.1.0-rc2 code but I'm happy to retry=
 with the code from master if there's been any changes in this area since t=
he RC.



Cheers,

Joel



________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 15:40
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Thanks. It would be good to confirm it actually works :)



  Paul



From: Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
Sent: 15 September 2015 15:33
To: Paul Durrant; win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lis=
ts.xenproject.org>
Subject: Re: PV Drivers Offline Removal



Paul,

Thanks for the reply.  The version of the drivers I am using doesn't seem t=
o have added that key to the registry so I will try the same tests with the=
 8.1.0-rc2 code which contains your recent changes to the unplug code. I wi=
ll let you know how I get on.

Cheers,
Joel

________________________________

From: Paul Durrant <Paul.Durrant@citrix.com<mailto:Paul.Durrant@citrix.com>=
>
Sent: 15 September 2015 09:59
To: Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org<mailto:win-pv-dev=
el@lists.xenproject.org>
Subject: RE: PV Drivers Offline Removal



Joel,



  Offline removal should be quite possible. The thing that needs to be clea=
ned up to make sure the image will reboot are the 'unplug' values that are =
used early on in boot to request unplug of emulated devices in QEMU. Look u=
nder HKLM/system/currentcontrolset/services/xen and you should see a key ca=
lled 'Unplug'. If you delete that key then the next reboot should use emula=
ted devices and so should be fine with no PV drivers.



  Cheers,



  Paul



From: win-pv-devel-bounces@lists.xenproject.org<mailto:win-pv-devel-bounces=
@lists.xenproject.org> [mailto:win-pv-devel-bounces@lists.xenproject.org] O=
n Behalf Of Joel Noyce-Barnham
Sent: 14 September 2015 18:21
To: win-pv-devel@lists.xenproject.org<mailto:win-pv-devel@lists.xenproject.=
org>
Subject: [win-pv-devel] PV Drivers Offline Removal



Hi All,

We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into EC2. This process relies on the fact that=
 we are able to remove the drivers from an offline image. Previously we hav=
e been removing the drivers successfully by converting the disk images to a=
 VHD file, using Dism to remove the drivers (https://technet.microsoft.com/=
en-GB/library/dd744355%28v=3Dws.10%29.aspx) and then importing the resultin=
g VHD into EC2. This works with the GPLPV drivers but with the new WINPV dr=
ivers it creates an unbootable image (the import into EC2 fails and the ima=
ge can also not be booted on the original hypervisor).

I have found some previous posts on this mailing list (http://lists.xenproj=
ect.org/archives/html/win-pv-devel/2015-03/msg00076.html) discussing removi=
ng the drivers and I am able to successfully remove the drivers from an onl=
ine image but sadly our process requires that this removal be performed off=
line.

I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only way we have so far found to make the imag=
e boot after removing the drivers with Dism is by manual modification of a =
large number of registry keys which seems like a far from ideal solution.

Thanks for any help,
Joel

Zynstra is a private limited company registered in England and Wales (regis=
tered number 07864369). Our registered office and Headquarters are at The I=
nnovation Centre, Broad Quay, Bath, BA1 1UD. This email, its contents and a=
ny attachments are confidential. If you have received this message in error=
 please delete it from your system and advise the sender immedia

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"ProgId" content=3D"Word.Document">
<meta name=3D"Generator" content=3D"Microsoft Word 14">
<meta name=3D"Originator" content=3D"Microsoft Word 14">
<link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F07E.5A9E3E50"><link r=
el=3D"Edit-Time-Data" href=3D"cid:editdata.mso"><!--[if !mso]><style>v\:* {=
behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemi=
Hidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D=
"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"he=
ading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"c=
aption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph F=
ont"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placehold=
er Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" Unhide=
WhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"=
/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" Unhid=
eWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"T=
OC Heading"/>
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-GB" link=3D"blue" vlink=3D"purple" style=3D"tab-interval:3=
6.0pt">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>Joel,<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
>What BSOD code was it? I&#8217;m assuming 0x7B.<o:p></o:p></span></font></=
p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><span style=3D"mso-spacerun:yes">&nbsp;
</span>Paul<o:p></o:p></span></font></p>
<p class=3D"MsoNormal"><font size=3D"2" color=3D"#1f497d" face=3D"Calibri">=
<span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;mso-bidi-font-family:&quot;Times New Roman&quot;;color:#1F497D"=
><o:p>&nbsp;</o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><font size=3D"2" face=3D"Tahoma"><span lang=3D"EN=
-US" style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-se=
rif&quot;;mso-fareast-font-family:&quot;Times New Roman&quot;;mso-ansi-lang=
uage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" face=
=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;font-family:&quo=
t;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times N=
ew Roman&quot;;mso-ansi-language:EN-US">
 Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com] <br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 12:2=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; win-pv-dev=
el@lists.xenproject.org<br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal<o:p></o:p></span></font></p>
</div>
</div>
<p class=3D"MsoNormal"><font size=3D"3" face=3D"Times New Roman"><span styl=
e=3D"font-size:12.0pt"><o:p>&nbsp;</o:p></span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Just to be clear I've previously had success =
removing the drivers online using the uninstallers so I would
 assume that still works. The way I am removing the drivers at the moment i=
s using Dism so that the process is fully offline. I have tried also removi=
ng that unplug value after removing the drivers with Dism which gives me th=
e same windows blue screen (and
 then being rebooted into automatic repair) as without modifying the Unplug=
 value.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I am happy to send over the logs if this is s=
omething that should work but I don't want to waste your time
 if this is not something you hope to support.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black"><o:p>&nbsp;</o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p class=3D"MsoNormal" style=3D"margin-bottom:12.0pt;background:white"><fon=
t size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:12.0=
pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-=
family:&quot;Times New Roman&quot;;color:black"><o:p>&nbsp;</o:p></span></f=
ont></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p class=3D"MsoNormal" style=3D"mso-outline-level:1;background:white"><b><f=
ont size=3D"2" color=3D"black" face=3D"Calibri"><span style=3D"font-size:11=
.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-fon=
t-family:&quot;Times New Roman&quot;;color:black;font-weight:bold">From:</s=
pan></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span styl=
e=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot=
;;mso-fareast-font-family:&quot;Times New Roman&quot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:3=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font=
-family:&quot;Times New Roman&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p class=3D"MsoNormal" style=3D"background:white"><font size=3D"3" color=3D=
"black" face=3D"Calibri"><span style=3D"font-size:12.0pt;font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times Ne=
w Roman&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black">=
<span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Yes, you need to remove the drivers *<b><=
span style=3D"font-weight:bold">and</span></b>* the unplug keys&#8230;
 sorry if that was not clear. Doing that should work so could you send me l=
ogs of your failed VM boot? I&#8217;ll also try to repro.</span></font><fon=
t color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Assuming you&#8217;re using qemu trad, I =
just need the qemu log from /var/log/xen.</span></font><font color=3D"black=
"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack"><span style=3D"color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
><span style=3D"color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 16 September 2015 11:2=
6<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black"><span style=3D"color:black">=
<o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;<o:p></o:p>=
</span></font></p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi Paul,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I have now got the 8.1.0-rc2 installed and wo=
rking. I tried removing the Unplug value you suggested and then
 rebooting but that value just seems to reappeared and the drivers still se=
em to be in use - they are reported by driverquery and the devices appear i=
n 'Computer Management'. I have also tried removing the drivers with Dism a=
nd changing the Unplug value after
 removing the drivers with Dism which both resulted in an unbootable system=
 like before.<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">I'll try the other suggestions people here ma=
de and see if those are any help but is there anything you would
 recommend or some information I can find to help debug this? I only built =
the 8.1.0-rc2 code but I'm happy to retry with the code from master if ther=
e's been any changes in this area since the RC.<o:p></o:p></span></font></p=
>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@c=
itrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:4=
0<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
</span></font><font color=3D"black"><span style=3D"color:black"><o:p></o:p>=
</span></font></p>
<div>
<p style=3D"background:white;background-attachment:scroll;background-positi=
on-x:0%;background-position-y:0%">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=
&nbsp;</span></font><font color=3D"black"><span style=3D"color:black"><o:p>=
</o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Thanks. It would be good to confirm it ac=
tually works
</span></font><font size=3D"2" color=3D"#1f497d" face=3D"Wingdings"><span s=
tyle=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
 Joel Noyce-Barnham [<a href=3D"mailto:joel.noyce-barnham@zynstra.com">mail=
to:joel.noyce-barnham@zynstra.com</a>]
<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 15:3=
3<br>
<b><span style=3D"font-weight:bold">To:</span></b> Paul Durrant; <a href=3D=
"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> Re: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:=
p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Paul,<br>
<br>
Thanks for the reply.&nbsp; The version of the drivers I am using doesn't s=
eem to have added that key to the registry so I will try the same tests wit=
h the 8.1.0-rc2 code which contains your recent changes to the unplug code.=
 I will let you know how I get on.<br>
<br>
Cheers,<br>
Joel<o:p></o:p></span></font></p>
<div>
<div class=3D"MsoNormal" align=3D"center" style=3D"text-align:center;backgr=
ound:white">
<font size=3D"3" color=3D"black" face=3D"Calibri"><span style=3D"font-size:=
12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-f=
ont-family:&quot;Times New Roman&quot;;color:black">
<hr size=3D"2" width=3D"98%" align=3D"center">
</span></font></div>
<div id=3D"divRplyFwdMsg">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Calibri"><span style=3D"font-size:11.0pt;font-family:&qu=
ot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:=
</span></font></b><font size=3D"2" color=3D"black" face=3D"Calibri"><span s=
tyle=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&q=
uot;;color:black">
 Paul Durrant &lt;<a href=3D"mailto:Paul.Durrant@citrix.com" title=3D"Ctrl&=
#43;Click or tap to follow the link">Paul.Durrant@citrix.com</a>&gt;<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 15 September 2015 09:5=
9<br>
<b><span style=3D"font-weight:bold">To:</span></b> Joel Noyce-Barnham; <a h=
ref=3D"mailto:win-pv-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> RE: PV Drivers Offl=
ine Removal</span></font><font color=3D"black" face=3D"Calibri"><span style=
=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
<o:p></o:p></span></font></p>
<div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">&nbsp;<o:p></o:p></span></font></p>
</div>
</div>
<div>
<div>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">Joel,</span></font><font color=3D"black" =
face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-=
serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Offline removal should be quite po=
ssible. The thing that needs to be cleaned up to make sure the image
 will reboot are the &#8216;unplug&#8217; values that are used early on in =
boot to request unplug of emulated devices in QEMU. Look under HKLM/system/=
currentcontrolset/services/xen and you should see a key called &#8216;Unplu=
g&#8217;. If you delete that key then the next reboot should
 use emulated devices and so should be fine with no PV drivers.</span></fon=
t><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;C=
alibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font><=
/p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Cheers,</span></font><font color=
=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,=
&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp; Paul</span></font><font color=3D"b=
lack" face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot=
;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
<p style=3D"background:white"><font size=3D"2" color=3D"#1f497d" face=3D"Ca=
libri"><span style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quo=
t;sans-serif&quot;;color:#1F497D">&nbsp;</span></font><font color=3D"black"=
 face=3D"Calibri"><span style=3D"font-family:&quot;Calibri&quot;,&quot;sans=
-serif&quot;;color:black"><o:p></o:p></span></font></p>
<div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm =
4.0pt">
<div>
<div style=3D"border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p style=3D"mso-outline-level:1;background:white"><b><font size=3D"2" color=
=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt;f=
ont-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-l=
anguage:EN-US;font-weight:bold">From:</span></font></b><font size=3D"2" col=
or=3D"black" face=3D"Tahoma"><span lang=3D"EN-US" style=3D"font-size:10.0pt=
;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi=
-language:EN-US">
<a href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-b=
ounces@lists.xenproject.org</a> [<a href=3D"mailto:win-pv-devel-bounces@lis=
ts.xenproject.org" title=3D"Ctrl&#43;Click or tap to follow the link">mailt=
o:win-pv-devel-bounces@lists.xenproject.org</a>]
<b><span style=3D"font-weight:bold">On Behalf Of </span></b>Joel Noyce-Barn=
ham<br>
<b><span style=3D"font-weight:bold">Sent:</span></b> 14 September 2015 18:2=
1<br>
<b><span style=3D"font-weight:bold">To:</span></b> <a href=3D"mailto:win-pv=
-devel@lists.xenproject.org">
win-pv-devel@lists.xenproject.org</a><br>
<b><span style=3D"font-weight:bold">Subject:</span></b> [win-pv-devel] PV D=
rivers Offline Removal</span></font><font color=3D"black" face=3D"Calibri">=
<span style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color=
:black"><o:p></o:p></span></font></p>
</div>
</div>
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Time=
s New Roman"><span style=3D"font-size:12.0pt;color:black">&nbsp;</span></fo=
nt><font color=3D"black" face=3D"Calibri"><span style=3D"font-family:&quot;=
Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font>=
</p>
<div id=3D"divtagdefaultwrapper">
<p style=3D"background:white"><font size=3D"3" color=3D"black" face=3D"Cali=
bri"><span style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;=
sans-serif&quot;;color:black">Hi All,<br>
<br>
We are currently using the GPLPV drivers but are hoping to move to the new =
Xen WINPV drivers as they are actively developed and have some new features=
 which we are interested in. We currently have a process where VMs can be m=
oved from our Xen hypervisor into
 EC2. This process relies on the fact that we are able to remove the driver=
s from an offline image. Previously we have been removing the drivers succe=
ssfully by converting the disk images to a VHD file, using Dism to remove t=
he drivers (<a href=3D"https://technet.microsoft.com/en-GB/library/dd744355=
%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%=
28v=3Dws.10%29.aspx</a>)
 and then importing the resulting VHD into EC2. This works with the GPLPV d=
rivers but with the new WINPV drivers it creates an unbootable image (the i=
mport into EC2 fails and the image can also not be booted on the original h=
ypervisor).<br>
<br>
I have found some previous posts on this mailing list (<a href=3D"http://li=
sts.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http:/=
/lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a>)=
 discussing removing the drivers and
 I am able to successfully remove the drivers from an online image but sadl=
y our process requires that this removal be performed offline.<br>
<br>
I am just wondering if anyone else is using Dism in windows to remove the P=
V drivers from an offline image? Or if anyone else has successfully removed=
 the WINPV drivers from an offline image at all? Any pointers anyone can gi=
ve would be appreciated. The only
 way we have so far found to make the image boot after removing the drivers=
 with Dism is by manual modification of a large number of registry keys whi=
ch seems like a far from ideal solution.<br>
<br>
Thanks for any help,<br>
Joel<o:p></o:p></span></font></p>
</div>
<p style=3D"line-height:10.0pt;background:white"><font size=3D"1" color=3D"=
gray" face=3D"Cambria"><span style=3D"font-size:8.0pt;font-family:&quot;Cam=
bria&quot;,&quot;serif&quot;;color:gray">Zynstra is a private limited compa=
ny registered in England and Wales (registered number 07864369).
 Our registered office and Headquarters are at The Innovation Centre, Broad=
 Quay, Bath, BA1 1UD. This email, its contents and any attachments are conf=
idential. If you have received this message in error please delete it from =
your system and advise the sender
 immedia</span></font><font color=3D"black" face=3D"Calibri"><span style=3D=
"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p><=
/o:p></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

--_000_9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECBAMSPEX01CL01cit_--


--===============4312166601436427436==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============4312166601436427436==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 12:38:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 12:38:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcBz2-0003N0-Fo; Wed, 16 Sep 2015 12:38:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZcBz1-0003Mv-H2
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 12:38:43 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	C7/4C-10715-2D269F55; Wed, 16 Sep 2015 12:38:42 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1442407120!50298283!1
X-Originating-IP: [157.55.234.94]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5103 invoked from network); 16 Sep 2015 12:38:40 -0000
Received: from mail-db3on0094.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.94)
	by server-6.tower-27.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 12:38:40 -0000
Received: from [192.168.11.79] (193.63.64.25) by
	HE1PR04MB1481.eurprd04.prod.outlook.com (10.163.176.19) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 12:38:35 +0000
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
	<DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
From: Joel Noyce Barnham <joel.noyce-barnham@zynstra.com>
Message-ID: <55F962C7.3080407@zynstra.com>
Date: Wed, 16 Sep 2015 13:38:31 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
X-Originating-IP: [193.63.64.25]
X-ClientProxiedBy: DB4PR04CA0036.eurprd04.prod.outlook.com (25.160.41.46) To
	HE1PR04MB1481.eurprd04.prod.outlook.com (25.163.176.19)
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	2:yFT67qhjPP5IOXHt1vSJDItpUpo6RaDV3C+zbCRkZH9f2KKfsIxnQpBsEJa2So5n33PkkinENxoort5Vlhuu+ohYPOy+zlB1zO2SnAFtUbxzhqiMBXlKfrf9jfXdCxztlMshhxPAAjAjslbZHRuPlJ9j8ynNXl7fECrU4cTew4k=;
	3:VAo7twjtI6Ln4P9CW9Wt8Shny7pSQ6cjVjD30WN2vvpyuGmWb4aj1uGDZxMedKyYIF7Ab36dsYKB4MaNicoNTtFBarUVEQAhMfVQzuIlfg83gdgstWaMjFR7iuzu21sLF1TD4zcrd8FwCmYXraKB8A==;
	25:8Qh1FTHzLL74pyxxfJaTNQlTuopyxIrjJ5FOhxa7fgpztk/Zc+GqRz9XabmZCOddAL+kBj1e1XLKeG54B+cUkbTTJs3EOkLTZShR0vX0cBn4LRS7W/Amqe9SJm0rc1r9CQ8iRnDzK8c4WhltLOr466BXXaI/R1StLRr73zIacLAKG/3DJcBB+8+B/1qmACCIetbcLHPVFhlb4GBWuaCgt20PGZN4vgJzIzqP0+IMdC21pG8M+si6uqq8Uk4b92XyWbrUN8ErRDPN7aV0NRQJKQ==;
	20:fCMk0vq5OqxxfvBO7/Yi/NDkhHqbss0XU6HOG/bULqKnSFn28eQEWdkU212egyKS2hRyam1P1muvxYRA2r4Rge371nCVlkF0aR/B5tUo994yzerXUC5V2VHKA2fXApEz8LVnePwG93K3OUCub06eF2WQJCg7VpqVZUJMyihueio=
X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR04MB1481;
X-Microsoft-Antispam-PRVS: <HE1PR04MB148141ED3A1FE08F964DF8F6C65B0@HE1PR04MB1481.eurprd04.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(108003899814671);
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
	RULEID:(601004)(520078)(5005006)(8121501046)(520075)(3002001);
	SRVR:HE1PR04MB1481; BCL:0; PCL:0; RULEID:; SRVR:HE1PR04MB1481; 
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	4:iCLYkD41YywWCy2Wtx/aM/UYvWlzx5okwUaKp5CoPs/A9feDZOXmm+291xn0g1frGkdAU2KzhhG83yiWXq6dJtoY+G6F59XIPLpbjNGzKhEd2UE17HrukTC82FD6yep1OGbH5u4Zlswm+bNrhIIUIaraH5wtmwvM/MxfRiuJt8SAxmrq6Sckl/LCyvKFLxkUnJsyF5CDtts3wzzmLy2vfWGj2RJ9hqhf6oibwYJMNtx2SHn2N0Oma8hRe3D1hJ0mM+ujEK6m3pFmxJx4chi96KKLcR+a9/7ScjDYyLqFfBXjRZsBsVaoyB7HEVi3RK6MHwiP1krUelLQJaaGDF+5Fm8Ko8VVU7IRqOO+29Y3SYc=
X-Forefront-PRVS: 07013D7479
X-Forefront-Antispam-Report: SFV:NSPM;
	SFS:(10009020)(979002)(6049001)(479174004)(189002)(199003)(53754006)(24454002)(51914003)(3905003)(51714002)(46102003)(19580405001)(64706001)(65816999)(2501003)(92566002)(5001960100002)(87266999)(107886002)(5001830100001)(5890100001)(83506001)(2950100001)(42186005)(97736004)(84326002)(65956001)(64126003)(15975445007)(77096005)(87976001)(86362001)(77156002)(65806001)(62966003)(66066001)(189998001)(68736005)(105586002)(93886004)(4001540100001)(5004730100002)(117156001)(512944002)(19617315012)(106356001)(50986999)(5001770100001)(5001920100001)(101416001)(5001860100001)(81156007)(40100003)(59896002)(122386002)(54356999)(19625215002)(16236675004)(33656002)(76176999)(80316001)(4001350100001)(19580395003)(36756003)(5007970100001)(7059030)(569005);
	DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR04MB1481; H:[192.168.11.79];
	FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; 
Received-SPF: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR04MB1481;
	23:Z/t13nb29VhkU8/9hw4oJb2Yw7P4TrcV4E9wSongj?=
	=?us-ascii?Q?Ruvm7NiputYD3g+qW8OXjVMmZD9prMJIbwOD/BDSTu1ZM5lfjMzRmRUFRZ/9?=
	=?us-ascii?Q?ZJpTjIZG7scnO4m7cA0UGEPSwYrjWcMZdYQ34PZIPws1w6YZJ7FtcCB8/xIa?=
	=?us-ascii?Q?t3O8ZnPzazUYILJdggM7CaRoJPD4V+iJnaT+Arry7bhDrqIaIaLVEyZefhwF?=
	=?us-ascii?Q?H4E1a4BvPYNSqiJwTjvokJ113c6wfu5yKzEHzVBjRmORJPt8ijrzZ84Sm4Vp?=
	=?us-ascii?Q?RKnyp5a82jm2gKa/rgbMnb63Xrf7Q1qVIyZSQTCFGg174MMbGmd62dYRzgJb?=
	=?us-ascii?Q?AKc5H6bPFUhMy7k6CVodOaO452uYSkSfrbKWhyx60XNOTdLU9KzXGdIFe4Gw?=
	=?us-ascii?Q?RJN/RPVWyifcjECA5bnQgej4WrxDCTUlIEOuDvI+PKxqYnJyoLzaipZx2mOp?=
	=?us-ascii?Q?2azdZGiDmBvX8v4p/ZNycS267s5u+R13e69ECMPpFutZmMx2wJUJvR2M07vm?=
	=?us-ascii?Q?Zb3qUu6M2rN8yCUFVbddrRnMh8iIh14l2wKrleAx11uMo8nIGZ1Hp7hxWjax?=
	=?us-ascii?Q?T61HigvtGT84+e0K5vekX4yaOnOsgGyp8kYgBoFHxab/Md19XH8FFIJSh+gR?=
	=?us-ascii?Q?OfOjNJlVEhzXX2MYkOExOxkBNKtKa5k9fDAxenuvYt+h569n2ZmhcDQl9V1F?=
	=?us-ascii?Q?gP5nJrm57ZuDttJfscFdhT8/CPZaMkE6i3L9MiBfiuY+q5uGbeVrjLQ3bnhI?=
	=?us-ascii?Q?wMChhhwzEaHyfJOiWaPKEG0SLhxFMi3gSSj5BeAYeEhiOAVGCHTe3hlZVOax?=
	=?us-ascii?Q?SRIpkk3SdCCe6QXjt8jNGQvQqQpTKt6PYnZ8Cxgdv6rDafJtKA7JtpxWkt+2?=
	=?us-ascii?Q?Bq/jcFlbh1Vr/pG1nc2NCmn9q1Yk/fQivVjqkzuwhSf9F+Uxx/OJIasDlwgb?=
	=?us-ascii?Q?farZp+gIs5cQTPD+C3v+qYPLU9gtL8s+mkXXvj/ooCbJO9hOlyUaCtAAvASL?=
	=?us-ascii?Q?JB5U6myBqpix0YR/XP9GPu09ho+0f1vR56nSuniABIwF+QvJqzEeGSt3IMfS?=
	=?us-ascii?Q?vxlB5Lqp3UlyeosNnuUL9BnCn0CtPu63uFdC1t0yawtm280Zc27KIMKXyUhB?=
	=?us-ascii?Q?dLc9oJfGj/HxvZ94hNTBYEs0xlF/T79JTpkHj3m8ZCxzPKMZvcpMARRn56Eg?=
	=?us-ascii?Q?D+IdV0qw7zn5zEvO6X13Rr57QryaqD0s4tqwfZeTS2EZeivhsZ6y35Un5mK/?=
	=?us-ascii?Q?BCo5ZhtMiPyEtjwy3XrsgK7eUovjoQLcnWl2XhJrxKmZHkbb5Sbe6nBh8bzL?=
	=?us-ascii?Q?8TAUcc5n7eIDq6XZT8K2Wga9e5EjhLlwKZnHX1NgB7Gm3n6VSIaz/8dKfIez?=
	=?us-ascii?Q?+3UGCbcNJYP2ZmyovunxT4PnCHUQSaYbvp3St5KG2PSZUPPVQRtMWNhZhd/L?=
	=?us-ascii?Q?C5aT+FrUmOC3b3Rrcg0MisaZ91CYjZTjHILjqVHCyZICwP51tJDfA3Ll3AWG?=
	=?us-ascii?Q?Lzy4fHf62ROur3ieDJlo9IvvAtldhIURs1O7ChkECahG71/EnSMBHxEr6s8f?=
	=?us-ascii?Q?eW25YeugLc5BvaaWKcW5BIZ2QqXwxT8AV80wwktE37Ok8CsZUe+4uHaz7Syf?=
	=?us-ascii?Q?jelEDaYwBux+f1pjn9YlDe9BH3b5/6/qTyPc2sZNmmoYLlQ9Ov0Zu9ZeRpGk?=
	=?us-ascii?Q?QKksIvb5S1Q8dOmCENBGg9vnFjTR7mUDJ87PdInirqqTDj7qTjdEGoWmnHL3?=
	=?us-ascii?Q?G0JY6wBLDxXsg11+Z6mggao3ze3Bg=3D=3D?=
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	5:uiRHPF6lRgV0x2jd9hvvBng9jGNCEHxfWwodp6gCosRenTiXRfVxmPP4kwS/c5Wr9TIoqlA15y8Z0/wjtCkXaQEdc8l1686QmhlrvjMF/0SCM331C6zLcDDPTf7v7AEpiZhS1I4EMkvr3QGV13fEeA==;
	24:qvnaNdoRIFuhTuoGPF7/bPmlbwGO/1ZDMu3wv4M4aPTSfzYKnLeGNNEJ9hlYWAerVVnUlQVdyB1QiBXYbOtGJ84Gk1DOEKwk8LAdnCmbIvo=;
	20:tXXGpx5vS8SaG4iYyJgsaEchFNMfkH3GZtX9dZxu4hLDiL9VIhm6BXq1SDlNrC/T51m9w7298LB47OfG6dESUg==
SpamDiagnosticOutput: 1:23
SpamDiagnosticMetadata: NSPM
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2015 12:38:35.7762 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR04MB1481
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============3862868129129591537=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============3862868129129591537==
Content-Type: multipart/alternative;
	boundary="------------030700080905090405030205"

--------------030700080905090405030205
Content-Type: text/plain; charset="windows-1252"; format=flowed
Content-Length: 7392
Content-Transfer-Encoding: quoted-printable

Sorry just resending this as I managed to hit 'Reply' rather than 'Reply 
All' and remove the list as a recipient.

Paul,

Yes, I see INACCESSIBLE_BOOT_DEVICE when it attempts to boot which seems 
to map to 0x7B.

Joel

On 16/09/15 12:51, Paul Durrant wrote:
>
> Joel,
>
> What BSOD code was it=3F I=92m assuming 0x7B.
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 16 September 2015 12:23
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org
> *Subject:* Re: PV Drivers Offline Removal
>
> Paul,
>
> Just to be clear I've previously had success removing the drivers 
> online using the uninstallers so I would assume that still works. The 
> way I am removing the drivers at the moment is using Dism so that the 
> process is fully offline. I have tried also removing that unplug value 
> after removing the drivers with Dism which gives me the same windows 
> blue screen (and then being rebooted into automatic repair) as without 
> modifying the Unplug value.
>
> I am happy to send over the logs if this is something that should work 
> but I don't want to waste your time if this is not something you hope 
> to support.
>
> Cheers,
>
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 16 September 2015 11:30
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Joel,
>
> Yes, you need to remove the drivers **and** the unplug keys=85 sorry if 
> that was not clear. Doing that should work so could you send me logs 
> of your failed VM boot=3F I=92ll also try to repro.
>
> Assuming you=92re using qemu trad, I just need the qemu log from 
> /var/log/xen.
>
> Cheers,
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 16 September 2015 11:26
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* Re: PV Drivers Offline Removal
>
> Hi Paul,
>
> I have now got the 8.1.0-rc2 installed and working. I tried removing 
> the Unplug value you suggested and then rebooting but that value just 
> seems to reappeared and the drivers still seem to be in use - they are 
> reported by driverquery and the devices appear in 'Computer 
> Management'. I have also tried removing the drivers with Dism and 
> changing the Unplug value after removing the drivers with Dism which 
> both resulted in an unbootable system like before.
>
> I'll try the other suggestions people here made and see if those are 
> any help but is there anything you would recommend or some information 
> I can find to help debug this=3F I only built the 8.1.0-rc2 code but I'm 
> happy to retry with the code from master if there's been any changes 
> in this area since the RC.
>
> Cheers,
>
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 15 September 2015 15:40
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Thanks. It would be good to confirm it actually works J
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 15 September 2015 15:33
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* Re: PV Drivers Offline Removal
>
> Paul,
>
> Thanks for the reply.  The version of the drivers I am using doesn't 
> seem to have added that key to the registry so I will try the same 
> tests with the 8.1.0-rc2 code which contains your recent changes to 
> the unplug code. I will let you know how I get on.
>
> Cheers,
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 15 September 2015 09:59
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Joel,
>
> Offline removal should be quite possible. The thing that needs to be 
> cleaned up to make sure the image will reboot are the =91unplug=92 values 
> that are used early on in boot to request unplug of emulated devices 
> in QEMU. Look under HKLM/system/currentcontrolset/services/xen and you 
> should see a key called =91Unplug=92. If you delete that key then the next 
> reboot should use emulated devices and so should be fine with no PV 
> drivers.
>
> Cheers,
>
> Paul
>
> *From:*win-pv-devel-bounces@lists.xenproject.org 
> <mailto:win-pv-devel-bounces@lists.xenproject.org> 
> [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of *Joel 
> Noyce-Barnham
> *Sent:* 14 September 2015 18:21
> *To:* win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
> Hi All,
>
> We are currently using the GPLPV drivers but are hoping to move to the 
> new Xen WINPV drivers as they are actively developed and have some new 
> features which we are interested in. We currently have a process where 
> VMs can be moved from our Xen hypervisor into EC2. This process relies 
> on the fact that we are able to remove the drivers from an offline 
> image. Previously we have been removing the drivers successfully by 
> converting the disk images to a VHD file, using Dism to remove the 
> drivers 
> (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx) 
> and then importing the resulting VHD into EC2. This works with the 
> GPLPV drivers but with the new WINPV drivers it creates an unbootable 
> image (the import into EC2 fails and the image can also not be booted 
> on the original hypervisor).
>
> I have found some previous posts on this mailing list 
> (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html) 
> discussing removing the drivers and I am able to successfully remove 
> the drivers from an online image but sadly our process requires that 
> this removal be performed offline.
>
> I am just wondering if anyone else is using Dism in windows to remove 
> the PV drivers from an offline image=3F Or if anyone else has 
> successfully removed the WINPV drivers from an offline image at all=3F 
> Any pointers anyone can give would be appreciated. The only way we 
> have so far found to make the image boot after removing the drivers 
> with Dism is by manual modification of a large number of registry keys 
> which seems like a far from ideal solution.
>
> Thanks for any help,
> Joel
>
> Zynstra is a private limited company registered in England and Wales 
> (registered number 07864369). Our registered office and Headquarters 
> are at The Innovation Centre, Broad Quay, Bath, BA1 1UD. This email, 
> its contents and any attachments are confidential. If you have 
> received this message in error please delete it from your system and 
> advise the sender immedia
>


--------------030700080905090405030205
Content-Type: text/html; charset="windows-1252"
Content-Length: 74884
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dwindows-1252"
      http-equiv=3D"Content-Type">
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    Sorry just resending this as I managed to hit 'Reply' rather than
    'Reply All' and remove the list as a recipient.<br>
    <br>
    Paul,<br>
    <br>
    Yes, I see INACCESSIBLE_BOOT_DEVICE when it attempts to boot which
    seems to map to 0x7B.<br>
    <br>
    Joel<br>
    <br>
    <div class=3D"moz-cite-prefix">On 16/09/15 12:51, Paul Durrant wrote:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html;
        charset=3Dwindows-1252">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F07E.5A9E3E50">
      <link rel=3D"Edit-Time-Data" href=3D"cid:editdata.mso">
      <!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Joel,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">What BSOD code was it=3F I=92m
              assuming 0x7B.<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Paul<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font face=3D"Tahoma" size=3D"2"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font
                  face=3D"Tahoma" size=3D"2"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US"> Joel Noyce-Barnham
                    [<a class=3D"moz-txt-link-freetext" href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a>] <br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    16 September 2015 12:23<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    Paul Durrant; <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    Re: PV Drivers Offline Removal<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font face=3D"Times New Roman" size=3D"3"><span
                style=3D"font-size:12.0pt"><o:p>=A0</o:p></span></font></p>
          <div id=3D"divtagdefaultwrapper">
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Paul,<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Just
                  to be clear I've previously had success removing the
                  drivers online using the uninstallers so I would
                  assume that still works. The way I am removing the
                  drivers at the moment is using Dism so that the
                  process is fully offline. I have tried also removing
                  that unplug value after removing the drivers with Dism
                  which gives me the same windows blue screen (and then
                  being rebooted into automatic repair) as without
                  modifying the Unplug value.<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I
                  am happy to send over the logs if this is something
                  that should work but I don't want to waste your time
                  if this is not something you hope to support.<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
            <p class=3D"MsoNormal"
              style=3D"margin-bottom:12.0pt;background:white"><font
                face=3D"Calibri" color=3D"black" size=3D"3"><span
                  style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                  New Roman&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <div>
              <div class=3D"MsoNormal"
                style=3D"text-align:center;background:white"
                align=3D"center">
                <font face=3D"Calibri" color=3D"black" size=3D"3"><span
                    style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;color:black">
                    <hr size=3D"2" width=3D"98%" align=3D"center">
                  </span></font></div>
              <div id=3D"divRplyFwdMsg">
                <p class=3D"MsoNormal"
                  style=3D"mso-outline-level:1;background:white"><b><font
                      face=3D"Calibri" color=3D"black" size=3D"2"><span
                        style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                        New Roman&quot;;color:black;font-weight:bold">From:</span></font></b><font
                    face=3D"Calibri" color=3D"black" size=3D"2"><span
                      style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New Roman&quot;;color:black"> Paul Durrant &lt;<a
                        moz-do-not-send=3D"true"
                        href=3D"mailto:Paul.Durrant@citrix.com"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                      <b><span style=3D"font-weight:bold">Sent:</span></b>
                      16 September 2015 11:30<br>
                      <b><span style=3D"font-weight:bold">To:</span></b>
                      Joel Noyce-Barnham; <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel@lists.xenproject.org">
                        win-pv-devel@lists.xenproject.org</a><br>
                      <b><span style=3D"font-weight:bold">Subject:</span></b>
                      RE: PV Drivers Offline Removal</span></font><font
                    face=3D"Calibri" color=3D"black"><span
                      style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New Roman&quot;;color:black">
                      <o:p></o:p></span></font></p>
                <div>
                  <p class=3D"MsoNormal" style=3D"background:white"><font
                      face=3D"Calibri" color=3D"black" size=3D"3"><span
                        style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                        New Roman&quot;;color:black">=A0<o:p></o:p></span></font></p>
                </div>
              </div>
              <div>
                <div>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Joel,</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Yes,
                        you need to remove the drivers *<b><span
                            style=3D"font-weight:bold">and</span></b>* the
                        unplug keys=85 sorry if that was not clear. Doing
                        that should work so could you send me logs of
                        your failed VM boot=3F I=92ll also try to repro.</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Assuming
                        you=92re using qemu trad, I just need the qemu log
                        from /var/log/xen.</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                        Cheers,</span></font><font color=3D"black"><span
                        style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                        Paul</span></font><font color=3D"black"><span
                        style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <div style=3D"border:none;border-left:solid blue
                    1.5pt;padding:0cm 0cm 0cm 4.0pt">
                    <div>
                      <div style=3D"border:none;border-top:solid #B5C4DF
                        1.0pt;padding:3.0pt 0cm 0cm 0cm">
                        <p style=3D"mso-outline-level:1;background:white"><b><font
                              face=3D"Tahoma" color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                lang=3D"EN-US">From:</span></font></b><font
                            face=3D"Tahoma" color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                              lang=3D"EN-US"> Joel Noyce-Barnham [<a
                                moz-do-not-send=3D"true"
                                href=3D"mailto:joel.noyce-barnham@zynstra.com"><a class=3D"moz-txt-link-freetext" href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a></a>]
                              <br>
                              <b><span style=3D"font-weight:bold">Sent:</span></b>
                              16 September 2015 11:26<br>
                              <b><span style=3D"font-weight:bold">To:</span></b>
                              Paul Durrant; <a moz-do-not-send=3D"true"
                                href=3D"mailto:win-pv-devel@lists.xenproject.org">
                                win-pv-devel@lists.xenproject.org</a><br>
                              <b><span style=3D"font-weight:bold">Subject:</span></b>
                              Re: PV Drivers Offline Removal</span></font><font
                            color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                      </div>
                    </div>
                    <p style=3D"background:white"><font face=3D"Times New
                        Roman" color=3D"black" size=3D"3"><span
                          style=3D"font-size:12.0pt;color:black">=A0<o:p></o:p></span></font></p>
                    <div id=3D"divtagdefaultwrapper">
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                            Paul,<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I
                            have now got the 8.1.0-rc2 installed and
                            working. I tried removing the Unplug value
                            you suggested and then rebooting but that
                            value just seems to reappeared and the
                            drivers still seem to be in use - they are
                            reported by driverquery and the devices
                            appear in 'Computer Management'. I have also
                            tried removing the drivers with Dism and
                            changing the Unplug value after removing the
                            drivers with Dism which both resulted in an
                            unbootable system like before.<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I'll
                            try the other suggestions people here made
                            and see if those are any help but is there
                            anything you would recommend or some
                            information I can find to help debug this=3F I
                            only built the 8.1.0-rc2 code but I'm happy
                            to retry with the code from master if
                            there's been any changes in this area since
                            the RC.<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
                      <p
style=3D"background:white;background-attachment:scroll;background-position-x:0%;background-position-y:0%"><font
                          face=3D"Calibri" color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0</span></font><font
                          color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                      <div>
                        <div class=3D"MsoNormal"
                          style=3D"text-align:center;background:white"
                          align=3D"center">
                          <font face=3D"Calibri" color=3D"black" size=3D"3"><span
                              style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                              New Roman&quot;;color:black">
                              <hr size=3D"2" width=3D"98%" align=3D"center">
                            </span></font></div>
                        <div id=3D"divRplyFwdMsg">
                          <p
                            style=3D"mso-outline-level:1;background:white"><b><font
                                face=3D"Calibri" color=3D"black" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:</span></font></b><font
                              face=3D"Calibri" color=3D"black" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                Paul Durrant &lt;<a
                                  moz-do-not-send=3D"true"
                                  href=3D"mailto:Paul.Durrant@citrix.com"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                                <b><span style=3D"font-weight:bold">Sent:</span></b>
                                15 September 2015 15:40<br>
                                <b><span style=3D"font-weight:bold">To:</span></b>
                                Joel Noyce-Barnham; <a
                                  moz-do-not-send=3D"true"
                                  href=3D"mailto:win-pv-devel@lists.xenproject.org">
                                  <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                <b><span style=3D"font-weight:bold">Subject:</span></b>
                                RE: PV Drivers Offline Removal</span></font><font
                              face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"></span></font><font
                              color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                          <div>
                            <p
style=3D"background:white;background-attachment:scroll;background-position-x:0%;background-position-y:0%"><font
                                face=3D"Calibri" color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0</span></font><font
                                color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                          </div>
                        </div>
                        <div>
                          <div>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Thanks.
                                  It would be good to confirm it
                                  actually works
                                </span></font><font face=3D"Wingdings"
                                color=3D"#1f497d" size=3D"2"><span
                                  style=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                  Paul</span></font><font face=3D"Calibri"
                                color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <div style=3D"border:none;border-left:solid
                              blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
                              <div>
                                <div style=3D"border:none;border-top:solid
                                  #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm
                                  0cm">
                                  <p
                                    style=3D"mso-outline-level:1;background:white"><b><font
                                        face=3D"Tahoma" color=3D"black"
                                        size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                          lang=3D"EN-US">From:</span></font></b><font
                                      face=3D"Tahoma" color=3D"black"
                                      size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                                        lang=3D"EN-US"> Joel Noyce-Barnham
                                        [<a moz-do-not-send=3D"true"
                                          href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a>]
                                        <br>
                                        <b><span
                                            style=3D"font-weight:bold">Sent:</span></b>
                                        15 September 2015 15:33<br>
                                        <b><span
                                            style=3D"font-weight:bold">To:</span></b>
                                        Paul Durrant; <a
                                          moz-do-not-send=3D"true"
                                          href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                        <b><span
                                            style=3D"font-weight:bold">Subject:</span></b>
                                        Re: PV Drivers Offline Removal</span></font><font
                                      face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                </div>
                              </div>
                              <p style=3D"background:white"><font
                                  face=3D"Times New Roman" color=3D"black"
                                  size=3D"3"><span
                                    style=3D"font-size:12.0pt;color:black">=A0</span></font><font
                                  face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                              <div id=3D"divtagdefaultwrapper">
                                <p style=3D"background:white"><font
                                    face=3D"Calibri" color=3D"black"
                                    size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Paul,<br>
                                      <br>
                                      Thanks for the reply.=A0 The version
                                      of the drivers I am using doesn't
                                      seem to have added that key to the
                                      registry so I will try the same
                                      tests with the 8.1.0-rc2 code
                                      which contains your recent changes
                                      to the unplug code. I will let you
                                      know how I get on.<br>
                                      <br>
                                      Cheers,<br>
                                      Joel<o:p></o:p></span></font></p>
                                <div>
                                  <div class=3D"MsoNormal"
                                    style=3D"text-align:center;background:white"
                                    align=3D"center">
                                    <font face=3D"Calibri" color=3D"black"
                                      size=3D"3"><span
                                        style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                                        New Roman&quot;;color:black">
                                        <hr size=3D"2" width=3D"98%"
                                          align=3D"center">
                                      </span></font></div>
                                  <div id=3D"divRplyFwdMsg">
                                    <p
                                      style=3D"mso-outline-level:1;background:white"><b><font
                                          face=3D"Calibri" color=3D"black"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:</span></font></b><font
                                        face=3D"Calibri" color=3D"black"
                                        size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                          Paul Durrant &lt;<a
                                            moz-do-not-send=3D"true"
                                            href=3D"mailto:Paul.Durrant@citrix.com"
                                            title=3D"Ctrl+Click or tap to
                                            follow the link"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                                          <b><span
                                              style=3D"font-weight:bold">Sent:</span></b>
                                          15 September 2015 09:59<br>
                                          <b><span
                                              style=3D"font-weight:bold">To:</span></b>
                                          Joel Noyce-Barnham; <a
                                            moz-do-not-send=3D"true"
                                            href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                          <b><span
                                              style=3D"font-weight:bold">Subject:</span></b>
                                          RE: PV Drivers Offline Removal</span></font><font
                                        face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                          <o:p></o:p></span></font></p>
                                    <div>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"black"
                                          size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                                    </div>
                                  </div>
                                  <div>
                                    <div>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Joel,</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Offline removal should be
                                            quite possible. The thing
                                            that needs to be cleaned up
                                            to make sure the image will
                                            reboot are the =91unplug=92
                                            values that are used early
                                            on in boot to request unplug
                                            of emulated devices in QEMU.
                                            Look under
                                            HKLM/system/currentcontrolset/services/xen
                                            and you should see a key
                                            called =91Unplug=92. If you
                                            delete that key then the
                                            next reboot should use
                                            emulated devices and so
                                            should be fine with no PV
                                            drivers.</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Cheers,</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Paul</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <div
                                        style=3D"border:none;border-left:solid
                                        blue 1.5pt;padding:0cm 0cm 0cm
                                        4.0pt">
                                        <div>
                                          <div
                                            style=3D"border:none;border-top:solid
                                            #B5C4DF 1.0pt;padding:3.0pt
                                            0cm 0cm 0cm">
                                            <p
                                              style=3D"mso-outline-level:1;background:white"><b><font
                                                  face=3D"Tahoma"
                                                  color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                                    lang=3D"EN-US">From:</span></font></b><font
                                                face=3D"Tahoma"
                                                color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                                                  lang=3D"EN-US">
                                                  <a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a></a>
                                                  [<a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org"
                                                    title=3D"Ctrl+Click or
                                                    tap to follow the
                                                    link"><a class=3D"moz-txt-link-freetext" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a></a>]
                                                  <b><span
                                                      style=3D"font-weight:bold">On
                                                      Behalf Of </span></b>Joel
                                                  Noyce-Barnham<br>
                                                  <b><span
                                                      style=3D"font-weight:bold">Sent:</span></b>
                                                  14 September 2015
                                                  18:21<br>
                                                  <b><span
                                                      style=3D"font-weight:bold">To:</span></b>
                                                  <a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                                  <b><span
                                                      style=3D"font-weight:bold">Subject:</span></b>
                                                  [win-pv-devel] PV
                                                  Drivers Offline
                                                  Removal</span></font><font
                                                face=3D"Calibri"
                                                color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                          </div>
                                        </div>
                                        <p style=3D"background:white"><font
                                            face=3D"Times New Roman"
                                            color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;color:black">=A0</span></font><font face=3D"Calibri"
                                            color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                        <div id=3D"divtagdefaultwrapper">
                                          <p style=3D"background:white"><font
                                              face=3D"Calibri"
                                              color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                                                All,<br>
                                                <br>
                                                We are currently using
                                                the GPLPV drivers but
                                                are hoping to move to
                                                the new Xen WINPV
                                                drivers as they are
                                                actively developed and
                                                have some new features
                                                which we are interested
                                                in. We currently have a
                                                process where VMs can be
                                                moved from our Xen
                                                hypervisor into EC2.
                                                This process relies on
                                                the fact that we are
                                                able to remove the
                                                drivers from an offline
                                                image. Previously we
                                                have been removing the
                                                drivers successfully by
                                                converting the disk
                                                images to a VHD file,
                                                using Dism to remove the
                                                drivers (<a
                                                  moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                                                and then importing the
                                                resulting VHD into EC2.
                                                This works with the
                                                GPLPV drivers but with
                                                the new WINPV drivers it
                                                creates an unbootable
                                                image (the import into
                                                EC2 fails and the image
                                                can also not be booted
                                                on the original
                                                hypervisor).<br>
                                                <br>
                                                I have found some
                                                previous posts on this
                                                mailing list (<a
                                                  moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"><a class=3D"moz-txt-link-freetext" href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a></a>)
                                                discussing removing the
                                                drivers and I am able to
                                                successfully remove the
                                                drivers from an online
                                                image but sadly our
                                                process requires that
                                                this removal be
                                                performed offline.<br>
                                                <br>
                                                I am just wondering if
                                                anyone else is using
                                                Dism in windows to
                                                remove the PV drivers
                                                from an offline image=3F
                                                Or if anyone else has
                                                successfully removed the
                                                WINPV drivers from an
                                                offline image at all=3F
                                                Any pointers anyone can
                                                give would be
                                                appreciated. The only
                                                way we have so far found
                                                to make the image boot
                                                after removing the
                                                drivers with Dism is by
                                                manual modification of a
                                                large number of registry
                                                keys which seems like a
                                                far from ideal solution.<br>
                                                <br>
                                                Thanks for any help,<br>
                                                Joel<o:p></o:p></span></font></p>
                                        </div>
                                        <p
                                          style=3D"line-height:10.0pt;background:white"><font
                                            face=3D"Cambria" color=3D"gray"
                                            size=3D"1"><span
style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:gray">Zynstra
                                              is a private limited
                                              company registered in
                                              England and Wales
                                              (registered number
                                              07864369). Our registered
                                              office and Headquarters
                                              are at The Innovation
                                              Centre, Broad Quay, Bath,
                                              BA1 1UD. This email, its
                                              contents and any
                                              attachments are
                                              confidential. If you have
                                              received this message in
                                              error please delete it
                                              from your system and
                                              advise the sender immedia</span></font><font
                                            face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      </div>
                                    </div>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------030700080905090405030205--


--===============3862868129129591537==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============3862868129129591537==--


From win-pv-devel-bounces@lists.xenproject.org Wed Sep 16 12:38:46 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 16 Sep 2015 12:38:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZcBz2-0003N0-Fo; Wed, 16 Sep 2015 12:38:44 +0000
Received: from mail6.bemta14.messagelabs.com ([193.109.254.103])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <joel.noyce-barnham@zynstra.com>) id 1ZcBz1-0003Mv-H2
	for win-pv-devel@lists.xenproject.org; Wed, 16 Sep 2015 12:38:43 +0000
Received: from [193.109.254.147] by server-4.bemta-14.messagelabs.com id
	C7/4C-10715-2D269F55; Wed, 16 Sep 2015 12:38:42 +0000
X-Env-Sender: joel.noyce-barnham@zynstra.com
X-Msg-Ref: server-6.tower-27.messagelabs.com!1442407120!50298283!1
X-Originating-IP: [157.55.234.94]
X-SpamReason: No, hits=0.6 required=7.0 tests=HTML_90_100,HTML_MESSAGE
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 5103 invoked from network); 16 Sep 2015 12:38:40 -0000
Received: from mail-db3on0094.outbound.protection.outlook.com (HELO
	emea01-db3-obe.outbound.protection.outlook.com) (157.55.234.94)
	by server-6.tower-27.messagelabs.com with AES256-SHA encrypted SMTP;
	16 Sep 2015 12:38:40 -0000
Received: from [192.168.11.79] (193.63.64.25) by
	HE1PR04MB1481.eurprd04.prod.outlook.com (10.163.176.19) with Microsoft
	SMTP Server (TLS) id 15.1.268.17; Wed, 16 Sep 2015 12:38:35 +0000
To: Paul Durrant <Paul.Durrant@citrix.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <DB5PR04MB1478BA2D430286CDFC142840C65D0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C4524@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478295A30F1808E5C370756C65C0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C51EA@AMSPEX01CL01.citrite.net>
	<DB5PR04MB1478C888513D5947E0E50D76C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6B4E@AMSPEX01CL01.citrite.net>
	<DB5PR04MB147876DB7629AAF830959BC2C65B0@DB5PR04MB1478.eurprd04.prod.outlook.com>
	<9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
From: Joel Noyce Barnham <joel.noyce-barnham@zynstra.com>
Message-ID: <55F962C7.3080407@zynstra.com>
Date: Wed, 16 Sep 2015 13:38:31 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net>
X-Originating-IP: [193.63.64.25]
X-ClientProxiedBy: DB4PR04CA0036.eurprd04.prod.outlook.com (25.160.41.46) To
	HE1PR04MB1481.eurprd04.prod.outlook.com (25.163.176.19)
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	2:yFT67qhjPP5IOXHt1vSJDItpUpo6RaDV3C+zbCRkZH9f2KKfsIxnQpBsEJa2So5n33PkkinENxoort5Vlhuu+ohYPOy+zlB1zO2SnAFtUbxzhqiMBXlKfrf9jfXdCxztlMshhxPAAjAjslbZHRuPlJ9j8ynNXl7fECrU4cTew4k=;
	3:VAo7twjtI6Ln4P9CW9Wt8Shny7pSQ6cjVjD30WN2vvpyuGmWb4aj1uGDZxMedKyYIF7Ab36dsYKB4MaNicoNTtFBarUVEQAhMfVQzuIlfg83gdgstWaMjFR7iuzu21sLF1TD4zcrd8FwCmYXraKB8A==;
	25:8Qh1FTHzLL74pyxxfJaTNQlTuopyxIrjJ5FOhxa7fgpztk/Zc+GqRz9XabmZCOddAL+kBj1e1XLKeG54B+cUkbTTJs3EOkLTZShR0vX0cBn4LRS7W/Amqe9SJm0rc1r9CQ8iRnDzK8c4WhltLOr466BXXaI/R1StLRr73zIacLAKG/3DJcBB+8+B/1qmACCIetbcLHPVFhlb4GBWuaCgt20PGZN4vgJzIzqP0+IMdC21pG8M+si6uqq8Uk4b92XyWbrUN8ErRDPN7aV0NRQJKQ==;
	20:fCMk0vq5OqxxfvBO7/Yi/NDkhHqbss0XU6HOG/bULqKnSFn28eQEWdkU212egyKS2hRyam1P1muvxYRA2r4Rge371nCVlkF0aR/B5tUo994yzerXUC5V2VHKA2fXApEz8LVnePwG93K3OUCub06eF2WQJCg7VpqVZUJMyihueio=
X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:HE1PR04MB1481;
X-Microsoft-Antispam-PRVS: <HE1PR04MB148141ED3A1FE08F964DF8F6C65B0@HE1PR04MB1481.eurprd04.prod.outlook.com>
X-Exchange-Antispam-Report-Test: UriScan:(108003899814671);
X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0;
	RULEID:(601004)(520078)(5005006)(8121501046)(520075)(3002001);
	SRVR:HE1PR04MB1481; BCL:0; PCL:0; RULEID:; SRVR:HE1PR04MB1481; 
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	4:iCLYkD41YywWCy2Wtx/aM/UYvWlzx5okwUaKp5CoPs/A9feDZOXmm+291xn0g1frGkdAU2KzhhG83yiWXq6dJtoY+G6F59XIPLpbjNGzKhEd2UE17HrukTC82FD6yep1OGbH5u4Zlswm+bNrhIIUIaraH5wtmwvM/MxfRiuJt8SAxmrq6Sckl/LCyvKFLxkUnJsyF5CDtts3wzzmLy2vfWGj2RJ9hqhf6oibwYJMNtx2SHn2N0Oma8hRe3D1hJ0mM+ujEK6m3pFmxJx4chi96KKLcR+a9/7ScjDYyLqFfBXjRZsBsVaoyB7HEVi3RK6MHwiP1krUelLQJaaGDF+5Fm8Ko8VVU7IRqOO+29Y3SYc=
X-Forefront-PRVS: 07013D7479
X-Forefront-Antispam-Report: SFV:NSPM;
	SFS:(10009020)(979002)(6049001)(479174004)(189002)(199003)(53754006)(24454002)(51914003)(3905003)(51714002)(46102003)(19580405001)(64706001)(65816999)(2501003)(92566002)(5001960100002)(87266999)(107886002)(5001830100001)(5890100001)(83506001)(2950100001)(42186005)(97736004)(84326002)(65956001)(64126003)(15975445007)(77096005)(87976001)(86362001)(77156002)(65806001)(62966003)(66066001)(189998001)(68736005)(105586002)(93886004)(4001540100001)(5004730100002)(117156001)(512944002)(19617315012)(106356001)(50986999)(5001770100001)(5001920100001)(101416001)(5001860100001)(81156007)(40100003)(59896002)(122386002)(54356999)(19625215002)(16236675004)(33656002)(76176999)(80316001)(4001350100001)(19580395003)(36756003)(5007970100001)(7059030)(569005);
	DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR04MB1481; H:[192.168.11.79];
	FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; 
Received-SPF: None (protection.outlook.com: zynstra.com does not designate
	permitted sender hosts)
X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR04MB1481;
	23:Z/t13nb29VhkU8/9hw4oJb2Yw7P4TrcV4E9wSongj?=
	=?us-ascii?Q?Ruvm7NiputYD3g+qW8OXjVMmZD9prMJIbwOD/BDSTu1ZM5lfjMzRmRUFRZ/9?=
	=?us-ascii?Q?ZJpTjIZG7scnO4m7cA0UGEPSwYrjWcMZdYQ34PZIPws1w6YZJ7FtcCB8/xIa?=
	=?us-ascii?Q?t3O8ZnPzazUYILJdggM7CaRoJPD4V+iJnaT+Arry7bhDrqIaIaLVEyZefhwF?=
	=?us-ascii?Q?H4E1a4BvPYNSqiJwTjvokJ113c6wfu5yKzEHzVBjRmORJPt8ijrzZ84Sm4Vp?=
	=?us-ascii?Q?RKnyp5a82jm2gKa/rgbMnb63Xrf7Q1qVIyZSQTCFGg174MMbGmd62dYRzgJb?=
	=?us-ascii?Q?AKc5H6bPFUhMy7k6CVodOaO452uYSkSfrbKWhyx60XNOTdLU9KzXGdIFe4Gw?=
	=?us-ascii?Q?RJN/RPVWyifcjECA5bnQgej4WrxDCTUlIEOuDvI+PKxqYnJyoLzaipZx2mOp?=
	=?us-ascii?Q?2azdZGiDmBvX8v4p/ZNycS267s5u+R13e69ECMPpFutZmMx2wJUJvR2M07vm?=
	=?us-ascii?Q?Zb3qUu6M2rN8yCUFVbddrRnMh8iIh14l2wKrleAx11uMo8nIGZ1Hp7hxWjax?=
	=?us-ascii?Q?T61HigvtGT84+e0K5vekX4yaOnOsgGyp8kYgBoFHxab/Md19XH8FFIJSh+gR?=
	=?us-ascii?Q?OfOjNJlVEhzXX2MYkOExOxkBNKtKa5k9fDAxenuvYt+h569n2ZmhcDQl9V1F?=
	=?us-ascii?Q?gP5nJrm57ZuDttJfscFdhT8/CPZaMkE6i3L9MiBfiuY+q5uGbeVrjLQ3bnhI?=
	=?us-ascii?Q?wMChhhwzEaHyfJOiWaPKEG0SLhxFMi3gSSj5BeAYeEhiOAVGCHTe3hlZVOax?=
	=?us-ascii?Q?SRIpkk3SdCCe6QXjt8jNGQvQqQpTKt6PYnZ8Cxgdv6rDafJtKA7JtpxWkt+2?=
	=?us-ascii?Q?Bq/jcFlbh1Vr/pG1nc2NCmn9q1Yk/fQivVjqkzuwhSf9F+Uxx/OJIasDlwgb?=
	=?us-ascii?Q?farZp+gIs5cQTPD+C3v+qYPLU9gtL8s+mkXXvj/ooCbJO9hOlyUaCtAAvASL?=
	=?us-ascii?Q?JB5U6myBqpix0YR/XP9GPu09ho+0f1vR56nSuniABIwF+QvJqzEeGSt3IMfS?=
	=?us-ascii?Q?vxlB5Lqp3UlyeosNnuUL9BnCn0CtPu63uFdC1t0yawtm280Zc27KIMKXyUhB?=
	=?us-ascii?Q?dLc9oJfGj/HxvZ94hNTBYEs0xlF/T79JTpkHj3m8ZCxzPKMZvcpMARRn56Eg?=
	=?us-ascii?Q?D+IdV0qw7zn5zEvO6X13Rr57QryaqD0s4tqwfZeTS2EZeivhsZ6y35Un5mK/?=
	=?us-ascii?Q?BCo5ZhtMiPyEtjwy3XrsgK7eUovjoQLcnWl2XhJrxKmZHkbb5Sbe6nBh8bzL?=
	=?us-ascii?Q?8TAUcc5n7eIDq6XZT8K2Wga9e5EjhLlwKZnHX1NgB7Gm3n6VSIaz/8dKfIez?=
	=?us-ascii?Q?+3UGCbcNJYP2ZmyovunxT4PnCHUQSaYbvp3St5KG2PSZUPPVQRtMWNhZhd/L?=
	=?us-ascii?Q?C5aT+FrUmOC3b3Rrcg0MisaZ91CYjZTjHILjqVHCyZICwP51tJDfA3Ll3AWG?=
	=?us-ascii?Q?Lzy4fHf62ROur3ieDJlo9IvvAtldhIURs1O7ChkECahG71/EnSMBHxEr6s8f?=
	=?us-ascii?Q?eW25YeugLc5BvaaWKcW5BIZ2QqXwxT8AV80wwktE37Ok8CsZUe+4uHaz7Syf?=
	=?us-ascii?Q?jelEDaYwBux+f1pjn9YlDe9BH3b5/6/qTyPc2sZNmmoYLlQ9Ov0Zu9ZeRpGk?=
	=?us-ascii?Q?QKksIvb5S1Q8dOmCENBGg9vnFjTR7mUDJ87PdInirqqTDj7qTjdEGoWmnHL3?=
	=?us-ascii?Q?G0JY6wBLDxXsg11+Z6mggao3ze3Bg=3D=3D?=
X-Microsoft-Exchange-Diagnostics: 1; HE1PR04MB1481;
	5:uiRHPF6lRgV0x2jd9hvvBng9jGNCEHxfWwodp6gCosRenTiXRfVxmPP4kwS/c5Wr9TIoqlA15y8Z0/wjtCkXaQEdc8l1686QmhlrvjMF/0SCM331C6zLcDDPTf7v7AEpiZhS1I4EMkvr3QGV13fEeA==;
	24:qvnaNdoRIFuhTuoGPF7/bPmlbwGO/1ZDMu3wv4M4aPTSfzYKnLeGNNEJ9hlYWAerVVnUlQVdyB1QiBXYbOtGJ84Gk1DOEKwk8LAdnCmbIvo=;
	20:tXXGpx5vS8SaG4iYyJgsaEchFNMfkH3GZtX9dZxu4hLDiL9VIhm6BXq1SDlNrC/T51m9w7298LB47OfG6dESUg==
SpamDiagnosticOutput: 1:23
SpamDiagnosticMetadata: NSPM
X-OriginatorOrg: zynstra.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2015 12:38:35.7762 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR04MB1481
Subject: Re: [win-pv-devel] PV Drivers Offline Removal
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============3862868129129591537=="
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

--===============3862868129129591537==
Content-Type: multipart/alternative;
	boundary="------------030700080905090405030205"

--------------030700080905090405030205
Content-Type: text/plain; charset="windows-1252"; format=flowed
Content-Length: 7392
Content-Transfer-Encoding: quoted-printable

Sorry just resending this as I managed to hit 'Reply' rather than 'Reply 
All' and remove the list as a recipient.

Paul,

Yes, I see INACCESSIBLE_BOOT_DEVICE when it attempts to boot which seems 
to map to 0x7B.

Joel

On 16/09/15 12:51, Paul Durrant wrote:
>
> Joel,
>
> What BSOD code was it=3F I=92m assuming 0x7B.
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 16 September 2015 12:23
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org
> *Subject:* Re: PV Drivers Offline Removal
>
> Paul,
>
> Just to be clear I've previously had success removing the drivers 
> online using the uninstallers so I would assume that still works. The 
> way I am removing the drivers at the moment is using Dism so that the 
> process is fully offline. I have tried also removing that unplug value 
> after removing the drivers with Dism which gives me the same windows 
> blue screen (and then being rebooted into automatic repair) as without 
> modifying the Unplug value.
>
> I am happy to send over the logs if this is something that should work 
> but I don't want to waste your time if this is not something you hope 
> to support.
>
> Cheers,
>
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 16 September 2015 11:30
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Joel,
>
> Yes, you need to remove the drivers **and** the unplug keys=85 sorry if 
> that was not clear. Doing that should work so could you send me logs 
> of your failed VM boot=3F I=92ll also try to repro.
>
> Assuming you=92re using qemu trad, I just need the qemu log from 
> /var/log/xen.
>
> Cheers,
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 16 September 2015 11:26
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* Re: PV Drivers Offline Removal
>
> Hi Paul,
>
> I have now got the 8.1.0-rc2 installed and working. I tried removing 
> the Unplug value you suggested and then rebooting but that value just 
> seems to reappeared and the drivers still seem to be in use - they are 
> reported by driverquery and the devices appear in 'Computer 
> Management'. I have also tried removing the drivers with Dism and 
> changing the Unplug value after removing the drivers with Dism which 
> both resulted in an unbootable system like before.
>
> I'll try the other suggestions people here made and see if those are 
> any help but is there anything you would recommend or some information 
> I can find to help debug this=3F I only built the 8.1.0-rc2 code but I'm 
> happy to retry with the code from master if there's been any changes 
> in this area since the RC.
>
> Cheers,
>
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 15 September 2015 15:40
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Thanks. It would be good to confirm it actually works J
>
> Paul
>
> *From:*Joel Noyce-Barnham [mailto:joel.noyce-barnham@zynstra.com]
> *Sent:* 15 September 2015 15:33
> *To:* Paul Durrant; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* Re: PV Drivers Offline Removal
>
> Paul,
>
> Thanks for the reply.  The version of the drivers I am using doesn't 
> seem to have added that key to the registry so I will try the same 
> tests with the 8.1.0-rc2 code which contains your recent changes to 
> the unplug code. I will let you know how I get on.
>
> Cheers,
> Joel
>
> ------------------------------------------------------------------------
>
> *From:*Paul Durrant <Paul.Durrant@citrix.com 
> <mailto:Paul.Durrant@citrix.com>>
> *Sent:* 15 September 2015 09:59
> *To:* Joel Noyce-Barnham; win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* RE: PV Drivers Offline Removal
>
> Joel,
>
> Offline removal should be quite possible. The thing that needs to be 
> cleaned up to make sure the image will reboot are the =91unplug=92 values 
> that are used early on in boot to request unplug of emulated devices 
> in QEMU. Look under HKLM/system/currentcontrolset/services/xen and you 
> should see a key called =91Unplug=92. If you delete that key then the next 
> reboot should use emulated devices and so should be fine with no PV 
> drivers.
>
> Cheers,
>
> Paul
>
> *From:*win-pv-devel-bounces@lists.xenproject.org 
> <mailto:win-pv-devel-bounces@lists.xenproject.org> 
> [mailto:win-pv-devel-bounces@lists.xenproject.org] *On Behalf Of *Joel 
> Noyce-Barnham
> *Sent:* 14 September 2015 18:21
> *To:* win-pv-devel@lists.xenproject.org 
> <mailto:win-pv-devel@lists.xenproject.org>
> *Subject:* [win-pv-devel] PV Drivers Offline Removal
>
> Hi All,
>
> We are currently using the GPLPV drivers but are hoping to move to the 
> new Xen WINPV drivers as they are actively developed and have some new 
> features which we are interested in. We currently have a process where 
> VMs can be moved from our Xen hypervisor into EC2. This process relies 
> on the fact that we are able to remove the drivers from an offline 
> image. Previously we have been removing the drivers successfully by 
> converting the disk images to a VHD file, using Dism to remove the 
> drivers 
> (https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx) 
> and then importing the resulting VHD into EC2. This works with the 
> GPLPV drivers but with the new WINPV drivers it creates an unbootable 
> image (the import into EC2 fails and the image can also not be booted 
> on the original hypervisor).
>
> I have found some previous posts on this mailing list 
> (http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html) 
> discussing removing the drivers and I am able to successfully remove 
> the drivers from an online image but sadly our process requires that 
> this removal be performed offline.
>
> I am just wondering if anyone else is using Dism in windows to remove 
> the PV drivers from an offline image=3F Or if anyone else has 
> successfully removed the WINPV drivers from an offline image at all=3F 
> Any pointers anyone can give would be appreciated. The only way we 
> have so far found to make the image boot after removing the drivers 
> with Dism is by manual modification of a large number of registry keys 
> which seems like a far from ideal solution.
>
> Thanks for any help,
> Joel
>
> Zynstra is a private limited company registered in England and Wales 
> (registered number 07864369). Our registered office and Headquarters 
> are at The Innovation Centre, Broad Quay, Bath, BA1 1UD. This email, 
> its contents and any attachments are confidential. If you have 
> received this message in error please delete it from your system and 
> advise the sender immedia
>


--------------030700080905090405030205
Content-Type: text/html; charset="windows-1252"
Content-Length: 74884
Content-Transfer-Encoding: quoted-printable

<html>
  <head>
    <meta content=3D"text/html; charset=3Dwindows-1252"
      http-equiv=3D"Content-Type">
  </head>
  <body text=3D"#000000" bgcolor=3D"#FFFFFF">
    Sorry just resending this as I managed to hit 'Reply' rather than
    'Reply All' and remove the list as a recipient.<br>
    <br>
    Paul,<br>
    <br>
    Yes, I see INACCESSIBLE_BOOT_DEVICE when it attempts to boot which
    seems to map to 0x7B.<br>
    <br>
    Joel<br>
    <br>
    <div class=3D"moz-cite-prefix">On 16/09/15 12:51, Paul Durrant wrote:<br>
    </div>
    <blockquote
cite=3D"mid:9AAE0902D5BC7E449B7C8E4E778ABCD02F5C6ECB@AMSPEX01CL01.citrite.net"
      type=3D"cite">
      <meta http-equiv=3D"Content-Type" content=3D"text/html;
        charset=3Dwindows-1252">
      <meta name=3D"ProgId" content=3D"Word.Document">
      <meta name=3D"Generator" content=3D"Microsoft Word 14">
      <meta name=3D"Originator" content=3D"Microsoft Word 14">
      <link rel=3D"File-List" href=3D"cid:filelist.xml@01D0F07E.5A9E3E50">
      <link rel=3D"Edit-Time-Data" href=3D"cid:editdata.mso">
      <!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:DoNotRelyOnCSS/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:SpellingState>Clean</w:SpellingState>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:EnvelopeVis/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-GB</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:DoNotExpandShiftReturn/>
<w:BreakWrappedTables/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val=3D"Cambria Math"/>
<m:brkBin m:val=3D"before"/>
<m:brkBinSub m:val=3D"&#45;-"/>
<m:smallFrac m:val=3D"off"/>
<m:dispDef/>
<m:lMargin m:val=3D"0"/>
<m:rMargin m:val=3D"0"/>
<m:defJc m:val=3D"centerGroup"/>
<m:wrapIndent m:val=3D"1440"/>
<m:intLim m:val=3D"subSup"/>
<m:naryLim m:val=3D"undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState=3D"false" DefUnhideWhenUsed=3D"true" DefSemiHidden=3D"true" DefQFormat=3D"false" DefPriority=3D"99" LatentStyleCount=3D"267">
<w:LsdException Locked=3D"false" Priority=3D"0" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Normal"/>
<w:LsdException Locked=3D"false" Priority=3D"9" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"heading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 3"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 4"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 5"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 6"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 7"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 8"/>
<w:LsdException Locked=3D"false" Priority=3D"9" QFormat=3D"true" Name=3D"heading 9"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 1"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 2"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 3"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 4"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 5"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 6"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 7"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 8"/>
<w:LsdException Locked=3D"false" Priority=3D"39" Name=3D"toc 9"/>
<w:LsdException Locked=3D"false" Priority=3D"35" QFormat=3D"true" Name=3D"caption"/>
<w:LsdException Locked=3D"false" Priority=3D"10" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Title"/>
<w:LsdException Locked=3D"false" Priority=3D"1" Name=3D"Default Paragraph Font"/>
<w:LsdException Locked=3D"false" Priority=3D"11" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtitle"/>
<w:LsdException Locked=3D"false" Priority=3D"22" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Strong"/>
<w:LsdException Locked=3D"false" Priority=3D"20" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"59" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Table Grid"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Placeholder Text"/>
<w:LsdException Locked=3D"false" Priority=3D"1" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"No Spacing"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 1"/>
<w:LsdException Locked=3D"false" UnhideWhenUsed=3D"false" Name=3D"Revision"/>
<w:LsdException Locked=3D"false" Priority=3D"34" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"List Paragraph"/>
<w:LsdException Locked=3D"false" Priority=3D"29" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"30" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Quote"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 1"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 2"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 3"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 4"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 5"/>
<w:LsdException Locked=3D"false" Priority=3D"60" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"61" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"62" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Light Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"63" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"64" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Shading 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"65" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"66" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium List 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"67" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 1 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"68" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 2 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"69" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Medium Grid 3 Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"70" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Dark List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"71" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Shading Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"72" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful List Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"73" SemiHidden=3D"false" UnhideWhenUsed=3D"false" Name=3D"Colorful Grid Accent 6"/>
<w:LsdException Locked=3D"false" Priority=3D"19" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"21" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Emphasis"/>
<w:LsdException Locked=3D"false" Priority=3D"31" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Subtle Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"32" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Intense Reference"/>
<w:LsdException Locked=3D"false" Priority=3D"33" SemiHidden=3D"false" UnhideWhenUsed=3D"false" QFormat=3D"true" Name=3D"Book Title"/>
<w:LsdException Locked=3D"false" Priority=3D"37" Name=3D"Bibliography"/>
<w:LsdException Locked=3D"false" Priority=3D"39" QFormat=3D"true" Name=3D"TOC Heading"/>
</w:LatentStyles>
</xml><![endif]-->
      <style><!--
/* Font Definitions */
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Wingdings;
	panose-1:5 0 0 0 0 0 0 0 0 0;
	mso-font-charset:2;
	mso-generic-font-family:auto;
	mso-font-pitch:variable;
	mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
	{font-family:Cambria;
	panose-1:2 4 5 3 5 4 6 3 2 4;
	mso-font-charset:0;
	mso-generic-font-family:roman;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073743103 0 0 415 0;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;
	mso-font-alt:"Century Gothic";
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-536870145 1073786111 1 0 415 0;}
@font-face
	{font-family:Tahoma;
	panose-1:2 11 6 4 3 5 4 4 2 4;
	mso-font-charset:0;
	mso-generic-font-family:swiss;
	mso-font-pitch:variable;
	mso-font-signature:-520081665 -1073717157 41 0 66047 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{mso-style-unhide:no;
	mso-style-qformat:yes;
	mso-style-parent:"";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:blue;
	text-decoration:underline;
	text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
	{mso-style-noshow:yes;
	mso-style-priority:99;
	color:purple;
	text-decoration:underline;
	text-underline:single;}
p
	{mso-style-noshow:yes;
	mso-style-priority:99;
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:12.0pt;
	font-family:"Times New Roman","serif";
	mso-fareast-font-family:Calibri;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
	{mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-link:"Balloon Text Char";
	margin:0cm;
	margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-fareast-font-family:Calibri;}
span.EmailStyle18
	{mso-style-type:personal-reply;
	mso-style-noshow:yes;
	mso-style-unhide:no;
	mso-ansi-font-size:11.0pt;
	mso-bidi-font-size:11.0pt;
	font-family:"Calibri","sans-serif";
	mso-ascii-font-family:Calibri;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Calibri;
	mso-bidi-font-family:"Times New Roman";
	color:#1F497D;}
span.BalloonTextChar
	{mso-style-name:"Balloon Text Char";
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-unhide:no;
	mso-style-locked:yes;
	mso-style-link:"Balloon Text";
	mso-ansi-font-size:8.0pt;
	mso-bidi-font-size:8.0pt;
	font-family:"Tahoma","sans-serif";
	mso-ascii-font-family:Tahoma;
	mso-fareast-font-family:Calibri;
	mso-hansi-font-family:Tahoma;
	mso-bidi-font-family:Tahoma;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-default-props:yes;
	font-size:10.0pt;
	mso-ansi-font-size:10.0pt;
	mso-bidi-font-size:10.0pt;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;
	mso-header-margin:36.0pt;
	mso-footer-margin:36.0pt;
	mso-paper-source:0;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 10]><style>/* Style Definitions */
table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-parent:"";
	mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
	mso-para-margin:0cm;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style><![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
      <div class=3D"WordSection1">
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">Joel,<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D">What BSOD code was it=3F I=92m
              assuming 0x7B.<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><span
                style=3D"mso-spacerun:yes">=A0
              </span>Paul<o:p></o:p></span></font></p>
        <p class=3D"MsoNormal"><font face=3D"Calibri" color=3D"#1f497d"
            size=3D"2"><span
              style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-bidi-font-family:&quot;Times
              New Roman&quot;;color:#1F497D"><o:p>=A0</o:p></span></font></p>
        <div style=3D"border:none;border-left:solid blue 1.5pt;padding:0cm
          0cm 0cm 4.0pt">
          <div>
            <div style=3D"border:none;border-top:solid #B5C4DF
              1.0pt;padding:3.0pt 0cm 0cm 0cm">
              <p class=3D"MsoNormal"><b><font face=3D"Tahoma" size=3D"2"><span
                      style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New
                      Roman&quot;;mso-ansi-language:EN-US;font-weight:bold"
                      lang=3D"EN-US">From:</span></font></b><font
                  face=3D"Tahoma" size=3D"2"><span
                    style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;mso-ansi-language:EN-US"
                    lang=3D"EN-US"> Joel Noyce-Barnham
                    [<a class=3D"moz-txt-link-freetext" href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a>] <br>
                    <b><span style=3D"font-weight:bold">Sent:</span></b>
                    16 September 2015 12:23<br>
                    <b><span style=3D"font-weight:bold">To:</span></b>
                    Paul Durrant; <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a><br>
                    <b><span style=3D"font-weight:bold">Subject:</span></b>
                    Re: PV Drivers Offline Removal<o:p></o:p></span></font></p>
            </div>
          </div>
          <p class=3D"MsoNormal"><font face=3D"Times New Roman" size=3D"3"><span
                style=3D"font-size:12.0pt"><o:p>=A0</o:p></span></font></p>
          <div id=3D"divtagdefaultwrapper">
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Paul,<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Just
                  to be clear I've previously had success removing the
                  drivers online using the uninstallers so I would
                  assume that still works. The way I am removing the
                  drivers at the moment is using Dism so that the
                  process is fully offline. I have tried also removing
                  that unplug value after removing the drivers with Dism
                  which gives me the same windows blue screen (and then
                  being rebooted into automatic repair) as without
                  modifying the Unplug value.<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I
                  am happy to send over the logs if this is something
                  that should work but I don't want to waste your time
                  if this is not something you hope to support.<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
            <p style=3D"background:white"><font face=3D"Calibri"
                color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
            <p class=3D"MsoNormal"
              style=3D"margin-bottom:12.0pt;background:white"><font
                face=3D"Calibri" color=3D"black" size=3D"3"><span
                  style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                  New Roman&quot;;color:black"><o:p>=A0</o:p></span></font></p>
            <div>
              <div class=3D"MsoNormal"
                style=3D"text-align:center;background:white"
                align=3D"center">
                <font face=3D"Calibri" color=3D"black" size=3D"3"><span
                    style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                    New Roman&quot;;color:black">
                    <hr size=3D"2" width=3D"98%" align=3D"center">
                  </span></font></div>
              <div id=3D"divRplyFwdMsg">
                <p class=3D"MsoNormal"
                  style=3D"mso-outline-level:1;background:white"><b><font
                      face=3D"Calibri" color=3D"black" size=3D"2"><span
                        style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                        New Roman&quot;;color:black;font-weight:bold">From:</span></font></b><font
                    face=3D"Calibri" color=3D"black" size=3D"2"><span
                      style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New Roman&quot;;color:black"> Paul Durrant &lt;<a
                        moz-do-not-send=3D"true"
                        href=3D"mailto:Paul.Durrant@citrix.com"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                      <b><span style=3D"font-weight:bold">Sent:</span></b>
                      16 September 2015 11:30<br>
                      <b><span style=3D"font-weight:bold">To:</span></b>
                      Joel Noyce-Barnham; <a moz-do-not-send=3D"true"
                        href=3D"mailto:win-pv-devel@lists.xenproject.org">
                        win-pv-devel@lists.xenproject.org</a><br>
                      <b><span style=3D"font-weight:bold">Subject:</span></b>
                      RE: PV Drivers Offline Removal</span></font><font
                    face=3D"Calibri" color=3D"black"><span
                      style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                      New Roman&quot;;color:black">
                      <o:p></o:p></span></font></p>
                <div>
                  <p class=3D"MsoNormal" style=3D"background:white"><font
                      face=3D"Calibri" color=3D"black" size=3D"3"><span
                        style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                        New Roman&quot;;color:black">=A0<o:p></o:p></span></font></p>
                </div>
              </div>
              <div>
                <div>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Joel,</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Yes,
                        you need to remove the drivers *<b><span
                            style=3D"font-weight:bold">and</span></b>* the
                        unplug keys=85 sorry if that was not clear. Doing
                        that should work so could you send me logs of
                        your failed VM boot=3F I=92ll also try to repro.</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Assuming
                        you=92re using qemu trad, I just need the qemu log
                        from /var/log/xen.</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                        Cheers,</span></font><font color=3D"black"><span
                        style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                        Paul</span></font><font color=3D"black"><span
                        style=3D"color:black"><o:p></o:p></span></font></p>
                  <p style=3D"background:white"><font face=3D"Calibri"
                      color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                      color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                  <div style=3D"border:none;border-left:solid blue
                    1.5pt;padding:0cm 0cm 0cm 4.0pt">
                    <div>
                      <div style=3D"border:none;border-top:solid #B5C4DF
                        1.0pt;padding:3.0pt 0cm 0cm 0cm">
                        <p style=3D"mso-outline-level:1;background:white"><b><font
                              face=3D"Tahoma" color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                lang=3D"EN-US">From:</span></font></b><font
                            face=3D"Tahoma" color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                              lang=3D"EN-US"> Joel Noyce-Barnham [<a
                                moz-do-not-send=3D"true"
                                href=3D"mailto:joel.noyce-barnham@zynstra.com"><a class=3D"moz-txt-link-freetext" href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a></a>]
                              <br>
                              <b><span style=3D"font-weight:bold">Sent:</span></b>
                              16 September 2015 11:26<br>
                              <b><span style=3D"font-weight:bold">To:</span></b>
                              Paul Durrant; <a moz-do-not-send=3D"true"
                                href=3D"mailto:win-pv-devel@lists.xenproject.org">
                                win-pv-devel@lists.xenproject.org</a><br>
                              <b><span style=3D"font-weight:bold">Subject:</span></b>
                              Re: PV Drivers Offline Removal</span></font><font
                            color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                      </div>
                    </div>
                    <p style=3D"background:white"><font face=3D"Times New
                        Roman" color=3D"black" size=3D"3"><span
                          style=3D"font-size:12.0pt;color:black">=A0<o:p></o:p></span></font></p>
                    <div id=3D"divtagdefaultwrapper">
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                            Paul,<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I
                            have now got the 8.1.0-rc2 installed and
                            working. I tried removing the Unplug value
                            you suggested and then rebooting but that
                            value just seems to reappeared and the
                            drivers still seem to be in use - they are
                            reported by driverquery and the devices
                            appear in 'Computer Management'. I have also
                            tried removing the drivers with Dism and
                            changing the Unplug value after removing the
                            drivers with Dism which both resulted in an
                            unbootable system like before.<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">I'll
                            try the other suggestions people here made
                            and see if those are any help but is there
                            anything you would recommend or some
                            information I can find to help debug this=3F I
                            only built the 8.1.0-rc2 code but I'm happy
                            to retry with the code from master if
                            there's been any changes in this area since
                            the RC.<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Cheers,<o:p></o:p></span></font></p>
                      <p style=3D"background:white"><font face=3D"Calibri"
                          color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Joel<o:p></o:p></span></font></p>
                      <p
style=3D"background:white;background-attachment:scroll;background-position-x:0%;background-position-y:0%"><font
                          face=3D"Calibri" color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0</span></font><font
                          color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                      <div>
                        <div class=3D"MsoNormal"
                          style=3D"text-align:center;background:white"
                          align=3D"center">
                          <font face=3D"Calibri" color=3D"black" size=3D"3"><span
                              style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                              New Roman&quot;;color:black">
                              <hr size=3D"2" width=3D"98%" align=3D"center">
                            </span></font></div>
                        <div id=3D"divRplyFwdMsg">
                          <p
                            style=3D"mso-outline-level:1;background:white"><b><font
                                face=3D"Calibri" color=3D"black" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:</span></font></b><font
                              face=3D"Calibri" color=3D"black" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                Paul Durrant &lt;<a
                                  moz-do-not-send=3D"true"
                                  href=3D"mailto:Paul.Durrant@citrix.com"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                                <b><span style=3D"font-weight:bold">Sent:</span></b>
                                15 September 2015 15:40<br>
                                <b><span style=3D"font-weight:bold">To:</span></b>
                                Joel Noyce-Barnham; <a
                                  moz-do-not-send=3D"true"
                                  href=3D"mailto:win-pv-devel@lists.xenproject.org">
                                  <a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                <b><span style=3D"font-weight:bold">Subject:</span></b>
                                RE: PV Drivers Offline Removal</span></font><font
                              face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"></span></font><font
                              color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                          <div>
                            <p
style=3D"background:white;background-attachment:scroll;background-position-x:0%;background-position-y:0%"><font
                                face=3D"Calibri" color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0</span></font><font
                                color=3D"black"><span style=3D"color:black"><o:p></o:p></span></font></p>
                          </div>
                        </div>
                        <div>
                          <div>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Thanks.
                                  It would be good to confirm it
                                  actually works
                                </span></font><font face=3D"Wingdings"
                                color=3D"#1f497d" size=3D"2"><span
                                  style=3D"font-size:11.0pt;font-family:Wingdings;color:#1F497D">J</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                  Paul</span></font><font face=3D"Calibri"
                                color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <p style=3D"background:white"><font
                                face=3D"Calibri" color=3D"#1f497d" size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                            <div style=3D"border:none;border-left:solid
                              blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
                              <div>
                                <div style=3D"border:none;border-top:solid
                                  #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm
                                  0cm">
                                  <p
                                    style=3D"mso-outline-level:1;background:white"><b><font
                                        face=3D"Tahoma" color=3D"black"
                                        size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                          lang=3D"EN-US">From:</span></font></b><font
                                      face=3D"Tahoma" color=3D"black"
                                      size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                                        lang=3D"EN-US"> Joel Noyce-Barnham
                                        [<a moz-do-not-send=3D"true"
                                          href=3D"mailto:joel.noyce-barnham@zynstra.com">mailto:joel.noyce-barnham@zynstra.com</a>]
                                        <br>
                                        <b><span
                                            style=3D"font-weight:bold">Sent:</span></b>
                                        15 September 2015 15:33<br>
                                        <b><span
                                            style=3D"font-weight:bold">To:</span></b>
                                        Paul Durrant; <a
                                          moz-do-not-send=3D"true"
                                          href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                        <b><span
                                            style=3D"font-weight:bold">Subject:</span></b>
                                        Re: PV Drivers Offline Removal</span></font><font
                                      face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                </div>
                              </div>
                              <p style=3D"background:white"><font
                                  face=3D"Times New Roman" color=3D"black"
                                  size=3D"3"><span
                                    style=3D"font-size:12.0pt;color:black">=A0</span></font><font
                                  face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                              <div id=3D"divtagdefaultwrapper">
                                <p style=3D"background:white"><font
                                    face=3D"Calibri" color=3D"black"
                                    size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Paul,<br>
                                      <br>
                                      Thanks for the reply.=A0 The version
                                      of the drivers I am using doesn't
                                      seem to have added that key to the
                                      registry so I will try the same
                                      tests with the 8.1.0-rc2 code
                                      which contains your recent changes
                                      to the unplug code. I will let you
                                      know how I get on.<br>
                                      <br>
                                      Cheers,<br>
                                      Joel<o:p></o:p></span></font></p>
                                <div>
                                  <div class=3D"MsoNormal"
                                    style=3D"text-align:center;background:white"
                                    align=3D"center">
                                    <font face=3D"Calibri" color=3D"black"
                                      size=3D"3"><span
                                        style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;mso-fareast-font-family:&quot;Times
                                        New Roman&quot;;color:black">
                                        <hr size=3D"2" width=3D"98%"
                                          align=3D"center">
                                      </span></font></div>
                                  <div id=3D"divRplyFwdMsg">
                                    <p
                                      style=3D"mso-outline-level:1;background:white"><b><font
                                          face=3D"Calibri" color=3D"black"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black;font-weight:bold">From:</span></font></b><font
                                        face=3D"Calibri" color=3D"black"
                                        size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                          Paul Durrant &lt;<a
                                            moz-do-not-send=3D"true"
                                            href=3D"mailto:Paul.Durrant@citrix.com"
                                            title=3D"Ctrl+Click or tap to
                                            follow the link"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:Paul.Durrant@citrix.com">Paul.Durrant@citrix.com</a></a>&gt;<br>
                                          <b><span
                                              style=3D"font-weight:bold">Sent:</span></b>
                                          15 September 2015 09:59<br>
                                          <b><span
                                              style=3D"font-weight:bold">To:</span></b>
                                          Joel Noyce-Barnham; <a
                                            moz-do-not-send=3D"true"
                                            href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                          <b><span
                                              style=3D"font-weight:bold">Subject:</span></b>
                                          RE: PV Drivers Offline Removal</span></font><font
                                        face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">
                                          <o:p></o:p></span></font></p>
                                    <div>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"black"
                                          size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">=A0<o:p></o:p></span></font></p>
                                    </div>
                                  </div>
                                  <div>
                                    <div>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Joel,</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Offline removal should be
                                            quite possible. The thing
                                            that needs to be cleaned up
                                            to make sure the image will
                                            reboot are the =91unplug=92
                                            values that are used early
                                            on in boot to request unplug
                                            of emulated devices in QEMU.
                                            Look under
                                            HKLM/system/currentcontrolset/services/xen
                                            and you should see a key
                                            called =91Unplug=92. If you
                                            delete that key then the
                                            next reboot should use
                                            emulated devices and so
                                            should be fine with no PV
                                            drivers.</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Cheers,</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0
                                            Paul</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <p style=3D"background:white"><font
                                          face=3D"Calibri" color=3D"#1f497d"
                                          size=3D"2"><span
style=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">=A0</span></font><font
                                          face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      <div
                                        style=3D"border:none;border-left:solid
                                        blue 1.5pt;padding:0cm 0cm 0cm
                                        4.0pt">
                                        <div>
                                          <div
                                            style=3D"border:none;border-top:solid
                                            #B5C4DF 1.0pt;padding:3.0pt
                                            0cm 0cm 0cm">
                                            <p
                                              style=3D"mso-outline-level:1;background:white"><b><font
                                                  face=3D"Tahoma"
                                                  color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US;font-weight:bold"
                                                    lang=3D"EN-US">From:</span></font></b><font
                                                face=3D"Tahoma"
                                                color=3D"black" size=3D"2"><span
style=3D"font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;color:black;mso-ansi-language:EN-US"
                                                  lang=3D"EN-US">
                                                  <a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org"><a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">win-pv-devel-bounces@lists.xenproject.org</a></a>
                                                  [<a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org"
                                                    title=3D"Ctrl+Click or
                                                    tap to follow the
                                                    link"><a class=3D"moz-txt-link-freetext" href=3D"mailto:win-pv-devel-bounces@lists.xenproject.org">mailto:win-pv-devel-bounces@lists.xenproject.org</a></a>]
                                                  <b><span
                                                      style=3D"font-weight:bold">On
                                                      Behalf Of </span></b>Joel
                                                  Noyce-Barnham<br>
                                                  <b><span
                                                      style=3D"font-weight:bold">Sent:</span></b>
                                                  14 September 2015
                                                  18:21<br>
                                                  <b><span
                                                      style=3D"font-weight:bold">To:</span></b>
                                                  <a
                                                    moz-do-not-send=3D"true"
href=3D"mailto:win-pv-devel@lists.xenproject.org">
<a class=3D"moz-txt-link-abbreviated" href=3D"mailto:win-pv-devel@lists.xenproject.org">win-pv-devel@lists.xenproject.org</a></a><br>
                                                  <b><span
                                                      style=3D"font-weight:bold">Subject:</span></b>
                                                  [win-pv-devel] PV
                                                  Drivers Offline
                                                  Removal</span></font><font
                                                face=3D"Calibri"
                                                color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                          </div>
                                        </div>
                                        <p style=3D"background:white"><font
                                            face=3D"Times New Roman"
                                            color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;color:black">=A0</span></font><font face=3D"Calibri"
                                            color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                        <div id=3D"divtagdefaultwrapper">
                                          <p style=3D"background:white"><font
                                              face=3D"Calibri"
                                              color=3D"black" size=3D"3"><span
style=3D"font-size:12.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black">Hi
                                                All,<br>
                                                <br>
                                                We are currently using
                                                the GPLPV drivers but
                                                are hoping to move to
                                                the new Xen WINPV
                                                drivers as they are
                                                actively developed and
                                                have some new features
                                                which we are interested
                                                in. We currently have a
                                                process where VMs can be
                                                moved from our Xen
                                                hypervisor into EC2.
                                                This process relies on
                                                the fact that we are
                                                able to remove the
                                                drivers from an offline
                                                image. Previously we
                                                have been removing the
                                                drivers successfully by
                                                converting the disk
                                                images to a VHD file,
                                                using Dism to remove the
                                                drivers (<a
                                                  moz-do-not-send=3D"true"
href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx"><a class=3D"moz-txt-link-freetext" href=3D"https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx">https://technet.microsoft.com/en-GB/library/dd744355%28v=3Dws.10%29.aspx</a></a>)
                                                and then importing the
                                                resulting VHD into EC2.
                                                This works with the
                                                GPLPV drivers but with
                                                the new WINPV drivers it
                                                creates an unbootable
                                                image (the import into
                                                EC2 fails and the image
                                                can also not be booted
                                                on the original
                                                hypervisor).<br>
                                                <br>
                                                I have found some
                                                previous posts on this
                                                mailing list (<a
                                                  moz-do-not-send=3D"true"
href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html"><a class=3D"moz-txt-link-freetext" href=3D"http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html">http://lists.xenproject.org/archives/html/win-pv-devel/2015-03/msg00076.html</a></a>)
                                                discussing removing the
                                                drivers and I am able to
                                                successfully remove the
                                                drivers from an online
                                                image but sadly our
                                                process requires that
                                                this removal be
                                                performed offline.<br>
                                                <br>
                                                I am just wondering if
                                                anyone else is using
                                                Dism in windows to
                                                remove the PV drivers
                                                from an offline image=3F
                                                Or if anyone else has
                                                successfully removed the
                                                WINPV drivers from an
                                                offline image at all=3F
                                                Any pointers anyone can
                                                give would be
                                                appreciated. The only
                                                way we have so far found
                                                to make the image boot
                                                after removing the
                                                drivers with Dism is by
                                                manual modification of a
                                                large number of registry
                                                keys which seems like a
                                                far from ideal solution.<br>
                                                <br>
                                                Thanks for any help,<br>
                                                Joel<o:p></o:p></span></font></p>
                                        </div>
                                        <p
                                          style=3D"line-height:10.0pt;background:white"><font
                                            face=3D"Cambria" color=3D"gray"
                                            size=3D"1"><span
style=3D"font-size:8.0pt;font-family:&quot;Cambria&quot;,&quot;serif&quot;;color:gray">Zynstra
                                              is a private limited
                                              company registered in
                                              England and Wales
                                              (registered number
                                              07864369). Our registered
                                              office and Headquarters
                                              are at The Innovation
                                              Centre, Broad Quay, Bath,
                                              BA1 1UD. This email, its
                                              contents and any
                                              attachments are
                                              confidential. If you have
                                              received this message in
                                              error please delete it
                                              from your system and
                                              advise the sender immedia</span></font><font
                                            face=3D"Calibri" color=3D"black"><span
style=3D"font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:black"><o:p></o:p></span></font></p>
                                      </div>
                                    </div>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </blockquote>
    <br>
  </body>
</html>

--------------030700080905090405030205--


--===============3862868129129591537==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
--===============3862868129129591537==--


From win-pv-devel-bounces@lists.xenproject.org Tue Sep 22 15:27:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 22 Sep 2015 15:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZePTL-0005WE-Qh; Tue, 22 Sep 2015 15:27:11 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZePTL-0005Vt-3J
	for win-pv-devel@lists.xenproject.org; Tue, 22 Sep 2015 15:27:11 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	89/94-22089-E4371065; Tue, 22 Sep 2015 15:27:10 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1442935629!4842374!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18391 invoked from network); 22 Sep 2015 15:27:10 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Sep 2015 15:27:10 -0000
Received: by wicfx3 with SMTP id fx3so198032265wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=Dvjty8ov8k290tYXlFZKbAfigBgMOScO7hybvdNBg0Q=;
	b=OPo88+dWTLFOdx7zChfKX61JW67yfK+naSYwRRmAwAweQ6hNQTly0O4vxRaBFan+yc
	PL7PccLy3QxwDfpfCEMx/dSErpgIzseb3jR3EV2qVZ65pWbG0XEmgpYvEYpdnL7nauBi
	dek6VHby6qZCsTlxrE366J8q2UqwZuc1Cgj4qSjjCVC2dg/ubPvtbt0nMvXdXNU4zo3D
	3bpiokshdgkfx5z+C+y9fbcuDzrJ9n4fScfeAzN+zLDsvjC9591ifMtMoEwXGAV3ttmq
	H+N2JpcSBd/lmqJvM0b/MdjkOPT3i+v64ApLjKM0//WA5y+a5MMzalcl7RsFIShgEGN2
	PAMQ==
X-Received: by 10.194.5.35 with SMTP id p3mr35119640wjp.132.1442935629595;
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id it4sm2453716wjb.0.2015.09.22.08.27.08
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 22 Sep 2015 16:26:49 +0100
Message-Id: <1442935609-12364-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix error path in transmitter header
	preparation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The wrong value was being checked for NULL after allocation of a fragment.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/transmitter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 4cf21db..6076379 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -968,7 +968,7 @@ __TransmitterRingPrepareHeader(
     Fragment = __TransmitterGetFragment(Ring);
 
     status = STATUS_NO_MEMORY;
-    if (Buffer == NULL)
+    if (Fragment == NULL)
         goto fail3;
 
     Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Tue Sep 22 15:27:12 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 22 Sep 2015 15:27:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZePTL-0005WE-Qh; Tue, 22 Sep 2015 15:27:11 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <pdurrant@gmail.com>) id 1ZePTL-0005Vt-3J
	for win-pv-devel@lists.xenproject.org; Tue, 22 Sep 2015 15:27:11 +0000
Received: from [85.158.139.211] by server-6.bemta-5.messagelabs.com id
	89/94-22089-E4371065; Tue, 22 Sep 2015 15:27:10 +0000
X-Env-Sender: pdurrant@gmail.com
X-Msg-Ref: server-3.tower-206.messagelabs.com!1442935629!4842374!1
X-Originating-IP: [209.85.212.176]
X-SpamReason: No, hits=0.0 required=7.0 tests=
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 18391 invoked from network); 22 Sep 2015 15:27:10 -0000
Received: from mail-wi0-f176.google.com (HELO mail-wi0-f176.google.com)
	(209.85.212.176)
	by server-3.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	22 Sep 2015 15:27:10 -0000
Received: by wicfx3 with SMTP id fx3so198032265wic.1
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;
	h=from:to:cc:subject:date:message-id;
	bh=Dvjty8ov8k290tYXlFZKbAfigBgMOScO7hybvdNBg0Q=;
	b=OPo88+dWTLFOdx7zChfKX61JW67yfK+naSYwRRmAwAweQ6hNQTly0O4vxRaBFan+yc
	PL7PccLy3QxwDfpfCEMx/dSErpgIzseb3jR3EV2qVZ65pWbG0XEmgpYvEYpdnL7nauBi
	dek6VHby6qZCsTlxrE366J8q2UqwZuc1Cgj4qSjjCVC2dg/ubPvtbt0nMvXdXNU4zo3D
	3bpiokshdgkfx5z+C+y9fbcuDzrJ9n4fScfeAzN+zLDsvjC9591ifMtMoEwXGAV3ttmq
	H+N2JpcSBd/lmqJvM0b/MdjkOPT3i+v64ApLjKM0//WA5y+a5MMzalcl7RsFIShgEGN2
	PAMQ==
X-Received: by 10.194.5.35 with SMTP id p3mr35119640wjp.132.1442935629595;
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
Received: from localhost.localdomain ([185.25.64.249])
	by smtp.gmail.com with ESMTPSA id it4sm2453716wjb.0.2015.09.22.08.27.08
	(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
	Tue, 22 Sep 2015 08:27:09 -0700 (PDT)
From: Paul Durrant <pdurrant@gmail.com>
X-Google-Original-From: Paul Durrant <paul.durrant@citrix.com>
To: win-pv-devel@lists.xenproject.org
Date: Tue, 22 Sep 2015 16:26:49 +0100
Message-Id: <1442935609-12364-1-git-send-email-paul.durrant@citrix.com>
X-Mailer: git-send-email 2.1.1
Cc: Paul Durrant <paul.durrant@citrix.com>
Subject: [win-pv-devel] [PATCH] Fix error path in transmitter header
	preparation
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

The wrong value was being checked for NULL after allocation of a fragment.

Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
---
 src/xenvif/transmitter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 4cf21db..6076379 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -968,7 +968,7 @@ __TransmitterRingPrepareHeader(
     Fragment = __TransmitterGetFragment(Ring);
 
     status = STATUS_NO_MEMORY;
-    if (Buffer == NULL)
+    if (Fragment == NULL)
         goto fail3;
 
     Fragment->Type = XENVIF_TRANSMITTER_FRAGMENT_TYPE_BUFFER;
-- 
2.1.1


_______________________________________________
win-pv-devel mailing list
win-pv-devel@lists.xenproject.org
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 23 00:59:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 Sep 2015 00:59:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZeYPH-00054H-8J; Wed, 23 Sep 2015 00:59:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZeYPG-00054C-22
	for win-pv-devel@lists.xenproject.org; Wed, 23 Sep 2015 00:59:34 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	B8/59-01753-579F1065; Wed, 23 Sep 2015 00:59:33 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1442969972!46712525!1
X-Originating-IP: [66.111.4.25]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjUgPT4gNDQ5ODE=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10669 invoked from network); 23 Sep 2015 00:59:32 -0000
Received: from out1-smtp.messagingengine.com (HELO
	out1-smtp.messagingengine.com) (66.111.4.25)
	by server-10.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 23 Sep 2015 00:59:32 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id C26E62076D
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 20:59:31 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Tue, 22 Sep 2015 20:59:31 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=XBoHCDdUGI7fAml9kgWfUKWtcP8=; b=GpsKsK
	GL9DxEhTmtMD12bvsQiSOdsVDZRg5kOhi9eKfhaQgfARNkON3qB1Vz32pZ39Iuo3
	NHzvjJAW8JLzqi7BoRb643txp6vXMWeFKUQST4XdfJJnbU1UcHtEsOWju3kzpdsQ
	73MFcc5tUMEInBoOIlSef09/VTmAnd8nKwcDM=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=XBoHCDdUGI7fAml9kgWfUKWtcP8=; b=Ij+xJ
	k6zjm9qk2WhASeHmo3tVWI1/0OFmvRWzptadvc0CaYpNdxvnz24NxAwDssjMWQAP
	io8Y3bohebSdKfXcEkbQ8kCwST8zgFrRZOPrhCevX9TcxzItCQ/i+kb4hOjjtYWl
	Z8r293bQJiemkUQe3iINJI2sfa9Jp8pRBmAop8=
X-Sasl-enc: h6vrwRnZRblS9FCu2bUAr7m0OgTH3QtITpPCP7Ajigc8 1442969971
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4DC54C0001A
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 20:59:31 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N0010
Message-ID: <5601F971.7090806@invisiblethingslab.com>
Date: Wed, 23 Sep 2015 02:59:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 2935
Subject: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgaW1wbGVtZW50IHRoZSBwZW5kZWQgSU9D
VExzIGZvcgpyZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2FtZSB1cCB3aXRoIHdh
cyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQKYW5kIGVycm9yLXByb25lIHRoYW4gdGhlIHByb2Nlc3Mg
bm90aWZpY2F0aW9uIHNvbHV0aW9uLgoKTGV0J3Mgc2F5IHByb2Nlc3MgWCBpc3N1ZXMgYSAiYmlu
ZCB1bmJvdW5kIGV2ZW50IGNoYW5uZWwgcG9ydCIgSU9DVEwgb3IKYW55IG90aGVyIElPQ1RMIHRo
YXQgbmVlZHMgdG8gcGVyc2lzdCBzb21lIHN0YXRlIG9uIHRoZSBkcml2ZXIgc2lkZS4gSWYKc3Vj
aCBjYWxsIGlzIHBlbmRlZCBmb3JldmVyLCBYIG5lZWRzIHRvIHBhc3Mgc29tZSBraW5kIG9mIHZh
bHVlIHRoYXQKaWRlbnRpZmllcyB0aGUgcmVxdWVzdCBzbyBhIHN1YnNlcXVlbnQgImdldCB0aGUg
YWN0dWFsIHJlc3VsdCBvZiB0aGF0CmJpbmQgY2FsbCIgSU9DVEwga25vd3Mgd2hhdCB0byByZXR1
cm4uIEkgc3VwcG9zZSB0aG9zZSBpZGVudGlmaWVycyBjYW4KYmUganVzdCBjYWxsIGFyZ3VtZW50
cywgYnV0IGl0IGNvbXBsaWNhdGVzIHByb2Nlc3Npbmcgd2hlbiB0aGV5IGFyZSBub3QKdGhlIHNh
bWUgdGhpbmdzIGluIGRpZmZlcmVudCBJT0NUTHMuIFRoZSBkcml2ZXIgbmVlZHMgdG8ga2VlcCB0
cmFjayBvZgp0aG9zZSBJRHMgYWxvbmcgd2l0aCBjYWxsaW5nIHByb2Nlc3NlcywgYW5kIG5lZWRz
IGEgcGVuZGluZyBJUlAgcXVldWUKdGhhdCBzdXBwb3J0cyBJUlAgY2FuY2VsbGF0aW9uIChvbiBj
YWxsZXIgdGhyZWFkIGV4aXQpLiBYIG5lZWRzIHRvCmFsbG9jYXRlIE9WRVJMQVBQRUQgYnVmZmVy
cyBmb3IgZXZlcnkgcGVuZGVkIElPQ1RMIGFuZCBrZWVwIHRoZW0gaW4KbWVtb3J5IHVudGlsIHRo
ZSByZXF1ZXN0IGlzIGNvbXBsZXRlLiBJZiBYIHRlcm1pbmF0ZXMgd2l0aG91dCBwcm9wZXIKY2xl
YW51cCwgZHJpdmVyJ3MgSVJQIGNhbmNlbCByb3V0aW5lcyBhcmUgY2FsbGVkIGF0IERJU1BBVENI
X0xFVkVMIGluCmFyYml0cmFyeSBjb250ZXh0IHdoaWNoIG1ha2VzIHRoaW5ncyBsaWtlIHVubWFw
cGluZyB1c2VyIG1lbW9yeSBjb21wbGljYXRlZC4KCkNvbXBhcmVkIHRvIHRoaXMsIHRoZSBwcm9j
ZXNzIG5vdGlmeSByb3V0aW5lIHJ1bnMgYXQgUEFTU0lWRV9MRVZFTCBhZnRlcgphbGwgdGhyZWFk
cyBoYXZlIGV4aXRlZCBhbmQgYmVmb3JlIGFkZHJlc3Mgc3BhY2UgZGVzdHJ1Y3Rpb24sIGluIHRo
ZQpwcm9wZXIgcHJvY2VzcyBjb250ZXh0LiBUaGUgdXNlciBtb2RlIGNsaWVudCBkb2Vzbid0IG5l
ZWQgdG8ga2VlcAphbnl0aGluZyBpbiBtZW1vcnksIGFsbCBjYWxscyBhcmUgc3RhdGVsZXNzLiBU
aGUgZHJpdmVyIGNhbiBqdXN0IGtlZXAgYQpsaXN0IG9mIGNvbnRleHQgaW5mb3JtYXRpb24gZm9y
IGVhY2ggcmVxdWVzdCwgdGhlIG9ubHkgaWRlbnRpZnlpbmcKaW5mb3JtYXRpb24gaXQgbmVlZHMg
aXMgdGhlIGNsaWVudCBwcm9jZXNzLiBNU0ROIGRvZXNuJ3Qgc2VlbSB0byBpbXBseQp0aGF0IHRo
ZSBub3RpZmljYXRpb24gcm91dGluZXMgYXJlIHNvbWV0aGluZyB0aGF0IG1heSBiZSByZW1vdmVk
IGluIHRoZQpmdXR1cmUuCgpNYXliZSB0aGVyZSBpcyBhIHNpbXBsZXIgd2F5IHRvIGRvIGFsbCB0
aGlzPyBJbiBhbnkgY2FzZSBJJ20gYWxtb3N0IGRvbmUKaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NU
THMgYW5kIHRoZXkgZG8gc2VlbSB0byB3b3JrIHByb3Blcmx5IGZyb20KcnVkaW1lbnRhcnkgdGVz
dGluZy4gSSdtIGp1c3Qgd29uZGVyaW5nIGlmIHRoZSBpbmNyZWFzZSBvZiBjb2RlCmNvbXBsZXhp
dHkgaXMgd29ydGggdGhlIGVmZm9ydC4gQXQgbGVhc3QgSSd2ZSBsZWFybmVkIHNvbWUgdGhpbmdz
IGluIHRoZQpwcm9jZXNzIDopCgpBbnkgdGhvdWdodHM/CgotLSAKUmFmYcWCIFdvamR5xYJhClF1
YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3BlcgpodHRwczovL3d3dy5xdWJlcy1vcy5vcmcv
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYt
ZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1k
ZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 23 00:59:36 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 Sep 2015 00:59:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZeYPH-00054H-8J; Wed, 23 Sep 2015 00:59:35 +0000
Received: from mail6.bemta3.messagelabs.com ([195.245.230.39])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZeYPG-00054C-22
	for win-pv-devel@lists.xenproject.org; Wed, 23 Sep 2015 00:59:34 +0000
Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id
	B8/59-01753-579F1065; Wed, 23 Sep 2015 00:59:33 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-10.tower-31.messagelabs.com!1442969972!46712525!1
X-Originating-IP: [66.111.4.25]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjUgPT4gNDQ5ODE=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 10669 invoked from network); 23 Sep 2015 00:59:32 -0000
Received: from out1-smtp.messagingengine.com (HELO
	out1-smtp.messagingengine.com) (66.111.4.25)
	by server-10.tower-31.messagelabs.com with DHE-RSA-AES256-SHA encrypted
	SMTP; 23 Sep 2015 00:59:32 -0000
Received: from compute5.internal (compute5.nyi.internal [10.202.2.45])
	by mailout.nyi.internal (Postfix) with ESMTP id C26E62076D
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 20:59:31 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute5.internal (MEProxy); Tue, 22 Sep 2015 20:59:31 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=mesmtp; bh=XBoHCDdUGI7fAml9kgWfUKWtcP8=; b=GpsKsK
	GL9DxEhTmtMD12bvsQiSOdsVDZRg5kOhi9eKfhaQgfARNkON3qB1Vz32pZ39Iuo3
	NHzvjJAW8JLzqi7BoRb643txp6vXMWeFKUQST4XdfJJnbU1UcHtEsOWju3kzpdsQ
	73MFcc5tUMEInBoOIlSef09/VTmAnd8nKwcDM=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:message-id:mime-version:subject:to:x-sasl-enc
	:x-sasl-enc; s=smtpout; bh=XBoHCDdUGI7fAml9kgWfUKWtcP8=; b=Ij+xJ
	k6zjm9qk2WhASeHmo3tVWI1/0OFmvRWzptadvc0CaYpNdxvnz24NxAwDssjMWQAP
	io8Y3bohebSdKfXcEkbQ8kCwST8zgFrRZOPrhCevX9TcxzItCQ/i+kb4hOjjtYWl
	Z8r293bQJiemkUQe3iINJI2sfa9Jp8pRBmAop8=
X-Sasl-enc: h6vrwRnZRblS9FCu2bUAr7m0OgTH3QtITpPCP7Ajigc8 1442969971
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id 4DC54C0001A
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 20:59:31 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N0010
Message-ID: <5601F971.7090806@invisiblethingslab.com>
Date: Wed, 23 Sep 2015 02:59:29 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
Content-Length: 2935
Subject: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

SSB3YXMgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3QgaW1wbGVtZW50IHRoZSBwZW5kZWQgSU9D
VExzIGZvcgpyZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2FtZSB1cCB3aXRoIHdh
cyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQKYW5kIGVycm9yLXByb25lIHRoYW4gdGhlIHByb2Nlc3Mg
bm90aWZpY2F0aW9uIHNvbHV0aW9uLgoKTGV0J3Mgc2F5IHByb2Nlc3MgWCBpc3N1ZXMgYSAiYmlu
ZCB1bmJvdW5kIGV2ZW50IGNoYW5uZWwgcG9ydCIgSU9DVEwgb3IKYW55IG90aGVyIElPQ1RMIHRo
YXQgbmVlZHMgdG8gcGVyc2lzdCBzb21lIHN0YXRlIG9uIHRoZSBkcml2ZXIgc2lkZS4gSWYKc3Vj
aCBjYWxsIGlzIHBlbmRlZCBmb3JldmVyLCBYIG5lZWRzIHRvIHBhc3Mgc29tZSBraW5kIG9mIHZh
bHVlIHRoYXQKaWRlbnRpZmllcyB0aGUgcmVxdWVzdCBzbyBhIHN1YnNlcXVlbnQgImdldCB0aGUg
YWN0dWFsIHJlc3VsdCBvZiB0aGF0CmJpbmQgY2FsbCIgSU9DVEwga25vd3Mgd2hhdCB0byByZXR1
cm4uIEkgc3VwcG9zZSB0aG9zZSBpZGVudGlmaWVycyBjYW4KYmUganVzdCBjYWxsIGFyZ3VtZW50
cywgYnV0IGl0IGNvbXBsaWNhdGVzIHByb2Nlc3Npbmcgd2hlbiB0aGV5IGFyZSBub3QKdGhlIHNh
bWUgdGhpbmdzIGluIGRpZmZlcmVudCBJT0NUTHMuIFRoZSBkcml2ZXIgbmVlZHMgdG8ga2VlcCB0
cmFjayBvZgp0aG9zZSBJRHMgYWxvbmcgd2l0aCBjYWxsaW5nIHByb2Nlc3NlcywgYW5kIG5lZWRz
IGEgcGVuZGluZyBJUlAgcXVldWUKdGhhdCBzdXBwb3J0cyBJUlAgY2FuY2VsbGF0aW9uIChvbiBj
YWxsZXIgdGhyZWFkIGV4aXQpLiBYIG5lZWRzIHRvCmFsbG9jYXRlIE9WRVJMQVBQRUQgYnVmZmVy
cyBmb3IgZXZlcnkgcGVuZGVkIElPQ1RMIGFuZCBrZWVwIHRoZW0gaW4KbWVtb3J5IHVudGlsIHRo
ZSByZXF1ZXN0IGlzIGNvbXBsZXRlLiBJZiBYIHRlcm1pbmF0ZXMgd2l0aG91dCBwcm9wZXIKY2xl
YW51cCwgZHJpdmVyJ3MgSVJQIGNhbmNlbCByb3V0aW5lcyBhcmUgY2FsbGVkIGF0IERJU1BBVENI
X0xFVkVMIGluCmFyYml0cmFyeSBjb250ZXh0IHdoaWNoIG1ha2VzIHRoaW5ncyBsaWtlIHVubWFw
cGluZyB1c2VyIG1lbW9yeSBjb21wbGljYXRlZC4KCkNvbXBhcmVkIHRvIHRoaXMsIHRoZSBwcm9j
ZXNzIG5vdGlmeSByb3V0aW5lIHJ1bnMgYXQgUEFTU0lWRV9MRVZFTCBhZnRlcgphbGwgdGhyZWFk
cyBoYXZlIGV4aXRlZCBhbmQgYmVmb3JlIGFkZHJlc3Mgc3BhY2UgZGVzdHJ1Y3Rpb24sIGluIHRo
ZQpwcm9wZXIgcHJvY2VzcyBjb250ZXh0LiBUaGUgdXNlciBtb2RlIGNsaWVudCBkb2Vzbid0IG5l
ZWQgdG8ga2VlcAphbnl0aGluZyBpbiBtZW1vcnksIGFsbCBjYWxscyBhcmUgc3RhdGVsZXNzLiBU
aGUgZHJpdmVyIGNhbiBqdXN0IGtlZXAgYQpsaXN0IG9mIGNvbnRleHQgaW5mb3JtYXRpb24gZm9y
IGVhY2ggcmVxdWVzdCwgdGhlIG9ubHkgaWRlbnRpZnlpbmcKaW5mb3JtYXRpb24gaXQgbmVlZHMg
aXMgdGhlIGNsaWVudCBwcm9jZXNzLiBNU0ROIGRvZXNuJ3Qgc2VlbSB0byBpbXBseQp0aGF0IHRo
ZSBub3RpZmljYXRpb24gcm91dGluZXMgYXJlIHNvbWV0aGluZyB0aGF0IG1heSBiZSByZW1vdmVk
IGluIHRoZQpmdXR1cmUuCgpNYXliZSB0aGVyZSBpcyBhIHNpbXBsZXIgd2F5IHRvIGRvIGFsbCB0
aGlzPyBJbiBhbnkgY2FzZSBJJ20gYWxtb3N0IGRvbmUKaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NU
THMgYW5kIHRoZXkgZG8gc2VlbSB0byB3b3JrIHByb3Blcmx5IGZyb20KcnVkaW1lbnRhcnkgdGVz
dGluZy4gSSdtIGp1c3Qgd29uZGVyaW5nIGlmIHRoZSBpbmNyZWFzZSBvZiBjb2RlCmNvbXBsZXhp
dHkgaXMgd29ydGggdGhlIGVmZm9ydC4gQXQgbGVhc3QgSSd2ZSBsZWFybmVkIHNvbWUgdGhpbmdz
IGluIHRoZQpwcm9jZXNzIDopCgpBbnkgdGhvdWdodHM/CgotLSAKUmFmYcWCIFdvamR5xYJhClF1
YmVzIFRvb2xzIGZvciBXaW5kb3dzIGRldmVsb3BlcgpodHRwczovL3d3dy5xdWJlcy1vcy5vcmcv
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwp3aW4tcHYt
ZGV2ZWwgbWFpbGluZyBsaXN0Cndpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3dpbi1wdi1k
ZXZlbA==

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 23 01:18:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 Sep 2015 01:18:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZeYhS-0002F1-0U; Wed, 23 Sep 2015 01:18:22 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZeYhQ-0002Ew-B8
	for win-pv-devel@lists.xenproject.org; Wed, 23 Sep 2015 01:18:20 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	3C/20-24494-BDDF1065; Wed, 23 Sep 2015 01:18:19 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1442971098!32935159!1
X-Originating-IP: [66.111.4.25]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjUgPT4gNDQ5ODE=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29295 invoked from network); 23 Sep 2015 01:18:19 -0000
Received: from out1-smtp.messagingengine.com (HELO
	out1-smtp.messagingengine.com) (66.111.4.25)
	by server-11.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 23 Sep 2015 01:18:19 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 2BEDD203A5
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 21:18:18 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Tue, 22 Sep 2015 21:18:18 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=PpwwyjP+sSFAmu4k
	YY/mQZDh9QY=; b=qvHg/q8l4PioG3KbIp00Ne0rWF6OzgDI7xsBadFB2xYgvBdG
	jm+/t13GQuXG0mjKFqAhSa5+i9N3wiwdsz/0hmRhI5JRQW/BkEX/JG6TzoJledpS
	I5l6r+1pKLDXxsKQQax4ltPCVoT6bSY5qIbuX4RtpWCHF8hcGRAwGBF9H4c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=PpwwyjP+sSFAmu4
	kYY/mQZDh9QY=; b=dzNOZLdvZHj/ggdOQ7L6FuNqltn8Kwe/Prh1ILW5Q1dfopV
	MxTwl6r6f0q2RGG9VLbNEkC5kRz5+fXslG5+9Uk6OBA0sQXNda6Hc2s71d6RjVTg
	89ZSQBBDNjznh30HfExWYkFlSLN0kTFEAAtu3CjGF0N1ijhnaqJ5eRiBfmlI=
X-Sasl-enc: F2pcZzzdBsUQYB0NokaqEA0MVYN8PVs95kAM/TiQmCEx 1442971097
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id AA2D1C00014
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 21:18:17 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <5601F971.7090806@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <5601FDD8.5030300@invisiblethingslab.com>
Date: Wed, 23 Sep 2015 03:18:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <5601F971.7090806@invisiblethingslab.com>
Content-Length: 3474
Subject: Re: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0yMyAwMjo1OSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOgo+IEkgd2FzIHRoaW5r
aW5nIGFib3V0IGhvdyB0byBiZXN0IGltcGxlbWVudCB0aGUgcGVuZGVkIElPQ1RMcyBmb3IKPiBy
ZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2FtZSB1cCB3aXRoIHdhcyBtdWNoIG1v
cmUgY29tcGxpY2F0ZWQKPiBhbmQgZXJyb3ItcHJvbmUgdGhhbiB0aGUgcHJvY2VzcyBub3RpZmlj
YXRpb24gc29sdXRpb24uCj4gCj4gTGV0J3Mgc2F5IHByb2Nlc3MgWCBpc3N1ZXMgYSAiYmluZCB1
bmJvdW5kIGV2ZW50IGNoYW5uZWwgcG9ydCIgSU9DVEwgb3IKPiBhbnkgb3RoZXIgSU9DVEwgdGhh
dCBuZWVkcyB0byBwZXJzaXN0IHNvbWUgc3RhdGUgb24gdGhlIGRyaXZlciBzaWRlLiBJZgo+IHN1
Y2ggY2FsbCBpcyBwZW5kZWQgZm9yZXZlciwgWCBuZWVkcyB0byBwYXNzIHNvbWUga2luZCBvZiB2
YWx1ZSB0aGF0Cj4gaWRlbnRpZmllcyB0aGUgcmVxdWVzdCBzbyBhIHN1YnNlcXVlbnQgImdldCB0
aGUgYWN0dWFsIHJlc3VsdCBvZiB0aGF0Cj4gYmluZCBjYWxsIiBJT0NUTCBrbm93cyB3aGF0IHRv
IHJldHVybi4gSSBzdXBwb3NlIHRob3NlIGlkZW50aWZpZXJzIGNhbgo+IGJlIGp1c3QgY2FsbCBh
cmd1bWVudHMsIGJ1dCBpdCBjb21wbGljYXRlcyBwcm9jZXNzaW5nIHdoZW4gdGhleSBhcmUgbm90
Cj4gdGhlIHNhbWUgdGhpbmdzIGluIGRpZmZlcmVudCBJT0NUTHMuIFRoZSBkcml2ZXIgbmVlZHMg
dG8ga2VlcCB0cmFjayBvZgo+IHRob3NlIElEcyBhbG9uZyB3aXRoIGNhbGxpbmcgcHJvY2Vzc2Vz
LCBhbmQgbmVlZHMgYSBwZW5kaW5nIElSUCBxdWV1ZQo+IHRoYXQgc3VwcG9ydHMgSVJQIGNhbmNl
bGxhdGlvbiAob24gY2FsbGVyIHRocmVhZCBleGl0KS4gWCBuZWVkcyB0bwo+IGFsbG9jYXRlIE9W
RVJMQVBQRUQgYnVmZmVycyBmb3IgZXZlcnkgcGVuZGVkIElPQ1RMIGFuZCBrZWVwIHRoZW0gaW4K
PiBtZW1vcnkgdW50aWwgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUuIElmIFggdGVybWluYXRlcyB3
aXRob3V0IHByb3Blcgo+IGNsZWFudXAsIGRyaXZlcidzIElSUCBjYW5jZWwgcm91dGluZXMgYXJl
IGNhbGxlZCBhdCBESVNQQVRDSF9MRVZFTCBpbgo+IGFyYml0cmFyeSBjb250ZXh0IHdoaWNoIG1h
a2VzIHRoaW5ncyBsaWtlIHVubWFwcGluZyB1c2VyIG1lbW9yeSBjb21wbGljYXRlZC4KPiAKPiBD
b21wYXJlZCB0byB0aGlzLCB0aGUgcHJvY2VzcyBub3RpZnkgcm91dGluZSBydW5zIGF0IFBBU1NJ
VkVfTEVWRUwgYWZ0ZXIKPiBhbGwgdGhyZWFkcyBoYXZlIGV4aXRlZCBhbmQgYmVmb3JlIGFkZHJl
c3Mgc3BhY2UgZGVzdHJ1Y3Rpb24sIGluIHRoZQo+IHByb3BlciBwcm9jZXNzIGNvbnRleHQuIFRo
ZSB1c2VyIG1vZGUgY2xpZW50IGRvZXNuJ3QgbmVlZCB0byBrZWVwCj4gYW55dGhpbmcgaW4gbWVt
b3J5LCBhbGwgY2FsbHMgYXJlIHN0YXRlbGVzcy4gVGhlIGRyaXZlciBjYW4ganVzdCBrZWVwIGEK
PiBsaXN0IG9mIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGVhY2ggcmVxdWVzdCwgdGhlIG9ubHkg
aWRlbnRpZnlpbmcKPiBpbmZvcm1hdGlvbiBpdCBuZWVkcyBpcyB0aGUgY2xpZW50IHByb2Nlc3Mu
IE1TRE4gZG9lc24ndCBzZWVtIHRvIGltcGx5Cj4gdGhhdCB0aGUgbm90aWZpY2F0aW9uIHJvdXRp
bmVzIGFyZSBzb21ldGhpbmcgdGhhdCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUKPiBmdXR1cmUuCj4g
Cj4gTWF5YmUgdGhlcmUgaXMgYSBzaW1wbGVyIHdheSB0byBkbyBhbGwgdGhpcz8gSW4gYW55IGNh
c2UgSSdtIGFsbW9zdCBkb25lCj4gaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NUTHMgYW5kIHRoZXkg
ZG8gc2VlbSB0byB3b3JrIHByb3Blcmx5IGZyb20KPiBydWRpbWVudGFyeSB0ZXN0aW5nLiBJJ20g
anVzdCB3b25kZXJpbmcgaWYgdGhlIGluY3JlYXNlIG9mIGNvZGUKPiBjb21wbGV4aXR5IGlzIHdv
cnRoIHRoZSBlZmZvcnQuIEF0IGxlYXN0IEkndmUgbGVhcm5lZCBzb21lIHRoaW5ncyBpbiB0aGUK
PiBwcm9jZXNzIDopCj4gCkp1c3QgYXMgSSB3cm90ZSB0aGlzIEkgcmVhbGl6ZWQgSSBjYW4gZnJl
ZSBldmVudCBjaGFubmVscyBhbmQgc3VjaCB3aGVuCnRoZSBmaWxlIG9iamVjdCBpcyBjbG9zZWQg
c28gdGhlaXIgSU9DVExzIGRvbid0IG5lZWQgdG8gYmUgcGVuZGVkLiBUaGlzCmRvZXMgc2ltcGxp
ZnkgdGhpbmdzIHNpZ25pZmljYW50bHkgYWx0aG91Z2ggSSB3b25kZXIgaWYgaXQgZG9lc24ndCBs
ZWF2ZQphbnkgaG9sZXMgaWYgdGhlIGRyaXZlciBoYW5kbGUgaXMgZHVwbGljYXRlZCBieSBhbm90
aGVyIHByb2Nlc3MuLi4KCj4gQW55IHRob3VnaHRzPwo+IAoKLS0gClJhZmHFgiBXb2pkecWCYQpR
dWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXIKaHR0cHM6Ly93d3cucXViZXMtb3Mub3Jn
LwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2
LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYt
ZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Wed Sep 23 01:18:22 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 23 Sep 2015 01:18:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1ZeYhS-0002F1-0U; Wed, 23 Sep 2015 01:18:22 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <omeg@invisiblethingslab.com>) id 1ZeYhQ-0002Ew-B8
	for win-pv-devel@lists.xenproject.org; Wed, 23 Sep 2015 01:18:20 +0000
Received: from [85.158.139.211] by server-11.bemta-5.messagelabs.com id
	3C/20-24494-BDDF1065; Wed, 23 Sep 2015 01:18:19 +0000
X-Env-Sender: omeg@invisiblethingslab.com
X-Msg-Ref: server-11.tower-206.messagelabs.com!1442971098!32935159!1
X-Originating-IP: [66.111.4.25]
X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: 
	VHJ1c3RlZCBJUDogNjYuMTExLjQuMjUgPT4gNDQ5ODE=\n
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 29295 invoked from network); 23 Sep 2015 01:18:19 -0000
Received: from out1-smtp.messagingengine.com (HELO
	out1-smtp.messagingengine.com) (66.111.4.25)
	by server-11.tower-206.messagelabs.com with DHE-RSA-AES256-SHA
	encrypted SMTP; 23 Sep 2015 01:18:19 -0000
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
	by mailout.nyi.internal (Postfix) with ESMTP id 2BEDD203A5
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 21:18:18 -0400 (EDT)
Received: from frontend1 ([10.202.2.160])
	by compute2.internal (MEProxy); Tue, 22 Sep 2015 21:18:18 -0400
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	invisiblethingslab.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=PpwwyjP+sSFAmu4k
	YY/mQZDh9QY=; b=qvHg/q8l4PioG3KbIp00Ne0rWF6OzgDI7xsBadFB2xYgvBdG
	jm+/t13GQuXG0mjKFqAhSa5+i9N3wiwdsz/0hmRhI5JRQW/BkEX/JG6TzoJledpS
	I5l6r+1pKLDXxsKQQax4ltPCVoT6bSY5qIbuX4RtpWCHF8hcGRAwGBF9H4c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=
	messagingengine.com; h=content-transfer-encoding:content-type
	:date:from:in-reply-to:message-id:mime-version:references
	:subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=PpwwyjP+sSFAmu4
	kYY/mQZDh9QY=; b=dzNOZLdvZHj/ggdOQ7L6FuNqltn8Kwe/Prh1ILW5Q1dfopV
	MxTwl6r6f0q2RGG9VLbNEkC5kRz5+fXslG5+9Uk6OBA0sQXNda6Hc2s71d6RjVTg
	89ZSQBBDNjznh30HfExWYkFlSLN0kTFEAAtu3CjGF0N1ijhnaqJ5eRiBfmlI=
X-Sasl-enc: F2pcZzzdBsUQYB0NokaqEA0MVYN8PVs95kAM/TiQmCEx 1442971097
Received: from [192.168.0.14] (89-74-29-26.dynamic.chello.pl [89.74.29.26])
	by mail.messagingengine.com (Postfix) with ESMTPA id AA2D1C00014
	for <win-pv-devel@lists.xenproject.org>;
	Tue, 22 Sep 2015 21:18:17 -0400 (EDT)
To: "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
References: <5601F971.7090806@invisiblethingslab.com>
From: =?UTF-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>
X-Enigmail-Draft-Status: N1010
Message-ID: <5601FDD8.5030300@invisiblethingslab.com>
Date: Wed, 23 Sep 2015 03:18:16 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101
	Thunderbird/38.2.0
MIME-Version: 1.0
In-Reply-To: <5601F971.7090806@invisiblethingslab.com>
Content-Length: 3474
Subject: Re: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

T24gMjAxNS0wOS0yMyAwMjo1OSwgUmFmYcWCIFdvamR5xYJhIHdyb3RlOgo+IEkgd2FzIHRoaW5r
aW5nIGFib3V0IGhvdyB0byBiZXN0IGltcGxlbWVudCB0aGUgcGVuZGVkIElPQ1RMcyBmb3IKPiBy
ZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2FtZSB1cCB3aXRoIHdhcyBtdWNoIG1v
cmUgY29tcGxpY2F0ZWQKPiBhbmQgZXJyb3ItcHJvbmUgdGhhbiB0aGUgcHJvY2VzcyBub3RpZmlj
YXRpb24gc29sdXRpb24uCj4gCj4gTGV0J3Mgc2F5IHByb2Nlc3MgWCBpc3N1ZXMgYSAiYmluZCB1
bmJvdW5kIGV2ZW50IGNoYW5uZWwgcG9ydCIgSU9DVEwgb3IKPiBhbnkgb3RoZXIgSU9DVEwgdGhh
dCBuZWVkcyB0byBwZXJzaXN0IHNvbWUgc3RhdGUgb24gdGhlIGRyaXZlciBzaWRlLiBJZgo+IHN1
Y2ggY2FsbCBpcyBwZW5kZWQgZm9yZXZlciwgWCBuZWVkcyB0byBwYXNzIHNvbWUga2luZCBvZiB2
YWx1ZSB0aGF0Cj4gaWRlbnRpZmllcyB0aGUgcmVxdWVzdCBzbyBhIHN1YnNlcXVlbnQgImdldCB0
aGUgYWN0dWFsIHJlc3VsdCBvZiB0aGF0Cj4gYmluZCBjYWxsIiBJT0NUTCBrbm93cyB3aGF0IHRv
IHJldHVybi4gSSBzdXBwb3NlIHRob3NlIGlkZW50aWZpZXJzIGNhbgo+IGJlIGp1c3QgY2FsbCBh
cmd1bWVudHMsIGJ1dCBpdCBjb21wbGljYXRlcyBwcm9jZXNzaW5nIHdoZW4gdGhleSBhcmUgbm90
Cj4gdGhlIHNhbWUgdGhpbmdzIGluIGRpZmZlcmVudCBJT0NUTHMuIFRoZSBkcml2ZXIgbmVlZHMg
dG8ga2VlcCB0cmFjayBvZgo+IHRob3NlIElEcyBhbG9uZyB3aXRoIGNhbGxpbmcgcHJvY2Vzc2Vz
LCBhbmQgbmVlZHMgYSBwZW5kaW5nIElSUCBxdWV1ZQo+IHRoYXQgc3VwcG9ydHMgSVJQIGNhbmNl
bGxhdGlvbiAob24gY2FsbGVyIHRocmVhZCBleGl0KS4gWCBuZWVkcyB0bwo+IGFsbG9jYXRlIE9W
RVJMQVBQRUQgYnVmZmVycyBmb3IgZXZlcnkgcGVuZGVkIElPQ1RMIGFuZCBrZWVwIHRoZW0gaW4K
PiBtZW1vcnkgdW50aWwgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUuIElmIFggdGVybWluYXRlcyB3
aXRob3V0IHByb3Blcgo+IGNsZWFudXAsIGRyaXZlcidzIElSUCBjYW5jZWwgcm91dGluZXMgYXJl
IGNhbGxlZCBhdCBESVNQQVRDSF9MRVZFTCBpbgo+IGFyYml0cmFyeSBjb250ZXh0IHdoaWNoIG1h
a2VzIHRoaW5ncyBsaWtlIHVubWFwcGluZyB1c2VyIG1lbW9yeSBjb21wbGljYXRlZC4KPiAKPiBD
b21wYXJlZCB0byB0aGlzLCB0aGUgcHJvY2VzcyBub3RpZnkgcm91dGluZSBydW5zIGF0IFBBU1NJ
VkVfTEVWRUwgYWZ0ZXIKPiBhbGwgdGhyZWFkcyBoYXZlIGV4aXRlZCBhbmQgYmVmb3JlIGFkZHJl
c3Mgc3BhY2UgZGVzdHJ1Y3Rpb24sIGluIHRoZQo+IHByb3BlciBwcm9jZXNzIGNvbnRleHQuIFRo
ZSB1c2VyIG1vZGUgY2xpZW50IGRvZXNuJ3QgbmVlZCB0byBrZWVwCj4gYW55dGhpbmcgaW4gbWVt
b3J5LCBhbGwgY2FsbHMgYXJlIHN0YXRlbGVzcy4gVGhlIGRyaXZlciBjYW4ganVzdCBrZWVwIGEK
PiBsaXN0IG9mIGNvbnRleHQgaW5mb3JtYXRpb24gZm9yIGVhY2ggcmVxdWVzdCwgdGhlIG9ubHkg
aWRlbnRpZnlpbmcKPiBpbmZvcm1hdGlvbiBpdCBuZWVkcyBpcyB0aGUgY2xpZW50IHByb2Nlc3Mu
IE1TRE4gZG9lc24ndCBzZWVtIHRvIGltcGx5Cj4gdGhhdCB0aGUgbm90aWZpY2F0aW9uIHJvdXRp
bmVzIGFyZSBzb21ldGhpbmcgdGhhdCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUKPiBmdXR1cmUuCj4g
Cj4gTWF5YmUgdGhlcmUgaXMgYSBzaW1wbGVyIHdheSB0byBkbyBhbGwgdGhpcz8gSW4gYW55IGNh
c2UgSSdtIGFsbW9zdCBkb25lCj4gaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NUTHMgYW5kIHRoZXkg
ZG8gc2VlbSB0byB3b3JrIHByb3Blcmx5IGZyb20KPiBydWRpbWVudGFyeSB0ZXN0aW5nLiBJJ20g
anVzdCB3b25kZXJpbmcgaWYgdGhlIGluY3JlYXNlIG9mIGNvZGUKPiBjb21wbGV4aXR5IGlzIHdv
cnRoIHRoZSBlZmZvcnQuIEF0IGxlYXN0IEkndmUgbGVhcm5lZCBzb21lIHRoaW5ncyBpbiB0aGUK
PiBwcm9jZXNzIDopCj4gCkp1c3QgYXMgSSB3cm90ZSB0aGlzIEkgcmVhbGl6ZWQgSSBjYW4gZnJl
ZSBldmVudCBjaGFubmVscyBhbmQgc3VjaCB3aGVuCnRoZSBmaWxlIG9iamVjdCBpcyBjbG9zZWQg
c28gdGhlaXIgSU9DVExzIGRvbid0IG5lZWQgdG8gYmUgcGVuZGVkLiBUaGlzCmRvZXMgc2ltcGxp
ZnkgdGhpbmdzIHNpZ25pZmljYW50bHkgYWx0aG91Z2ggSSB3b25kZXIgaWYgaXQgZG9lc24ndCBs
ZWF2ZQphbnkgaG9sZXMgaWYgdGhlIGRyaXZlciBoYW5kbGUgaXMgZHVwbGljYXRlZCBieSBhbm90
aGVyIHByb2Nlc3MuLi4KCj4gQW55IHRob3VnaHRzPwo+IAoKLS0gClJhZmHFgiBXb2pkecWCYQpR
dWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXIKaHR0cHM6Ly93d3cucXViZXMtb3Mub3Jn
LwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18Kd2luLXB2
LWRldmVsIG1haWxpbmcgbGlzdAp3aW4tcHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cDovL2xpc3RzLnhlbnByb2plY3Qub3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYt
ZGV2ZWw=

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 24 15:47:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 24 Sep 2015 15:47:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zf8kR-0007Sx-74; Thu, 24 Sep 2015 15:47:51 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7021a366c=Paul.Durrant@citrix.com>)
	id 1Zf8kQ-0007Sr-DX
	for win-pv-devel@lists.xenproject.org; Thu, 24 Sep 2015 15:47:50 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	51/7B-30270-52B14065; Thu, 24 Sep 2015 15:47:49 +0000
X-Env-Sender: prvs=7021a366c=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1443109669!14080903!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25653 invoked from network); 24 Sep 2015 15:47:49 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	24 Sep 2015 15:47:49 -0000
X-IronPort-AV: E=Sophos;i="5.17,581,1437436800"; 
   d="scan'208";a="3766101"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] XENIFACE IOCTL interfaces
Thread-Index: AQHQ9Zs0Iu3wLIe2KUGUDPSHGE2A5Z5JLrQAgAKd6jA=
Date: Thu, 24 Sep 2015 15:47:47 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5D3F11@AMSPEX01CL01.citrite.net>
References: <5601F971.7090806@invisiblethingslab.com>
	<5601FDD8.5030300@invisiblethingslab.com>
In-Reply-To: <5601FDD8.5030300@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjMgU2VwdGVtYmVyIDIwMTUgMDI6MTgNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWEVOSUZBQ0UgSU9DVEwgaW50
ZXJmYWNlcw0KPiANCj4gT24gMjAxNS0wOS0yMyAwMjo1OSwgUmFmYcWCIFdvamR5xYJhIHdyb3Rl
Og0KPiA+IEkgd2FzIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGltcGxlbWVudCB0aGUgcGVu
ZGVkIElPQ1RMcyBmb3INCj4gPiByZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2Ft
ZSB1cCB3aXRoIHdhcyBtdWNoIG1vcmUNCj4gY29tcGxpY2F0ZWQNCj4gPiBhbmQgZXJyb3ItcHJv
bmUgdGhhbiB0aGUgcHJvY2VzcyBub3RpZmljYXRpb24gc29sdXRpb24uDQo+ID4NCj4gPiBMZXQn
cyBzYXkgcHJvY2VzcyBYIGlzc3VlcyBhICJiaW5kIHVuYm91bmQgZXZlbnQgY2hhbm5lbCBwb3J0
IiBJT0NUTCBvcg0KPiA+IGFueSBvdGhlciBJT0NUTCB0aGF0IG5lZWRzIHRvIHBlcnNpc3Qgc29t
ZSBzdGF0ZSBvbiB0aGUgZHJpdmVyIHNpZGUuIElmDQo+ID4gc3VjaCBjYWxsIGlzIHBlbmRlZCBm
b3JldmVyLCBYIG5lZWRzIHRvIHBhc3Mgc29tZSBraW5kIG9mIHZhbHVlIHRoYXQNCj4gPiBpZGVu
dGlmaWVzIHRoZSByZXF1ZXN0IHNvIGEgc3Vic2VxdWVudCAiZ2V0IHRoZSBhY3R1YWwgcmVzdWx0
IG9mIHRoYXQNCj4gPiBiaW5kIGNhbGwiIElPQ1RMIGtub3dzIHdoYXQgdG8gcmV0dXJuLiBJIHN1
cHBvc2UgdGhvc2UgaWRlbnRpZmllcnMgY2FuDQo+ID4gYmUganVzdCBjYWxsIGFyZ3VtZW50cywg
YnV0IGl0IGNvbXBsaWNhdGVzIHByb2Nlc3Npbmcgd2hlbiB0aGV5IGFyZSBub3QNCj4gPiB0aGUg
c2FtZSB0aGluZ3MgaW4gZGlmZmVyZW50IElPQ1RMcy4gVGhlIGRyaXZlciBuZWVkcyB0byBrZWVw
IHRyYWNrIG9mDQo+ID4gdGhvc2UgSURzIGFsb25nIHdpdGggY2FsbGluZyBwcm9jZXNzZXMsIGFu
ZCBuZWVkcyBhIHBlbmRpbmcgSVJQIHF1ZXVlDQo+ID4gdGhhdCBzdXBwb3J0cyBJUlAgY2FuY2Vs
bGF0aW9uIChvbiBjYWxsZXIgdGhyZWFkIGV4aXQpLiBYIG5lZWRzIHRvDQo+ID4gYWxsb2NhdGUg
T1ZFUkxBUFBFRCBidWZmZXJzIGZvciBldmVyeSBwZW5kZWQgSU9DVEwgYW5kIGtlZXAgdGhlbSBp
bg0KPiA+IG1lbW9yeSB1bnRpbCB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZS4gSWYgWCB0ZXJtaW5h
dGVzIHdpdGhvdXQgcHJvcGVyDQo+ID4gY2xlYW51cCwgZHJpdmVyJ3MgSVJQIGNhbmNlbCByb3V0
aW5lcyBhcmUgY2FsbGVkIGF0IERJU1BBVENIX0xFVkVMIGluDQo+ID4gYXJiaXRyYXJ5IGNvbnRl
eHQgd2hpY2ggbWFrZXMgdGhpbmdzIGxpa2UgdW5tYXBwaW5nIHVzZXIgbWVtb3J5DQo+IGNvbXBs
aWNhdGVkLg0KPiA+DQo+ID4gQ29tcGFyZWQgdG8gdGhpcywgdGhlIHByb2Nlc3Mgbm90aWZ5IHJv
dXRpbmUgcnVucyBhdCBQQVNTSVZFX0xFVkVMIGFmdGVyDQo+ID4gYWxsIHRocmVhZHMgaGF2ZSBl
eGl0ZWQgYW5kIGJlZm9yZSBhZGRyZXNzIHNwYWNlIGRlc3RydWN0aW9uLCBpbiB0aGUNCj4gPiBw
cm9wZXIgcHJvY2VzcyBjb250ZXh0LiBUaGUgdXNlciBtb2RlIGNsaWVudCBkb2Vzbid0IG5lZWQg
dG8ga2VlcA0KPiA+IGFueXRoaW5nIGluIG1lbW9yeSwgYWxsIGNhbGxzIGFyZSBzdGF0ZWxlc3Mu
IFRoZSBkcml2ZXIgY2FuIGp1c3Qga2VlcCBhDQo+ID4gbGlzdCBvZiBjb250ZXh0IGluZm9ybWF0
aW9uIGZvciBlYWNoIHJlcXVlc3QsIHRoZSBvbmx5IGlkZW50aWZ5aW5nDQo+ID4gaW5mb3JtYXRp
b24gaXQgbmVlZHMgaXMgdGhlIGNsaWVudCBwcm9jZXNzLiBNU0ROIGRvZXNuJ3Qgc2VlbSB0byBp
bXBseQ0KPiA+IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiByb3V0aW5lcyBhcmUgc29tZXRoaW5nIHRo
YXQgbWF5IGJlIHJlbW92ZWQgaW4gdGhlDQo+ID4gZnV0dXJlLg0KPiA+DQo+ID4gTWF5YmUgdGhl
cmUgaXMgYSBzaW1wbGVyIHdheSB0byBkbyBhbGwgdGhpcz8gSW4gYW55IGNhc2UgSSdtIGFsbW9z
dCBkb25lDQo+ID4gaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NUTHMgYW5kIHRoZXkgZG8gc2VlbSB0
byB3b3JrIHByb3Blcmx5IGZyb20NCj4gPiBydWRpbWVudGFyeSB0ZXN0aW5nLiBJJ20ganVzdCB3
b25kZXJpbmcgaWYgdGhlIGluY3JlYXNlIG9mIGNvZGUNCj4gPiBjb21wbGV4aXR5IGlzIHdvcnRo
IHRoZSBlZmZvcnQuIEF0IGxlYXN0IEkndmUgbGVhcm5lZCBzb21lIHRoaW5ncyBpbiB0aGUNCj4g
PiBwcm9jZXNzIDopDQo+ID4NCj4gSnVzdCBhcyBJIHdyb3RlIHRoaXMgSSByZWFsaXplZCBJIGNh
biBmcmVlIGV2ZW50IGNoYW5uZWxzIGFuZCBzdWNoIHdoZW4NCj4gdGhlIGZpbGUgb2JqZWN0IGlz
IGNsb3NlZCBzbyB0aGVpciBJT0NUTHMgZG9uJ3QgbmVlZCB0byBiZSBwZW5kZWQuIFRoaXMNCj4g
ZG9lcyBzaW1wbGlmeSB0aGluZ3Mgc2lnbmlmaWNhbnRseSBhbHRob3VnaCBJIHdvbmRlciBpZiBp
dCBkb2Vzbid0IGxlYXZlDQo+IGFueSBob2xlcyBpZiB0aGUgZHJpdmVyIGhhbmRsZSBpcyBkdXBs
aWNhdGVkIGJ5IGFub3RoZXIgcHJvY2Vzcy4uLg0KPg0KDQpJIHdvdWxkbid0IHdvcnJ5IGFib3V0
IHRoYXQgYXQgdGhpcyBzdGFnZS4gRG8geW91IGVudmlzYWdlIHRoZSBpb2N0bCBpbnRlcmZhY2Ug
YmVpbmcgYXZhaWxhYmxlIHRvIG5vbi1wcml2aWxlZ2VkIHVzZXJzPyBJZiBub3QgdGhlbiBjbGVh
bnVwIG9uIGZpbGUgb2JqZWN0IGRlc3RydWN0aW9uIGlzIGZpbmUgKHdpdGggaW9jdGxzIHRvIGRv
IGV4cGxpY2l0IGV2dGNobiBjbG9zZSwgZ3JhbnQgdW5tYXAsIGV0Yy4pLiBJZiB5b3UgYXJlIGV4
cGVjdGluZyB0aGlzIHRvIGJlIGF2YWlsYWJsZSB0byBub24tcHJpdmlsZWdlZCB1c2VycyB0aGVu
IEkgZ3Vlc3Mgd2UgbmVlZCB0byBoYXZlIHBlci11c2VyIHF1b3RhcyBvbiByZXNvdXJjZXMuLi4g
ZXZlbnQgY2hhbm5lbHMgd2UgaGF2ZSBsb2FkcyBvZiBpbiB0aGVvcnkgKGlmIGZpZm8gaXMgYmVp
bmcgdXNlZCkgYW5kIHdlIHJlYWxseSBjYW4ndCBleHBvc2UgZ3JhbnQgbWFwcGluZyBkaXJlY3Rs
eS4NCg0KICBQYXVsDQoNCiANCj4gPiBBbnkgdGhvdWdodHM/DQo+ID4NCj4gDQo+IC0tDQo+IFJh
ZmHFgiBXb2pkecWCYQ0KPiBRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXINCj4gaHR0
cHM6Ly93d3cucXViZXMtb3Mub3JnLw0KPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0KPiB3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxp
c3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

From win-pv-devel-bounces@lists.xenproject.org Thu Sep 24 15:47:52 2015
Return-path: <win-pv-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 24 Sep 2015 15:47:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xen.org)
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <win-pv-devel-bounces@lists.xenproject.org>)
	id 1Zf8kR-0007Sx-74; Thu, 24 Sep 2015 15:47:51 +0000
Received: from mail6.bemta5.messagelabs.com ([195.245.231.135])
	by lists.xen.org with esmtp (Exim 4.72)
	(envelope-from <prvs=7021a366c=Paul.Durrant@citrix.com>)
	id 1Zf8kQ-0007Sr-DX
	for win-pv-devel@lists.xenproject.org; Thu, 24 Sep 2015 15:47:50 +0000
Received: from [85.158.139.211] by server-9.bemta-5.messagelabs.com id
	51/7B-30270-52B14065; Thu, 24 Sep 2015 15:47:49 +0000
X-Env-Sender: prvs=7021a366c=Paul.Durrant@citrix.com
X-Msg-Ref: server-2.tower-206.messagelabs.com!1443109669!14080903!1
X-Originating-IP: [185.25.65.24]
X-SpamReason: No, hits=0.5 required=7.0 tests=BODY_RANDOM_LONG,
	received_headers: No Received headers
X-StarScan-Received: 
X-StarScan-Version: 6.13.16; banners=-,-,-
X-VirusChecked: Checked
Received: (qmail 25653 invoked from network); 24 Sep 2015 15:47:49 -0000
Received: from smtp.ctxuk.citrix.com (HELO SMTP.EU.CITRIX.COM) (185.25.65.24)
	by server-2.tower-206.messagelabs.com with RC4-SHA encrypted SMTP;
	24 Sep 2015 15:47:49 -0000
X-IronPort-AV: E=Sophos;i="5.17,581,1437436800"; 
   d="scan'208";a="3766101"
From: Paul Durrant <Paul.Durrant@citrix.com>
To: =?utf-8?B?UmFmYcWCIFdvamR5xYJh?= <omeg@invisiblethingslab.com>,
	"win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Thread-Topic: [win-pv-devel] XENIFACE IOCTL interfaces
Thread-Index: AQHQ9Zs0Iu3wLIe2KUGUDPSHGE2A5Z5JLrQAgAKd6jA=
Date: Thu, 24 Sep 2015 15:47:47 +0000
Message-ID: <9AAE0902D5BC7E449B7C8E4E778ABCD02F5D3F11@AMSPEX01CL01.citrite.net>
References: <5601F971.7090806@invisiblethingslab.com>
	<5601FDD8.5030300@invisiblethingslab.com>
In-Reply-To: <5601FDD8.5030300@invisiblethingslab.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
MIME-Version: 1.0
X-DLP: AMS1
Subject: Re: [win-pv-devel] XENIFACE IOCTL interfaces
X-BeenThere: win-pv-devel@lists.xenproject.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: Developer list for the Windows PV Drivers subproject
	<win-pv-devel.lists.xenproject.org>
List-Unsubscribe: <http://lists.xenproject.org/cgi-bin/mailman/options/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:win-pv-devel@lists.xenproject.org>
List-Help: <mailto:win-pv-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel>,
	<mailto:win-pv-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Sender: win-pv-devel-bounces@lists.xenproject.org
Errors-To: win-pv-devel-bounces@lists.xenproject.org

PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB3aW4tcHYtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBbbWFpbHRvOndpbi1wdi1kZXZlbC0NCj4gYm91bmNlc0Bs
aXN0cy54ZW5wcm9qZWN0Lm9yZ10gT24gQmVoYWxmIE9mIFJhZmFsIFdvamR5bGENCj4gU2VudDog
MjMgU2VwdGVtYmVyIDIwMTUgMDI6MTgNCj4gVG86IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KPiBTdWJqZWN0OiBSZTogW3dpbi1wdi1kZXZlbF0gWEVOSUZBQ0UgSU9DVEwgaW50
ZXJmYWNlcw0KPiANCj4gT24gMjAxNS0wOS0yMyAwMjo1OSwgUmFmYcWCIFdvamR5xYJhIHdyb3Rl
Og0KPiA+IEkgd2FzIHRoaW5raW5nIGFib3V0IGhvdyB0byBiZXN0IGltcGxlbWVudCB0aGUgcGVu
ZGVkIElPQ1RMcyBmb3INCj4gPiByZXNvdXJjZSBjbGVhbnVwIGFuZCBldmVyeXRoaW5nIEkgY2Ft
ZSB1cCB3aXRoIHdhcyBtdWNoIG1vcmUNCj4gY29tcGxpY2F0ZWQNCj4gPiBhbmQgZXJyb3ItcHJv
bmUgdGhhbiB0aGUgcHJvY2VzcyBub3RpZmljYXRpb24gc29sdXRpb24uDQo+ID4NCj4gPiBMZXQn
cyBzYXkgcHJvY2VzcyBYIGlzc3VlcyBhICJiaW5kIHVuYm91bmQgZXZlbnQgY2hhbm5lbCBwb3J0
IiBJT0NUTCBvcg0KPiA+IGFueSBvdGhlciBJT0NUTCB0aGF0IG5lZWRzIHRvIHBlcnNpc3Qgc29t
ZSBzdGF0ZSBvbiB0aGUgZHJpdmVyIHNpZGUuIElmDQo+ID4gc3VjaCBjYWxsIGlzIHBlbmRlZCBm
b3JldmVyLCBYIG5lZWRzIHRvIHBhc3Mgc29tZSBraW5kIG9mIHZhbHVlIHRoYXQNCj4gPiBpZGVu
dGlmaWVzIHRoZSByZXF1ZXN0IHNvIGEgc3Vic2VxdWVudCAiZ2V0IHRoZSBhY3R1YWwgcmVzdWx0
IG9mIHRoYXQNCj4gPiBiaW5kIGNhbGwiIElPQ1RMIGtub3dzIHdoYXQgdG8gcmV0dXJuLiBJIHN1
cHBvc2UgdGhvc2UgaWRlbnRpZmllcnMgY2FuDQo+ID4gYmUganVzdCBjYWxsIGFyZ3VtZW50cywg
YnV0IGl0IGNvbXBsaWNhdGVzIHByb2Nlc3Npbmcgd2hlbiB0aGV5IGFyZSBub3QNCj4gPiB0aGUg
c2FtZSB0aGluZ3MgaW4gZGlmZmVyZW50IElPQ1RMcy4gVGhlIGRyaXZlciBuZWVkcyB0byBrZWVw
IHRyYWNrIG9mDQo+ID4gdGhvc2UgSURzIGFsb25nIHdpdGggY2FsbGluZyBwcm9jZXNzZXMsIGFu
ZCBuZWVkcyBhIHBlbmRpbmcgSVJQIHF1ZXVlDQo+ID4gdGhhdCBzdXBwb3J0cyBJUlAgY2FuY2Vs
bGF0aW9uIChvbiBjYWxsZXIgdGhyZWFkIGV4aXQpLiBYIG5lZWRzIHRvDQo+ID4gYWxsb2NhdGUg
T1ZFUkxBUFBFRCBidWZmZXJzIGZvciBldmVyeSBwZW5kZWQgSU9DVEwgYW5kIGtlZXAgdGhlbSBp
bg0KPiA+IG1lbW9yeSB1bnRpbCB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZS4gSWYgWCB0ZXJtaW5h
dGVzIHdpdGhvdXQgcHJvcGVyDQo+ID4gY2xlYW51cCwgZHJpdmVyJ3MgSVJQIGNhbmNlbCByb3V0
aW5lcyBhcmUgY2FsbGVkIGF0IERJU1BBVENIX0xFVkVMIGluDQo+ID4gYXJiaXRyYXJ5IGNvbnRl
eHQgd2hpY2ggbWFrZXMgdGhpbmdzIGxpa2UgdW5tYXBwaW5nIHVzZXIgbWVtb3J5DQo+IGNvbXBs
aWNhdGVkLg0KPiA+DQo+ID4gQ29tcGFyZWQgdG8gdGhpcywgdGhlIHByb2Nlc3Mgbm90aWZ5IHJv
dXRpbmUgcnVucyBhdCBQQVNTSVZFX0xFVkVMIGFmdGVyDQo+ID4gYWxsIHRocmVhZHMgaGF2ZSBl
eGl0ZWQgYW5kIGJlZm9yZSBhZGRyZXNzIHNwYWNlIGRlc3RydWN0aW9uLCBpbiB0aGUNCj4gPiBw
cm9wZXIgcHJvY2VzcyBjb250ZXh0LiBUaGUgdXNlciBtb2RlIGNsaWVudCBkb2Vzbid0IG5lZWQg
dG8ga2VlcA0KPiA+IGFueXRoaW5nIGluIG1lbW9yeSwgYWxsIGNhbGxzIGFyZSBzdGF0ZWxlc3Mu
IFRoZSBkcml2ZXIgY2FuIGp1c3Qga2VlcCBhDQo+ID4gbGlzdCBvZiBjb250ZXh0IGluZm9ybWF0
aW9uIGZvciBlYWNoIHJlcXVlc3QsIHRoZSBvbmx5IGlkZW50aWZ5aW5nDQo+ID4gaW5mb3JtYXRp
b24gaXQgbmVlZHMgaXMgdGhlIGNsaWVudCBwcm9jZXNzLiBNU0ROIGRvZXNuJ3Qgc2VlbSB0byBp
bXBseQ0KPiA+IHRoYXQgdGhlIG5vdGlmaWNhdGlvbiByb3V0aW5lcyBhcmUgc29tZXRoaW5nIHRo
YXQgbWF5IGJlIHJlbW92ZWQgaW4gdGhlDQo+ID4gZnV0dXJlLg0KPiA+DQo+ID4gTWF5YmUgdGhl
cmUgaXMgYSBzaW1wbGVyIHdheSB0byBkbyBhbGwgdGhpcz8gSW4gYW55IGNhc2UgSSdtIGFsbW9z
dCBkb25lDQo+ID4gaW1wbGVtZW50aW5nIHBlbmRlZCBJT0NUTHMgYW5kIHRoZXkgZG8gc2VlbSB0
byB3b3JrIHByb3Blcmx5IGZyb20NCj4gPiBydWRpbWVudGFyeSB0ZXN0aW5nLiBJJ20ganVzdCB3
b25kZXJpbmcgaWYgdGhlIGluY3JlYXNlIG9mIGNvZGUNCj4gPiBjb21wbGV4aXR5IGlzIHdvcnRo
IHRoZSBlZmZvcnQuIEF0IGxlYXN0IEkndmUgbGVhcm5lZCBzb21lIHRoaW5ncyBpbiB0aGUNCj4g
PiBwcm9jZXNzIDopDQo+ID4NCj4gSnVzdCBhcyBJIHdyb3RlIHRoaXMgSSByZWFsaXplZCBJIGNh
biBmcmVlIGV2ZW50IGNoYW5uZWxzIGFuZCBzdWNoIHdoZW4NCj4gdGhlIGZpbGUgb2JqZWN0IGlz
IGNsb3NlZCBzbyB0aGVpciBJT0NUTHMgZG9uJ3QgbmVlZCB0byBiZSBwZW5kZWQuIFRoaXMNCj4g
ZG9lcyBzaW1wbGlmeSB0aGluZ3Mgc2lnbmlmaWNhbnRseSBhbHRob3VnaCBJIHdvbmRlciBpZiBp
dCBkb2Vzbid0IGxlYXZlDQo+IGFueSBob2xlcyBpZiB0aGUgZHJpdmVyIGhhbmRsZSBpcyBkdXBs
aWNhdGVkIGJ5IGFub3RoZXIgcHJvY2Vzcy4uLg0KPg0KDQpJIHdvdWxkbid0IHdvcnJ5IGFib3V0
IHRoYXQgYXQgdGhpcyBzdGFnZS4gRG8geW91IGVudmlzYWdlIHRoZSBpb2N0bCBpbnRlcmZhY2Ug
YmVpbmcgYXZhaWxhYmxlIHRvIG5vbi1wcml2aWxlZ2VkIHVzZXJzPyBJZiBub3QgdGhlbiBjbGVh
bnVwIG9uIGZpbGUgb2JqZWN0IGRlc3RydWN0aW9uIGlzIGZpbmUgKHdpdGggaW9jdGxzIHRvIGRv
IGV4cGxpY2l0IGV2dGNobiBjbG9zZSwgZ3JhbnQgdW5tYXAsIGV0Yy4pLiBJZiB5b3UgYXJlIGV4
cGVjdGluZyB0aGlzIHRvIGJlIGF2YWlsYWJsZSB0byBub24tcHJpdmlsZWdlZCB1c2VycyB0aGVu
IEkgZ3Vlc3Mgd2UgbmVlZCB0byBoYXZlIHBlci11c2VyIHF1b3RhcyBvbiByZXNvdXJjZXMuLi4g
ZXZlbnQgY2hhbm5lbHMgd2UgaGF2ZSBsb2FkcyBvZiBpbiB0aGVvcnkgKGlmIGZpZm8gaXMgYmVp
bmcgdXNlZCkgYW5kIHdlIHJlYWxseSBjYW4ndCBleHBvc2UgZ3JhbnQgbWFwcGluZyBkaXJlY3Rs
eS4NCg0KICBQYXVsDQoNCiANCj4gPiBBbnkgdGhvdWdodHM/DQo+ID4NCj4gDQo+IC0tDQo+IFJh
ZmHFgiBXb2pkecWCYQ0KPiBRdWJlcyBUb29scyBmb3IgV2luZG93cyBkZXZlbG9wZXINCj4gaHR0
cHM6Ly93d3cucXViZXMtb3Mub3JnLw0KPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18NCj4gd2luLXB2LWRldmVsIG1haWxpbmcgbGlzdA0KPiB3aW4t
cHYtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cDovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby93aW4tcHYtZGV2ZWwNCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCndpbi1wdi1kZXZlbCBtYWlsaW5nIGxp
c3QKd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHA6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vd2luLXB2LWRldmVs

