From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: "francisco.colaco@gmail.com" Newsgroups: gmane.emacs.devel Subject: xdg-directories.el Date: Tue, 6 Sep 2016 16:24:56 +0100 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a1146ddec34d60f053bd866fe X-Trace: blaine.gmane.org 1473176020 10591 195.159.176.226 (6 Sep 2016 15:33:40 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 6 Sep 2016 15:33:40 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Sep 06 17:33:33 2016 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bhIND-0000jd-NC for ged-emacs-devel@m.gmane.org; Tue, 06 Sep 2016 17:33:20 +0200 Original-Received: from localhost ([::1]:34415 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhINB-0004AR-Hr for ged-emacs-devel@m.gmane.org; Tue, 06 Sep 2016 11:33:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:37777) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhIFD-0005oT-AK for emacs-devel@gnu.org; Tue, 06 Sep 2016 11:25:05 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bhIF9-0003Vn-7y for emacs-devel@gnu.org; Tue, 06 Sep 2016 11:25:03 -0400 Original-Received: from mail-wm0-x229.google.com ([2a00:1450:400c:c09::229]:36804) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bhIF8-0003Vc-P8 for emacs-devel@gnu.org; Tue, 06 Sep 2016 11:24:59 -0400 Original-Received: by mail-wm0-x229.google.com with SMTP id b187so70531337wme.1 for ; Tue, 06 Sep 2016 08:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to; bh=/XCSWK3ZalVRSSQWt+PhjGOzYqSA83UOnckjEkq4Z8k=; b=tLpQD7A5Kbf6SJtGlGpM076cjPdWq0Fw322AGj+Hv8AhlqBH0l3OgepPU9vISF+kc5 74BeQUcfCfwK2O/XlelqNUt8jwv0ldcPamBMaiEbiB62OV6ZWT50rT2H9xFG9LlXOMSs +PRWjCRe70qbra21rvapQScgCkdv7zCzoKHRDMGWROjmk6TXwbYvxC84xjUOHkTKlSHs 4Zc7iVdP2M0Cmgzhe279Db9yRwByKpn0fBhRQJBUuE1CpKIqjtESdjGcH/BFgv+E3glW 0S3hx4ClQlBEdPHl6f3RhjwolgUjB0rDoXtJk+szy1vyuqRUqHkEouujYjr+wYMM5mt2 IJHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=/XCSWK3ZalVRSSQWt+PhjGOzYqSA83UOnckjEkq4Z8k=; b=HGEk6v3f0UkxPC8rQaX6poH0GRB+aS1WI7G4js5XDku3m1WTW5jqEpL7CkVHnJFCCh 3Lw9btIJEjCLJTajpZhNhM3X9kpW0qNd5Jsvz6kIHN0RHOfifykodd39jwrSkSCeVa5P enoo/K/Pz8Zu5lyAW0SI6AiSmQWBmwJD5baKPOuuUYGKakEIiDMhlJYoftsV0a2mYxJe P42sczlJsp4D3U1HBam9aixA8+UGM37oRVM9e1PA8Ch7agq/OTT3QRG1UKbcyKSb7EVm PgbsuztT6kBAVE96j6l+jykXeaxrbbqZJlWvJ0ua5sWoHKWHAZJ8hRj/cheSYCrtUDsz hLJA== X-Gm-Message-State: AE9vXwNv/VYSqzqtzAH0yKhdtqt4fIcfRgKm1/9Rm9MJe3v6qSVJPh8D8iBByO+eMKXcevbRy4Aqedt54eCzNw== X-Received: by 10.28.113.20 with SMTP id m20mr20602340wmc.82.1473175497258; Tue, 06 Sep 2016 08:24:57 -0700 (PDT) Original-Received: by 10.28.30.140 with HTTP; Tue, 6 Sep 2016 08:24:56 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::229 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 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.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:207210 Archived-At: --001a1146ddec34d60f053bd866fe Content-Type: multipart/alternative; boundary=001a1146ddec34d60b053bd866fb --001a1146ddec34d60b053bd866fb Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Friends, I have written several years ago a package called xdg-paths.el. I have rewritten it as xdg-directories.el. * WHAT IS xdg-directories.el xdg-directories.el allows the package writers to locate a file in Emacs user directories for different domains: data, configuration, cache and runtime. It also locates files in the domains defined by the utility xdg-user-dir, which is executed when finding the domain. Using this package, an emacs-lisp package writer can put different files under different directories, according to the domain thereof. A cache file, which is normally not wanted in backups, can be named under ~/.cache/emacs/, whereas a configuration file would be under a different directory, in ~/.config/emacs/. Passwords and security sensible files can also made to be in a directory where, as the user logs out, is normally erased. * BRIEF USAGE (see README.md at the Github repository) Files form several domains can be located. Located means here, at the lack of a better term, named, since the file name will be returned, regardless of the file existence. - User documents: > (locate-user-document-file "org/agenda.txt") > "/home/francisco.colaco/Documentos/org/agenda.txt" - Configuration files: > (locate-user-emacs-config-file "init.el") > "/home/francisco.colaco/.config/emacs/emacs/init.el" - Data files: > (locate-user-emacs-data-file "recentf") > "/home/francisco.colaco/.local/share/emacs/emacs/recentf" - Cache files: > (locate-user-emacs-cache-file "elfeed/index") > "/home/francisco.colaco/.cache/emacs/emacs/elfeed/index" - Runtime files: > (locate-user-emacs-runtime-file "credentials.txt") > "/run/user/1000/emacs/emacs/credentials.txt" For example, init.el could be marked as a configuration file (and reside under ~/.config/emacs) and recentf as data file (being under ~/.local/share/emacs). There is more to the library. I have grated a Github repository, at https://github.com/francisco-colaco/xdg-directories-el/ * ABOUT user-init-file I would request that this package (after revision and a possible API change) becomes part of GNU Emacs. I would also suggest that ~/.config/emacs/init.el (the result of "(locate-user-emacs-config-file "init.el") becomes in vanilla emacs part of the chain to determine user-init-file. As an advantage, one could weed out cache files from user backups or line transmissions. This package breaks no existing functions, and so, as the package writers adopt it, the separation of domains is assured. I see no real advantage in keeping almost everything under ~/.emacs.d/, the present situation, but I am open to other arguments. Thanks for your attention. Francisco Cola=C3=A7o --001a1146ddec34d60b053bd866fb Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
=C2=A0 Friends,
I have written several years ago a package called xdg-paths.el.= =C2=A0 I have rewritten it as xdg-directories.el.

* WHAT IS xd= g-directories.el

xdg-directories.el allows the package wr= iters to locate a file in
Emacs user directories for different domains: = data, configuration,
cache and runtime.=C2=A0 It also locates files in t= he domains defined by the
utility xdg-user-dir, which is executed when f= inding the domain.

Using this package, an emacs-lisp package writer = can put different
files under different directories, according to the do= main thereof.=C2=A0 A
cache file, which is normally not wanted in backup= s, can be named
under ~/.cache/emacs/<filename>, whereas a configu= ration file would be
under a different directory, in ~/.config/emacs/.= =C2=A0 Passwords and
security sensible files can also made to be in a di= rectory where, as
the user logs out, is normally erased.

* BRIEF USAGE (see README.md at the Github repository)
Files form several domains can be located.=C2=A0 Located means here, at th= e
lack of a better term, named, since the file name will be returned,regardless of the file existence.

- User documents:

> (lo= cate-user-document-file "org/agenda.txt")
> "/home/fra= ncisco.colaco/Documentos/org/agenda.txt"

- Configuration files:=

> (locate-user-emacs-config-file "init.el")
> &q= uot;/home/francisco.colaco/.config/emacs/emacs/init.el"

- Data = files:

> (locate-user-emacs-data-file "recentf")
>= ; "/home/francisco.colaco/.local/share/emacs/emacs/recentf"
- Cache files:

> (locate-user-emacs-cache-file "elfeed/ind= ex")
> "/home/francisco.colaco/.cache/emacs/emacs/elfeed/in= dex"

- Runtime files:

> (locate-user-emacs-runtime-fi= le "credentials.txt")
> "/run/user/1000/emacs/emacs/cr= edentials.txt"

For example, init.el could be marked as a = configuration file (and reside under ~/.config/emacs) and recentf as data f= ile (being under ~/.local/share/emacs).

There is more to the l= ibrary.=C2=A0 I have grated a Github repository, at

=C2=A0 https://github= .com/francisco-colaco/xdg-directories-el/

*=C2=A0 ABOUT us= er-init-file

I would request that this package (after revision and a= possible API change) becomes part of GNU Emacs.=C2=A0 I would also suggest= that ~/.config/emacs/init.el (the result of "(locate-user-emacs-confi= g-file "init.el") becomes in vanilla emacs part of the chain to d= etermine user-init-file.

As an advantage, one could weed out c= ache files from user backups or line transmissions.=C2=A0 This package brea= ks no existing functions, and so, as the package writers adopt it, the sepa= ration of domains is assured.=C2=A0 I see no real advantage in keeping almo= st everything under ~/.emacs.d/, the present situation, but I am open to ot= her arguments.

=C2=A0 Thanks for your attention.
=C2=A0=C2=A0=C2=A0 Francisco Cola=C3=A7o
--001a1146ddec34d60b053bd866fb-- --001a1146ddec34d60f053bd866fe Content-Type: text/x-emacs-lisp; charset=UTF-8; name="xdg-directories.el" Content-Disposition: attachment; filename="xdg-directories.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_isrmnepl0 Ozs7IHhkZy1kaXJlY3Rvcmllcy5lbCAtLS0gWERHIGRpcmVjdG9yeSBzcGVjaWZpY2F0aW9uCgo7 OyBDb3B5cmlnaHQgKEMpIDIwMTYgIEZyYW5jaXNjbyBNaWd1ZWwgQ29sYcOnbwoKOzsgQXV0aG9y OiBGcmFuY2lzY28gTWlndWVsIENvbGHDp28gPGZyYW5jaXNjby5jb2xhY29AZ21haWwuY29tPgo7 OyBLZXl3b3JkczogWERHLCBkaXJlY3RvcnksIGNhY2hlLCBjb25maWcKCjs7OyBDb21tZW50YXJ5 Ogo7OzsKOzs7IFhERy1ESVJFQ1RPUklFUyBjb250YWlucyBmdW5jdGlvbnMgdG8gbG9jYXRlIHVz ZXIgRW1hY3MgZmlsZXMsIGluCjs7OyBhY2NvcmRhbmNlIHRvIHRoZSBYREcgQmFzZSBEaXJlY3Rv cnkgU3BlY2lmaWNhdGlvbi4KOzs7Cjs7OyBUaGVyZSBhcmUgZGlmZmVyZW50IGRvbWFpbnMgdG8g dGhlIGZpbGVzLCBhcyB0aGV5IGFyZSBicm9rZW4gaW50bwo7OzsgY29uZmlnLCBkYXRhLCBjYWNo ZSBhbmQgcnVudGltZS4gIFdlIGFkdmlzZSB0aGUgdXNlcnMgb2YgdGhpcwo7OzsgcGFja2FnZSB0 byBsb29rIGF0IHRoZSBhZm9yZW1lbnRpb25lZCBzcGVjaWZpY2F0aW9uIHRvIGxlYXJuIHRoZQo7 OzsgZGlmZmVyZW5jZXMgb2YgdGhlIGRvbWFpbnMuCjs7Owo7OzsgVGhlIGxvY2F0ZS0qIGZ1bmN0 aW9ucyBhcmUgdG8gYmUgdXNlZCBieSBwYWNrYWdlIHdyaXRlcnMuICBVc2VyCjs7OyBFbWFjcyBj b25maWd1cmF0aW9uLCBkYXRhIGFuZCBjYWNoZSBmaWxlcyBjYW4gdGhlbiBiZSBzZWdyZWdhdGVk Cjs7OyBpbnRvIHRoZWlyIG93biBkaXJlY3RvcmllcywgbWFraW5nIGl0IHNpbXBsZSB0byBtaWdy YXRlCjs7OyBjb25maWd1cmF0aW9ucyBhbW9uZyBzZXZlcmFsIG1hY2hpbmVzIC0tLSBzaW5jZSB0 aGUgZmlsZXMgdGhhdCBhcmUKOzs7IHVubmVjZXNzYXJ5LCBiZWluZyBjYWNoZWQgZmlsZXMsIGNv dWxkIGVhc2lseSBub3QgYmUgdHJhbnNtaXR0ZWQuCjs7Owo7OzsgVGhpcyBwYWNrYWdlIGlzIHJl bGVhc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKOzs7IHZlcnNpb24g My4wIG9yLCBhdCB5b3VyIGNob2ljZSwgYWJvdmUuICBPbmUgbWF5IHJlYWQgdGhlIEdOVQo7Ozsg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhdCB0aGUgR05VIFdlYiBzaXRlLCBhdCBodHRwOi8vd3d3 LmdudS5vcmcKOzs7Cgo7OzsgQ29kZToKCihyZXF1aXJlICdzKQoKCihkZWZncm91cCB4ZGctZGly ZWN0b3JpZXMKICAgICgpCiAgIlhERyBEaXJlY3RvcnkgU3BlY2lmaWNhdGlvbiIKICA6Z3JvdXAg J2Vudmlyb25tZW50CiAgOmxpbmsgJyhlbWFjcy1saWJyYXJ5LWxpbmsgInhkZy1kaXJlY3Rvcmll cyIpKQoKCihkZWZ1biB4ZGctZ2V0LXBhdGggKGRvbWFpbiAmb3B0aW9uYWwgcGF0aCkKICAiUmV0 dXJuIHRoZSBkaXJlY3RvcnkgYXQgRE9NQUlOLCB3aXRoIGFuIG9wdGlvbmFsIFBBVEggcmVsYXRp dmUgdG8gaXQuIgogIChsZXQgKChkaXIgKHMtY2hvbXAgKHNoZWxsLWNvbW1hbmQtdG8tc3RyaW5n IChjb25jYXQgInhkZy11c2VyLWRpciAiIGRvbWFpbikpKSkpCiAgICAoaWYgcGF0aAogICAgICAg IChleHBhbmQtZmlsZS1uYW1lIHBhdGggZGlyKQogICAgICAgIGRpcikpKQoKCihkZWZjdXN0b20g eGRnLWRhdGEtaG9tZQogIChvciAoZ2V0ZW52ICJYREdfREFUQV9IT01FIikgKGV4cGFuZC1maWxl LW5hbWUgIn4vLmxvY2FsL3NoYXJlIikpCiAgIlRoZSBiYXNlIGRpcmVjdG9yeSByZWxhdGl2ZSB0 byB3aGljaCB1c2VyIHNwZWNpZmljIGRhdGEgZmlsZXMKICBzaG91bGQgYmUgc3RvcmVkLiIKICA6 Z3JvdXAgJ3hkZy1kaXJlY3RvcmllcwogIDp0eXBlICdkaXJlY3RvcnkpCgoKKGRlZmN1c3RvbSB4 ZGctY29uZmlnLWhvbWUKICAob3IgKGdldGVudiAiWERHX0NPTkZJR19IT01FIikgKGV4cGFuZC1m aWxlLW5hbWUgIn4vLmNvbmZpZyIpKQogICJUaGUgYmFzZSBkaXJlY3RvcnkgcmVsYXRpdmUgdG8g d2hpY2ggdXNlciBzcGVjaWZpYwogIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIGJlIHN0b3Jl ZC4iCiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5KQoKCihkZWZj dXN0b20geGRnLWNhY2hlLWhvbWUKICAob3IgKGdldGVudiAiWERHX0NBQ0hFX0hPTUUiKSAoZXhw YW5kLWZpbGUtbmFtZSAifi8uY2FjaGUiKSkKICAiVGhlIGJhc2UgZGlyZWN0b3J5IHJlbGF0aXZl IHRvIHdoaWNoIHVzZXIgc3BlY2lmaWMKICBub24tZXNzZW50aWFsIGRhdGEgZmlsZXMgc2hvdWxk IGJlIHN0b3JlZC4iCiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5 KQoKCihkZWZjdXN0b20geGRnLXJ1bnRpbWUtZGlyCiAgKGdldGVudiAiWERHX1JVTlRJTUVfRElS IikKICAiVGhlIGRpcmVjdG9yeSB3aGVyZSBmaWxlcyB0aGF0IHBlcnRhaW4gb25seSB0byB0aGlz IHNlc3Npb24KICBhcmUgc3RvcmVkLiAgVGhlc2UgZmlsZXMgY2FuIGJlIGVyYXNlZCB3aGVuIHRo ZSBhcHBsaWNhdGlvbiBxdWl0cwogIG9yIHRoZSB1c2VyIGxvZ3Mgb3V0LiIKICA6Z3JvdXAgJ3hk Zy1kaXJlY3RvcmllcwogIDp0eXBlICdkaXJlY3RvcnkpCgoKKGRlZmN1c3RvbSB1c2VyLWVtYWNz LWRhdGEtaG9tZQogIChleHBhbmQtZmlsZS1uYW1lICJlbWFjcyIgeGRnLWRhdGEtaG9tZSkKICAi VGhlIGJhc2UgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHdoaWNoIHVzZXIgRW1hY3Mgc3BlY2lmaWMg ZGF0YQogIGZpbGVzIHNob3VsZCBiZSBzdG9yZWQuIgogIDpncm91cCAneGRnLWRpcmVjdG9yaWVz CiAgOnR5cGUgJ2RpcmVjdG9yeSkKCgooZGVmY3VzdG9tIHVzZXItZW1hY3MtY29uZmlnLWhvbWUK ICAoZXhwYW5kLWZpbGUtbmFtZSAiZW1hY3MiIHhkZy1jb25maWctaG9tZSkKICAiVGhlIGJhc2Ug ZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHdoaWNoIHVzZXIgRW1hY3Mgc3BlY2lmaWMKICBjb25maWd1 cmF0aW9uIGZpbGVzIHNob3VsZCBiZSBzdG9yZWQuIgogIDpncm91cCAneGRnLWRpcmVjdG9yaWVz CiAgOnR5cGUgJ2RpcmVjdG9yeSkKCgooZGVmY3VzdG9tIHVzZXItZW1hY3MtY2FjaGUtaG9tZQog IChleHBhbmQtZmlsZS1uYW1lICJlbWFjcyIgeGRnLWNhY2hlLWhvbWUpCiAgIlRoZSBiYXNlIGRp cmVjdG9yeSByZWxhdGl2ZSB0byB3aGljaCB1c2VyIEVtYWNzIHNwZWNpZmljCiAgbm9uLWVzc2Vu dGlhbCBkYXRhIGZpbGVzIHNob3VsZCBiZSBzdG9yZWQuIgogIDpncm91cCAneGRnLWRpcmVjdG9y aWVzCiAgOnR5cGUgJ2RpcmVjdG9yeSkKCgooZGVmY3VzdG9tIHVzZXItZW1hY3MtcnVudGltZS1k aXIKICAoZXhwYW5kLWZpbGUtbmFtZSAiZW1hY3MiIHhkZy1ydW50aW1lLWRpcikKICAiVGhlIGRp cmVjdG9yeSB3aGVyZSBFbWFjcyBmaWxlcyB0aGF0IHBlcnRhaW4gb25seSB0byB0aGlzIHNlc3Np b24KICBhcmUgc3RvcmVkLiAgVGhlc2UgZmlsZXMgY2FuIGJlIGVyYXNlZCB3aGVuIHRoZSBhcHBs aWNhdGlvbiBxdWl0cwogIG9yIHRoZSB1c2VyIGxvZ3Mgb3V0LiIKICA6Z3JvdXAgJ3hkZy1kaXJl Y3RvcmllcwogIDp0eXBlICdkaXJlY3RvcnkpCgoKKGRlZmN1c3RvbSB1c2VyLWRlc2t0b3AtZGly ZWN0b3J5CiAgKHhkZy1nZXQtcGF0aCAiREVTS1RPUCIpCiAgIlRoZSBkZXNrdG9wIGRpcmVjdG9y eS4iCiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5KQoKCihkZWZj dXN0b20gdXNlci1kb3dubG9hZC1kaXJlY3RvcnkKICAoeGRnLWdldC1wYXRoICJET1dOTE9BRCIp CiAgIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHVzZXIgc3RvcmVzIGhpcyBkb3dubG9hZGVkIGZp bGVzIGJ5IGRlZmF1bHQuIgogIDpncm91cCAneGRnLWRpcmVjdG9yaWVzCiAgOnR5cGUgJ2RpcmVj dG9yeSkKCgooZGVmY3VzdG9tIHVzZXItdGVtcGxhdGVzLWRpcmVjdG9yeQogICh4ZGctZ2V0LXBh dGggIlRFTVBMQVRFUyIpCiAgIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHVzZXIgc3RvcmVzIGhp cyB0ZW1wbGF0ZXMuIgogIDpncm91cCAneGRnLWRpcmVjdG9yaWVzCiAgOnR5cGUgJ2RpcmVjdG9y eSkKCgooZGVmY3VzdG9tIHVzZXItcHVibGljLXNoYXJlLWRpcmVjdG9yeQogICh4ZGctZ2V0LXBh dGggIlBVQkxJQ1NIQVJFIikKICAiVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdXNlciBzdG9yZXMg aGlzIHNoYXJlZCBmaWxlcy4iCiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGly ZWN0b3J5KQoKCihkZWZjdXN0b20gdXNlci1kb2N1bWVudHMtZGlyZWN0b3J5CiAgKHhkZy1nZXQt cGF0aCAiRE9DVU1FTlRTIikKICAiVGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdXNlciBzdG9yZXMg aGlzIGRvY3VtZW50cy4iCiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0 b3J5KQoKCihkZWZjdXN0b20gdXNlci1tdXNpYy1kaXJlY3RvcnkKICAoeGRnLWdldC1wYXRoICJN VVNJQyIpCiAgIlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHVzZXIgc3RvcmVzIGhpcyBtdXNpYy4i CiAgOmdyb3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5KQoKCihkZWZjdXN0 b20gdXNlci1waWN0dXJlcy1kaXJlY3RvcnkKICAoeGRnLWdldC1wYXRoICJQSUNUVVJFUyIpCiAg IlRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHVzZXIgc3RvcmVzIGhpcyBwaWN0dXJlcy4iCiAgOmdy b3VwICd4ZGctZGlyZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5KQoKCihkZWZjdXN0b20gdXNl ci12aWRlb3MtZGlyZWN0b3J5CiAgKHhkZy1nZXQtcGF0aCAiVklERU9TIikKICAiVGhlIGRpcmVj dG9yeSB3aGVyZSB0aGUgdXNlciBzdG9yZXMgaGlzIHZpZGVvcy4iCiAgOmdyb3VwICd4ZGctZGly ZWN0b3JpZXMKICA6dHlwZSAnZGlyZWN0b3J5KQoKCihkZWZ1biB4ZGctZ2V0LXVzZXItZmlsZSAo ZmlsZW5hbWUgcGFyZW50LWRpcmVjdG9yeSAmb3B0aW9uYWwgY3JlYXRlLXBhcmVudC1kaXJzKQog ICJMb2NhdGUgRklMRU5BTUUgdW5kZXIgUEFSRU5ULURJUkVDVE9SWS9lbWFjcywgd2hlcnRoZXIg aXQgZXhpc3RzIG9yIG5vdC4KCklmIENSRUFURS1QQVJFTlQtRElSUyBpcyBULCB0aGUgcGFyZW50 IGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkLiIKICAobGV0KiAoKGJhc2UtZGlyIChleHBhbmQtZmls ZS1uYW1lICJlbWFjcyIgcGFyZW50LWRpcmVjdG9yeSkpCiAgICAgICAgIChmaWxlIChleHBhbmQt ZmlsZS1uYW1lIGZpbGVuYW1lIGJhc2UtZGlyKSkKICAgICAgICAgKGRpciAoZmlsZS1uYW1lLWRp cmVjdG9yeSBmaWxlKSkpCiAgICA7OyBDcmVhdGUgYW55IHBhcmVudCBkaXJlY3RvcmllcywgaWYg c28gcmVxdWVzdGVkLgogICAgKGlmIGNyZWF0ZS1wYXJlbnQtZGlycwogICAgICAgICh1bmxlc3Mg KGZpbGUtZXhpc3RzLXAgZGlyKQogICAgICAgICAgKG1ha2UtZGlyZWN0b3J5IGRpciB0KSkpCiAg ICA7OyBSZXR1cm4gdGhlIGZpbGUgbmFtZS4KICAgIGZpbGUpKQoKCihkZWZ1biBsb2NhdGUtdXNl ci1lbWFjcy1jYWNoZS1maWxlIChmaWxlbmFtZSAmb3B0aW9uYWwgY3JlYXRlLXBhcmVudC1kaXJz KQogICJMb2NhdGUgYSBjYWNoZSBmaWxlIG5hbWVkIEZJTEVOQU1FLgoKVGhlIGZpbGUgbWF5IGV4 aXN0IG9yIG5vdCB1bmRlciB0aGUgdXNlciBFbWFjcyBjYWNoZSBkaXIgKHVuZGVyClhERy1DQUNI RS1IT01FL2VtYWNzKS4gIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGlzIHJldHVybmVkCnJlZ2FyZGxl c3Mgb2YgaXQncyBleGlzdGVuY2UuCgpJZiBDUkVBVEUtUEFSRU5ULURJUlMgaXMgdCwgdGhlbiB0 aGUgZGlyZWN0b3J5IGFuZCBpdHMgcGFyZW50CmRpcnMgd2lsbCBiZSBjcmVhdGVkIGluIGNhc2Ug dGhleSBhcmUgbm90IGZvdW5kLiIKICAoeGRnLWdldC11c2VyLWZpbGUgZmlsZW5hbWUgdXNlci1l bWFjcy1jYWNoZS1ob21lIGNyZWF0ZS1wYXJlbnQtZGlycykpCgoKKGRlZnVuIGxvY2F0ZS11c2Vy LWVtYWNzLWNvbmZpZy1maWxlIChmaWxlbmFtZSAmb3B0aW9uYWwgY3JlYXRlLXBhcmVudC1kaXJz KQogICJMb2NhdGUgYSBjb25maWcgZmlsZSBuYW1lZCBGSUxFTkFNRS4KClRoZSBmaWxlIG1heSBl eGlzdCBvciBub3QgdW5kZXIgdGhlIHVzZXIgRW1hY3MgY29uZmlnIGRpciAodW5kZXIKWERHLUNP TkZJRy1IT01FL2VtYWNzKS4gIFRoZSBwYXRoIG9mIHRoZSBmaWxlIGlzIHJldHVybmVkCnJlZ2Fy ZGxlc3Mgb2YgaXQncyBleGlzdGVuY2UuCgpJZiBDUkVBVEUtUEFSRU5ULURJUlMgaXMgdCwgdGhl biB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgcGFyZW50CmRpcnMgd2lsbCBiZSBjcmVhdGVkIGluIGNh c2UgdGhleSBhcmUgbm90IGZvdW5kLiIKICAoeGRnLWdldC11c2VyLWZpbGUgZmlsZW5hbWUgdXNl ci1lbWFjcy1jb25maWctaG9tZSBjcmVhdGUtcGFyZW50LWRpcnMpKQoKCihkZWZ1biBsb2NhdGUt dXNlci1lbWFjcy1kYXRhLWZpbGUgKGZpbGVuYW1lICZvcHRpb25hbCBjcmVhdGUtcGFyZW50LWRp cnMpCiAgIkxvY2F0ZSBhIGRhdGEgZmlsZSBuYW1lZCBGSUxFTkFNRS4KClRoZSBmaWxlIG1heSBl eGlzdCBvciBub3QgdW5kZXIgdGhlIHVzZXIgRW1hY3MgZGF0YSBkaXIgKHVuZGVyClhERy1EQVRB LUhPTUUvZW1hY3MpLiAgVGhlIHBhdGggb2YgdGhlIGZpbGUgaXMgcmV0dXJuZWQKcmVnYXJkbGVz cyBvZiBpdCdzIGV4aXN0ZW5jZS4KCklmIENSRUFURS1QQVJFTlQtRElSUyBpcyB0LCB0aGVuIHRo ZSBkaXJlY3RvcnkgYW5kIGl0cyBwYXJlbnQKZGlycyB3aWxsIGJlIGNyZWF0ZWQgaW4gY2FzZSB0 aGV5IGFyZSBub3QgZm91bmQuIgogICh4ZGctZ2V0LXVzZXItZmlsZSBmaWxlbmFtZSB1c2VyLWVt YWNzLWRhdGEtaG9tZSBjcmVhdGUtcGFyZW50LWRpcnMpKQoKCihkZWZ1biBsb2NhdGUtdXNlci1l bWFjcy1ydW50aW1lLWZpbGUgKGZpbGVuYW1lICZvcHRpb25hbCBjcmVhdGUtcGFyZW50LWRpcnMp CiAgIkxvY2F0ZSBhIHJ1bnRpbWUgZmlsZSBuYW1lZCBGSUxFTkFNRS4KClRoZSBmaWxlIG1heSBl eGlzdCBvciBub3QgdW5kZXIgdGhlIHVzZXIgRW1hY3MgcnVudGltZSBkaXIgKHVuZGVyClhERy1S VU5USU1FLURJUi9lbWFjcykuICBUaGUgcGF0aCBvZiB0aGUgZmlsZSBpcyByZXR1cm5lZApyZWdh cmRsZXNzIG9mIGl0J3MgZXhpc3RlbmNlLgoKSWYgQ1JFQVRFLVBBUkVOVC1ESVJTIGlzIHQsIHRo ZW4gdGhlIGRpcmVjdG9yeSBhbmQgaXRzIHBhcmVudApkaXJzIHdpbGwgYmUgY3JlYXRlZCBpbiBj YXNlIHRoZXkgYXJlIG5vdCBmb3VuZC4iCiAgKHhkZy1nZXQtdXNlci1maWxlIGZpbGVuYW1lIHVz ZXItZW1hY3MtcnVudGltZS1kaXIgY3JlYXRlLXBhcmVudC1kaXJzKSkKCgooZGVmdW4gbG9jYXRl LXVzZXItZG9jdW1lbnQtZmlsZSAoZmlsZW5hbWUpCiAgIkxvY2F0ZSBhIGRvY3VtZW50IGZpbGUg bmFtZWQgRklMRU5BTUUuCgpUaGUgZmlsZSBtYXkgZXhpc3Qgb3Igbm90IHVuZGVyIHRoZSB1c2Vy IEVtYWNzIGRvY3VtZW50cwpkaXIgKHdoaWNoIGlzIHByZWRldGVybWluZWQgYnkgdGhpcyBwYWNr YWdlIHVzaW5nIG9wZXJhdGluZwpzeXN0ZW0gdG9vbHMgb3IsIGlmIGZvdW5kIGxhY2tpbmcsIHNl bnNpYmxlIGRlZmF1bHRzKS4gIFRoZSBwYXRoCm9mIHRoZSBmaWxlIGlzIHJldHVybmVkIHJlZ2Fy ZGxlc3Mgb2YgaXQncyBleGlzdGVuY2UuCgpJZiBDUkVBVEUtUEFSRU5ULURJUlMgaXMgdCwgdGhl biB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgcGFyZW50CmRpcnMgd2lsbCBiZSBjcmVhdGVkIGluIGNh c2UgdGhleSBhcmUgbm90IGZvdW5kLiIKICAoZXhwYW5kLWZpbGUtbmFtZSBmaWxlbmFtZSB1c2Vy LWRvY3VtZW50cy1kaXJlY3RvcnkpKQoKCihwcm92aWRlICd4ZGctZGlyZWN0b3JpZXMpCjs7OyB4 ZGctZGlyZWN0b3JpZXMuZWwgZW5kcyBoZXJlCg== --001a1146ddec34d60f053bd866fe--