From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stephen Leake Newsgroups: gmane.emacs.devel Subject: policy discussion on bundling ELPA packages in the emacs tarball Date: Wed, 20 Jan 2021 17:41:39 -0800 Message-ID: <86eeifawx8.fsf@stephe-leake.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="16952"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (windows-nt) To: emacs-devel Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Jan 21 02:42:42 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1l2Ozi-0004Ij-Hw for ged-emacs-devel@m.gmane-mx.org; Thu, 21 Jan 2021 02:42:42 +0100 Original-Received: from localhost ([::1]:57448 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l2Ozh-00073w-Ht for ged-emacs-devel@m.gmane-mx.org; Wed, 20 Jan 2021 20:42:41 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60794) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l2Oyr-0006bl-DA for emacs-devel@gnu.org; Wed, 20 Jan 2021 20:41:49 -0500 Original-Received: from gateway36.websitewelcome.com ([192.185.201.2]:43782) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l2Oyp-0001vM-7x for emacs-devel@gnu.org; Wed, 20 Jan 2021 20:41:49 -0500 Original-Received: from cm14.websitewelcome.com (cm14.websitewelcome.com [100.42.49.7]) by gateway36.websitewelcome.com (Postfix) with ESMTP id D1D3D400C73AB for ; Wed, 20 Jan 2021 19:41:43 -0600 (CST) Original-Received: from host2007.hostmonster.com ([67.20.76.71]) by cmsmtp with SMTP id 2Oyll7JfUsvw92OyllMU99; Wed, 20 Jan 2021 19:41:43 -0600 X-Authority-Reason: nr=8 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=stephe-leake.org; s=default; h=Content-Type:MIME-Version:Message-ID:Date: Subject:To:From:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=/VZIcgg0ixDtBpeWVT4XhGBCdFf/OQTFVteb5vfZZvQ=; b=ktSsq9dl3YtfWt4Yzs2dyaiH+C SNL7jIpfzlc+zuO3XXW7eVIInU4V1cRIpGBF6dm4aylne6Gf3sb/wfkNx3C34K43KgTxTyqq+ox0V erw4oQqidSPB8X+3MoU3bdOjBWukElY/90qtH0D+1iGoAbBcbkykQZ4YA0gMvkkOlhiBma9LzS3Ef O0fK5hWOQ3BunTmAqmDUKMIOCzcRm69icX8XExpv30x9MOPvbEpRnGy/g68zq7T8Nw3j2qhtbjrQ4 RF3OF86+fPs/rwnp+JoNvJFev1yiKikTWAILXR3hehByCb2UB4jazIcwXPR8claJWuJx4uIuLLoXR VthWk+EQ==; Original-Received: from [76.77.182.20] (port=61125 helo=Takver4) by host2007.hostmonster.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.93) (envelope-from ) id 1l2Oyk-003mJF-V6 for emacs-devel@gnu.org; Wed, 20 Jan 2021 18:41:43 -0700 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - host2007.hostmonster.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - stephe-leake.org X-BWhitelist: no X-Source-IP: 76.77.182.20 X-Source-L: No X-Exim-ID: 1l2Oyk-003mJF-V6 X-Source-Sender: (Takver4) [76.77.182.20]:61125 X-Source-Auth: stephen_leake@stephe-leake.org X-Email-Count: 1 X-Source-Cap: c3RlcGhlbGU7c3RlcGhlbGU7aG9zdDIwMDcuaG9zdG1vbnN0ZXIuY29t X-Local-Domain: yes Received-SPF: neutral client-ip=192.185.201.2; envelope-from=stephen_leake@stephe-leake.org; helo=gateway36.websitewelcome.com X-Spam_score_int: 4 X-Spam_score: 0.4 X-Spam_bar: / X-Spam_report: (0.4 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_BL_SPAMCOP_NET=1.347, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_NEUTRAL=0.779 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:263230 Archived-At: --=-=-= Content-Type: text/plain Attached is the file 'elpa', containing the current emacs/admin/notes/elpa, plus a baseline policy for bundling GNU ELPA packages in the emacs tarball, and some unresolved issues. This is _not_ a final plan; it is a starting point for discussion. (I tried to post it in the savannah ada-mode download area, but trying to retrieve it gives me 404. And now I can't delete it. Sigh). The biggest open issue is whether the bundled packages live only in the elpa.git worktree, or if they are git submodules that are checked out into the emacs.git worktree. The baseline policy described in the attached file states that the bundled packages live only in the elpa git worktree. Eli has said he wants the bundled packages in the emacs worktree; I'd like to explore the specific rationale for that. For the specific example of ada-mode, I'm guessing nobody much noticed when its files were removed from emacs/lisp/progmodes. Other packages that are not used by many Emacs developers will be similarly not much missed. At the moment, ada-mode is the _only_ package we are proposing to bundle, as a test case. But we need to plan for the future. Currently, org and others are "duplicated" packages; they have files in emacs.git master/lisp/[PKGNAME]/* and in elpa.git externals/[PKGNAME]. At some point, they could become "bundled" packages. Consider what this would look like for org under the baseline policy. The files in master/lisp/org/* are deleted, and "org elpa.git externals/org" is added to the list of bundled packages used by 'make dist' (I need to add explicit detail to that mechanism; Stefan Monnier mentioned this might already be written somewhere). Any Emacs developer that wants to continue using org has two choices; install it via M-x list-packages, or, if they want the development head, checkout ELPA, run 'make packages/org', and either install it from there or add elpa/packages/org to their load-path. This is exactly what Emacs and ELPA developers do now for non-bundled packages. The baseline policy describes a shell script `checkout-bundled-elpa' and an emacs command `add-bundled-elpa-packages' (for ~/.emacs) to simplify using all bundled packages. Now consider what bundling org looks like if we use some variant of the "git submodules" policy. (for an introduction to git submodules, see https://git-scm.com/book/en/v2/Git-Tools-Submodules). The files in master/lisp/org/* are deleted, and "org elpa.git externals/org" is added to the emacs/master/.gitmodules file (via 'git submodule add ...'). 'make dist' includes emacs/master/elpa, so nothing in 'make dist' is changed for 'org'. In addition, Emacs developers who want the bundled ELPA packages would run 'git submodule update --init'; this would checkout all the bundled ELPA packages, into emacs/master/elpa/[PKGNAME]. Emacs startup code would put these in the default load-path. A fresh checkout of Emacs with the bundled submodules would be done by 'git clone .../emacs.git --recurse-submodules'. Ideally, the savannah page describing how to get Emacs from git would say that. but many people will forget the --recurse-submodules. In both cases, the bundled packages are in load-path. Finding them via C-x C-f (find-file) is slightly different; in the baseline case it requires navigating to /elpa/packages/... for bundled packages. In the submodules case is requires navigating to /emacs/master/elpa/... Both are different from the current /emacs/master/lisp/..., so in either case you have to remember which packages are bundled, and that can change over time. I suggest we standardize on an emacs elisp project that allows using C-x p f (project-find-file) to complete on files in load-path for elisp files; that removes the issue of remembering where things are. Another difference is testing for a release; that should always be done with the identified release version of bundled packages. That is easier to accomplish via git submodules, since they can identify a specific version (I think?), or a specific release branch. Otherwise people doing release testing would have to use `checkout-bundled-elpa' to get the correct versions in elpa. There will probably be a similar number of posts to emacs.devel about "where is org?"; the answer is either "cd elpa; make packages/org" or "git submodule update --init". Comments? -- -- Stephe --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=elpa Content-Transfer-Encoding: base64 Tk9URVMgT04gVEhFIEVNQUNTIFBBQ0tBR0UgQVJDSElWRQoKVGhlIEdOVSBFbWFjcyBwYWNrYWdl IGFyY2hpdmUsIGF0IGVscGEuZ251Lm9yZywgaXMgbWFuYWdlZCB1c2luZyBhIEdpdApyZXBvc2l0 b3J5IG5hbWVkICJlbHBhIiwgaG9zdGVkIG9uIFNhdmFubmFoLiAgVG8gY2hlY2sgaXQgb3V0OgoK ICBnaXQgY2xvbmUgZ2l0Oi8vZ2l0LnN2LmdudS5vcmcvZW1hY3MvZWxwYQogIGNkIGVscGEKICBt YWtlIHNldHVwCgpUaGF0IGxlYXZlcyB0aGUgZWxwYS9wYWNrYWdlcyBkaXJlY3RvcnkgZW1wdHk7 IHlvdSBtdXN0IGNoZWNrIG91dCB0aGUKb25lcyB5b3Ugd2FudC4KCklmIHlvdSB3aXNoIHRvIGNo ZWNrIG91dCBhbGwgdGhlIHBhY2thZ2VzIGludG8gdGhlIHBhY2thZ2VzIGRpcmVjdG9yeSwKeW91 IGNhbiBydW4gdGhlIGNvbW1hbmQ6CgogICBtYWtlIHdvcmt0cmVlcwoKWW91IGNhbiBjaGVjayBv dXQgYSBzcGVjaWZpYyBwYWNrYWdlIDxwa2duYW1lPiBpbnRvIHRoZSBwYWNrYWdlcwpkaXJlY3Rv cnkgd2l0aDoKCiAgIG1ha2UgcGFja2FnZXMvPHBrZ25hbWU+CgoKQ2hhbmdlcyB0byB0aGlzIHJl cG9zaXRvcnkgcHJvcGFnYXRlIHRvIGVscGEuZ251Lm9yZyB2aWEgYQoiZGVwbG95bWVudCIgc2Ny aXB0IHJ1biBkYWlseS4gIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyB0aGUgY29udGVudAp2aXNpYmxl IGF0IGh0dHBzOi8vZWxwYS5nbnUub3JnL3BhY2thZ2VzLgoKQSBuZXcgcGFja2FnZSBpcyByZWxl YXNlZCBhcyBzb29uIGFzIHRoZSAidmVyc2lvbiBudW1iZXIiIG9mIHRoYXQKcGFja2FnZSBpcyBj aGFuZ2VkLiAgU28geW91IGNhbiB1c2UgJ2VscGEnIHRvIHdvcmsgb24gYSBwYWNrYWdlCndpdGhv dXQgZmVhciBvZiByZWxlYXNpbmcgdGhvc2UgY2hhbmdlcyBwcmVtYXR1cmVseS4gIEFuZCBvbmNl IHRoZQpjb2RlIGlzIHJlYWR5LCBqdXN0IGJ1bXAgdGhlIHZlcnNpb24gbnVtYmVyIHRvIG1ha2Ug YSBuZXcgcmVsZWFzZSBvZgp0aGUgcGFja2FnZS4KCkl0IGlzIGVhc3kgdG8gdXNlIHRoZSBlbHBh IGJyYW5jaCB0byBkZXBsb3kgYSAibG9jYWwiIGNvcHkgb2YgdGhlCnBhY2thZ2UgYXJjaGl2ZS4g IEZvciBkZXRhaWxzLCBzZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBlbHBhIGJyYW5jaC4KCgpF TFBBIFBBQ0tBR0VTIEJVTkRMRUQgSU4gVEhFIERJU1RSSUJVVElPTiBUQVJCQUxMCgpXaHkgQnVu ZGxlPwoKICAgIC0gVG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciB1c2VycyB3 aGlsZSBhbGxvd2luZyBtb3JlCiAgICAgIGZsZXhpYmxlIHJlbGVhc2VzLCBhbmQgbW9yZSBjb252 ZW5pZW50IG1haW50ZW5hbmNlLgoKICAgICAgLSBhZGEtbW9kZSB3YXMgb3JpZ2luYWxseSBpbmNs dWRlZCBpbiB0aGUgZW1hY3MgdGFyYmFsbCwgYnV0IHdhcwogICAgICAgIHJlbW92ZWQgd2hlbiB0 aGUgRUxQQSB2ZXJzaW9uIHdhcyBjYXBhYmxlIGVub3VnaC4gU29tZSB1c2VycwogICAgICAgIGNv bXBsYWluZWQ7IGJ1bmRsaW5nIGFkYS1tb2RlIHdvdWxkIChhbG1vc3QpIHJlc3RvcmUgdGhlCiAg ICAgICAgb3JpZ2luYWwgYmVoYXZpb3IuCgogICAgICAtIG9yZyBhbmQgb3RoZXIgcGFja2FnZXMg Y3VycmVudGx5IG1haW50YWluIHR3byBjb3BpZXMgb2YgdGhlaXIKICAgICAgICBjb2RlLCBpbiBl bWFjcy5naXQgbWFzdGVyIGFuZCBlbHBhLmdpdC4gU3luY2hyb25pemluZyB0aGVtIGlzCiAgICAg ICAgZGlmZmljdWx0OyBpdCBpcyBub3QgYSBzaW1wbGUgYGdpdCBwdXNoL3B1bGwnLiBCdW5kbGlu ZyB3b3VsZAogICAgICAgIGVsaW1pbmF0ZSB0aGUgY29weSBpbiBlbWFjcy5naXQuCiAgICAKVXNl cnMgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCB1cGRhdGUgYSBidW5kbGVkIEVM UEEKcGFja2FnZTsgdGhlIG5vcm1hbCBwYWNrYWdlLmVsIG1lY2hhbmlzbXMgcmVjb2duaXplIGFs bCB0aGUgdmVyc2lvbnMKcHJvcGVybHkuIAoKRW1hY3MgY29yZSBjb2RlIG1heSBub3QgZGVwZW5k IG9uIChidW5kbGVkIG9yIG5vbi1idW5kbGVkKSBHTlUgRUxQQQpwYWNrYWdlcyB1bmxlc3MgdGhl eSBhcmUgIjpjb3JlIiBwYWNrYWdlcyAoaWUsIHRoZXkgaGF2ZSBjb2RlIGluIGJvdGgKZW1hY3Mu Z2l0IG1hc3RlciBhbmQgZWxwYS5naXQpOyBpZiB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgcmVxdWly ZWQsIHRoZQpwYWNrYWdlIG11c3QgYmUgbW92ZWQgdG8gRW1hY3MuCgogICBSYXRpb25hbGU6CiAg IAogICAtIEEgc2ltcGxlIGdpdCBjbG9uZS9jaGVja291dCBvZiBlbWFjcy5naXQgbWFzdGVyIGNy ZWF0ZXMgYQogICAgIHdvcmtzcGFjZSB3aWxsIGFsbCBjb2RlIHJlcXVpcmVkIHRvIGJ1aWxkIGFu ZCBydW4gRW1hY3MuCgogICAtIEFueSBFTFBBIHBhY2thZ2UgY2FuIGJlIGNoYW5nZWQgd2l0aG91 dCBhZmZlY3RpbmcgRW1hY3MgY29yZS4KCkZvciBzaW5nbGUgZmlsZSBwYWNrYWdlcywgdGhlIGZp bGUgY2FuIHNpbXBseSBiZSBpbiBib3RoIGVscGEuZ2l0IGFuZAplbWFjcy5naXQgbWFzdGVyLiBU aGUgcGFja2FnZSBpcyBtYXJrZWQgIjpjb3JlIiBpbiB0aGUgRUxQQQoiZWxwYS1wYWNrYWdlcyIg ZmlsZS4gRm9yIGV4YW1wbGUsIGVsZG9jIGFuZCBmbHltYWtlIGFyZSA6Y29yZQpwYWNrYWdlcy4g VGhpcyBtZWNoYW5pc20gaXMgbm90IHN1cHBvcnRlZCBmb3IgbXVsdGktZmlsZSBwYWNrYWdlcywK YmVjYXVzZSBtYWludGFpbmluZyBzeW5jIGJldHdlZW4gdGhlIGZpbGVzIGluIGVtYWNzLmdpdCBh bmQgZWxwYS5naXQKaXMgbW9yZSBwcm9ibGVtYXRpYyAtIHdpdGggdGhlIG1lY2hhbmlzbSBkZXNj cmliZWQgYmVsb3csIHlvdSBjYW4gdXNlCmdpdCBwdXNoL3B1bGwgdG8gbWFpbnRhaW4gc3luYy4K CgpFdmVyeSBHTlUgRUxQQSBwYWNrYWdlIGhhcyBhIGNvcnJlc3BvbmRpbmcgYnJhbmNoCmBleHRl cm5hbHMvW1BLR05BTUVdYCBpbiBlbHBhLmdpdC4gVG8gYnVuZGxlIGEgcGFja2FnZSBpbiBFbWFj cywgYWRkCnRvIGVscGEuZ2l0IGEgYnJhbmNoIGBlbWFjcy1OTi9bUEtHTkFNRV1gIHdoaWNoIGhv bGRzIHRoZSB2ZXJzaW9uIHRvCmJlIGluY2x1ZGVkIGluIHRoZSBuZXh0IEVtYWNzIHJlbGVhc2Ug b2YgdmVyc2lvbiBOTi4gYG1ha2UgZGlzdCcgd291bGQKdGhlbiBncmFiIHRoZSBidW5kbGVkIHBh Y2thZ2VzJ3MgY29kZSBmcm9tIHRob3NlIGJyYW5jaGVzLCBhbmQgaW5jbHVkZQp0aGVtIGluIC91 c3Ivc2hhcmUvZW1hY3MvTk4uTU0vZWxwYS8qIGluIHRoZSBkaXN0cmlidXRpb24uIAoKQXQgRW1h Y3Mgc3RhcnR1cCwgdGhlIGJ1bmRsZWQgYGVscGEnIGRpcmVjdG9yeSBpcyBhZGRlZCB0bwpwYWNr YWdlLWRpcmVjdG9yeS1saXN0LCBhbmQgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBvdGhlciBlbnRy aWVzIGluCnRoYXQgbGlzdC4KCkZvciBFbWFjcyBkZXZlbG9wZXIgY29udmVuaWVuY2UsIHRoZXJl IGlzIGEgc2NyaXB0CmBjaGVja291dC1idW5kbGVkLWVscGEnIHRoYXQgY2hlY2tzIG91dCB0aGUg Y29ycmVjdCB2ZXJzaW9ucyBvZiB0aGUKYnVuZGxlZCBFTFBBIHBhY2thZ2VzIGludG8gYW4gZWxw YSB3b3JrdHJlZS4gSW4gYWRkaXRpb24sIHRoZXJlIGlzIGFuCmVtYWNzIGZ1bmN0aW9uIGBhZGQt YnVuZGxlZC1lbHBhLXBhY2thZ2VzJyB0aGF0IGFkZHMgdGhvc2UgcGFja2FnZQpkaXJlY3Rvcmll cyB0byBgbG9hZC1wYXRoJywgc28gdGhleSB3b3JrIGFzIGlmIHRoZXkgd2VyZSBzaW1wbHkgaW4g dGhlCmVtYWNzLmdpdCB3b3JrdHJlZS4gQm90aCBvZiB0aGVzZSBmZWF0dXJlcyBhcmUgb3B0aW9u YWwuIAoKVU5SRVNPTFZFRCBJU1NVRVM6CgotIFRoZXJlIGFyZSBjdXJyZW50bHkgKGphbiAyMDIw KSBzb21lIG11bHRpLWZpbGUgcGFja2FnZXMgd2l0aCBjb2RlIGluCiAgYm90aCBlbHBhLmdpdCBh bmQgZW1hY3MuZ2l0OyBvcmcsIGdudXMgZm9yIGV4YW1wbGUuIE9uY2UgdGhlIEVMUEEKICBidW5k bGluZyBwcm9jZXNzIGlzIHdvcmtlZCBvdXQsIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhvc2UgcGFj a2FnZXMKICB3aWxsIHVzZSB0aGUgYnVuZGxpbmcgcHJvY2VzcyBpbnN0ZWFkLgoKLSBJbiB0aGUg ZnV0dXJlLCBmb3IgcGFja2FnZXMgbGlrZSBvcmcgdGhhdCB1c2VkIHRvIGhhdmUgY29kZSBpbgog IGVtYWNzLmdpdCBtYXN0ZXIgYW5kIGVscGEuZ2l0LCB0aGUgZW1hY3MuZ2l0IGNoZWNrb3V0IG5v IGxvbmdlciBoYXMKICB0aGUgcGFja2FnZSwgd2hpY2ggaXMgbm90IGJhY2t3YXJkIGNvbXBhdGli bGUgZm9yIGRldmVsb3BlcnMuIEVtYWNzCiAgZGV2ZWxvcGVycyB3aG8gd2FudCB0aG9zZSBwYWNr YWdlcyBub3cgaGF2ZSB0byBpbnN0YWxsIHRoZW0gdmlhCiAgYGxpc3QtcGFja2FnZXMnLCBvciBj aGVjayB0aGVtIG91dCBmcm9tIGVscGEuZ2l0LgoKLSBTaG91bGQgZmV0Y2hpbmcgYSB3b3JrdHJl ZSBmcm9tIGVtYWNzLmdpdCBhbHNvIGZldGNoIHRoZSBidW5kbGVkIEdOVQogIEVMUEEgcGFja2Fn ZXMgKGludG8gdGhlIEVtYWNzIHdvcmt0cmVlIG9yIHNvbWV3aGVyZSBlbHNlKT8KCiAgICAgLSBO b3QgZmV0Y2hpbmcgRUxQQSBwYWNrYWdlcyBpbnRvIHRoZSBlbWFjcy5naXQgd29ya3RyZWUgaGVs cHMKICAgICAgIGVuZm9yY2UgdGhlIHJ1bGUgdGhhdCBFbWFjcyBjb3JlIGNvZGUgbWF5IG5vdCBk ZXBlbmQgb24gRUxQQQogICAgICAgY29kZS4KCiAgICAgLSBOb3QgZmV0Y2hpbmcgRUxQQSBwYWNr YWdlcyBtZWFucyBhbGwgcGFja2FnZXMgYXJlIHRyZWF0ZWQKICAgICAgIGVxdWFsbHk7IEVtYWNz IGRldmVsb3BlcnMgZG8gbm90IGhhdmUgdG8gYmUgYXdhcmUgb2Ygd2hldGhlcgogICAgICAgc29t ZSBwYWNrYWdlcyBhcmUgYnVuZGxlZCBvciBub3QuIE9ubHkgdGhlIHBhY2thZ2UgZGV2ZWxvcGVy CiAgICAgICBoYXMgdG8ga25vdy4KCiAgICAgLSBGZXRjaGluZyB0aGVtIG1ha2VzIGl0IGNsZWFy ZXIgd2hhdCdzIGJ1bmRsZWQgYW5kIHdoYXQgaXNuJ3QuIAogICAgIAogICAgIC0gV2l0aCB0aGUg YmFzZWxpbmUgbWVjaGFuaXNtLCBkZXZlbG9wZXJzIHdobyB3YW50IGEgYnVuZGxlZCBFTFBBCiAg ICAgICBwYWNrYWdlIGNoZWNrb3V0IHRoYXQgcGFja2FnZSBmcm9tIGVscGEuZ2l0IGFuZCBlaXRo ZXIgaW5zdGFsbAogICAgICAgdGhlIHBhY2thZ2UgZnJvbSB0aGVyZSBvciBpbmNsdWRlIGVscGEv cGFja2FnZXMvW1BLR05BTUVdIGluCiAgICAgICB0aGVpciBgbG9hZC1wYXRoJywgYXMgZm9yIGFu eSAobm9uLWJ1bmRsZWQpIEVMUEEgcGFja2FnZS4KICAgICAKICAgICAtIEFuIGFsdGVybmF0aXZl IHdvdWxkIGJlIHRvIGRlY2xhcmUgYSBnaXQgc3VibW9kdWxlIGZvciBlYWNoCiAgICAgICBidW5k bGVkIHBhY2thZ2UsIHdpdGggYSBjb3JyZXNwb25kaW5nIGJyYW5jaCBgZWxwYS9bUEtHTkFNRV1g CiAgICAgICAoaW5zdGVhZCBvZiB0aGUgYnJhbmNoZXMgJ2VtYWNzLW5uL1tQS0dOQU1FXScpLiBU aGUgc3VibW9kdWxlCiAgICAgICBkZWNsYXJhdGlvbiB3b3VsZCBwbGFjZSB0aGUgcGFja2FnZXMg aW4gZW1hY3MvZWxwYSAocGFyYWxsZWwgdG8KICAgICAgIGVtYWNzL2xpc3ApLCBzbyBFbWFjcyBz dWJkaXJzLmVsIGRvZXMgbm90IHNlZSB0aGVtLiBlbWFjcy9lbHBhCiAgICAgICBpcyBpbiBwYWNr YWdlLWRpcmVjdG9yeS1saXN0IGJ5IGRlZmF1bHQgd2hlbiBydW5uaW5nIGZyb20gdGhlCiAgICAg ICBzb3VyY2UgZGlyZWN0b3J5LgoKICAgICAtIElmIHdlIGhhdmUgc3VibW9kdWxlcywgbmV3IGRl dmVsb3BlcnMgb3IgYSBmcmVzaCBjaGVja291dCBtdXN0CiAgICAgICB1c2U6CgogICAgICAgICAg Z2l0IGNsb25lIC4uLi9lbWFjcy5naXQgLS1yZWN1cnNlLXN1Ym1vZHVsZXMKCiAgICAgICBmb3Ig dGhlIGluaXRpYWwgY2xvbmUuIElkZWFsbHksIHRoZSBTYXZhbm5haCB3ZWIgcGFnZQogICAgICAg aHR0cHM6Ly9zYXZhbm5haC5nbnUub3JnL2dpdC8/Z3JvdXA9ZW1hY3Mgd291bGQgc2F5IHRoYXQu CgogICAgIC0gT3RoZXIgdmFyaWF0aW9ucyBvbiB3aGVyZSB0byBwbGFjZSB0aGUgc3VibW9kdWxl cyBpbiB0aGUgZW1hY3MKICAgICAgIHdvcmt0cmVlIG9mZmVyIG1vcmUgYmFja3dhcmQgY29tcGF0 aWJpbGl0eS4KCiAgICAgICAtIE9uZSBpc3N1ZSBpcyB3aGV0aGVyIHRoZSBhdXRvbG9hZHMgb2Yg YnVuZGxlZCBFTFBBIHBhY2thZ2VzCiAgICAgICAgIGFyZSBwcm9jZXNzZWQgd2hlbiB3ZSBkdW1w IEVtYWNzIChsaWtlIHdlIGRvIGZvciBhbGwgdGhlCiAgICAgICAgIHBhY2thZ2VzIHRoYXQgYXJl IGluIEVtYWNzIGNvcmUpLCBvciB3aGV0aGVyIHRoYXQncyBkb25lCiAgICAgICAgIGR1cmluZyBg cGFja2FnZS1hY3RpdmF0ZS1hbGxgIChpLmUuIGJldHdlZW4gYGVhcmx5LWluaXQuZWxgCiAgICAg ICAgIGFuZCBgaW5pdC5lbGApLgoKICAgICAgICAgRG9pbmcgaXQgYXQgZHVtcCB0aW1lIGdpdmVz IGJldHRlciBzdGFydHVwIHRpbWVzLCBhdCB0aGUgY29zdAogICAgICAgICBvZiBtYWtpbmcgaXQg aW1wb3NzaWJsZSBmb3IgdGhlIGVuZC11c2VyIHRvIHByZXZlbnQKICAgICAgICAgYWN0aXZhdGlv biBvZiBhIHBhY2thZ2UgKHRoZXkgY2FuIHN0aWxsIHVuZG8gdGhlIGFjdGl2YXRpb24KICAgICAg ICAgYWZ0ZXIgdGhlIGZhY3QsIG9mIGNvdXJzZSwgYnV0IHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBp bgogICAgICAgICBhZC1ob2Mgd2F5cykuCgogICAgICAgICBVc2VycyB3aG8gY2FyZSBhYm91dCBz dGFydHVwIHRpbWUgY2FuIGRvIHRoZWlyIG93biBkdW1wLgoKCiAgICAgLSBVc2luZyBzdWJtb2R1 bGVzIHdvdWxkIGhlbHAgYXV0b21hdGUgY2xlYW5pbmcgYW5kIHVwZGF0aW5nIHRoZQogICAgICAg YnVuZGxlZCBwYWNrYWdlczsgd2l0aCB0aGUgYmFzZWxpbmUgbWVjaGFuaXNtLCBkZXZlbG9wZXJz IG11c3QKICAgICAgIHNlcGFyYXRlbHkgbWFuYWdlIHRoZSBlbHBhIHdvcmt0cmVlLgoKLSBBdXRv bWF0aW5nIGNvbXBpbGluZyBDLCBBZGEsIFJ1c3Qgb3Igb3RoZXIgbGFuZ3VhZ2UgY29kZSByZXF1 aXJlZCBieQogIHRoZSBwYWNrYWdlLCB0byBleGVjdXRhYmxlcyBvciBtb2R1bGVzLiBUaGlzIGlu Y2x1ZGVzIGRlZmluaW5nCiAgc3RhbmRhcmQgcGxhY2VzIHRvIHB1dCBleGVjdXRhYmxlcywgbW9k dWxlcywgYW5kIG90aGVyCiAgYXJpdGlmYWN0cy4gVGhpcyBpcyBtb3JlIGltcG9ydGFudCBmb3Ig YnVuZGxlZCBwYWNrYWdlczsgdXNlcnMKICBleHBlY3QgRW1hY3MgdG8gImp1c3Qgd29yayIgb3V0 IG9mIHRoZSBib3guCgotLSB1cGRhdGVkIDIwIEphbiAyMDIxCg== --=-=-=--