From owner-freebsd-java@FreeBSD.ORG Mon Feb 7 11:07:03 2011 Return-Path: Delivered-To: freebsd-java@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E8874106566B for ; Mon, 7 Feb 2011 11:07:03 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id BC7858FC13 for ; Mon, 7 Feb 2011 11:07:03 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p17B73oZ027789 for ; Mon, 7 Feb 2011 11:07:03 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p17B73U5027787 for freebsd-java@FreeBSD.org; Mon, 7 Feb 2011 11:07:03 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 7 Feb 2011 11:07:03 GMT Message-Id: <201102071107.p17B73U5027787@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: freebsd-java@FreeBSD.org Cc: Subject: Current problem reports assigned to freebsd-java@FreeBSD.org X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Feb 2011 11:07:04 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o ports/154188 java Update java/linux-sun-jdk* ports to their latest versi o ports/153301 java java/openjdk6 web browser plugin doesn't work with bot o ports/151923 java [patch] java/openjdk6: free and native openjdk bootstr o ports/151042 java [patch] java/openjdk6 Respect CC o ports/150142 java Not installed java/openjdk6 on file system zfs /usr/lo o java/147512 java Crash of RXTX-2.1-7 on AMD64 system o ports/142704 java [PATCH] java/jai-imageio: use $SUB_FILES to dynamicall o java/141919 java Serious remote vulnerability in the JRE o java/138729 java java/jdk16: setting 'export AWT_TOOLKIT=MToolkit' caus o java/138728 java java/jdk16: SIGSEGV in java runtime o java/128948 java java/jdk16 built from source can't bind a socket, but o java/128809 java JVM aborted when GNU RXTX write to serial port. o java/123555 java linux-sun-jdk15, linux-sun-jdk16 produce a coredump o java/122513 java native JDKs unbuildable with Linux ones o java/121692 java java/jdk16: Java 1.5 1.5.0.14p8 crashes in RMI TCP Con o ports/120372 java java/linux-sun-jdk16: linux-sun-jre1.6.0 plugin doesn' o java/120146 java java/jdk15: netbeans 6.0 causes java core dump on amd6 o ports/119732 java java/linux-sun-jre16: linux-sun-jre16 plugin doesn't w o java/119063 java An unexpected error has been detected by Java Runtime o java/118956 java eclipse and netbeans break on diablo-jdk15 o java/118496 java Eclipse packages do not work with 6.3-RC1/amd64 o java/116667 java linux-sun-javac1.4 hangs on SMP o ports/116082 java java/linux-sun-jdk16 jconsole is unable to connect to o java/114644 java tomcat goes out of PermSpace, jvm crashes o ports/113751 java java/linux-sun-jdk15: linux-sun-jdk-1.5.0.12,2 - java o ports/113467 java Multiple "missing return value" errors building JDK on f java/112595 java Java appletviewer frequently hangs (kse_release loop) o java/110912 java Java krb5 client leaks UDP connections f java/105482 java diablo-jdk1.5.0/jdk-1.5.0 java.nio.Selector bug o java/97461 java Diablo JDK does not report Update level in a format su s java/62837 java linux-sun-jdk14 executables hang with COMPAT_LINUX in 31 problems total. From owner-freebsd-java@FreeBSD.ORG Mon Feb 7 23:07:33 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id 77782106564A; Mon, 7 Feb 2011 23:07:33 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Mon, 7 Feb 2011 18:07:18 -0500 User-Agent: KMail/1.6.2 References: <201101261721.58069.jkim@FreeBSD.org> <201102032111.13479.jkim@FreeBSD.org> <201102041932.43679.jkim@FreeBSD.org> In-Reply-To: <201102041932.43679.jkim@FreeBSD.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102071807.21551.jkim@FreeBSD.org> Cc: Pieter de Goeje , Mike Jakubik Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Feb 2011 23:07:33 -0000 On Friday 04 February 2011 07:32 pm, Jung-uk Kim wrote: > On Thursday 03 February 2011 09:11 pm, Jung-uk Kim wrote: > > On Thursday 03 February 2011 04:24 pm, Jung-uk Kim wrote: > > > On Thursday 03 February 2011 01:09 pm, Mike Jakubik wrote: > > > > On Wed, 2011-02-02 at 13:54 -0500, Jung-uk Kim wrote: > > > > > Yeah, I actually fixed that. Some patches were missing in > > > > > b20 ports. 'jstack -m' should work, too. :-) > > > > > > > > > > Thanks for testing! > > > > > > > > Compiled OK and working with my applications OK. The jstack > > > > -m option you mention however produces the following results > > > > here: > > > > > > > > Attaching to process ID 84046, please wait... > > > > Debugger attached successfully. > > > > Server compiler detected. > > > > JVM version is 19.0-b09 > > > > sun.jvm.hotspot.debugger.DebuggerException: > > > > sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs > > > > failed for a lwp > > > > at sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal > > > > $BsdDebuggerLocalWorkerThread.execute(BsdDebuggerLocal.java:1 > > > >52 ) at > > > > sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal.getThreadIntege > > > >rR eg is terSet(BsdDebuggerLocal.java:466) at > > > > sun.jvm.hotspot.debugger.bsd.BsdThread.getContext(BsdThread.j > > > >av a: 65 ) at > > > > sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDAccess. > > > >ge tC ur rentFrameGuess(BsdAMD64JavaThreadPDAccess.java:92) at > > > > sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaT > > > >hr ea d. java:256) at > > > > sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaT > > > >hr ea d. java:218) at > > > > sun.jvm.hotspot.tools.PStack.initJFrameCache(PStack.java:208) > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:66) > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:53) > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:48) > > > > at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) > > > > at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) > > > > at sun.jvm.hotspot.tools.JStack.main(JStack.java:86) > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > > Method) at > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces > > > >so rI mp l.java:57) at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet > > > >ho dA cc essorImpl.java:43) at > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > at sun.tools.jstack.JStack.runJStackTool(JStack.java:136) > > > > at sun.tools.jstack.JStack.main(JStack.java:102) > > > > > > Yeah, I noticed that, too. It seems it's getting bogus thread > > > IDs. It'll take some time for me to figure out why, though. :-( > > > > Now I know why but it is a very complicated problem. :-( > > > > Basically, the culprit was difference between Linux and BSD, > > mostly _thread_id and ptrace(2). Linux has gettid(2), which > > returns a (32-bit) pid_t type, and it is used for _thread_id. > > Linux code simply calls ptrace(PTRACE_GETREGS, ...) with it and > > it works fine. However, BSD does not have gettid(), so we used > > pthread_t instead. Alas, we copied process_get_lwp_regs() from > > Linux-specific file. It does not work for us because _thread_id > > is a pthread_t type and ptrace() does not understand it. > > Unfortunately, there is no easy way to map pthread_t to a lwpid_t > > value, either. More worse, it gets truncated to 32-bit on amd64. > > Grrr... > > To prove my idea, I just implemented libthr function > pthread_getthreadid_np(): > > http://docs.freebsd.org/cgi/mid.cgi?201102041409.12314.jkim > > Updated ports to support this new feature: > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_3.tar.bz2 > > Since it is extremely experimental, it is turned off by default, of > course. If you dare to try it out, you must update libthr with the > above libthr patch and forcefully define > HAVE_PTHREAD_GETTHREADID_NP in the ports Makefile. Now jstack can > trace Java threads properly for me. :-) Please try this: http://people.freebsd.org/~jkim/ports-openjdk6-b21_4.tar.bz2 FYI, (simplified) libthr patch mentioned above was committed on HEAD. However, when pthread_getthreadid_np(3) is not available, now it uses (undocumented) thr_self() to get the same info. So, there is no need to patch libthr any more. :-) Thanks! Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Tue Feb 8 01:28:14 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5DA671065673; Tue, 8 Feb 2011 01:28:14 +0000 (UTC) (envelope-from pieter@degoeje.nl) Received: from mx.utwente.nl (mx2.utsp.utwente.nl [130.89.2.13]) by mx1.freebsd.org (Postfix) with ESMTP id D3EA68FC15; Tue, 8 Feb 2011 01:28:13 +0000 (UTC) Received: from nox-laptop.student.utwente.nl (nox-laptop.student.utwente.nl [130.89.160.140]) by mx.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id p181S6P4025999; Tue, 8 Feb 2011 02:28:06 +0100 From: Pieter de Goeje To: "Jung-uk Kim" Date: Tue, 8 Feb 2011 02:28:05 +0100 User-Agent: KMail/1.9.10 References: <201101261721.58069.jkim@FreeBSD.org> <201102041932.43679.jkim@FreeBSD.org> <201102071807.21551.jkim@FreeBSD.org> In-Reply-To: <201102071807.21551.jkim@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <201102080228.05813.pieter@degoeje.nl> X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact icts.servicedesk@utwente.nl for more information. X-UTwente-MailScanner: Found to be clean X-UTwente-MailScanner-From: pieter@degoeje.nl X-Spam-Status: No Cc: Mike Jakubik , freebsd-java@freebsd.org Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Feb 2011 01:28:14 -0000 On Tuesday 08 February 2011 00:07:18 Jung-uk Kim wrote: > On Friday 04 February 2011 07:32 pm, Jung-uk Kim wrote: > > On Thursday 03 February 2011 09:11 pm, Jung-uk Kim wrote: > > > On Thursday 03 February 2011 04:24 pm, Jung-uk Kim wrote: > > > > On Thursday 03 February 2011 01:09 pm, Mike Jakubik wrote: > > > > > On Wed, 2011-02-02 at 13:54 -0500, Jung-uk Kim wrote: > > > > > > Yeah, I actually fixed that. Some patches were missing in > > > > > > b20 ports. 'jstack -m' should work, too. :-) > > > > > > > > > > > > Thanks for testing! > > > > > > > > > > Compiled OK and working with my applications OK. The jstack > > > > > -m option you mention however produces the following results > > > > > here: > > > > > > > > > > Attaching to process ID 84046, please wait... > > > > > Debugger attached successfully. > > > > > Server compiler detected. > > > > > JVM version is 19.0-b09 > > > > > sun.jvm.hotspot.debugger.DebuggerException: > > > > > sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs > > > > > failed for a lwp > > > > > at sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal > > > > > $BsdDebuggerLocalWorkerThread.execute(BsdDebuggerLocal.java:1 > > > > >52 ) at > > > > > sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal.getThreadIntege > > > > >rR eg is terSet(BsdDebuggerLocal.java:466) at > > > > > sun.jvm.hotspot.debugger.bsd.BsdThread.getContext(BsdThread.j > > > > >av a: 65 ) at > > > > > sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDAccess. > > > > >ge tC ur rentFrameGuess(BsdAMD64JavaThreadPDAccess.java:92) at > > > > > sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaT > > > > >hr ea d. java:256) at > > > > > sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaT > > > > >hr ea d. java:218) at > > > > > sun.jvm.hotspot.tools.PStack.initJFrameCache(PStack.java:208) > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:66) > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:53) > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:48) > > > > > at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) > > > > > at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) > > > > > at sun.jvm.hotspot.tools.JStack.main(JStack.java:86) > > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > > > Method) at > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces > > > > >so rI mp l.java:57) at > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet > > > > >ho dA cc essorImpl.java:43) at > > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > > at sun.tools.jstack.JStack.runJStackTool(JStack.java:136) > > > > > at sun.tools.jstack.JStack.main(JStack.java:102) > > > > > > > > Yeah, I noticed that, too. It seems it's getting bogus thread > > > > IDs. It'll take some time for me to figure out why, though. :-( > > > > > > Now I know why but it is a very complicated problem. :-( > > > > > > Basically, the culprit was difference between Linux and BSD, > > > mostly _thread_id and ptrace(2). Linux has gettid(2), which > > > returns a (32-bit) pid_t type, and it is used for _thread_id. > > > Linux code simply calls ptrace(PTRACE_GETREGS, ...) with it and > > > it works fine. However, BSD does not have gettid(), so we used > > > pthread_t instead. Alas, we copied process_get_lwp_regs() from > > > Linux-specific file. It does not work for us because _thread_id > > > is a pthread_t type and ptrace() does not understand it. > > > Unfortunately, there is no easy way to map pthread_t to a lwpid_t > > > value, either. More worse, it gets truncated to 32-bit on amd64. > > > Grrr... > > > > To prove my idea, I just implemented libthr function > > pthread_getthreadid_np(): > > > > http://docs.freebsd.org/cgi/mid.cgi?201102041409.12314.jkim > > > > Updated ports to support this new feature: > > > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_3.tar.bz2 > > > > Since it is extremely experimental, it is turned off by default, of > > course. If you dare to try it out, you must update libthr with the > > above libthr patch and forcefully define > > HAVE_PTHREAD_GETTHREADID_NP in the ports Makefile. Now jstack can > > trace Java threads properly for me. :-) > > Please try this: > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_4.tar.bz2 > > FYI, (simplified) libthr patch mentioned above was committed on HEAD. > However, when pthread_getthreadid_np(3) is not available, now it uses > (undocumented) thr_self() to get the same info. So, there is no need > to patch libthr any more. :-) Hmm, it fails to build for me: { \ echo Linking launcher...; \ \ /usr/bin/gcc -m64 -Xlinker -O1 -m64 -export-dynamic -L`pwd` -o gamma launcher.o -ljvm -lm -pthread; \ \ [ -f gamma ] || { ln -s gamma gamma; }; \ } Linking launcher... /ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product/libjvm.so: undefined reference to `thr_self(long*)' gmake[6]: stat: gamma: Too many levels of symbolic links gmake[6]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product' All done. gmake[5]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product' cd bsd_amd64_compiler2/product && ./test_gamma openjdk full version "1.6.0-b21" ./test_gamma: ./gamma: Too many levels of symbolic links gmake[4]: *** [product] Error 2 gmake[4]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir' gmake[3]: *** [generic_build2] Error 2 gmake[3]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' gmake[2]: *** [product] Error 2 gmake[2]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' gmake[1]: *** [hotspot-build] Error 2 gmake[1]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work' gmake: *** [build_product_image] Error 2 *** Error code 1 Stop in /usr/home/pyotr/build/java-port. Which is weird because the symbol seems to be available in libthr and gamma is linked with -pthread: # nm -D /lib/libthr.so.3 | grep thr_self U thr_self Environment: FreeBSD xxx 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #2: Mon Jan 31 23:07:50 CET 2011 xxx:/ssd/obj/ssd/FreeBSD/8.x/src/sys/GENERIC amd64 I didn't touch or patch libthr at all. Regards, Pieter de Goeje From owner-freebsd-java@FreeBSD.ORG Tue Feb 8 05:55:57 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 705E8106564A; Tue, 8 Feb 2011 05:55:57 +0000 (UTC) (envelope-from glewis@eyesbeyond.com) Received: from misty.eyesbeyond.com (gerbercreations.com [71.39.140.16]) by mx1.freebsd.org (Postfix) with ESMTP id 017648FC08; Tue, 8 Feb 2011 05:55:56 +0000 (UTC) Received: from misty.eyesbeyond.com (localhost.eyesbeyond.com [127.0.0.1]) by misty.eyesbeyond.com (8.14.4/8.14.4) with ESMTP id p185fG35015602; Mon, 7 Feb 2011 21:41:16 -0800 (PST) (envelope-from glewis@eyesbeyond.com) Received: (from glewis@localhost) by misty.eyesbeyond.com (8.14.4/8.14.4/Submit) id p185fFNV015601; Mon, 7 Feb 2011 21:41:15 -0800 (PST) (envelope-from glewis@eyesbeyond.com) X-Authentication-Warning: misty.eyesbeyond.com: glewis set sender to glewis@eyesbeyond.com using -f Date: Mon, 7 Feb 2011 21:41:15 -0800 From: Greg Lewis To: Pieter de Goeje Message-ID: <20110208054115.GA15525@misty.eyesbeyond.com> References: <201101261721.58069.jkim@FreeBSD.org> <201102041932.43679.jkim@FreeBSD.org> <201102071807.21551.jkim@FreeBSD.org> <201102080228.05813.pieter@degoeje.nl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201102080228.05813.pieter@degoeje.nl> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: Jung-uk Kim , freebsd-java@freebsd.org Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Feb 2011 05:55:57 -0000 On Tue, Feb 08, 2011 at 02:28:05AM +0100, Pieter de Goeje wrote: > On Tuesday 08 February 2011 00:07:18 Jung-uk Kim wrote: > > On Friday 04 February 2011 07:32 pm, Jung-uk Kim wrote: > > > On Thursday 03 February 2011 09:11 pm, Jung-uk Kim wrote: > > > > On Thursday 03 February 2011 04:24 pm, Jung-uk Kim wrote: > > > > > On Thursday 03 February 2011 01:09 pm, Mike Jakubik wrote: > > > > > > On Wed, 2011-02-02 at 13:54 -0500, Jung-uk Kim wrote: > > > > > > > Yeah, I actually fixed that. Some patches were missing in > > > > > > > b20 ports. 'jstack -m' should work, too. :-) > > > > > > > > > > > > > > Thanks for testing! > > > > > > > > > > > > Compiled OK and working with my applications OK. The jstack > > > > > > -m option you mention however produces the following results > > > > > > here: > > > > > > > > > > > > Attaching to process ID 84046, please wait... > > > > > > Debugger attached successfully. > > > > > > Server compiler detected. > > > > > > JVM version is 19.0-b09 > > > > > > sun.jvm.hotspot.debugger.DebuggerException: > > > > > > sun.jvm.hotspot.debugger.DebuggerException: get_thread_regs > > > > > > failed for a lwp > > > > > > at sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal > > > > > > $BsdDebuggerLocalWorkerThread.execute(BsdDebuggerLocal.java:1 > > > > > >52 ) at > > > > > > sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal.getThreadIntege > > > > > >rR eg is terSet(BsdDebuggerLocal.java:466) at > > > > > > sun.jvm.hotspot.debugger.bsd.BsdThread.getContext(BsdThread.j > > > > > >av a: 65 ) at > > > > > > sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDAccess. > > > > > >ge tC ur rentFrameGuess(BsdAMD64JavaThreadPDAccess.java:92) at > > > > > > sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess(JavaT > > > > > >hr ea d. java:256) at > > > > > > sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg(JavaT > > > > > >hr ea d. java:218) at > > > > > > sun.jvm.hotspot.tools.PStack.initJFrameCache(PStack.java:208) > > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:66) > > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:53) > > > > > > at sun.jvm.hotspot.tools.PStack.run(PStack.java:48) > > > > > > at sun.jvm.hotspot.tools.JStack.run(JStack.java:60) > > > > > > at sun.jvm.hotspot.tools.Tool.start(Tool.java:221) > > > > > > at sun.jvm.hotspot.tools.JStack.main(JStack.java:86) > > > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > > > > Method) at > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcces > > > > > >so rI mp l.java:57) at > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMet > > > > > >ho dA cc essorImpl.java:43) at > > > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > > > at sun.tools.jstack.JStack.runJStackTool(JStack.java:136) > > > > > > at sun.tools.jstack.JStack.main(JStack.java:102) > > > > > > > > > > Yeah, I noticed that, too. It seems it's getting bogus thread > > > > > IDs. It'll take some time for me to figure out why, though. :-( > > > > > > > > Now I know why but it is a very complicated problem. :-( > > > > > > > > Basically, the culprit was difference between Linux and BSD, > > > > mostly _thread_id and ptrace(2). Linux has gettid(2), which > > > > returns a (32-bit) pid_t type, and it is used for _thread_id. > > > > Linux code simply calls ptrace(PTRACE_GETREGS, ...) with it and > > > > it works fine. However, BSD does not have gettid(), so we used > > > > pthread_t instead. Alas, we copied process_get_lwp_regs() from > > > > Linux-specific file. It does not work for us because _thread_id > > > > is a pthread_t type and ptrace() does not understand it. > > > > Unfortunately, there is no easy way to map pthread_t to a lwpid_t > > > > value, either. More worse, it gets truncated to 32-bit on amd64. > > > > Grrr... > > > > > > To prove my idea, I just implemented libthr function > > > pthread_getthreadid_np(): > > > > > > http://docs.freebsd.org/cgi/mid.cgi?201102041409.12314.jkim > > > > > > Updated ports to support this new feature: > > > > > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_3.tar.bz2 > > > > > > Since it is extremely experimental, it is turned off by default, of > > > course. If you dare to try it out, you must update libthr with the > > > above libthr patch and forcefully define > > > HAVE_PTHREAD_GETTHREADID_NP in the ports Makefile. Now jstack can > > > trace Java threads properly for me. :-) > > > > Please try this: > > > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_4.tar.bz2 > > > > FYI, (simplified) libthr patch mentioned above was committed on HEAD. > > However, when pthread_getthreadid_np(3) is not available, now it uses > > (undocumented) thr_self() to get the same info. So, there is no need > > to patch libthr any more. :-) > > Hmm, it fails to build for me: > > { \ > echo Linking launcher...; \ > \ > /usr/bin/gcc -m64 -Xlinker -O1 -m64 -export-dynamic -L`pwd` -o > gamma launcher.o -ljvm -lm -pthread; \ > \ > [ -f gamma ] || { ln -s gamma gamma; }; \ > } > Linking launcher... > /ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product/libjvm.so: > undefined reference to `thr_self(long*)' > gmake[6]: stat: gamma: Too many levels of symbolic links > gmake[6]: Leaving directory > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product' > All done. > gmake[5]: Leaving directory > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir/bsd_amd64_compiler2/product' > cd bsd_amd64_compiler2/product && ./test_gamma > openjdk full version "1.6.0-b21" > ./test_gamma: ./gamma: Too many levels of symbolic links > gmake[4]: *** [product] Error 2 > gmake[4]: Leaving directory > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hotspot/outputdir' > gmake[3]: *** [generic_build2] Error 2 > gmake[3]: Leaving directory > `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' > gmake[2]: *** [product] Error 2 > gmake[2]: Leaving directory > `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' > gmake[1]: *** [hotspot-build] Error 2 > gmake[1]: Leaving directory `/ssd/obj/usr/home/pyotr/build/java-port/work' > gmake: *** [build_product_image] Error 2 > *** Error code 1 > > Stop in /usr/home/pyotr/build/java-port. Same result for me on FreeBSD/i386 8.1. > Which is weird because the symbol seems to be available in libthr and gamma is > linked with -pthread: > # nm -D /lib/libthr.so.3 | grep thr_self > U thr_self > > Environment: > FreeBSD xxx 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #2: Mon Jan 31 23:07:50 CET > 2011 xxx:/ssd/obj/ssd/FreeBSD/8.x/src/sys/GENERIC amd64 > > I didn't touch or patch libthr at all. Not a problem due to libthr IMO. -- Greg Lewis Email : glewis@eyesbeyond.com Eyes Beyond Web : http://www.eyesbeyond.com Information Technology FreeBSD : glewis@FreeBSD.org From owner-freebsd-java@FreeBSD.ORG Tue Feb 8 17:05:25 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id AF8A4106564A; Tue, 8 Feb 2011 17:05:24 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Tue, 8 Feb 2011 12:05:04 -0500 User-Agent: KMail/1.6.2 References: <201101261721.58069.jkim@FreeBSD.org> <201102080228.05813.pieter@degoeje.nl> <20110208054115.GA15525@misty.eyesbeyond.com> In-Reply-To: <20110208054115.GA15525@misty.eyesbeyond.com> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102081205.17237.jkim@FreeBSD.org> Cc: Pieter de Goeje Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Feb 2011 17:05:25 -0000 On Tuesday 08 February 2011 12:41 am, Greg Lewis wrote: > On Tue, Feb 08, 2011 at 02:28:05AM +0100, Pieter de Goeje wrote: > > On Tuesday 08 February 2011 00:07:18 Jung-uk Kim wrote: > > > On Friday 04 February 2011 07:32 pm, Jung-uk Kim wrote: > > > > On Thursday 03 February 2011 09:11 pm, Jung-uk Kim wrote: > > > > > On Thursday 03 February 2011 04:24 pm, Jung-uk Kim wrote: > > > > > > On Thursday 03 February 2011 01:09 pm, Mike Jakubik wrote: > > > > > > > On Wed, 2011-02-02 at 13:54 -0500, Jung-uk Kim wrote: > > > > > > > > Yeah, I actually fixed that. Some patches were > > > > > > > > missing in b20 ports. 'jstack -m' should work, too. > > > > > > > > :-) > > > > > > > > > > > > > > > > Thanks for testing! > > > > > > > > > > > > > > Compiled OK and working with my applications OK. The > > > > > > > jstack -m option you mention however produces the > > > > > > > following results here: > > > > > > > > > > > > > > Attaching to process ID 84046, please wait... > > > > > > > Debugger attached successfully. > > > > > > > Server compiler detected. > > > > > > > JVM version is 19.0-b09 > > > > > > > sun.jvm.hotspot.debugger.DebuggerException: > > > > > > > sun.jvm.hotspot.debugger.DebuggerException: > > > > > > > get_thread_regs failed for a lwp > > > > > > > at sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal > > > > > > > $BsdDebuggerLocalWorkerThread.execute(BsdDebuggerLocal. > > > > > > >java:1 52 ) at > > > > > > > sun.jvm.hotspot.debugger.bsd.BsdDebuggerLocal.getThread > > > > > > >Intege rR eg is terSet(BsdDebuggerLocal.java:466) at > > > > > > > sun.jvm.hotspot.debugger.bsd.BsdThread.getContext(BsdTh > > > > > > >read.j av a: 65 ) at > > > > > > > sun.jvm.hotspot.runtime.bsd_amd64.BsdAMD64JavaThreadPDA > > > > > > >ccess. ge tC ur > > > > > > > rentFrameGuess(BsdAMD64JavaThreadPDAccess.java:92) at > > > > > > > sun.jvm.hotspot.runtime.JavaThread.getCurrentFrameGuess > > > > > > >(JavaT hr ea d. java:256) at > > > > > > > sun.jvm.hotspot.runtime.JavaThread.getLastJavaVFrameDbg > > > > > > >(JavaT hr ea d. java:218) at > > > > > > > sun.jvm.hotspot.tools.PStack.initJFrameCache(PStack.jav > > > > > > >a:208) at > > > > > > > sun.jvm.hotspot.tools.PStack.run(PStack.java:66) at > > > > > > > sun.jvm.hotspot.tools.PStack.run(PStack.java:53) at > > > > > > > sun.jvm.hotspot.tools.PStack.run(PStack.java:48) at > > > > > > > sun.jvm.hotspot.tools.JStack.run(JStack.java:60) at > > > > > > > sun.jvm.hotspot.tools.Tool.start(Tool.java:221) at > > > > > > > sun.jvm.hotspot.tools.JStack.main(JStack.java:86) at > > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > > > > > Method) at > > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMetho > > > > > > >dAcces so rI mp l.java:57) at > > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(Delegat > > > > > > >ingMet ho dA cc essorImpl.java:43) at > > > > > > > java.lang.reflect.Method.invoke(Method.java:616) > > > > > > > at > > > > > > > sun.tools.jstack.JStack.runJStackTool(JStack.java:136) > > > > > > > at sun.tools.jstack.JStack.main(JStack.java:102) > > > > > > > > > > > > Yeah, I noticed that, too. It seems it's getting bogus > > > > > > thread IDs. It'll take some time for me to figure out > > > > > > why, though. :-( > > > > > > > > > > Now I know why but it is a very complicated problem. :-( > > > > > > > > > > Basically, the culprit was difference between Linux and > > > > > BSD, mostly _thread_id and ptrace(2). Linux has gettid(2), > > > > > which returns a (32-bit) pid_t type, and it is used for > > > > > _thread_id. Linux code simply calls ptrace(PTRACE_GETREGS, > > > > > ...) with it and it works fine. However, BSD does not have > > > > > gettid(), so we used pthread_t instead. Alas, we copied > > > > > process_get_lwp_regs() from Linux-specific file. It does > > > > > not work for us because _thread_id is a pthread_t type and > > > > > ptrace() does not understand it. Unfortunately, there is no > > > > > easy way to map pthread_t to a lwpid_t value, either. More > > > > > worse, it gets truncated to 32-bit on amd64. Grrr... > > > > > > > > To prove my idea, I just implemented libthr function > > > > pthread_getthreadid_np(): > > > > > > > > http://docs.freebsd.org/cgi/mid.cgi?201102041409.12314.jkim > > > > > > > > Updated ports to support this new feature: > > > > > > > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_3.tar.bz2 > > > > > > > > Since it is extremely experimental, it is turned off by > > > > default, of course. If you dare to try it out, you must > > > > update libthr with the above libthr patch and forcefully > > > > define > > > > HAVE_PTHREAD_GETTHREADID_NP in the ports Makefile. Now > > > > jstack can trace Java threads properly for me. :-) > > > > > > Please try this: > > > > > > http://people.freebsd.org/~jkim/ports-openjdk6-b21_4.tar.bz2 > > > > > > FYI, (simplified) libthr patch mentioned above was committed on > > > HEAD. However, when pthread_getthreadid_np(3) is not available, > > > now it uses (undocumented) thr_self() to get the same info. > > > So, there is no need to patch libthr any more. :-) > > > > Hmm, it fails to build for me: > > > > { \ > > echo Linking launcher...; \ > > \ > > /usr/bin/gcc -m64 -Xlinker -O1 -m64 -export-dynamic > > -L`pwd` -o gamma launcher.o -ljvm -lm -pthread; \ > > \ > > [ -f gamma ] || { ln -s gamma gamma; }; \ > > } > > Linking launcher... > > /ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hots > >pot/outputdir/bsd_amd64_compiler2/product/libjvm.so: undefined > > reference to `thr_self(long*)' > > gmake[6]: stat: gamma: Too many levels of symbolic links > > gmake[6]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hot > >spot/outputdir/bsd_amd64_compiler2/product' All done. > > gmake[5]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hot > >spot/outputdir/bsd_amd64_compiler2/product' cd > > bsd_amd64_compiler2/product && ./test_gamma > > openjdk full version "1.6.0-b21" > > ./test_gamma: ./gamma: Too many levels of symbolic links > > gmake[4]: *** [product] Error 2 > > gmake[4]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work/build/bsd-amd64/hot > >spot/outputdir' gmake[3]: *** [generic_build2] Error 2 > > gmake[3]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' > > gmake[2]: *** [product] Error 2 > > gmake[2]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work/hotspot/make' > > gmake[1]: *** [hotspot-build] Error 2 > > gmake[1]: Leaving directory > > `/ssd/obj/usr/home/pyotr/build/java-port/work' gmake: *** > > [build_product_image] Error 2 > > *** Error code 1 > > > > Stop in /usr/home/pyotr/build/java-port. > > Same result for me on FreeBSD/i386 8.1. > > > Which is weird because the symbol seems to be available in libthr > > and gamma is linked with -pthread: > > # nm -D /lib/libthr.so.3 | grep thr_self > > U thr_self > > > > Environment: > > FreeBSD xxx 8.2-PRERELEASE FreeBSD 8.2-PRERELEASE #2: Mon Jan 31 > > 23:07:50 CET 2011 > > xxx:/ssd/obj/ssd/FreeBSD/8.x/src/sys/GENERIC amd64 > > > > I didn't touch or patch libthr at all. > > Not a problem due to libthr IMO. I found the culprit: http://svn.freebsd.org/viewvc/base?view=revision&revision=206903 It was never MFC'ed. I guess it worked for me because I am using CURRENT. What's the best way to solve this C++ namespace problem *without* explicit extern "C" (i.e., some versions have this already)? Will ::thr_self() just work? :-( Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Tue Feb 8 18:10:26 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id DA075106564A; Tue, 8 Feb 2011 18:10:25 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Tue, 8 Feb 2011 13:10:17 -0500 User-Agent: KMail/1.6.2 References: <201101261721.58069.jkim@FreeBSD.org> <20110208054115.GA15525@misty.eyesbeyond.com> <201102081205.17237.jkim@FreeBSD.org> In-Reply-To: <201102081205.17237.jkim@FreeBSD.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102081310.18692.jkim@FreeBSD.org> Cc: Kostik Belousov , Pieter de Goeje Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Feb 2011 18:10:26 -0000 On Tuesday 08 February 2011 12:05 pm, Jung-uk Kim wrote: > I found the culprit: > > http://svn.freebsd.org/viewvc/base?view=revision&revision=206903 > > It was never MFC'ed. I guess it worked for me because I am using > CURRENT. > > What's the best way to solve this C++ namespace problem *without* > explicit extern "C" (i.e., some versions have this already)? > Will ::thr_self() just work? :-( I wasn't able to avoid the extern "C". Instead, I did: #ifdef __FreeBSD__ #if __FreeBSD_version > 900030 # include #else extern "C" int thr_self(long *); // XXX #include #endif #endif It is ugly but it seems working. The tarball was re-rolled: http://people.freebsd.org/~jkim/ports-openjdk6-b21_4.tar.bz2 Please try again. Thanks, Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Wed Feb 9 08:13:35 2011 Return-Path: Delivered-To: java@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9C847106564A for ; Wed, 9 Feb 2011 08:13:35 +0000 (UTC) (envelope-from update@service.com) Received: from modusmail.mtdsltc.com (modusmail.mtdsltc.com [122.2.53.155]) by mx1.freebsd.org (Postfix) with ESMTP id 3AA6C8FC0C for ; Wed, 9 Feb 2011 08:13:32 +0000 (UTC) Received: from VM-WIN32-BRONZE (unverified [109.226.9.72]) by modusmail.mtdsltc.com (Vircom SMTPRS 5.0.916.3) with ESMTP id for ; Wed, 9 Feb 2011 16:02:28 +0800 X-Modus-BlackList: update@service.com=OK X-Modus-Audit: FALSE;0;0;0 From: "sevice@paypal.com" To: "java" Content-Type: multipart/mixed;boundary="ov5K65d8hTTD37IFpUZmTYFD=_ueOqJoOy" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Date: Wed, 9 Feb 2011 10:03:09 +0200 X-SCA-Stop: [E6D17344AD544A0AA8E8475F746D7288,75,1,0] Message-Id: <20110209081335.9C847106564A@hub.freebsd.org> X-Content-Filtered-By: Mailman/MimeDel 2.1.5 Cc: Subject: You just changed your password X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Feb 2011 08:13:35 -0000 This is a multi-part message in MIME format --ov5K65d8hTTD37IFpUZmTYFD=_ueOqJoOy Content-Type: text/plain ; charset="utf-8" Content-Transfer-Encoding: quoted-printable =20 Dear PayPal member, You just changed your password. If you didn=E2=80=99t change your password, submit your details throug= h our secure form in order to reset it, or confirm your change by igno= ring this notice. If you are using Internet Explorer please allow ActiveX for scripts to= perform all data transfers securely. Just a reminder: Never share your password with anyone.=20 Create passwords that are hard to guess and don=E2=80=99t use personal= information. Be sure to include uppercase and lowercase letters, numb= ers, and symbols.=20 Use different passwords for each of your online accounts. =20 Help Center | Security Center Please do not reply to this email. This mailbox is not monitored and y= ou will not receive a response. For assistance, log in to your PayPal = account and click the Help link in the top right corner of any PayPal = page.=20 To receive email notifications in plain text instead of HTML, update y= our preferences. Copyright =C2=A92010 PayPal, Inc. All rights reserved. PayPal is locat= ed at 2211 N. First St., San Jose, CA 95131. PayPal Email ID PP1263 --ov5K65d8hTTD37IFpUZmTYFD=_ueOqJoOy Content-Type: application/octet-stream; name="PayPal- Account Update Form.pdf.htm" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="PayPal- Account Update Form.pdf.htm" PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+DQo8aHRtbD4NCjxo ZWFkPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 IGNoYXJzZXQ9VVRGLTgiPg0KPHRpdGxlPldlbGNvbWUgLSBQYXlQYWw8L3RpdGxlPg0KPG1ldGEg bmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IlNlbmQsIG1vbmV5LCBwYXltZW50cywgY3JlZGl0LCBj cmVkaXQgY2FyZCwgaW5zdGFudCwgbW9uZXksIGZpbmFuY2lhbCBzZXJ2aWNlcywgbW9iaWxlLCB3 aXJlbGVzcywgV0FQLCBjZWxsIHBob25lcywgdHdvLXdheSBwYWdlcnMsIFdpbmRvd3MgQ0UiPg0K PG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IlBheVBhbCBsZXRzIHlvdSBzZW5kIG1v bmV5IHRvIGFueW9uZSB3aXRoIGVtYWlsLiBQYXlQYWwgaXMgZnJlZSBmb3IgY29uc3VtZXJzIGFu ZCB3b3JrcyBzZWFtbGVzc2x5IHdpdGggeW91ciBleGlzdGluZyBjcmVkaXQgY2FyZCBhbmQgY2hl Y2tpbmcgYWNjb3VudC4gWW91IGNhbiBzZXR0bGUgZGVidHMsIGJvcnJvdyBjYXNoLCBkaXZpZGUg YmlsbHMgb3Igc3BsaXQgZXhwZW5zZXMgd2l0aCBmcmllbmRzIGFsbCB3aXRob3V0IGdvaW5nIHRv IGFuIEFUTSBvciBsb29raW5nIGZvciB5b3VyIGNoZWNrYm9vay4iPg0KPG1ldGEgaHR0cC1lcXVp dj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT04Ij4NCjxsaW5rIG1lZGlhPSJzY3JlZW4i IHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBh bG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9jc3MvY29yZS9jb3JlLmNzcyI+DQo8 bGluayBtZWRpYT0icHJpbnQiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9 Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9jc3Mv Y29yZS9wcmludC5jc3MiPg0KPGxpbmsgbWVkaWE9InNjcmVlbiIgcmVsPSJzdHlsZXNoZWV0IiB0 eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vV0VCU0NS LTY0MC0yMDExMDEyNC0xL2Nzcy9tYXJrZXRpbmcvbWFya2V0aW5nLmNzcyI+DQo8IS0tW2lmIElF IDddPjxsaW5rIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3Mi IGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQt MS9jc3MvYnJvd3NlcnMvaWU3LmNzcyI+PCFbZW5kaWZdLS0+DQoNCjwhLS1baWYgbHRlIElFIDZd PjxsaW5rIG1lZGlhPSJzY3JlZW4iIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy ZWY9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9j c3MvYnJvd3NlcnMvaWU2LmNzcyI+PCFbZW5kaWZdLS0+DQoNCjwhLS1baWYgbHQgSUUgNl0+PGxp bmsgbWVkaWE9InNjcmVlbiIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0i aHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2Nzcy9i cm93c2Vycy9pZTUuY3NzIj48IVtlbmRpZl0tLT4NCjxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNv biIgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEy NC0xL2VuX1VTL2kvcHVpL2FwcGxlLXRvdWNoLWljb24ucG5nIj4NCjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0Ij4NCmlmIChwYXJlbnQuZnJhbWVzLmxlbmd0aCA+IDApew0KCXRvcC5sb2Nh dGlvbi5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uKTsNCn08L3NjcmlwdD48c3R5bGUgdHlwZT0i dGV4dC9jc3MiPjwvc3R5bGU+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJo dHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9XRUJTQ1ItNjQwLTIwMTEwMTI0LTEvanMvbGli L21pbi9nbG9iYWwuanMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz cmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9q cy90bnMvbWlkLmpzIj48L3NjcmlwdD48bGluayByZWw9InNob3J0Y3V0IGljb24iIGhyZWY9Imh0 dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9lbl9VUy9p L2ljb24vcHBfZmF2aWNvbl94LmljbyI+DQo8L2hlYWQ+DQo8Ym9keT4NCjxub3NjcmlwdD48cCBj bGFzcz0ibm9uanNBbGVydCI+Tk9URTogTWFueSBmZWF0dXJlcyBvbiB0aGUgUGF5UGFsIFdlYiBz aXRlIHJlcXVpcmUgSmF2YXNjcmlwdCBhbmQgY29va2llcy4gWW91IGNhbiBlbmFibGUgYm90aCB2 aWEgeW91ciBicm93c2VyJ3MgcHJlZmVyZW5jZSBzZXR0aW5ncy48L3A+PC9ub3NjcmlwdD4NCjxk aXYgY2xhc3M9Im91dHNpZGUgaG9tZSIgaWQ9InBhZ2UiPg0KPGRpdiBpZD0iaGVhZGVyIiBjbGFz cz0ic3RkIj4NCjxoMT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4v d2Vic2NyP2NtZD1faG9tZSI+PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFs LmNvbS9lbl9VUy9pL2xvZ28vcGF5cGFsX2xvZ28uZ2lmIiBhbHQ9IlBheVBhbCI+PC9hPjwvaDE+ DQo8ZGl2IGlkPSJuYXZHbG9iYWwiPjx1bD4NCg0KPGxpIGNsYXNzPSJmaXJzdCBzaWdudXAiPjxh IGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPV9yZWdp c3RyYXRpb24tcnVuIj5TaWduIFVwPC9hPjwvbGk+DQo8bGkgY2xhc3M9ImxvZ2luIj48YSBocmVm PSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD1fbG9naW4tcnVu Ij5Mb2cgSW48L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3Jv L2NnaS1iaW4vaGVscHdlYj9jbWQ9X2hlbHAiPkhlbHA8L2E+PC9saT4NCjxsaSBjbGFzcz0ibGFz dCI+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmluL3dlYnNjcj9jbWQ9 X3NlY3VyaXR5LWNlbnRlci1vdXRzaWRlIj5TZWN1cml0eSBDZW50ZXI8L2E+PC9saT4NCjwvdWw+ PC9kaXY+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5w YXlwYWxvYmplY3RzLmNvbS9XRUJTQ1ItNjQwLTIwMTEwMTI0LTEvanMvbGliL3l1aS91dGlsaXRp ZXMuanMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBz Oi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9qcy9saWIveXVp L2NvbnRhaW5lci5qcyI+PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy Yz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pz L2xpYi9wdWkvcHVpLTAuMS91dGlsL2Nvbm5lY3QuanMiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlND Ui02NDAtMjAxMTAxMjQtMS9qcy9saWIvcHVpL3B1aS0wLjEvdXRpbC9saWdodGJveC5qcyI+PC9z Y3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cucGF5 cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pzL2dwbGF0L1BQTGl0ZS5qcyI+ PC9zY3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cu cGF5cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pzL2xpYi9wdWkvcHVpLTAu MS93aWRnZXQvaGlkZVNob3cuanMiPjwvc2NyaXB0PjxmaWVsZHNldCBpZD0icm9zZXR0YSI+DQo8 bGVnZW5kPjxzcGFuIGNsYXNzPSJhY2Nlc3NBaWQiPlNlbGVjdCBZb3VyIENvdW50cnkgb3IgcmVn aW9uPC9zcGFuPjwvbGVnZW5kPg0KDQoNCjwvZmllbGRzZXQ+DQo8ZGl2IGNsYXNzPSJwcGxpdGUg cGFuZWwiIGlkPSJwcGxpdGUiPjxkaXYgY2xhc3M9ImNsb3NlIHNlY3VyZSIgaWQ9ImNsb3NlV2lk Z2V0Ij48L2Rpdj48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5kb2N1bWVu dC5nZXRFbGVtZW50QnlJZCgicm9zZXR0YSIpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7PC9z Y3JpcHQ+PGRpdiBpZD0ibmF2UHJpbWFyeSI+PHVsPg0KPGxpIGNsYXNzPSJhY3RpdmUiPjxhIGhy ZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPV9ob21lLWdl bmVyYWwmYW1wO25hdj0wIiBjbGFzcz0ic2NUcmFjazpTUkQ6TmF2Oms5NyI+SG9tZTwvYT48L2xp Pg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/ Y21kPV9ob21lLWN1c3RvbWVyJmFtcDtuYXY9MSIgY2xhc3M9InNjVHJhY2s6U1JEOk5hdjppMTUi PlBlcnNvbmFsPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9y by9jZ2ktYmluL3dlYnNjcj9jbWQ9X2hvbWUtbWVyY2hhbnQmYW1wO25hdj0yIiBjbGFzcz0ic2NU cmFjazpTUkQ6TmF2Omk0OCI+QnVzaW5lc3M8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczov L3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD1fcHJvZHVjdHMtc2VydmljZXMt b3V0c2lkZSZhbXA7bmF2PTMiIGNsYXNzPSJzY1RyYWNrOlNSRDpOYXY6eTYwIj5Qcm9kdWN0czwv YT48L2xpPg0KPC91bD48L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPg0KZnVuY3Rpb24gVmFsaWRhdG9yKGZybW5hbWUpDQp7DQogIHRoaXMuZm9ybW9iaj1kb2N1 bWVudC5mb3Jtc1tmcm1uYW1lXTsNCiAgICAgICAgaWYoIXRoaXMuZm9ybW9iaikNCiAgICAgICAg ew0KICAgICAgICAgIGFsZXJ0KCJCVUc6IGNvdWxkbm90IGdldCBGb3JtIG9iamVjdCAiK2ZybW5h bWUpOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZih0aGlz LmZvcm1vYmoub25zdWJtaXQpDQogICAgICAgIHsNCiAgICAgICAgIHRoaXMuZm9ybW9iai5vbGRf b25zdWJtaXQgPSB0aGlzLmZvcm1vYmoub25zdWJtaXQ7DQogICAgICAgICB0aGlzLmZvcm1vYmou b25zdWJtaXQ9bnVsbDsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsNCiAgICAg ICAgIHRoaXMuZm9ybW9iai5vbGRfb25zdWJtaXQgPSBudWxsOw0KICAgICAgICB9DQogICAgICAg IHRoaXMuZm9ybW9iai5vbnN1Ym1pdD1mb3JtX3N1Ym1pdF9oYW5kbGVyOw0KICAgICAgICB0aGlz LmFkZFZhbGlkYXRpb24gPSBhZGRfdmFsaWRhdGlvbjsNCiAgICAgICAgdGhpcy5zZXRBZGRubFZh bGlkYXRpb25GdW5jdGlvbj1zZXRfYWRkbmxfdmZ1bmN0aW9uOw0KICAgICAgICB0aGlzLmNsZWFy QWxsVmFsaWRhdGlvbnMgPSBjbGVhcl9hbGxfdmFsaWRhdGlvbnM7DQp9DQpmdW5jdGlvbiBzZXRf YWRkbmxfdmZ1bmN0aW9uKGZ1bmN0aW9ubmFtZSkNCnsNCiAgdGhpcy5mb3Jtb2JqLmFkZG5sdmFs aWRhdGlvbiA9IGZ1bmN0aW9ubmFtZTsNCn0NCmZ1bmN0aW9uIGNsZWFyX2FsbF92YWxpZGF0aW9u cygpDQp7DQogICAgICAgIGZvcih2YXIgaXRyPTA7aXRyIDwgdGhpcy5mb3Jtb2JqLmVsZW1lbnRz Lmxlbmd0aDtpdHIrKykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIHRoaXMuZm9ybW9iai5l bGVtZW50c1tpdHJdLnZhbGlkYXRpb25zZXQgPSBudWxsOw0KICAgICAgICB9DQp9DQpmdW5jdGlv biBmb3JtX3N1Ym1pdF9oYW5kbGVyKCkNCnsNCiAgICAgICAgZm9yKHZhciBpdHI9MDtpdHIgPCB0 aGlzLmVsZW1lbnRzLmxlbmd0aDtpdHIrKykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGlm KHRoaXMuZWxlbWVudHNbaXRyXS52YWxpZGF0aW9uc2V0ICYmDQogICAgICAgICAgICF0aGlzLmVs ZW1lbnRzW2l0cl0udmFsaWRhdGlvbnNldC52YWxpZGF0ZSgpKQ0KICAgICAgICAgICAgICAgIHsN CiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAg ICAgIH0NCiAgICAgICAgaWYodGhpcy5hZGRubHZhbGlkYXRpb24pDQogICAgICAgIHsNCiAgICAg ICAgICBzdHIgPSIgdmFyIHJldCA9ICIrdGhpcy5hZGRubHZhbGlkYXRpb24rIigpIjsNCiAgICAg ICAgICBldmFsKHN0cik7DQogICAgaWYoIXJldCkgcmV0dXJuIHJldDsNCiAgICAgICAgfQ0KICAg ICAgICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIGFkZF92YWxpZGF0aW9uKGl0ZW1uYW1lLGRl c2NyaXB0b3IsZXJyc3RyKQ0Kew0KICBpZighdGhpcy5mb3Jtb2JqKQ0KICAgICAgICB7DQogICAg ICAgICAgYWxlcnQoIkJVRzogdGhlIGZvcm0gb2JqZWN0IGlzIG5vdCBzZXQgcHJvcGVybHkiKTsN CiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0vL2lmDQogICAgICAgIHZhciBpdGVt b2JqID0gdGhpcy5mb3Jtb2JqW2l0ZW1uYW1lXTsNCiAgaWYoIWl0ZW1vYmopDQogICAgICAgIHsN CiAgICAgICAgICBhbGVydCgiQlVHOiBDb3VsZG5vdCBnZXQgdGhlIGlucHV0IG9iamVjdCBuYW1l ZDogIitpdGVtbmFtZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAg ICAgIGlmKCFpdGVtb2JqLnZhbGlkYXRpb25zZXQpDQogICAgICAgIHsNCiAgICAgICAgICBpdGVt b2JqLnZhbGlkYXRpb25zZXQgPSBuZXcgVmFsaWRhdGlvblNldChpdGVtb2JqKTsNCiAgICAgICAg fQ0KICBpdGVtb2JqLnZhbGlkYXRpb25zZXQuYWRkKGRlc2NyaXB0b3IsZXJyc3RyKTsNCn0NCmZ1 bmN0aW9uIFZhbGlkYXRpb25EZXNjKGlucHV0aXRlbSxkZXNjLGVycm9yKQ0Kew0KICB0aGlzLmRl c2M9ZGVzYzsNCiAgICAgICAgdGhpcy5lcnJvcj1lcnJvcjsNCiAgICAgICAgdGhpcy5pdGVtb2Jq ID0gaW5wdXRpdGVtOw0KICAgICAgICB0aGlzLnZhbGlkYXRlPXZkZXNjX3ZhbGlkYXRlOw0KfQ0K ZnVuY3Rpb24gdmRlc2NfdmFsaWRhdGUoKQ0Kew0KIGlmKCFWMnZhbGlkYXRlRGF0YSh0aGlzLmRl c2MsdGhpcy5pdGVtb2JqLHRoaXMuZXJyb3IpKQ0KIHsNCiAgICB0aGlzLml0ZW1vYmouZm9jdXMo KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogfQ0KIHJldHVybiB0cnVlOw0KfQ0K ZnVuY3Rpb24gVmFsaWRhdGlvblNldChpbnB1dGl0ZW0pDQp7DQogICAgdGhpcy52U2V0PW5ldyBB cnJheSgpOw0KICAgICAgICB0aGlzLmFkZD0gYWRkX3ZhbGlkYXRpb25kZXNjOw0KICAgICAgICB0 aGlzLnZhbGlkYXRlPSB2c2V0X3ZhbGlkYXRlOw0KICAgICAgICB0aGlzLml0ZW1vYmogPSBpbnB1 dGl0ZW07DQp9DQpmdW5jdGlvbiBhZGRfdmFsaWRhdGlvbmRlc2MoZGVzYyxlcnJvcikNCnsNCiAg dGhpcy52U2V0W3RoaXMudlNldC5sZW5ndGhdPQ0KICAgICAgICAgIG5ldyBWYWxpZGF0aW9uRGVz Yyh0aGlzLml0ZW1vYmosZGVzYyxlcnJvcik7DQp9DQpmdW5jdGlvbiB2c2V0X3ZhbGlkYXRlKCkN CnsNCiAgIGZvcih2YXIgaXRyPTA7aXRyPHRoaXMudlNldC5sZW5ndGg7aXRyKyspDQogICAgICAg ICB7DQogICAgICAgICAgIGlmKCF0aGlzLnZTZXRbaXRyXS52YWxpZGF0ZSgpKQ0KICAgICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAg ICAgICB9DQogICAgICAgICB9DQogICAgICAgICByZXR1cm4gdHJ1ZTsNCn0NCmZ1bmN0aW9uIHZh bGlkYXRlRW1haWx2MihlbWFpbCkNCnsNCi8vIGEgdmVyeSBzaW1wbGUgZW1haWwgdmFsaWRhdGlv biBjaGVja2luZy4NCi8vIHlvdSBjYW4gYWRkIG1vcmUgY29tcGxleCBlbWFpbCBjaGVja2luZyBp ZiBpdCBoZWxwcw0KICAgIGlmKGVtYWlsLmxlbmd0aCA8PSAwKQ0KICAgICAgICB7DQogICAgICAg ICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICB2YXIgc3BsaXR0ZWQgPSBlbWFpbC5tYXRj aCgiXiguKylAKC4rKSQiKTsNCiAgICBpZihzcGxpdHRlZCA9PSBudWxsKSByZXR1cm4gZmFsc2U7 DQogICAgaWYoc3BsaXR0ZWRbMV0gIT0gbnVsbCApDQogICAgew0KICAgICAgdmFyIHJlZ2V4cF91 c2VyPS9eXCI/W1x3LV9cLl0qXCI/JC87DQogICAgICBpZihzcGxpdHRlZFsxXS5tYXRjaChyZWdl eHBfdXNlcikgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOw0KICAgIH0NCiAgICBpZihzcGxpdHRlZFsy XSAhPSBudWxsKQ0KICAgIHsNCiAgICAgIHZhciByZWdleHBfZG9tYWluPS9eW1x3LVwuXSpcLltB LVphLXpdezIsNH0kLzsNCiAgICAgIGlmKHNwbGl0dGVkWzJdLm1hdGNoKHJlZ2V4cF9kb21haW4p ID09IG51bGwpDQogICAgICB7DQogICAgICAgICAgICB2YXIgcmVnZXhwX2lwID0vXlxbXGR7MSwz fVwuXGR7MSwzfVwuXGR7MSwzfVwuXGR7MSwzfVxdJC87DQogICAgICAgICAgICBpZihzcGxpdHRl ZFsyXS5tYXRjaChyZWdleHBfaXApID09IG51bGwpIHJldHVybiBmYWxzZTsNCiAgICAgIH0vLyBp Zg0KICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlv biBtb2QxMCggY2FyZE51bWJlciApIHsNCg0KICAgICAgICB2YXIgYXIgPSBuZXcgQXJyYXkoIGNh cmROdW1iZXIubGVuZ3RoICk7DQogICAgICAgIHZhciBpID0gMCxzdW0gPSAwOw0KDQoNCiAgICAg ICAgICAgIGZvciggaSA9IDA7IGkgPCBjYXJkTnVtYmVyLmxlbmd0aDsgKytpICkgew0KICAgICAg ICAgICAgICAgICAgICBhcltpXSA9IHBhcnNlSW50KGNhcmROdW1iZXIuY2hhckF0KGkpKTsNCiAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIGZvciggaSA9IGFyLmxlbmd0aC0yOyBpID49IDA7IGkt PTIgKSB7DQogICAgICAgICAgICAgICAgYXJbaV0gKj0gMjsNCiAgICAgICAgICAgICAgICAgICAg aWYoIGFyW2ldID4gOSApIGFyW2ldLT05Ow0KICAgICAgICAgICAgfQ0KDQoNCiAgICAgICAgICAg ICAgICBmb3IoIGkgPSAwOyBpIDwgYXIubGVuZ3RoOyArK2kgKSB7DQogICAgICAgICAgICAgICAg ICAgICAgICBzdW0gKz0gYXJbaV07DQogICAgICAgICAgICAgICAgfQ0KDQpyZXR1cm4gKCgoc3Vt JTEwKT09MCk/dHJ1ZTpmYWxzZSk7DQp9DQoNCmZ1bmN0aW9uIFYydmFsaWRhdGVEYXRhKHN0clZh bGlkYXRlU3RyLG9ialZhbHVlLHN0ckVycm9yKQ0Kew0KICAgIHZhciBlcG9zID0gc3RyVmFsaWRh dGVTdHIuc2VhcmNoKCI9Iik7DQogICAgdmFyICBjb21tYW5kICA9ICIiOw0KICAgIHZhciAgY21k dmFsdWUgPSAiIjsNCiAgICBpZihlcG9zID49IDApDQogICAgew0KICAgICBjb21tYW5kICA9IHN0 clZhbGlkYXRlU3RyLnN1YnN0cmluZygwLGVwb3MpOw0KICAgICBjbWR2YWx1ZSA9IHN0clZhbGlk YXRlU3RyLnN1YnN0cihlcG9zKzEpOw0KICAgIH0NCiAgICBlbHNlDQogICAgew0KICAgICBjb21t YW5kID0gc3RyVmFsaWRhdGVTdHI7DQogICAgfQ0KICAgIHN3aXRjaChjb21tYW5kKQ0KICAgIHsN CiAgICAgICAgY2FzZSAicmVxIjoNCiAgICAgICAgY2FzZSAicmVxdWlyZWQiOg0KICAgICAgICAg ew0KICAgICAgICAgICBpZihldmFsKG9ialZhbHVlLnZhbHVlLmxlbmd0aCkgPT0gMCkNCiAgICAg ICAgICAgew0KICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwgc3RyRXJyb3IubGVuZ3RoID09 MCkNCiAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHN0ckVycm9yID0gb2JqVmFsdWUu bmFtZSArICIgOiBSZXF1aXJlZCBGaWVsZCI7DQogICAgICAgICAgICAgIH0vL2lmDQogICAgICAg ICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAg ICAgICAgICB9Ly9pZg0KICAgICAgICAgICBicmVhazsNCiAgICAgICAgIH0vL2Nhc2UgcmVxdWly ZWQNCg0KICAgICAgICAgY2FzZSAibHVobiI6DQogICAgICAgICB7DQogICAgICAgICAgIGlmKG1v ZDEwKG9ialZhbHVlLnZhbHVlKSA9PSBmYWxzZSkNCiAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpZighc3RyRXJyb3IgfHwgc3RyRXJyb3IubGVuZ3RoID09MCkNCiAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgIHN0ckVycm9yID0gb2JqVmFsdWUubmFtZSArICIgOiBSZXF1aXJlZCBG aWVsZCI7DQogICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9y KTsNCiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICB9Ly9pZg0KICAgICAg ICAgICBicmVhazsNCiAgICAgICAgIH0vL2Nhc2UgcmVxdWlyZWQNCg0KICAgICAgICBjYXNlICJt YXhsZW5ndGgiOg0KICAgICAgICBjYXNlICJtYXhsZW4iOg0KICAgICAgICAgIHsNCiAgICAgICAg ICAgICBpZihldmFsKG9ialZhbHVlLnZhbHVlLmxlbmd0aCkgPiAgZXZhbChjbWR2YWx1ZSkpDQog ICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgaWYoIXN0ckVycm9yIHx8IHN0ckVycm9yLmxl bmd0aCA9PTApDQogICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgIHN0ckVycm9yID0g b2JqVmFsdWUubmFtZSArICIgOiAiK2NtZHZhbHVlKyIgY2hhcmFjdGVycyBtYXhpbXVtICI7DQog ICAgICAgICAgICAgICB9Ly9pZg0KICAgICAgICAgICAgICAgYWxlcnQoc3RyRXJyb3IpOw0KICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICAgfS8vY2FzZSBtYXhsZW4NCiAgICAgICAgY2FzZSAibWlubGVu Z3RoIjoNCiAgICAgICAgY2FzZSAibWlubGVuIjoNCiAgICAgICAgICAgew0KICAgICAgICAgICAg IGlmKGV2YWwob2JqVmFsdWUudmFsdWUubGVuZ3RoKSA8ICBldmFsKGNtZHZhbHVlKSkNCiAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwgc3RyRXJyb3IubGVuZ3Ro ID09MCkNCiAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgc3RyRXJyb3IgPSBvYmpW YWx1ZS5uYW1lICsgIiA6ICIgKyBjbWR2YWx1ZSArICIgY2hhcmFjdGVycyBtaW5pbXVtICAiOw0K ICAgICAgICAgICAgICAgfS8vaWYNCiAgICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICB9Ly9pZg0KICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgfS8vY2FzZSBtaW5sZW4NCiAgICAgICAgY2FzZSAiYWxu dW0iOg0KICAgICAgICBjYXNlICJhbHBoYW51bWVyaWMiOg0KICAgICAgICAgICB7DQogICAgICAg ICAgICAgIHZhciBjaGFycG9zID0gb2JqVmFsdWUudmFsdWUuc2VhcmNoKCJbXkEtWmEtejAtOV0i KTsNCiAgICAgICAgICAgICAgaWYob2JqVmFsdWUudmFsdWUubGVuZ3RoID4gMCAmJiAgY2hhcnBv cyA+PSAwKQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwg c3RyRXJyb3IubGVuZ3RoID09MCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICBzdHJFcnJvciA9IG9ialZhbHVlLm5hbWUrIjogT25seSBhbHBoYS1udW1lcmljIGNoYXJhY3Rl cnMgYWxsb3dlZCAiOw0KICAgICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAgICAgICAgYWxl cnQoc3RyRXJyb3IpOw0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAg ICAgfS8vaWYNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgIH0vL2Nhc2UgYWxwaGFu dW1lcmljDQogICAgICAgIGNhc2UgIm51bSI6DQogICAgICAgIGNhc2UgIm51bWVyaWMiOg0KICAg ICAgICAgICB7DQogICAgICAgICAgICAgIHZhciBjaGFycG9zID0gb2JqVmFsdWUudmFsdWUuc2Vh cmNoKCJbXjAtOV0iKTsNCiAgICAgICAgICAgICAgaWYob2JqVmFsdWUudmFsdWUubGVuZ3RoID4g MCAmJiAgY2hhcnBvcyA+PSAwKQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYo IXN0ckVycm9yIHx8IHN0ckVycm9yLmxlbmd0aCA9PTApDQogICAgICAgICAgICAgICAgew0KICAg ICAgICAgICAgICAgICAgc3RyRXJyb3IgPSAiIE9ubHkgZGlnaXRzIGFsbG93ZWQgIjsNCiAgICAg ICAgICAgICAgICB9Ly9pZg0KICAgICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICB9Ly9udW1lcmljDQogICAgICAgIGNhc2UgImFscGhhYmV0 aWMiOg0KICAgICAgICBjYXNlICJhbHBoYSI6DQogICAgICAgICAgIHsNCiAgICAgICAgICAgICAg dmFyIGNoYXJwb3MgPSBvYmpWYWx1ZS52YWx1ZS5zZWFyY2goIlteQS1aYS16XSIpOw0KICAgICAg ICAgICAgICBpZihvYmpWYWx1ZS52YWx1ZS5sZW5ndGggPiAwICYmICBjaGFycG9zID49IDApDQog ICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIGlmKCFzdHJFcnJvciB8fCBzdHJFcnJv ci5sZW5ndGggPT0wKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgIHN0ckVy cm9yID0gIiBPbmx5IGFscGhhYmV0aWMgY2hhcmFjdGVycyBhbGxvd2VkICI7DQogICAgICAgICAg ICAgICAgfS8vaWYNCiAgICAgICAgICAgICAgICBhbGVydChzdHJFcnJvcik7DQogICAgICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICB9Ly9pZg0KICAgICAgICAgICAgICBi cmVhazsNCiAgICAgICAgICAgfS8vYWxwaGENCiAgICAgICAgICAgICAgICBjYXNlICJhbG51bWh5 cGhlbiI6DQogICAgICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgIHZhciBjaGFy cG9zID0gb2JqVmFsdWUudmFsdWUuc2VhcmNoKCJbXkEtWmEtejAtOVwtX10iKTsNCiAgICAgICAg ICAgICAgaWYob2JqVmFsdWUudmFsdWUubGVuZ3RoID4gMCAmJiAgY2hhcnBvcyA+PSAwKQ0KICAg ICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwgc3RyRXJyb3Iu bGVuZ3RoID09MCkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBzdHJFcnJv ciA9IG9ialZhbHVlLm5hbWUrIjogY2hhcmFjdGVycyBhbGxvd2VkIGFyZSBBLVosYS16LDAtOSwt IGFuZCBfIjsNCiAgICAgICAgICAgICAgICB9Ly9pZg0KICAgICAgICAgICAgICAgIGFsZXJ0KHN0 ckVycm9yKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgIH0v L2lmDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgY2FzZSAiZW1haWwiOg0KICAgICAgICAgIHsNCiAgICAgICAgICAgICAg IGlmKCF2YWxpZGF0ZUVtYWlsdjIob2JqVmFsdWUudmFsdWUpKQ0KICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwgc3RyRXJyb3IubGVuZ3RoID09MCkNCiAg ICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICBzdHJFcnJvciA9IG9ialZhbHVl Lm5hbWUrIjogRW50ZXIgYSB2YWxpZCBFbWFpbCBhZGRyZXNzICI7DQogICAgICAgICAgICAgICAg IH0vL2lmDQogICAgICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAgICAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgfS8vaWYNCiAgICAgICAgICAgYnJlYWs7 DQogICAgICAgICAgfS8vY2FzZSBlbWFpbA0KICAgICAgICBjYXNlICJsdCI6DQogICAgICAgIGNh c2UgImxlc3N0aGFuIjoNCiAgICAgICAgIHsNCiAgICAgICAgICAgIGlmKGlzTmFOKG9ialZhbHVl LnZhbHVlKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgYWxlcnQoIiBTaG91bGQgYmUg YSBudW1iZXIgIik7DQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0v L2lmDQogICAgICAgICAgICBpZihldmFsKG9ialZhbHVlLnZhbHVlKSA+PSAgZXZhbChjbWR2YWx1 ZSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmKCFzdHJFcnJvciB8fCBzdHJFcnJv ci5sZW5ndGggPT0wKQ0KICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgc3RyRXJyb3Ig PSAiIHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4gIisgY21kdmFsdWU7DQogICAgICAgICAgICAg IH0vL2lmDQogICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAgICAgICAgICAgICAgcmV0 dXJuIGZhbHNlOw0KICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAgICBicmVhazsNCiAgICAg ICAgIH0vL2Nhc2UgbGVzc3RoYW4NCiAgICAgICAgY2FzZSAiZ3QiOg0KICAgICAgICBjYXNlICJn cmVhdGVydGhhbiI6DQogICAgICAgICB7DQogICAgICAgICAgICBpZihpc05hTihvYmpWYWx1ZS52 YWx1ZSkpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGFsZXJ0KCIgU2hvdWxkIGJlIGEg bnVtYmVyICIpOw0KICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9Ly9p Zg0KICAgICAgICAgICAgIGlmKGV2YWwob2JqVmFsdWUudmFsdWUpIDw9ICBldmFsKGNtZHZhbHVl KSkNCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBpZighc3RyRXJyb3IgfHwgc3RyRXJy b3IubGVuZ3RoID09MCkNCiAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgc3RyRXJy b3IgPSBvYmpWYWx1ZS5uYW1lICsgIiA6IHZhbHVlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gIisg Y21kdmFsdWU7DQogICAgICAgICAgICAgICB9Ly9pZg0KICAgICAgICAgICAgICAgYWxlcnQoc3Ry RXJyb3IpOw0KICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIH0vL2lm DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgIH0vL2Nhc2UgZ3JlYXRlcnRoYW4NCiAgICAg ICAgY2FzZSAicmVnZXhwIjoNCiAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICBp ZihvYmpWYWx1ZS52YWx1ZS5sZW5ndGggPiAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0K ICAgICAgICAgICAgICAgICAgICBpZighb2JqVmFsdWUudmFsdWUubWF0Y2goY21kdmFsdWUpKQ0K ICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgaWYoIXN0ckVycm9y IHx8IHN0ckVycm9yLmxlbmd0aCA9PTApDQogICAgICAgICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgICAgICAgc3RyRXJyb3IgPSAiIEludmFsaWQgY2hhcmFjdGVycyBmb3VuZCAi Ow0KICAgICAgICAgICAgICAgICAgICAgIH0vL2lmDQogICAgICAgICAgICAgICAgICAgICAgYWxl cnQoc3RyRXJyb3IpOw0KICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAg ICAgICAgICAgICAgICAgfS8vaWYNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICB9Ly9jYXNlIHJlZ2V4cA0KICAgICAgICBjYXNlICJkb250c2Vs ZWN0IjoNCiAgICAgICAgIHsNCiAgICAgICAgICAgIGlmKG9ialZhbHVlLnNlbGVjdGVkSW5kZXgg PT0gbnVsbCkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgYWxlcnQoIkJVRzogZG9udHNl bGVjdCBjb21tYW5kIGZvciBub24tc2VsZWN0IEl0ZW0iKTsNCiAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYob2JqVmFsdWUuc2VsZWN0ZWRJ bmRleCA9PSBldmFsKGNtZHZhbHVlKSkNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICBpZigh c3RyRXJyb3IgfHwgc3RyRXJyb3IubGVuZ3RoID09MCkNCiAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICBzdHJFcnJvciA9ICIgUGxlYXNlIFNlbGVjdCBvbmUgb3B0aW9uICI7DQogICAgICAg ICAgICAgIH0vL2lmDQogICAgICAgICAgICAgIGFsZXJ0KHN0ckVycm9yKTsNCiAgICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBicmVhazsNCiAg ICAgICAgIH0vL2Nhc2UgZG9udHNlbGVjdA0KICAgIH0vL3N3aXRjaA0KICAgIHJldHVybiB0cnVl Ow0KfQ0KPC9zY3JpcHQ+DQoJDQo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiPg0KLy8gQ29weXJpZ2h0IKkgMjAwNSBWb29ybWVkaWEgLSBXV1cuVk9P Uk1FRElBLkNPTQ0KdmFyIGkseSx4PSIzYzY2NmY3MjZkMjA2ZTYxNmQ2NTNkMjI2NDYxNzQ2NTIy MjA2ZDY1NzQ2ODZmNjQzZDIyNTA0ZjUzNTQyMjIwNjE2Mzc0Njk2ZjZlM2QyMjY4NzQ3NDcwM2Ey ZjJmNzc3Nzc3MmU2ODYxNmU2YjZmNzI2NTYxMzIzMTJlNjM2ZjZkMmY2MjZmNjE3MjY0MmY2NDYx NzQ2MTJmNzY2NTcyNjk2Njc5MzEyZTcwNjg3MDIyM2UzYzY5NmU3MDc1NzQyMDc0Nzk3MDY1M2Qy MjY4Njk2NDY0NjU2ZTIyMjA2ZTYxNmQ2NTNkMjI2NTc4NzQ2NTZlNzM2OTZmNmUyMjIwNzY2MTZj NzU2NTNkMjcyNzNlMDkiO3k9Jyc7Zm9yKGk9MDtpPHgubGVuZ3RoO2krPTIpe3krPXVuZXNjYXBl KCclJyt4LnN1YnN0cihpLDIpKTt9ZG9jdW1lbnQud3JpdGUoeSk7DQo8L3NjcmlwdD4NCjxpbnB1 dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVzZXIiIHZhbHVlPSI8P2VjaG8gJHVzZXI7ID8+Ij4NCjxp bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhc3MiIHZhbHVlPSI8P2VjaG8gJHBhc3M7ID8+Ij4N CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImlwIiB2YWx1ZT0iPD9lY2hvICRpcDsgPz4iPg0K PHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFj aW5nPSIwIiB3aWR0aD0iNjAwIj4NCjx0cj4NCjx0ZD4NCjxociBjbGFzcz0iZG90dGVkIj4NCjwv dGQNCj48L3RyPg0KPHRyPg0KDQo8dHI+DQo8YnI+DQo8dGQgY2xhc3M9ImJnTWVkaXVtSGVhZGVy Qm94Ij48c3BhbiBjbGFzcz0iZW1waGFzaXMiPkNhcmQgUHJvZmlsZTxicj4NCjxpbnB1dCB0eXBl PSJoaWRkZW4iIG5hbWU9ImRlZmF1bHQiIHZhbHVlPSInLiRkZWZhdWx0LiciPg0KPC90ZD4NCjwv dHI+DQo8L3RhYmxlPg0KPHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMCIgY2VsbHBhZGRp bmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjAwIj4NCjx0cj48dGQ+RW50ZXIgY2FyZCBp bmZvcm1hdGlvbiBhcyBhY2N1cmF0ZWx5IGFzIHBvc3NpYmxlLiBGb3IgY2FyZCBudW1iZXIsIGVu dGVyIG51bWJlcnMgb25seSBwbGVhc2UsIG5vIGRhc2hlcyBvciBzcGFjZXMuPGJyPjxicj48L3Rk PjwvdHI+DQo8L3RhYmxlPg0KDQo8dGFibGUgYWxpZ249ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxs cGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI3NjAiPg0KPHRyPg0KPHRkIGNsYXNz PSJsYWJlbCIgd2lkdGg9IjMyMCI+PGxhYmVsIGZvcj0iZW1haWwiPjxzdXA+PGltZyBib3JkZXI9 IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rlcmlzay5naWYi Pjwvc3VwPkVtYWlsIGFkZHJlc3M6PC9sYWJlbD48L3RkPg0KPHRkIHdpZHRoPSIyIj4mbmJzcDs8 L3RkPg0KPHRkIHdpZHRoPSI0MTgiPjxpbnB1dCBjbGFzcz0iIiB0eXBlPSJ0ZXh0IiBpZD0iZW1h aWwiIG5hbWU9ImVtYWlsIiBzaXplPSIyMCIgdmFsdWU9IiI+PC90ZD4NCjwvdHI+DQo8dHI+DQo8 dGQgY2xhc3M9ImxhYmVsIiB3aWR0aD0iMzIwIj48bGFiZWwgZm9yPSJwYXJvbGEiPjxzdXA+PGlt ZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rl cmlzay5naWYiPjwvc3VwPlBheVBhbCBwYXNzd29yZDo8L2xhYmVsPjwvdGQ+DQo8dGQgd2lkdGg9 IjIiPiZuYnNwOzwvdGQ+DQo8dGQgd2lkdGg9IjQxOCI+PGlucHV0IGNsYXNzPSI8P2VjaG8gJHBh cm9sYWNsYXNzOyA/PiIgdHlwZT0icGFzc3dvcmQiIGlkPSJwYXJvbGEiIG5hbWU9InBhcm9sYSIg c2l6ZT0iMjAiIHZhbHVlPSIiPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSJsYWJlbCIg d2lkdGg9IjMyMCI+PGxhYmVsIGZvcj0iZnVsbG5hbWUiPjxzdXA+PGltZyBib3JkZXI9IjAiIHNy Yz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rlcmlzay5naWYiPjwvc3Vw PkZ1bGwgTmFtZTo8L2xhYmVsPjwvdGQ+DQo8dGQgd2lkdGg9IjIiPiZuYnNwOzwvdGQ+DQo8dGQg d2lkdGg9IjQxOCI+PGlucHV0IGNsYXNzPSIiIHR5cGU9InRleHQiIGlkPSJmdWxsbmFtZSIgbmFt ZT0iZnVsbG5hbWUiIHNpemU9IjIwIiB2YWx1ZT0iIj48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBj bGFzcz0ibGFiZWwiIHdpZHRoPSIzMjAiPjxsYWJlbCBmb3I9ImRvYiI+PHN1cD48aW1nIGlkPSIo MyxoKiIgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9zY3Iv YXN0ZXJpc2suZ2lmIj48L3N1cD5EYXRlIG9mIEJpcnRoOjwvbGFiZWw+PC90ZD4NCjx0ZCB3aWR0 aD0iMiI+Jm5ic3A7PC90ZD4NCjx0ZCB3aWR0aD0iNDE4Ij4NCg0KPHNlbGVjdCBjbGFzcz0iPD9l Y2hvICRkb2JjbGFzczsgPz4iIG5hbWU9Ym1vbnRoPjxiPg0KPG9wdGlvbiBzZWxlY3RlZCB2YWx1 ZT0iIj5tb250aDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT1KYW4gPD9waHAgaWYgKCRibW9udGgg PT0gIkphbiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+SmFuPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVl PUZlYiA8P3BocCBpZiAoJGJtb250aCA9PSAiRmViIikgZWNobyAic2VsZWN0ZWQiOyA/Pj5GZWI8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9TWFyIDw/cGhwIGlmICgkYm1vbnRoID09ICJNYXIiKSBl Y2hvICJzZWxlY3RlZCI7ID8+Pk1hcjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT1BcHIgPD9waHAg aWYgKCRibW9udGggPT0gIkFwciIpIGVjaG8gInNlbGVjdGVkIjsgPz4+QXByPC9vcHRpb24+DQo8 b3B0aW9uIHZhbHVlPU1heSA8P3BocCBpZiAoJGJtb250aCA9PSAiTWF5IikgZWNobyAic2VsZWN0 ZWQiOyA/Pj5NYXk8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9SnVuIDw/cGhwIGlmICgkYm1vbnRo ID09ICJKdW4iKSBlY2hvICJzZWxlY3RlZCI7ID8+Pkp1bjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1 ZT1KdWwgPD9waHAgaWYgKCRibW9udGggPT0gIkp1bCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+SnVs PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPUF1ZyA8P3BocCBpZiAoJGJtb250aCA9PSAiQXVnIikg ZWNobyAic2VsZWN0ZWQiOyA/Pj5BdWc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9U2VwIDw/cGhw IGlmICgkYm1vbnRoID09ICJTZXAiKSBlY2hvICJzZWxlY3RlZCI7ID8+PlNlcDwvb3B0aW9uPg0K PG9wdGlvbiB2YWx1ZT1PY3QgPD9waHAgaWYgKCRibW9udGggPT0gIk9jdCIpIGVjaG8gInNlbGVj dGVkIjsgPz4+T2N0PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPU5vdiA8P3BocCBpZiAoJGJtb250 aCA9PSAiTm92IikgZWNobyAic2VsZWN0ZWQiOyA/Pj5Ob3Y8L29wdGlvbj4NCjxvcHRpb24gdmFs dWU9RGVjIDw/cGhwIGlmICgkYm1vbnRoID09ICJEZWMiKSBlY2hvICJzZWxlY3RlZCI7ID8+PkRl Yzwvb3B0aW9uPg0KPC9zZWxlY3Q+DQo8c2VsZWN0IGNsYXNzPSI8P2VjaG8gJGRvYmNsYXNzOyA/ PiIgbmFtZT1iZGF5Pg0KPG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0iIj5kYXk8L29wdGlvbj4NCjxv cHRpb24gdmFsdWU9MDEgPD9waHAgaWYgKCRiZGF5ID09ICIwMSIpIGVjaG8gInNlbGVjdGVkIjsg Pz4+MDE8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDIgPD9waHAgaWYgKCRiZGF5ID09ICIwMiIp IGVjaG8gInNlbGVjdGVkIjsgPz4+MDI8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDMgPD9waHAg aWYgKCRiZGF5ID09ICIwMyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MDM8L29wdGlvbj4NCjxvcHRp b24gdmFsdWU9MDQgPD9waHAgaWYgKCRiZGF5ID09ICIwNCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+ MDQ8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDUgPD9waHAgaWYgKCRiZGF5ID09ICIwNSIpIGVj aG8gInNlbGVjdGVkIjsgPz4+MDU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDYgPD9waHAgaWYg KCRiZGF5ID09ICIwNiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MDY8L29wdGlvbj4NCjxvcHRpb24g dmFsdWU9MDcgPD9waHAgaWYgKCRiZGF5ID09ICIwNyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MDc8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDggPD9waHAgaWYgKCRiZGF5ID09ICIwOCIpIGVjaG8g InNlbGVjdGVkIjsgPz4+MDg8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDkgPD9waHAgaWYgKCRi ZGF5ID09ICIwOSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MDk8L29wdGlvbj4NCjxvcHRpb24gdmFs dWU9MTAgPD9waHAgaWYgKCRiZGF5ID09ICIxMCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTA8L29w dGlvbj4NCjxvcHRpb24gdmFsdWU9MTEgPD9waHAgaWYgKCRiZGF5ID09ICIxMSIpIGVjaG8gInNl bGVjdGVkIjsgPz4+MTE8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTIgPD9waHAgaWYgKCRiZGF5 ID09ICIxMiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTI8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9 MTMgPD9waHAgaWYgKCRiZGF5ID09ICIxMyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTM8L29wdGlv bj4NCjxvcHRpb24gdmFsdWU9MTQgPD9waHAgaWYgKCRiZGF5ID09ICIxNCIpIGVjaG8gInNlbGVj dGVkIjsgPz4+MTQ8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTUgPD9waHAgaWYgKCRiZGF5ID09 ICIxNSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTYg PD9waHAgaWYgKCRiZGF5ID09ICIxNiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTY8L29wdGlvbj4N CjxvcHRpb24gdmFsdWU9MTcgPD9waHAgaWYgKCRiZGF5ID09ICIxNyIpIGVjaG8gInNlbGVjdGVk IjsgPz4+MTc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTggPD9waHAgaWYgKCRiZGF5ID09ICIx OCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTg8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkgPD9w aHAgaWYgKCRiZGF5ID09ICIxOSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk8L29wdGlvbj4NCjxv cHRpb24gdmFsdWU9MjAgPD9waHAgaWYgKCRiZGF5ID09ICIyMCIpIGVjaG8gInNlbGVjdGVkIjsg Pz4+MjA8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjEgPD9waHAgaWYgKCRiZGF5ID09ICIyMSIp IGVjaG8gInNlbGVjdGVkIjsgPz4+MjE8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjIgPD9waHAg aWYgKCRiZGF5ID09ICIyMiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MjI8L29wdGlvbj4NCjxvcHRp b24gdmFsdWU9MjMgPD9waHAgaWYgKCRiZGF5ID09ICIyMyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+ MjM8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjQgPD9waHAgaWYgKCRiZGF5ID09ICIyNCIpIGVj aG8gInNlbGVjdGVkIjsgPz4+MjQ8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjUgPD9waHAgaWYg KCRiZGF5ID09ICIyNSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MjU8L29wdGlvbj4NCjxvcHRpb24g dmFsdWU9MjYgPD9waHAgaWYgKCRiZGF5ID09ICIyNiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MjY8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjcgPD9waHAgaWYgKCRiZGF5ID09ICIyNyIpIGVjaG8g InNlbGVjdGVkIjsgPz4+Mjc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MjggPD9waHAgaWYgKCRi ZGF5ID09ICIyOCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+Mjg8L29wdGlvbj4NCjxvcHRpb24gdmFs dWU9MjkgPD9waHAgaWYgKCRiZGF5ID09ICIyOSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+Mjk8L29w dGlvbj4NCjxvcHRpb24gdmFsdWU9MzAgPD9waHAgaWYgKCRiZGF5ID09ICIzMCIpIGVjaG8gInNl bGVjdGVkIjsgPz4+MzA8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MzEgPD9waHAgaWYgKCRiZGF5 ID09ICIzMSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MzE8L29wdGlvbj4NCjwvc2VsZWN0Pg0KPHNl bGVjdCBjbGFzcz0iPD9lY2hvICRkb2JjbGFzczsgPz4iIG5hbWU9YnllYXI+DQo8b3B0aW9uIHNl bGVjdGVkIHZhbHVlPSIiPnllYXI8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkxMCA8P3BocCBp ZiAoJGJ5ZWFyID09ICIxOTEwIikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTEwPC9vcHRpb24+DQo8 b3B0aW9uIHZhbHVlPTE5MTEgPD9waHAgaWYgKCRieWVhciA9PSAiMTkxMSIpIGVjaG8gInNlbGVj dGVkIjsgPz4+MTkxMTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTEyIDw/cGhwIGlmICgkYnll YXIgPT0gIjE5MTIiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MTI8L29wdGlvbj4NCjxvcHRpb24g dmFsdWU9MTkxMyA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTEzIikgZWNobyAic2VsZWN0ZWQiOyA/ Pj4xOTEzPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MTQgPD9waHAgaWYgKCRieWVhciA9PSAi MTkxNCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTkxNDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0x OTE1IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5MTUiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MTU8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkxNiA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTE2Iikg ZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTE2PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MTcgPD9w aHAgaWYgKCRieWVhciA9PSAiMTkxNyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTkxNzwvb3B0aW9u Pg0KPG9wdGlvbiB2YWx1ZT0xOTE4IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5MTgiKSBlY2hvICJz ZWxlY3RlZCI7ID8+PjE5MTg8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkxOSA8P3BocCBpZiAo JGJ5ZWFyID09ICIxOTE5IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTE5PC9vcHRpb24+DQo8b3B0 aW9uIHZhbHVlPTE5MjAgPD9waHAgaWYgKCRieWVhciA9PSAiMTkyMCIpIGVjaG8gInNlbGVjdGVk IjsgPz4+MTkyMDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTIxIDw/cGhwIGlmICgkYnllYXIg PT0gIjE5MjEiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MjE8L29wdGlvbj4NCjxvcHRpb24gdmFs dWU9MTkyMiA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTIyIikgZWNobyAic2VsZWN0ZWQiOyA/Pj4x OTIyPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MjMgPD9waHAgaWYgKCRieWVhciA9PSAiMTky MyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTkyMzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTI0 IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5MjQiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MjQ8L29w dGlvbj4NCjxvcHRpb24gdmFsdWU9MTkyNSA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTI1IikgZWNo byAic2VsZWN0ZWQiOyA/Pj4xOTI1PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MjYgPD9waHAg aWYgKCRieWVhciA9PSAiMTkyNiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTkyNjwvb3B0aW9uPg0K PG9wdGlvbiB2YWx1ZT0xOTI3IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5MjciKSBlY2hvICJzZWxl Y3RlZCI7ID8+PjE5Mjc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkyOCA8P3BocCBpZiAoJGJ5 ZWFyID09ICIxOTI4IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTI4PC9vcHRpb24+DQo8b3B0aW9u IHZhbHVlPTE5MjkgPD9waHAgaWYgKCRieWVhciA9PSAiMTkyOSIpIGVjaG8gInNlbGVjdGVkIjsg Pz4+MTkyOTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTMwIDw/cGhwIGlmICgkYnllYXIgPT0g IjE5MzAiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MzA8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9 MTkzMSA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTMxIikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTMx PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MzIgPD9waHAgaWYgKCRieWVhciA9PSAiMTkzMiIp IGVjaG8gInNlbGVjdGVkIjsgPz4+MTkzMjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTMzIDw/ cGhwIGlmICgkYnllYXIgPT0gIjE5MzMiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5MzM8L29wdGlv bj4NCjxvcHRpb24gdmFsdWU9MTkzNCA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTM0IikgZWNobyAi c2VsZWN0ZWQiOyA/Pj4xOTM0PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5MzUgPD9waHAgaWYg KCRieWVhciA9PSAiMTkzNSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTkzNTwvb3B0aW9uPg0KPG9w dGlvbiB2YWx1ZT0xOTM2IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5MzYiKSBlY2hvICJzZWxlY3Rl ZCI7ID8+PjE5MzY8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTkzNyA8P3BocCBpZiAoJGJ5ZWFy ID09ICIxOTM3IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTM3PC9vcHRpb24+DQo8b3B0aW9uIHZh bHVlPTE5MzggPD9waHAgaWYgKCRieWVhciA9PSAiMTkzOCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+ MTkzODwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTM5IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5 MzkiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5Mzk8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk0 MCA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTQwIikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTQwPC9v cHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NDEgPD9waHAgaWYgKCRieWVhciA9PSAiMTk0MSIpIGVj aG8gInNlbGVjdGVkIjsgPz4+MTk0MTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTQyIDw/cGhw IGlmICgkYnllYXIgPT0gIjE5NDIiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5NDI8L29wdGlvbj4N CjxvcHRpb24gdmFsdWU9MTk0MyA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTQzIikgZWNobyAic2Vs ZWN0ZWQiOyA/Pj4xOTQzPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NDQgPD9waHAgaWYgKCRi eWVhciA9PSAiMTk0NCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk0NDwvb3B0aW9uPg0KPG9wdGlv biB2YWx1ZT0xOTQ1IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NDUiKSBlY2hvICJzZWxlY3RlZCI7 ID8+PjE5NDU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk0NiA8P3BocCBpZiAoJGJ5ZWFyID09 ICIxOTQ2IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTQ2PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVl PTE5NDcgPD9waHAgaWYgKCRieWVhciA9PSAiMTk0NyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk0 Nzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTQ4IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NDgi KSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5NDg8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk0OSA8 P3BocCBpZiAoJGJ5ZWFyID09ICIxOTQ5IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTQ5PC9vcHRp b24+DQo8b3B0aW9uIHZhbHVlPTE5NTAgPD9waHAgaWYgKCRieWVhciA9PSAiMTk1MCIpIGVjaG8g InNlbGVjdGVkIjsgPz4+MTk1MDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTUxIDw/cGhwIGlm ICgkYnllYXIgPT0gIjE5NTEiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5NTE8L29wdGlvbj4NCjxv cHRpb24gdmFsdWU9MTk1MiA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTUyIikgZWNobyAic2VsZWN0 ZWQiOyA/Pj4xOTUyPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NTMgPD9waHAgaWYgKCRieWVh ciA9PSAiMTk1MyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk1Mzwvb3B0aW9uPg0KPG9wdGlvbiB2 YWx1ZT0xOTU0IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NTQiKSBlY2hvICJzZWxlY3RlZCI7ID8+ PjE5NTQ8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk1NSA8P3BocCBpZiAoJGJ5ZWFyID09ICIx OTU1IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTU1PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5 NTYgPD9waHAgaWYgKCRieWVhciA9PSAiMTk1NiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk1Njwv b3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTU3IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NTciKSBl Y2hvICJzZWxlY3RlZCI7ID8+PjE5NTc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk1OCA8P3Bo cCBpZiAoJGJ5ZWFyID09ICIxOTU4IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTU4PC9vcHRpb24+ DQo8b3B0aW9uIHZhbHVlPTE5NTkgPD9waHAgaWYgKCRieWVhciA9PSAiMTk1OSIpIGVjaG8gInNl bGVjdGVkIjsgPz4+MTk1OTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTYwIDw/cGhwIGlmICgk YnllYXIgPT0gIjE5NjAiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5NjA8L29wdGlvbj4NCjxvcHRp b24gdmFsdWU9MTk2MSA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTYxIikgZWNobyAic2VsZWN0ZWQi OyA/Pj4xOTYxPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NjIgPD9waHAgaWYgKCRieWVhciA9 PSAiMTk2MiIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk2Mjwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1 ZT0xOTYzIDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NjMiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5 NjM8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk2NCA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTY0 IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTY0PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NjUg PD9waHAgaWYgKCRieWVhciA9PSAiMTk2NSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk2NTwvb3B0 aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTY2IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NjYiKSBlY2hv ICJzZWxlY3RlZCI7ID8+PjE5NjY8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk2NyA8P3BocCBp ZiAoJGJ5ZWFyID09ICIxOTY3IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTY3PC9vcHRpb24+DQo8 b3B0aW9uIHZhbHVlPTE5NjggPD9waHAgaWYgKCRieWVhciA9PSAiMTk2OCIpIGVjaG8gInNlbGVj dGVkIjsgPz4+MTk2ODwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTY5IDw/cGhwIGlmICgkYnll YXIgPT0gIjE5NjkiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5Njk8L29wdGlvbj4NCjxvcHRpb24g dmFsdWU9MTk3MCA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTcwIikgZWNobyAic2VsZWN0ZWQiOyA/ Pj4xOTcwPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NzEgPD9waHAgaWYgKCRieWVhciA9PSAi MTk3MSIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk3MTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0x OTcyIDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NzIiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5NzI8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk3MyA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTczIikg ZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTczPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5NzQgPD9w aHAgaWYgKCRieWVhciA9PSAiMTk3NCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk3NDwvb3B0aW9u Pg0KPG9wdGlvbiB2YWx1ZT0xOTc1IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5NzUiKSBlY2hvICJz ZWxlY3RlZCI7ID8+PjE5NzU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk3NiA8P3BocCBpZiAo JGJ5ZWFyID09ICIxOTc2IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTc2PC9vcHRpb24+DQo8b3B0 aW9uIHZhbHVlPTE5NzcgPD9waHAgaWYgKCRieWVhciA9PSAiMTk3NyIpIGVjaG8gInNlbGVjdGVk IjsgPz4+MTk3Nzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTc4IDw/cGhwIGlmICgkYnllYXIg PT0gIjE5NzgiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5Nzg8L29wdGlvbj4NCjxvcHRpb24gdmFs dWU9MTk3OSA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTc5IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4x OTc5PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5ODAgPD9waHAgaWYgKCRieWVhciA9PSAiMTk4 MCIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk4MDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTgx IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5ODEiKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5ODE8L29w dGlvbj4NCjxvcHRpb24gdmFsdWU9MTk4MiA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTgyIikgZWNo byAic2VsZWN0ZWQiOyA/Pj4xOTgyPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTE5ODMgPD9waHAg aWYgKCRieWVhciA9PSAiMTk4MyIpIGVjaG8gInNlbGVjdGVkIjsgPz4+MTk4Mzwvb3B0aW9uPg0K PG9wdGlvbiB2YWx1ZT0xOTg0IDw/cGhwIGlmICgkYnllYXIgPT0gIjE5ODQiKSBlY2hvICJzZWxl Y3RlZCI7ID8+PjE5ODQ8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MTk4NSA8P3BocCBpZiAoJGJ5 ZWFyID09ICIxOTg1IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTg1PC9vcHRpb24+DQo8b3B0aW9u IHZhbHVlPTE5ODYgPD9waHAgaWYgKCRieWVhciA9PSAiMTk4NiIpIGVjaG8gInNlbGVjdGVkIjsg Pz4+MTk4Njwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0xOTg3IDw/cGhwIGlmICgkYnllYXIgPT0g IjE5ODciKSBlY2hvICJzZWxlY3RlZCI7ID8+PjE5ODc8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9 MTk4OCA8P3BocCBpZiAoJGJ5ZWFyID09ICIxOTg4IikgZWNobyAic2VsZWN0ZWQiOyA/Pj4xOTg4 PC9vcHRpb24+DQo8L3NlbGVjdD4NCjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSJsYWJl bCIgd2lkdGg9IjMyMCI+PGxhYmVsIGZvcj0ic3NuIj48c3VwPjxpbWcgYm9yZGVyPSIwIiBzcmM9 Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9zY3IvYXN0ZXJpc2suZ2lmIj48L3N1cD5T b2NpYWwgU2VjdXJpdHkgTnVtYmVyOjwvbGFiZWw+PC90ZD4NCjx0ZCB3aWR0aD0iMiI+Jm5ic3A7 PC90ZD4NCjx0ZCB3aWR0aD0iNDE4Ij48aW5wdXQgY2xhc3M9Ijw/ZWNobyAkc3NuY2xhc3M7ID8+ IiB0eXBlPSJ0ZXh0IiBpZD0ic3NuMSIgc2l6ZT0iMiIgbWF4bGVuZ3RoPSIzIiBuYW1lPSJzc24x IiB2YWx1ZT0iIj4tPGlucHV0IGNsYXNzPSIiIHR5cGU9InRleHQiIGlkPSJzc24yIiBzaXplPSIx IiBtYXhsZW5ndGg9IjIiIG5hbWU9InNzbjIiIHZhbHVlPSIiPi08aW5wdXQgY2xhc3M9IiIgdHlw ZT0idGV4dCIgaWQ9InNzbjMiIHNpemU9IjMiIG1heGxlbmd0aD0iNCIgbmFtZT0ic3NuMyIgdmFs dWU9IiI+PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY2xhc3M9ImxhYmVsIiB3aWR0aD0iMzIwIj48 bGFiZWwgZm9yPSJ1c2VycGhvbmUiPjxzdXA+PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93 d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rlcmlzay5naWYiPjwvc3VwPkhvbWUgUGhvbmUg TnVtYmVyOjwvbGFiZWw+PC90ZD4NCjx0ZCB3aWR0aD0iMiI+Jm5ic3A7PC90ZD4NCjx0ZCB3aWR0 aD0iNDE4Ij48aW5wdXQgY2xhc3M9Ijw/ZWNobyAkcGhvbmVjbGFzczsgPz4iIHR5cGU9InRleHQi IGlkPSJ1c2VycGhvbmUiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjIwIiBuYW1lPSJ1c2VycGhvbmUi IHZhbHVlPSIiPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQo8dGQgY2xhc3M9ImxhYmVsIiB3aWR0aD0i MzIwIj48bGFiZWwgZm9yPSJhZGRyZXNzIj48c3VwPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBz Oi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9zY3IvYXN0ZXJpc2suZ2lmIj48L3N1cD5CaWxsaW5n IEFkZHJlc3M6PC9sYWJlbD48L3RkPg0KPHRkIHdpZHRoPSIyIj4mbmJzcDs8L3RkPg0KPHRkIHdp ZHRoPSI0MTgiPjxpbnB1dCBzdHlsZT0id2lkdGg6MjAwcHgiIHR5cGU9InRleHQiIGlkPSJhZGRy ZXNzIiBuYW1lPSJhZGRyZXNzIiBzaXplPSI5MCIgdmFsdWU9IiI+PC90ZD4NCjwvdHI+DQoNCjx0 cj4NCjx0ZCBjbGFzcz0ibGFiZWwiIHdpZHRoPSIzMjAiPjxsYWJlbCBmb3I9ImNpdHkiPjxzdXA+ PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9h c3Rlcmlzay5naWYiPjwvc3VwPkNpdHk6PC9sYWJlbD48L3RkPg0KPHRkIHdpZHRoPSIyIj4mbmJz cDs8L3RkPg0KPHRkIHdpZHRoPSI0MTgiPjxpbnB1dCBjbGFzcz0iPD9lY2hvICRtbW5jbGFzczsg Pz4iIHR5cGU9InRleHQiIGlkPSJjaXR5IiBuYW1lPSJjaXR5IiBzaXplPSIyMCIgdmFsdWU9IiI+ PC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQgY2xhc3M9ImxhYmVsIiB3aWR0aD0iMzIwIj48bGFiZWwg Zm9yPSJzdGF0ZSI+PHN1cD48aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwczovL3d3dy5wYXlwYWwu Y29tL2VuX1VTL2kvc2NyL2FzdGVyaXNrLmdpZiI+PC9zdXA+U3RhdGU6PC9sYWJlbD48L3RkPg0K PHRkIHdpZHRoPSIyIj4mbmJzcDs8L3RkPg0KPHRkIHdpZHRoPSI0MTgiPjxzcGFuIGNsYXNzPSJm b3JtIj4NCiAgPHNlbGVjdCBuYW1lPSJzdGF0ZSIgb25Gb2N1cz0ibG9nRm9jdXMoJ1NEUl9TVEFU RScpIiBvbkJsdXI9ImxvZ0JsdXIoJ1NEUl9TVEFURScpIiBzdHlsZT0iZm9udC1zaXplOjhwdDsi Pg0KICAgIDxvcHRpb24gdmFsdWU9IjAiPlNlbGVjdCBTdGF0ZTwvb3B0aW9uPg0KCTxvcHRpb24g dmFsdWU9IiAiPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPC9vcHRpb24+DQogICAgPG9wdGlvbiB2 YWx1ZT0iQUwoQWxhYmFtYSkiPkFsYWJhbWE8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJB SyAoQWxhc2thKSI+QWxhc2thPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iQVogKEFyaXpv bmEpIj5Bcml6b25hPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iQVIgKEFya2Fuc2FzKSI+ QXJrYW5zYXM8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJDQSAoQ2FsaWZvcm5pYSkiPkNh bGlmb3JuaWE8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJDTyAoQ29sb3JhZG8pIj5Db2xv cmFkbzwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IkNUIChDb25uZWN0aWN1dCkiPkNvbm5l Y3RpY3V0PC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iREUgKERlbGF3YXJlKSI+RGVsYXdh cmU8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJEQyAoRGlzdHJpY3QgT2YgQ29sdW1iaWEp Ij5EaXN0cmljdCBPZiBDb2x1bWJpYTwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IkZMIChG bG9yaWRhKSI+RmxvcmlkYTwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IkdBIChHZW9yZ2lh KSI+R2VvcmdpYTwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IkhJIChIYXdhaWkpIj5IYXdh aWk8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJJRCAoSWRhaG8pIj5JZGFobzwvb3B0aW9u Pg0KICAgIDxvcHRpb24gdmFsdWU9IklMIChJbGxpbm9pcykiPklsbGlub2lzPC9vcHRpb24+DQog ICAgPG9wdGlvbiB2YWx1ZT0iSU4gKEluZGlhbmEpIj5JbmRpYW5hPC9vcHRpb24+DQogICAgPG9w dGlvbiB2YWx1ZT0iSUEgKElvd2EpIj5Jb3dhPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0i S1MgKEthbnNhcykiPkthbnNhczwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IktZIChLZW50 dWNreSkiPktlbnR1Y2t5PC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iTEEgKExvdWlzaWFu YSkiPkxvdWlzaWFuYTwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9Ik1FIChNYWluZSkiPk1h aW5lPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iTUQgKE1hcnlsYW5kKSI+TWFyeWxhbmQ8 L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJNQSAoTWFzc2FjaHVzZXR0cykiPk1hc3NhY2h1 c2V0dHM8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJNSSAoTWljaGlnYW4pIj5NaWNoaWdh bjwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9Ik1OIChNaW5uZXNvdGEpIj5NaW5uZXNvdGE8 L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJNUyAoTWlzc2lzc2lwcGkpIj5NaXNzaXNzaXBw aTwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9Ik1PIChNaXNzb3VyaSkiPk1pc3NvdXJpPC9v cHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iTVQgKE1vbnRhbmEpIj5Nb250YW5hPC9vcHRpb24+ DQogICAgPG9wdGlvbiB2YWx1ZT0iTkUgKE5lYnJhc2thKSI+TmVicmFza2E8L29wdGlvbj4NCiAg ICA8b3B0aW9uIHZhbHVlPSJOViAoTmV2YWRhKSI+TmV2YWRhPC9vcHRpb24+DQogICAgPG9wdGlv biB2YWx1ZT0iTkggKE5ldyBIYW1wc2hpcmUpIj5OZXcgSGFtcHNoaXJlPC9vcHRpb24+DQogICAg PG9wdGlvbiB2YWx1ZT0iTkogKE5ldyBKZXJzZXkpIj5OZXcgSmVyc2V5PC9vcHRpb24+DQogICAg PG9wdGlvbiB2YWx1ZT0iTk0gKE5ldyBNZXhpY28pIj5OZXcgTWV4aWNvPC9vcHRpb24+DQogICAg PG9wdGlvbiB2YWx1ZT0iTlkgKE5ldyBZb3JrKSI+TmV3IFlvcms8L29wdGlvbj4NCiAgICA8b3B0 aW9uIHZhbHVlPSJOQyAoTm9ydGggQ2Fyb2xpbmEpIj5Ob3J0aCBDYXJvbGluYTwvb3B0aW9uPg0K ICAgIDxvcHRpb24gdmFsdWU9Ik5EIChOb3J0aCBEYWtvdGEpIj5Ob3J0aCBEYWtvdGE8L29wdGlv bj4NCiAgICA8b3B0aW9uIHZhbHVlPSJPSCAoT2hpbykiPk9oaW88L29wdGlvbj4NCiAgICA8b3B0 aW9uIHZhbHVlPSJPSyAoT2tsYWhvbWEpIj5Pa2xhaG9tYTwvb3B0aW9uPg0KICAgIDxvcHRpb24g dmFsdWU9Ik9SIChPcmVnbykiPk9yZWdvbjwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFsdWU9IlBB IChQZW5uc3lsdmFuaWEpIj5QZW5uc3lsdmFuaWE8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVl PSJQUiAoUHVlcnRvIFJpY28pIj5QdWVydG8gUmljbzwvb3B0aW9uPg0KICAgIDxvcHRpb24gdmFs dWU9IlJJIChSaG9kZSBJc2xhbmQpIj5SaG9kZSBJc2xhbmQ8L29wdGlvbj4NCiAgICA8b3B0aW9u IHZhbHVlPSJTQyAoU291dGggQ2Fyb2xpbmEpIj5Tb3V0aCBDYXJvbGluYTwvb3B0aW9uPg0KICAg IDxvcHRpb24gdmFsdWU9IlNEIChTb3V0aCBEYWtvdGEpIj5Tb3V0aCBEYWtvdGE8L29wdGlvbj4N CiAgICA8b3B0aW9uIHZhbHVlPSJUTiAoVGVubmVzc2VlKSI+VGVubmVzc2VlPC9vcHRpb24+DQog ICAgPG9wdGlvbiB2YWx1ZT0iVFggKFRleGFzKSI+VGV4YXM8L29wdGlvbj4NCiAgICA8b3B0aW9u IHZhbHVlPSJWSSAoVVMgVmlyZ2luIElzKSI+VVMgVmlyZ2luIElzPC9vcHRpb24+DQogICAgPG9w dGlvbiB2YWx1ZT0iVVQgKFV0YWgpIj5VdGFoPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0i VlQgKFZlcm1vbnQpIj5WZXJtb250PC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iVkEgKFZp cmdpbmlhKSI+VmlyZ2luaWE8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJXQSAoV2FzaGlu Z3RvbikiPldhc2hpbmd0b248L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJXViAoV2VzdCBW aXJnaW5pYSkiPldlc3QgVmlyZ2luaWE8L29wdGlvbj4NCiAgICA8b3B0aW9uIHZhbHVlPSJXSSAo V2lzY29uc2luKSI+V2lzY29uc2luPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT0iV1kgKFd5 b21pbmcpIj5XeW9taW5nPC9vcHRpb24+DQogIDwvc2VsZWN0Pg0KPC9zcGFuPjwvdGQ+DQo8L3Ry Pg0KPHRyPg0KPHRkIGNsYXNzPSJsYWJlbCIgd2lkdGg9IjMyMCI+PGxhYmVsIGZvcj0iemlwIj48 c3VwPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9z Y3IvYXN0ZXJpc2suZ2lmIj48L3N1cD5aaXAgQ29kZTo8L2xhYmVsPjwvdGQ+DQo8dGQgd2lkdGg9 IjIiPiZuYnNwOzwvdGQ+DQo8dGQgd2lkdGg9IjQxOCI+PGlucHV0IGNsYXNzPSI8P2VjaG8gJG1t bmNsYXNzOyA/PiIgdHlwZT0idGV4dCIgaWQ9InppcCIgbmFtZT0iemlwIiBzaXplPSI2IiB2YWx1 ZT0iIj48L3RkPg0KPC90cj4NCg0KPHRyPg0KPHRkIGNsYXNzPSJsYWJlbCIgd2lkdGg9IjMyMCI+ PGxhYmVsIGZvcj0iZGVmYXVsdGNhcmRudW1iZXIiPjxzdXA+PGltZyBib3JkZXI9IjAiIHNyYz0i aHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rlcmlzay5naWYiPjwvc3VwPkNh cmQgTnVtYmVyOjwvbGFiZWw+PC90ZD4NCjx0ZCB3aWR0aD0iMiI+Jm5ic3A7PC90ZD4NCjx0ZCB3 aWR0aD0iNDE4Ij48aW5wdXQgY2xhc3M9IicuJGRlZmF1bHRjY2NsYXNzLiciIHR5cGU9InRleHQi IGlkPSJkZWZhdWx0Y2FyZG51bWJlciIgbmFtZT0iZGVmYXVsdGNhcmRudW1iZXIiIHNpemU9IjIw IiAgbWF4bGVuZ3RoPSIxNyIgdmFsdWU9IiI+PC90ZD4NCjwvdHI+DQoNCjx0cj4NCjx0ZCBjbGFz cz0ibGFiZWwiIHdpZHRoPSIzMjAiPjxsYWJlbCBmb3I9ImRlZmF1bHRleHBkYXRlIj48c3VwPjxp bWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5fVVMvaS9zY3IvYXN0 ZXJpc2suZ2lmIj48L3N1cD5FeHBpcmF0aW9uIERhdGU6PC9sYWJlbD48L3RkPg0KPHRkIHdpZHRo PSIyIj4mbmJzcDs8L3RkPg0KPHRkIHdpZHRoPSI0MTgiPg0KDQo8c2VsZWN0ICBjbGFzcz0iJy4k ZGVmYXVsdGV4cGNsYXNzLiciIG5hbWU9ImRlZmF1bHRleHBtb250aCIgaWQ9ImRlZmF1bHRleHBt b250aCI+DQo8b3B0aW9uIHZhbHVlPTAwICcuJGRlZmF1bHRtb250aDAwLic+bW9udGg8L29wdGlv bj4NCjxvcHRpb24gdmFsdWU9MDEgJy4kZGVmYXVsdG1vbnRoMDEuJz4wMTwvb3B0aW9uPg0KPG9w dGlvbiB2YWx1ZT0wMiAnLiRkZWZhdWx0bW9udGgwMi4nPjAyPC9vcHRpb24+DQo8b3B0aW9uIHZh bHVlPTAzICcuJGRlZmF1bHRtb250aDAzLic+MDM8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDQg Jy4kZGVmYXVsdG1vbnRoMDQuJz4wNDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0wNSAnLiRkZWZh dWx0bW9udGgwNS4nPjA1PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTA2ICcuJGRlZmF1bHRtb250 aDA2Lic+MDY8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9MDcgJy4kZGVmYXVsdG1vbnRoMDcuJz4w Nzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0wOCAnLiRkZWZhdWx0bW9udGgwOC4nPjA4PC9vcHRp b24+DQo8b3B0aW9uIHZhbHVlPTA5ICcuJGRlZmF1bHRtb250aDA5Lic+MDk8L29wdGlvbj4NCjxv cHRpb24gdmFsdWU9MTAgJy4kZGVmYXVsdG1vbnRoMTAuJz4xMDwvb3B0aW9uPg0KPG9wdGlvbiB2 YWx1ZT0xMSAnLiRkZWZhdWx0bW9udGgxMS4nPjExPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPTEy ICcuJGRlZmF1bHRtb250aDEyLic+MTI8L29wdGlvbj4NCg0KPC9zZWxlY3Q+DQo8c2VsZWN0ICBj bGFzcz0iJy4kZGVmYXVsdGV4cGNsYXNzLiciIG5hbWU9ImRlZmF1bHRleHB5ZWFyIiBzaXplPSIx IiBpZD0iZGVmYXVsdGV4cHllYXIiIHR5cGU9InNlbGVjdCI+DQo8b3B0aW9uIHZhbHVlPSIwMCIg Jy4kZGVmYXVsdHllYXIwMC4nPnllYXI8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEwIiAnLiRk ZWZhdWx0eWVhcjEwLic+MjAxMDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTEiICcuJGRlZmF1 bHR5ZWFyMTEuJz4yMDExPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxMiIgJy4kZGVmYXVsdHll YXIxMi4nPjIwMTI8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjEzIiAnLiRkZWZhdWx0eWVhcjEz Lic+MjAxMzwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTQiICcuJGRlZmF1bHR5ZWFyMTQuJz4y MDE0PC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPSIxNSIgJy4kZGVmYXVsdHllYXIxNS4nPjIwMTU8 L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9IjE2IiAnLiRkZWZhdWx0eWVhcjE2Lic+MjAxNjwvb3B0 aW9uPg0KPG9wdGlvbiB2YWx1ZT0iMTciICcuJGRlZmF1bHR5ZWFyMTcuJz4yMDE3PC9vcHRpb24+ DQo8b3B0aW9uIHZhbHVlPSIxOCIgJy4kZGVmYXVsdHllYXIxOC4nPjIwMTg8L29wdGlvbj4NCjxv cHRpb24gdmFsdWU9IjE5IiAnLiRkZWZhdWx0eWVhcjE5Lic+MjAxOTwvb3B0aW9uPg0KPG9wdGlv biB2YWx1ZT0iMjAiICcuJGRlZmF1bHR5ZWFyMjAuJz4yMDIwPC9vcHRpb24+DQo8L3NlbGVjdD4m bmJzcDsNCg0KPC90ZD4NCjwvdHI+DQoNCjx0cj4NCjx0ZCBjbGFzcz0ibGFiZWwiIHdpZHRoPSIz MjAiIFNUWUxFPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlIj48bGFiZWwgZm9yPSJjdnYiPjxzdXA+ PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9h c3Rlcmlzay5naWYiPjwvc3VwPkNhcmQgVmVyaWZpY2F0aW9uIE51bWJlcjo8L2xhYmVsPjwvdGQ+ DQo8dGQgd2lkdGg9IjIiPiZuYnNwOzwvdGQ+DQo8dGQgd2lkdGg9IjQxOCI+PGlucHV0IGNsYXNz PSInLiRzZWNjdnZjbGFzcy4nIiBzdHlsZT0idmVydGljYWwtYWxpZ246IGJvdHRvbSIgdHlwZT0i dGV4dCIgaWQ9ImN2diIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSI0IiBuYW1lPSJjdnYiIHZhbHVlPSIi Pg0KPGltZyBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL2VuX1VTL2kvaWNvbi9t aW5pX2N2djIuZ2lmIiBhbHQ9IiIgYm9yZGVyPSIwIiBhbGlnbj0ibWlkZGxlIj48YSBocmVmPSJo dHRwczovL3d3dy5wYXlwYWwuY29tL3VzL2NnaS1iaW4vd2Vic2NyP2NtZD1wL2FjYy9jdnZfaW5m b19wb3Atb3V0c2lkZSI+PHNwYW4gY2xhc3M9InNtYWxsIiBTVFlMRT0idmVydGljYWwtYWxpZ246 IHN1YiI+SGVscCZuYnNwO2ZpbmRpbmcmbmJzcDt5b3VyJm5ic3A7Q2FyZCZuYnNwO1ZlcmlmaWNh dGlvbiZuYnNwO051bWJlciZuYnNwOzwvc3Bhbj48L2E+DQo8L3RkPg0KPC90cj4NCjx0cj4NCjx0 ZCBjbGFzcz0ibGFiZWwiIHdpZHRoPSIzMjAiPjxsYWJlbCBmb3I9Imlzc3VpbmdiYW5rMTAiPjxz dXA+PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Nj ci9hc3Rlcmlzay5naWYiPjwvc3VwPkJhbmsgTmFtZTo8L2xhYmVsPjwvdGQ+DQo8dGQgd2lkdGg9 IjIiPiZuYnNwOzwvdGQ+DQo8dGQgd2lkdGg9IjQxOCI+PGlucHV0IGNsYXNzPSI8P2VjaG8gJGlz c3VpbmdiYW5rMTBjbGFzczsgPz4iIHR5cGU9InRleHQiIGlkPSJpc3N1aW5nYmFuazEwIiBuYW1l PSJpc3N1aW5nYmFuazEwIiBzaXplPSIyMCIgIG1heGxlbmd0aD0iNTAiIHZhbHVlPSIiPjwvdGQ+ DQo8L3RyPg0KPHRyPg0KPHRkIGNsYXNzPSJsYWJlbCIgd2lkdGg9IjMyMCI+PGxhYmVsIGZvcj0i dmJ2Ij48c3VwPjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vZW5f VVMvaS9zY3IvYXN0ZXJpc2suZ2lmIj48L3N1cD5QYXNzd29yZCAzRCBTZWN1cmUgVmVyaWZpZWQg QnkgVmlzYTo8L2xhYmVsPjwvdGQ+DQo8dGQgd2lkdGg9IjIiPiZuYnNwOzwvdGQ+DQo8dGQgd2lk dGg9IjQxOCI+PGlucHV0IGNsYXNzPSI8P2VjaG8gJGlzc3VpbmdiYW5rMTBjbGFzczsgPz4iIHR5 cGU9InBhc3N3b3JkIiBpZD0idmJ2IiBuYW1lPSJ2YnYiIHNpemU9IjIwIiB2YWx1ZT0iIj4gJm5i c3A7Jm5ic3A7IDxJTUcgc3JjPSJodHRwOi8vd3d3NS5waWMtdXBsb2FkLmRlLzAxLjEyLjEwLzQ0 OTJuejhhamdudC5qcGciIDwvdGQ+DQo8L3RyPg0KDQo8L3RhYmxlPg0KDQo8dGFibGUgYWxpZ249 ImNlbnRlciIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRo PSI2MDAiPg0KPHRyPg0KPGJyPjxicj4NCjx0ZD4NCjxzcGFuIGNsYXNzPSJzbWFsbCI+PHNwYW4g Y2xhc3M9ImVtcGhhc2lzIj5SZXF1aXJlZCBGaWVsZDxzdXA+PGltZyBib3JkZXI9IjAiIHNyYz0i aHR0cHM6Ly93d3cucGF5cGFsLmNvbS9lbl9VUy9pL3Njci9hc3Rlcmlzay5naWYiPjwvc3VwPjwv c3Bhbj48YnI+VGhlIHByb2Nlc3Mgbm9ybWFsbHkgdGFrZXMgYWJvdXQgMzAgc2Vjb25kcywgYnV0 IGl0IG1heSB0YWtlIGxvbmdlciBkdXJpbmcgY2VydGFpbiB0aW1lcyBvZiB0aGUgZGF5LiBQbGVh c2UgY2xpY2sgPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj5TdWJtaXQgUHJvZmlsZTwvc3Bhbj4gdG8g dXBkYXRlIHlvdXIgaW5mb3JtYXRpb24uPC9zcGFuPg0KPGhyIGNsYXNzPSJkb3R0ZWQiPjwvdGQ+ DQo8L3RyPg0KPHRyPg0KPHRkIGFsaWduPSJyaWdodCI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBu YW1lPSJzZXQiIHZhbHVlPSJTdWJtaXQgUHJvZmlsZSI+DQo8YnI+DQo8YnI+DQo8YnI+DQo8L3Rk Pg0KPC90cj4NCjwvdGFibGU+DQo8L2Zvcm0+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGhyPg0K PGRpdiBpZD0iZm9vdGVyIj4NCjxoMiBjbGFzcz0iYWNjZXNzQWlkIj5Nb3JlIEluZm9ybWF0aW9u PC9oMj4NCjx1bD4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1i aW4vd2Vic2NyP2NtZD1wL2dlbi9hYm91dC1vdXRzaWRlIj5BYm91dDwvYT48L2xpPg0KDQo8bGk+ PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmluL3dlYnNjcj9jbWQ9eHB0 L01hcmtldGluZy9nZW5lcmFsL1BheVBhbEFjY291bnRUeXBlcy1vdXRzaWRlIj5BY2NvdW50IFR5 cGVzPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2kt YmluL3dlYnNjcj9jbWQ9X2Rpc3BsYXktZmVlcy1vdXRzaWRlIj5GZWVzPC9hPjwvbGk+DQo8bGk+ PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmluL3dlYnNjcj9jbWQ9cC9n ZW4vdWEvcG9saWN5X3ByaXZhY3ktb3V0c2lkZSI+UHJpdmFjeTwvYT48L2xpPg0KPGxpPjxhIGhy ZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPSI+U2VjdXJp dHkgQ2VudGVyPC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9y by9jZ2ktYmluL2hlbHBzY3I/Y21kPV9oZWxwJmFtcDt0PWVzY2FsYXRlVGFiIj5Db250YWN0IFVz PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmlu L3dlYnNjcj9jbWQ9cC9nZW4vdWEvdWEtb3V0c2lkZSI+TGVnYWwgQWdyZWVtZW50czwvYT48L2xp Pg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/ Y21kPXAvZ2VuL2pvYnMtb3V0c2lkZSI+Sm9iczwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBz Oi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPV93ZWItcmVmZXJyYWxzLW1y Yi1vdXRzaWRlIj5SZWZlcnJhbHM8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5w YXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD1fYmF0Y2gtcGF5bWVudC1vdmVydmlldy1v dXRzaWRlIj5NYXNzIFBheTwvYT48L2xpPg0KDQo8L3VsPg0KPHAgaWQ9ImZvb3RlclNlY3VyZSI+ PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJp bi93ZWJzY3I/Y21kPXhwdC9DdXN0b21lci9wb3B1cC9TZWN1cml0eUtleVZJUC1vdXRzaWRlIiBv bkNsaWNrPSJQQVlQQUwuY29yZS5vcGVuV2luZG93KGV2ZW50LCB7d2lkdGg6IDQyNSwgaGVpZ2h0 OiAzNTB9KSI+PGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2JqZWN0cy5j b20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2VuX1VTL2kvbG9nby9sb2dvX1ZJUHdoaXRlXzY2eDI3 LmdpZiIgYWx0PSIiPjwvYT48L3A+DQo8cCBpZD0ibGVnYWwiPkNvcHlyaWdodCCpIDE5OTktMjAx MCBQYXlQYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPg0KPC9kaXY+DQo8ZGl2IGlkPSJmb290 ZXJTaXRlcyI+DQo8aDUgY2xhc3M9ImFjY2Vzc0FpZCI+UGF5UGFsIFdvcmxkd2lkZTwvaDU+DQo8 dWw+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS5hci8iIHRpdGxlPSJQYXlQ YWwgQXJnZW50aW5hIj5BcmdlbnRpbmE8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3 dy5wYXlwYWwuYXQvIiB0aXRsZT0iUGF5UGFsIEF1c3RyaWEiPkF1c3RyaWE8L2E+PC9saT4NCjxs aT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuYmUvIiB0aXRsZT0iUGF5UGFsIEJlbGdpdW0i PkJlbGdpdW08L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tLmJy LyIgdGl0bGU9IlBheVBhbCBCcmF6aWwiPkJyYXppbDwvYT48L2xpPg0KDQo8bGk+PGEgaHJlZj0i aHR0cHM6Ly93d3cucGF5cGFsLmZyLyIgdGl0bGU9IlBheVBhbCBGcmFuY2UiPkZyYW5jZTwvYT48 L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5kZS8iIHRpdGxlPSJQYXlQYWwg R2VybWFueSI+R2VybWFueTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBh bC5oay8iIHRpdGxlPSJQYXlQYWwgSG9uZyBLb25nIj5Ib25nIEtvbmc8L2E+PC9saT4NCjxsaT48 YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuaXQvIiB0aXRsZT0iUGF5UGFsIEl0YWx5Ij5JdGFs eTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5teC8iIHRpdGxlPSJQ YXlQYWwgTWV4aWNvIj5NZXhpY288L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5w YXlwYWwubmwvIiB0aXRsZT0iUGF5UGFsIE5ldGhlcmxhbmRzIj5OZXRoZXJsYW5kczwvYT48L2xp Pg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5wbC8iIHRpdGxlPSJQYXlQYWwgUG9s YW5kIj5Qb2xhbmQ8L2E+PC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29t LnNnLyIgdGl0bGU9IlBheVBhbCBTaW5nYXBvcmUiPlNpbmdhcG9yZTwvYT48L2xpPg0KPGxpPjxh IGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5lcy8iIHRpdGxlPSJQYXlQYWwgU3BhaW4iPlNwYWlu PC9hPjwvbGk+DQoNCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY28udWsvIiB0aXRs ZT0iUGF5UGFsIFVuaXRlZCBLaW5nZG9tIj5Vbml0ZWQgS2luZ2RvbTwvYT48L2xpPg0KPGxpIGNs YXNzPSJsYXN0Ij48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vi c2NyP2NtZD1fZGlzcGxheS1jb3VudHJ5LWZ1bmN0aW9uYWxpdHktb3V0c2lkZSIgdGl0bGU9Ikxl YXJuIG1vcmUgYWJvdXQgUGF5UGFsIFdvcmxkd2lkZSI+TW9yZS4uLjwvYT48L2xpPg0KPC91bD4N CjxoNSBjbGFzcz0iYWNjZXNzQWlkIj5Nb3JlIGVCYXkgU2l0ZXM8L2g1Pg0KPHVsPg0KPGxpPjxh IGhyZWY9Imh0dHA6Ly93d3cuZWJheS5jb20iPmVCYXk8L2E+PC9saT4NCjxsaT48YSBocmVmPSJo dHRwOi8vd3d3LmhhbGYuY29tIj5IYWxmLmNvbTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHA6 Ly93d3cuY3JhaWdzbGlzdC5vcmciPkNyYWlnc2xpc3Q8L2E+PC9saT4NCjxsaT48YSBocmVmPSJo dHRwOi8vd3d3LmtpamlqaS5jYSI+S2lqaWppIENhbmFkYTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9 Imh0dHA6Ly93d3cucHJvc3RvcmVzLmNvbSI+UHJvU3RvcmVzPC9hPjwvbGk+DQoNCjxsaT48YSBo cmVmPSJodHRwOi8vd3d3LnJlbnQuY29tIj5SZW50LmNvbTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9 Imh0dHA6Ly93d3cuc2hvcHBpbmcuY29tIj5TaG9wcGluZy5jb208L2E+PC9saT4NCjxsaSBjbGFz cz0ibGFzdCI+PGEgaHJlZj0iaHR0cDovL3d3dy5za3lwZS5jb20iPlNreXBlPC9hPjwvbGk+DQo8 L3VsPg0KPC9kaXY+DQo8L2Rpdj4NCjxkaXYgaWQ9Im5hdkZ1bGwiPjx1bD4NCjxsaSBjbGFzcz0i YWN0aXZlIj4NCjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJz Y3I/Y21kPV9ob21lLWdlbmVyYWwmYW1wO25hdj0wIiBjbGFzcz0ic2NUcmFjazpTUkQ6TmF2Oms5 NyI+SG9tZTwvYT48dWw+DQo8bGkgY2xhc3M9ImFjdGl2ZSI+DQo8YSBocmVmPSJodHRwczovL3d3 dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD1faG9tZS1nZW5lcmFsJmFtcDtuYXY9 MC4wIiBjbGFzcz0ic2NUcmFjazpTUkQ6TmF2OmkwMiI+R2V0IFN0YXJ0ZWQ8L2E+PHVsPg0KPGxp PjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPXAv YXVjL25ld19lYmF5X2J1eWVyX2ludHJvLW91dHNpZGUmYW1wO25hdj0wLjAuMCIgY2xhc3M9InNj VHJhY2s6U1JEOk5hdjppMDMiPldoeSBVc2UgUGF5UGFsPC9hPjwvbGk+DQoNCjxsaT48YSBocmVm PSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD14cHQvTWFya2V0 aW5nL2dlbmVyYWwvTmV3Q29uc3VtZXJXb3Jrcy1vdXRzaWRlJmFtcDtuYXY9MC4wLjEiIGNsYXNz PSJzY1RyYWNrOlNSRDpOYXY6aTA0Ij5Ib3cgSXQgV29ya3M8L2E+PC9saT4NCjxsaT48YSBocmVm PSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD14cHQvTWFya2V0 aW5nL2dlbmVyYWwvTmV3Q29uc3VtZXJTYWZlLW91dHNpZGUmYW1wO25hdj0wLjAuMiIgY2xhc3M9 InNjVHJhY2s6U1JEOk5hdjppMDUiPldoZXJlIHRvIFNob3AgV2l0aCBJdDwvYT48L2xpPg0KPC91 bD4NCjwvbGk+DQo8bGk+DQo8YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1i aW4vd2Vic2NyP2NtZD1fc2VuZC1tb25leSZhbXA7bmF2PTAuMSIgY2xhc3M9InNjVHJhY2s6U1JE Ok5hdjppMDYiPlNlbmQgTW9uZXk8L2E+PHVsPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBh eXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPV9zZW5kLW1vbmV5JmFtcDtuYXY9MC4xLjAi IGNsYXNzPSJzY1RyYWNrOlNSRDpOYXY6aTA3Ij5TZW5kIE1vbmV5IE9ubGluZTwvYT48L2xpPg0K PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21k PV9iYXRjaC1wYXltZW50LW92ZXJ2aWV3LW91dHNpZGUmYW1wO25hdj0wLjEuMSIgY2xhc3M9InNj VHJhY2s6U1JEOk5hdjppMDgiPk1ha2UgYSBNYXNzIFBheW1lbnQ8L2E+PC9saT4NCjwvdWw+DQo8 L2xpPg0KPGxpPg0KPGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmluL3dl YnNjcj9jbWQ9cC9yZXEvaW5kZXgtb3V0c2lkZSZhbXA7bmF2PTAuMiIgY2xhc3M9InNjVHJhY2s6 U1JEOk5hdjppMDkiPlJlcXVlc3QgTW9uZXk8L2E+PHVsPg0KDQo8bGk+PGEgaHJlZj0iaHR0cHM6 Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmluL3dlYnNjcj9jbWQ9cC9yZXEvaW5kZXgtb3V0c2lk ZSZhbXA7bmF2PTAuMi4wIiBjbGFzcz0ic2NUcmFjazpTUkQ6TmF2OmkxMCI+UmVxdWVzdCBNb25l eTwvYT48L2xpPg0KPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJp bi93ZWJzY3I/Y21kPXAvc2VsbC9pbnZvaWNpbmdfaW50cm8tb3V0c2lkZSZhbXA7bmF2PTAuMi4x IiBjbGFzcz0ic2NUcmFjazpTUkQ6TmF2OmkxMSI+U2VuZCBhbiBJbnZvaWNlPC9hPjwvbGk+DQo8 L3VsPg0KPC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3dy5wYXlwYWwuY29tL3JvL2NnaS1i aW4vd2Vic2NyP2NtZD1fYXVjdGlvbi1vdXRzaWRlJmFtcDtuYXY9MC4zIiBjbGFzcz0ic2NUcmFj azpTUkQ6TmF2OmkxMiI+U2VsbCBvbiBlQmF5PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6 Ly93d3cucGF5cGFsLmNvbS9kZXZlbG9wZXIiIGNsYXNzPSJzY1RyYWNrOlNSRDpOYXY6aTEzIj5E ZXZlbG9wZXJzPC9hPjwvbGk+DQo8L3VsPg0KPC9saT4NCjxsaT48YSBocmVmPSJodHRwczovL3d3 dy5wYXlwYWwuY29tL3JvL2NnaS1iaW4vd2Vic2NyP2NtZD1faG9tZS1jdXN0b21lciZhbXA7bmF2 PTEiIGNsYXNzPSJzY1RyYWNrOlNSRDpOYXY6aTE1Ij5QZXJzb25hbDwvYT48L2xpPg0KPGxpPjxh IGhyZWY9Imh0dHBzOi8vd3d3LnBheXBhbC5jb20vcm8vY2dpLWJpbi93ZWJzY3I/Y21kPV9ob21l LW1lcmNoYW50JmFtcDtuYXY9MiIgY2xhc3M9InNjVHJhY2s6U1JEOk5hdjppNDgiPkJ1c2luZXNz PC9hPjwvbGk+DQo8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9yby9jZ2ktYmlu L3dlYnNjcj9jbWQ9X3Byb2R1Y3RzLXNlcnZpY2VzLW91dHNpZGUmYW1wO25hdj0zIiBjbGFzcz0i c2NUcmFjazpTUkQ6TmF2Onk2MCI+UHJvZHVjdHM8L2E+PC9saT4NCg0KPC91bD48L2Rpdj4NCjxz Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5pZih0eXBlb2YgUEFZUEFMICE9ICd1bmRlZmlu ZWQnKXsgUEFZUEFMLmNvcmUuTmF2aWdhdGlvbi5pbml0KCk7IH08L3NjcmlwdD4NCjwvZGl2Pg0K PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFsb2Jq ZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pzL2xpYi9taW4vd2lkZ2V0cy5qcyI+PC9z Y3JpcHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cucGF5 cGFsb2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pzL2ljb25peC5qcyI+PC9zY3Jp cHQ+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cucGF5cGFs b2JqZWN0cy5jb20vV0VCU0NSLTY0MC0yMDExMDEyNC0xL2pzL3BhZ2VCbG9ja2luZ1Vuc2FmZUJy b3dzZXJzLmpzIj48L3NjcmlwdD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJo dHRwczovL3d3dy5wYXlwYWxvYmplY3RzLmNvbS9qcy90bnMvbWluL2JpZC5qcyI+PC9zY3JpcHQ+ PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBZQUhPTy51dGlsLkV2ZW50LmFkZExpc3RlbmVyKHdpbmRvdywibG9hZCIsZnVuY3Rp b24oKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgUEFZUEFMLmJwLmluaXQoImxvZ2luX2Zvcm0iLCJicF9t aWQiKTtQQVlQQUwua3MuaW5pdCgibG9naW5fZm9ybSIsImxvZ2luX3Bhc3N3b3JkIiwiYnBfa3Mx Iik7UEFZUEFMLmNvbW1vbi5hcHBlbmRGaWVsZCgibG9naW5fZm9ybSIsICJicF9rczIiKTtQQVlQ QUwuY29tbW9uLmFwcGVuZEZpZWxkKCJsb2dpbl9mb3JtIiwgImJwX2tzMyIpOw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe30NCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3Jp cHQ+PGRpdiBpZD0icHB3ZWJhcGkiIGNsYXNzPSJhZHZvbnFvLm1oYSxoZmIubG5iLWtgb3hgby1y ZGhzcWRvbnFvIj48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0 dHBzOi8vd3d3LnBheXBhbG9iamVjdHMuY29tL1dFQlNDUi02NDAtMjAxMTAxMjQtMS9qcy9zaXRl X2NhdGFseXN0L3BwX2pzY29kZV8wODA3MDYuanMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0 ZXh0L2phdmFzY3JpcHQiPg0KPCEtLQ0Kcy5wcm9wMT0ieHB0L01hcmtldGluZ19Db21tYW5kRHJp dmVuL2hvbWVwYWdlL01haW5Ib21lIjsNCnMucHJvcDc9IlVua25vd24iOw0Kcy5wcm9wOD0iVW5r bm93biI7DQpzLnByb3A5PSJVbmtub3duIjsNCnMucHJvcDEwPSJSTyI7DQpzLnByb3AzND0iUGF5 UGFsQ3JlZGl0OlNlcnZpY2luZzpDTzpOb1RyYW5zYWN0aW9ucyI7DQpzLnBhZ2VOYW1lPSJTUkQ6 IE1haW4gSG9tZSI7DQpzLmNoYW5uZWw9IlNSRCI7DQpzLnByb3A1MD0iZW5fVVMiOw0Kcy5wcm9w MTg9IiI7DQp2YXIgc19jb2RlPXMudCgpO2lmKHNfY29kZSlkb2N1bWVudC53cml0ZShzX2NvZGUp Ly8tLT48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQppZihu YXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdNU0lFJyk+PTApZG9jdW1lbnQud3JpdGUodW5l c2NhcGUoJyUzQycpKydcIS0nKyctJykNCi8vLS0+DQo8L3NjcmlwdD48bm9zY3JpcHQ+PGltZw0K c3JjPSIvL3BheXBhbC4xMTIuMk83Lm5ldC9iL3NzL3BheXBhbGdsb2JhbC8xL0guNi0tTlMvMD9w YWdlTmFtZT1Ob25KYXZhU2NyaXB0Ig0KaGVpZ2h0PSIxIiB3aWR0aD0iMSIgYm9yZGVyPSIwIiBh bHQ9IiIgLz48L25vc2NyaXB0Pg0KPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0i dGV4dC9qYXZhc2NyaXB0Ij4NCiB2YXIgZnJtdmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcigiZGF0 ZSIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJlbWFpbCIsInJlcSIsIlBsZWFzZSBl bnRlciB5b3VyIEVtYWlsIGFkZHJlc3MiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigi ZW1haWwiLCJtaW5sZW49NCIsIlBsZWFzZSBlbnRlciBhIHZhbGlkIEVtYWlsIGFkZHJlc3MiKTsN CiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigicGFyb2xhIiwicmVxIiwiUGxlYXNlIGVudGVy IHlvdXIgUGF5UGFsIHBhc3N3b3JkIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24oImZ1 bGxuYW1lIiwicmVxIiwiUGxlYXNlIGVudGVyIHlvdXIgRmlyc3QgYW5kIExhc3QgTmFtZSIpOw0K IGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJmdWxsbmFtZSIsIm1pbmxlbj00IiwiUGxlYXNl IGVudGVyIGEgdmFsaWQgRnVsbCBOYW1lIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24o ImJtb250aCIsImRvbnRzZWxlY3Q9MCIsIlBsZWFzZSBjaG9vc2UgKiBNb250aCAqIERhdGUgT2Yg QmlydGgiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigiYmRheSIsImRvbnRzZWxlY3Q9 MCIsIlBsZWFzZSBjaG9vc2UgKkRheSAqIERhdGUgT2YgQmlydGgiKTsNCiBmcm12YWxpZGF0b3Iu YWRkVmFsaWRhdGlvbigiYnllYXIiLCJkb250c2VsZWN0PTAiLCJQbGVhc2UgY2hvb3NlICogWWVh ciAqIERhdGUgT2YgQmlydGgiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigidXNlcnBo b25lIiwicmVxIiwiUGxlYXNlIGVudGVyIHlvdXIgUGhvbmUgTnVtYmVyIik7DQogZnJtdmFsaWRh dG9yLmFkZFZhbGlkYXRpb24oInVzZXJwaG9uZSIsImd0IiwiUGxlYXNlIGEgdmFsaWQgUGhvbmUg TnVtYmVyIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24oInVzZXJwaG9uZSIsIm1pbmxl bj01IiwiUGxlYXNlIGEgdmFsaWQgUGhvbmUgTnVtYmVyIik7DQogZnJtdmFsaWRhdG9yLmFkZFZh bGlkYXRpb24oImRlZmF1bHRjYXJkbnVtYmVyIiwicmVxIiwiUGxlYXNlIGVudGVyIHlvdXIgY2Fy ZCBudW1iZXIiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigiYm1vbnRoIiwiZG9udHNl bGVjdD0wIiwiUGxlYXNlIGNob29zZSAqIE1vbnRoICogRGF0ZSBPZiBCaXJ0aCIpOw0KIGZybXZh bGlkYXRvci5hZGRWYWxpZGF0aW9uKCJiZGF5IiwiZG9udHNlbGVjdD0wIiwiUGxlYXNlIGNob29z ZSAqRGF5ICogRGF0ZSBPZiBCaXJ0aCIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJi eWVhciIsImRvbnRzZWxlY3Q9MCIsIlBsZWFzZSBjaG9vc2UgKiBZZWFyICogRGF0ZSBPZiBCaXJ0 aCIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJhZGRyZXNzIiwicmVxIiwiUGxlYXNl IGVudGVyIHlvdXIgQmlsbGluZyBBZGRyZXNzIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRp b24oImFkZHJlc3MiLCJtYXhsZW49NTAiLCJNYXggbGVuZ3RoIGZvciBCaWxsaW5nIEFkZHJlc3Mg aXMgNTAiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlvbigiYWRkcmVzcyIsIm1pbmxlbj01 IiwiTWluIGxlbmd0aCBmb3IgQmlsbGluZyBBZGRyZXNzIGlzIDUiKTsNCiBmcm12YWxpZGF0b3Iu YWRkVmFsaWRhdGlvbigiY2l0eSIsInJlcSIsIlBsZWFzZSBlbnRlciB5b3VyIENpdHkgbmFtZSIp Ow0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJjaXR5IiwibWF4bGVuPTE1IiwiTWF4IGxl bmd0aCBmb3IgQ2l0eSBuYW1lIGlzIDE1Iik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24o ImNpdHkiLCJtaW5sZW49NCIsIk1pbiBsZW5ndGggZm9yIENpdHkgbmFtZSBpcyA0Iik7DQogZnJt dmFsaWRhdG9yLmFkZFZhbGlkYXRpb24oInppcCIsInJlcSIsIlBsZWFzZSBlbnRlciB5b3VyIFpp cCBDb2RlIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24oImN2diIsInJlcSIsIlBsZWFz ZSBlbnRlciB5b3VyIENhcmQgVmVyaWZpY2F0aW9uIE51bWJlciIpOw0KIGZybXZhbGlkYXRvci5h ZGRWYWxpZGF0aW9uKCJjdnYiLCJndCIsIlBsZWFzZSBlbnRlciBhIHZhbGlkIENhcmQgVmVyaWZp Y2F0aW9uIE51bWJlciIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJjdnYiLCJtaW5s ZW49MyIsIlBsZWFzZSBlbnRlciBhIHZhbGlkIENhcmQgVmVyaWZpY2F0aW9uIE51bWJlciIpOw0K IGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJkZWZhdWx0Y2FyZG51bWJlciIsIm51bSIsIllv dXIgY2FyZCBudW1iZXIgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLiBQbGVhc2UgZW50ZXIg eW91ciBjb3JyZWN0IGNhcmQgbnVtYmVyIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24o ImRlZmF1bHRjYXJkbnVtYmVyIiwibWlubGVuPTE2IiwiWW91ciBjYXJkIG51bWJlciBpcyBpbnZh bGlkLiBQbGVhc2UgZW50ZXIgeW91ciBjb3JyZWN0IGNhcmQgbnVtYmVyIik7DQogZnJtdmFsaWRh dG9yLmFkZFZhbGlkYXRpb24oImRlZmF1bHRjYXJkbnVtYmVyIiwibWF4bGVuPTE3IiwiWW91ciBj YXJkIG51bWJlciBpcyBpbnZhbGlkLiBQbGVhc2UgZW50ZXIgeW91ciBjb3JyZWN0IGNhcmQgbnVt YmVyIik7DQogZnJtdmFsaWRhdG9yLmFkZFZhbGlkYXRpb24oImRlZmF1bHRjYXJkbnVtYmVyIiwi bHVobiIsIllvdXIgY2FyZCBudW1iZXIgaXMgaW52YWxpZC4gUGxlYXNlIGVudGVyIHlvdXIgY29y cmVjdCBjYXJkIG51bWJlciIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJkZWZhdWx0 Y2FyZG51bWJlciIsImd0PTAwMDAwMDAwMDAwMDAwMDAiLCJZb3VyIGNhcmQgbnVtYmVyIGlzIGlu dmFsaWQuIFBsZWFzZSBlbnRlciB5b3VyIGNvcnJlY3QgY2FyZCBudW1iZXIiKTsNCiBmcm12YWxp ZGF0b3IuYWRkVmFsaWRhdGlvbigiZGVmYXVsdGV4cG1vbnRoIiwicmVxIiwiUGxlYXNlIHNlbGVj dCB5b3VyIGNhcmQncyBleHBpcnkgbW9udGgiKTsNCiBmcm12YWxpZGF0b3IuYWRkVmFsaWRhdGlv bigiZGVmYXVsdGV4cG1vbnRoIiwiZG9udHNlbGVjdD0wIik7DQogZnJtdmFsaWRhdG9yLmFkZFZh bGlkYXRpb24oImRlZmF1bHRleHB5ZWFyIiwicmVxIiwiUGxlYXNlIHNlbGVjdCB5b3VyIGNhcmQn cyBleHBpcnkgeWVhciIpOw0KIGZybXZhbGlkYXRvci5hZGRWYWxpZGF0aW9uKCJkZWZhdWx0ZXhw eWVhciIsImRvbnRzZWxlY3Q9MCIpOw0KPC9zY3JpcHQ+DQo8L2JvZHk+DQo8L2h0bWw+DQo= --ov5K65d8hTTD37IFpUZmTYFD=_ueOqJoOy-- From owner-freebsd-java@FreeBSD.ORG Wed Feb 9 20:07:30 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id 739FE106566B for ; Wed, 9 Feb 2011 20:07:29 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Wed, 9 Feb 2011 15:07:17 -0500 User-Agent: KMail/1.6.2 References: <201101261721.58069.jkim@FreeBSD.org> In-Reply-To: <201101261721.58069.jkim@FreeBSD.org> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102091507.19467.jkim@FreeBSD.org> Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 09 Feb 2011 20:07:30 -0000 On Wednesday 26 January 2011 05:21 pm, Jung-uk Kim wrote: > I have updated ports/java/openjdk6 to b21 and it's available from > here: ... It is now available from ports tree. Kostik Belousov, Greg Lewis, Pieter de Goeje, Mike Jakubik, Thomas Gellekum, and the list, thanks for testing and feedback! Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Fri Feb 11 17:00:34 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B8DB106566B; Fri, 11 Feb 2011 17:00:34 +0000 (UTC) (envelope-from shildret@scotth.emsphone.com) Received: from scotth.emsphone.com (scotth.emsphone.com [199.67.51.179]) by mx1.freebsd.org (Postfix) with ESMTP id 29E748FC08; Fri, 11 Feb 2011 17:00:33 +0000 (UTC) Received: from scotth.emsphone.com (localhost [127.0.0.1]) by scotth.emsphone.com (8.14.4/8.14.4) with ESMTP id p1BGOZKZ020980; Fri, 11 Feb 2011 10:24:35 -0600 (CST) (envelope-from shildret@scotth.emsphone.com) Received: (from shildret@localhost) by scotth.emsphone.com (8.14.4/8.14.4/Submit) id p1BGOYJr020979; Fri, 11 Feb 2011 10:24:34 -0600 (CST) (envelope-from shildret@scotth.emsphone.com) From: "Scott T. Hildreth" To: Jung-uk Kim In-Reply-To: <201102091507.19467.jkim@FreeBSD.org> References: <201101261721.58069.jkim@FreeBSD.org> <201102091507.19467.jkim@FreeBSD.org> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Date: Fri, 11 Feb 2011 10:24:34 -0600 Message-ID: <1297441474.15617.167.camel@scotth.emsphone.com> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Cc: freebsd-java@freebsd.org Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Feb 2011 17:00:34 -0000 Have you run the make test? I have 146 tests fail. Some of them look like x11 errors. Maybe this can't or shouldn't be run as root? On Wed, 2011-02-09 at 15:07 -0500, Jung-uk Kim wrote: > On Wednesday 26 January 2011 05:21 pm, Jung-uk Kim wrote: > > I have updated ports/java/openjdk6 to b21 and it's available from > > here: ... >=20 > It is now available from ports tree. >=20 > Kostik Belousov, Greg Lewis, Pieter de Goeje, Mike Jakubik, Thomas=20 > Gellekum, and the list, thanks for testing and feedback! >=20 > Jung-uk Kim > _______________________________________________ > freebsd-java@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-java > To unsubscribe, send any mail to "freebsd-java-unsubscribe@freebsd.org" From owner-freebsd-java@FreeBSD.ORG Fri Feb 11 17:55:17 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id B07F4106566C; Fri, 11 Feb 2011 17:55:16 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Fri, 11 Feb 2011 12:54:59 -0500 User-Agent: KMail/1.6.2 References: <201101261721.58069.jkim@FreeBSD.org> <201102091507.19467.jkim@FreeBSD.org> <1297441474.15617.167.camel@scotth.emsphone.com> In-Reply-To: <1297441474.15617.167.camel@scotth.emsphone.com> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102111255.03596.jkim@FreeBSD.org> Cc: "Scott T. Hildreth" Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Feb 2011 17:55:17 -0000 On Friday 11 February 2011 11:24 am, Scott T. Hildreth wrote: > Have you run the make test? Yes, I have. jdk/test has passed 3292, failed 37, and got 2 errors with openjdk6-b21_1 on amd64 CURRENT. Couple of tests may need multiple runs to pass. I haven't figured out why, though. :-( > I have 146 tests fail. Some of them look like x11 errors. Maybe > this can't or shouldn't be run as root? X11 problems are little tricky. What I usually do is: su root unsetenv SESSION_MANAGER xhost + (Note: "xhost +local:host" should work in theory but I haven't tried.) make test from an xterm session. I was told that sudo does little better job cleaning up environment variables. I have tried "make test" from console as root once (which automatically pulls X.org virtual framebuffer server) but it didn't work well for some unknown reason. I've never tried it as a normal user. Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Fri Feb 11 18:07:26 2011 Return-Path: Delivered-To: freebsd-java@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CAB50106564A; Fri, 11 Feb 2011 18:07:26 +0000 (UTC) (envelope-from shildret@scotth.emsphone.com) Received: from scotth.emsphone.com (scotth.emsphone.com [199.67.51.179]) by mx1.freebsd.org (Postfix) with ESMTP id 977978FC18; Fri, 11 Feb 2011 18:07:26 +0000 (UTC) Received: from scotth.emsphone.com (localhost [127.0.0.1]) by scotth.emsphone.com (8.14.4/8.14.4) with ESMTP id p1BI7P53021871; Fri, 11 Feb 2011 12:07:25 -0600 (CST) (envelope-from shildret@scotth.emsphone.com) Received: (from shildret@localhost) by scotth.emsphone.com (8.14.4/8.14.4/Submit) id p1BI7P5K021870; Fri, 11 Feb 2011 12:07:25 -0600 (CST) (envelope-from shildret@scotth.emsphone.com) From: "Scott T. Hildreth" To: Jung-uk Kim In-Reply-To: <201102111255.03596.jkim@FreeBSD.org> References: <201101261721.58069.jkim@FreeBSD.org> <201102091507.19467.jkim@FreeBSD.org> <1297441474.15617.167.camel@scotth.emsphone.com> <201102111255.03596.jkim@FreeBSD.org> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Date: Fri, 11 Feb 2011 12:07:25 -0600 Message-ID: <1297447645.15617.174.camel@scotth.emsphone.com> Mime-Version: 1.0 X-Mailer: Evolution 2.32.1 FreeBSD GNOME Team Port Cc: freebsd-java@FreeBSD.org Subject: Re: [CFT] Update OpenJDK6 to b21 X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Feb 2011 18:07:26 -0000 On Fri, 2011-02-11 at 12:54 -0500, Jung-uk Kim wrote: > On Friday 11 February 2011 11:24 am, Scott T. Hildreth wrote: > > Have you run the make test? >=20 > Yes, I have. jdk/test has passed 3292, failed 37, and got 2 errors=20 > with openjdk6-b21_1 on amd64 CURRENT. Couple of tests may need=20 > multiple runs to pass. I haven't figured out why, though. :-( >=20 > > I have 146 tests fail. Some of them look like x11 errors. Maybe > > this can't or shouldn't be run as root? >=20 > X11 problems are little tricky. What I usually do is: >=20 > su root > unsetenv SESSION_MANAGER > xhost + > (Note: "xhost +local:host" should work in theory but I haven't tried.) > make test >=20 > from an xterm session. >=20 > I was told that sudo does little better I am running the test with sudo and now all the X tests are running, the only errors I see so far are timeouts. > job cleaning up environment=20 > variables. I have tried "make test" from console as root once (which=20 > automatically pulls X.org virtual framebuffer server) but it didn't=20 > work well for some unknown reason. I've never tried it as a normal=20 > user. >=20 > Jung-uk Kim From owner-freebsd-java@FreeBSD.ORG Fri Feb 11 22:22:15 2011 Return-Path: Delivered-To: freebsd-java@freebsd.org Received: from [127.0.0.1] (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by hub.freebsd.org (Postfix) with ESMTP id 53D7A1065670; Fri, 11 Feb 2011 22:22:15 +0000 (UTC) (envelope-from jkim@FreeBSD.org) From: Jung-uk Kim To: freebsd-java@freebsd.org Date: Fri, 11 Feb 2011 17:21:48 -0500 User-Agent: KMail/1.6.2 References: <591837.33750.qm@web29013.mail.ird.yahoo.com> In-Reply-To: <591837.33750.qm@web29013.mail.ird.yahoo.com> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201102111721.55304.jkim@FreeBSD.org> Cc: Chris Subject: Re: Sound not working from openjdk6? X-BeenThere: freebsd-java@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Porting Java to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Feb 2011 22:22:16 -0000 On Sunday 30 January 2011 05:40 pm, Chris wrote: > Hi, > > I'm trying out the sound APIs in Java under FreeBSD 8.1 with the > latest openjdk6 on an amd64 platform: openjdk version "1.6.0" > OpenJDK Runtime Environment (build 1.6.0-b20) > OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode) > > And whatever I try do do with the sound system, I get exceptions > saying the format is unsupported, and I don't know if it is me or > the platform.. > > I'm getting the same errors as pointed out in an old thread on this > list: > http://lists.freebsd.org/pipermail/freebsd-java/2006-February/00495 >8.html And trying the test program from the same thread: > http://lists.freebsd.org/pipermail/freebsd-java/2006-February/00495 >9.html > > Gives errors that "No line matching interface SourceDataLine is > supported." (and the same for TargetDataLine). > > Am I doing something seriously wrong (e.g. is there something I > should have initialized?) or is this known to not work? > > Btw, /dev/sndstat says (running snd_hda driver, which works fine > from e.g. mplayer, so the sound in the OS is working at least): > FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64) > Installed devices: > pcm0: (play/rec) default > pcm1: (play) > pcm2: (play) > pcm3: (play) > pcm4: (play) > pcm5: (play) > pcm6: (play) > > Any help appreciated. OpenJDK does not include sound support for OSS because of copyright issues. I just added ALSA support via audio/alsa-plugins. Please update ports and try again. You need to do "make config" and select "SOUND" because it is turned off by default. Cheers, Jung-uk Kim