nix-archive-1(type directoryentry(namebinnode(type directoryentry(nameldnode(typeregular executablecontentsÎ1#!/gnu/store/3waxsn2s4wvin7npxaf61s5msgk6ndpw-bootstrap-binaries-0/bin/bash # -*- mode: scheme; coding: utf-8; -*- # XXX: We have to go through Bash because there's no Guile command-line switch to # ignore the various Guile load path related environment variables. # Unset 'GUILE_LOAD_PATH' to make sure we do not stumble upon # incompatible Guile files (see # ). unset GUILE_LOAD_PATH unset GUILE_LOAD_COMPILED_PATH unset GUILE_SYSTEM_PATH unset GUILE_SYSTEM_COMPILED_PATH # Use `load-compiled' because `load' (and `-l') doesn't otherwise load our # .go file, or causes extraneous `stat' system calls when the "-C" "/" arguments # are provided. main="(@ (gnu build-support ld-wrapper) ld-wrapper)" exec /gnu/store/xgh7vihih6il19pid5yx185x7r2mibdz-guile-bootstrap-2.0/bin/guile -c "(load-compiled \"/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ld.go\") ($main (command-line))" "$@" !# ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020 Ludovic Courtès ;;; Copyright © 2020 Marius Bakke ;;; Copyright © 2024 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu build-support ld-wrapper) #:use-module (srfi srfi-1) #:use-module (ice-9 match) #:autoload (ice-9 rdelim) (read-delimited) #:export (ld-wrapper)) ;;; Commentary: ;;; ;;; This is a wrapper for the linker. Its purpose is to inspect the -L and ;;; -l switches passed to the linker, add corresponding -rpath arguments, and ;;; invoke the actual linker with this new set of arguments. ;;; ;;; The alternatives to this hack would be: ;;; ;;; 1. Using $LD_RUN_PATH. However, that would tend to include more than ;;; needed in the RPATH; for instance, given a package with `libfoo' as ;;; an input, all its binaries would have libfoo in their RPATH, ;;; regardless of whether they actually NEED it. ;;; ;;; 2. Use a GCC "lib" spec string such as `%{L*:-rpath %*}', which adds a ;;; `-rpath LIBDIR' argument for each occurrence of `-L LIBDIR'. ;;; However, this doesn't work when $LIBRARY_PATH is used, because the ;;; additional `-L' switches are not matched by the above rule, because ;;; the rule only matches explicit user-provided switches. See ;;; for details. ;;; ;;; As a bonus, this wrapper checks for "impurities"--i.e., references to ;;; libraries outside the store. ;;; ;;; Code: (define %real-ld ;; Name of the linker that we wrap. "/gnu/store/03i3civrmcfpc0212jdir7hvgz776iv1-binutils-2.41/bin/ld") (define %store-directory ;; File name of the store. (or (getenv "NIX_STORE") "/gnu/store")) (define %temporary-directory ;; Temporary directory. (or (getenv "TMPDIR") "/tmp")) (define %build-directory ;; Top build directory when run from a builder. (getenv "NIX_BUILD_TOP")) (define %allow-impurities? ;; Whether to allow references to libraries outside the store. ;; Allow them by default for convenience. (let ((value (getenv "GUIX_LD_WRAPPER_ALLOW_IMPURITIES"))) (or (not value) (let ((value (string-downcase value))) (cond ((member value '("yes" "y" "t" "true" "1")) #t) ((member value '("no" "n" "f" "false" "0")) #f) (else (format (current-error-port) "ld-wrapper: ~s: invalid value for \ 'GUIX_LD_WRAPPER_ALLOW_IMPURITIES'~%" value))))))) (define %debug? ;; Whether to emit debugging output. (getenv "GUIX_LD_WRAPPER_DEBUG")) (define %disable-rpath? ;; Whether to disable automatic '-rpath' addition. (getenv "GUIX_LD_WRAPPER_DISABLE_RPATH")) (define (readlink* file) ;; Call 'readlink' until the result is not a symlink. (define %max-symlink-depth 50) (let loop ((file file) (depth 0)) (define (absolute target) (if (absolute-file-name? target) target (string-append (dirname file) "/" target))) (if (>= depth %max-symlink-depth) file (call-with-values (lambda () (catch 'system-error (lambda () (values #t (readlink file))) (lambda args (let ((errno (system-error-errno args))) (if (or (= errno EINVAL) (= errno ENOENT)) (values #f file) (apply throw args)))))) (lambda (success? target) (if success? (loop (absolute target) (+ depth 1)) file)))))) (define (pure-file-name? file) ;; Return #t when FILE is the name of a file either within the store ;; (possibly via a symlink) or within the build directory. (let ((file (readlink* file))) (or (not (string-prefix? "/" file)) (string-prefix? %store-directory file) (string-prefix? %temporary-directory file) (and %build-directory (string-prefix? %build-directory file))))) (define (store-file-name? file) ;; Return #t when FILE is a store file, possibly indirectly. (string-prefix? %store-directory (readlink* file))) (define (shared-library? file) ;; Return #t when FILE denotes a shared library. (or (string-suffix? ".so" file) (let ((index (string-contains file ".so."))) ;; Since we cannot use regexps during bootstrap, roll our own. (and index (string-every (char-set-union (char-set #\.) char-set:digit) (string-drop file (+ index 3))))))) (define (library-search-path args) ;; Return the library search path as a list of directory names. The GNU ld ;; manual notes that "[a]ll `-L' options apply to all `-l' options, ;; regardless of the order in which the options appear", so we must compute ;; the search path independently of the -l options. (let loop ((args args) (path '())) (match args (() (reverse path)) (("-L" directory . rest) (loop rest (cons directory path))) ((argument . rest) (if (string-prefix? "-L" argument) ;augment the search path (loop rest (cons (string-drop argument 2) path)) (loop rest path)))))) (define (library-files-linked args library-path) ;; Return the absolute file names of shared libraries explicitly linked ;; against via `-l' or with an absolute file name in ARGS, looking them up ;; in LIBRARY-PATH. (define files+args (fold (lambda (argument result) (match result ((library-files ((and flag (or "-dynamic-linker" "-plugin")) . rest)) ;; When passed '-dynamic-linker ld.so', ignore 'ld.so'; when ;; passed '-plugin liblto_plugin.so', ignore ;; 'liblto_plugin.so'. See . (list library-files (cons* argument flag rest))) ((library-files previous-args) (cond ((string-prefix? "-l" argument) ;add library (let* ((lib (string-append "lib" (string-drop argument 2) ".so")) (full (search-path library-path lib))) (list (if full (cons full library-files) library-files) (cons argument previous-args)))) ((and (string-prefix? %store-directory argument) (shared-library? argument)) ;add library (list (cons argument library-files) (cons argument previous-args))) (else (list library-files (cons argument previous-args))))))) (list '() '()) args)) (match files+args ((files arguments) (reverse files)))) (define (rpath-arguments library-files) ;; Return the `-rpath' argument list for each of LIBRARY-FILES, a list of ;; absolute file names. (fold-right (lambda (file args) ;; Add '-rpath' if and only if FILE is in the store; we don't ;; want to add '-rpath' for files under %BUILD-DIRECTORY or ;; %TEMPORARY-DIRECTORY because that could leak to installed ;; files. (cond ((and (not %disable-rpath?) (store-file-name? file)) (cons* "-rpath" (dirname file) args)) ((or %allow-impurities? (pure-file-name? file)) args) (else (begin (format (current-error-port) "ld-wrapper: error: attempt to use \ library outside of ~a: ~s~%" %store-directory file) (exit 1))))) '() library-files)) (define (expand-arguments args) ;; Expand ARGS such that "response file" arguments, such as "@args.txt", are ;; expanded (info "(gcc) Overall Options"). (define (response-file-arguments file) (define (tokenize port) ;; Return a list of all strings found in PORT. Quote characters are ;; removed, but whitespaces within quoted strings are preserved. (let loop ((tokens '())) (let* ((token+delimiter (read-delimited " '\"\n" port 'split)) (token (car token+delimiter)) (delim (cdr token+delimiter))) (if (eof-object? token) (reverse tokens) (case delim ((#\") (loop (cons (read-delimited "\"" port) tokens))) ((#\') (loop (cons (read-delimited "'" port) tokens))) (else (if (> (string-length token) 0) (loop (cons token tokens)) (loop tokens)))))))) (when %debug? (format (current-error-port) "ld-wrapper: attempting to read arguments from '~a'~%" file)) (call-with-input-file file tokenize)) (define result (fold-right (lambda (arg result) (if (string-prefix? "@" arg) (let ((file (string-drop arg 1))) (append (catch 'system-error (lambda () (response-file-arguments file)) (lambda args ;; FILE doesn't exist or cannot be read so ;; leave ARG as is. (list arg))) result)) (cons arg result))) '() args)) ;; If there are "@" arguments in RESULT *and* we can expand them (they don't ;; refer to nonexistent files), then recurse. (if (equal? result args) result (expand-arguments result))) (define (ld-wrapper args) ;; Invoke the real `ld' with ARGS, augmented with `-rpath' switches. (let* ((args (expand-arguments (cdr args))) ;strip arg0 (path (library-search-path args)) (libs (library-files-linked args path)) (args (append args (rpath-arguments libs)))) (when %debug? (format (current-error-port) "ld-wrapper: library search path: ~s~%" path) (format (current-error-port) "ld-wrapper: libraries linked: ~s~%" libs) (format (current-error-port) "ld-wrapper: invoking `~a' with ~s~%" %real-ld args) (force-output (current-error-port))) (apply execl %real-ld (basename %real-ld) args))) ;;; ld-wrapper.scm ends here ))entry(nameld.gonode(typeregularcontents­,GOOF----LE-4-2.0•,]€4hš ] gguile¤ ¤ gdefine-module*¤ ¤ ¤ ggnu¤ g build-support¤ g ld-wrapper¤ ¤ gfilenameS¤ fE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ld¤ gimportsS¤ gsrfi¤ gsrfi-1¤  ¤ ¤ gice-9¤ gmatch¤ ¤ ¤ ¤ gexportsS¤ ¤ g autoloadsS¤ grdelim¤ ¤ gread-delimited¤ ¤ ¤ gset-current-module¤ ¤ ¤ !f@/gnu/store/03i3civrmcfpc0212jdir7hvgz776iv1-binutils-2.41/bin/ld¤ "g%real-ld¤ #ggetenv¤ $f NIX_STORE¤ %f /gnu/store¤ &g%store-directory¤ 'fTMPDIR¤ (f/tmp¤ )g%temporary-directory¤ *f NIX_BUILD_TOP¤ +g%build-directory¤ ,f GUIX_LD_WRAPPER_ALLOW_IMPURITIES¤ -gstring-downcase¤ .gmember¤ /fyes¤ 0fy¤ 1ft¤ 2ftrue¤ 3f1¤ 4/0123¤ 5fno¤ 6fn¤ 7ff¤ 8ffalse¤ 9f0¤ :56789¤ ;gformat¤ g%allow-impurities?¤ ?fGUIX_LD_WRAPPER_DEBUG¤ @g%debug?¤ AfGUIX_LD_WRAPPER_DISABLE_RPATH¤ Bg%disable-rpath?¤ Cgcatch¤ Dg system-error¤ Egreadlink¤ Fgsystem-error-errno¤ GgEINVAL¤ HgENOENT¤ Igthrow¤ Jgabsolute-file-name?¤ Kg string-append¤ Lgdirname¤ Mf/¤ Ng readlink*¤ Ogstring-prefix?¤ Pgpure-file-name?¤ Qgstore-file-name?¤ Rgstring-suffix?¤ Sf.so¤ Tgstring-contains¤ Uf.so.¤ Vg string-every¤ Wgchar-set-union¤ Xgchar-set¤ Ygchar-set:digit¤ Zg string-drop¤ [gshared-library?¤ \greverse¤ ]f-L¤ ^gerror¤ _^¤ `^¤ afno matching pattern¤ bglibrary-search-path¤ cgfold¤ df-l¤ eflib¤ fg search-path¤ gf-dynamic-linker¤ hf-plugin¤ iglibrary-files-linked¤ jg fold-right¤ kf-rpath¤ lf=ld-wrapper: error: attempt to use library outside of ~a: ~s~%¤ mgexit¤ ngrpath-arguments¤ of@¤ pgappend¤ qf4ld-wrapper: attempting to read arguments from '~a'~%¤ rgcall-with-input-file¤ sf '" ¤ tgsplit¤ ug eof-object?¤ vf"¤ wf'¤ xg string-length¤ ygexpand-arguments¤ zf%ld-wrapper: library search path: ~s~%¤ {f"ld-wrapper: libraries linked: ~s~%¤ |f#ld-wrapper: invoking `~a' with ~s~%¤ }g force-output¤ ~gexecl¤ gbasename¤C5h¨«]4    5 4 >"G!"R4#i$5$"%&R4#i'5$"()R4#i*5+R4#i,5$L4-i54.i45$"&4.i:5$"4;i4R4#i?5@R4#iA5BRCDEh‹]4L5DƒgfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ € ŒŒ  ŒŒ ŒŒ  CFGHIh@÷-1345‘$"‘$LD@ïgargs ;gerrno  ;gt   ,gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ ‚ ŒŒ ƒ ŒŒ  ƒ ŒŒ  „ ŒŒ  „ ŒŒ ) „ -ŒŒ 0 „ ŒŒ 5 … ŒŒ ; † ŒŒ ; CJKLM hhT] 2•$C4OO> G$,45$"4455—"ÿÿ¢CLgfile  cgdepth  cgsuccess?  ' cgtarget  ' cgfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ t ŒŒ  { ŒŒ { ŒŒ   ŒŒ   ŒŒ &  ŒŒ * } ŒŒ 4 ˆ ŒŒ 5 w ŒŒ ? w ŒŒ F y ŒŒ I y ŒŒ Q y (ŒŒ U y ŒŒ X ‰ (ŒŒ ` ‰ ŒŒ  c gnamegloopŒCh¹] OQ 6±gfile  gloop gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ p ŒŒ t ŒŒ   gnameg readlink*ŒCNRNOM&)+hXZ]4545€$C45$C45$C$6CRgfile  Xgfile Xgt   Xgt  ) Xgt  = XgfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ Œ ŒŒ  ŒŒ ŒŒ ŒŒ  ŒŒ  ŒŒ  ŒŒ  ŒŒ ! ‘ ŒŒ ) ŒŒ 5 ’ ŒŒ = ŒŒ N “ ŒŒ V ” ŒŒ  X gnamegpure-file-name?ŒCPRO&Nhº]456²gfile  gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ – ŒŒ  ˜ #ŒŒ  ˜ ŒŒ   gnamegstore-file-name?ŒCQRRSTUVWXYZ hHW] 45$C45$44.554  –56COgfile  Ggt Ggindex  GgfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ š ŒŒ  œ ŒŒ  œ ŒŒ œ ŒŒ œ ŒŒ  ŒŒ  )ŒŒ  ŒŒ  ŒŒ ' Ÿ ŒŒ *   ŒŒ -   +ŒŒ 7   ŒŒ 8 ¡ ŒŒ A ¡ -ŒŒ C ¡ ŒŒ E   ŒŒ  G gnamegshared-library?ŒC[R\O]Z`ah¸õ]1"£(6"Mˆ$9Ž45$4 5Œ"ÿÿ¼"ÿÿ°456ˆ$;އ$$ˆ$ŽŒ"ÿÿi"ÿÿu"ÿÿq"ÿÿm"ÿÿRígargs  ´gargs  ©gpath   ©gw  # Vgx  # Vgw  p ¥gx  p ¥gw  Š gx  Š  gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ £ ŒŒ  ¨ ŒŒ ª ŒŒ  ¬ ŒŒ  ª ŒŒ ( ° ŒŒ , ° ŒŒ 0 ° ŒŒ 4 ° ŒŒ 7 ² ŒŒ B ² ŒŒ J ± ŒŒ V ³ ŒŒ W ª ŒŒ x ­ ŒŒ y ª ŒŒ • ® ŒŒ ® ŒŒ ¡ ª ŒŒ © ¨ ŒŒ ¬ © ŒŒ ´ ¨ ŒŒ  ´ gnameglibrary-search-pathŒCbRcOdKeZSf&[`aghhP­]*"Έ$ºŽˆ$œŽ(ˆ45$944 554L5$ Œ"ŒC" ŒC45$4 5$ŒŒC"ÿÿË"ÿÿÇ4   564   564   56ˆ$lŽˆ$WŽ(Lˆ$<Ž ‡$ŒŒC‡$ŒŒC"ÿþË"ÿþÇ"ÿþÃ"ÿþ¿"ÿþ»¥gargument  Kgresult  Kgw   Çgx   Çgw  ( ­glib  I pgfull  T pgw  á Ggx  á Ggw  ö ?gw   ;gx   ; gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ º ŒŒ  » ŒŒ + Å ŒŒ / Å &ŒŒ 3 Å ŒŒ 7 Å ŒŒ 8 Æ #ŒŒ < Æ 2ŒŒ = Ç 2ŒŒ G È 2ŒŒ I Æ #ŒŒ I Æ ŒŒ L É #ŒŒ T Æ ŒŒ \ Ê ŒŒ a Ë "ŒŒ l Í ŒŒ o Ê ŒŒ { Ô ŒŒ ~ Ó ŒŒ  Å ŒŒ € Î ŒŒ Œ Å ŒŒ Ï ŒŒ — Î ŒŒ œ Ð ŒŒ ¡ Ñ ŒŒ ¤ Ð ŒŒ ® » ŒŒ  ½ (ŒŒ  » ŒŒ  à ŒŒ   ŒŒ $ ½ :ŒŒ % » ŒŒ 2 à ŒŒ 6  ŒŒ ; » ŒŒ'  K C\`ahpD]H4O5KJˆ$P;<l&m hh+] $"45$45ŒŒC$"45$C445  >"G 6#gfile  fgargs  fgt  ( ?gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ ß ŒŒ  ä ŒŒ  å ŒŒ  ä ŒŒ  æ ŒŒ  æ 'ŒŒ $ æ ŒŒ ( ç ŒŒ 6 è ŒŒ C ä ŒŒ G ì ŒŒ J ì !ŒŒ P í !ŒŒ Y ì ŒŒ f 𠌌  f ChÂ]6ºg library-files  gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ Ü ŒŒ  ñ ŒŒ ß ŒŒ  gnamegrpath-argumentsŒCnRjOoZpCD@;<qrstu\vwx h3]!"~45Ž45$6"†$45Œ"ÿÿ½'†$45Œ"ÿÿ¢45 ”$ Œ"ÿÿŠ"ÿÿ‚"ÿÿ{+gport  ‹gtokens  „gtoken+delimiter   „gtoken   „gdelim   „gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ ø ŒŒ  û ŒŒ  ü ŒŒ ü 0ŒŒ  ü >ŒŒ  ü ŒŒ  ü ŒŒ  ý ŒŒ  ü ŒŒ  þ ŒŒ  ü ŒŒ  ÿ ŒŒ ( ÿ ŒŒ .  ŒŒ 7  ŒŒ 8  #ŒŒ <  3ŒŒ @  #ŒŒ C  ŒŒ I  ŒŒ R  ŒŒ S  #ŒŒ W  3ŒŒ [  #ŒŒ ^  ŒŒ d  ŒŒ e  ŒŒ m  ŒŒ q  ŒŒ v  ŒŒ |  ŒŒ „  ŒŒ „ û ŒŒ … û ŒŒ ‹ û ŒŒ$  ‹ gnamegtokenizeŒCh0¯]$445L>"G"L6§gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ  "ŒŒ   ŒŒ  ŒŒ  ŒŒ   ŒŒ   ŒŒ -  ŒŒ  - Ch—-13LCgargs gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ  "ŒŒ   $ŒŒ  C h@] 45$%4 54OO56ŒC garg  :gresult  :gfile   4gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ  ŒŒ   ŒŒ   &ŒŒ  ŒŒ   ŒŒ   "ŒŒ   ŒŒ   ŒŒ  'ŒŒ 0  ŒŒ 4  ŒŒ 9  ŒŒ  : Cyh(ñ] H45KJ‡$JCJ6égargs  #gresult  #gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ ô ŒŒ   ŒŒ  ŒŒ   ŒŒ   ŒŒ   ŒŒ # " ŒŒ  # gnamegexpand-argumentsŒCyRybipn@;<z{|"}~h°]!4Ž545454455$f445 >"G445 >"G445  >"G4 45>"G" 4 5@úgargs  «gargs «gpath   «glibs   «gargs  . «gfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ $ ŒŒ  & ŒŒ  & !ŒŒ & ŒŒ & ŒŒ ' ŒŒ  & ŒŒ  ( ŒŒ  & ŒŒ ! ) ŒŒ & ) ŒŒ . ) ŒŒ . & ŒŒ 6 * ŒŒ 7 + ŒŒ : + ŒŒ @ , ŒŒ G + ŒŒ P - ŒŒ S - ŒŒ Y . ŒŒ ` - ŒŒ i / ŒŒ l / ŒŒ r 0 ŒŒ { / ŒŒ „ 2 ŒŒ ‡ 2 ŒŒ 2 ŒŒ ¡ 3 ŒŒ « 3 ŒŒ  « gnameg ld-wrapperŒCRC£gm  0gt > Qgt ] pgvalue ˆ àgvalue ™ ØgfilenamefE/gnu/store/c0dm869j2synbjfxc82m7sqjlji1m53y-ld-wrapper-boot3-0/bin/ldŒ  ) ŒŒ 2 J ŒŒ 5 H ŒŒ 6 N ŒŒ < N ŒŒ > N ŒŒ > N ŒŒ N N ŒŒ T L ŒŒ U R ŒŒ [ R ŒŒ ] R ŒŒ ] R ŒŒ m R ŒŒ s P ŒŒ t V ŒŒ z V ŒŒ | V ŒŒ  T ŒŒ € [ ŒŒ † [ ŒŒ ˆ [ ŒŒ ˆ [ ŒŒ \ ŒŒ ‘ ] ŒŒ ™ ] ŒŒ œ ^ ŒŒ ¤ ^ ŒŒ ¦ ^ ŒŒ ª ^ ŒŒ ° ` ŒŒ ¸ ` ŒŒ º ` ŒŒ ¾ ^ ŒŒ Ä c ŒŒ É c ŒŒ Ñ d ŒŒ Õ c ŒŒ Ý \ ŒŒ ã X ŒŒ ä j ŒŒ ê j ŒŒ ì j ŒŒ ï h ŒŒ ð n ŒŒ ö n ŒŒ ø n ŒŒ û l ŒŒ ¬ p ŒŒ } Œ ŒŒ ] – ŒŒ " š ŒŒ ð £ ŒŒ ï µ ŒŒ  Ü ŒŒ Ä ô ŒŒ ¥ $ ŒŒ:  § C6)))))