;ELC   
;;; Compiled
;;; in Emacs version 29.4
;;; with all optimizations.



(byte-code "\300\301!\210\300\302!\210\300\303!\207" [require wid-edit cl-lib eudc-vars] 2)
(defvar eudc-form-widget-list nil)
(defvar eudc-mode-map (define-keymap :parent widget-keymap "q" 'kill-current-buffer "x" 'kill-current-buffer "f" 'eudc-query-form "b" 'eudc-try-bbdb-insert "n" 'eudc-move-to-next-record "p" 'eudc-move-to-previous-record))
(defvar eudc-local-vars nil)
(defvar eudc-query-function nil)
(defvar eudc-list-attributes-function nil)
(defvar eudc-protocol-attributes-translation-alist nil)
(defvar eudc-bbdb-conversion-alist nil)
(defvar eudc-switch-to-server-hook nil)
(defvar eudc-switch-from-server-hook nil)
(defvar eudc-protocol-has-default-query-attributes nil)#@49 Return non-nil if BBDB version is 3 or greater.
(defalias 'eudc--using-bbdb-3-or-newer-p #[0 "\301\232\206 \302\303\304!@\"\207" [bbdb-version "@PACKAGE_VERSION@" version<= "3" split-string] 4 (#$ . 771)])#@88 Like `plist-member', but signal on invalid PLIST.

(fn PLIST PROP &optional PREDICATE)
(defalias 'eudc--plist-member #[770 "\300!\204 \301\302\300D\"\210\303#\207" [plistp signal wrong-type-argument plist-member] 7 (#$ . 985)])#@122 Return t if PROP has a value specified in PLIST.
Signal an error if PLIST is not a valid property list.

(fn PLIST PROP)
(defalias 'eudc-plist-member #[514 "\300\"\205 \301\207" [eudc--plist-member t] 5 (#$ . 1225)])#@396 Extract the value of PROP in property list PLIST.
PLIST is a list of the form (PROP1 VALUE1 PROP2 VALUE2...).
This function returns the first value corresponding to the given
PROP, or DEFAULT if PROP is not one of the properties in the
list.  The comparison with PROP is done using `eq'.  If PLIST is
not a valid property list, this function signals an error.

(fn PLIST PROP &optional DEFAULT)
(defalias 'eudc-plist-get #[770 "\300\"\211\203\f \211A@\207\207" [eudc--plist-member] 6 (#$ . 1451)])#@424 Extract the value of PROP from lax property list PLIST.
PLIST is a list of the form (PROP1 VALUE1 PROP2 VALUE2...), where
comparisons between properties are done using `equal' instead of
`eq'.  This function returns the first value corresponding to
PROP, or DEFAULT if PROP is not one of the properties in the
list.  If PLIST is not a valid property list, this function
signals an error.

(fn PLIST PROP &optional DEFAULT)
(defalias 'eudc-lax-plist-get #[770 "\300\301#\211\203 \211A@\207\207" [eudc--plist-member equal] 7 (#$ . 1958)])#@103 Replace all matches in STR for REGEXP with NEWTEXT.
Value is the new string.

(fn STR REGEXP NEWTEXT)
(defalias 'eudc-replace-in-string #[771 "\300\301\302\211\303#\211\262\203& \262\301\225\262OQ\262\202 \302OP\207" ["" 0 nil string-match] 11 (#$ . 2505)])#@72 Printable US-ASCII characters not including specials.  Used for atoms.
(defconst eudc-rfc5322-atext-token "[:alpha:][:digit:]!#$%&'*+/=?^_`{|}~-" (#$ . 2790))#@26 Non-folding white space.
(defconst eudc-rfc5322-wsp-token " 	" (#$ . 2954))#@22 Folding white space.
(defconst eudc-rfc5322-fwsp-token (concat eudc-rfc5322-wsp-token "\n") (#$ . 3035))#@63 Printable US-ASCII characters not including "(", ")", or "\".
(defconst eudc-rfc5322-cctext-token "]-~*-[!-'" (#$ . 3145))#@72 Quote STRING if it needs quoting as a phrase in a header.

(fn STRING)
(defalias 'eudc-rfc5322-quote-phrase #[257 "\302\303	\304R\"\203 \305\305Q\207\207" [eudc-rfc5322-wsp-token eudc-rfc5322-atext-token string-match "[^" "]" "\""] 6 (#$ . 3273)])#@66 Check if STRING can be used as comment in a header.

(fn STRING)
(defalias 'eudc-rfc5322-valid-comment-p #[257 "\302\303	\304R\"?\207" [eudc-rfc5322-cctext-token eudc-rfc5322-fwsp-token string-match "[^" "]"] 6 (#$ . 3530)])#@545 Create a valid address specification according to RFC5322.
RFC5322 address specifications are used in message header fields
to indicate senders and recipients of messages.  They generally
have one of the forms:

ADDRESS
ADDRESS (COMMENT)
PHRASE <ADDRESS>
PHRASE <ADDRESS> (COMMENT)

The arguments FIRSTNAME and NAME are combined to form PHRASE.
PHRASE is enclosed in double quotes if necessary.

COMMENT is omitted if it contains any symbols outside the
permitted set `eudc-rfc5322-cctext-token'.

(fn ADDRESS &optional FIRSTNAME NAME COMMENT)
(defalias 'eudc-rfc5322-make-address #[1025 "\205x \300\301\302\303$\266\204?\205x \205& \300\301\302\303$\266\204?\2057 \300\301\302\303$\266\204?\205N \300\301\302\303$\266\204?\205N \304!\204V \203i \305\306Q!\307!\310\n\311R\262\210\211\203u \312\313R\262\266\204\207" ["\\`[ 	\n]*\\'" nil string-match t eudc-rfc5322-valid-comment-p string-trim " " eudc-rfc5322-quote-phrase " <" ">" " (" ")"] 16 (#$ . 3763)])#@60 Return non-nil if VAR has server-local bindings.

(fn VAR)
(defalias 'eudc-server-local-variable-p #[257 "\300\301N\302\"\207" [eudc-plist-member eudc-locals server] 4 (#$ . 4769)])#@62 Return non-nil if VAR has protocol-local bindings.

(fn VAR)
(defalias 'eudc-protocol-local-variable-p #[257 "\300\301N\302\"\207" [eudc-plist-member eudc-locals protocol] 4 (#$ . 4957)])#@100 Set the EUDC default value of VAR to VAL.
The current binding of VAR is not changed.

(fn VAR VAL)
(defalias 'eudc-default-set #[514 "\301\302\303\302N\304##\210\235\203 \207B\211\207" [eudc-local-vars put eudc-locals plist-put default] 9 (#$ . 5152)])#@217 Set the PROTOCOL-local binding of VAR to VAL.
If omitted PROTOCOL defaults to the current value of `eudc-protocol'.
The current binding of VAR is changed only if PROTOCOL is omitted.

(fn VAR VAL &optional PROTOCOL)
(defalias 'eudc-protocol-set #[770 "\302!\303=\203 \304\211J\"\210\305N\306\307\"\310\206 #\262\310\307#\262\311\305#\210	\235\2039 	\210\202= 	B?\205E \312!\207" [eudc-protocol eudc-local-vars eudc-variable-default-value unbound eudc-default-set eudc-locals eudc-plist-get protocol plist-put put eudc-update-variable] 9 (#$ . 5422)])#@207 Set the SERVER-local binding of VAR to VAL.
If omitted SERVER defaults to the current value of `eudc-server'.
The current binding of VAR is changed only if SERVER is omitted.

(fn VAR VAL &optional SERVER)
(defalias 'eudc-server-set #[770 "\302!\303=\203 \304\211J\"\210\305N\306\307\"\310\206 #\262\310\307#\262\311\305#\210	\235\2039 	\210\202= 	B?\205E \312!\207" [eudc-server eudc-local-vars eudc-variable-default-value unbound eudc-default-set eudc-locals eudc-plist-get server plist-put put eudc-update-variable] 9 (#$ . 6001)])#@134 Set the most local (server, protocol or default) binding of VAR to VAL.
The current binding of VAR is also set to VAL.

(fn VAR VAL)
(defalias 'eudc-set #[514 "\300!\301=\204 \302\"\210\202% \303!\301=\204  \304\"\210\202% \305\"\210L\207" [eudc-variable-server-value unbound eudc-server-set eudc-variable-protocol-value eudc-protocol-set eudc-default-set] 5 (#$ . 6564)])#@97 Return the default binding of VAR.
Return `unbound' if VAR has no EUDC default value.

(fn VAR)
(defalias 'eudc-variable-default-value #[257 "\211\300N\301!\203 \211\203 \302\303\304#\207\304\207" [eudc-locals boundp eudc-plist-get default unbound] 6 (#$ . 6953)])#@167 Return the value of VAR local to PROTOCOL.
Return `unbound' if VAR has no value local to PROTOCOL.
PROTOCOL defaults to `eudc-protocol'.

(fn VAR &optional PROTOCOL)
(defalias 'eudc-variable-protocol-value #[513 "\301N\302\303!\203 \203 \304\305\"\204 \306\207\307\305\"\262\310\206$ \306#\207" [eudc-protocol eudc-locals nil boundp eudc-plist-member protocol unbound eudc-plist-get eudc-lax-plist-get] 8 (#$ . 7228)])#@157 Return the value of VAR local to SERVER.
Return `unbound' if VAR has no value local to SERVER.
SERVER defaults to `eudc-server'.

(fn VAR &optional SERVER)
(defalias 'eudc-variable-server-value #[513 "\301N\302\303!\203 \203 \304\305\"\204 \306\207\307\305\"\262\310\206$ \306#\207" [eudc-server eudc-locals nil boundp eudc-plist-member server unbound eudc-plist-get eudc-lax-plist-get] 8 (#$ . 7665)])#@247 Set the value of VAR according to its locals.
If the VAR has a server- or protocol-local value corresponding
to the current `eudc-server' and `eudc-protocol' then it is set
accordingly.  Otherwise it is set to its EUDC default binding.

(fn VAR)
(defalias 'eudc-update-variable #[257 "\300\301!\211\262\302=\204 L\207\303!\211\262\302=\204 L\207\304!\211\262\302=?\205. L\207" [nil eudc-variable-server-value unbound eudc-variable-protocol-value eudc-variable-default-value] 4 (#$ . 8086)])#@62 Update all EUDC variables according to their local settings.
(defalias 'eudc-update-local-variables #[0 "\301\302\"\207" [eudc-local-vars mapcar eudc-update-variable] 3 (#$ . 8596) nil])
(byte-code "\300\301\302\"\210\300\303\302\"\210\300\304\302\"\210\300\305\302\"\210\300\306\302\"\210\300\307\302\"\210\300\310\302\"\210\300\311\302\"\207" [eudc-default-set eudc-query-function nil eudc-list-attributes-function eudc-protocol-attributes-translation-alist eudc-bbdb-conversion-alist eudc-switch-to-server-hook eudc-switch-from-server-hook eudc-protocol-has-default-query-attributes eudc-attribute-display-method-alist] 3)#@65 Add PROTOCOL to the list of supported protocols.

(fn PROTOCOL)
(defalias 'eudc-register-protocol #[257 "\211>\204 \211B\302\303\304\305\306\307\310\311\"BBB#\210\211	>\206$ \211	B\211\207" [eudc-supported-protocols eudc-known-protocols put eudc-protocol custom-type choice :menu-tag "Protocol" mapcar #[257 "\300\301\302!E\207" [string :tag symbol-name] 5 "\n\n(fn S)"]] 10 (#$ . 9228)])#@371 Translate attribute names of QUERY.
The translation is done according to
`eudc-protocol-attributes-translation-alist'.

When REVERSE is nil or omitted, the attribute names are
translated from EUDC generic names to protocol-specific
names. When REVERSE is non-nil, the translation is from
protocol-specific names back to EUDC generic names.

(fn QUERY &optional REVERSE)
(defalias 'eudc-translate-query #[513 "\203\f \301\302\303\"\"\207\207" [eudc-protocol-attributes-translation-alist mapcar make-closure #[257 "\300\203 \302@	J\"\202 \211@	J\236\211\203% \300\203 \211@\202! \211AAB\207\207" [V0 eudc-protocol-attributes-translation-alist rassq] 4 "\n\n(fn ATTRIBUTE)"]] 6 (#$ . 9630)])#@376 Translate a list of attribute names LIST.
The translation is done according to
`eudc-protocol-attributes-translation-alist'.

When REVERSE is nil or omitted, the attribute names are
translated from EUDC generic names to protocol-specific
names. When REVERSE is non-nil, the translation is from
protocol-specific names back to EUDC generic names.

(fn LIST &optional REVERSE)
(defalias 'eudc-translate-attribute-list #[513 "\203 \301C\302\303\304#\"\207\207" [eudc-protocol-attributes-translation-alist nil mapcar make-closure #[257 "\300\301\203 \303\nJ\"\202 \nJ\236\240\210\300\242\203$ \301\203  \300\242@\207\300\242A\207\207" [V0 V1 eudc-protocol-attributes-translation-alist rassq] 5 "\n\n(fn ATTRIBUTE)"]] 8 (#$ . 10335)])#@121 Choose one from CHOICES using a completion.
BEG and END delimit the text which is to be replaced.

(fn CHOICES BEG END)
(defalias 'eudc-select #[771 "\300\301\302\303\304\"\"\262|\210\211c\207" [nil completing-read "Multiple matches found; choose one: " mapcar list] 9 (#$ . 11081)])#@423 Query the current directory server with QUERY.
QUERY is a list of cons cells (ATTR . VALUE) where ATTR is an attribute
name and VALUE the corresponding value.
If NO-TRANSLATION is non-nil, ATTR is translated according to
`eudc-protocol-attributes-translation-alist'.
RETURN-ATTRIBUTES is a list of attributes to return defaulting to
`eudc-default-return-attributes'.

(fn QUERY &optional RETURN-ATTRIBUTES NO-TRANSLATION)
(defalias 'eudc-query #[769 "\204 \302\303!\210\211\203 \206 	\"\207\304!\203# \305!\202/ 	<\203. \305	!\202/ 	\"\207" [eudc-query-function eudc-default-return-attributes error "Don't know how to perform the query" eudc-translate-query eudc-translate-attribute-list] 7 (#$ . 11376)])#@255 Format a directory attribute name for display.
ATTRIBUTE is looked up in `eudc-user-attribute-names-alist' and replaced
by the corresponding user name if any.  Otherwise it is capitalized and
underscore characters are replaced by spaces.

(fn ATTRIBUTE)
(defalias 'eudc-format-attribute-name-for-display #[257 "\211\236\211\203\n \211A\207\301\302\303\304\305!\306\"\307#!\207" [eudc-user-attribute-names-alist capitalize mapconcat identity split-string symbol-name "_" " "] 8 (#$ . 12099)])#@246 Insert the value of the directory FIELD at point.
The directory attribute name in car of FIELD is looked up in
`eudc-attribute-display-method-alist' and the corresponding method,
if any, is called to print the value in cdr of FIELD.

(fn FIELD)
(defalias 'eudc-print-attribute-value #[257 "\301@\227\"iA\203 A!\210\302c\207\303\304\305\"<\203# \2029 ;\203/ \306\302\"\2029 \2047 \307\2029 C\"\207" [eudc-attribute-display-method-alist assoc "\n" mapc make-closure #[257 "\300j\210\211\301\261\207" [V0 "\n"] 3 "\n\n(fn VAL-ELEM)"] split-string ("")] 9 (#$ . 12600)])#@213 Print the record field FIELD.
FIELD is a list (ATTR VALUE1 VALUE2 ...) or cons-cell (ATTR . VAL)
COLUMN-WIDTH is the width of the first display column containing the
attribute name ATTR.

(fn FIELD COLUMN-WIDTH)
(defalias 'eudc-print-record-field #[514 "`\300\301\302!\303Q@\"c\210\304`\305\306$\210\307\\j\210\310!\207" [format "%" int-to-string "s: " put-text-property face bold 2 eudc-print-attribute-value] 8 (#$ . 13188)])#@240 Display the record list RECORDS in a formatted buffer.
If RAW-ATTR-NAMES is non-nil, the raw attribute names are displayed
otherwise they are formatted according to `eudc-user-attribute-names-alist'.

(fn RECORDS &optional RAW-ATTR-NAMES)
(defalias 'eudc-display-records #[513 "C\306\211\307C\306C\306\211C	r\310\311!q\210p\312 \210\306\211\313\211\313\314 \210\315\316!+\210\211&r&q\210\313\211\314 \210\317c\210\320c\210\242\204X \321'\203Q \322\202R \323\261\210\202x \324\325\326	$\n\242\"\262`\262\327\325\330	$\"\210\331c\210\332\333\334\335\336$\210\337\340!\210\332\333\334\341\342$\210\343 \210\344 \210\205\231 b)\345!)\210\266\202)\207" [inhibit-read-only default-directory buffer-read-only buffer-file-name buffer-undo-list inhibit-modification-hooks nil 0 get-buffer-create "*Directory Query Results*" kill-all-local-variables t erase-buffer run-hooks temp-buffer-setup-hook "Directory Query Result\n" "======================\n\n\n" "No match found.\n" "Try setting `eudc-strict-return-matches' to nil or change `eudc-default-return-attributes'.\n" "" mapcar make-closure #[257 "\303\304\305\300\301\302$\"\207" [V0 V1 V2 mapcar make-closure #[257 "\300\302\203\f \303@!\202 \304@!\240\210\300\242G\301\242V\203! \301\300\242G\240\210\300\242AB\207" [V0 V1 V2 symbol-name eudc-format-attribute-name-for-display] 4 "\n\n(fn FIELD)"]] 7 "\n\n(fn RECORD)"] mapc #[257 "\300`\240\210\303\304\305\301\"\"\210\306\307\300\242`\"\310\302\242@#\210\302\211\242A\240\210\311c\207" [V0 V1 V2 mapc make-closure #[257 "\301\300\242\"\207" [V0 eudc-print-record-field] 4 "\n\n(fn FIELD)"] overlay-put make-overlay eudc-record "\n"] 5 "\n\n(fn RECORD)"] "\n" widget-create push-button :notify #[128 "\300 \207" [eudc-query-form] 2 "\n\n(fn &rest IGNORE)"] "New query" widget-insert " " #[128 "\300 \207" [kill-this-buffer] 2 "\n\n(fn &rest IGNORE)"] "Quit" eudc-mode widget-setup internal-temp-output-buffer-show standard-output eudc-strict-return-matches] 18 (#$ . 13627)])#@67 Process the query form in current buffer and display the results.
(defalias 'eudc-process-form #[0 "\302C\302C\303\300!\203 \204 \304\305!\207\306\307\310#\"\210\311p!\210\312\313\242!	\"\207" [eudc-form-widget-list eudc-use-raw-directory-names nil boundp error "Not in a directory query form buffer" mapc make-closure #[257 "\300\302A!\240\210\300\242\303\230?\205 \301@\300\242B\301\242B\240\207" [V0 V1 widget-value ""] 4 "\n\n(fn WID-FIELD)"] kill-buffer eudc-display-records eudc-query] 7 (#$ . 15648)])#@85 Filter RECORD according to `eudc-duplicate-attribute-handling-method'.

(fn RECORD)
(defalias 'eudc-filter-duplicate-attributes #[257 "\211\300C\300C\300C\203 @A<\204 A\262\202 @A\204\" C\207\301\302\303#\"\210\211\242C\240\210\301\302\304\"\242\"\210\211\242\207" [nil mapc make-closure #[257 "\211A<\203 \300\300\242B\240\207\301\301\242B\240\207" [V0 V1] 4 "\n\n(fn FIELD)"] #[257 "	:\203 \303@\nJ\"@\206 \211@	\236A\202 	\211\203\" \211\304=\203* \300\305\300\242\"\240\207\211\306\267\202V \300\305@A@B\300\242\"\240\207\300\305@\307\310A\311#B\300\242\"\240\207\300\312\300\242\"\240\207\211\203` \211\304=\205g \300\305\300\242\"\240\207" [V0 eudc-duplicate-attribute-handling-method eudc-protocol-attributes-translation-alist rassq list eudc-add-field-to-records #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (first 48 concat 61 duplicate 78)) mapconcat identity "\n" eudc-distribute-field-on-records] 9 "\n\n(fn FIELD)"]] 10 (#$ . 16172)])#@83 Eliminate records that do not contain all ATTRS from RECORDS.

(fn RECORDS ATTRS)
(defalias 'eudc-filter-partial-records #[514 "\300\301\302\303\304\"\"\"\207" [delq nil mapcar make-closure #[257 "\301\302\303\"\300\"\205 \211\207" [V0 cl-every make-closure #[257 "\211\300\236:\207" [V0] 3 "\n\n(fn ATTR)"]] 5 "\n\n(fn REC)"]] 8 (#$ . 17197)])#@99 Add FIELD to each individual record in RECORDS and return the resulting list.

(fn FIELD RECORDS)
(defalias 'eudc-add-field-to-records #[514 "\300\301\302\"\"\207" [mapcar make-closure #[257 "\300B\207" [V0] 3 "\n\n(fn R)"]] 6 (#$ . 17551)])#@164 Duplicate each individual record in RECORDS according to value of FIELD.
Each copy is added a new field containing one of the values of FIELD.

(fn FIELD RECORDS)
(defalias 'eudc-distribute-field-on-records #[514 "\300\301A!\211\203 \211@\302@B\"\244\262A\266\202\202 \210\207" [nil delete-dups eudc-add-field-to-records] 8 (#$ . 17802)])
(defvar eudc-mode-hook nil)
(byte-code "\300\301N\204\f \302\300\301\303#\210\304\305!\204 \302\305\306\307#\210\300\207" [eudc-mode-hook variable-documentation put "Hook run after entering EUDC mode.\nNo problems result if this variable is not bound.\n`add-hook' automatically binds it.  (This is true for all hook variables.)" boundp eudc-mode-map definition-name eudc-mode] 4)
(defvar eudc-mode-map (make-sparse-keymap))
(byte-code "\301\302N\204 \303\301\302\304\305!#\210\306\307!\204* \303\307\310\311#\210\312\307\306\307!\203& \313\202( \314 \"\210\307\302N\2048 \303\307\302\304\315!#\210\306\300!\204X \303\300\310\311#\210\312\300\306\300!\203P \313\202V \316\300\313\"\210\"\210\300\302N\204f \303\300\302\304\317!#\210\303\311\320\321#\207" [eudc-mode-abbrev-table eudc-mode-map variable-documentation put purecopy "Keymap for `eudc-mode'." boundp eudc-mode-syntax-table definition-name eudc-mode defvar-1 nil make-syntax-table "Syntax table for `eudc-mode'." define-abbrev-table "Abbrev table for `eudc-mode'." derived-mode-parent special-mode] 5)#@634 Major mode used in buffers displaying the results of directory queries.
There is no sense in calling this command from a buffer other than
one containing the results of a directory query.

These are the special commands of EUDC mode:
    q -- Kill this buffer.
    f -- Display a form to query the current directory server.
    n -- Move to next record.
    p -- Move to previous record.
    b -- Insert record at point into the BBDB database.

In addition to any hooks its parent mode `special-mode' might have
run, this mode runs the hook `eudc-mode-hook', as the final or
penultimate step during initialization.

\{eudc-mode-map}
(defalias 'eudc-mode #[0 "\306\300!\210\307\310 \210\311\312\310\313N\203 \314\311\313\310\313N#\210\315!\204' \316\317 \"\210\320\f!\211\2035 \211\321 =\203; \322\f\323 \"\210\210\324\325\"\204R !=\204R \326\325!C#\210\327!\210\330\f!\210!\331\332\333\334#\210\335\332\334\336 $)\210\337\340!\207" [delay-mode-hooks major-mode mode-name eudc-mode-map eudc-mode-syntax-table eudc-mode-abbrev-table make-local-variable t special-mode eudc-mode "EUDC" mode-class put keymap-parent set-keymap-parent current-local-map char-table-parent standard-syntax-table set-char-table-parent syntax-table abbrev-table-get :parents abbrev-table-put use-local-map set-syntax-table defvar-1 eudc-emacs-menu nil "" easy-menu-do-define eudc-menu run-mode-hooks eudc-mode-hook local-abbrev-table] 5 (#$ . 19221) nil])#@29 Customize the EUDC package.
(defalias 'eudc-customize #[0 "\300\301!\207" [customize-group eudc] 2 (#$ . 20671) nil])#@182 Set the directory server to SERVER using PROTOCOL.
Unless NO-SAVE is non-nil, the server is saved as the default
server for future sessions.

(fn SERVER PROTOCOL &optional NO-SAVE)
(defalias 'eudc-set-server #[770 "\203 \235\204 \304\305\306!P\307\"\204 \310\311\"\210\312\313!\210\314 \210\312\315!\210\316\317!\2035 \320\321\n	#\210\211?\205A ?\205A \322 \207" [eudc-supported-protocols eudc-protocol eudc-server eudc-ignore-options-file load "eudcb-" symbol-name t error "Unsupported protocol: %s" run-hooks eudc-switch-from-server-hook eudc-update-local-variables eudc-switch-to-server-hook called-interactively-p interactive message "Current directory server is now %s (%s)" eudc-save-options] 7 (#$ . 20795) (byte-code "\301\302!\303\304\305\306\307\"\"!D\207" [eudc-known-protocols read-from-minibuffer "Directory Server: " intern completing-read "Protocol: " mapcar #[257 "\300!B\207" [symbol-name] 3 "\n\n(fn ELT)"]] 7)])#@138 Get the email field of NAME from the directory server.
If ERROR is non-nil, report an error if there is none.

(fn NAME &optional ERROR)
(defalias 'eudc-get-email #[513 "\204 \301\302!\210\303\304BC\305\"\306A\204 @@A\262\202\" \307\310!\210\2035 \211\2030 \311\312\"\210\207\307\313\"\210\207" [eudc-server call-interactively eudc-set-server eudc-query name (email) nil error "Multiple match--use the query form" message "%s" "No record matching %s"] 7 (#$ . 21748) "sSurname: \np"])#@138 Get the phone field of NAME from the directory server.
If ERROR is non-nil, report an error if there is none.

(fn NAME &optional ERROR)
(defalias 'eudc-get-phone #[513 "\204 \301\302!\210\303\304BC\305\"\306A\204 @@A\262\202\" \307\310!\210\2035 \211\2030 \311\312\"\210\207\307\313\"\210\207" [eudc-server call-interactively eudc-set-server eudc-query name (phone) nil error "Multiple match--use the query form" message "%s" "No record matching %s"] 7 (#$ . 22249) "sSurname: \np"])#@170 Return a list of valid attributes for the current server.
When called interactively the list is formatted in a dedicated buffer
otherwise a list of symbols is returned.
(defalias 'eudc-get-attribute-list #[0 "\203 \302\303!!\211\205 \302\303!\203 \304\305\"\207\211\207\306\307	\"\207" [eudc-list-attributes-function eudc-protocol called-interactively-p interactive eudc-display-records t error "The %s protocol has no support for listing attributes"] 4 (#$ . 22750) nil])#@65 Use FORMAT to build a EUDC query from WORDS.

(fn WORDS FORMAT)
(defalias 'eudc-format-query #[514 "\301\211\211\211\211\203Y \203( \203( @@BB\262A\262A\262\202	 \203W @@\262@A\262\236\262\211\203J \211A\302Q\241\210\202P @B\262A\262\202( \207\203d \303\304\302#\207\305\303\304	\302#BC\207" [eudc-protocol-has-default-query-attributes nil " " mapconcat identity name] 12 (#$ . 23234)])#@104 Extract a list of N-long formats from FORMAT-LIST.
If none try N - 1 and so forth.

(fn FORMAT-LIST N)
(defalias 'eudc-extract-n-word-formats #[514 "\211C\300\211\204% \242\301V\203% \302\300\303\304\305\"\"\"\262\211\242S\240\210\202 \207" [nil 0 delq mapcar make-closure #[257 "\300\242GU\205	 \211\207" [V0] 3 "\n\n(fn FORMAT)"]] 10 (#$ . 23661)])#@293 Wrap `eudc-expand-inline' with a prefix argument.
If TRY-ALL-SERVERS -- the prefix argument when called
interactively -- is non-nil, collect results from all servers.
If TRY-ALL-SERVERS is nil, do not try subsequent servers after
one server returns any match.

(fn &optional TRY-ALL-SERVERS)
(defalias 'eudc-expand-try-all #[256 "\301?\"\207" [eudc-expansion-save-query-as-kill eudc-expand-inline] 4 (#$ . 24027) "P"])#@875 Query the directory server, and expand the query string before point.
The query string consists of the buffer substring from the point back to
the preceding comma, colon or beginning of line.
The variable `eudc-inline-query-format' controls how to associate the
individual inline query words with directory attribute names.
After querying the server for the given string, the expansion specified by
`eudc-inline-expansion-format' is inserted in the buffer at point.
If SAVE-QUERY-AS-KILL is non-nil, then save the pre-expansion
text to the kill ring.  `eudc-expansion-save-query-as-kill' being
non-nil inverts the meaning of SAVE-QUERY-AS-KILL.
Multiple servers can be tried with the same query until one finds a match,
see `eudc-inline-expansion-servers'.  If TRY-ALL-SERVERS is
non-nil, collect results from all servers.

(fn &optional SAVE-QUERY-AS-KILL TRY-ALL-SERVERS)
(defalias 'eudc-expand-inline #[512 "`\212\302\303\304 \305#\203 \306\225b\210`)\307\310\"\311\"\312\"\211\204$ \313\314!\207\203, \2034 \2049 \2039 \315\"\210\211G\316U\204J 	\203J 	\317=\203R |\210\211@c\207	\320\267\202n \321#\207|\210\322\323\324#c\207\313\325!\207\211G\316U\204 	\203 	\317=\205\206 |\210\211@c\207" [eudc-expansion-save-query-as-kill eudc-multiple-match-handling-method re-search-backward "\\([:,]\\|^\\)[ 	]*" line-beginning-position move 0 split-string buffer-substring-no-properties "[ 	]+" eudc-query-with-words error "No match" kill-ring-save 1 first #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (select 88 all 95 abort 106)) eudc-select mapconcat identity ", " "There is more than one match for the query"] 10 (#$ . 24454) nil])#@90 Format a query result according to `eudc-inline-expansion-format'.

(fn RES QUERY-ATTRS)
(defalias 'eudc-format-inline-expansion-result #[514 ":\203 \301\302\303@\304\305\306\"\307A!\"#!\207\310!\203\200 \3118\236A!\211\203y \211<\203y \211@A@\205K ;\205K \312\313\314\315$\266\204?\205g ;\205g \312\313\314\315$\266\204?\205g \316!\317\313\205q \205w $\207\320\321!\266\313\207\211@\236AA@\236A\3118\236A\317#\207" [eudc-inline-expansion-format string-trim apply format mapcar make-closure #[257 "\211\300\236A\206 \301\207" [V0 ""] 3 "\n\n(fn FIELD)"] eudc-translate-attribute-list functionp 2 "\\`[ 	\n]*\\'" nil string-match t eudc-rfc5322-valid-comment-p eudc-rfc5322-make-address error "Error: the function referenced by `eudc-inline-expansion-format' is expected to return a list."] 16 (#$ . 26155)])#@606 Query the directory server, and return the matching responses.
The variable `eudc-inline-query-format' controls how to associate the
individual QUERY-WORDS with directory attribute names.
After querying the server for the given string, the expansion
specified by `eudc-inline-expansion-format' is applied to the
matches before returning them.
Multiple servers can be tried with the same query until one finds a match,
see `eudc-inline-expansion-servers'.   When TRY-ALL-SERVERS is non-nil,
keep collecting results from subsequent servers after the first match.

(fn QUERY-WORDS &optional TRY-ALL-SERVERS)
(defalias 'eudc-query-with-words #[513 "\306\267\202+ 	\2040 \307\310!\210\2020 	\2040 \n\2040 \307\310!\210\2020 \n\2040 \311\312!\210\2020 \311\313\"\210\314\211C	\315\267\202] \n\202^ 	\203R 	B\316	B\317\n!\"B\202^ \n\202^ 	BC\202^ \314\f\203p \211G\fV\203p \fS\233\314\241\210\320\321#\216\322\3232\276 \211\205\273 \211@\310@A\324#\210\325G\"\206\232 ?\205\232 \326\262\203\264 \n\n	$\210A\262\202\234 A\266\202\202| \2620\210\242)\207" [eudc-inline-expansion-servers eudc-server eudc-server-hotlist eudc-protocol eudc-max-servers-to-query eudc-inline-query-format #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (current-server 6 server-then-hotlist 17 hotlist 32)) call-interactively eudc-set-server error "No server in the hotlist" "Wrong value for `eudc-inline-expansion-servers': %S" nil #s(hash-table size 3 test eq rehash-size 1.5 rehash-threshold 0.8125 purecopy t data (hotlist 59 server-then-hotlist 63 current-server 86)) delete copy-sequence make-closure #[0 "\n\301\232\203\f \300\232\206 \304\301\300\305#\207" [V0 V1 eudc-server eudc-protocol eudc-set-server t] 4] #[1028 "\301:\203 A\202\f \302!\303\304@\"\"\211\205R \211\211\203H \211@\305\"\211\203@ \242\235\2039 \242\202> \242B\240\210\210A\266\202\202 \210?\205R \306\307\310\"\207" [eudc-inline-expansion-format eudc-translate-attribute-list (firstname name email) eudc-query eudc-format-query eudc-format-inline-expansion-result throw found nil] 12 "\n\n(fn QUERY-WORDS TRY-ALL-SERVERS RESPONSE-STRINGS QUERY-FORMATS)"] found t eudc-extract-n-word-formats (name) eudc-protocol-has-default-query-attributes] 15 (#$ . 27015)])#@235 Display a form to query the directory server.
If given a non-nil argument GET-FIELDS-FROM-SERVER, the function first
queries the server for the existing fields and displays a corresponding form.

(fn &optional GET-FIELDS-FROM-SERVER)
(defalias 'eudc-query-form #[256 "\211\203	 \306 \206\n \307\310!\311C\311C\312C\311\313!\210\314\315\316\317\314#\210\320 \210\321 \210\322\316\317\311\314$\210\323 \210\324\305!\210\325\326!\210\325\327!\210\325\330\n\206G \331\332!\210\n\333#\210\325\334\335!\333#\210\f\203a \336\335\337	!\"\202f \336\340\"\240\210\341\342\343\"\242\"\210\325\344\345\346\347\242!\350Q\242@\"\"\210`\262\351\352\353\354#\240\210@\242BBA\262\211\242A\240\210\341\342\355$\"\210\325\344!\210\351\356\357\360\361$\210\325\362!\210\351\356\357\363\364$\210\325\362!\210\351\356\357\365\366$\210\211b\210\3679!\210\370 )\207" [eudc-query-form-attributes inhibit-read-only eudc-server eudc-protocol eudc-use-raw-directory-names eudc-form-widget-list eudc-get-attribute-list get-buffer-create "*Directory Query Form*" nil 0 switch-to-buffer t remove-hook after-change-functions widget-after-change delete-all-overlays erase-buffer add-hook kill-all-local-variables make-local-variable widget-insert "Directory Query Form\n" "====================\n\n" "Current server is: " call-interactively eudc-set-server "\n" "Protocol         : " symbol-name mapcar eudc-translate-attribute-list #[257 "\211\236A\206\f \301\302!!\207" [eudc-user-attribute-names-alist capitalize symbol-name] 4 "\n\n(fn FIELD)"] mapc make-closure #[257 "\211G\300\242V\205\f \300G\240\207" [V0] 3 "\n\n(fn PROMPT)"] "\n\n" format "%" int-to-string "s: " widget-create editable-field :size 15 #[257 "\304\305\306\307\310\300\242!\311Q\302\242@\"\"\210\301\312\313\314\315#\240\210\211\301\242BB\302\211\242A\240\207" [V0 V1 V2 eudc-form-widget-list widget-insert "\n\n" format "%" int-to-string "s: " widget-create editable-field :size 15] 7 "\n\n(fn FIELD)"] push-button :notify #[128 "\300 \207" [eudc-process-form] 2 "\n\n(fn &rest IGNORE)"] "Query Server" " " #[128 "\300 \207" [eudc-query-form] 2 "\n\n(fn &rest IGNORE)"] "Reset Form" #[128 "\300 \207" [kill-this-buffer] 2 "\n\n(fn &rest IGNORE)"] "Quit" use-local-map widget-setup widget-keymap] 13 (#$ . 29324) "P"])#@80 Add SERVER using PROTOCOL to the EUDC `servers' hotlist.

(fn SERVER PROTOCOL)
(defalias 'eudc-bookmark-server #[514 "B\235\203 \302\303#\207BB\304 \210	\203! \305\306#\207\307 \207" [eudc-server-hotlist eudc-ignore-options-file error "%s:%s is already in the hotlist" eudc-install-menu warn "Not saving bookmark due to `eudc-ignore-options-file' customization. Instead, customize `eudc-server-hotlist' to include %s:%s" eudc-save-options] 6 (#$ . 31625) "sDirectory server: \nsProtocol: "])#@51 Add current server to the EUDC `servers' hotlist.
(defalias 'eudc-bookmark-current-server #[0 "\302	\"\207" [eudc-server eudc-protocol eudc-bookmark-server] 3 (#$ . 32134) nil])#@38 Save options to `eudc-options-file'.
(defalias 'eudc-save-options #[0 "\203 \306\307!\210r\310	\311\"q\210eb\210p\312\211\211\3132\220 \3141' \315p!0\202, \210\316\313\312\"\211<\203{ \211@\317=\203F \212\320 \210`)`|\266\311\202 \211@\321=\203e \211A@\305=\203e \212\320 \210`)`|\210\311\262\210\202 \211@\322=\203w \211A@\323\232\203\214 \311\262\210\202 \203\214 \203\214 \203\214 \316\313\311\"\210\210\202 \210ed=\203\233 \324\325!\210\204\243 \324\326!\210n\204\253 \324\327!\210\330 \210\324\331!\210\332!\210\324\333!\210\332\f!\210\324\334!\210\324\335!\210\332!\210\324\336!\210\337 )\266\204)\207" [eudc-ignore-options-file eudc-options-file standard-output eudc-server eudc-protocol eudc-server-hotlist error "EUDC is configured to ignore the deprecated options file; see `eudc-ignore-options-file'" find-file-noselect t nil found (end-of-file) read throw eudc-set-server backward-sexp setq provide 'eudc-options-file princ ";; This file was automatically generated by eudc.el.\n\n" "(provide 'eudc-options-file)\n" "\n" delete-blank-lines "(eudc-set-server " prin1 " '" " t)\n" "(setq eudc-server-hotlist '" ")\n" save-buffer] 8 (#$ . 32318) nil])#@70 Move to next record, in a buffer displaying directory query results.
(defalias 'eudc-move-to-next-record #[0 "\300\301!\204\n \302\303!\207\304`!\211dW\203 \211Tb\207\302\305!\207" [derived-mode-p eudc-mode error "Not in a EUDC buffer" next-overlay-change "No more records after point"] 3 (#$ . 33501) nil])#@74 Move to previous record, in a buffer displaying directory query results.
(defalias 'eudc-move-to-previous-record #[0 "\300\301!\204\n \302\303!\207\304`!\211eV\203 \211b\207\302\305!\207" [derived-mode-p eudc-mode error "Not in a EUDC buffer" previous-overlay-change "No more records before point"] 3 (#$ . 33815) nil])
(defconst eudc-custom-generated-menu (byte-code "\300\301!A\207" [custom-menu-create eudc] 2))
(defconst eudc-tail-menu (byte-code "\301\302\303\304\305\306\307\310\311\312\313\314B\257\f\207" [eudc-custom-generated-menu ["---" nil nil] ["Query with Form" eudc-query-form :help "Display a form to query the directory server"] ["Expand Inline Query Trying All Servers" eudc-expand-try-all :help "Query all directory servers and expand the query string before point"] ["Expand Inline Query" eudc-expand-inline :help "Query the directory server, and expand the query string before point"] ["Insert Record into BBDB" eudc-insert-record-at-point-into-bbdb (and (or (featurep 'bbdb) (prog1 (locate-library "bbdb") (message #1=""))) (overlays-at (point)) (overlay-get (car (overlays-at (point))) 'eudc-record)) :help "Insert record at point into the BBDB database"] ["Insert All Records into BBDB" eudc-batch-export-records-to-bbdb (and (derived-mode-p 'eudc-mode) (or (featurep 'bbdb) (prog1 (locate-library "bbdb") (message #1#)))) :help "Insert all the records returned by a directory query into BBDB"] ["---" nil nil] ["Get Email" eudc-get-email :help "Get the email field of NAME from the directory server"] ["Get Phone" eudc-get-phone :help "Get the phone field of name from the directory server"] ["List Valid Attribute Names" eudc-get-attribute-list :help "Return a list of valid attributes for the current server"] ["---" nil nil] "Customize"] 13))
(defconst eudc-server-menu '(["---" nil nil] ["Bookmark Current Server" eudc-bookmark-current-server :help "Add current server to the EUDC `servers' hotlist"] ["Edit Server List" eudc-edit-hotlist :help "Edit the hotlist of directory servers in a specialized buffer"] ["New Server" eudc-set-server :help "Set the directory server to SERVER using PROTOCOL"]))#@28 Return easy menu for EUDC.
(defalias 'eudc-menu #[0 "\303C\304\305\304\306\307\310\311\"\"	#C\n#\207" [eudc-server-hotlist eudc-server-menu eudc-tail-menu nil append ("Directory Servers") ("Server") mapcar make-closure #[257 "\211@A\301!\300\302\303\304R!\240\210\305\300\242!\204# \300\242\306\307$M\210\310\311\312#\300\242\313\314\315\316\317\nE&\207" [V0 symbol-name intern "eudc-set-server-" "-" fboundp make-closure #[0 "\303\302\301\"\210\304\305\302\300#\207" [V0 V1 V2 eudc-set-server message "Selected directory server is now %s (%s)"] 4 nil nil] vector format "%s (%s)" :style radio :selected equal eudc-server] 13 "\n\n(fn SERVSPEC)"]] 9 (#$ . 35952)])#@20 Install EUDC menu.
(defalias 'eudc-install-menu #[0 "\301\302\303\304\303\305 A\"B#\207" [global-map define-key [menu-bar tools directory-search] "Directory Servers" easy-menu-create-menu eudc-menu] 7 (#$ . 36637)])
(byte-code "\303!	\204 \211\203 \304\305!\210\306\300!\204 \n\204 \307!\210\210\306\310!\204' \311 \210\303\207" [eudc-options-file noninteractive eudc-ignore-options-file locate-library message "" featurep load infodock eudc-install-menu] 3)#@105 Load the Emacs Unified Directory Client.
This does nothing except loading eudc by autoload side-effect.
(defalias 'eudc-load-eudc #[0 "\300\207" [nil] 1 (#$ . 37109) nil])
(defvar eudc-tools-menu (byte-code "\301\302!\303\304\305\306\307!\310\311\306\312!\257#\210\303\313\305\306\314!\315\311\306\316!\257#\210\303\317#\210\303\320\305\306\321!\322\311\306\323!\257#\210\303\324\305\306\325!\326\311\306\327!\257#\210\303\330#\210\303\331\305\306\332!\333\311\306\334!\257#\210\303\335\305\306\336!\337\311\306\340!\257#\210\207" [menu-bar-separator make-sparse-keymap "Directory Servers" define-key [phone] menu-item purecopy "Get Phone" eudc-get-phone :help "Get the phone field of name from the directory server" [email] "Get Email" eudc-get-email "Get the email field of NAME from the directory server" [separator-eudc-email] [expand-inline] "Expand Inline Query" eudc-expand-inline "Query the directory server, and expand the query string before point" [query] "Query with Form" eudc-query-form "Display a form to query the directory server" [separator-eudc-query] [new] "New Server" eudc-set-server "Set the directory server to SERVER using PROTOCOL" [load] "Load Hotlist of Servers" eudc-load-eudc "Load the Emacs Unified Directory Client"] 10))
(byte-code "\300\211JM\210\301\302!\207" [eudc-tools-menu provide eudc] 2)
