From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FROM,MAILING_LIST_MULTI, MARKETING_PARTNERS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 21252 invoked from network); 1 Mar 2022 17:04:08 -0000 Received: from minnie.tuhs.org (45.79.103.53) by inbox.vuxu.org with ESMTPUTF8; 1 Mar 2022 17:04:08 -0000 Received: by minnie.tuhs.org (Postfix, from userid 112) id 4A90E9CC41; Wed, 2 Mar 2022 03:04:07 +1000 (AEST) Received: from minnie.tuhs.org (localhost [127.0.0.1]) by minnie.tuhs.org (Postfix) with ESMTP id E7E3F9CC02; Wed, 2 Mar 2022 03:02:45 +1000 (AEST) Authentication-Results: minnie.tuhs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="K3+e09pn"; dkim-atps=neutral Received: by minnie.tuhs.org (Postfix, from userid 112) id 5E1169CC02; Wed, 2 Mar 2022 02:56:41 +1000 (AEST) Received: from mail-vk1-f169.google.com (mail-vk1-f169.google.com [209.85.221.169]) by minnie.tuhs.org (Postfix) with ESMTPS id ACE9B9CBCE for ; Wed, 2 Mar 2022 02:56:39 +1000 (AEST) Received: by mail-vk1-f169.google.com with SMTP id j9so7190814vkj.1 for ; Tue, 01 Mar 2022 08:56:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=F64GLeVzjmZSgJ57w2vmMZF/Rj7zztj6ejk5TNc4i5k=; b=K3+e09pnYs1HOCgjOAvPWY9z2RfHNe0FSrWUMv0BQQAjpbXrozpXbXgSRskmHWQGC2 TmVVC5X8dh/OdOvHb7xfshid3hgxUk0zp14zFMIoefj67Nxcq8RZpb310a1cTDcuQmp4 k+2BkZIuub3PINiq+zxvL4R/pa+UWJKI9bIGpI3sJgonNmbpePD72td74XoJ3xkBBAWF YEPpjBK7w3Mia2PEMGHf/lV4arT7MUGnVyMGBs2oy9EhlUfkaYZb9ErcbjJ6zA6/kXai 7f3exAJsTKIQ42wkVTgmm6rV1Q+Ht+PXq6eEkLl+xAqQ561eVo1VNR/3WV2gRxoB7qGY Jgsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=F64GLeVzjmZSgJ57w2vmMZF/Rj7zztj6ejk5TNc4i5k=; b=QzWGul5T3G7b4YQDfjysqG7s3RDTiYgF9RqXPFiQLdDjwHwoH3vlxXMkfyDh1wRrLc YhVrBSZa23VpYQ5NACt5zVBnJhqa0K+MISuOqp9B3Sj11Qk44MA/8PSHPbVCkU5e8CWH 7qt6C1ex0VgFLZWD8gOnHy5wObBkORajI+qbBhWU27c0b/o7QVyGTMuracmqefLmT4zU Hh2/m1oAUo3vG4lqAB2Hd2vjweHvZjebjf0FVpe9hTsLwbdoTJCGp2+wKovd/2QPfgaw zJXyeGqLoXJt9IjoZM5e/FD58Tii5U2C+/hnK/DgupPzgQbW+682NSi0Hc2P+lL5UWSv MqWw== X-Gm-Message-State: AOAM532ZVGjPck1JssecVHdpAx3+r4AlVwb/CYtH/y1Fcm41Jij+QrHk WXMZwTh3RO2BzhbNOIu74hQfep5VNLnLkB/0sPKtsTNn X-Google-Smtp-Source: ABdhPJyNm6hPQY4ikn9ysdavPq5/PGKRSbp+6RNZDhzbvbyBYA3Un9c9824arYXVAveZjfdofhB5lRhvPrST3AIrno8= X-Received: by 2002:a1f:218d:0:b0:331:2fa8:14ed with SMTP id h135-20020a1f218d000000b003312fa814edmr10523390vkh.25.1646153798390; Tue, 01 Mar 2022 08:56:38 -0800 (PST) MIME-Version: 1.0 Received: by 2002:ab0:6955:0:0:0:0:0 with HTTP; Tue, 1 Mar 2022 08:56:37 -0800 (PST) From: Paul Winalski Date: Tue, 1 Mar 2022 11:56:37 -0500 Message-ID: To: TUHS main list Content-Type: multipart/mixed; boundary="000000000000664f3505d92b0cb0" Subject: [TUHS] Pipes and PRISM X-BeenThere: tuhs@minnie.tuhs.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: The Unix Heritage Society mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: tuhs-bounces@minnie.tuhs.org Sender: "TUHS" --000000000000664f3505d92b0cb0 Content-Type: text/plain; charset="UTF-8" Last week there was a bit of discussion about the different shells that would eventually lead to srb writing the shell that took his name and the command syntax and semantics that most modern shells use today. Some of you may remember, VMS had a command interpreter called DCL (Digital Command language), part of an attempt to make command syntax uniform across DEC's different operating systems (TOPS-20 also used DCL). As DEC started to recognize the value of the Unix marketplace, a project was born in DEC's Commercial Languages and Tools group to bring the Unix Bourne shell to VMS and to sell it as a product they called DEC Shell. I had been part of that effort and one of the issues we had to solve is providing formal UNIX pipe semantics. They of course needed to somehow implement UNIX style process pipelines. VMS from the beginning has had an interprocess communications pseudo-device called the mailbox that can be written to and read from via the usual I/O mechanism (the QIO system service). A large problem with them is that it is not possible to detect the "broken pipe" condition with a mailbox and that feature deficiency made them unsuitable for use with DEC Shell. So the team had me write a new device driver, based closely on the mailbox driver, but that could detect broken pipes lines UNIX-style. Shortly after I finished the VMS pipe driver, the team at DECwest had started work on the MICA project, which was Dave Culter's proposed OS unification. Dave's team had developed a machine architecture called PRISM (Proposed RISC Machine) to be the VAX follow-on. For forward compatibility purposes, PRISM would have to support both Ultrix and VMS. Dave and team had already written a microkernel-based, lightweight OS for VAX called VAXeln that was intended for real-time applications. His new idea was to have a MACH-like microkernel OS which he called MICA and then to put three user mode personality modules on top of that: P.VMS, implementing the VMS system services and ABI P.Ultrix, implementing the Unix system calls and ABI P.TBD, a new OS API and ABI intended to supersede VMS So I wrote the attached "why pipes" memo to explain to Cutler's team why it was important to implement pipes natively in P.TBD if they wanted that OS to be a viable follow-on to VMS and Ultrix. In the end, Dick Sites's 64-bit RISC machine architecture proposal, which was called Alpha, won out over PRISM. Cutler and a bunch of his DECwest engineering team went off to Microsoft. Dave's idea of a microkernel-based OS with multiple personalities of course saw the light of day originally as NT OS/2, but because of the idea of multiple personalities, when Microsoft and IBM divorced Dave was able to quickly pivot to the now infamous Win32 personality, as what would be called Windows NT. It was also easy for Softway Systems to later complete the NT POSIX layer for their Interix product, which now a few generations later is called WSL by Microsoft. -Paul W. --000000000000664f3505d92b0cb0 Content-Type: text/plain; charset="US-ASCII"; name="why_pipes.txt" Content-Disposition: attachment; filename="why_pipes.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 VGhlIHByaW1lIGZ1bmN0aW9uYWwgY2hhcmFjdGVyaXN0aWNzIG9mIHBpcGVzIG9uIFVuaXggYXJl Og0KDQoJMSkgdGhleSBhcmUgYSBwc2V1ZG8tZGV2aWNlIHRoYXQgY2FuIGJlIGNyZWF0ZWQgb24g ZGVtYW5kIGJ5IHByb2dyYW1zDQoJDQoJMikgY29tbXVuaWNhdGlvbnMgaXMgb25lLXdheSwgZnJv bSBvbmUgb3IgbW9yZSB3cml0ZSBjaGFubmVsIHRvIG9uZSBvcg0KCSAgIG1vcmUgcmVhZCBjaGFu bmVscw0KCQ0KCTMpIGlmIGVpdGhlciBhbGwgcmVhZCBjaGFubmVscyBvciBhbGwgd3JpdGUgY2hh bm5lbHMgYXJlIGRlYXNzaWduZWQsDQoJICAgdGhlIG90aGVyIGNvbW11bmljYXRpbmcgcGFydG5l cnMgYXJlIG5vdGlmaWVkIHZpYSBhbiBlcnJvciBjb25kaXRpb24NCgkgICAoVW5peCBjYWxscyB0 aGlzICJicm9rZW4gcGlwZSIpLg0KDQpUaGUgbGFzdCBjaGFyYWN0ZXJpc3RpYywgZGV0ZWN0aW9u IG9mIGJyb2tlbiBwaXBlcywgaXMgdGhlIGtleS4gIFRoZSByZXN0cmljdGlvbg0Kb2YgcGlwZXMg dG8gb25lLXdheSBjb21tdW5pY2F0aW9uIGlzIHJlcXVpcmVkIGZvciBicm9rZW4gcGlwZSBkZXRl Y3Rpb24uDQpJZiB0aGVyZSB3ZXJlIGV4YWN0bHkgb25lIHJlYWRlciBhbmQgb25lIHdyaXRlciwg dGhlbiBpdCB3b3VsZCBiZSBlYXN5IHRvDQpkZXRlY3QgYSBicm9rZW4gcGlwZS4gIElmIHRoZSBj aGFubmVsIGNvdW50IGRyb3BzIHRvIDEsIHRoZW4gdGhlIHBpcGUgaXMgYnJva2VuLg0KVGhpcyBp cyBob3cgREVDbmV0LVZBWCBkZXRlY3RzICJuZXR3b3JrIHBhcnRuZXIgZXhpdGVkIiBjb25kaXRp b25zLiAgSG93ZXZlciwNCmJlY2F1c2UgZm9yaygyKSBjYW4gY2F1c2UgdGhlIGNsb25pbmcgb2Yg b3BlbiBJL08gY2hhbm5lbHMsIHRoaXMgaXNuJ3QNCnN1ZmZpY2llbnQgaW4gdGhlIFVuaXggcGlw ZSBjYXNlLiAgT25lIGNhbiBoYXZlIG11bHRpcGxlIHJlYWRlcnMgYW5kIG11bHRpcGxlDQp3cml0 ZXJzLiAgSXQgdGhlcmVmb3JlIGlzIG5lY2Vzc2FyeSB0byByZXN0cmljdCBlYWNoIGluZGl2aWR1 YWwgSS9PIGNoYW5uZWwgdG8NCmJlIGVpdGhlciByZWFkLW9ubHkgb3Igd3JpdGUtb25seS4gIFdp dGggdGhhdCByZXN0cmljdGlvbiBpbiBwbGFjZSwgdGhlIEkvTw0Kc3lzdGVtIGNhbiBkZXRlY3Qg ImJyb2tlbiBwaXBlIi0tdGhlIGNvbmRpdGlvbiBleGlzdHMgd2hlbiB0aGVyZSBhcmUgcmVhZGVy cw0KYnV0IG5vIHdyaXRlcnMsIG9yIHdyaXRlcnMgYnV0IG5vIHJlYWRlcnMuDQoNClZNUyBtYWls Ym94ZXMgaGF2ZSBtb3N0IG9mIHRoZSBjaGFyYWN0ZXJpc3RpY3MgcmVxdWlyZWQgZm9yIHBpcGVz LiAgVGhlcmUgaXMNCmEgc2VydmljZSB0byBjcmVhdGUgdGhlIHBzZXVkby1kZXZpY2VzIGZyb20g dXNlci1tb2RlIGNvZGUuICBZb3UgY2FuIGhhdmUNCm11bHRpcGxlIHJlYWQgYW5kIHdyaXRlIGNo YW5uZWxzLiAgVGhlIG9ubHkgcHJvYmxlbSBpcyB0aGF0IHlvdSBjYW5ub3QgZGV0ZWN0DQp0aGUg YnJva2VuIHBpcGUgY29uZGl0aW9uLiAgT25lIGNhbm5vdCBkbyB0aGlzIGJlY2F1c2UgY2hhbm5l bHMgYXNzaWduZWQgdG8NCmEgbWFpbGJveCBjYW4gYmUgdXNlZCBmb3IgYm90aCByZWFkaW5nIGFu ZCB3cml0aW5nLiAgVGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwNCndoaWNoIGlzIHdoaWNoLCBzbyBv bmUgY2Fubm90IHRlbGwgd2hlbiBhbGwgcmVhZGVycyBoYXZlIGdvbmUgYXdheSBvciB3aGVuIGFs bA0Kd3JpdGVycyBoYXZlIGdvbmUgYXdheS4NCg0KVGhpcyBpcyB3aHkgSSBoYWQgdG8gd3JpdGUg YSBuZXcgZHJpdmVyIHRvIHN1cHBvcnQgcGlwZXMgb24gVk1TLiAgVGhlIGRyaXZlcg0Kd2FzIHdy aXR0ZW4gZnJvbSBzY3JhdGNoLCBidXQgZm9sbG93cyB0aGUgZGVzaWduIG9mIHRoZSBtYWlsYm94 IGRyaXZlciB2ZXJ5DQpjbG9zZWx5LiAgSGVyZSBpcyBhIGZ1bmN0aW9uYWwgc3VtbWFyeSBvZiB0 aGUgVk1TIHBpcGUgZHJpdmVyLg0KDQotIFlvdSBjcmVhdGUgYSBwaXBlIGJ5IGFzc2lnbmluZyBh IGNoYW5uZWwgdG8gdGhlIHRlbXBsYXRlIGRldmljZSBQSVBFMDouDQogIFlvdSBnZXQgYmFjayBh IHNpbmdsZSBJL08gY2hhbm5lbCB0byBhIG5ld2x5LWNsb25lZCBwaXBlIHBzZXVkby1kZXZpY2Uu DQogIFlvdSBjYW4gdXNlICRHRVREVkkgdG8gZmluZCBvdXQgdGhlIG5hbWUgb2YgdGhlIG5ldyBk ZXZpY2Ugc28gdGhhdCB5b3UgY2FuDQogIGFzc2lnbiBvdGhlciBjaGFubmVscyB0byBpdC4gIFRo ZSBkZXZpY2UgaXMgY3JlYXRlZCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpY3MNCiAgYml0cyBNQlgs IFJFQywgU0hSLCBJRFYsIE9EViwgZGV2aWNlIGNsYXNzIERDJF9NQUlMQk9YLCBkZXZpY2UgdHlw ZQ0KICBEQyRfUElQRS4gIFJNUyB0cmVhdHMgaXQgYXMgYSBtYWlsYm94Lg0KICANCiAgSSBvcHRl ZCBmb3IgZHluYW1pYyBVQ0IgY2xvbmluZyByYXRoZXIgdGhhbiBidWlsZGluZyBhICRDUkVQSVBF IHN5c3RlbQ0KICBzZXJ2aWNlIHRvIGRvIHRoZSBjbG9uaW5nLiAgU2luY2UgSSB3YXMgbm90IGlu IHRoZSBWTVMgZ3JvdXAsIEkgY291bGQgbm90DQogIGFkZCBhIHN5c3RlbSBzZXJ2aWNlIGVhc2ls eS4gIEFsc28sIHVzaW5nIGR5bmFtaWMgY2xvbmluZyBpcyBtb3JlIGZsZXhpYmxlLg0KICBJdCBt YWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSBwaXBlcyBmcm9tIERDTCBsZXZlbCwgZm9yIGV4YW1wbGUs IHdoZXJlYXMgaXQgaXMNCiAgbmVhcmx5IGltcG9zc2libGUgdG8gY3JlYXRlIGFuZCB1c2UgbWFp bGJveGVzIGZyb20gRENMIGxldmVsIGJlY2F1c2UgdGhlcmUNCiAgaXMgbm8gd2F5IHRvIGdldCBh dCAkQ1JFTUJYIGZyb20gY29tbWFuZCBsZXZlbC4NCiAgDQogIFRoaXMgZG9lcyBtZWFuLCB0aG91 Z2gsIHRoYXQgb25lIGNhbm5vdCBjb250cm9sIGJ1ZmZlciBxdW90YSwgbWF4LiBtZXNzYWdlDQog IHNpemUsIGRldmljZSBwcm90ZWN0aW9uLCBvciBhc3NpZ25tZW50IG9mIGEgbG9naWNhbCBuYW1l IGFzIHBhcnQgb2YgdGhlDQogIGRldmljZSBjcmVhdGlvbiBjYWxsLiAgTWF4LiBtZXNzYWdlIHNp emUgKHRoZSBVQ0IgZGV2aWNlIGJ1ZmZlciBzaXplKSBhbmQNCiAgZGV2aWNlIHByb3RlY3Rpb24g Y2FuIGJlIHNldCBieSBJTyRfU0VUTU9ERSBjYWxscy4gIFRoZSBwaXBlIGRyaXZlciBkb2VzIG5v dA0KICBhbGxvdyBmb3IgdXNlciBjb250cm9sIG9mIGJ1ZmZlciBxdW90YSAobW9yZSBhYm91dCB0 aGF0IGxhdGVyLCB0aG91Z2gpLg0KICBUaGUgZGV2aWNlIHByb3RlY3Rpb24gc2V0IHVwb24gY2xv bmluZyBpcyAoUyxPOlJXTFAsRyxXKS4gIFRoaXMgaXMgd2hhdCB5b3UNCiAgd2FudCBmb3IgY29t bXVuaWNhdGlvbiBhbW9uZyBjaGlsZCBwcm9jZXNzZXMgaW4gdGhlIHNhbWUgam9iIHRyZWUsIHdo aWNoIGlzDQogIHRoZSB1c3VhbCBhcHBsaWNhdGlvbiBvZiBwaXBlcy4NCg0KLSBXaGVuIG9uZSBp bml0aWFsbHkgYXNzaWducyBhIGNoYW5uZWwgdG8gYSBwaXBlLCBpdCBpcyAidW50eXBlZCItLXRo ZSBkcml2ZXINCiAgZG9lcyBub3Qga25vdyBpZiBpdCBpcyBhIHJlYWQgb3IgYSB3cml0ZSBjaGFu bmVsLiAgVGhlIGZpcnN0IEkvTyBvcGVyYXRpb24NCiAgdG8gdGhlIGNoYW5uZWwgZGV0ZXJtaW5l cyB3aGljaCB0eXBlIG9mIGNoYW5uZWwgaXQgaXMuICBJZiB0aGUgZmlyc3QNCiAgb3BlcmF0aW9u IGlzIElPJF9SRUFEeEJMSyAodmlydHVhbCwgbG9naWNhbCwgYW5kIHBoeXNpY2FsIGFyZSBhbGwg dGhlIHNhbWUNCiAgZm9yIHBpcGVzKSBvciBJTyRfU0VUTU9ERSFJTyRNX1dSVEFUVE4sIHRoZW4g dGhlIGNoYW5uZWwgaXMgYSByZWFkLW9ubHkNCiAgY2hhbm5lbC4gIElmIHRoZSBmaXJzdCBvcGVy YXRpb24gaXMgSU8kX1dSSVRFeEJMSyBvciBJTyRfU0VUTU9ERSFJTyRNX1JFQURBVFRODQogIHRo ZW4gdGhlIGNoYW5uZWwgYmVjb21lcyBhIHdyaXRlLW9ubHkgY2hhbm5lbC4gIE9uY2UgdGhlIHR5 cGUgb2YgYSBjaGFubmVsDQogIGhhcyBiZWVuIHNldCwgYXR0ZW1wdHMgdG8gZG8gdGhlIG9wcG9z aXRlIG9wZXJhdGlvbiAoYSB3cml0ZSB0byBhIHJlYWQNCiAgY2hhbm5lbCBvciBhIHJlYWQgdG8g YSB3cml0ZSBjaGFubmVsKSBnZW5lcmF0ZSBTUyRfSUxMSU9GVU5DIGVycm9ycy4NCiAgDQogIFNv bWV0aW1lcyBpdCBpcyBkZXNpcmVhYmxlIHRvIGRlY2xhcmUgdGhlIHR5cGUgb2YgYSBjaGFubmVs IGJlZm9yZSB5b3UNCiAgYWN0dWFsbHkgZG8gYW55IEkvTyB0byBpdC4gIFRoZSBJL08gZnVuY3Rp b25zIElPJF9TRVRNT0RFIUlPJE1fUkVBRENIQU4gYW5kDQogIElPJF9TRVRNT0RFIUlPJE1fV1JJ VEVDSEFOIGV4aXN0IGZvciB0aGlzIHB1cnBvc2UuDQoNCi0gSS9PIHRvIGEgcGlwZSBpcyBkb25l IHZpYSB0aGUgdXN1YWwgSU8kX1JFQUR4QkxLLCBJTyRfV1JJVEV4QkxLLCBhbmQNCiAgSU8kX1dS SVRFT0YgZnVuY3Rpb24gY29kZXMuICBUaGVzZSBiZWhhdmUgdGhlIHNhbWUgd2F5IHRoYXQgdGhl eSBkbyB3aXRoDQogIG1haWxib3hlcywgZXhjZXB0IHRoYXQgdGhlcmUgaXMgbm8gSU8kTV9OT1cg bW9kaWZpZXIgKHNlZSB0aGUgbmV4dCBpdGVtKS4NCiAgVGhlIElPJE1fUkVBREFUVE4gYW5kIElP JE1fV1JUQVRUTiBtb2RpZmllcnMgdG8gSU8kX1NFVE1PREUgYXJlIGF2YWlsYWJsZQ0KICBhbmQg ZnVuY3Rpb24gaWRlbnRpY2FsbHkgd2l0aCB0aGUgbWFpbGJveCBkcml2ZXIuICBUaGVyZSBpcyBh IElPJE1fU1RSRUFNDQogIG1vZGlmaWVyIHRvIElPJF9SRUFEeEJMSyBhbmQgSU8kX1dSSVRFeEJM SyB0aGF0IGltcGxlbWVudHMgdHJ1ZSBVbml4LXN0eWxlDQogIHN0cmVhbS1tb2RlIEkvTyAodGhp cyBpcyB0aGUgb25seSBkZXZpY2UgaW4gVk1TIHRvIGRvIHRoaXMgb24gdGhlICRRSU8NCiAgbGV2 ZWwsIGluIGZhY3QpLiAgVGhlIGRlZmF1bHQgaXMgcmVjb3JkIG1vZGUuICBNb3JlIGFib3V0IHN0 cmVhbSBtb2RlIGxhdGVyLg0KDQotIEJVRkZFUklORzogIEJvdGggbWFpbGJveGVzIGFuZCBwaXBl cyBidWZmZXIgYWxsIGluLXRyYW5zaXQgcmVjb3JkcyBpbiBub24tDQogIHBhZ2VkIHBvb2wuICBU aGUgZHJpdmVycyBkaWZmZXIgaW4gdGhlIHF1b3RhIGJvb2trZWVwaW5nLCBob3dldmVyLg0KICAN CiAgVGhlIG1haWxib3ggZHJpdmVyIGdyYWJzIGEgZml4ZWQgYW1vdW50IG9mIHBvb2wgcXVvdGEg ZnJvbSB0aGUgY3JlYXRvciBvZg0KICB0aGUgZGV2aWNlIGF0ICRDUkVNQlggdGltZS4gIFRoZSBi dWZmZXIgcXVvdGEgaXMgc2V0IGluIHRoZQ0KICAkQ1JFTUJYIGNhbGwgb3IgZGVmYXVsdGVkIGZy b20gYSBTWVNHRU4gcGFyYW1ldGVyLiAgV2hlbiBhIHByb2dyYW0gd3JpdGVzIHRvDQogIGEgbWFp bGJveCwgdGhlIGRhdGEgYXJlIGNvcGllZCBpbnRvIG5vbi1wYWdlZCBwb29sIGFuZCB0aGUgYnVm ZmVyIHF1b3RhIGlzDQogIGRlY3JlbWVudGVkIGFjY29yZGluZ2x5LiAgSWYgdGhlIHF1b3RhIHJl YWNoZXMgemVybywgdGhlbiB0aGUgd3JpdGluZyBwcm9jZXNzDQogIGlzIHB1dCBpbnRvIFJXTUJY IHN0YXRlIChpZiBzeXN0ZW0gc2VydmljZSByZXNvdXJjZSB3YWl0IG1vZGUgaXMgb24pLCBvcg0K ICB0aGUgd3JpdGUgZmFpbGVzIHdpdGggU1MkX01CRlVMTCBzdGF0dXMgKGlmIHN5c3RlbSBzZXJ2 aWNlIHJlc291cmNlIHdhaXQgbW9kZQ0KICBpcyBvZmYpLiAgUldNQlggc3RhdGUgaXMgcXVpdGUg bmFzdHkgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUgcHJvY2VzcyBmcm9tDQogIGJlaW5nIGRlbGV0 ZWQgdW50aWwgYW5kIHVubGVzcyBzb21lYm9keSBlbXB0aWVzIHRoZSBtYWlsYm94IGVub3VnaCB0 byBsZXQNCiAgdGhlIHdyaXRlIG9wZXJhdGlvbiBjb21wbGV0ZS4gIEhvd2V2ZXIsIGl0IGRvZXMg bWVhbiB0aGF0IHdyaXRlcyB0byBhDQogIG1haWxib3ggbmV2ZXIgdXNlIHVwIHByb2Nlc3MgQllU TE0gcXVvdGEgKHRoZSBxdW90YSBoYXZpbmcgYmVlbiBwcmV2aW91c2x5DQogIGRlZHVjdGVkIGZy b20gdGhlIGNyZWF0b3Igb2YgdGhlIG1haWxib3gpLg0KICANCiAgSSBhc2tlZCBzZXZlcmFsIG9s ZC10aW1lIFZNUyBkZXZlbG9wZXJzIGFuZCB3YXMgbmV2ZXIgYWJsZSB0byBnZXQgYQ0KICBzYXRp c2ZhY3RvcnkgZXhwbGFuYXRpb24gb3IgcmF0aW9uYWxpemF0aW9uIGZvciB0aGUgZXhpc3RlY2Ug b2YgUldNQlggc3RhdGUNCiAgaW4gdGhlIHN5c3RlbS4gIEl0IHNlZW1zIHRvIGNhdXNlIG1vcmUg aGFybSB0aGFuIGdvb2QsIHNvIEkgbGVmdCBpdCBvdXQgb2YNCiAgdGhlIHBpcGUgZHJpdmVyIGRl c2lnbi4gIFBpcGVzIGhhdmUgYSBmaXhlZCA0MDk2LWJ5dGUgbGllbiBvbiBub24tcGFnZWQNCiAg cG9vbC4gIFdoZW4gYSBwcm9jZXNzIHdyaXRlcyB0byBhIHBpcGUsIHRoZSBkcml2ZXIgYWxsb2Nh dGVzIGEgYnVmZmVyIG9mIHRoZQ0KICBhcHByb3ByaWF0ZSBzaXplIGZyb20gbm9uLXBhZ2VkIHBv b2wgYW5kIG1vdmVzIHRoZSBkYXRhIGludG8gaXQuICBJZiB0aGUNCiAgNDA5Ni1ieXRlIGxpZW4g aGFzIG5vdCBiZWVuIGZ1bGx5IHVzZWQgdXAsIHRoZW4gdGhlIGRyaXZlciBkb2VzIG5vdCBkZWR1 Y3QNCiAgYW55IHByb2Nlc3MgQllUTE0gcXVvdGEgZnJvbSB0aGUgd3JpdGVyLiAgSWYgdGhlIDQw OTYtYnl0ZSBsaWVuIGhhcyBiZWVuDQogIHVzZWQgdXAsIHRoZW4gdGhlIHBpcGUgZHJpdmVyIGRl ZHVjdHMgdGhlIGRpZmZlcmVuY2UgZnJvbSBwcm9jZXNzIEJZVExNDQogIHF1b3RhLS1pbiBvdGhl ciB3b3JkcywgaXQgaXMgbGlrZSBhbnkgcnVuLW9mLXRoZS1taWxsIGJ1ZmZlcmVkIEkvTw0KICBv cGVyYXRpb24uICBUaGVyZSBpcyBubyB1c2Ugb2YgUldNQlggc3RhdGUgZm9yIGJ1ZmZlciBxdW90 YSBjb250cm9sLg0KDQotIEkvTyBDT01QTEVUSU9OOiAgVGhlIG5vcm1hbCBvcGVyYXRpb24gb2Yg dGhlIG1haWxib3ggZHJpdmVyIGlzIGZvciB3cml0ZQ0KICBvcGVyYXRpb25zIG5vdCB0byBjb21w bGV0ZSB1bnRpbCB0aGUgcmVjb3JkIHdhcyByZWFkIGZyb20gdGhlIG1haWxib3guDQogIE9uZSBt dXN0IHNwZWNpZnkgSU8kTV9OT1cgaWYgb25lIHJlcXVpcmVzIHRoZSBvcGVyYXRpb24gdG8gY29t cGxldGUgYXMgc29vbg0KICBhcyB0aGUgZGF0YSBhcmUgbW92ZWQgaW50byB0aGUgbWFpbGJveCBi dWZmZXIgaW4gbm9uLXBhZ2VkIHBvb2wuICBMaWtld2lzZSwNCiAgdGhlIG1haWxib3ggZHJpdmVy IHByb3ZpZGVzIGEgSU8kTV9OT1cgZnVuY3Rpb24gZm9yIHJlYWRzIHRvIGFsbG93IGEgcmVhZGVy DQogIHRvIHBvbGwgbWFpbGJveCBmb3IgdGhlIHByZXNlbmNlIG9mIG1lc3NhZ2VzLg0KICANCiAg VGhlIHBpcGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgYSBJTyRNX05PVyBmdW5jdGlvbi4gIEEg d3JpdGUgb3BlcmF0aW9uDQogIGFsd2F5cyBjb21wbGV0ZXMgaW1tZWRpYXRlbHkgaWYgdGhlIG1l c3NhZ2UgaXMgY292ZXJlZCBieSB0aGUgNDA5Ni1ieXRlDQogIGxpZW4gb24gbm9uLXBhZ2VkIHBv b2wuICBJZiB1c2VyIHByb2NlcyBCWVRMTSB3YXMgcmVxdWlyZWQgdG8gY292ZXIgYWxsIG9yDQog IHBhcnQgb2YgdGhlIG1lc3NhZ2UsIHRoZW4gdGhlIHdyaXRlIG9wZXJhdGlvbiBkb2VzIG5vdCBj b21wbGV0ZSB1bnRpbCBhbGwNCiAgb2YgdGhlIG1lc3NhZ2UgaXMgY292ZXJlZCBieSB0aGUgbGll biwgb3IgdW50aWwgdGhlIG1lc3NhZ2UgaXMgcmVhZCBmcm9tDQogIHRoZSBwaXBlLiAgVGh1cywg YSB3cml0ZSBvZiBhIG1lc3NhZ2UgbG9uZ2VyIHRoYW4gNDA5NiBieXRlcyB3aWxsIG5vdA0KICBj b21wbGV0ZSB1bnRpbCBhbGwgYnV0IDQwOTYgYnl0ZXMgb2YgaXQgaGF2ZSBiZWVuIHJlYWQgKGlm IG1peGVkIHJlY29yZA0KICBhbmQgc3RyZWFtIG1vZGUgSS9PIGlzIGJlaW5nIGRvbmUsIGl0IGlz IHBvc3NpYmxlIGZvciBtZXNzYWdlcyB0byBiZQ0KICBwYXJ0aWFsbHkgcmVhZC0tbW9yZSBhYm91 dCB0aGlzIGJlbG93KS4gIFJlYWRzIG5ldmVyIGNvbXBsZXRlIHVudGlsDQogIHNvbWV0aGluZyBo YXMgYmVlbiByZWFkLg0KICANCiAgSSBjb3VsZCBoYXZlIGltcGxlbWVudGVkIElPJE1fTk9XLCBi dXQgSSBjaG9zZSBub3QgdG8gZG8gc28uICBUaGUgY2hvc2VuDQogIGltcGxlbWVudGF0aW9uIG9m ZmVycyBwcm9wZXIgcXVvdGEgbWFuYWdlbWVudCAod2l0aG91dCBSV01CWCBzdGF0ZSksIGFuZA0K ICBhbGxvd3MgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gb2YgdGhlIHJlYWRlcnMgYW5kIHdy aXRlcnMgaW4gdGhlIGRlZmF1bHQNCiAgSS9PIGNhc2UgKGUuZy4sIFJNUyBJL08pLCBzb21ldGhp bmcgdGhhdCBkb2Vzbid0IGhhcHBlbiB3aXRoIG1haWxib3hlcy4NCiAgQSB3cml0ZXIgZG9pbmcg Uk1TIEkvTyB0byBhIG1haWxib3ggc3RhbGxzIHVudGlsIHRoZSBtZXNzYWdlIGlzIHJlYWQuICBX aXRoDQogIHBpcGVzLCBoZSBkb2VzIG5vdCBzdGFsbCB1bnRpbCBoZSBnZXRzIG92ZXIgNDA5NiBi eXRlcyBhaGVhZCBvZiB0aGUgcmVhZGVyLg0KICBUaGUgcGlwZSBkcml2ZXIgZGVzaWduIGFsbG93 cyBlZmZpY2llbnQgcHJvY2Vzc2luZyBvdmVybGFwIGluIHBpcGVsaW5lcw0KICB3aXRob3V0IHRo ZSBuZWVkIGZvciBhbnkgc3BlY2lhbCBwcm9ncmFtbWluZy4NCg0KLSBNQUlMQk9YIE1PREUgVlMu IFVMVFJJWCBNT0RFOiAgSW4gYSBVbml4LXN0eWxlIHBpcGVsaW5lLCBzZXZlcmFsIGltYWdlcyBt YXkNCiAgYmUgcnVuIGluIHN1Y2Nlc3Npb24gd2l0aCB0aGVpciBvdXRwdXQgZ29pbmcgZG93biB0 aGUgcGlwZS4gIFJNUyB0aGlua3MgdGhlDQogIHBpcGUgaXMgYSBtYWlsYm94LCBhbmQgc28gaXQg d3JpdGVzIGFuIEVPRiByZWNvcmQgdG8gdGhlIHBpcGUgZXZlcnkgdGltZSBvbmUNCiAgb2YgdGhl IGltYWdlcyBjbG9zZXMgaXRzIGZpbGUgb24gdGhlIHBpcGUuICBJbiB0aGlzIGNhc2UsIHdlIHdh bnQgdG8gaWdub3JlDQogIHRoZSBFT0YgcmVjb3JkcyBhbmQgdHJlYXQgdGhlIGJyZWFrYWdlIG9m IHRoZSBwaXBlIGF0IHRoZSBlbmQgb2YgdGhlIHdob2xlDQogIEkvTyBzZXF1ZW5jZSBhcyB0aGUg RU9GIGNvbmRpdGlvbi4gIEhvd2V2ZXIsIGluICJub3JtYWwiIFZNUyB1c2VhZ2UsIG9uZQ0KICB3 YW50cyB0byBwYXNzIEVPRiByZWNvcmRzIGp1c3QgYXMgdGhlIG1haWxib3ggZHJpdmVyIGRvZXMu DQogIA0KICBJIGludmVudGVkIHRoZSBjb25jZXB0IG9mICJVbHRyaXggbW9kZSIgdmVyc3VzICJt YWlsYm94IG1vZGUiIHRvIGhhbmRsZSB0aGlzLg0KICBQaXBlcyBhcmUgY3JlYXRlZCBpbiBWTVMg bW9kZS4gIFRoZSAkUUlPIGNhbGwgSU8kX1NFVE1PREUhSU8kTV9VTFRSSVggcGxhY2VzDQogIHRo ZSBwaXBlIGRldmljZSBpbiBVbHRyaXggbW9kZS4gIElPJE1fU0VUTU9ERSFJTyRNX01BSUxCT1gg d2lsbCBwdXQgaXQgYmFjay4NCiAgDQogIFRoZXJlIGFyZSB0d28gZGlmZmVyZW5jZXMgYmV0d2Vl biB0aGUgbW9kZXM6DQogIA0KCWEpIEluIG1haWxib3ggbW9kZSwgYSBJTyRfV1JJVEVPRiBvcGVy YXRpb24gcHV0cyBhIEVPRiByZWNvcmQgaW4NCgkgICB0aGUgcGlwZS4gIEluIFVsdHJpeCBtb2Rl LCBJTyRfV1JJVEVPRiBjb21wbGV0ZXMgc3VjY2Vzc2Z1bGx5IGJ1dA0KCSAgIGlzIGEgbm8tb3Au DQoJDQoJYikgSW4gbWFpbGJveCBtb2RlLCByZWFkcyB0byBhIGJyb2tlbiBwaXBlIHRlcm1pbmF0 ZSB3aXRoIFNTJF9MSU5LRElTQ09ODQoJICAgc3RhdHVzLiAgSW4gVWx0cml4IG1vZGUsIHJlYWRz IHRvIGEgYnJva2VuIHBpcGUgdGVybWluYXRlIHdpdGgNCgkgICBTUyRfRU5ET0ZGSUxFIHN0YXR1 cy4NCg0KDQotIEJST0tFTiBQSVBFIE5PVElGSUNBVElPTjogIFRoZSBwaXBlIGRyaXZlciBrZWVw cyBjb3VudHMgb2YgdGhlIG51bWJlcnMgb2YNCiAgcmVhZCBhbmQgd3JpdGUgY2hhbm5lbHMgYXNz aWduZWQsIGFuZCB0d28gYWRkaXRpb25hbCBzdGF0ZSBiaXRzOiAgcmVhZGVycy0NCiAgaGF2ZS1l eGlzdGVkIGFuZCB3cml0ZXJzLWhhdmUtZXhpc3RlZC4gIFRoZSByZWFkZXJzLWhhdmUtZXhpc3Rl ZCBiaXQgaXMNCiAgc2V0IHdoZW4gdGhlIGZpcnN0IHJlYWQgY2hhbm5lbCBpcyBhc3NpZ25lZC4g IFRoZSB3cml0ZXJzLWhhdmUtZXhpc3RlZCBiaXQgaXMNCiAgc2V0IHdoZW4gdGhlIGZpcnN0IHdy aXRlIGNoYW5uZWwgaXMgYXNzaWduZWQuICBBIGJyb2tlbiBwaXBlIGNvbmRpdGlvbg0KICBleGlz dHMgd2hlbmV2ZXI6DQogIA0KCWEpIGEgd3JpdGUgb3BlcmF0aW9uIGlzIHBlbmRpbmcgb24gdGhl IHBpcGUsIHJlYWRlcnMtaGF2ZS1leGlzdGVkIGlzDQoJICAgc2V0LCBidXQgdGhlIGN1cnJlbnQg Y291bnQgb2YgcmVhZCBjaGFubmVscyBpcyB6ZXJvDQoJDQoJYikgYSByZWFkIG9wZXJhdGlvbiBp cyBwZW5kaW5nIG9uIHRoZSBwaXBlLCB0aGUgcGlwZSBpcyBlbXB0eSwNCgkgICB3cml0ZXJzLWhh dmUtZXhpc3RlZCBpcyBzZXQsIGJ1dCB0aGUgY3VycmVudCBjb3VudCBvZiB3cml0ZQ0KCSAgIGNo YW5uZWxzIGlzIHplcm8NCg0KICBUaGUgdHdvICJoYXZlLWV4aXN0ZWQiIGJpdHMgZXhpc3QgdG8g Y29vcmRpbmF0ZSBzdGFydHVwIG9mIHRoZSBwaXBlDQogIGNvbW11bmljYXRpb24uICBXaXRob3V0 IHRob3NlIGJpdHMsIHRoZXJlIHdvdWxkIGJlIGEgcmFjZSBjb25kaXRpb24gYmV0d2Vlbg0KICB0 aGUgZmlyc3Qgd3JpdGUgdG8gdGhlIHBpcGUgYW5kIHRoZSBmaXJzdCByZWFkIHRvIHRoZSBwaXBl LiAgSXQgaXMgbm90IGFuDQogIGVycm9yIHRvIGJlIHdyaXRpbmcgdG8gYSBwaXBlIHRoYXQgaGFz IG5vIHJlYWRlcnMgYW5kIGhhcyBuZXZlciBoYWQgcmVhZGVycywNCiAgb3IgdG8gYmUgcmVhZGlu ZyBmcm9tIGEgcGlwZSB0aGF0IGhhcyBubyB3cml0ZXJzIGJ1dCBoYXMgbmV2ZXIgaGFkIHdyaXRl cnMuDQogIFRoZXJlIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGEgaGFuZyBjb25kaXRpb24gaGVyZSBp ZiwgZm9yIGV4YW1wbGUsIHRoZQ0KICByZWFkZXIgcHJvY2VzcyBkaWVzIGJlZm9yZSBpdCBldmVy IGdldHMgYSBjaGFuY2UgdG8gb3BlbiBpdHMgY2hhbm5lbCB0byB0aGUNCiAgcGlwZS4gIFRoZSBz YW1lIHBvdGVudGlhbCBleGlzdHMgb24gVW5peC4gIEluIHByYWN0aWNlLCBpdCBpcyBub3QgYQ0K ICBwcm9ibGVtLCBlc3BlY2lhbGx5IHNpbmNlIHdyaXRlcyB0byBhIHBpcGUgY2Fubm90IHB1dCB5 b3UgaW4gYSByZXNvdXJjZS13YWl0DQogIHN0YXRlIGZyb20gd2hpY2ggdGhlcmUgaXMgbm8gZXhp dCAoUldNQlggc3RhdGUpLg0KICANCiAgSWYgYWxsIHdyaXRlcnMgaGF2ZSBleGl0ZWQsIHJlYWRl cnMgY2FuIGNvbnRpbnVlIHRvIHJlYWQgZnJvbSB0aGUgcGlwZQ0KICB3aXRob3V0IGVycm9yIHVu dGlsIHRoZXkgaGF2ZSBlbXB0aWVkIGl0LiAgVGhpcyBpcyBuZWNlc3Nhcnkgc28gdGhhdCB3cml0 ZXJzDQogIGRvbid0IGhhdmUgdG8gd2FpdCBhcm91bmQgZm9yIGFsbCBvZiB0aGVpciBkYXRhIHRv IGJlIHJlYWQuDQogIA0KICBSZWFkcyB0byBhIGJyb2tlbiBwaXBlIGNvbXBsZXRlIHdpdGggU1Mk X0VORE9GRklMRSBzdGF0dXMgaWYgdGhlIHBpcGUgaGFzDQogIGJlZW4gc2V0IGluIFVsdHJpeCBt b2RlLCBvciB3aXRoIFNTJF9MSU5LRElTQ09OIChuZXR3b3JrIHBhcnRuZXINCiAgZGlzY29ubmVj dGVkIGxvZ2ljYWwgbGluaykgc3RhdHVzIGlmIHRoZSBwaXBlIGlzIGluIG1haWxib3ggbW9kZSAo dGhlDQogIGRlZmF1bHQpLg0KICANCiAgV3JpdGVzIHRvIGEgYnJva2VuIHBpcGUgY29tcGxldGUg d2l0aCBTUyRfTElOS0RJU0NPTiBzdGF0dXMgcmVnYXJkbGVzcyBvZg0KICBtb2RlLg0KDQotIFNU UkVBTSBNT0RFOiAgVGhlIHBpcGUgZHJpdmVyIHByb3ZpZGVzIGEgbW9kaWZpZXIsIElPJE1fU1RS RUFNLCBmb3IgYm90aA0KICBJTyRfUkVBRHhCTEsgYW5kIElPJF9XUklURXhCTEsuICBUaGUgcHJl c2VuY2Ugb2YgdGhlIG1vZGlmaWVyIGluZGljYXRlcw0KICB0aGF0IHRoZSBJL08gb3BlcmF0aW9u IGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBzdHJlYW0gbW9kZSByYXRoZXIgdGhhbiBpbg0KICByZWNv cmQgbW9kZS4NCiAgDQogIEEgc3RyZWFtIG1vZGUgcmVhZCBvcGVyYXRpb24gYWx3YXlzIHJlYWRz IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzDQogIGZyb20gdGhlIHBpcGUuICBJdCBpZ25v cmVzIHJlY29yZCBib3VuZGFyaWVzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZXJlIGFyZQ0KICB0aHJl ZSAxMC1ieXRlIHJlY29yZHMgaW4gdGhlIHBpcGUsIGFuZCBhICRRSU8gc3BlY2lmaWVzIGEgMTUt Ynl0ZSBzdHJlYW0NCiAgbW9kZSByZWFkLCB0aGUgZmlyc3QgcmVjb3JkIGFuZCB0aGUgZmlyc3Qg NSBieXRlcyBvZiB0aGUgc2Vjb25kIHJlY29yZA0KICB3aWxsIGJlIHJlYWQgYW5kIHB1dCBpbiB0 aGUgdXNlcidzIGJ1ZmZlciBhcyBvbmUgY2h1bmsgb2YgZGF0YS4gIFRoYXQNCiAgd2lsbCBsZWF2 ZSB0aGUgcmVtYWluaW5nIDUgYnl0ZXMgb2YgcmVjb3JkIDIgYW5kIGFsbCBvZiByZWNvcmQgMyBp biB0aGUNCiAgcGlwZS4gIEEgc3Vic2VxdWVudCAkUUlPIHJlYWQgaW4gcmVjb3JkIG1vZGUgd2ls bCByZWFkIHRoZSA1IGJ5dGVzIG9mDQogIHJlY29yZCAyLg0KICANCiAgVGhlcmUgaXMgb25lIGNh c2Ugd2hlcmUgYSBzdHJlYW0gbW9kZSByZWFkIGRvZXNuJ3QgcmVhZCBleGFjdGx5IHRoZSBudW1i ZXINCiAgb2YgYnl0ZXMgdGhhdCB0aGUgdXNlciBzcGVjaWZpZWQuICBUaGF0IGlzIGlmIGVuZC1v Zi1waXBlIGlzIGRldGVjdGVkLg0KICBFbmQtb2YtcGlwZSBpcyBlaXRoZXIgYSBFT0YgcmVjb3Jk IGluIHRoZSBwaXBlLCBvciBhIGJyb2tlbiBwaXBlLiAgSW4gYm90aA0KICBvZiB0aGVzZSBjYXNl cywgdGhlIHJlYWQgaW4gcHJvZ3Jlc3MgdGVybWluYXRlcyB3aXRoIGEgc2hvcnQgYnl0ZSBjb3Vu dC4NCiAgVGhlIG5leHQgcmVhZCBpc3N1ZWQgcGlja3MgdXAgdGhlIEVPRiBvciBMSU5LRElTQ09O IGNvbmRpdGlvbi4gIFRoaXMgaXMNCiAgZXhhY3RseSB0aGUgVW5peCBzZW1hbnRpY3MgZm9yIHJl YWRzIGZyb20gcGlwZXMuDQogIA0KICBBIHN0cmVhbSBtb2RlIHdyaXRlIG9wZXJhdGlvbiBpcyB0 aGUgc2FtZSBhcyBhIHJlY29yZCBtb2RlIHdyaXRlIG9wZXJhdGlvbg0KICBleGNlcHQgdGhhdCB0 aGUgd3JpdGUgZG9lc24ndCBpbXBseSBhIHJlY29yZCBib3VuZGFyeS4gIEZvciBleGFtcGxlLCBz dXBwb3NlDQogIHRoZXJlIGFyZSB0aHJlZSAkUUlPcyBzcGVjaWZ5aW5nIHN0cmVhbSBtb2RlIHdy aXRlLCBlYWNoIGZvciA1IGJ5dGVzLA0KICBmb2xsb3dlZCBieSB0d28gcmVjb3JkIG1vZGUgd3Jp dGVzLCBlYWNoIGZvciAxMCBieXRlcy4gIEEgcmVjb3JkIG1vZGUgcmVhZGVyDQogIHdpbGwgc2Vl IHR3byByZWNvcmRzLiAgVGhlIGZpcnN0IGlzIDI1IGJ5dGVzIGxvbmcsIHRoZSBzZWNvbmQgaXMg MTAgYnl0ZXMNCiAgbG9uZy4NCg0KSSB3aWxsIHNlbmQgeW91IGEgY29weSBvZiB0aGUgY29tcGxl dGUgcGlwZSBkcml2ZXIgc3BlY2lmaWNhdGlvbiBzbyB5b3UgY2FuDQpzZWUgaG93IHRoaXMgbG9v a3MgaW4gdG90by4NCg0KDQpJTVBMSUNBVElPTlMgRk9SIFAuVEJEIElOVEVSUFJPQ0VTUyBDT01N VU5JQ0FUSU9ODQoNCkNsZWFybHkgUC5VTFRSSVggcmVxdWlyZXMgVW5peC1jb21wYXRpYmxlIHBp cGVzLiAgVGhlIGRyaXZlciBkZXNpZ24gb3V0bGluZWQNCmFib3ZlIGFjY29tcGxpc2hlcyB0aGlz IGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHNpbXVsdGFuZW91cyB1c2UgYnkNCmEg cmVjb3JkLW9yaWVudGVkIGFjY2VzcyBtZXRob2Qgc3VjaCBhcyBSTVMuICBJTyRNX1NUUkVBTSBw cm9iYWJseSBpc24ndA0KbmVjZXNzYXJ5OiAgdGhlIFVsdHJpeCByZWFkKDIpIGFuZCB3cml0ZSgy KSBmYWNpbGl0aWVzLCB3aGljaCBhcmUgd2hhdCBwcmVzZW50DQphIHN0cmVhbSBtb2RlIGludGVy ZmFjZSB0byBwcm9ncmFtcywgaGF2ZSB0byBkZWFsIHdpdGggYmxvY2stb3JpZW50ZWQgZGV2aWNl cw0Kc3VjaCBhcyBkaXNrcyBhbmQgdGFwZXMgYW55d2F5LCBzbyB0aGV5IGFyZSBjYXBhYmxlIG9m IGRvaW5nIHRoZSBuZWNlc3NhcnkNCnJlY29yZCBibG9ja2luZyBhbmQgZGVibG9ja2luZyB0byBt YWtlIGFueXRoaW5nIGFwcGVhciB0byBiZSBzdHJlYW0tb3JpZW50ZWQNCnJlZ2FyZGxlc3Mgb2Yg aXRzIHVuZGVybHlpbmcgcmVjb3JkLW9yaWVudGVkIGNoYXJhY3RlcmlzdGljcy4gIE9uZSB0aGlu Zw0KdGhhdCB5b3UgZ2V0IGZvciBmcmVlIHdpdGggdGhlIFZNUyBwaXBlIGRyaXZlciBkZXNpZ24g aXMgdGhhdCBwaXBlcyBoYXZlDQpuYW1lcy4gICJOYW1lZCBwaXBlcyIgYXJlIGEgcmVsYXRpdmVs eSByZWNlbnQgaW5ub3ZhdGlvbiBpbiB0aGUgVW5peCB3b3JsZA0KYW5kIGFyZSBhbGwgdGhlIHJh Z2UgdGhlc2UgZGF5cy4NCg0KSXQgaXMgbm90IGFzIGNsZWFyIHRoYXQgUC5WTVMgbmVlZHMgVkFY L1ZNUy1jb21wYXRpYmxlIG1haWxib3hlcy4gIEluIHRoZQ0KdmFzdCBtYWpvcml0eSBvZiBjYXNl cywgY2hhbm5lbHMgYXNzaWduZWQgdG8gbWFpbGJveGVzIGFyZSB1c2VkIGVpdGhlcg0KZXhjbHVz aXZlbHkgZm9yIHJlYWRpbmcgb3IgZXhjbHVzaXZlbHkgZm9yIHdyaXRpbmcsIGFuZCB0aGVyZWZv cmUgcGlwZXMgd291bGQNCnN1ZmZpY2UuICBJbiBmYWN0LCB1c2Ugb2YgcGlwZXMgaW4gcGxhY2Ug b2YgbWFpbGJveGVzIHdvdWxkIHJlbGlldmUNCmltcGxlbWVudG9ycyBvZiBhbGwgdGhlIGRlZmVu c2l2ZSBwcm9ncmFtbWluZyB5b3UgbmVlZCB3aXRoIG1haWxib3hlcyB0byBnZXQNCmFyb3VuZCB0 aGUgZmFjdCB0aGF0IHdpdGggYSBtYWlsYm94IHRoZXJlJ3Mgbm8gd2F5IHRvIHRlbGwgdGhhdCB0 aGUgb3RoZXINCmVuZCBvZiB0aGUgY29tbXVuaWNhdGlvbnMgbGluayBoYXMgZ29uZSBhd2F5LiAg VG8gYmUgY29uc2VydmF0aXZlLCB0aG91Z2gsDQppdCdzIHByb2JhYmx5IGEgZ29vZCBpZGVhIHRv IHByb3ZpZGUgYSBtYWlsYm94LWNvbXBhdGlibGUgZmFjaWxpdHkuDQoNCkkgdGhpbmsgdGhhdCBh bGwgb2YgdGhlIG5lZWRzIGluIHRoaXMgc3BhY2UgY291bGQgYmUgYWRkcmVzc2VkIGJ5IGEgc2lu Z2xlDQpJL08gZmFjaWxpdHkgZm9yIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLiAgVGhlIGRl c2lyZWFibGUgY2hhcmFjdGVyaXN0aWNzDQphcmU6DQoNCjEpICBUaGUgcHNldWRvLWRldmljZSBv YmplY3QgaXMgY3JlYXRlZCBieSB0aGUgUC5UQkQgZXF1aXZhbGVudCBvZiBkeW5hbWljDQogICAg VUNCIGNsb25pbmcgb24gVkFYL1ZNUy4gIFRoYXQgaXMsIHRoZSBvYmplY3QgaXMgY3JlYXRlZCB3 aGVuIGFuIEkvTw0KICAgIGNoYW5uZWwgaXMgYXNzaWduZWQgdG8gYSB0ZW1wbGF0ZSBvYmplY3Qu ICBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZ2V0DQogICAgb25lIG9mIHRoZXNlIGRldmljZXMg d2l0aG91dCBkb2luZyBhbiBleHBsaWNpdCBzeXN0ZW0gc2VydmljZSBjYWxsIHN1Y2gNCiAgICBh cyBTWVMkQ1JFTUJYIG9yIHBpcGUoMikuICBVc2luZyBkeW5hbWljIFVDQiBjbG9uaW5nIGFsbG93 cyB0aGUNCiAgICBwc2V1ZG8tZGV2aWNlcyB0byBiZSBjcmVhdGVkIGZyb20gY29tbWFuZCBsZXZl bCB3aXRob3V0IGFueSBzcGVjaWFsDQogICAgc3VwcG9ydCAoc3VjaCBhcyBhIGxleGljYWwgZnVu Y3Rpb24pLg0KDQoyKSAgVGhlIG9iamVjdCBoYXMgdHdvIG1ham9yIG1vZGVzIG9mIG9wZXJhdGlv bjogIG1haWxib3ggbW9kZSBhbmQgcGlwZSBtb2RlLg0KICAgIFVwb24gY3JlYXRpb24sIHRoZSBv YmplY3QgaXMgaW4gcGlwZSBtb2RlLiAgVGhlIFAuVEJEIGVxdWl2YWxlbnQgb2YNCiAgICBhIElP JF9TRVRNT0RFICRRSU8gb3BlcmF0aW9uIHN3aXRjaGVzIHRoZSBkZXZpY2UgYmV0d2VlbiBtYWls Ym94IG1vZGUNCiAgICBhbmQgcGlwZSBtb2RlLg0KDQogICAgYSkgIEluIG1haWxib3ggbW9kZSwg dGhlIGRldmljZSBhY3RzIGxpa2UgYSBWQVgvVk1TIG1haWxib3guICBDaGFubmVscyBjYW4NCiAg ICAgICAgYmUgdXNlZCBmb3IgZWl0aGVyIHJlYWRpbmcgb3Igd3JpdGluZy4gIFlvdSBnZXQgbm8g ImJyb2tlbiBwaXBlIg0KICAgICAgICBub3RpZmljYXRpb24uICBPcGVyYXRpb25zIHN0YWxsIHVu bGVzcyBhIElPJE1fTk9XIG1vZGlmaWVyIGlzIHByZXNlbnQuDQogICAgDQogICAgYikgIEluIHBp cGUgbW9kZSwgdGhlIGRldmljZSBhY3RzIGxpa2UgYSBVbml4IHBpcGUuICBDaGFubmVscyBjYW4g YmUNCiAgICAgICAgdXNlZCBvbmx5IGZvciByZWFkaW5nIG9yIHdyaXRpbmcsIGJ1dCBub3QgYm90 aC4gIFRoZSBmaXJzdCBvcGVyYXRpb24NCiAgICAgICAgdG8gYSBjaGFubmVsIGRldGVybWluZXMg aXRzIHR5cGUgKHJlYWQtb25seSBvciB3cml0ZS1vbmx5KS4gIFR5cGUNCiAgICAgICAgY2FuIGJl IGV4cGxpY2l0bHkgZGVjbGFyZWQgdmlhIGEgSU8kX1NFVE1PREUtbGlrZSBjYWxsLiAgQnJva2Vu IHBpcGUNCiAgICAgICAgbm90aWZpY2F0aW9uIHNlbWFudGljcyBhcmUgYXMgZm9yIHRoZSBWQVgv Vk1TIHBpcGUgZHJpdmVyIHdoZW4NCiAgICAgICAgb3BlcmF0aW5nIGluIFVsdHJpeCBtb2RlLiAg SU8kX1dSSVRFT0YgaXMgYSBuby1vcC4gIElPJE1fTk9XIGlzDQogICAgICAgIGlnbm9yZWQtLXRo ZSBkZXZpY2UgYWx3YXlzIGJlaGF2ZXMgbGlrZSB0aGUgVkFYL1ZNUyBwaXBlIGRyaXZlcg0KICAg ICAgICBhcyByZWdhcmRzIHN0YWxsaW5nLg0KICAgIA0KICAgIGMpICBUaGUgZXF1aXZhbGVudCBv ZiBJTyRNX1JFQURBVFROIGFuZCBJTyRNX1dSSVRFQVRUTiByb3V0aW5lcyBzaG91bGQNCiAgICAg ICAgb3BlcmF0ZSB0aGUgd2F5IHRoZXkgZG8gZm9yIFZBWC9WTVMgbWFpbGJveGVzIHJlZ2FyZGxl c3Mgb2YgbW9kZS4NCiAgICAgICAgVGhlc2UgdHdvIG9wZXJhdGlvbnMgc2V0IHRoZSBtb2RlIG9m IHRoZSBJL08gY2hhbm5lbC4NCg0KMykgIFRoZSBWTVMgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IHdv dWxkIHN1cHBseSBhIFNZUyRDUkVNQlggY2FsbCB0aGF0IHdvdWxkDQogICAgYXNzaWduIGEgY2hh bm5lbCB0byB0aGUgcHNldWRvLWRldmljZSB0ZW1wbGF0ZSBvYmplY3QsIHB1dCB0aGUgb2JqZWN0 IGluDQogICAgbWFpbGJveCBtb2RlLCBkbyBJTyRfU0VUTU9ERS1lcXVsdmFsZW50IGNhbGxzIHRv IHNldCB0aGUgcHJvdGVjdGlvbiBhbmQNCiAgICBidWZmZXIgc2l6ZSBjaGFyYWN0ZXJpc3RpY3Mg dGhlIHdheSB0aGUgdXNlciB3YW50ZWQgdGhlbSwgdGhlbiByZXR1cm4NCiAgICB0aGUgYXNzaWdu ZWQgY2hhbm5lbCB0byB0aGUgY2FsbGVyLg0KDQo0KSAgVGhlIFAuVWx0cml4IGxpYnJhcnkgd291 bGQgc3VwcGx5IGEgcGlwZSgyKSBjYWxsIHRoYXQgd291bGQgYXNzaWduIGENCiAgICBjaGFubmVs IHRvIHRoZSBwc2V1ZG8tZGV2aWNlIHRlbXBsYXRlIG9iamVjdCwgYXNzaWduIGFub3RoZXIgY2hh bm5lbCB0bw0KICAgIHRoZSBjbG9uZWQgcGlwZSBvYmplY3QsIHRoZW4gZG8gYSBJTyRfU0VUTU9E RSFJTyRNX1JFQURDSEFOLWVxdWl2YWxlbnQNCiAgICBJL08gY2FsbCB0byBzZXQgdGhlIGZpcnN0 IGNoYW5uZWwgcmVhZC1vbmx5LCBhbmQgYSBJTyRNX1dSSVRFQ0hBTi0NCiAgICBlcXVpdmFsZW50 IGNhbGwgdG8gc2V0IHRoZSBzZWNvbmQgY2hhbm5lbCB3cml0ZS1vbmx5LiAgVGhlbiBpdCB3b3Vs ZA0KICAgIHJldHVybiBib3RoIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuDQoNCjUpICBObyBlcXVp dmFsZW50IG9mIHRoZSBSV01CWCByZXNvdXJjZSB3YWl0IHN0YXRlIHNob3VsZCBiZSBwcm92aWRl ZC4NCiAgICBJZiBhIHBpcGUgb3IgbWFpbGJveCBmaWxscywgdGhlIGN1cnJlbnQgSS9PIG9wZXJh dGlvbiBtZXJlbHkgc2hvdWxkIGJlDQogICAgc3RhbGxlZC4NCg0KSSBob3BlIGFsbCB0aGlzIHN0 dWZmIGlzIGhlbHBmdWwuICBJZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHF1ZXN0aW9ucyBhYm91 dA0KcGlwZXMgb3IgbWFpbGJveGVzIHRoYXQgSSBjYW4gYW5zd2VyLCBqdXN0IGFzay4NCg0KLS1Q U1cNCg== --000000000000664f3505d92b0cb0--