From 7d0f7518c2235a9dc783029971259ddaada2db20 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Thu, 23 Apr 2009 08:42:38 -0700 Subject: [PATCH 01/89] Fix byte swapping of XF86VidMode{Get,Set}GammaRamp Fixes OpenSolaris Bug 8315: Xorg segfaults when screensaver fades in cross-endian xdmcp session Signed-off-by: Alan Coopersmith --- hw/xfree86/dixmods/extmod/xf86vmode.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c index ea8089e94..10b9ed370 100644 --- a/hw/xfree86/dixmods/extmod/xf86vmode.c +++ b/hw/xfree86/dixmods/extmod/xf86vmode.c @@ -1541,6 +1541,7 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) { CARD16 *ramp = NULL; int n, length, i; + size_t ramplen; xXF86VidModeGetGammaRampReply rep; REQUEST(xXF86VidModeGetGammaRampReq); @@ -1555,7 +1556,8 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) length = (stuff->size + 1) & ~1; if(stuff->size) { - if(!(ramp = xalloc(length * 3 * sizeof(CARD16)))) + ramplen = length * 3 * sizeof(CARD16); + if (!(ramp = xalloc(ramplen))) return BadAlloc; if (!VidModeGetGammaRamp(stuff->screen, stuff->size, @@ -1573,13 +1575,12 @@ ProcXF86VidModeGetGammaRamp(ClientPtr client) swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swaps(&rep.size, n); - for(i = 0; i < length * 3; i++) - swaps(&ramp[i],n); + SwapShorts(ramp, length * 3); } WriteToClient(client, sizeof(xXF86VidModeGetGammaRampReply), (char *)&rep); if(stuff->size) { - WriteToClient(client, rep.length << 2, (char*)ramp); + WriteToClient(client, ramplen, (char*)ramp); xfree(ramp); } @@ -2060,7 +2061,6 @@ SProcXF86VidModeGetGamma(ClientPtr client) static int SProcXF86VidModeSetGammaRamp(ClientPtr client) { - CARD16 *ramp; int length, n; REQUEST(xXF86VidModeSetGammaRampReq); swaps(&stuff->length, n); @@ -2069,11 +2069,7 @@ SProcXF86VidModeSetGammaRamp(ClientPtr client) swaps(&stuff->screen, n); length = ((stuff->size + 1) & ~1) * 6; REQUEST_FIXED_SIZE(xXF86VidModeSetGammaRampReq, length); - ramp = (CARD16*)&stuff[1]; - while(length--) { - swaps(ramp, n); - ramp++; - } + SwapRestS(stuff); return ProcXF86VidModeSetGammaRamp(client); } From 0c467b1f990f156a34d5ef117bd825df6b633114 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:05:28 -0700 Subject: [PATCH 02/89] Add casts to generated entries in sdksyms.c to silence type mismatch warnings Signed-off-by: Alan Coopersmith --- hw/xfree86/loader/sdksyms.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/loader/sdksyms.sh b/hw/xfree86/loader/sdksyms.sh index be0b0ee6f..b320661c7 100755 --- a/hw/xfree86/loader/sdksyms.sh +++ b/hw/xfree86/loader/sdksyms.sh @@ -399,7 +399,7 @@ BEGIN { sub(/[^a-zA-Z0-9_].*/, "", symbol); #print; - printf(" &%s,\n", symbol); + printf(" (void *) &%s,\n", symbol); } } From 64b7f96dca23d2b33e0b8a8785d628d9a2f50e7b Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 24 Apr 2009 00:14:12 -0700 Subject: [PATCH 03/89] Add SIGIO/SIGPOLL support for Solaris Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/shared/sigio.c | 42 +++++++++++++++++++---- hw/xfree86/os-support/solaris/Makefile.am | 3 +- include/xorg-config.h.in | 3 ++ 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index ef5062705..f0317bd76 100644 --- a/configure.ac +++ b/configure.ac @@ -113,7 +113,7 @@ AM_CONDITIONAL(XSERVER_DTRACE, [test "x$WDTRACE" != "xno"]) AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h]) +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h dlfcn.h stropts.h]) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 54c02cc8e..256578289 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -63,6 +63,10 @@ # include "xf86_OSlib.h" # include "inputstr.h" +#ifdef HAVE_STROPTS_H +# include +#endif + /* * Linux libc5 defines FASYNC, but not O_ASYNC. Don't know if it is * functional or not. @@ -139,6 +143,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) struct sigaction osa; int i; int blocked; + int installed = FALSE; for (i = 0; i < MAX_FUNCS; i++) { @@ -147,15 +152,30 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) if (xf86IsPipe (fd)) return 0; blocked = xf86BlockSIGIO(); +#ifdef O_ASYNC if (fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_ASYNC) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", + xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); - xf86UnblockSIGIO(blocked); - return 0; + } else { + if (fcntl(fd, F_SETOWN, getpid()) != -1) { + xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } } - if (fcntl(fd, F_SETOWN, getpid()) == -1) { - xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", - fd, strerror(errno)); +#endif +#ifdef I_SETSIG /* System V Streams - used on Solaris for input devices */ + if (!installed && isastream(fd)) { + if (ioctl(fd, I_SETSIG, S_INPUT | S_ERROR | S_HANGUP) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG): %s\n", + fd, strerror(errno)); + } else { + installed = TRUE; + } + } +#endif + if (!installed) { xf86UnblockSIGIO(blocked); return 0; } @@ -221,7 +241,17 @@ xf86RemoveSIGIOHandler(int fd) } if (ret) { +#ifdef O_ASYNC fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_ASYNC); +#endif +#ifdef I_SETSIG + if (isastream(fd)) { + if (ioctl(fd, I_SETSIG, 0) == -1) { + xf86Msg(X_WARNING, "fcntl(%d, I_SETSIG, 0): %s\n", + fd, strerror(errno)); + } + } +#endif xf86SigIOMax = max; xf86SigIOMaxFd = maxfd; if (!max) diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index a4ef67b91..bcb987490 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -21,7 +21,8 @@ noinst_LTLIBRARIES = libsolaris.la libsolaris_la_SOURCES = sun_init.c \ sun_vid.c sun_bell.c $(AGP_SRC) sun_apm.c \ $(srcdir)/../shared/kmod_noop.c \ - $(srcdir)/../shared/posix_tty.c $(srcdir)/../shared/sigiostubs.c \ + $(srcdir)/../shared/posix_tty.c \ + $(srcdir)/../shared/sigio.c \ $(srcdir)/../shared/stdResource.c \ $(srcdir)/../shared/vidmem.c \ $(VTSW_SRC) diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in index f9b77d03d..ebeb44a37 100644 --- a/include/xorg-config.h.in +++ b/include/xorg-config.h.in @@ -54,6 +54,9 @@ /* Solaris 8 or later? */ #undef __SOL8__ +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_KD_H From a1c98f7fa9aa0cd5075ef2054c5d2be4d1e740f0 Mon Sep 17 00:00:00 2001 From: Joel Bosveld Date: Fri, 24 Apr 2009 10:12:26 -0700 Subject: [PATCH 04/89] Correct fcntl(F_SETOWN) error check in non-Solaris sigio code commit 64b7f96dca accidentally inverted the comparison, could result in crashes on some systems later on. Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/shared/sigio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/os-support/shared/sigio.c b/hw/xfree86/os-support/shared/sigio.c index 256578289..5ba0b7e1c 100644 --- a/hw/xfree86/os-support/shared/sigio.c +++ b/hw/xfree86/os-support/shared/sigio.c @@ -157,7 +157,7 @@ xf86InstallSIGIOHandler(int fd, void (*f)(int, void *), void *closure) xf86Msg(X_WARNING, "fcntl(%d, O_ASYNC): %s\n", fd, strerror(errno)); } else { - if (fcntl(fd, F_SETOWN, getpid()) != -1) { + if (fcntl(fd, F_SETOWN, getpid()) == -1) { xf86Msg(X_WARNING, "fcntl(%d, F_SETOWN): %s\n", fd, strerror(errno)); } else { From 28ddfc88d8d547941c7f4713db527a3c2f9ec35a Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:09:21 -0700 Subject: [PATCH 05/89] DRI2: Add interface for drivers to query DRI2 extension version Signed-off-by: Ian Romanick --- hw/xfree86/dri2/dri2.c | 9 +++++++++ hw/xfree86/dri2/dri2.h | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 0b52a0f8c..80de18f86 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -380,3 +380,12 @@ static XF86ModuleVersionInfo DRI2VersRec = _X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL }; +void +DRI2Version(int *major, int *minor) +{ + if (major != NULL) + *major = DRI2VersRec.majorversion; + + if (minor != NULL) + *minor = DRI2VersRec.minorversion; +} diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 847e57c68..9d7d6dc80 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -100,4 +100,22 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, unsigned int dest, unsigned int src); +/** + * Determine the major and minor version of the DRI2 extension. + * + * Provides a mechanism to other modules (e.g., 2D drivers) to determine the + * version of the DRI2 extension. While it is possible to peek directly at + * the \c XF86ModuleData from a layered module, such a module will fail to + * load (due to an unresolved symbol) if the DRI2 extension is not loaded. + * + * \param major Location to store the major verion of the DRI2 extension + * \param minor Location to store the minor verion of the DRI2 extension + * + * \note + * This interface was added some time after the initial release of the DRI2 + * module. Layered modules that wish to use this interface must first test + * its existance by calling \c xf86LoaderCheckSymbol. + */ +extern _X_EXPORT void DRI2Version(int *major, int *minor); + #endif From ff6c7764c2909e4126403b7211faa6c58556b341 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 24 Apr 2009 12:49:19 -0700 Subject: [PATCH 06/89] DRI2: Implement protocol for DRI2GetBuffersWithFormat MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This change implements the protocol for DRI2GetBuffersWithFormat, but the bulk of the differences are the changes to the extension / driver interface to make this function work. The old CreateBuffers and DeleteBuffers routines are replaced with CreateBuffer and DeleteBuffer (both singular). This allows drivers to allocate buffers for a drawable one at a time. As a result, 3D drivers can now allocate the (fake) front-buffer for a window only when it is needed. Since 3D drivers only ask for the front-buffer on demand, the real front-buffer is always created. This allows CopyRegion impelemenations of SwapBuffers to continue working. As with previous version of this code, if the client asks for the front-buffer for a window, we instead give it the fake front-buffer. Signed-off-by: Ian Romanick Reviewed-by: Kristian Høgsberg --- configure.ac | 2 +- glx/glxdri2.c | 59 +++++++++-- hw/xfree86/dri2/dri2.c | 199 +++++++++++++++++++++++++++----------- hw/xfree86/dri2/dri2.h | 28 +++++- hw/xfree86/dri2/dri2ext.c | 88 ++++++++++++----- 5 files changed, 286 insertions(+), 90 deletions(-) diff --git a/configure.ac b/configure.ac index f0317bd76..9eadabced 100644 --- a/configure.ac +++ b/configure.ac @@ -886,7 +886,7 @@ if test "x$DRI" = xyes; then AC_SUBST(DRIPROTO_CFLAGS) fi -PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 1.99.3], +PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= 2.1], [HAVE_DRI2PROTO=yes], [HAVE_DRI2PROTO=no]) case "$DRI2,$HAVE_DRI2PROTO" in yes,no) diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 612defb3f..529b2df10 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -406,7 +406,7 @@ dri2GetBuffers(__DRIdrawable *driDrawable, int *out_count, void *loaderPrivate) { __GLXDRIdrawable *private = loaderPrivate; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int i; int j; @@ -427,15 +427,59 @@ dri2GetBuffers(__DRIdrawable *driDrawable, /* Do not send the real front buffer of a window to the client. */ if ((private->base.pDraw->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - private->buffers[j].attachment = buffers[i].attachment; - private->buffers[j].name = buffers[i].name; - private->buffers[j].pitch = buffers[i].pitch; - private->buffers[j].cpp = buffers[i].cpp; - private->buffers[j].flags = buffers[i].flags; + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; + j++; + } + + *out_count = j; + return private->buffers; +} + +static __DRIbuffer * +dri2GetBuffersWithFormat(__DRIdrawable *driDrawable, + int *width, int *height, + unsigned int *attachments, int count, + int *out_count, void *loaderPrivate) +{ + __GLXDRIdrawable *private = loaderPrivate; + DRI2BufferPtr *buffers; + int i; + int j = 0; + + buffers = DRI2GetBuffersWithFormat(private->base.pDraw, + width, height, attachments, count, + out_count); + if (*out_count > MAX_DRAWABLE_BUFFERS) { + *out_count = 0; + return NULL; + } + + private->width = *width; + private->height = *height; + + /* This assumes the DRI2 buffer attachment tokens matches the + * __DRIbuffer tokens. */ + for (i = 0; i < *out_count; i++) { + /* Do not send the real front buffer of a window to the client. + */ + if ((private->base.pDraw->type == DRAWABLE_WINDOW) + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { + continue; + } + + private->buffers[j].attachment = buffers[i]->attachment; + private->buffers[j].name = buffers[i]->name; + private->buffers[j].pitch = buffers[i]->pitch; + private->buffers[j].cpp = buffers[i]->cpp; + private->buffers[j].flags = buffers[i]->flags; j++; } @@ -454,6 +498,7 @@ static const __DRIdri2LoaderExtension loaderExtension = { { __DRI_DRI2_LOADER, __DRI_DRI2_LOADER_VERSION }, dri2GetBuffers, dri2FlushFrontBuffer, + dri2GetBuffersWithFormat, }; static const __DRIextension *loader_extensions[] = { diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 80de18f86..9ded048eb 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -53,7 +53,7 @@ typedef struct _DRI2Drawable { unsigned int refCount; int width; int height; - DRI2BufferPtr buffers; + DRI2BufferPtr *buffers; int bufferCount; unsigned int pendingSequence; } DRI2DrawableRec, *DRI2DrawablePtr; @@ -63,8 +63,8 @@ typedef struct _DRI2Screen { const char *deviceName; int fd; unsigned int lastSequence; - DRI2CreateBuffersProcPtr CreateBuffers; - DRI2DestroyBuffersProcPtr DestroyBuffers; + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; DRI2CopyRegionProcPtr CopyRegion; HandleExposuresProcPtr HandleExposures; @@ -132,71 +132,130 @@ DRI2CreateDrawable(DrawablePtr pDraw) return Success; } -DRI2BufferPtr -DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, - unsigned int *attachments, int count, int *out_count) +static int +find_attachment(DRI2BufferPtr *buffer_list, int count, unsigned attachment) +{ + int i; + + if (buffer_list == NULL) { + return -1; + } + + for (i = 0; i < count; i++) { + if ((buffer_list[i] != NULL) + && (buffer_list[i]->attachment == attachment)) { + return i; + } + } + + return -1; +} + +static DRI2BufferPtr +allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds, + DRI2DrawablePtr pPriv, + unsigned int attachment, unsigned int format, + int dimensions_match) +{ + DRI2BufferPtr buffer; + int old_buf; + + old_buf = find_attachment(pPriv->buffers, pPriv->bufferCount, attachment); + + if ((old_buf < 0) + || !dimensions_match + || (pPriv->buffers[old_buf]->format != format)) { + buffer = (*ds->CreateBuffer)(pDraw, attachment, format); + } else { + buffer = pPriv->buffers[old_buf]; + pPriv->buffers[old_buf] = NULL; + } + + return buffer; +} + +static DRI2BufferPtr * +do_get_buffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count, + int has_format) { DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen); DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw); - DRI2BufferPtr buffers; - unsigned int temp_buf[32]; - unsigned int *temp = temp_buf; + DRI2BufferPtr *buffers; + int need_real_front = 0; + int need_fake_front = 0; int have_fake_front = 0; + int front_format = 0; + const int dimensions_match = (pDraw->width == pPriv->width) + && (pDraw->height == pPriv->height); + int i; - /* If the drawable is a window and the front-buffer is requested, silently - * add the fake front-buffer to the list of requested attachments. The - * counting logic in the loop accounts for the case where the client - * requests both the fake and real front-buffer. - */ - if (pDraw->type == DRAWABLE_WINDOW) { - int need_fake_front = 0; - int i; + buffers = xalloc((count + 1) * sizeof(buffers[0])); - if ((count + 1) > 32) { - temp = xalloc((count + 1) * sizeof(temp[0])); - } + for (i = 0; i < count; i++) { + const unsigned attachment = *(attachments++); + const unsigned format = (has_format) ? *(attachments++) : 0; - for (i = 0; i < count; i++) { - if (attachments[i] == DRI2BufferFrontLeft) { - need_fake_front++; + buffers[i] = allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment, + format, dimensions_match); + + + /* If the drawable is a window and the front-buffer is requested, + * silently add the fake front-buffer to the list of requested + * attachments. The counting logic in the loop accounts for the case + * where the client requests both the fake and real front-buffer. + */ + if (pDraw->type == DRAWABLE_WINDOW) { + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; } - if (attachments[i] == DRI2BufferFakeFrontLeft) { + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + need_fake_front++; + front_format = format; + } + + if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; } - - temp[i] = attachments[i]; - } - - if (need_fake_front > 0) { - temp[i] = DRI2BufferFakeFrontLeft; - count++; - have_fake_front = 1; - attachments = temp; } } - - if (pPriv->buffers == NULL || - pDraw->width != pPriv->width || pDraw->height != pPriv->height) - { - buffers = (*ds->CreateBuffers)(pDraw, attachments, count); - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); - pPriv->buffers = buffers; - pPriv->bufferCount = count; - pPriv->width = pDraw->width; - pPriv->height = pDraw->height; + if (need_real_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFrontLeft, + front_format, dimensions_match); } - if (temp != temp_buf) { - xfree(temp); + if (need_fake_front > 0) { + buffers[i++] = allocate_or_reuse_buffer(pDraw, ds, pPriv, + DRI2BufferFakeFrontLeft, + front_format, dimensions_match); + have_fake_front = 1; } + *out_count = i; + + + if (pPriv->buffers != NULL) { + for (i = 0; i < pPriv->bufferCount; i++) { + if (pPriv->buffers[i] != NULL) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + } + + xfree(pPriv->buffers); + } + + + pPriv->buffers = buffers; + pPriv->bufferCount = *out_count; *width = pPriv->width; *height = pPriv->height; - *out_count = pPriv->bufferCount; /* If the client is getting a fake front-buffer, pre-fill it with the @@ -220,6 +279,22 @@ DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, return pPriv->buffers; } +DRI2BufferPtr * +DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, FALSE); +} + +DRI2BufferPtr * +DRI2GetBuffersWithFormat(DrawablePtr pDraw, int *width, int *height, + unsigned int *attachments, int count, int *out_count) +{ + return do_get_buffers(pDraw, width, height, attachments, count, + out_count, TRUE); +} + int DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, unsigned int dest, unsigned int src) @@ -237,10 +312,10 @@ DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion, pSrcBuffer = NULL; for (i = 0; i < pPriv->bufferCount; i++) { - if (pPriv->buffers[i].attachment == dest) - pDestBuffer = &pPriv->buffers[i]; - if (pPriv->buffers[i].attachment == src) - pSrcBuffer = &pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == dest) + pDestBuffer = pPriv->buffers[i]; + if (pPriv->buffers[i]->attachment == src) + pSrcBuffer = pPriv->buffers[i]; } if (pSrcBuffer == NULL || pDestBuffer == NULL) return BadValue; @@ -266,7 +341,16 @@ DRI2DestroyDrawable(DrawablePtr pDraw) if (pPriv->refCount > 0) return; - (*ds->DestroyBuffers)(pDraw, pPriv->buffers, pPriv->bufferCount); + if (pPriv->buffers != NULL) { + int i; + + for (i = 0; i < pPriv->bufferCount; i++) { + (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]); + } + + xfree(pPriv->buffers); + } + xfree(pPriv); if (pDraw->type == DRAWABLE_WINDOW) @@ -320,11 +404,18 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) if (!ds) return FALSE; + if ((info->version < 2) + || (info->CreateBuffer == NULL) + || (info->DestroyBuffer == NULL)) { + return FALSE; + } + + ds->fd = info->fd; ds->driverName = info->driverName; ds->deviceName = info->deviceName; - ds->CreateBuffers = info->CreateBuffers; - ds->DestroyBuffers = info->DestroyBuffers; + ds->CreateBuffer = info->CreateBuffer; + ds->DestroyBuffer = info->DestroyBuffer; ds->CopyRegion = info->CopyRegion; dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds); @@ -371,7 +462,7 @@ static XF86ModuleVersionInfo DRI2VersRec = MODINFOSTRING1, MODINFOSTRING2, XORG_VERSION_CURRENT, - 1, 0, 0, + 1, 1, 0, ABI_CLASS_EXTENSION, ABI_EXTENSION_VERSION, MOD_CLASS_NONE, diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 9d7d6dc80..b3d02a99e 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -41,6 +41,7 @@ typedef struct { unsigned int pitch; unsigned int cpp; unsigned int flags; + unsigned int format; void *driverPrivate; } DRI2BufferRec, *DRI2BufferPtr; @@ -58,8 +59,19 @@ typedef void (*DRI2CopyRegionProcPtr)(DrawablePtr pDraw, typedef void (*DRI2WaitProcPtr)(WindowPtr pWin, unsigned int sequence); +typedef DRI2BufferPtr (*DRI2CreateBufferProcPtr)(DrawablePtr pDraw, + unsigned int attachment, + unsigned int format); +typedef void (*DRI2DestroyBufferProcPtr)(DrawablePtr pDraw, + DRI2BufferPtr buffer); + +/** + * Version of the DRI2InfoRec structure defined in this header + */ +#define DRI2INFOREC_VERSION 2 + typedef struct { - unsigned int version; /* Version of this struct */ + unsigned int version; /**< Version of this struct */ int fd; const char *driverName; const char *deviceName; @@ -69,6 +81,14 @@ typedef struct { DRI2CopyRegionProcPtr CopyRegion; DRI2WaitProcPtr Wait; + /** + * \name Fields added in version 2 of the structure. + */ + /*@{*/ + DRI2CreateBufferProcPtr CreateBuffer; + DRI2DestroyBufferProcPtr DestroyBuffer; + /*@}*/ + } DRI2InfoRec, *DRI2InfoPtr; extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, @@ -88,7 +108,7 @@ extern _X_EXPORT int DRI2CreateDrawable(DrawablePtr pDraw); extern _X_EXPORT void DRI2DestroyDrawable(DrawablePtr pDraw); -extern _X_EXPORT DRI2BufferPtr DRI2GetBuffers(DrawablePtr pDraw, +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height, unsigned int *attachments, @@ -118,4 +138,8 @@ extern _X_EXPORT int DRI2CopyRegion(DrawablePtr pDraw, */ extern _X_EXPORT void DRI2Version(int *major, int *minor); +extern _X_EXPORT DRI2BufferPtr *DRI2GetBuffersWithFormat(DrawablePtr pDraw, + int *width, int *height, unsigned int *attachments, int count, + int *out_count); + #endif diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c index 23f312149..029dce84e 100644 --- a/hw/xfree86/dri2/dri2ext.c +++ b/hw/xfree86/dri2/dri2ext.c @@ -80,7 +80,7 @@ ProcDRI2QueryVersion(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.majorVersion = 1; - rep.minorVersion = 0; + rep.minorVersion = 1; if (client->swapped) { swaps(&rep.sequenceNumber, n); @@ -192,32 +192,20 @@ ProcDRI2DestroyDrawable(ClientPtr client) return client->noClientException; } -static int -ProcDRI2GetBuffers(ClientPtr client) + +static void +send_buffers_reply(ClientPtr client, DrawablePtr pDrawable, + DRI2BufferPtr *buffers, int count, int width, int height) { - REQUEST(xDRI2GetBuffersReq); xDRI2GetBuffersReply rep; - DrawablePtr pDrawable; - DRI2BufferPtr buffers; - int i, status, width, height, count; - unsigned int *attachments; - xDRI2Buffer buffer; - int skip; + int skip = 0; + int i; - REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); - if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) - return status; - - attachments = (unsigned int *) &stuff[1]; - buffers = DRI2GetBuffers(pDrawable, &width, &height, - attachments, stuff->count, &count); - - skip = 0; if (pDrawable->type == DRAWABLE_WINDOW) { for (i = 0; i < count; i++) { /* Do not send the real front buffer of a window to the client. */ - if (buffers[i].attachment == DRI2BufferFrontLeft) { + if (buffers[i]->attachment == DRI2BufferFrontLeft) { skip++; continue; } @@ -233,20 +221,66 @@ ProcDRI2GetBuffers(ClientPtr client) WriteToClient(client, sizeof(xDRI2GetBuffersReply), &rep); for (i = 0; i < count; i++) { + xDRI2Buffer buffer; + /* Do not send the real front buffer of a window to the client. */ if ((pDrawable->type == DRAWABLE_WINDOW) - && (buffers[i].attachment == DRI2BufferFrontLeft)) { + && (buffers[i]->attachment == DRI2BufferFrontLeft)) { continue; } - buffer.attachment = buffers[i].attachment; - buffer.name = buffers[i].name; - buffer.pitch = buffers[i].pitch; - buffer.cpp = buffers[i].cpp; - buffer.flags = buffers[i].flags; + buffer.attachment = buffers[i]->attachment; + buffer.name = buffers[i]->name; + buffer.pitch = buffers[i]->pitch; + buffer.cpp = buffers[i]->cpp; + buffer.flags = buffers[i]->flags; WriteToClient(client, sizeof(xDRI2Buffer), &buffer); } +} + + +static int +ProcDRI2GetBuffers(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * 4); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffers(pDrawable, &width, &height, + attachments, stuff->count, &count); + + + send_buffers_reply(client, pDrawable, buffers, count, width, height); + + return client->noClientException; +} + +static int +ProcDRI2GetBuffersWithFormat(ClientPtr client) +{ + REQUEST(xDRI2GetBuffersReq); + DrawablePtr pDrawable; + DRI2BufferPtr *buffers; + int status, width, height, count; + unsigned int *attachments; + + REQUEST_FIXED_SIZE(xDRI2GetBuffersReq, stuff->count * (2 * 4)); + if (!validDrawable(client, stuff->drawable, &pDrawable, &status)) + return status; + + attachments = (unsigned int *) &stuff[1]; + buffers = DRI2GetBuffersWithFormat(pDrawable, &width, &height, + attachments, stuff->count, &count); + + send_buffers_reply(client, pDrawable, buffers, count, width, height); return client->noClientException; } @@ -313,6 +347,8 @@ ProcDRI2Dispatch (ClientPtr client) return ProcDRI2GetBuffers(client); case X_DRI2CopyRegion: return ProcDRI2CopyRegion(client); + case X_DRI2GetBuffersWithFormat: + return ProcDRI2GetBuffersWithFormat(client); default: return BadRequest; } From a8cf63fd18b0ddadbadf7b47d620159854920050 Mon Sep 17 00:00:00 2001 From: Aaron Plattner Date: Thu, 23 Apr 2009 14:57:04 -0700 Subject: [PATCH 07/89] Export CompositeRegisterAlternateVisuals. Drivers need this if they add visuals that require implicit redirection. Add a new SDK header, compositeext.h, to contain the prototype for this function. --- composite/Makefile.am | 4 ++++ composite/compinit.c | 1 + composite/compint.h | 4 ---- composite/compositeext.h | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 composite/compositeext.h diff --git a/composite/Makefile.am b/composite/Makefile.am index d7bead137..c2f5123f2 100644 --- a/composite/Makefile.am +++ b/composite/Makefile.am @@ -2,6 +2,10 @@ noinst_LTLIBRARIES = libcomposite.la AM_CFLAGS = $(DIX_CFLAGS) +if XORG +sdk_HEADERS = compositeext.h +endif + libcomposite_la_SOURCES = \ compalloc.c \ compext.c \ diff --git a/composite/compinit.c b/composite/compinit.c index a844017c1..ee269afa0 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -45,6 +45,7 @@ #endif #include "compint.h" +#include "compositeext.h" static int CompScreenPrivateKeyIndex; DevPrivateKey CompScreenPrivateKey = &CompScreenPrivateKeyIndex; diff --git a/composite/compint.h b/composite/compint.h index 1c19ccd39..fd2fea153 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -224,10 +224,6 @@ CompositeExtensionInit (void); * compinit.c */ -Bool -CompositeRegisterAlternateVisuals (ScreenPtr pScreen, - VisualID *vids, int nVisuals); - Bool compScreenInit (ScreenPtr pScreen); diff --git a/composite/compositeext.h b/composite/compositeext.h new file mode 100644 index 000000000..b20bab158 --- /dev/null +++ b/composite/compositeext.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2009 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#ifndef _COMPOSITEEXT_H_ +#define _COMPOSITEEXT_H_ + +#include "misc.h" +#include "scrnintstr.h" + +extern _X_EXPORT Bool CompositeRegisterAlternateVisuals(ScreenPtr pScreen, + VisualID *vids, + int nVisuals); + +#endif /* _COMPOSITEEXT_H_ */ From 40a8f2f4088aa353de733a11327b628ef13a52e6 Mon Sep 17 00:00:00 2001 From: Pierre Willenbrock Date: Sun, 19 Apr 2009 21:15:22 +0200 Subject: [PATCH 08/89] Fix obvious copypasta Reviewed-by: Ian Romanick --- glx/glxcmds.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glx/glxcmds.c b/glx/glxcmds.c index 86e8dd8a5..1ae31515d 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -799,8 +799,8 @@ int __glXDisp_WaitX(__GLXclientState *cl, GLbyte *pc) return error; } - if (glxc && glxc->drawPriv->waitGL) - (*glxc->drawPriv->waitGL)(glxc->drawPriv); + if (glxc && glxc->drawPriv->waitX) + (*glxc->drawPriv->waitX)(glxc->drawPriv); return Success; } From 707af5f8c5fae3b6c4c5125a91917667bb0ab908 Mon Sep 17 00:00:00 2001 From: Simon Farnsworth Date: Thu, 23 Apr 2009 16:15:01 +0100 Subject: [PATCH 09/89] Make the cursor completely optional For embedded use, it's convenient to be able to disable the cursor completely, without having to audit and fix up all your third-party code (e.g. Mozilla Firefox). Add -nocursor and -cursor server options to enable and disable the cursor. The default is still -cursor, but embedded users can run the server with -nocursor to hide the cursor regardless of what application developers do. Signed-off-by: Peter Hutterer --- include/input.h | 4 ++++ os/utils.c | 12 +++++++++++- xfixes/cursor.c | 6 ++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/input.h b/include/input.h index 56c3d2981..30e30bb9e 100644 --- a/include/input.h +++ b/include/input.h @@ -498,4 +498,8 @@ extern _X_EXPORT void DDXRingBell( int pitch, int duration); +/* Set to TRUE by default - os/utils.c sets it to FALSE on user request, + xfixes/cursor.c uses it to determine if the cursor is enabled */ +extern Bool EnableCursor; + #endif /* INPUT_H */ diff --git a/os/utils.c b/os/utils.c index 78a50b254..00abd6396 100644 --- a/os/utils.c +++ b/os/utils.c @@ -482,6 +482,8 @@ void UseMsg(void) ErrorF("-c turns off key-click\n"); ErrorF("c # key-click volume (0-100)\n"); ErrorF("-cc int default color visual class\n"); + ErrorF("-cursor enable the cursor (default)\n"); + ErrorF("-nocursor disable the cursor\n"); ErrorF("-core generate core dump on fatal error\n"); ErrorF("-dpi int screen resolution in dots per inch\n"); #ifdef DPMSExtension @@ -660,7 +662,15 @@ ProcessCommandLine(int argc, char *argv[]) #endif CoreDump = TRUE; } - else if ( strcmp( argv[i], "-dpi") == 0) + else if ( strcmp( argv[i], "-nocursor") == 0) + { + EnableCursor = FALSE; + } + else if ( strcmp( argv[i], "-cursor") == 0) + { + EnableCursor = TRUE; + } + else if ( strcmp( argv[i], "-dpi") == 0) { if(++i < argc) monitorResolution = atoi(argv[i]); diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 33ab4265c..eb83cfeb7 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -129,6 +129,8 @@ typedef struct _CursorScreen { /* The cursor doesn't show up until the first XDefineCursor() */ static Bool CursorVisible = FALSE; +Bool EnableCursor = TRUE; + static Bool CursorDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, @@ -144,7 +146,7 @@ CursorDisplayCursor (DeviceIntPtr pDev, * initial root window setup. Not a great way to do it, I admit. */ if (ConnectionInfo) - CursorVisible = TRUE; + CursorVisible = EnableCursor; if (cs->pCursorHideCounts != NULL || !CursorVisible) { ret = ((*pScreen->RealizeCursor)(pDev, pScreen, pInvisibleCursor) && @@ -1052,7 +1054,7 @@ XFixesCursorInit (void) int i; if (party_like_its_1989) - CursorVisible = TRUE; + CursorVisible = EnableCursor; for (i = 0; i < screenInfo.numScreens; i++) { From 2a2a7fa6856b2e1954e904577535118f20cd9133 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Mon, 27 Apr 2009 20:23:53 -0700 Subject: [PATCH 10/89] Solaris: use instead of stale copy in Xorg sources Signed-off-by: Alan Coopersmith --- configure.ac | 2 +- hw/xfree86/os-support/solaris/Makefile.am | 11 +-- hw/xfree86/os-support/solaris/agpgart.h | 108 ---------------------- hw/xfree86/os-support/solaris/sun_agp.c | 7 +- 4 files changed, 7 insertions(+), 121 deletions(-) delete mode 100644 hw/xfree86/os-support/solaris/agpgart.h diff --git a/configure.ac b/configure.ac index 9eadabced..438ee0899 100644 --- a/configure.ac +++ b/configure.ac @@ -222,7 +222,7 @@ AC_CHECK_LIB(m, cbrt, AC_DEFINE(HAVE_CBRT, 1, [Have the 'cbrt' function])) AC_CHECK_HEADERS([ndbm.h dbm.h rpcsvc/dbm.h]) dnl AGPGART headers -AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h], AGP=yes) +AC_CHECK_HEADERS([linux/agpgart.h sys/agpio.h sys/agpgart.h], AGP=yes) AM_CONDITIONAL(AGP, [test "x$AGP" = xyes]) dnl APM header diff --git a/hw/xfree86/os-support/solaris/Makefile.am b/hw/xfree86/os-support/solaris/Makefile.am index bcb987490..4496ee122 100644 --- a/hw/xfree86/os-support/solaris/Makefile.am +++ b/hw/xfree86/os-support/solaris/Makefile.am @@ -4,12 +4,11 @@ else VTSW_SRC = $(srcdir)/../shared/VTsw_noop.c endif -# TODO: Don't build agpgart on SPARC -#if defined(i386Architecture) || defined(AMD64Architecture) +if AGP AGP_SRC = sun_agp.c -#else -#AGP_SRC = $(srcdir)/../shared/agp_noop.c -#endif +else +AGP_SRC = $(srcdir)/../shared/agp_noop.c +endif SOLARIS_INOUT_SRC = solaris-@SOLARIS_INOUT_ARCH@.S DISTCLEANFILES = solaris-@SOLARIS_INOUT_ARCH@.il @@ -28,7 +27,7 @@ libsolaris_la_SOURCES = sun_init.c \ $(VTSW_SRC) nodist_libsolaris_la_SOURCES = $(SOLARIS_INOUT_SRC) -sdk_HEADERS = agpgart.h +sdk_HEADERS = nodist_sdk_HEADERS = solaris-@SOLARIS_INOUT_ARCH@.il AM_CFLAGS = -DUSESTDRES -DHAVE_SYSV_IPC $(XORG_CFLAGS) $(DIX_CFLAGS) diff --git a/hw/xfree86/os-support/solaris/agpgart.h b/hw/xfree86/os-support/solaris/agpgart.h deleted file mode 100644 index 566de8046..000000000 --- a/hw/xfree86/os-support/solaris/agpgart.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * AGPGART module version 0.99 - * Copyright (C) 1999 Jeff Hartmann - * Copyright (C) 1999 Precision Insight, Inc. - * Copyright (C) 1999 Xi Graphics, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE - * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, and/or sell copies of the Software, and to permit persons - * to whom the Software is furnished to do so, provided that the above - * copyright notice(s) and this permission notice appear in all copies of - * the Software and that both the above copyright notice(s) and this - * permission notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT - * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL - * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING - * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, - * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION - * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder - * shall not be used in advertising or otherwise to promote the sale, use - * or other dealings in this Software without prior written authorization - * of the copyright holder. - */ - -#ifndef _AGPGART_H -#define _AGPGART_H - -#pragma ident "@(#)agpgart.h 1.1 05/04/04 SMI" - -typedef struct _agp_version { - uint16_t agpv_major; - uint16_t agpv_minor; -} agp_version_t; - -typedef struct _agp_info { - agp_version_t agpi_version; - uint32_t agpi_devid; /* bridge vendor + device */ - uint32_t agpi_mode; /* mode of bridge */ - ulong_t agpi_aperbase; /* base of aperture */ - size_t agpi_apersize; /* aperture range size */ - uint32_t agpi_pgtotal; /* max number of pages in aperture */ - uint32_t agpi_pgsystem; /* same as pg_total */ - uint32_t agpi_pgused; /* NUMBER of currently used pages */ -} agp_info_t; - -typedef struct _agp_setup { - uint32_t agps_mode; -} agp_setup_t; - -typedef struct _agp_allocate { - int32_t agpa_key; - uint32_t agpa_pgcount; - uint32_t agpa_type; - uint32_t agpa_physical; /* for i810/830 driver */ -} agp_allocate_t; - -typedef struct _agp_bind { - int32_t agpb_key; - uint32_t agpb_pgstart; -} agp_bind_t; - -typedef struct _agp_unbind { - int32_t agpu_key; - uint32_t agpu_pri; /* no use in solaris */ -} agp_unbind_t; - -#define AGPIOC_BASE 'G' -#define AGPIOC_INFO _IOR(AGPIOC_BASE, 0, 100) -#define AGPIOC_ACQUIRE _IO(AGPIOC_BASE, 1) -#define AGPIOC_RELEASE _IO(AGPIOC_BASE, 2) -#define AGPIOC_SETUP _IOW(AGPIOC_BASE, 3, agp_setup_t) -#define AGPIOC_ALLOCATE _IOWR(AGPIOC_BASE, 4, agp_allocate_t) -#define AGPIOC_DEALLOCATE _IOW(AGPIOC_BASE, 5, int) -#define AGPIOC_BIND _IOW(AGPIOC_BASE, 6, agp_bind_t) -#define AGPIOC_UNBIND _IOW(AGPIOC_BASE, 7, agp_unbind_t) - -#define AGP_DEVICE "/dev/agpgart" - -#endif /* _AGPGART_H */ diff --git a/hw/xfree86/os-support/solaris/sun_agp.c b/hw/xfree86/os-support/solaris/sun_agp.c index d151bf611..376f98edd 100644 --- a/hw/xfree86/os-support/solaris/sun_agp.c +++ b/hw/xfree86/os-support/solaris/sun_agp.c @@ -34,8 +34,6 @@ * of the copyright holder. */ -#pragma ident "@(#)sun_agp.c 1.1 05/04/04 SMI" - #ifdef HAVE_XORG_CONFIG_H #include #endif @@ -49,11 +47,8 @@ #include #include #include -#include "agpgart.h" +#include -#ifndef AGP_DEVICE -#define AGP_DEVICE "/dev/agpgart" -#endif /* AGP page size is independent of the host page size. */ #ifndef AGP_PAGE_SIZE #define AGP_PAGE_SIZE 4096 From 987579c930bda803427a28cb82773c389f5110d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 22 Apr 2009 13:26:40 +1000 Subject: [PATCH 11/89] dix: remove all but main() from main.c All other functions are pushed into where they seemed to fit. main.c is now linked separately into libmain.a and linked in by the various DDXs. Signed-off-by: Peter Hutterer --- configure.ac | 10 +- dix/Makefile.am | 6 +- dix/dispatch.c | 341 +++++++++++++++++++++++++- dix/events.c | 6 + dix/main.c | 368 ---------------------------- dix/swaprep.c | 15 ++ hw/dmx/Makefile.am | 1 + hw/vfb/Makefile.am | 1 + hw/xfree86/Makefile.am | 2 +- hw/xquartz/mach-startup/Makefile.am | 2 +- include/dix.h | 1 + 11 files changed, 376 insertions(+), 377 deletions(-) diff --git a/configure.ac b/configure.ac index 438ee0899..6628a4462 100644 --- a/configure.ac +++ b/configure.ac @@ -1153,6 +1153,10 @@ else DIX_LIB='$(top_builddir)/dix/libdix.la' OS_LIB='$(top_builddir)/os/libos.la' fi + +MAIN_LIB='$(top_builddir)/dix/libmain.la' +AC_SUBST([MAIN_LIB]) + MI_LIB='$(top_builddir)/mi/libmi.la' MI_EXT_LIB='$(top_builddir)/mi/libmiext.la' MI_INC='-I$(top_srcdir)/mi' @@ -1271,7 +1275,7 @@ AC_MSG_RESULT([$XNEST]) AM_CONDITIONAL(XNEST, [test "x$XNEST" = xyes]) if test "x$XNEST" = xyes; then - XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $OS_LIB $CONFIG_LIB" + XNEST_LIBS="$FB_LIB $FIXES_LIB $MI_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $GLX_LIBS $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $COMPOSITE_LIB $DIX_LIB $MAIN_LIB $OS_LIB $CONFIG_LIB" XNEST_SYS_LIBS="$XNESTMODULES_LIBS $GLX_SYS_LIBS" AC_SUBST([XNEST_LIBS]) AC_SUBST([XNEST_SYS_LIBS]) @@ -1643,7 +1647,7 @@ if test "x$XQUARTZ" = xyes; then AC_DEFINE(XQUARTZ,1,[Have Quartz]) AC_DEFINE(ROOTLESS,1,[Build Rootless code]) - DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" + DARWIN_LIBS="$MI_LIB $OS_LIB $DIX_LIB $MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $CONFIG_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB" AC_SUBST([DARWIN_LIBS]) AC_CHECK_LIB([Xplugin],[xp_init],[:]) @@ -1828,7 +1832,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" diff --git a/dix/Makefile.am b/dix/Makefile.am index 83b8c62c2..ab702f790 100644 --- a/dix/Makefile.am +++ b/dix/Makefile.am @@ -1,7 +1,10 @@ -noinst_LTLIBRARIES = libdix.la +noinst_LTLIBRARIES = libdix.la libmain.la AM_CFLAGS = $(DIX_CFLAGS) +libmain_la_SOURCES = \ + main.c + libdix_la_SOURCES = \ atom.c \ colormap.c \ @@ -26,7 +29,6 @@ libdix_la_SOURCES = \ grabs.c \ initatoms.c \ inpututils.c \ - main.c \ pixmap.c \ privates.c \ property.c \ diff --git a/dix/dispatch.c b/dix/dispatch.c index a9f936707..16a51bdc5 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -107,6 +107,7 @@ Equipment Corporation. #ifdef HAVE_DIX_CONFIG_H #include +#include #endif #ifdef PANORAMIX_DEBUG @@ -134,6 +135,7 @@ int ProcInitialConnection(); #include "xace.h" #include "inputstr.h" #include "xkbsrv.h" +#include "site.h" #ifdef XSERVER_DTRACE #include "registry.h" @@ -150,7 +152,9 @@ typedef const char *string; #define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i) #define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i)) -extern xConnSetupPrefix connSetupPrefix; +xConnSetupPrefix connSetupPrefix; + +PaddingInfo PixmapWidthPaddingInfo[33]; static ClientPtr grabClient; #define GrabNone 0 @@ -160,7 +164,7 @@ static int grabState = GrabNone; static long grabWaiters[mskcnt]; CallbackListPtr ServerGrabCallback = NULL; HWEventQueuePtr checkForInput[2]; -extern int connBlockScreenStart; +int connBlockScreenStart; static void KillAllClients(void); @@ -461,6 +465,166 @@ Dispatch(void) #undef MAJOROP +static int VendorRelease = VENDOR_RELEASE; +static char *VendorString = VENDOR_NAME; + +static const int padlength[4] = {0, 3, 2, 1}; + +void +SetVendorRelease(int release) +{ + VendorRelease = release; +} + +void +SetVendorString(char *string) +{ + VendorString = string; +} + +Bool +CreateConnectionBlock(void) +{ + xConnSetup setup; + xWindowRoot root; + xDepth depth; + xVisualType visual; + xPixmapFormat format; + unsigned long vid; + int i, j, k, + lenofblock, + sizesofar = 0; + char *pBuf; + + + memset(&setup, 0, sizeof(xConnSetup)); + /* Leave off the ridBase and ridMask, these must be sent with + connection */ + + setup.release = VendorRelease; + /* + * per-server image and bitmap parameters are defined in Xmd.h + */ + setup.imageByteOrder = screenInfo.imageByteOrder; + + setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; + setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; + + setup.bitmapBitOrder = screenInfo.bitmapBitOrder; + setup.motionBufferSize = NumMotionEvents(); + setup.numRoots = screenInfo.numScreens; + setup.nbytesVendor = strlen(VendorString); + setup.numFormats = screenInfo.numPixmapFormats; + setup.maxRequestSize = MAX_REQUEST_SIZE; + QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); + + lenofblock = sizeof(xConnSetup) + + ((setup.nbytesVendor + 3) & ~3) + + (setup.numFormats * sizeof(xPixmapFormat)) + + (setup.numRoots * sizeof(xWindowRoot)); + ConnectionInfo = xalloc(lenofblock); + if (!ConnectionInfo) + return FALSE; + + memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); + sizesofar = sizeof(xConnSetup); + pBuf = ConnectionInfo + sizeof(xConnSetup); + + memmove(pBuf, VendorString, (int)setup.nbytesVendor); + sizesofar += setup.nbytesVendor; + pBuf += setup.nbytesVendor; + i = padlength[setup.nbytesVendor & 3]; + sizesofar += i; + while (--i >= 0) + *pBuf++ = 0; + + memset(&format, 0, sizeof(xPixmapFormat)); + for (i=0; idrawable.id; + root.defaultColormap = pScreen->defColormap; + root.whitePixel = pScreen->whitePixel; + root.blackPixel = pScreen->blackPixel; + root.currentInputMask = 0; /* filled in when sent */ + root.pixWidth = pScreen->width; + root.pixHeight = pScreen->height; + root.mmWidth = pScreen->mmWidth; + root.mmHeight = pScreen->mmHeight; + root.minInstalledMaps = pScreen->minInstalledCmaps; + root.maxInstalledMaps = pScreen->maxInstalledCmaps; + root.rootVisualID = pScreen->rootVisual; + root.backingStore = pScreen->backingStoreSupport; + root.saveUnders = FALSE; + root.rootDepth = pScreen->rootDepth; + root.nDepths = pScreen->numDepths; + memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); + sizesofar += sizeof(xWindowRoot); + pBuf += sizeof(xWindowRoot); + + pDepth = pScreen->allowedDepths; + for(j = 0; j < pScreen->numDepths; j++, pDepth++) + { + lenofblock += sizeof(xDepth) + + (pDepth->numVids * sizeof(xVisualType)); + pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); + if (!pBuf) + { + xfree(ConnectionInfo); + return FALSE; + } + ConnectionInfo = pBuf; + pBuf += sizesofar; + depth.depth = pDepth->depth; + depth.nVisuals = pDepth->numVids; + memmove(pBuf, (char *)&depth, sizeof(xDepth)); + pBuf += sizeof(xDepth); + sizesofar += sizeof(xDepth); + for(k = 0; k < pDepth->numVids; k++) + { + vid = pDepth->vids[k]; + for (pVisual = pScreen->visuals; + pVisual->vid != vid; + pVisual++) + ; + visual.visualID = vid; + visual.class = pVisual->class; + visual.bitsPerRGB = pVisual->bitsPerRGBValue; + visual.colormapEntries = pVisual->ColormapEntries; + visual.redMask = pVisual->redMask; + visual.greenMask = pVisual->greenMask; + visual.blueMask = pVisual->blueMask; + memmove(pBuf, (char *)&visual, sizeof(xVisualType)); + pBuf += sizeof(xVisualType); + sizesofar += sizeof(xVisualType); + } + } + } + connSetupPrefix.success = xTrue; + connSetupPrefix.length = lenofblock/4; + connSetupPrefix.majorVersion = X_PROTOCOL; + connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; + return TRUE; +} + + int ProcBadRequest(ClientPtr client) { @@ -3700,3 +3864,176 @@ MarkClientException(ClientPtr client) { client->noClientException = -1; } + +/* + * This array encodes the answer to the question "what is the log base 2 + * of the number of pixels that fit in a scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int answer[6][4] = { + /* pad pad pad pad*/ + /* 8 16 32 64 */ + + { 3, 4, 5 , 6 }, /* 1 bit per pixel */ + { 1, 2, 3 , 4 }, /* 4 bits per pixel */ + { 0, 1, 2 , 3 }, /* 8 bits per pixel */ + { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ + { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ + { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the first index for + * the answer array above given the number of bits per pixel?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForBitsPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 1, ~0, ~0, ~0, /* 4 bits per pixel */ + 2, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 4, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 5 /* 32 bits per pixel */ +}; + +/* + * This array gives the bytesperPixel value for cases where the number + * of bits per pixel is a multiple of 8 but not a power of 2. + */ +static int answerBytesPerPixel[ 33 ] = { + ~0, 0, ~0, ~0, /* 1 bit per pixel */ + 0, ~0, ~0, ~0, /* 4 bits per pixel */ + 0, ~0, ~0, ~0, /* 8 bits per pixel */ + ~0,~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 16 bits per pixel */ + ~0,~0, ~0, ~0, + 3, ~0, ~0, ~0, /* 24 bits per pixel */ + ~0,~0, ~0, ~0, + 0 /* 32 bits per pixel */ +}; + +/* + * This array gives the answer to the question "what is the second index for + * the answer array above given the number of bits per scanline pad unit?" + * Note that ~0 is an invalid entry (mostly for the benefit of the reader). + */ +static int indexForScanlinePad[ 65 ] = { + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + ~0, ~0, ~0, ~0, + 3 /* 64 bits per scanline pad unit */ +}; + +#ifndef MIN +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + +/* + grow the array of screenRecs if necessary. + call the device-supplied initialization procedure +with its screen number, a pointer to its ScreenRec, argc, and argv. + return the number of successfully installed screens. + +*/ + +int +AddScreen( + Bool (* pfnInit)( + int /*index*/, + ScreenPtr /*pScreen*/, + int /*argc*/, + char ** /*argv*/ + ), + int argc, + char **argv) +{ + + int i; + int scanlinepad, format, depth, bitsPerPixel, j, k; + ScreenPtr pScreen; + + i = screenInfo.numScreens; + if (i == MAXSCREENS) + return -1; + + pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); + if (!pScreen) + return -1; + + pScreen->devPrivates = NULL; + pScreen->myNum = i; + pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); + pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ + pScreen->CreateScreenResources = 0; + + /* + * This loop gets run once for every Screen that gets added, + * but thats ok. If the ddx layer initializes the formats + * one at a time calling AddScreen() after each, then each + * iteration will make it a little more accurate. Worst case + * we do this loop N * numPixmapFormats where N is # of screens. + * Anyway, this must be called after InitOutput and before the + * screen init routine is called. + */ + for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ + WindowTable[i] = NullWindow; + screenInfo.screens[i] = pScreen; + screenInfo.numScreens++; + if (!(*pfnInit)(i, pScreen, argc, argv)) + { + dixFreePrivates(pScreen->devPrivates); + xfree(pScreen); + screenInfo.numScreens--; + return -1; + } + return i; +} diff --git a/dix/events.c b/dix/events.c index faa84259c..8af71b645 100644 --- a/dix/events.c +++ b/dix/events.c @@ -273,6 +273,12 @@ static struct { static xEvent* swapEvent = NULL; static int swapEventLen = 0; +void +NotImplemented(xEvent *from, xEvent *to) +{ + FatalError("Not implemented"); +} + /** * Convert the given event type from an XI event to a core event. * @param[in] The XI 1.x event type. diff --git a/dix/main.c b/dix/main.c index 9d5d83944..25b085e88 100644 --- a/dix/main.c +++ b/dix/main.c @@ -118,120 +118,7 @@ Equipment Corporation. extern void Dispatch(void); -xConnSetupPrefix connSetupPrefix; - -extern FontPtr defaultFont; - extern void InitProcVectors(void); -extern Bool CreateGCperDepthArray(void); - -#ifndef PANORAMIX -static -#endif -Bool CreateConnectionBlock(void); - -PaddingInfo PixmapWidthPaddingInfo[33]; - -int connBlockScreenStart; - -void -NotImplemented(xEvent *from, xEvent *to) -{ - FatalError("Not implemented"); -} - -/* - * Dummy entry for ReplySwapVector[] - */ - -void -ReplyNotSwappd( - ClientPtr pClient , - int size , - void * pbuf - ) -{ - FatalError("Not implemented"); -} - -/* - * This array encodes the answer to the question "what is the log base 2 - * of the number of pixels that fit in a scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int answer[6][4] = { - /* pad pad pad pad*/ - /* 8 16 32 64 */ - - { 3, 4, 5 , 6 }, /* 1 bit per pixel */ - { 1, 2, 3 , 4 }, /* 4 bits per pixel */ - { 0, 1, 2 , 3 }, /* 8 bits per pixel */ - { ~0, 0, 1 , 2 }, /* 16 bits per pixel */ - { ~0, ~0, 0 , 1 }, /* 24 bits per pixel */ - { ~0, ~0, 0 , 1 } /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the first index for - * the answer array above given the number of bits per pixel?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForBitsPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 1, ~0, ~0, ~0, /* 4 bits per pixel */ - 2, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 4, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 5 /* 32 bits per pixel */ -}; - -/* - * This array gives the bytesperPixel value for cases where the number - * of bits per pixel is a multiple of 8 but not a power of 2. - */ -static int answerBytesPerPixel[ 33 ] = { - ~0, 0, ~0, ~0, /* 1 bit per pixel */ - 0, ~0, ~0, ~0, /* 4 bits per pixel */ - 0, ~0, ~0, ~0, /* 8 bits per pixel */ - ~0,~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 16 bits per pixel */ - ~0,~0, ~0, ~0, - 3, ~0, ~0, ~0, /* 24 bits per pixel */ - ~0,~0, ~0, ~0, - 0 /* 32 bits per pixel */ -}; - -/* - * This array gives the answer to the question "what is the second index for - * the answer array above given the number of bits per scanline pad unit?" - * Note that ~0 is an invalid entry (mostly for the benefit of the reader). - */ -static int indexForScanlinePad[ 65 ] = { - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 0, ~0, ~0, ~0, /* 8 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - 1, ~0, ~0, ~0, /* 16 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 2, ~0, ~0, ~0, /* 32 bits per scanline pad unit */ - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - ~0, ~0, ~0, ~0, - 3 /* 64 bits per scanline pad unit */ -}; - -#ifndef MIN -#define MIN(a,b) (((a) < (b)) ? (a) : (b)) -#endif #ifdef XQUARTZ #include @@ -456,258 +343,3 @@ int main(int argc, char *argv[], char *envp[]) return(0); } -static int VendorRelease = VENDOR_RELEASE; -static char *VendorString = VENDOR_NAME; - -void -SetVendorRelease(int release) -{ - VendorRelease = release; -} - -void -SetVendorString(char *string) -{ - VendorString = string; -} - -static const int padlength[4] = {0, 3, 2, 1}; - -#ifndef PANORAMIX -static -#endif -Bool -CreateConnectionBlock(void) -{ - xConnSetup setup; - xWindowRoot root; - xDepth depth; - xVisualType visual; - xPixmapFormat format; - unsigned long vid; - int i, j, k, - lenofblock, - sizesofar = 0; - char *pBuf; - - - memset(&setup, 0, sizeof(xConnSetup)); - /* Leave off the ridBase and ridMask, these must be sent with - connection */ - - setup.release = VendorRelease; - /* - * per-server image and bitmap parameters are defined in Xmd.h - */ - setup.imageByteOrder = screenInfo.imageByteOrder; - - setup.bitmapScanlineUnit = screenInfo.bitmapScanlineUnit; - setup.bitmapScanlinePad = screenInfo.bitmapScanlinePad; - - setup.bitmapBitOrder = screenInfo.bitmapBitOrder; - setup.motionBufferSize = NumMotionEvents(); - setup.numRoots = screenInfo.numScreens; - setup.nbytesVendor = strlen(VendorString); - setup.numFormats = screenInfo.numPixmapFormats; - setup.maxRequestSize = MAX_REQUEST_SIZE; - QueryMinMaxKeyCodes(&setup.minKeyCode, &setup.maxKeyCode); - - lenofblock = sizeof(xConnSetup) + - ((setup.nbytesVendor + 3) & ~3) + - (setup.numFormats * sizeof(xPixmapFormat)) + - (setup.numRoots * sizeof(xWindowRoot)); - ConnectionInfo = xalloc(lenofblock); - if (!ConnectionInfo) - return FALSE; - - memmove(ConnectionInfo, (char *)&setup, sizeof(xConnSetup)); - sizesofar = sizeof(xConnSetup); - pBuf = ConnectionInfo + sizeof(xConnSetup); - - memmove(pBuf, VendorString, (int)setup.nbytesVendor); - sizesofar += setup.nbytesVendor; - pBuf += setup.nbytesVendor; - i = padlength[setup.nbytesVendor & 3]; - sizesofar += i; - while (--i >= 0) - *pBuf++ = 0; - - memset(&format, 0, sizeof(xPixmapFormat)); - for (i=0; idrawable.id; - root.defaultColormap = pScreen->defColormap; - root.whitePixel = pScreen->whitePixel; - root.blackPixel = pScreen->blackPixel; - root.currentInputMask = 0; /* filled in when sent */ - root.pixWidth = pScreen->width; - root.pixHeight = pScreen->height; - root.mmWidth = pScreen->mmWidth; - root.mmHeight = pScreen->mmHeight; - root.minInstalledMaps = pScreen->minInstalledCmaps; - root.maxInstalledMaps = pScreen->maxInstalledCmaps; - root.rootVisualID = pScreen->rootVisual; - root.backingStore = pScreen->backingStoreSupport; - root.saveUnders = FALSE; - root.rootDepth = pScreen->rootDepth; - root.nDepths = pScreen->numDepths; - memmove(pBuf, (char *)&root, sizeof(xWindowRoot)); - sizesofar += sizeof(xWindowRoot); - pBuf += sizeof(xWindowRoot); - - pDepth = pScreen->allowedDepths; - for(j = 0; j < pScreen->numDepths; j++, pDepth++) - { - lenofblock += sizeof(xDepth) + - (pDepth->numVids * sizeof(xVisualType)); - pBuf = (char *)xrealloc(ConnectionInfo, lenofblock); - if (!pBuf) - { - xfree(ConnectionInfo); - return FALSE; - } - ConnectionInfo = pBuf; - pBuf += sizesofar; - depth.depth = pDepth->depth; - depth.nVisuals = pDepth->numVids; - memmove(pBuf, (char *)&depth, sizeof(xDepth)); - pBuf += sizeof(xDepth); - sizesofar += sizeof(xDepth); - for(k = 0; k < pDepth->numVids; k++) - { - vid = pDepth->vids[k]; - for (pVisual = pScreen->visuals; - pVisual->vid != vid; - pVisual++) - ; - visual.visualID = vid; - visual.class = pVisual->class; - visual.bitsPerRGB = pVisual->bitsPerRGBValue; - visual.colormapEntries = pVisual->ColormapEntries; - visual.redMask = pVisual->redMask; - visual.greenMask = pVisual->greenMask; - visual.blueMask = pVisual->blueMask; - memmove(pBuf, (char *)&visual, sizeof(xVisualType)); - pBuf += sizeof(xVisualType); - sizesofar += sizeof(xVisualType); - } - } - } - connSetupPrefix.success = xTrue; - connSetupPrefix.length = lenofblock/4; - connSetupPrefix.majorVersion = X_PROTOCOL; - connSetupPrefix.minorVersion = X_PROTOCOL_REVISION; - return TRUE; -} - -/* - grow the array of screenRecs if necessary. - call the device-supplied initialization procedure -with its screen number, a pointer to its ScreenRec, argc, and argv. - return the number of successfully installed screens. - -*/ - -int -AddScreen( - Bool (* pfnInit)( - int /*index*/, - ScreenPtr /*pScreen*/, - int /*argc*/, - char ** /*argv*/ - ), - int argc, - char **argv) -{ - - int i; - int scanlinepad, format, depth, bitsPerPixel, j, k; - ScreenPtr pScreen; - - i = screenInfo.numScreens; - if (i == MAXSCREENS) - return -1; - - pScreen = (ScreenPtr) xcalloc(1, sizeof(ScreenRec)); - if (!pScreen) - return -1; - - pScreen->devPrivates = NULL; - pScreen->myNum = i; - pScreen->totalPixmapSize = BitmapBytePad(sizeof(PixmapRec)*8); - pScreen->ClipNotify = 0; /* for R4 ddx compatibility */ - pScreen->CreateScreenResources = 0; - - /* - * This loop gets run once for every Screen that gets added, - * but thats ok. If the ddx layer initializes the formats - * one at a time calling AddScreen() after each, then each - * iteration will make it a little more accurate. Worst case - * we do this loop N * numPixmapFormats where N is # of screens. - * Anyway, this must be called after InitOutput and before the - * screen init routine is called. - */ - for (format=0; formatrgf = ~0L; /* there are no scratch GCs yet*/ - WindowTable[i] = NullWindow; - screenInfo.screens[i] = pScreen; - screenInfo.numScreens++; - if (!(*pfnInit)(i, pScreen, argc, argv)) - { - dixFreePrivates(pScreen->devPrivates); - xfree(pScreen); - screenInfo.numScreens--; - return -1; - } - return i; -} diff --git a/dix/swaprep.c b/dix/swaprep.c index 9eb67654a..86242168f 100644 --- a/dix/swaprep.c +++ b/dix/swaprep.c @@ -1291,3 +1291,18 @@ WriteSConnSetupPrefix(ClientPtr pClient, xConnSetupPrefix *pcsp) SwapConnSetupPrefix(pcsp, &cspT); (void)WriteToClient(pClient, sizeof(cspT), (char *) &cspT); } + +/* + * Dummy entry for ReplySwapVector[] + */ + +void +ReplyNotSwappd( + ClientPtr pClient , + int size , + void * pbuf + ) +{ + FatalError("Not implemented"); +} + diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am index 9d2778ae4..9e9b39a19 100644 --- a/hw/dmx/Makefile.am +++ b/hw/dmx/Makefile.am @@ -85,6 +85,7 @@ XDMX_LIBS = \ $(GLX_LIBS) \ input/libdmxinput.a \ config/libdmxconfig.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xdmx_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/vfb/Makefile.am b/hw/vfb/Makefile.am index a4a120a05..c5b49a37d 100644 --- a/hw/vfb/Makefile.am +++ b/hw/vfb/Makefile.am @@ -22,6 +22,7 @@ Xvfb_SOURCES = $(SRCS) XVFB_LIBS = \ @XVFB_LIBS@ \ libfbcmap.a \ + $(MAIN_LIB) \ $(XSERVER_LIBS) Xvfb_LDADD = $(XVFB_LIBS) $(XVFB_SYS_LIBS) $(XSERVER_SYS_LIBS) diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am index b6a534b2f..3b9ff9c3e 100644 --- a/hw/xfree86/Makefile.am +++ b/hw/xfree86/Makefile.am @@ -56,7 +56,7 @@ libxorg.c xorg.c: DISTCLEANFILES = libxorg.c xorg.c Xorg_DEPENDENCIES = libxorg.la -Xorg_LDADD = libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) +Xorg_LDADD = $(MAIN_LIB) libxorg.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am index b0112949d..0c609e384 100644 --- a/hw/xquartz/mach-startup/Makefile.am +++ b/hw/xquartz/mach-startup/Makefile.am @@ -19,7 +19,7 @@ X11_bin_LDADD = \ $(top_builddir)/dix/dixfonts.lo \ $(top_builddir)/miext/rootless/librootless.la \ $(top_builddir)/hw/xquartz/pbproxy/libxpbproxy.la \ - $(DARWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin + $(DARWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) -lXplugin X11_bin_LDFLAGS = \ -XCClinker -Objc \ diff --git a/include/dix.h b/include/dix.h index b1333dc5c..896553a60 100644 --- a/include/dix.h +++ b/include/dix.h @@ -170,6 +170,7 @@ extern _X_EXPORT void SendErrorToClient( extern _X_EXPORT void MarkClientException( ClientPtr /*client*/); +extern _X_HIDDEN Bool CreateConnectionBlock(void); /* dixutils.c */ extern _X_EXPORT void CopyISOLatin1Lowered( From 4124c465a85713fe44843a16c5e2b13ece17e9d2 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 15 Apr 2009 17:21:08 +1000 Subject: [PATCH 12/89] Add a test-suite for in-server unit-testing. This patch adds a test/ directory that contains the setup for a unit-testing suite designed for in-server unit-testing. All functions available to the X server are available to the test binaries through static linking. This test suite uses the glib testing framework. Do not use glib calls outside of the test/ directory. Signed-off-by: Peter Hutterer --- configure.ac | 12 ++++ test/Makefile.am | 39 +++++++++++ test/README | 36 ++++++++++ test/xkb.c | 173 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+) create mode 100644 test/Makefile.am create mode 100644 test/README create mode 100644 test/xkb.c diff --git a/configure.ac b/configure.ac index 6628a4462..2151ed120 100644 --- a/configure.ac +++ b/configure.ac @@ -439,6 +439,9 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) +AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], + [Enable unit-tests (default: enabled)]), + [UNITTESTS=$enableval], [UNITTESTS=yes]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1141,6 +1144,14 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xyes; then + AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) + AC_SUBST([GLIB_LIBS]) + AC_SUBST([GLIB_CFLAGS]) +fi +AM_CONDITIONAL(UNITTESTS, [test "x$UNITTESTS" = xyes]) + AC_DEFINE(XTEST, 1, [Support XTest extension]) AC_DEFINE(XSYNC, 1, [Support XSync extension]) AC_DEFINE(XCMISC, 1, [Support XCMisc extension]) @@ -1980,5 +1991,6 @@ hw/kdrive/fbdev/Makefile hw/kdrive/linux/Makefile hw/kdrive/sdl/Makefile hw/kdrive/src/Makefile +test/Makefile xorg-server.pc ]) diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 000000000..5b1daac20 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,39 @@ +if UNITTESTS +check_PROGRAMS = xkb +check_LTLIBRARIES = libxservertest.la + +TESTS=$(check_PROGRAMS) + +AM_CFLAGS = $(DIX_CFLAGS) $(GLIB_CFLAGS) @XORG_CFLAGS@ +INCLUDES = @XORG_INCS@ +TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) + +xkb_LDADD=$(TEST_LDADD) + + +libxservertest_la_LIBADD = \ + $(XSERVER_LIBS) \ + $(top_builddir)/hw/xfree86/loader/libloader.la \ + $(top_builddir)/hw/xfree86/os-support/libxorgos.la \ + $(top_builddir)/hw/xfree86/common/libcommon.la \ + $(top_builddir)/hw/xfree86/parser/libxf86config.la \ + $(top_builddir)/hw/xfree86/dixmods/libdixmods.la \ + $(top_builddir)/hw/xfree86/modes/libxf86modes.la \ + $(top_builddir)/hw/xfree86/ramdac/libramdac.la \ + $(top_builddir)/hw/xfree86/ddc/libddc.la \ + $(top_builddir)/hw/xfree86/i2c/libi2c.la \ + $(top_builddir)/hw/xfree86/dixmods/libxorgxkb.la \ + $(top_builddir)/hw/xfree86/libxorg.la \ + $(top_builddir)/mi/libmi.la \ + $(top_builddir)/os/libos.la \ + @XORG_LIBS@ + +CLEANFILES=libxservertest.c + +libxservertest.c: + touch $@ + +all: + @echo "Run 'make check' to run the test suite" + +endif diff --git a/test/README b/test/README new file mode 100644 index 000000000..5759a72fd --- /dev/null +++ b/test/README @@ -0,0 +1,36 @@ + X server test suite + +This suite contains a set of tests to verify the behaviour of functions used +internally to the server. This test suite is based on glib's testing +framework [1]. + += How it works = +Through some automake abuse, we link the test programs with the same static +libraries as the Xorg binary. The test suites can then call various functions +and verify their behaviour - without the need to start the server or connect +clients. + +This testing only works for functions that do not rely on a particular state +of the X server. Unless the test suite replicates the expected state, which +may be difficult. + += How to run the tests = +Run "make check" the test directory. This will compile the tests and execute +them in the order specified in the TESTS variable in test/Makefile.am. + +Each set of tests related to a subsystem are available as a binary that can be +executed directly. For example, run "xkb" to perform some xkb-related tests. + +== Adding a new test == +When adding a new test, ensure that you add a short description of what the +test does and what the expected outcome is. If the test reproduces a +particular bug, using g_test_bug(). + +== Misc == + +The programs "gtester" and "gtester-report" may be used to generate XML/HTML +log files of tests succeeded and failed. + +--------- + +[1] http://library.gnome.org/devel/glib/stable/glib-Testing.html diff --git a/test/xkb.c b/test/xkb.c new file mode 100644 index 000000000..6fbb26a01 --- /dev/null +++ b/test/xkb.c @@ -0,0 +1,173 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "misc.h" +#include "inputstr.h" +#include "opaque.h" +#include "property.h" +#define XKBSRV_NEED_FILE_FUNCS +#include +#include "../xkb/xkbgeom.h" +#include +#include "xkbfile.h" +#include "../xkb/xkb.h" + +#include + +/** + * Initialize an empty XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_get_rules_test(void) +{ + XkbRMLVOSet rmlvo = { NULL}; + XkbGetRulesDflts(&rmlvo); + + + g_assert(rmlvo.rules); + g_assert(rmlvo.model); + g_assert(rmlvo.layout); + g_assert(rmlvo.variant); + g_assert(rmlvo.options); + g_assert(strcmp(rmlvo.rules, XKB_DFLT_RULES) == 0); + g_assert(strcmp(rmlvo.model, XKB_DFLT_MODEL) == 0); + g_assert(strcmp(rmlvo.layout, XKB_DFLT_LAYOUT) == 0); + g_assert(strcmp(rmlvo.variant, XKB_DFLT_VARIANT) == 0); + g_assert(strcmp(rmlvo.options, XKB_DFLT_OPTIONS) == 0); +} + +/** + * Initialize an random XkbRMLVOSet. + * Call XkbGetRulesDflts to obtain the default ruleset. + * Compare obtained ruleset with the built-in defaults. + * Result: RMLVO defaults are the same as obtained. + */ +static void xkb_set_rules_test(void) +{ + XkbRMLVOSet rmlvo = { + .rules = "test-rules", + .model = "test-model", + .layout = "test-layout", + .variant = "test-variant", + .options = "test-options" + }; + XkbRMLVOSet rmlvo_new = { NULL }; + + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo_new); + + /* XkbGetRulesDflts strdups the values */ + g_assert(rmlvo.rules != rmlvo_new.rules); + g_assert(rmlvo.model != rmlvo_new.model); + g_assert(rmlvo.layout != rmlvo_new.layout); + g_assert(rmlvo.variant != rmlvo_new.variant); + g_assert(rmlvo.options != rmlvo_new.options); + + g_assert(strcmp(rmlvo.rules, rmlvo_new.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_new.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_new.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_new.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_new.options) == 0); +} + + +/** + * Get the default RMLVO set. + * Set the default RMLVO set. + * Get the default RMLVO set. + * Repeat the last two steps. + * + * Result: RMLVO set obtained is the same as previously set. + */ +static void xkb_set_get_rules_test(void) +{ +/* This test failed before XkbGetRulesDftlts changed to strdup. + We test this twice because the first time using XkbGetRulesDflts we obtain + the built-in defaults. The unexpected free isn't triggered until the second + XkbSetRulesDefaults. + */ + XkbRMLVOSet rmlvo = { NULL }; + XkbRMLVOSet rmlvo_backup; + + XkbGetRulesDflts(&rmlvo); + + /* pass 1 */ + XkbSetRulesDflts(&rmlvo); + XkbGetRulesDflts(&rmlvo); + + /* Make a backup copy */ + rmlvo_backup.rules = strdup(rmlvo.rules); + rmlvo_backup.layout = strdup(rmlvo.layout); + rmlvo_backup.model = strdup(rmlvo.model); + rmlvo_backup.variant = strdup(rmlvo.variant); + rmlvo_backup.options = strdup(rmlvo.options); + + /* pass 2 */ + XkbSetRulesDflts(&rmlvo); + + /* This test is iffy, because strictly we may be comparing against already + * freed memory */ + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); + + XkbGetRulesDflts(&rmlvo); + g_assert(strcmp(rmlvo.rules, rmlvo_backup.rules) == 0); + g_assert(strcmp(rmlvo.model, rmlvo_backup.model) == 0); + g_assert(strcmp(rmlvo.layout, rmlvo_backup.layout) == 0); + g_assert(strcmp(rmlvo.variant, rmlvo_backup.variant) == 0); + g_assert(strcmp(rmlvo.options, rmlvo_backup.options) == 0); +} + + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/xkb/set-get-rules", xkb_set_get_rules_test); + g_test_add_func("/xkb/get-rules", xkb_get_rules_test); + g_test_add_func("/xkb/set-rules", xkb_set_rules_test); + + return g_test_run(); +} From 1127ca097cb75450bcccfc5f5d82e435de2fb5b7 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 16 Apr 2009 11:41:58 +1000 Subject: [PATCH 13/89] test: add a simple test to verify device axis intialization. Signed-off-by: Peter Hutterer --- test/Makefile.am | 4 +-- test/input.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 test/input.c diff --git a/test/Makefile.am b/test/Makefile.am index 5b1daac20..dbad93bb1 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,5 +1,5 @@ if UNITTESTS -check_PROGRAMS = xkb +check_PROGRAMS = xkb input check_LTLIBRARIES = libxservertest.la TESTS=$(check_PROGRAMS) @@ -9,7 +9,7 @@ INCLUDES = @XORG_INCS@ TEST_LDADD=libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLIB_LIBS) xkb_LDADD=$(TEST_LDADD) - +input_LDADD=$(TEST_LDADD) libxservertest_la_LIBADD = \ $(XSERVER_LIBS) \ diff --git a/test/input.c b/test/input.c new file mode 100644 index 000000000..bcb4c5786 --- /dev/null +++ b/test/input.c @@ -0,0 +1,83 @@ +/** + * Copyright © 2009 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#ifdef HAVE_DIX_CONFIG_H +#include +#endif + +#include +#include "misc.h" +#include "resource.h" +#include +#include +#include "windowstr.h" +#include "inputstr.h" + +#include + +/** + * Init a device with axes. + * Verify values set on the device. + * + * Result: All axes set to default values (usually 0). + */ +static void dix_init_valuators(void) +{ + DeviceIntRec dev; + ValuatorClassPtr val; + const int num_axes = 2; + int i; + + + memset(&dev, 0, sizeof(DeviceIntRec)); + dev.isMaster = TRUE; /* claim it's a master to stop ptracccel */ + + g_assert(InitValuatorClassDeviceStruct(NULL, 0, 0, 0) == FALSE); + g_assert(InitValuatorClassDeviceStruct(&dev, num_axes, 0, Absolute)); + + val = dev.valuator; + g_assert(val); + g_assert(val->numAxes == num_axes); + g_assert(val->numMotionEvents == 0); + g_assert(val->mode == Absolute); + g_assert(val->axisVal); + + for (i = 0; i < num_axes; i++) + { + g_assert(val->axisVal[i] == 0); + g_assert(val->axes->min_value == NO_AXIS_LIMITS); + g_assert(val->axes->max_value == NO_AXIS_LIMITS); + } + + g_assert(dev.last.numValuators == num_axes); +} + +int main(int argc, char** argv) +{ + g_test_init(&argc, &argv,NULL); + g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); + + g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + + return g_test_run(); +} From dc2767d1c5db60385867c76ba2de507fe0cb8a90 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 21 Apr 2009 22:18:23 +1000 Subject: [PATCH 14/89] test: add InternalEvent to core event conversion tests. Signed-off-by: Peter Hutterer --- test/input.c | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/test/input.c b/test/input.c index bcb4c5786..eb0543eda 100644 --- a/test/input.c +++ b/test/input.c @@ -32,6 +32,7 @@ #include #include "windowstr.h" #include "inputstr.h" +#include "eventconvert.h" #include @@ -72,12 +73,155 @@ static void dix_init_valuators(void) g_assert(dev.last.numValuators == num_axes); } + +/** + * Convert various internal events to the matching core event and verify the + * parameters. + */ +static void dix_event_to_core(int type) +{ + DeviceEvent ev; + xEvent core; + int time; + int x, y; + int rc; + int state; + int detail; + + /* EventToCore memsets the event to 0 */ +#define test_event() \ + g_assert(rc == Success); \ + g_assert(core.u.u.type == type); \ + g_assert(core.u.u.detail == detail); \ + g_assert(core.u.keyButtonPointer.time == time); \ + g_assert(core.u.keyButtonPointer.rootX == x); \ + g_assert(core.u.keyButtonPointer.rootY == y); \ + g_assert(core.u.keyButtonPointer.state == state); \ + g_assert(core.u.keyButtonPointer.eventX == 0); \ + g_assert(core.u.keyButtonPointer.eventY == 0); \ + g_assert(core.u.keyButtonPointer.root == 0); \ + g_assert(core.u.keyButtonPointer.event == 0); \ + g_assert(core.u.keyButtonPointer.child == 0); \ + g_assert(core.u.keyButtonPointer.sameScreen == FALSE); + + x = 0; + y = 0; + time = 12345; + state = 0; + detail = 0; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + ev.time = time; + ev.root_y = x; + ev.root_x = y; + ev.corestate = state; + ev.detail.key = detail; + + ev.type = type; + ev.detail.key = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 1; + y = 2; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + x = 0x8000; /* too high */ + y = 0x8000; /* too high */ + ev.root_x = x; + ev.root_y = y; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.rootX != x); + g_assert(core.u.keyButtonPointer.rootY != y); + + x = 0x7FFF; + y = 0x7FFF; + ev.root_x = x; + ev.root_y = y; + time = 0; + ev.time = time; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 1; + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFF; /* highest value */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + detail = 0xFFF; /* too big */ + ev.detail.key = detail; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadMatch); + + detail = 0xFF; /* too big */ + ev.detail.key = detail; + state = 0xFFFF; /* highest value */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + test_event(); + + state = 0x10000; /* too big */ + ev.corestate = state; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(core.u.keyButtonPointer.state != state); + g_assert(core.u.keyButtonPointer.state == (state & 0xFFFF)); + +#undef test_event +} + +static void dix_event_to_core_conversion(void) +{ + DeviceEvent ev; + xEvent core; + int rc; + + ev.header = 0xFF; + ev.length = sizeof(DeviceEvent); + + ev.type = 0; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + ev.type = ET_ProximityOut + 1; + rc = EventToCore((InternalEvent*)&ev, &core); + g_assert(rc == BadImplementation); + + dix_event_to_core(ET_KeyPress); + dix_event_to_core(ET_KeyRelease); + dix_event_to_core(ET_ButtonPress); + dix_event_to_core(ET_ButtonRelease); + dix_event_to_core(ET_Motion); + dix_event_to_core(ET_ProximityIn); + dix_event_to_core(ET_ProximityOut); +} + int main(int argc, char** argv) { g_test_init(&argc, &argv,NULL); g_test_bug_base("https://bugzilla.freedesktop.org/show_bug.cgi?id="); g_test_add_func("/dix/input/init-valuators", dix_init_valuators); + g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion); return g_test_run(); } From 737b49199a05299486064e6e762cf2a2f6f95be6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 9 Apr 2009 15:40:24 +1000 Subject: [PATCH 15/89] xfree86: restore default off for DontZap Zapping is triggered by xkb these days, so note in the man page that it's the Terminate_Server action. Since it's XKB, personal preferences towards or against zapping should be achieved through xkb rulesets. If Terminate_Server is not in the xkb actions, then we can't zap anyway and we don't need a default of DontZap "on". This patch restores the old meaning of DontZap - disallow zapping altogether, regardless of XKB's current keymap. Ideally, this patch should be accompanied by b0f64bdab00db652e in xkeyboard-config. Signed-off-by: Peter Hutterer --- doc/Xserver.man.pre | 2 +- hw/xfree86/common/xf86Config.c | 5 ++--- hw/xfree86/doc/man/xorg.conf.man.pre | 11 +++++------ 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/Xserver.man.pre b/doc/Xserver.man.pre index e9a3b9c7d..e2673f7be 100644 --- a/doc/Xserver.man.pre +++ b/doc/Xserver.man.pre @@ -219,7 +219,7 @@ turns on auto-repeat. starts the stipple with the classic stipple and cursor visible. The default is to start with a black root window, and to suppress display of the cursor until the first time an application calls XDefineCursor(). For the Xorg -server, this also changes the default for the DontZap option to FALSE. For +server, this also sets the default for the DontZap option to FALSE. For kdrive servers, this implies -zap. .TP 8 .B \-s \fIminutes\fP diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 7ea6197de..8b07566be 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -726,7 +726,7 @@ static OptionInfoRec FlagOptions[] = { { FLAG_DONTVTSWITCH, "DontVTSwitch", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DONTZAP, "DontZap", OPTV_BOOLEAN, - {0}, TRUE }, + {0}, FALSE }, { FLAG_DONTZOOM, "DontZoom", OPTV_BOOLEAN, {0}, FALSE }, { FLAG_DISABLEVIDMODE, "DisableVidModeExtension", OPTV_BOOLEAN, @@ -834,8 +834,7 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) xf86GetOptValBool(FlagOptions, FLAG_NOTRAPSIGNALS, &xf86Info.notrapSignals); xf86GetOptValBool(FlagOptions, FLAG_DONTVTSWITCH, &xf86Info.dontVTSwitch); - if (!xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap)) - xf86Info.dontZap = !party_like_its_1989; + xf86GetOptValBool(FlagOptions, FLAG_DONTZAP, &xf86Info.dontZap); xf86GetOptValBool(FlagOptions, FLAG_DONTZOOM, &xf86Info.dontZoom); xf86GetOptValBool(FlagOptions, FLAG_IGNORE_ABI, &xf86Info.ignoreABI); diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre b/hw/xfree86/doc/man/xorg.conf.man.pre index 7349def0d..fbb2c6b73 100644 --- a/hw/xfree86/doc/man/xorg.conf.man.pre +++ b/hw/xfree86/doc/man/xorg.conf.man.pre @@ -464,12 +464,11 @@ Default: off. .TP 7 .BI "Option \*qDontZap\*q \*q" boolean \*q This disallows the use of the -.B Ctrl+Alt+Backspace -sequence. -That sequence is normally used to terminate the __xservername__ server. -When this option is enabled (as per default), that key sequence has no -special meaning. -Default: on. +.B Terminate_Server +XKB action (usually on Ctrl+Alt+Backspace, depending on XKB options). +This action is normally used to terminate the __xservername__ server. +When this option is enabled, the action has no effect. +Default: off. .TP 7 .BI "Option \*qDontZoom\*q \*q" boolean \*q This disallows the use of the From 1abe0ee3da5e1268c7315f841d31337ea6524cf0 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 28 Apr 2009 23:51:40 -0400 Subject: [PATCH 16/89] kdrive: fix Xvfb build with separate libmain. --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2151ed120..3fc4dd405 100644 --- a/configure.ac +++ b/configure.ac @@ -1843,7 +1843,7 @@ if test "$KDRIVE" = yes; then ;; esac KDRIVE_STUB_LIB='$(top_builddir)/hw/kdrive/src/libkdrivestubs.la' - KDRIVE_LOCAL_LIBS="$DIX_LIB $MAIN_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" + KDRIVE_LOCAL_LIBS="$MAIN_LIB $DIX_LIB $KDRIVE_LIB $KDRIVE_STUB_LIB $CONFIG_LIB" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $FB_LIB $MI_LIB $KDRIVE_PURE_LIBS" KDRIVE_LOCAL_LIBS="$KDRIVE_LOCAL_LIBS $KDRIVE_OS_LIB $OS_LIB" KDRIVE_LIBS="$TSLIB_LIBS $KDRIVE_LOCAL_LIBS $XSERVER_SYS_LIBS $GLX_SYS_LIBS" From 57aff88c7d0761e590806d07bee1c9410680c89f Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Wed, 29 Apr 2009 01:04:37 -0400 Subject: [PATCH 17/89] Fix most remaining deprecated resource lookups. Callsites updated to use dixLookupResourceBy{Type,Class}. TODO: Audit access modes to make sure they reflect the usage. --- Xext/panoramiX.c | 7 +- Xext/panoramiX.h | 2 - Xext/panoramiXprocs.c | 671 +++++++++++++++------------ Xext/saver.c | 54 ++- Xext/security.c | 11 +- Xext/shape.c | 75 +-- Xext/shm.c | 34 +- Xext/sync.c | 82 ++-- Xext/xf86bigfont.c | 14 +- Xext/xvdisp.c | 234 ++++------ Xext/xvdix.h | 18 +- Xext/xvmain.c | 9 +- Xext/xvmc.c | 57 +-- Xi/chdevcur.c | 10 +- Xi/extgrbdev.c | 14 +- damageext/damageextint.h | 9 +- dbe/dbe.c | 33 +- dix/colormap.c | 24 +- dix/cursor.c | 5 +- dix/deprecated.c | 8 +- dix/dispatch.c | 9 +- dix/dixfonts.c | 61 +-- dix/dixutils.c | 11 +- dix/events.c | 13 +- dix/resource.c | 22 +- dix/window.c | 56 ++- fb/fbcmap.c | 6 +- hw/kdrive/src/kcmap.c | 3 +- hw/vfb/InitOutput.c | 6 +- hw/xfree86/common/xf86cmap.c | 4 +- hw/xfree86/dixmods/extmod/xf86dga2.c | 18 +- hw/xfree86/dri/dri.c | 5 +- hw/xfree86/vgahw/vgaCmap.c | 4 +- hw/xnest/Color.c | 22 +- hw/xnest/Window.c | 9 +- mi/micmap.c | 6 +- mi/miexpose.c | 2 +- randr/randr.c | 6 +- randr/randrstr.h | 32 +- randr/rrcrtc.c | 61 +-- randr/rrdispatch.c | 7 +- randr/rrmode.c | 40 +- randr/rroutput.c | 37 +- randr/rrproperty.c | 33 +- record/record.c | 9 +- render/picture.c | 5 +- render/picturestr.h | 9 +- render/render.c | 170 +++---- xfixes/cursor.c | 7 +- xfixes/select.c | 6 +- 50 files changed, 1015 insertions(+), 1035 deletions(-) diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index 767f6035e..4ab6f6bdd 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -354,9 +354,12 @@ PanoramiXRes * PanoramiXFindIDByScrnum(RESTYPE type, XID id, int screen) { PanoramiXSearchData data; + pointer val; - if(!screen) - return LookupIDByType(id, type); + if(!screen) { + dixLookupResourceByType(&val, id, type, serverClient, DixReadAccess); + return val; + } data.screen = screen; data.id = id; diff --git a/Xext/panoramiX.h b/Xext/panoramiX.h index d413ff9cf..cca4c5249 100644 --- a/Xext/panoramiX.h +++ b/Xext/panoramiX.h @@ -97,6 +97,4 @@ typedef struct { #define IS_SHARED_PIXMAP(r) (((r)->type == XRT_PIXMAP) && (r)->u.pix.shared) -#define SKIP_FAKE_WINDOW(a) if(!LookupIDByType(a, XRT_WINDOW)) return - #endif /* _PANORAMIX_H_ */ diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c index 72a207ab8..8b51009b3 100644 --- a/Xext/panoramiXprocs.c +++ b/Xext/panoramiXprocs.c @@ -67,7 +67,7 @@ int PanoramiXCreateWindow(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xCreateWindowReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; int orig_x, orig_y; XID orig_visual, tmp; Bool parentIsRoot; @@ -78,9 +78,10 @@ int PanoramiXCreateWindow(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->class == CopyFromParent) stuff->class = parent->u.win.class; @@ -92,27 +93,30 @@ int PanoramiXCreateWindow(ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & CWColormap) { cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -170,7 +174,7 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) PanoramiXRes *cmap = NULL; REQUEST(xChangeWindowAttributesReq); int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq); @@ -179,9 +183,10 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) if (Ones(stuff->valueMask) != len) return BadLength; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if((win->u.win.class == InputOnly) && (stuff->valueMask & (~INPUTONLY_LEGAL_MASK))) @@ -191,27 +196,30 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) pback_offset = Ones((Mask)stuff->valueMask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWBorderPixmap) { pbord_offset = Ones((Mask)stuff->valueMask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->valueMask & CWColormap) { cmap_offset = Ones((Mask)stuff->valueMask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; } } @@ -233,14 +241,15 @@ int PanoramiXChangeWindowAttributes(ClientPtr client) int PanoramiXDestroyWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -258,14 +267,15 @@ int PanoramiXDestroyWindow(ClientPtr client) int PanoramiXDestroySubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixDestroyAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, XRT_WINDOW, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = win->info[j].id; @@ -283,14 +293,15 @@ int PanoramiXDestroySubwindows(ClientPtr client) int PanoramiXChangeSaveSet(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xChangeSaveSetReq); REQUEST_SIZE_MATCH(xChangeSaveSetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_BACKWARD(j) { stuff->window = win->info[j].id; @@ -305,20 +316,22 @@ int PanoramiXChangeSaveSet(ClientPtr client) int PanoramiXReparentWindow(ClientPtr client) { PanoramiXRes *win, *parent; - int result = 0, j; + int result, j; int x, y; Bool parentIsRoot; REQUEST(xReparentWindowReq); REQUEST_SIZE_MATCH(xReparentWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(parent = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->parent, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&parent, stuff->parent, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -342,14 +355,15 @@ int PanoramiXReparentWindow(ClientPtr client) int PanoramiXMapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -364,14 +378,15 @@ int PanoramiXMapWindow(ClientPtr client) int PanoramiXMapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -386,14 +401,15 @@ int PanoramiXMapSubwindows(ClientPtr client) int PanoramiXUnmapWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -408,14 +424,15 @@ int PanoramiXUnmapWindow(ClientPtr client) int PanoramiXUnmapSubwindows(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->id, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->id = win->info[j].id; @@ -432,7 +449,7 @@ int PanoramiXConfigureWindow(ClientPtr client) PanoramiXRes *win; PanoramiXRes *sib = NULL; WindowPtr pWin; - int result = 0, j, len, sib_offset = 0, x = 0, y = 0; + int result, j, len, sib_offset = 0, x = 0, y = 0; int x_offset = -1; int y_offset = -1; REQUEST(xConfigureWindowReq); @@ -444,21 +461,24 @@ int PanoramiXConfigureWindow(ClientPtr client) return BadLength; /* because we need the parent */ - if (!(pWin = (WindowPtr)SecurityLookupIDByType( - client, stuff->window, RT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&pWin, stuff->window, + RT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if (!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if ((Mask)stuff->mask & CWSibling) { XID tmp; sib_offset = Ones((Mask)stuff->mask & (CWSibling - 1)); if ((tmp = *((CARD32 *) &stuff[1] + sib_offset))) { - if(!(sib = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&sib, tmp, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; } } @@ -496,14 +516,15 @@ int PanoramiXConfigureWindow(ClientPtr client) int PanoramiXCirculateWindow(ClientPtr client) { PanoramiXRes *win; - int result = 0, j; + int result, j; REQUEST(xCirculateWindowReq); REQUEST_SIZE_MATCH(xCirculateWindowReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS_FORWARD(j) { stuff->window = win->info[j].id; @@ -634,15 +655,16 @@ int PanoramiXTranslateCoords(ClientPtr client) int PanoramiXCreatePixmap(ClientPtr client) { PanoramiXRes *refDraw, *newPix; - int result = 0, j; + int result, j; REQUEST(xCreatePixmapReq); REQUEST_SIZE_MATCH(xCreatePixmapReq); client->errorValue = stuff->pid; - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPix = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -672,16 +694,17 @@ int PanoramiXCreatePixmap(ClientPtr client) int PanoramiXFreePixmap(ClientPtr client) { PanoramiXRes *pix; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(pix = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_PIXMAP, DixDestroyAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pix, stuff->id, XRT_PIXMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = pix->info[j].id; @@ -705,7 +728,7 @@ int PanoramiXCreateGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xCreateGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xCreateGCReq); @@ -715,32 +738,36 @@ int PanoramiXCreateGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -781,7 +808,7 @@ int PanoramiXChangeGC(ClientPtr client) PanoramiXRes *clip = NULL; REQUEST(xChangeGCReq); int tile_offset = 0, stip_offset = 0, clip_offset = 0; - int result = 0, len, j; + int result, len, j; XID tmp; REQUEST_AT_LEAST_SIZE(xChangeGCReq); @@ -790,32 +817,36 @@ int PanoramiXChangeGC(ClientPtr client) if (Ones(stuff->mask) != len) return BadLength; - if (!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if ((Mask)stuff->mask & GCTile) { tile_offset = Ones((Mask)stuff->mask & (GCTile - 1)); if ((tmp = *((CARD32 *) &stuff[1] + tile_offset))) { - if(!(tile = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&tile, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCStipple) { stip_offset = Ones((Mask)stuff->mask & (GCStipple - 1)); if ((tmp = *((CARD32 *) &stuff[1] + stip_offset))) { - if(!(stip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&stip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } if ((Mask)stuff->mask & GCClipMask) { clip_offset = Ones((Mask)stuff->mask & (GCClipMask - 1)); if ((tmp = *((CARD32 *) &stuff[1] + clip_offset))) { - if(!(clip = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&clip, tmp, XRT_PIXMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } } @@ -839,18 +870,20 @@ int PanoramiXChangeGC(ClientPtr client) int PanoramiXCopyGC(ClientPtr client) { PanoramiXRes *srcGC, *dstGC; - int result = 0, j; + int result, j; REQUEST(xCopyGCReq); REQUEST_SIZE_MATCH(xCopyGCReq); - if(!(srcGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcGC, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&srcGC, stuff->srcGC, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(dstGC = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dstGC, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&dstGC, stuff->dstGC, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS(j) { stuff->srcGC = srcGC->info[j].id; @@ -866,14 +899,15 @@ int PanoramiXCopyGC(ClientPtr client) int PanoramiXSetDashes(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetDashesReq); REQUEST_FIXED_SIZE(xSetDashesReq, stuff->nDashes); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -888,14 +922,15 @@ int PanoramiXSetDashes(ClientPtr client) int PanoramiXSetClipRectangles(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xSetClipRectanglesReq); REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixWriteAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->gc = gc->info[j].id; @@ -910,14 +945,15 @@ int PanoramiXSetClipRectangles(ClientPtr client) int PanoramiXFreeGC(ClientPtr client) { PanoramiXRes *gc; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_GC, DixDestroyAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->id, XRT_GC, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = gc->info[j].id; @@ -935,15 +971,16 @@ int PanoramiXFreeGC(ClientPtr client) int PanoramiXClearToBackground(ClientPtr client) { PanoramiXRes *win; - int result = 0, j, x, y; + int result, j, x, y; Bool isRoot; REQUEST(xClearAreaReq); REQUEST_SIZE_MATCH(xClearAreaReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; x = stuff->x; y = stuff->y; @@ -974,7 +1011,7 @@ int PanoramiXClearToBackground(ClientPtr client) int PanoramiXCopyArea(ClientPtr client) { - int j, result = 0, srcx, srcy, dstx, dsty; + int j, result, srcx, srcy, dstx, dsty; PanoramiXRes *gc, *src, *dst; Bool srcIsRoot = FALSE; Bool dstIsRoot = FALSE; @@ -983,24 +1020,27 @@ int PanoramiXCopyArea(ClientPtr client) REQUEST_SIZE_MATCH(xCopyAreaReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyArea])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1139,24 +1179,27 @@ int PanoramiXCopyPlane(ClientPtr client) REQUEST_SIZE_MATCH(xCopyPlaneReq); - if(!(src = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->srcDrawable, XRC_DRAWABLE, DixReadAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&src, stuff->srcDrawable, + XRC_DRAWABLE, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; srcShared = IS_SHARED_PIXMAP(src); - if(!(dst = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->dstDrawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&dst, stuff->dstDrawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; dstShared = IS_SHARED_PIXMAP(dst); if(dstShared && srcShared) return (* SavedProcVector[X_CopyPlane])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + rc = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadGC : rc; if((dst->type == XRT_WINDOW) && dst->u.win.root) dstIsRoot = TRUE; @@ -1235,23 +1278,25 @@ int PanoramiXCopyPlane(ClientPtr client) int PanoramiXPolyPoint(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyPointReq); REQUEST_AT_LEAST_SIZE(xPolyPointReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyPoint])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyPointReq)) >> 2; @@ -1293,23 +1338,25 @@ int PanoramiXPolyPoint(ClientPtr client) int PanoramiXPolyLine(ClientPtr client) { PanoramiXRes *gc, *draw; - int result = 0, npoint, j; + int result, npoint, j; xPoint *origPts; Bool isRoot; REQUEST(xPolyLineReq); REQUEST_AT_LEAST_SIZE(xPolyLineReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyLine])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; npoint = ((client->req_len << 2) - sizeof(xPolyLineReq)) >> 2; @@ -1350,7 +1397,7 @@ int PanoramiXPolyLine(ClientPtr client) int PanoramiXPolySegment(ClientPtr client) { - int result = 0, nsegs, i, j; + int result, nsegs, i, j; PanoramiXRes *gc, *draw; xSegment *origSegs; Bool isRoot; @@ -1358,16 +1405,18 @@ int PanoramiXPolySegment(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolySegmentReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolySegment])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1411,7 +1460,7 @@ int PanoramiXPolySegment(ClientPtr client) int PanoramiXPolyRectangle(ClientPtr client) { - int result = 0, nrects, i, j; + int result, nrects, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRecs; @@ -1419,17 +1468,18 @@ int PanoramiXPolyRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyRectangleReq); - - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1472,7 +1522,7 @@ int PanoramiXPolyRectangle(ClientPtr client) int PanoramiXPolyArc(ClientPtr client) { - int result = 0, narcs, i, j; + int result, narcs, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xArc *origArcs; @@ -1480,16 +1530,18 @@ int PanoramiXPolyArc(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1530,7 +1582,7 @@ int PanoramiXPolyArc(ClientPtr client) int PanoramiXFillPoly(ClientPtr client) { - int result = 0, count, j; + int result, count, j; PanoramiXRes *gc, *draw; Bool isRoot; DDXPointPtr locPts; @@ -1538,16 +1590,18 @@ int PanoramiXFillPoly(ClientPtr client) REQUEST_AT_LEAST_SIZE(xFillPolyReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_FillPoly])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1589,7 +1643,7 @@ int PanoramiXFillPoly(ClientPtr client) int PanoramiXPolyFillRectangle(ClientPtr client) { - int result = 0, things, i, j; + int result, things, i, j; PanoramiXRes *gc, *draw; Bool isRoot; xRectangle *origRects; @@ -1597,16 +1651,18 @@ int PanoramiXPolyFillRectangle(ClientPtr client) REQUEST_AT_LEAST_SIZE(xPolyFillRectangleReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillRectangle])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1650,22 +1706,24 @@ int PanoramiXPolyFillArc(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, narcs, i, j; + int result, narcs, i, j; xArc *origArcs; REQUEST(xPolyFillArcReq); REQUEST_AT_LEAST_SIZE(xPolyFillArcReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyFillArc])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1709,21 +1767,23 @@ int PanoramiXPutImage(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; REQUEST(xPutImageReq); REQUEST_AT_LEAST_SIZE(xPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PutImage])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1765,9 +1825,10 @@ int PanoramiXGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if(draw->type == XRT_PIXMAP) return (*SavedProcVector[X_GetImage])(client); @@ -1906,22 +1967,24 @@ PanoramiXPolyText8(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1945,22 +2008,24 @@ PanoramiXPolyText16(ClientPtr client) { PanoramiXRes *gc, *draw; Bool isRoot; - int result = 0, j; + int result, j; int orig_x, orig_y; REQUEST(xPolyTextReq); REQUEST_AT_LEAST_SIZE(xPolyTextReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_PolyText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1982,7 +2047,7 @@ PanoramiXPolyText16(ClientPtr client) int PanoramiXImageText8(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -1990,16 +2055,18 @@ int PanoramiXImageText8(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText8])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2021,7 +2088,7 @@ int PanoramiXImageText8(ClientPtr client) int PanoramiXImageText16(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *gc, *draw; Bool isRoot; int orig_x, orig_y; @@ -2029,16 +2096,18 @@ int PanoramiXImageText16(ClientPtr client) REQUEST_FIXED_SIZE(xImageTextReq, stuff->nChars << 1); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(IS_SHARED_PIXMAP(draw)) return (*SavedProcVector[X_ImageText16])(client); - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, XRT_GC, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -2062,14 +2131,15 @@ int PanoramiXImageText16(ClientPtr client) int PanoramiXCreateColormap(ClientPtr client) { PanoramiXRes *win, *newCmap; - int result = 0, j, orig_visual; + int result, j, orig_visual; REQUEST(xCreateColormapReq); REQUEST_SIZE_MATCH(xCreateColormapReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->window, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->window, + XRT_WINDOW, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2100,16 +2170,17 @@ int PanoramiXCreateColormap(ClientPtr client) int PanoramiXFreeColormap(ClientPtr client) { PanoramiXRes *cmap; - int result = 0, j; + int result, j; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixDestroyAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixDestroyAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2128,17 +2199,18 @@ int PanoramiXCopyColormapAndFree(ClientPtr client) { PanoramiXRes *cmap, *newCmap; - int result = 0, j; + int result, j; REQUEST(xCopyColormapAndFreeReq); REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq); client->errorValue = stuff->srcCmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->srcCmap, XRT_COLORMAP, - DixReadAccess | DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->srcCmap, + XRT_COLORMAP, client, + DixReadAccess | DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; if(!(newCmap = xalloc(sizeof(PanoramiXRes)))) return BadAlloc; @@ -2167,16 +2239,17 @@ PanoramiXCopyColormapAndFree(ClientPtr client) int PanoramiXInstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->id = cmap->info[j].id; @@ -2190,16 +2263,17 @@ int PanoramiXInstallColormap(ClientPtr client) int PanoramiXUninstallColormap(ClientPtr client) { REQUEST(xResourceReq); - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST_SIZE_MATCH(xResourceReq); client->errorValue = stuff->id; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->id, XRT_COLORMAP, DixReadAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->id, XRT_COLORMAP, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->id = cmap->info[j].id; @@ -2212,7 +2286,7 @@ int PanoramiXUninstallColormap(ClientPtr client) int PanoramiXAllocColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorReq); @@ -2220,9 +2294,10 @@ int PanoramiXAllocColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2235,7 +2310,7 @@ int PanoramiXAllocColor(ClientPtr client) int PanoramiXAllocNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocNamedColorReq); @@ -2243,9 +2318,10 @@ int PanoramiXAllocNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2258,7 +2334,7 @@ int PanoramiXAllocNamedColor(ClientPtr client) int PanoramiXAllocColorCells(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorCellsReq); @@ -2266,9 +2342,10 @@ int PanoramiXAllocColorCells(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2281,7 +2358,7 @@ int PanoramiXAllocColorCells(ClientPtr client) int PanoramiXAllocColorPlanes(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xAllocColorPlanesReq); @@ -2289,9 +2366,10 @@ int PanoramiXAllocColorPlanes(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2305,7 +2383,7 @@ int PanoramiXAllocColorPlanes(ClientPtr client) int PanoramiXFreeColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xFreeColorsReq); @@ -2313,9 +2391,10 @@ int PanoramiXFreeColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j) { stuff->cmap = cmap->info[j].id; @@ -2327,7 +2406,7 @@ int PanoramiXFreeColors(ClientPtr client) int PanoramiXStoreColors(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreColorsReq); @@ -2335,9 +2414,10 @@ int PanoramiXStoreColors(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; @@ -2350,7 +2430,7 @@ int PanoramiXStoreColors(ClientPtr client) int PanoramiXStoreNamedColor(ClientPtr client) { - int result = 0, j; + int result, j; PanoramiXRes *cmap; REQUEST(xStoreNamedColorReq); @@ -2358,9 +2438,10 @@ int PanoramiXStoreNamedColor(ClientPtr client) client->errorValue = stuff->cmap; - if(!(cmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->cmap, XRT_COLORMAP, DixWriteAccess))) - return BadColor; + result = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, + XRT_COLORMAP, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadColor : result; FOR_NSCREENS_BACKWARD(j){ stuff->cmap = cmap->info[j].id; diff --git a/Xext/saver.c b/Xext/saver.c index 357c2155f..b59f769d5 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -533,11 +533,14 @@ UninstallSaverColormap (ScreenPtr pScreen) { SetupScreen(pScreen); ColormapPtr pCmap; + int rc; if (pPriv && pPriv->installedMap != None) { - pCmap = (ColormapPtr) LookupIDByType (pPriv->installedMap, RT_COLORMAP); - if (pCmap) + rc = dixLookupResourceByType((pointer *)&pCmap, pPriv->installedMap, + RT_COLORMAP, serverClient, + DixUninstallAccess); + if (rc == Success) (*pCmap->pScreen->UninstallColormap) (pCmap); pPriv->installedMap = None; CheckScreenPrivate (pScreen); @@ -651,8 +654,9 @@ CreateSaverWindow (ScreenPtr pScreen) if (i < numInstalled) return TRUE; - pCmap = (ColormapPtr) LookupIDByType (wantMap, RT_COLORMAP); - if (!pCmap) + result = dixLookupResourceByType((pointer *)&pCmap, wantMap, RT_COLORMAP, + serverClient, DixInstallAccess); + if (result != Success) return TRUE; pPriv->installedMap = wantMap; @@ -1252,15 +1256,16 @@ ProcScreenSaverSetAttributes (ClientPtr client) PanoramiXRes *backPix = NULL; PanoramiXRes *bordPix = NULL; PanoramiXRes *cmap = NULL; - int i, status = 0, len; + int i, status, len; int pback_offset = 0, pbord_offset = 0, cmap_offset = 0; XID orig_visual, tmp; REQUEST_AT_LEAST_SIZE (xScreenSaverSetAttributesReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + status = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? BadDrawable : status; len = stuff->length - (sizeof(xScreenSaverSetAttributesReq) >> 2); if (Ones(stuff->mask) != len) @@ -1270,9 +1275,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pback_offset = Ones((Mask)stuff->mask & (CWBackPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pback_offset); if ((tmp != None) && (tmp != ParentRelative)) { - if(!(backPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&backPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1280,9 +1287,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) pbord_offset = Ones((Mask)stuff->mask & (CWBorderPixmap - 1)); tmp = *((CARD32 *) &stuff[1] + pbord_offset); if (tmp != CopyFromParent) { - if(!(bordPix = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + status = dixLookupResourceByType((pointer *)&bordPix, tmp, + XRT_PIXMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadPixmap : status; } } @@ -1290,9 +1299,11 @@ ProcScreenSaverSetAttributes (ClientPtr client) cmap_offset = Ones((Mask)stuff->mask & (CWColormap - 1)); tmp = *((CARD32 *) &stuff[1] + cmap_offset); if ((tmp != CopyFromParent) && (tmp != None)) { - if(!(cmap = (PanoramiXRes*) SecurityLookupIDByType( - client, tmp, XRT_COLORMAP, DixReadAccess))) - return BadColor; + status = dixLookupResourceByType((pointer *)&cmap, tmp, + XRT_COLORMAP, client, + DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadColor : status; } } @@ -1327,11 +1338,12 @@ ProcScreenSaverUnsetAttributes (ClientPtr client) if(!noPanoramiXExtension) { REQUEST(xScreenSaverUnsetAttributesReq); PanoramiXRes *draw; - int i; + int rc, i; - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; for(i = PanoramiXNumScreens - 1; i > 0; i--) { stuff->drawable = draw->info[i].id; diff --git a/Xext/security.c b/Xext/security.c index 7962fdb37..bae95a3b5 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -623,13 +623,16 @@ ProcSecurityRevokeAuthorization( { REQUEST(xSecurityRevokeAuthorizationReq); SecurityAuthorizationPtr pAuth; + int rc; REQUEST_SIZE_MATCH(xSecurityRevokeAuthorizationReq); - pAuth = (SecurityAuthorizationPtr)SecurityLookupIDByType(client, - stuff->authId, SecurityAuthorizationResType, DixDestroyAccess); - if (!pAuth) - return SecurityErrorBase + XSecurityBadAuthorization; + rc = dixLookupResourceByType((pointer *)&pAuth, stuff->authId, + SecurityAuthorizationResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? + SecurityErrorBase + XSecurityBadAuthorization : rc; FreeResource(stuff->authId, RT_NONE); return Success; diff --git a/Xext/shape.c b/Xext/shape.c index 15d2c5c5a..5977296e5 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -353,13 +353,14 @@ ProcPanoramiXShapeRectangles( { REQUEST(xShapeRectanglesReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeRectanglesReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -451,18 +452,20 @@ ProcPanoramiXShapeMask( { REQUEST(xShapeMaskReq); PanoramiXRes *win, *pmap; - int j, result = 0; + int j, result; REQUEST_SIZE_MATCH (xShapeMaskReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; if(stuff->src != None) { - if(!(pmap = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_PIXMAP, DixReadAccess))) - return BadPixmap; + result = dixLookupResourceByType((pointer *)&pmap, stuff->src, + XRT_PIXMAP, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadPixmap : result; } else pmap = NULL; @@ -579,17 +582,19 @@ ProcPanoramiXShapeCombine( { REQUEST(xShapeCombineReq); PanoramiXRes *win, *win2; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeCombineReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; - if(!(win2 = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->src, XRT_WINDOW, DixReadAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win2, stuff->src, XRT_WINDOW, + client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -651,13 +656,14 @@ ProcPanoramiXShapeOffset( { REQUEST(xShapeOffsetReq); PanoramiXRes *win; - int j, result = 0; + int j, result; REQUEST_AT_LEAST_SIZE (xShapeOffsetReq); - if(!(win = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->dest, XRT_WINDOW, DixWriteAccess))) - return BadWindow; + result = dixLookupResourceByType((pointer *)&win, stuff->dest, XRT_WINDOW, + client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadWindow : result; FOR_NSCREENS(j) { stuff->dest = win->info[j].id; @@ -740,11 +746,13 @@ ShapeFreeClient (pointer data, XID id) ShapeEventPtr pShapeEvent; WindowPtr pWin; ShapeEventPtr *pHead, pCur, pPrev; + int rc; pShapeEvent = (ShapeEventPtr) data; pWin = pShapeEvent->window; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (pHead) { + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc == Success) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pShapeEvent; pCur=pCur->next) pPrev = pCur; @@ -789,8 +797,11 @@ ProcShapeSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; + switch (stuff->enable) { case xTrue: if (pHead) { @@ -879,9 +890,11 @@ SendShapeNotify (WindowPtr pWin, int which) BoxRec extents; RegionPtr region; BYTE shaped; + int rc; - pHead = (ShapeEventPtr *) LookupIDByType(pWin->drawable.id, ShapeEventType); - if (!pHead) + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, serverClient, DixReadAccess); + if (rc != Success) return; switch (which) { case ShapeBounding: @@ -958,8 +971,10 @@ ProcShapeInputSelected (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); if (rc != Success) return rc; - pHead = (ShapeEventPtr *) SecurityLookupIDByType(client, - pWin->drawable.id, ShapeEventType, DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + ShapeEventType, client, DixReadAccess); + if (rc != Success && rc != BadValue) + return rc; enabled = xFalse; if (pHead) { for (pShapeEvent = *pHead; diff --git a/Xext/shm.c b/Xext/shm.c index 1f963c16c..cdda09f7f 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -144,12 +144,11 @@ static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL}; #define VERIFY_SHMSEG(shmseg,shmdesc,client) \ { \ - shmdesc = (ShmDescPtr)LookupIDByType(shmseg, ShmSegType); \ - if (!shmdesc) \ - { \ - client->errorValue = shmseg; \ - return BadShmSegCode; \ - } \ + int rc; \ + rc = dixLookupResourceByType((pointer *)&(shmdesc), shmseg, ShmSegType, \ + client, DixReadAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? BadShmSegCode : rc; \ } #define VERIFY_SHMPTR(shmseg,offset,needwrite,shmdesc,client) \ @@ -513,20 +512,22 @@ doShmPutImage(DrawablePtr dst, GCPtr pGC, static int ProcPanoramiXShmPutImage(ClientPtr client) { - int j, result = 0, orig_x, orig_y; + int j, result, orig_x, orig_y; PanoramiXRes *draw, *gc; Bool sendEvent, isRoot; REQUEST(xShmPutImageReq); REQUEST_SIZE_MATCH(xShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -570,9 +571,10 @@ ProcPanoramiXShmGetImage(ClientPtr client) return(BadValue); } - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + rc = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? BadDrawable : rc; if (draw->type == XRT_PIXMAP) return ProcShmGetImage(client); diff --git a/Xext/sync.c b/Xext/sync.c index adb732447..d7ab63cd5 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -1339,16 +1339,14 @@ ProcSyncSetCounter(ClientPtr client) REQUEST(xSyncSetCounterReq); SyncCounter *pCounter; CARD64 newvalue; + int rc; REQUEST_SIZE_MATCH(xSyncSetCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1371,16 +1369,14 @@ ProcSyncChangeCounter(ClientPtr client) SyncCounter *pCounter; CARD64 newvalue; Bool overflow; + int rc; REQUEST_SIZE_MATCH(xSyncChangeCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->cid, RTCounter, - DixWriteAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->cid; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->cid, RTCounter, + client, DixWriteAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; if (IsSystemCounter(pCounter)) { @@ -1408,16 +1404,15 @@ ProcSyncDestroyCounter(ClientPtr client) { REQUEST(xSyncDestroyCounterReq); SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncDestroyCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixDestroyAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, RTCounter, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; + if (IsSystemCounter(pCounter)) { client->errorValue = stuff->counter; @@ -1552,16 +1547,14 @@ ProcSyncQueryCounter(ClientPtr client) REQUEST(xSyncQueryCounterReq); xSyncQueryCounterReply rep; SyncCounter *pCounter; + int rc; REQUEST_SIZE_MATCH(xSyncQueryCounterReq); - pCounter = SecurityLookupIDByType(client, stuff->counter, RTCounter, - DixReadAccess); - if (pCounter == NULL) - { - client->errorValue = stuff->counter; - return SyncErrorBase + XSyncBadCounter; - } + rc = dixLookupResourceByType((pointer *)&pCounter, stuff->counter, + RTCounter, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadCounter : rc; rep.type = X_Reply; rep.length = 0; @@ -1682,12 +1675,10 @@ ProcSyncChangeAlarm(ClientPtr client) REQUEST_AT_LEAST_SIZE(xSyncChangeAlarmReq); - if (!(pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixWriteAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + status = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixWriteAccess); + if (status != Success) + return (status == BadValue) ? SyncErrorBase + XSyncBadAlarm : status; vmask = stuff->valueMask; len = client->req_len - (sizeof(xSyncChangeAlarmReq) >> 2); @@ -1719,16 +1710,14 @@ ProcSyncQueryAlarm(ClientPtr client) SyncAlarm *pAlarm; xSyncQueryAlarmReply rep; SyncTrigger *pTrigger; + int rc; REQUEST_SIZE_MATCH(xSyncQueryAlarmReq); - pAlarm = SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixReadAccess); - if (!pAlarm) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; rep.type = X_Reply; rep.length = (sizeof(xSyncQueryAlarmReply) - sizeof(xGenericReply)) >> 2; @@ -1776,16 +1765,15 @@ ProcSyncQueryAlarm(ClientPtr client) static int ProcSyncDestroyAlarm(ClientPtr client) { + SyncAlarm *pAlarm; + int rc; REQUEST(xSyncDestroyAlarmReq); REQUEST_SIZE_MATCH(xSyncDestroyAlarmReq); - if (!(SecurityLookupIDByType(client, stuff->alarm, RTAlarm, - DixDestroyAccess))) - { - client->errorValue = stuff->alarm; - return SyncErrorBase + XSyncBadAlarm; - } + rc = dixLookupResourceByType((pointer *)&pAlarm, stuff->alarm, RTAlarm, + client, DixDestroyAccess); + return (rc == BadValue) ? SyncErrorBase + XSyncBadAlarm : rc; FreeResource(stuff->alarm, RT_NONE); return client->noClientException; diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c index 60189666e..7d4c69766 100644 --- a/Xext/xf86bigfont.c +++ b/Xext/xf86bigfont.c @@ -427,15 +427,15 @@ ProcXF86BigfontQueryFont( } #endif client->errorValue = stuff->id; /* EITHER font or gc */ - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixGetAttrAccess); + dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixGetAttrAccess); if (!pFont) { - GC *pGC = (GC *) SecurityLookupIDByType(client, stuff->id, RT_GC, - DixGetAttrAccess); - if (!pGC) { - client->errorValue = stuff->id; + GC *pGC; + dixLookupResourceByType((pointer *)&pGC, stuff->id, RT_GC, + client, DixGetAttrAccess); + if (!pGC) return BadFont; /* procotol spec says only error is BadFont */ - } + pFont = pGC->font; } diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c index 770c53a27..fcb61e476 100644 --- a/Xext/xvdisp.c +++ b/Xext/xvdisp.c @@ -479,11 +479,7 @@ ProcXvQueryEncodings(ClientPtr client) REQUEST(xvQueryEncodingsReq); REQUEST_SIZE_MATCH(xvQueryEncodingsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -540,12 +536,7 @@ ProcXvPutVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvPutVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -583,12 +574,7 @@ ProcXvPutStill(ClientPtr client) REQUEST_SIZE_MATCH(xvPutStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -626,12 +612,7 @@ ProcXvGetVideo(ClientPtr client) REQUEST_SIZE_MATCH(xvGetVideoReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -669,12 +650,7 @@ ProcXvGetStill(ClientPtr client) REQUEST_SIZE_MATCH(xvGetStillReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixReadAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -723,11 +699,7 @@ ProcXvSelectPortNotify(ClientPtr client) REQUEST(xvSelectPortNotifyReq); REQUEST_SIZE_MATCH(xvSelectPortNotifyReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -747,11 +719,7 @@ ProcXvGrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -784,11 +752,7 @@ ProcXvUngrabPort(ClientPtr client) REQUEST(xvGrabPortReq); REQUEST_SIZE_MATCH(xvGrabPortReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -808,11 +772,7 @@ ProcXvStopVideo(ClientPtr client) REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -835,11 +795,7 @@ ProcXvSetPortAttribute(ClientPtr client) REQUEST(xvSetPortAttributeReq); REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixSetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -873,11 +829,7 @@ ProcXvGetPortAttribute(ClientPtr client) REQUEST(xvGetPortAttributeReq); REQUEST_SIZE_MATCH(xvGetPortAttributeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -918,11 +870,7 @@ ProcXvQueryBestSize(ClientPtr client) REQUEST(xvQueryBestSizeReq); REQUEST_SIZE_MATCH(xvQueryBestSizeReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -959,11 +907,7 @@ ProcXvQueryPortAttributes(ClientPtr client) REQUEST(xvQueryPortAttributesReq); REQUEST_SIZE_MATCH(xvQueryPortAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixGetAttrAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1019,12 +963,7 @@ ProcXvPutImage(ClientPtr client) REQUEST_AT_LEAST_SIZE(xvPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1105,12 +1044,7 @@ ProcXvShmPutImage(ClientPtr client) REQUEST_SIZE_MATCH(xvShmPutImageReq); VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); - - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if ((status = _AllocatePort(stuff->port, pPort)) != Success) { @@ -1141,11 +1075,10 @@ ProcXvShmPutImage(ClientPtr client) if(!pImage) return BadMatch; - if(!(shmdesc = (ShmDescPtr)LookupIDByType(stuff->shmseg, ShmSegType))) - { - client->errorValue = stuff->shmseg; - return BadShmSegCode; - } + status = dixLookupResourceByType((pointer *)&shmdesc, stuff->shmseg, + ShmSegType, serverClient, DixReadAccess); + if (status != Success) + return (status == BadValue) ? BadShmSegCode : status; width = stuff->width; height = stuff->height; @@ -1206,11 +1139,7 @@ ProcXvQueryImageAttributes(ClientPtr client) REQUEST_SIZE_MATCH(xvQueryImageAttributesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); for(i = 0; i < pPort->pAdaptor->nImages; i++) { if(pPort->pAdaptor->pImages[i].id == stuff->id) { @@ -1269,11 +1198,7 @@ ProcXvListImageFormats(ClientPtr client) REQUEST_SIZE_MATCH(xvListImageFormatsReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client) )) - { - client->errorValue = stuff->port; - return (_XvBadPort); - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); rep.type = X_Reply; rep.sequenceNumber = client->sequence; @@ -1679,18 +1604,20 @@ SProcXvDispatch(ClientPtr client) static int XineramaXvStopVideo(ClientPtr client) { - int result = Success, i; + int result, i; PanoramiXRes *draw, *port; REQUEST(xvStopVideoReq); REQUEST_SIZE_MATCH(xvStopVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1708,13 +1635,14 @@ XineramaXvSetPortAttribute(ClientPtr client) { REQUEST(xvSetPortAttributeReq); PanoramiXRes *port; - int result = Success, i; + int result, i; REQUEST_SIZE_MATCH(xvSetPortAttributeReq); - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; FOR_NSCREENS_BACKWARD(i) { if(port->info[i].id) { @@ -1733,21 +1661,24 @@ XineramaXvShmPutImage(ClientPtr client) PanoramiXRes *draw, *gc, *port; Bool send_event = stuff->send_event; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_SIZE_MATCH(xvShmPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1782,21 +1713,24 @@ XineramaXvPutImage(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1827,21 +1761,24 @@ XineramaXvPutVideo(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutVideoReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; @@ -1872,21 +1809,24 @@ XineramaXvPutStill(ClientPtr client) REQUEST(xvPutImageReq); PanoramiXRes *draw, *gc, *port; Bool isRoot; - int result = Success, i, x, y; + int result, i, x, y; REQUEST_AT_LEAST_SIZE(xvPutImageReq); - if(!(draw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&draw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; - if(!(gc = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->gc, XRT_GC, DixReadAccess))) - return BadGC; + result = dixLookupResourceByType((pointer *)&gc, stuff->gc, + XRT_GC, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? BadGC : result; - if(!(port = (PanoramiXRes *)SecurityLookupIDByType( - client, stuff->port, XvXRTPort, DixReadAccess))) - return _XvBadPort; + result = dixLookupResourceByType((pointer *)&port, stuff->port, + XvXRTPort, client, DixReadAccess); + if (result != Success) + return (result == BadValue) ? _XvBadPort : result; isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; diff --git a/Xext/xvdix.h b/Xext/xvdix.h index 265c03ddf..44f8f6b18 100644 --- a/Xext/xvdix.h +++ b/Xext/xvdix.h @@ -201,17 +201,13 @@ typedef struct _XvPortRec { DevUnion devPriv; } XvPortRec, *XvPortPtr; -#define LOOKUP_PORT(_id, client)\ - ((XvPortPtr)LookupIDByType(_id, XvRTPort)) - -#define LOOKUP_ENCODING(_id, client)\ - ((XvEncodingPtr)LookupIDByType(_id, XvRTEncoding)) - -#define LOOKUP_VIDEONOTIFY_LIST(_id, client)\ - ((XvVideoNotifyPtr)LookupIDByType(_id, XvRTVideoNotifyList)) - -#define LOOKUP_PORTNOTIFY_LIST(_id, client)\ - ((XvPortNotifyPtr)LookupIDByType(_id, XvRTPortNotifyList)) +#define VALIDATE_XV_PORT(portID, pPort, mode)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(pPort), portID,\ + XvRTPort, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? _XvBadPort : rc;\ + } typedef struct { int version, revision; diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 477194684..7c8a3c3d4 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -523,7 +523,8 @@ XvdiSendVideoNotify(XvPortPtr pPort, DrawablePtr pDraw, int reason) xvEvent event; XvVideoNotifyPtr pn; - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + serverClient, DixReadAccess); while (pn) { @@ -905,10 +906,14 @@ XvdiSelectVideoNotify( BOOL onoff ){ XvVideoNotifyPtr pn,tpn,fpn; + int rc; /* FIND VideoNotify LIST */ - pn = (XvVideoNotifyPtr)LookupIDByType(pDraw->id, XvRTVideoNotifyList); + rc = dixLookupResourceByType((pointer *)&pn, pDraw->id, XvRTVideoNotifyList, + client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; /* IF ONE DONES'T EXIST AND NO MASK, THEN JUST RETURN */ diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 9166cf892..879a222bd 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -136,10 +136,7 @@ ProcXvMCListSurfaceTypes(ClientPtr client) REQUEST(xvmcListSurfaceTypesReq); REQUEST_SIZE_MATCH(xvmcListSurfaceTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); if(XvMCScreenKey) { /* any adaptors at all */ ScreenPtr pScreen = pPort->pAdaptor->pScreen; @@ -192,10 +189,7 @@ ProcXvMCCreateContext(ClientPtr client) REQUEST(xvmcCreateContextReq); REQUEST_SIZE_MATCH(xvmcCreateContextReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -273,11 +267,15 @@ ProcXvMCCreateContext(ClientPtr client) static int ProcXvMCDestroyContext(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroyContextReq); REQUEST_SIZE_MATCH(xvmcDestroyContextReq); - if(!LookupIDByType(stuff->context_id, XvMCRTContext)) - return (XvMCBadContext + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->context_id, XvMCRTContext, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadContext + XvMCErrorBase : rc; FreeResource(stuff->context_id, RT_NONE); @@ -297,8 +295,10 @@ ProcXvMCCreateSurface(ClientPtr client) REQUEST(xvmcCreateSurfaceReq); REQUEST_SIZE_MATCH(xvmcCreateSurfaceReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -337,11 +337,15 @@ ProcXvMCCreateSurface(ClientPtr client) static int ProcXvMCDestroySurface(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySurfaceReq); REQUEST_SIZE_MATCH(xvmcDestroySurfaceReq); - if(!LookupIDByType(stuff->surface_id, XvMCRTSurface)) - return (XvMCBadSurface + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->surface_id, XvMCRTSurface, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSurface + XvMCErrorBase : rc; FreeResource(stuff->surface_id, RT_NONE); @@ -363,8 +367,10 @@ ProcXvMCCreateSubpicture(ClientPtr client) REQUEST(xvmcCreateSubpictureReq); REQUEST_SIZE_MATCH(xvmcCreateSubpictureReq); - if(!(pContext = LookupIDByType(stuff->context_id, XvMCRTContext))) - return (XvMCBadContext + XvMCErrorBase); + result = dixLookupResourceByType((pointer *)&pContext, stuff->context_id, + XvMCRTContext, client, DixUseAccess); + if (result != Success) + return (result == BadValue) ? XvMCBadContext + XvMCErrorBase : result; pScreenPriv = XVMC_GET_PRIVATE(pContext->pScreen); @@ -448,11 +454,15 @@ ProcXvMCCreateSubpicture(ClientPtr client) static int ProcXvMCDestroySubpicture(ClientPtr client) { + pointer val; + int rc; REQUEST(xvmcDestroySubpictureReq); REQUEST_SIZE_MATCH(xvmcDestroySubpictureReq); - if(!LookupIDByType(stuff->subpicture_id, XvMCRTSubpicture)) - return (XvMCBadSubpicture + XvMCErrorBase); + rc = dixLookupResourceByType(&val, stuff->subpicture_id, XvMCRTSubpicture, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? XvMCBadSubpicture + XvMCErrorBase : rc; FreeResource(stuff->subpicture_id, RT_NONE); @@ -475,10 +485,7 @@ ProcXvMCListSubpictureTypes(ClientPtr client) REQUEST(xvmcListSubpictureTypesReq); REQUEST_SIZE_MATCH(xvmcListSubpictureTypesReq); - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; @@ -571,11 +578,7 @@ ProcXvMCGetDRInfo(ClientPtr client) REQUEST(xvmcGetDRInfoReq); REQUEST_SIZE_MATCH(xvmcGetDRInfoReq); - - if(!(pPort = LOOKUP_PORT(stuff->port, client))) { - client->errorValue = stuff->port; - return _XvBadPort; - } + VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); pScreen = pPort->pAdaptor->pScreen; pScreenPriv = XVMC_GET_PRIVATE(pScreen); diff --git a/Xi/chdevcur.c b/Xi/chdevcur.c index b0d3ce341..d7a9e4952 100644 --- a/Xi/chdevcur.c +++ b/Xi/chdevcur.c @@ -94,12 +94,10 @@ int ProcXChangeDeviceCursor(ClientPtr client) } else { - pCursor = (CursorPtr)SecurityLookupIDByType(client, stuff->cursor, - RT_CURSOR, DixReadAccess); - if (!pCursor) - { - return BadCursor; - } + rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? BadCursor : rc; } ChangeWindowDeviceCursor(pWin, pDev, pCursor); diff --git a/Xi/extgrbdev.c b/Xi/extgrbdev.c index af8706320..0f64610b5 100644 --- a/Xi/extgrbdev.c +++ b/Xi/extgrbdev.c @@ -88,7 +88,7 @@ ProcXExtendedGrabDevice(ClientPtr client) { xExtendedGrabDeviceReply rep; DeviceIntPtr dev; - int rc = Success, + int rc, errval = 0, i; WindowPtr grab_window, @@ -145,14 +145,12 @@ ProcXExtendedGrabDevice(ClientPtr client) if (stuff->cursor) { - cursor = (CursorPtr)SecurityLookupIDByType(client, - stuff->cursor, - RT_CURSOR, - DixReadAccess); - if (!cursor) - { + rc = dixLookupResourceByType((pointer *)&cursor, stuff->cursor, + RT_CURSOR, client, DixReadAccess); + if (rc != Success) + { errval = stuff->cursor; - rc = BadCursor; + rc = (rc == BadValue) ? BadCursor : rc; goto cleanup; } } diff --git a/damageext/damageextint.h b/damageext/damageextint.h index 543f1a70b..45c5ff96c 100644 --- a/damageext/damageextint.h +++ b/damageext/damageextint.h @@ -58,11 +58,10 @@ typedef struct _DamageExt { } DamageExtRec, *DamageExtPtr; #define VERIFY_DAMAGEEXT(pDamageExt, rid, client, mode) { \ - pDamageExt = SecurityLookupIDByType (client, rid, DamageExtType, mode); \ - if (!pDamageExt) { \ - client->errorValue = rid; \ - return DamageErrorBase + BadDamage; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pDamageExt), rid, \ + DamageExtType, client, mode); \ + if (rc != Success) \ + return (rc == BadValue) ? DamageErrorBase + BadDamage : rc; \ } void diff --git a/dbe/dbe.c b/dbe/dbe.c index 3fd99dfc9..b8f61e742 100644 --- a/dbe/dbe.c +++ b/dbe/dbe.c @@ -411,20 +411,23 @@ ProcDbeDeallocateBackBufferName(ClientPtr client) { REQUEST(xDbeDeallocateBackBufferNameReq); DbeWindowPrivPtr pDbeWindowPriv; - int i; + int rc, i; + pointer val; REQUEST_SIZE_MATCH(xDbeDeallocateBackBufferNameReq); /* Buffer name must be valid */ - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixDestroyAccess)) || - !(SecurityLookupIDByType(client, stuff->buffer, dbeDrawableResType, - DixDestroyAccess))) - { - client->errorValue = stuff->buffer; - return(dbeErrorBase + DbeBadBuffer); - } + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; + + rc = dixLookupResourceByType(&val, stuff->buffer, dbeDrawableResType, + client, DixDestroyAccess); + if (rc != Success) + return (rc == BadValue) ? dbeErrorBase + DbeBadBuffer : rc; /* Make sure that the id is valid for the window. * This is paranoid code since we already looked up the ID by type @@ -833,19 +836,21 @@ ProcDbeGetBackBufferAttributes(ClientPtr client) REQUEST(xDbeGetBackBufferAttributesReq); xDbeGetBackBufferAttributesReply rep; DbeWindowPrivPtr pDbeWindowPriv; - int n; + int rc, n; REQUEST_SIZE_MATCH(xDbeGetBackBufferAttributesReq); - if (!(pDbeWindowPriv = (DbeWindowPrivPtr)SecurityLookupIDByType(client, - stuff->buffer, dbeWindowPrivResType, DixGetAttrAccess))) + rc = dixLookupResourceByType((pointer *)&pDbeWindowPriv, stuff->buffer, + dbeWindowPrivResType, client, + DixGetAttrAccess); + if (rc == Success) { - rep.attributes = None; + rep.attributes = pDbeWindowPriv->pWindow->drawable.id; } else { - rep.attributes = pDbeWindowPriv->pWindow->drawable.id; + rep.attributes = None; } rep.type = X_Reply; diff --git a/dix/colormap.c b/dix/colormap.c index 6a5eb74a1..a5a006e60 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -893,9 +893,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb, @@ -910,9 +910,9 @@ AllocColor (ColormapPtr pmap, if (pmap->mid != pmap->pScreen->defColormap && pmap->pVisual->vid == pmap->pScreen->rootVisual) { - ColormapPtr prootmap = (ColormapPtr) - SecurityLookupIDByType (clients[client], pmap->pScreen->defColormap, - RT_COLORMAP, DixReadAccess); + ColormapPtr prootmap; + dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap, + RT_COLORMAP, clients[client], DixReadAccess); if (pmap->class == prootmap->class) { @@ -1550,12 +1550,14 @@ FreePixels(ColormapPtr pmap, int client) int FreeClientPixels (pointer value, XID fakeid) { - ColormapPtr pmap; - colorResource *pcr = (colorResource *)value; + pointer pmap; + colorResource *pcr = value; + int rc; - pmap = (ColormapPtr) LookupIDByType(pcr->mid, RT_COLORMAP); - if (pmap) - FreePixels(pmap, pcr->client); + rc = dixLookupResourceByType(&pmap, pcr->mid, RT_COLORMAP, serverClient, + DixRemoveAccess); + if (rc == Success) + FreePixels((ColormapPtr)pmap, pcr->client); xfree(pcr); return Success; } diff --git a/dix/cursor.c b/dix/cursor.c index 7ab15df0c..086d008e0 100644 --- a/dix/cursor.c +++ b/dix/cursor.c @@ -545,8 +545,9 @@ CreateRootCursor(char *unused1, unsigned int unused2) if (err != Success) return NullCursor; - cursorfont = (FontPtr)LookupIDByType(fontID, RT_FONT); - if (!cursorfont) + err = dixLookupResourceByType((pointer *)&cursorfont, fontID, RT_FONT, + serverClient, DixReadAccess); + if (err != Success) return NullCursor; if (AllocGlyphCursor(fontID, 0, fontID, 1, 0, 0, 0, ~0, ~0, ~0, &curs, serverClient, (XID)0) != Success) diff --git a/dix/deprecated.c b/dix/deprecated.c index 5487b64bc..8123886ca 100644 --- a/dix/deprecated.c +++ b/dix/deprecated.c @@ -148,14 +148,18 @@ SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, pointer LookupIDByType(XID id, RESTYPE rtype) { - return SecurityLookupIDByType(NullClient, id, rtype, DixUnknownAccess); + pointer val; + dixLookupResourceByType(&val, id, rtype, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceByClass */ pointer LookupIDByClass(XID id, RESTYPE classes) { - return SecurityLookupIDByClass(NullClient, id, classes, DixUnknownAccess); + pointer val; + dixLookupResourceByClass(&val, id, classes, NullClient, DixUnknownAccess); + return val; } /* replaced by dixLookupResourceBy{Type,Class} */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 16a51bdc5..ce3294d32 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -1252,12 +1252,13 @@ int ProcCloseFont(ClientPtr client) { FontPtr pFont; + int rc; REQUEST(xResourceReq); REQUEST_SIZE_MATCH(xResourceReq); - pFont = (FontPtr)SecurityLookupIDByType(client, stuff->id, RT_FONT, - DixDestroyAccess); - if ( pFont != (FontPtr)NULL) /* id was valid */ + rc = dixLookupResourceByType((pointer *)&pFont, stuff->id, RT_FONT, + client, DixDestroyAccess); + if (rc == Success) { FreeResource(stuff->id, RT_NONE); return(client->noClientException); @@ -1265,7 +1266,7 @@ ProcCloseFont(ClientPtr client) else { client->errorValue = stuff->id; - return (BadFont); + return (rc == BadValue) ? BadFont : rc; } } diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 79489e81f..8b6e7a329 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -137,8 +137,9 @@ SetDefaultFont(char *defaultfontname) (unsigned) strlen(defaultfontname), defaultfontname); if (err != Success) return FALSE; - pf = (FontPtr) LookupIDByType(fid, RT_FONT); - if (pf == (FontPtr) NULL) + err = dixLookupResourceByType((pointer *)&pf, fid, RT_FONT, serverClient, + DixReadAccess); + if (err != Success) return FALSE; defaultFont = pf; return TRUE; @@ -1201,17 +1202,18 @@ doPolyText(ClientPtr client, PTclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client and avoid further - rendering while we clean up after ourself. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - c->pDraw = (DrawablePtr)0; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client and avoid further + rendering while we clean up after ourself. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + c->pDraw = (DrawablePtr)0; + } } client_state = c->slept ? SLEEPING : NEVER_SLEPT; @@ -1233,12 +1235,11 @@ doPolyText(ClientPtr client, PTclosurePtr c) | ((Font)*(c->pElt+3)) << 8 | ((Font)*(c->pElt+2)) << 16 | ((Font)*(c->pElt+1)) << 24; - pFont = (FontPtr)SecurityLookupIDByType(client, fid, RT_FONT, - DixReadAccess); - if (!pFont) + err = dixLookupResourceByType((pointer *)&pFont, fid, RT_FONT, + client, DixReadAccess); + if (err != Success) { - client->errorValue = fid; - err = BadFont; + err = (err == BadValue) ? BadFont : err; /* restore pFont and fid for step 4 (described below) */ pFont = oldpFont; fid = oldfid; @@ -1486,17 +1487,18 @@ doImageText(ClientPtr client, ITclosurePtr c) } /* Make sure our drawable hasn't disappeared while we slept. */ - if (c->slept && - c->pDraw && - c->pDraw != (DrawablePtr)SecurityLookupIDByClass(client, c->did, - RC_DRAWABLE, DixWriteAccess)) + if (c->slept && c->pDraw) { - /* Our drawable has disappeared. Treat like client died... ask - the FPE code to clean up after client. */ - fpe = c->pGC->font->fpe; - (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); - err = Success; - goto bail; + DrawablePtr pDraw; + dixLookupDrawable(&pDraw, c->did, client, 0, DixWriteAccess); + if (c->pDraw != pDraw) { + /* Our drawable has disappeared. Treat like client died... ask + the FPE code to clean up after client. */ + fpe = c->pGC->font->fpe; + (*fpe_functions[fpe->type].client_died) ((pointer) client, fpe); + err = Success; + goto bail; + } } lgerr = LoadGlyphs(client, c->pGC->font, c->nChars, c->itemSize, c->data); @@ -2013,8 +2015,9 @@ FreeFonts(void) FontPtr find_old_font(XID id) { - return (FontPtr) SecurityLookupIDByType(NullClient, id, RT_NONE, - DixUnknownAccess); + pointer pFont; + dixLookupResourceByType(&pFont, id, RT_NONE, serverClient, DixReadAccess); + return (FontPtr)pFont; } Font diff --git a/dix/dixutils.c b/dix/dixutils.c index 1bdeee064..5cede5f43 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -240,14 +240,9 @@ dixLookupWindow(WindowPtr *pWin, XID id, ClientPtr client, Mask access) int dixLookupGC(GCPtr *pGC, XID id, ClientPtr client, Mask access) { - GCPtr pTmp = (GCPtr)SecurityLookupIDByType(client, id, RT_GC, access); - if (pTmp) { - *pGC = pTmp; - return Success; - } - client->errorValue = id; - *pGC = NULL; - return BadGC; + int rc; + rc = dixLookupResourceByType((pointer *)pGC, id, RT_GC, client, access); + return (rc == BadValue) ? BadGC : rc; } int diff --git a/dix/events.c b/dix/events.c index 8af71b645..be88891a4 100644 --- a/dix/events.c +++ b/dix/events.c @@ -506,16 +506,17 @@ XineramaSetWindowPntrs(DeviceIntPtr pDev, WindowPtr pWin) PanoramiXNumScreens*sizeof(WindowPtr)); } else { PanoramiXRes *win; - int i; + int rc, i; - win = (PanoramiXRes*)LookupIDByType(pWin->drawable.id, XRT_WINDOW); - - if(!win) + rc = dixLookupResourceByType((pointer *)&win, pWin->drawable.id, + XRT_WINDOW, serverClient, DixReadAccess); + if (rc != Success) return FALSE; for(i = 0; i < PanoramiXNumScreens; i++) { - pSprite->windows[i] = LookupIDByType(win->info[i].id, RT_WINDOW); - if(!pSprite->windows[i]) /* window is being unmapped */ + rc = dixLookupWindow(pSprite->windows + i, win->info[i].id, + serverClient, DixReadAccess); + if (rc != Success) /* window is being unmapped */ return FALSE; } } diff --git a/dix/resource.c b/dix/resource.c index dc6945dd1..73bc3a998 100644 --- a/dix/resource.c +++ b/dix/resource.c @@ -392,13 +392,16 @@ unsigned int GetXIDList(ClientPtr pClient, unsigned count, XID *pids) { unsigned int found = 0; - XID id = pClient->clientAsMask; + XID rc, id = pClient->clientAsMask; XID maxid; + pointer val; maxid = id | RESOURCE_ID_MASK; while ( (found < count) && (id <= maxid) ) { - if (!LookupIDByClass(id, RC_ANY)) + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + if (rc == BadValue) { pids[found++] = id; } @@ -826,6 +829,8 @@ FreeAllResources(void) Bool LegalNewID(XID id, ClientPtr client) { + pointer val; + int rc; #ifdef PANORAMIX XID minid, maxid; @@ -838,9 +843,16 @@ LegalNewID(XID id, ClientPtr client) return TRUE; } #endif /* PANORAMIX */ - return ((client->clientAsMask == (id & ~RESOURCE_ID_MASK)) && - ((clientTable[client->index].expectID <= id) || - !LookupIDByClass(id, RC_ANY))); + if (client->clientAsMask == (id & ~RESOURCE_ID_MASK)) + { + if (clientTable[client->index].expectID <= id) + return TRUE; + + rc = dixLookupResourceByClass(&val, id, RC_ANY, serverClient, + DixGetAttrAccess); + return (rc == BadValue); + } + return FALSE; } int diff --git a/dix/window.c b/dix/window.c index f112f81d4..324ddb71e 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2795,6 +2795,7 @@ UnrealizeTree( WindowPtr pChild; UnrealizeWindowProcPtr Unrealize; MarkUnrealizedWindowProcPtr MarkUnrealizedWindow; + int rc; Unrealize = pWin->drawable.pScreen->UnrealizeWindow; MarkUnrealizedWindow = pWin->drawable.pScreen->MarkUnrealizedWindow; @@ -2808,9 +2809,10 @@ UnrealizeTree( #ifdef PANORAMIX if(!noPanoramiXExtension && !pChild->drawable.pScreen->myNum) { PanoramiXRes *win; - win = (PanoramiXRes*)LookupIDByType(pChild->drawable.id, - XRT_WINDOW); - if(win) + rc = dixLookupResourceByType((pointer *)&win, + pChild->drawable.id, XRT_WINDOW, + serverClient, DixWriteAccess); + if (rc == Success) win->u.win.visibility = VisibilityNotViewable; } #endif @@ -3072,7 +3074,7 @@ SendVisibilityNotify(WindowPtr pWin) if(!noPanoramiXExtension) { PanoramiXRes *win; WindowPtr pWin2; - int i, Scrnum; + int rc, i, Scrnum; Scrnum = pWin->drawable.pScreen->myNum; @@ -3086,9 +3088,10 @@ SendVisibilityNotify(WindowPtr pWin) for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility == VisibilityPartiallyObscured) return; @@ -3098,17 +3101,19 @@ SendVisibilityNotify(WindowPtr pWin) break; case VisibilityPartiallyObscured: if(Scrnum) { - pWin2 = (WindowPtr)LookupIDByType(win->info[0].id, RT_WINDOW); - if (pWin2) pWin = pWin2; + rc = dixLookupWindow(&pWin2, win->info[0].id, serverClient, + DixWriteAccess); + if (rc == Success) pWin = pWin2; } break; case VisibilityFullyObscured: for(i = 0; i < PanoramiXNumScreens; i++) { if(i == Scrnum) continue; - pWin2 = (WindowPtr)LookupIDByType(win->info[i].id, RT_WINDOW); + rc = dixLookupWindow(&pWin2, win->info[i].id, serverClient, + DixWriteAccess); - if (pWin2) { + if (rc == Success) { if(pWin2->visibility != VisibilityFullyObscured) return; @@ -3739,7 +3744,7 @@ DrawLogo(WindowPtr pWin) int x, y; unsigned int width, height, size; GC *pGC; - int thin, gap, d31; + int rc, thin, gap, d31; DDXPointRec poly[4]; ChangeGCVal fore[2], back[2]; xrgb rgb[2]; @@ -3760,20 +3765,23 @@ DrawLogo(WindowPtr pWin) fore[0].val = pScreen->whitePixel; else fore[0].val = pScreen->blackPixel; - if ((pWin->backgroundState == BackgroundPixel) && - (cmap = (ColormapPtr)LookupIDByType(wColormap (pWin), RT_COLORMAP))) { - Pixel querypixels[2]; + if (pWin->backgroundState == BackgroundPixel) { + rc = dixLookupResourceByType((pointer *)&cmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixReadAccess); + if (rc == Success) { + Pixel querypixels[2]; - querypixels[0] = fore[0].val; - querypixels[1] = pWin->background.pixel; - QueryColors(cmap, 2, querypixels, rgb); - if ((rgb[0].red == rgb[1].red) && - (rgb[0].green == rgb[1].green) && - (rgb[0].blue == rgb[1].blue)) { - if (fore[0].val == pScreen->blackPixel) - fore[0].val = pScreen->whitePixel; - else - fore[0].val = pScreen->blackPixel; + querypixels[0] = fore[0].val; + querypixels[1] = pWin->background.pixel; + QueryColors(cmap, 2, querypixels, rgb); + if ((rgb[0].red == rgb[1].red) && + (rgb[0].green == rgb[1].green) && + (rgb[0].blue == rgb[1].blue)) { + if (fore[0].val == pScreen->blackPixel) + fore[0].val = pScreen->whitePixel; + else + fore[0].val = pScreen->blackPixel; + } } } fore[1].val = FillSolid; diff --git a/fb/fbcmap.c b/fb/fbcmap.c index c29a5131c..207c6aefc 100644 --- a/fb/fbcmap.c +++ b/fb/fbcmap.c @@ -85,8 +85,10 @@ fbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/kdrive/src/kcmap.c b/hw/kdrive/src/kcmap.c index 4941ad17f..2c33e798a 100644 --- a/hw/kdrive/src/kcmap.c +++ b/hw/kdrive/src/kcmap.c @@ -217,7 +217,8 @@ KdUninstallColormap (ColormapPtr pCmap) return; /* install default if on same fb */ - defMap = (ColormapPtr) LookupIDByType(defMapID, RT_COLORMAP); + dixLookupResourceByType((pointer *)&defMap, defMapID, RT_COLORMAP, + serverClient, DixInstallAccess); if (defMap && KdColormapFb (defMap) == fb) (*pCmap->pScreen->InstallColormap)(defMap); else diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c index af3e8f1d4..8ab8bae64 100644 --- a/hw/vfb/InitOutput.c +++ b/hw/vfb/InitOutput.c @@ -508,8 +508,10 @@ vfbUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixInstallAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c index a627b5315..7e73bb85c 100644 --- a/hw/xfree86/common/xf86cmap.c +++ b/hw/xfree86/common/xf86cmap.c @@ -211,8 +211,8 @@ Bool xf86HandleColormaps( ComputeGamma(pScreenPriv); /* get the default map */ - - pDefMap = (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&pDefMap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if(!CMapAllocateColormapPrivate(pDefMap)) { CMapUnwrapScreen(pScreen); diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c index 868fb0624..46aa8b882 100644 --- a/hw/xfree86/dixmods/extmod/xf86dga2.c +++ b/hw/xfree86/dixmods/extmod/xf86dga2.c @@ -420,6 +420,7 @@ static int ProcXDGAInstallColormap(ClientPtr client) { ColormapPtr cmap; + int rc; REQUEST(xXDGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -430,13 +431,13 @@ ProcXDGAInstallColormap(ClientPtr client) REQUEST_SIZE_MATCH(xXDGAInstallColormapReq); - cmap = (ColormapPtr)LookupIDByType(stuff->cmap, RT_COLORMAP); - if (cmap) { + rc = dixLookupResourceByType((pointer *)&cmap, stuff->cmap, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(cmap); return (client->noClientException); } else { - client->errorValue = stuff->cmap; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } return (client->noClientException); @@ -858,6 +859,7 @@ static int ProcXF86DGAInstallColormap(ClientPtr client) { ColormapPtr pcmp; + int rc; REQUEST(xXF86DGAInstallColormapReq); if (stuff->screen > screenInfo.numScreens) @@ -871,13 +873,13 @@ ProcXF86DGAInstallColormap(ClientPtr client) if (!DGAActive(stuff->screen)) return (DGAErrorBase + XF86DGADirectNotActivated); - pcmp = (ColormapPtr )LookupIDByType(stuff->id, RT_COLORMAP); - if (pcmp) { + rc = dixLookupResourceByType((pointer *)&pcmp, stuff->id, RT_COLORMAP, + client, DixInstallAccess); + if (rc == Success) { DGAInstallCmap(pcmp); return (client->noClientException); } else { - client->errorValue = stuff->id; - return (BadColor); + return (rc == BadValue) ? BadColor : rc; } } diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c index c01686de3..3af9878d5 100644 --- a/hw/xfree86/dri/dri.c +++ b/hw/xfree86/dri/dri.c @@ -1363,11 +1363,12 @@ Bool DRIDrawablePrivDelete(pointer pResource, XID id) { WindowPtr pWin; + int rc; id = (XID)pResource; - pWin = LookupIDByType(id, RT_WINDOW); + rc = dixLookupWindow(&pWin, id, serverClient, DixGetAttrAccess); - if (pWin) { + if (rc == Success) { DRIDrawablePrivPtr pDRIDrwPriv = DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin); if (!pDRIDrwPriv) diff --git a/hw/xfree86/vgahw/vgaCmap.c b/hw/xfree86/vgahw/vgaCmap.c index 44043c6c7..095e480a3 100644 --- a/hw/xfree86/vgahw/vgaCmap.c +++ b/hw/xfree86/vgahw/vgaCmap.c @@ -277,8 +277,8 @@ vgaUninstallColormap(pmap) if ( pmap != miInstalledMaps[pmap->pScreen->myNum] ) return; - defColormap = (ColormapPtr) LookupIDByType( pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&defColormap, pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, DixInstallAccess); if (defColormap == miInstalledMaps[pmap->pScreen->myNum]) return; diff --git a/hw/xnest/Color.c b/hw/xnest/Color.c index 5ba0bdbad..dc749478f 100644 --- a/hw/xnest/Color.c +++ b/hw/xnest/Color.c @@ -242,16 +242,16 @@ xnestSetInstalledColormapWindows(ScreenPtr pScreen) WindowPtr pWin; Visual *visual; ColormapPtr pCmap; - + pWin = xnestWindowPtr(icws.windows[0]); visual = xnestVisualFromID(pScreen, wVisual(pWin)); if (visual == xnestDefaultVisual(pScreen)) - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); else - pCmap = (ColormapPtr)LookupIDByType(pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pScreen->defColormap, + RT_COLORMAP, serverClient, DixUseAccess); XSetWindowColormap(xnestDisplay, xnestDefaultWindows[pScreen->myNum], @@ -302,7 +302,8 @@ xnestDirectInstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixInstallAccess); if (pCmap) XInstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -321,7 +322,8 @@ xnestDirectUninstallColormaps(ScreenPtr pScreen) for (i = 0; i < n; i++) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(pCmapIDs[i], RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, pCmapIDs[i], RT_COLORMAP, + serverClient, DixUninstallAccess); if (pCmap) XUninstallColormap(xnestDisplay, xnestColormap(pCmap)); } @@ -365,8 +367,10 @@ xnestUninstallColormap(ColormapPtr pCmap) { if (pCmap->mid != pCmap->pScreen->defColormap) { - pCurCmap = (ColormapPtr)LookupIDByType(pCmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCurCmap, + pCmap->pScreen->defColormap, + RT_COLORMAP, + serverClient, DixInstallAccess); (*pCmap->pScreen->InstallColormap)(pCurCmap); } } diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c index ae3487f4a..48c870fac 100644 --- a/hw/xnest/Window.c +++ b/hw/xnest/Window.c @@ -93,7 +93,8 @@ xnestCreateWindow(WindowPtr pWin) visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); mask |= CWColormap; if (pWin->optional->colormap) { - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); } else @@ -104,7 +105,8 @@ xnestCreateWindow(WindowPtr pWin) } else { /* root windows have their own colormaps at creation time */ visual = xnestVisualFromID(pWin->drawable.pScreen, wVisual(pWin)); - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), + RT_COLORMAP, serverClient, DixUseAccess); mask |= CWColormap; attributes.colormap = xnestColormap(pCmap); } @@ -338,7 +340,8 @@ xnestChangeWindowAttributes(WindowPtr pWin, unsigned long mask) if (mask & CWColormap) { ColormapPtr pCmap; - pCmap = (ColormapPtr)LookupIDByType(wColormap(pWin), RT_COLORMAP); + dixLookupResourceByType((pointer *)&pCmap, wColormap(pWin), RT_COLORMAP, + serverClient, DixUseAccess); attributes.colormap = xnestColormap(pCmap); diff --git a/mi/micmap.c b/mi/micmap.c index 6318d6745..1d26a5232 100644 --- a/mi/micmap.c +++ b/mi/micmap.c @@ -87,8 +87,10 @@ miUninstallColormap(ColormapPtr pmap) { if (pmap->mid != pmap->pScreen->defColormap) { - curpmap = (ColormapPtr) LookupIDByType(pmap->pScreen->defColormap, - RT_COLORMAP); + dixLookupResourceByType((pointer *)&curpmap, + pmap->pScreen->defColormap, + RT_COLORMAP, serverClient, + DixUseAccess); (*pmap->pScreen->InstallColormap)(curpmap); } } diff --git a/mi/miexpose.c b/mi/miexpose.c index 5746a5fca..2c43d9824 100644 --- a/mi/miexpose.c +++ b/mi/miexpose.c @@ -436,7 +436,7 @@ miSendExposures( WindowPtr pWin, RegionPtr pRgn, int dx, int dy) return; } realWin = win->info[0].id; - pWin = LookupIDByType(realWin, RT_WINDOW); + dixLookupWindow(&pWin, realWin, serverClient, DixSendAccess); } if(x || y || scrnum) for (i = 0; i < numRects; i++) { diff --git a/randr/randr.c b/randr/randr.c index 07dd9e917..fd0a30aa1 100644 --- a/randr/randr.c +++ b/randr/randr.c @@ -279,7 +279,8 @@ RRFreeClient (pointer data, XID id) pRREvent = (RREventPtr) data; pWin = pRREvent->window; - pHead = (RREventPtr *) LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixDestroyAccess); if (pHead) { pPrev = 0; for (pCur = *pHead; pCur && pCur != pRREvent; pCur=pCur->next) @@ -357,7 +358,8 @@ TellChanged (WindowPtr pWin, pointer value) rrScrPriv(pScreen); int i; - pHead = (RREventPtr *) LookupIDByType (pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; diff --git a/randr/randrstr.h b/randr/randrstr.h index 5e70aa3bf..af1437404 100644 --- a/randr/randrstr.h +++ b/randr/randrstr.h @@ -340,15 +340,29 @@ extern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event extern _X_EXPORT DevPrivateKey RRClientPrivateKey; extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType; -#define LookupOutput(client,id,a) ((RROutputPtr) \ - (SecurityLookupIDByType (client, id, \ - RROutputType, a))) -#define LookupCrtc(client,id,a) ((RRCrtcPtr) \ - (SecurityLookupIDByType (client, id, \ - RRCrtcType, a))) -#define LookupMode(client,id,a) ((RRModePtr) \ - (SecurityLookupIDByType (client, id, \ - RRModeType, a))) +#define VERIFY_RR_OUTPUT(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RROutputType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc;\ + } + +#define VERIFY_RR_CRTC(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRCrtcType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRCrtc : rc;\ + } + +#define VERIFY_RR_MODE(id, ptr, a)\ + {\ + int rc = dixLookupResourceByType((pointer *)&(ptr), id,\ + RRModeType, client, a);\ + if (rc != Success)\ + return (rc == BadValue) ? RRErrorBase + BadRRMode : rc;\ + } #define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey)) #define rrClientPriv(pClient) RRClientPtr pRRClient = GetRRClient(pClient) diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index 7b724aefc..287c21194 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -658,10 +658,7 @@ ProcRRGetCrtcInfo (ClientPtr client) BoxRec panned_area; REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -775,17 +772,13 @@ ProcRRSetCrtcConfig (ClientPtr client) TimeStamp configTime; TimeStamp time; Rotation rotation; - int i, j; + int rc, i, j; REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq); numOutputs = (stuff->length - (SIZEOF (xRRSetCrtcConfigReq) >> 2)); - crtc = LookupIDByType (stuff->crtc, RRCrtcType); - if (!crtc) - { - client->errorValue = stuff->crtc; - return RRErrorBase + BadRRCrtc; - } + VERIFY_RR_CRTC(stuff->crtc, crtc, DixSetAttrAccess); + if (stuff->mode == None) { mode = NULL; @@ -794,12 +787,7 @@ ProcRRSetCrtcConfig (ClientPtr client) } else { - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixSetAttrAccess); if (numOutputs == 0) return BadMatch; } @@ -815,13 +803,13 @@ ProcRRSetCrtcConfig (ClientPtr client) outputIds = (RROutput *) (stuff + 1); for (i = 0; i < numOutputs; i++) { - outputs[i] = (RROutputPtr) LookupIDByType (outputIds[i], RROutputType); - if (!outputs[i]) + rc = dixLookupResourceByType((pointer *)(outputs + i), outputIds[i], + RROutputType, client, DixSetAttrAccess); + if (rc != Success) { - client->errorValue = outputIds[i]; if (outputs) xfree (outputs); - return RRErrorBase + BadRROutput; + return (rc == BadValue) ? RRErrorBase + BadRROutput : rc; } /* validate crtc for this output */ for (j = 0; j < outputs[i]->numCrtcs; j++) @@ -1027,10 +1015,7 @@ ProcRRGetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1100,11 +1085,7 @@ ProcRRSetPanning (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRSetPanningReq); - crtc = LookupCrtc(client, stuff->crtc, DixReadAccess); - - if (!crtc) - return RRErrorBase + BadRRCrtc; - + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* All crtcs must be associated with screens before client * requests are processed @@ -1175,9 +1156,7 @@ ProcRRGetCrtcGammaSize (ClientPtr client) int n; REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1207,9 +1186,7 @@ ProcRRGetCrtcGamma (ClientPtr client) char *extra = NULL; REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixReadAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); /* Gamma retrieval failed, any better error? */ if (!RRCrtcGammaGet(crtc)) @@ -1252,9 +1229,7 @@ ProcRRSetCrtcGamma (ClientPtr client) CARD16 *red, *green, *blue; REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); len = client->req_len - (sizeof (xRRSetCrtcGammaReq) >> 2); if (len < (stuff->size * 3 + 1) >> 1) @@ -1287,9 +1262,7 @@ ProcRRSetCrtcTransform (ClientPtr client) int nparams; REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); PictTransform_from_xRenderTransform (&transform, &stuff->transform); pixman_f_transform_from_pixman_transform (&f_transform, &transform); @@ -1372,9 +1345,7 @@ ProcRRGetCrtcTransform (ClientPtr client) char *extra; REQUEST_SIZE_MATCH (xRRGetCrtcTransformReq); - crtc = LookupCrtc (client, stuff->crtc, DixWriteAccess); - if (!crtc) - return RRErrorBase + BadRRCrtc; + VERIFY_RR_CRTC(stuff->crtc, crtc, DixReadAccess); pending = &crtc->client_pending_transform; current = &crtc->client_current_transform; diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c index 0925875bf..bec5b08af 100644 --- a/randr/rrdispatch.c +++ b/randr/rrdispatch.c @@ -79,9 +79,10 @@ ProcRRSelectInput (ClientPtr client) rc = dixLookupWindow(&pWin, stuff->window, client, DixReceiveAccess); if (rc != Success) return rc; - pHead = (RREventPtr *)SecurityLookupIDByType(client, - pWin->drawable.id, RREventType, - DixWriteAccess); + rc = dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, client, DixWriteAccess); + if (rc != Success && rc != BadValue) + return rc; if (stuff->enable & (RRScreenChangeNotifyMask| RRCrtcChangeNotifyMask| diff --git a/randr/rrmode.c b/randr/rrmode.c index 2fa440385..2a1007662 100644 --- a/randr/rrmode.c +++ b/randr/rrmode.c @@ -332,12 +332,8 @@ ProcRRDestroyMode (ClientPtr client) RRModePtr mode; REQUEST_SIZE_MATCH(xRRDestroyModeReq); - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_MODE(stuff->mode, mode, DixDestroyAccess); + if (!mode->userScreen) return BadMatch; if (mode->refcnt > 1) @@ -354,20 +350,8 @@ ProcRRAddOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRAddOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputAddUserMode (output, mode); } @@ -380,20 +364,8 @@ ProcRRDeleteOutputMode (ClientPtr client) RROutputPtr output; REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } - - mode = LookupIDByType (stuff->mode, RRModeType); - if (!mode) - { - client->errorValue = stuff->mode; - return RRErrorBase + BadRRMode; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); + VERIFY_RR_MODE(stuff->mode, mode, DixUseAccess); return RROutputDeleteUserMode (output, mode); } diff --git a/randr/rroutput.c b/randr/rroutput.c index 0ae7873e2..127497eb8 100644 --- a/randr/rroutput.c +++ b/randr/rroutput.c @@ -448,13 +448,7 @@ ProcRRGetOutputInfo (ClientPtr client) int i, n; REQUEST_SIZE_MATCH(xRRGetOutputInfoReq); - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) - { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); pScreen = output->pScreen; pScrPriv = rrGetScrPriv(pScreen); @@ -569,24 +563,16 @@ ProcRRSetOutputPrimary(ClientPtr client) RROutputPtr output = NULL; WindowPtr pWin; rrScrPrivPtr pScrPriv; + int rc; REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; if (stuff->output) { - output = LookupOutput(client, stuff->output, DixReadAccess); - - if (!output) { - client->errorValue = stuff->output; - return RRErrorBase + BadRROutput; - } + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (output->pScreen != pWin->drawable.pScreen) { client->errorValue = stuff->window; @@ -608,16 +594,13 @@ ProcRRGetOutputPrimary(ClientPtr client) rrScrPrivPtr pScrPriv; xRRGetOutputPrimaryReply rep; RROutputPtr primary = NULL; + int rc; REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq); - pWin = SecurityLookupIDByType(client, stuff->window, RT_WINDOW, - DixReadAccess); - - if (!pWin) { - client->errorValue = stuff->window; - return BadWindow; - } + rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess); + if (rc != Success) + return rc; pScrPriv = rrGetScrPriv(pWin->drawable.pScreen); if (pScrPriv) diff --git a/randr/rrproperty.c b/randr/rrproperty.c index 12923a2c7..775d9e29f 100644 --- a/randr/rrproperty.c +++ b/randr/rrproperty.c @@ -31,7 +31,8 @@ DeliverPropertyEvent(WindowPtr pWin, void *value) RREventPtr *pHead, pRREvent; ClientPtr client; - pHead = LookupIDByType(pWin->drawable.id, RREventType); + dixLookupResourceByType((pointer *)&pHead, pWin->drawable.id, + RREventType, serverClient, DixReadAccess); if (!pHead) return WT_WALKCHILDREN; @@ -419,10 +420,7 @@ ProcRRListOutputProperties (ClientPtr client) REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); for (prop = output->properties; prop; prop = prop->next) numProps++; @@ -466,10 +464,7 @@ ProcRRQueryOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); prop = RRQueryOutputProperty (output, stuff->property); if (!prop) @@ -513,10 +508,7 @@ ProcRRConfigureOutputProperty (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq); - output = LookupOutput (client, stuff->output, DixReadAccess); - - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); num_valid = stuff->length - (sizeof (xRRConfigureOutputPropertyReq) >> 2); return RRConfigureOutputProperty (output, stuff->property, @@ -558,9 +550,7 @@ ProcRRChangeOutputProperty (ClientPtr client) totalSize = len * sizeInBytes; REQUEST_FIXED_SIZE(xRRChangeOutputPropertyReq, totalSize); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -590,9 +580,7 @@ ProcRRDeleteOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq); UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, DixWriteAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); if (!ValidAtom(stuff->property)) { @@ -619,11 +607,8 @@ ProcRRGetOutputProperty (ClientPtr client) REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq); if (stuff->delete) UpdateCurrentTime(); - output = LookupOutput (client, stuff->output, - stuff->delete ? DixWriteAccess : - DixReadAccess); - if (!output) - return RRErrorBase + BadRROutput; + VERIFY_RR_OUTPUT(stuff->output, output, + stuff->delete ? DixWriteAccess : DixReadAccess); if (!ValidAtom(stuff->property)) { diff --git a/record/record.c b/record/record.c index f97626f73..cb7a6276c 100644 --- a/record/record.c +++ b/record/record.c @@ -127,11 +127,10 @@ static int numEnabledRCAPs; * returns an error. */ #define VERIFY_CONTEXT(_pContext, _contextid, _client) { \ - (_pContext) = (RecordContextPtr)LookupIDByType((_contextid), RTContext); \ - if (!(_pContext)) { \ - (_client)->errorValue = (_contextid); \ - return RecordErrorBase + XRecordBadContext; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(_pContext), _contextid, \ + RTContext, _client, DixUseAccess); \ + if (rc != Success) \ + return (rc == BadValue) ? RecordErrorBase + XRecordBadContext : rc; \ } static int RecordDeleteContext( diff --git a/render/picture.c b/render/picture.c index 462125f05..5f86c7ce1 100644 --- a/render/picture.c +++ b/render/picture.c @@ -410,8 +410,9 @@ PictureInitIndexedFormat(ScreenPtr pScreen, PictFormatPtr format) return TRUE; if (format->index.vid == pScreen->rootVisual) { - format->index.pColormap = - (ColormapPtr) LookupIDByType(pScreen->defColormap, RT_COLORMAP); + dixLookupResourceByType((pointer *)&format->index.pColormap, + pScreen->defColormap, RT_COLORMAP, + serverClient, DixGetAttrAccess); } else { VisualPtr pVisual = PictureFindVisual(pScreen, format->index.vid); if (CreateColormap(FakeClientID (0), pScreen, pVisual, diff --git a/render/picturestr.h b/render/picturestr.h index 194db11a3..6a1cc061c 100644 --- a/render/picturestr.h +++ b/render/picturestr.h @@ -409,11 +409,10 @@ extern _X_EXPORT RESTYPE GlyphSetType; #define SetPictureWindow(w,p) dixSetPrivate(&(w)->devPrivates, PictureWindowPrivateKey, p) #define VERIFY_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, PictureType, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer)&(pPicture), pid,\ + PictureType, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_ALPHA(pPicture, pid, client, mode, err) {\ diff --git a/render/render.c b/render/render.c index 270b8fb29..8487b60de 100644 --- a/render/render.c +++ b/render/render.c @@ -509,7 +509,7 @@ static int ProcRenderQueryPictIndexValues (ClientPtr client) { PictFormatPtr pFormat; - int num; + int rc, num; int rlength; int i, n; REQUEST(xRenderQueryPictIndexValuesReq); @@ -518,16 +518,11 @@ ProcRenderQueryPictIndexValues (ClientPtr client) REQUEST_AT_LEAST_SIZE(xRenderQueryPictIndexValuesReq); - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } if (pFormat->type != PictTypeIndexed) { client->errorValue = stuff->format; @@ -592,15 +587,11 @@ ProcRenderCreatePicture (ClientPtr client) if (rc != Success) return rc; - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + if (pFormat->depth != pDrawable->depth) return BadMatch; len = client->req_len - (sizeof(xRenderCreatePictureReq) >> 2); @@ -740,7 +731,7 @@ ProcRenderScale (ClientPtr client) static int ProcRenderTrapezoids (ClientPtr client) { - int ntraps; + int rc, ntraps; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrapezoidsReq); @@ -761,15 +752,10 @@ ProcRenderTrapezoids (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -787,7 +773,7 @@ ProcRenderTrapezoids (ClientPtr client) static int ProcRenderTriangles (ClientPtr client) { - int ntris; + int rc, ntris; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -808,15 +794,10 @@ ProcRenderTriangles (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -834,7 +815,7 @@ ProcRenderTriangles (ClientPtr client) static int ProcRenderTriStrip (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -855,15 +836,10 @@ ProcRenderTriStrip (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -881,7 +857,7 @@ ProcRenderTriStrip (ClientPtr client) static int ProcRenderTriFan (ClientPtr client) { - int npoints; + int rc, npoints; PicturePtr pSrc, pDst; PictFormatPtr pFormat; REQUEST(xRenderTrianglesReq); @@ -902,15 +878,10 @@ ProcRenderTriFan (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; @@ -954,15 +925,11 @@ ProcRenderCreateGlyphSet (ClientPtr client) REQUEST_SIZE_MATCH(xRenderCreateGlyphSetReq); LEGAL_NEW_RESOURCE(stuff->gsid, client); - format = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->format, - PictFormatType, - DixReadAccess); - if (!format) - { - client->errorValue = stuff->format; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&format, stuff->format, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; + switch (format->depth) { case 1: f = GlyphFormat1; @@ -1300,7 +1267,7 @@ ProcRenderCompositeGlyphs (ClientPtr client) int nlist; int space; int size; - int n; + int rc, n; REQUEST(xRenderCompositeGlyphsReq); @@ -1327,28 +1294,18 @@ ProcRenderCompositeGlyphs (ClientPtr client) return BadMatch; if (stuff->maskFormat) { - pFormat = (PictFormatPtr) SecurityLookupIDByType (client, - stuff->maskFormat, - PictFormatType, - DixReadAccess); - if (!pFormat) - { - client->errorValue = stuff->maskFormat; - return RenderErrBase + BadPictFormat; - } + rc = dixLookupResourceByType((pointer *)&pFormat, stuff->maskFormat, + PictFormatType, client, DixReadAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadPictFormat : rc; } else pFormat = 0; - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - stuff->glyphset, - GlyphSetType, - DixUseAccess); - if (!glyphSet) - { - client->errorValue = stuff->glyphset; - return RenderErrBase + BadGlyphSet; - } + rc = dixLookupResourceByType((pointer *)&glyphSet, stuff->glyphset, + GlyphSetType, client, DixUseAccess); + if (rc != Success) + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; buffer = (CARD8 *) (stuff + 1); end = (CARD8 *) stuff + (client->req_len << 2); @@ -1402,18 +1359,16 @@ ProcRenderCompositeGlyphs (ClientPtr client) if (buffer + sizeof (GlyphSet) < end) { memcpy(&gs, buffer, sizeof(GlyphSet)); - glyphSet = (GlyphSetPtr) SecurityLookupIDByType (client, - gs, - GlyphSetType, - DixUseAccess); - if (!glyphSet) + rc = dixLookupResourceByType((pointer *)&glyphSet, gs, + GlyphSetType, client, + DixUseAccess); + if (rc != Success) { - client->errorValue = gs; if (glyphsBase != glyphsLocal) xfree (glyphsBase); if (listsBase != listsLocal) xfree (listsBase); - return RenderErrBase + BadGlyphSet; + return (rc == BadValue) ? RenderErrBase + BadGlyphSet : rc; } } buffer += 4; @@ -1902,13 +1857,12 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - cursors[i] = (CursorPtr)SecurityLookupIDByType(client, elt->cursor, - RT_CURSOR, DixReadAccess); - if (!cursors[i]) + ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + RT_CURSOR, client, DixReadAccess); + if (ret != Success) { xfree (cursors); - client->errorValue = elt->cursor; - return BadCursor; + return (ret == BadValue) ? BadCursor : ret; } deltas[i] = elt->delay; elt++; @@ -2689,11 +2643,10 @@ SProcRenderDispatch (ClientPtr client) #include "panoramiXsrv.h" #define VERIFY_XIN_PICTURE(pPicture, pid, client, mode, err) {\ - pPicture = SecurityLookupIDByType(client, pid, XRT_PICTURE, mode);\ - if (!pPicture) { \ - client->errorValue = pid; \ - return err; \ - } \ + int rc = dixLookupResourceByType((pointer *)&(pPicture), pid,\ + XRT_PICTURE, client, mode);\ + if (rc != Success)\ + return (rc == BadValue) ? err : rc;\ } #define VERIFY_XIN_ALPHA(pPicture, pid, client, mode, err) {\ @@ -2713,12 +2666,13 @@ PanoramiXRenderCreatePicture (ClientPtr client) { REQUEST(xRenderCreatePictureReq); PanoramiXRes *refDraw, *newPict; - int result = Success, j; + int result, j; REQUEST_AT_LEAST_SIZE(xRenderCreatePictureReq); - if(!(refDraw = (PanoramiXRes *)SecurityLookupIDByClass( - client, stuff->drawable, XRC_DRAWABLE, DixWriteAccess))) - return BadDrawable; + result = dixLookupResourceByClass((pointer *)&refDraw, stuff->drawable, + XRC_DRAWABLE, client, DixWriteAccess); + if (result != Success) + return (result == BadValue) ? BadDrawable : result; if(!(newPict = (PanoramiXRes *) xalloc(sizeof(PanoramiXRes)))) return BadAlloc; newPict->type = XRT_PICTURE; diff --git a/xfixes/cursor.c b/xfixes/cursor.c index eb83cfeb7..6fa2dff8e 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -203,6 +203,8 @@ XFixesSelectCursorInput (ClientPtr pClient, CARD32 eventMask) { CursorEventPtr *prev, e; + pointer val; + int rc; for (prev = &cursorEvents; (e = *prev); prev = &e->next) { @@ -235,7 +237,10 @@ XFixesSelectCursorInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, CursorWindowType)) + rc = dixLookupResourceByType( &val, pWindow->drawable.id, + CursorWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, CursorWindowType, (pointer) pWindow)) { diff --git a/xfixes/select.c b/xfixes/select.c index 795b8bd4c..a5811bdc0 100644 --- a/xfixes/select.c +++ b/xfixes/select.c @@ -133,6 +133,7 @@ XFixesSelectSelectionInput (ClientPtr pClient, WindowPtr pWindow, CARD32 eventMask) { + pointer val; int rc; SelectionEventPtr *prev, e; @@ -173,7 +174,10 @@ XFixesSelectSelectionInput (ClientPtr pClient, * Add a resource hanging from the window to * catch window destroy */ - if (!LookupIDByType(pWindow->drawable.id, SelectionWindowType)) + rc = dixLookupResourceByType (&val, pWindow->drawable.id, + SelectionWindowType, serverClient, + DixGetAttrAccess); + if (rc != Success) if (!AddResource (pWindow->drawable.id, SelectionWindowType, (pointer) pWindow)) { From 0d9d3f3e361f769822caedccf4c2a58cc9930ecc Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Mon, 27 Apr 2009 15:11:10 -0700 Subject: [PATCH 18/89] DRI2: Force allocation of real-front buffer for non-windows as well For redirected rendering we end up with pixmaps (which the app thinks are windows) that are double buffered. Signed-off-by: Ian Romanick Tested-by: Pierre Willenbrock --- hw/xfree86/dri2/dri2.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 9ded048eb..1d49d7c65 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -206,18 +206,21 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, * attachments. The counting logic in the loop accounts for the case * where the client requests both the fake and real front-buffer. */ - if (pDraw->type == DRAWABLE_WINDOW) { - if (attachment == DRI2BufferBackLeft) { - need_real_front++; - front_format = format; - } + if (attachment == DRI2BufferBackLeft) { + need_real_front++; + front_format = format; + } - if (attachment == DRI2BufferFrontLeft) { - need_real_front--; + if (attachment == DRI2BufferFrontLeft) { + need_real_front--; + front_format = format; + + if (pDraw->type == DRAWABLE_WINDOW) { need_fake_front++; - front_format = format; } + } + if (pDraw->type == DRAWABLE_WINDOW) { if (attachment == DRI2BufferFakeFrontLeft) { need_fake_front--; have_fake_front = 1; From 557dbadf3be273255e8fdb12d9321f4e88bf2b65 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Sat, 2 May 2009 00:26:18 -0700 Subject: [PATCH 19/89] XkbSetNamedIndicator should ignore SD's without LED's When ProcXkbSetNamedIndicator is called on a core device, and we walk the slaves to set the LED's on each of them, ignore any slaves that do not have either a KbdFeedbackCtrl or LedCtrl structure. (This is much more critical in xserver-1.5-branch, where we walk *all* devices, not just the slaves of the specified master, and thus return failure when setting an LED on the Core Keyboard and hit a xf86-input-mouse device with no LED's to set.) Signed-off-by: Alan Coopersmith Acked-by: Peter Hutterer --- xkb/xkb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xkb/xkb.c b/xkb/xkb.c index e7c9a312d..b2fe11cae 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -3433,6 +3433,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { rc = _XkbCreateIndicatorMap(other, stuff->indicator, @@ -3456,6 +3457,7 @@ ProcXkbSetNamedIndicator(ClientPtr client) for (other = inputInfo.devices; other; other = other->next) { if ((other != dev) && !other->isMaster && (other->u.master == dev) && + (other->kbdfeed || other->leds) && (XaceHook(XACE_DEVICE_ACCESS, client, other, DixSetAttrAccess) == Success)) { _XkbSetNamedIndicator(client, other, stuff); From 7d85169c7ab1d05c21fdbb2877ffd79f344dbb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 4 May 2009 10:14:43 +0200 Subject: [PATCH 20/89] Fix typo in ProcRenderCreateAnimCursor. --- render/render.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/render/render.c b/render/render.c index 8487b60de..5622994e3 100644 --- a/render/render.c +++ b/render/render.c @@ -1857,7 +1857,7 @@ ProcRenderCreateAnimCursor (ClientPtr client) elt = (xAnimCursorElt *) (stuff + 1); for (i = 0; i < ncursor; i++) { - ret = dixLookupResourceByType((pointer *)(cursors + 1), elt->cursor, + ret = dixLookupResourceByType((pointer *)(cursors + i), elt->cursor, RT_CURSOR, client, DixReadAccess); if (ret != Success) { From 94648bb797d94b025746c60679c584e5be2fae28 Mon Sep 17 00:00:00 2001 From: Jesse Barnes Date: Mon, 4 May 2009 15:38:22 -0700 Subject: [PATCH 21/89] Don't prepare outputs & crtcs if set_mode_major is present A driver with this hook will take care of preparing the outputs & crtcs, so calling the prepare functions will just cause unnecessary flicker. Fixes bug #21077 --- hw/xfree86/modes/xf86Crtc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index c6eed3377..1b241cd33 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2549,18 +2549,23 @@ Bool xf86SetDesiredModes (ScrnInfoPtr scrn) { xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); + xf86CrtcPtr crtc = config->crtc[0]; int c; - xf86PrepareOutputs(scrn); - xf86PrepareCrtcs(scrn); + /* A driver with this hook will take care of this */ + if (!crtc->funcs->set_mode_major) { + xf86PrepareOutputs(scrn); + xf86PrepareCrtcs(scrn); + } for (c = 0; c < config->num_crtc; c++) { - xf86CrtcPtr crtc = config->crtc[c]; xf86OutputPtr output = NULL; int o; RRTransformPtr transform; + crtc = config->crtc[c]; + /* Skip disabled CRTCs */ if (!crtc->enabled) continue; From f1bed0959e803784af142a0f45177ee3b675d78a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:15:04 +1000 Subject: [PATCH 22/89] Xext: fix core Xtest button presses, don't call PickPointer. We already did the device selection before, so dev should be the XTest virtual pointer. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index d21eedcde..8aca6a0f7 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -376,12 +376,6 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: - if (!extension) - { - dev = PickPointer(client); - if (dev->u.lastSlave) - dev = dev->u.lastSlave; - } if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From 14d5471981151b27678de826daa078977217477a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:22:37 +1000 Subject: [PATCH 23/89] Xext: return BadDevice from XTest if we don't have keys/buttons/valuators. BadDevice is an XI error, but this cannot happen for core XTest fake input anyway since the device will be the matching virtual XTest slave device. Signed-off-by: Peter Hutterer --- Xext/xtest.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Xext/xtest.c b/Xext/xtest.c index 8aca6a0f7..cb32c2858 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -49,6 +49,7 @@ #include #include #include +#include "exglobals.h" #include "modinit.h" @@ -342,6 +343,9 @@ ProcXTestFakeInput(ClientPtr client) { case KeyPress: case KeyRelease: + if (!dev->key) + return BadDevice; + if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code || ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code) { @@ -350,6 +354,9 @@ ProcXTestFakeInput(ClientPtr client) } break; case MotionNotify: + if (!dev->valuator) + return BadDevice; + /* broken lib, XI events have root uninitialized */ if (extension || ev->u.keyButtonPointer.root == None) root = GetCurrentRootWindow(dev); @@ -376,6 +383,9 @@ ProcXTestFakeInput(ClientPtr client) break; case ButtonPress: case ButtonRelease: + if (!dev->button) + return BadDevice; + if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) { client->errorValue = ev->u.u.detail; From a38d33f6ac765bc5a3296b325e2c9b4a6a10ebf1 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 15:24:02 +1000 Subject: [PATCH 24/89] Xext: shut up compiler warnings in xtest.c Signed-off-by: Peter Hutterer --- Xext/xtest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index cb32c2858..96380b769 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -50,6 +50,7 @@ #include #include #include "exglobals.h" +#include "mipointer.h" #include "modinit.h" @@ -162,7 +163,6 @@ ProcXTestFakeInput(ClientPtr client) int i; int base = 0; int flags = 0; - DeviceIntPtr xtstdevice; nev = (stuff->length << 2) - sizeof(xReq); if ((nev % sizeof(xEvent)) || !nev) @@ -415,7 +415,7 @@ ProcXTestFakeInput(ClientPtr client) } for (i = 0; i < nevents; i++) - mieqProcessDeviceEvent(dev, (events+i)->event, NULL); + mieqProcessDeviceEvent(dev, (InternalEvent*)(events+i)->event, NULL); miPointerUpdateSprite(dev); return client->noClientException; From 7ecedb0f2ee5b53513205d1f0aa381451893b9c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 1 May 2009 14:35:12 +1000 Subject: [PATCH 25/89] include: up the number of max. input devices to 40. With the Xtest virtual slave devices we have 4 devices for each MD pointer/keyboard pair, plus the AllDevices and AllMasterDevices reserved deviceids. It's quite easy to hit the current limit. Signed-off-by: Peter Hutterer --- include/misc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/misc.h b/include/misc.h index 6a920cc9f..61dd9474c 100644 --- a/include/misc.h +++ b/include/misc.h @@ -86,7 +86,7 @@ OF THIS SOFTWARE. #define MAXCLIENTS 256 #define MAXEXTENSIONS 128 #define MAXFORMATS 8 -#define MAXDEVICES 20 /* input devices */ +#define MAXDEVICES 40 /* input devices */ #define EXTENSION_EVENT_BASE 64 #define EXTENSION_BASE 128 From 749cae82204f347248c815b1068ffcae9825fe70 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 30 Apr 2009 14:58:00 +1000 Subject: [PATCH 26/89] mi: don't crash if we're trying to update the pointer for a keyboard. If a device doesn't have a pointer, just return. Signed-off-by: Peter Hutterer --- mi/mipointer.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mi/mipointer.c b/mi/mipointer.c index 3d34481ef..1c61b57a9 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -367,6 +367,9 @@ miPointerUpdateSprite (DeviceIntPtr pDev) pPointer = MIPOINTER(pDev); + if (!pPointer) + return; + pScreen = pPointer->pScreen; if (!pScreen) return; From 1b1b20d6e3e696e4437a9ef56128cde70a485f66 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 13:47:55 +1000 Subject: [PATCH 27/89] Change glib require for tests to auto. Signed-off-by: Peter Hutterer --- configure.ac | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 3fc4dd405..daddd094a 100644 --- a/configure.ac +++ b/configure.ac @@ -440,8 +440,8 @@ AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [Enable debugging (default: disabled)]), [DEBUGGING=$enableval], [DEBUGGING=no]) AC_ARG_ENABLE(unit-tests, AS_HELP_STRING([--enable-unit-tests], - [Enable unit-tests (default: enabled)]), - [UNITTESTS=$enableval], [UNITTESTS=yes]) + [Enable unit-tests (default: auto)]), + [UNITTESTS=$enableval], [UNITTESTS=auto]) AC_ARG_WITH(int10, AS_HELP_STRING([--with-int10=BACKEND], [int10 backend: vm86, x86emu or stub]), [INT10="$withval"], [INT10="$DEFAULT_INT10"]) @@ -1144,6 +1144,9 @@ if test "x$DEBUGGING" = xyes; then fi AM_CONDITIONAL(DEBUG, [test "x$DEBUGGING" = xyes]) +if test "x$UNITTESTS" = xauto; then + PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16], [UNITTESTS=yes], [UNITTESTS=no]) +fi if test "x$UNITTESTS" = xyes; then AC_DEFINE(UNITTESTS, 1, [Enable unit tests]) PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16]) From 35fce4e5c7fa34f98b3e4010c6cb09ce38a9205c Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 12:58:48 +0200 Subject: [PATCH 28/89] dix: fix warning in pointer acceleration newer gcc's warn against how this cast is done (though it eludes me why), and lrintf() is also faster especially on insane processors like the P4 (http://www.mega-nerd.com/FPcast). Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 99efc794c..0a9a22ec2 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -994,14 +994,20 @@ acceleratePointerPredictable( if (dx) { tmp = mult * fdx + pDev->last.remainder[0]; - *px = (int)roundf(tmp); + /* Since it may not be apparent: lrintf() does not offer + * strong statements about rounding; however because we + * process each axis conditionally, there's no danger + * of a toggling remainder. Its lack of guarantees hopefully + * makes it faster on the average target. */ + *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; } if (dy) { tmp = mult * fdy + pDev->last.remainder[1]; - *py = (int)roundf(tmp); + *py = lrintf(tmp); pDev->last.remainder[1] = tmp - (float)*py; } + DebugAccelF("pos (%i | %i) remainders x: %.3f y: %.3f delta x:%.3f y:%.3f\n", *px, *py, pDev->last.remainder[0], pDev->last.remainder[1], fdx, fdy); } } } From 9d1597cbefea6a5e7959f2099c46f1a284def7ad Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Thu, 30 Apr 2009 13:01:17 +0200 Subject: [PATCH 29/89] dix: remove superfluous includes from ptrveloc.c Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 0a9a22ec2..7732e9569 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -28,11 +28,8 @@ #include #include -#include #include #include -#include -#include #include From 3fc6fcfb267888d65a22ed7c3eda175a2530a3d5 Mon Sep 17 00:00:00 2001 From: Simon Thum Date: Wed, 6 May 2009 10:39:16 +0200 Subject: [PATCH 30/89] dix: add 'none' pointer acceleration profile with number -1 This is a shorthand for disabling acceleration, while retaining the possiblity to use constant deceleration. If constant deceleration is also unused, it will optimize motion processing. Other possiblities to deactivate acceleration were quite hidden, and didn't always work as expected. E.g. xset m 1 1 would retain adaptive deceleration, while xset m 1 0 would not (in the default profile). Also removes the 'reserved' profile; it was unused and it's trivial to add new ones anyway. Signed-off-by: Peter Hutterer --- dix/ptrveloc.c | 36 ++++++++++++++++++++++++++++-------- include/ptrveloc.h | 7 +++---- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/dix/ptrveloc.c b/dix/ptrveloc.c index 7732e9569..2907d40a8 100644 --- a/dix/ptrveloc.c +++ b/dix/ptrveloc.c @@ -77,9 +77,12 @@ GetAccelerationProfile(DeviceVelocityPtr s, int profile_num); #endif /******************************** - * Init/Uninit etc + * Init/Uninit *******************************/ +/* some int which is not a profile number */ +#define PROFILE_UNINITIALIZE (-100) + /** * Init struct so it should match the average case */ @@ -108,7 +111,7 @@ InitVelocityData(DeviceVelocityPtr s) static void FreeVelocityData(DeviceVelocityPtr s){ xfree(s->tracker); - SetAccelerationProfile(s, -1); + SetAccelerationProfile(s, PROFILE_UNINITIALIZE); } @@ -824,6 +827,16 @@ LinearProfile( } +static float +NoProfile( + DeviceVelocityPtr pVel, + float velocity, + float threshold, + float acc) +{ + return 1.0f; +} + static PointerAccelerationProfileFunc GetAccelerationProfile( DeviceVelocityPtr s, @@ -844,8 +857,8 @@ GetAccelerationProfile( return PowerProfile; case AccelProfileLinear: return LinearProfile; - case AccelProfileReserved: - /* reserved for future use, e.g. a user-defined profile */ + case AccelProfileNone: + return NoProfile; default: return NULL; } @@ -856,8 +869,10 @@ GetAccelerationProfile( * Intended to make profiles exchangeable at runtime. * If you created a profile, give it a number here and in the header to * make it selectable. In case some profile-specific init is needed, here - * would be a good place, since FreeVelocityData() also calls this with -1. - * returns FALSE (0) if profile number is unavailable. + * would be a good place, since FreeVelocityData() also calls this with + * PROFILE_UNINITIALIZE. + * + * returns FALSE if profile number is unavailable, TRUE otherwise. */ int SetAccelerationProfile( @@ -867,7 +882,7 @@ SetAccelerationProfile( PointerAccelerationProfileFunc profile; profile = GetAccelerationProfile(s, profile_num); - if(profile == NULL && profile_num != -1) + if(profile == NULL && profile_num != PROFILE_UNINITIALIZE) return FALSE; if(s->profile_private != NULL){ @@ -955,6 +970,11 @@ acceleratePointerPredictable( if (!num_valuators || !valuators || !velocitydata) return; + if (velocitydata->statistics.profile_number == AccelProfileNone && + velocitydata->const_acceleration == 1.0f) { + return; /*we're inactive anyway, so skip the whole thing.*/ + } + if (first_valuator == 0) { dx = valuators[0]; px = &valuators[0]; @@ -994,7 +1014,7 @@ acceleratePointerPredictable( /* Since it may not be apparent: lrintf() does not offer * strong statements about rounding; however because we * process each axis conditionally, there's no danger - * of a toggling remainder. Its lack of guarantees hopefully + * of a toggling remainder. Its lack of guarantees likely * makes it faster on the average target. */ *px = lrintf(tmp); pDev->last.remainder[0] = tmp - (float)*px; diff --git a/include/ptrveloc.h b/include/ptrveloc.h index 6ef8c754e..83d188c54 100644 --- a/include/ptrveloc.h +++ b/include/ptrveloc.h @@ -27,9 +27,9 @@ #include /* DeviceIntPtr */ -/* constants for acceleration profiles; - * see */ +/* constants for acceleration profiles */ +#define AccelProfileNone -1 #define AccelProfileClassic 0 #define AccelProfileDeviceSpecific 1 #define AccelProfilePolynomial 2 @@ -37,8 +37,7 @@ #define AccelProfileSimple 4 #define AccelProfilePower 5 #define AccelProfileLinear 6 -#define AccelProfileReserved 7 -#define AccelProfileLAST AccelProfileReserved +#define AccelProfileLAST AccelProfileLinear /* fwd */ struct _DeviceVelocityRec; From 50cc8adafca4ba3838d468278d6eb8a4692d2488 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 16:55:32 +1000 Subject: [PATCH 31/89] Xi: don't double-swap the XListDeviceProperties reply. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index d633f5141..8c6d53a5a 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -706,13 +706,6 @@ ProcXListDeviceProperties (ClientPtr client) rep.length = (numProps * sizeof(Atom)) >> 2; rep.sequenceNumber = client->sequence; rep.nAtoms = numProps; - if (client->swapped) - { - int n; - swaps (&rep.sequenceNumber, n); - swapl (&rep.length, n); - swaps (&rep.nAtoms, n); - } temppAtoms = pAtoms; for (prop = dev->properties.properties; prop; prop = prop->next) *temppAtoms++ = prop->propertyName; From 7ab5e9b97c300bba793a23fa13506b0c77c50ddf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 12:07:07 +1000 Subject: [PATCH 32/89] xfree86: fix xf86PostMotionEventP type checking We only put internal events into the queue now, so let's check for ET_Motion rather than the MotionNotify. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Xinput.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index a035fca7f..8a718618f 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -743,7 +743,7 @@ xf86PostMotionEventP(DeviceIntPtr device, int i = 0, nevents = 0; int dx = 0, dy = 0; Bool drag = xf86SendDragEvents(device); - xEvent *xE = NULL; + DeviceEvent *event; int index; int flags = 0; @@ -789,10 +789,11 @@ xf86PostMotionEventP(DeviceIntPtr device, valuators); for (i = 0; i < nevents; i++) { - xE = (xf86Events + i)->event; + event = (DeviceEvent*)((xf86Events + i)->event); /* Don't post core motion events for devices not registered to send * drag events. */ - if (xE->u.u.type != MotionNotify || drag) { + if (event->header == ET_Internal && + (event->type != ET_Motion || drag)) { mieqEnqueue(device, (InternalEvent*)((xf86Events + i)->event)); } } From 8b583ca2b21155359c6255f406c96599b277c762 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 6 May 2009 22:25:28 +1000 Subject: [PATCH 33/89] Xi: fix copy/paste error causing sizeof against wrong struct. This wrong check may cause BadLength to be returned to the client even if the length is correct. Signed-off-by: Peter Hutterer --- Xi/xiproperty.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index 8c6d53a5a..7e20e0320 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -747,7 +747,7 @@ ProcXChangeDeviceProperty (ClientPtr client) return BadValue; } len = stuff->nUnits; - if (len > ((0xffffffff - sizeof(xChangePropertyReq)) >> 2)) + if (len > ((0xffffffff - sizeof(xChangeDevicePropertyReq)) >> 2)) return BadLength; sizeInBytes = format>>3; totalSize = len * sizeInBytes; From 0e31d3906deaee5d9ada66e538b9e93574a4d610 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:07:07 +1000 Subject: [PATCH 34/89] xkb: remove some now-useless XFUNCPROTOBEGIN We bring them back if we start rewriting the server in C++, promise. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 ---- xkb/xkbgeom.h | 4 ---- 2 files changed, 8 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index df3308534..74d5f290c 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -334,8 +334,6 @@ extern _X_EXPORT int DeviceEnterNotify,DeviceLeaveNotify; #define False FALSE #endif -_XFUNCPROTOBEGIN - extern _X_EXPORT void XkbUseMsg( void ); @@ -1000,8 +998,6 @@ extern _X_EXPORT XkbDescPtr XkbCompileKeymap( XkbRMLVOSet * /* rmlvo */ ); -_XFUNCPROTOEND - #define XkbAtomGetString(s) NameForAtom(s) #endif /* _XKBSRV_H_ */ diff --git a/xkb/xkbgeom.h b/xkb/xkbgeom.h index 173affee9..fe4da3806 100644 --- a/xkb/xkbgeom.h +++ b/xkb/xkbgeom.h @@ -311,8 +311,6 @@ typedef struct _XkbGeometrySizes { unsigned short num_key_aliases; } XkbGeometrySizesRec,*XkbGeometrySizesPtr; -_XFUNCPROTOBEGIN - extern XkbPropertyPtr XkbAddGeomProperty( XkbGeometryPtr /* geom */, @@ -630,6 +628,4 @@ XkbFindOverlayForKey( char * /* under */ ); -_XFUNCPROTOEND - #endif /* _XKBGEOM_H_ */ From 5cf70183812541b33a6e83c7e1e3bc6198730cbe Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 5 May 2009 21:00:31 +1000 Subject: [PATCH 35/89] xkb: remove _XkbAlloc, _XkbCalloc, _XkbRealloc and _XkbFree We all agree that wrapping is fun, but seriously. One of these days someone will get hurt. Signed-off-by: Peter Hutterer --- include/xkbsrv.h | 4 --- xkb/XKBAlloc.c | 28 ++++++++++---------- xkb/XKBGAlloc.c | 40 ++++++++++++++-------------- xkb/XKBMAlloc.c | 68 ++++++++++++++++++++++++------------------------ xkb/XKBMisc.c | 2 +- xkb/maprules.c | 44 +++++++++++++++---------------- xkb/xkb.c | 40 ++++++++++++++-------------- xkb/xkbEvents.c | 4 +-- xkb/xkbInit.c | 34 ++++++++++++------------ xkb/xkbLEDs.c | 6 ++--- xkb/xkmread.c | 6 ++--- 11 files changed, 136 insertions(+), 140 deletions(-) diff --git a/include/xkbsrv.h b/include/xkbsrv.h index 74d5f290c..c3f64916e 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -301,15 +301,11 @@ extern _X_EXPORT pointer XkbLastRepeatEvent; extern _X_EXPORT CARD32 xkbDebugFlags; -#define _XkbAlloc(s) xalloc((s)) -#define _XkbCalloc(n,s) Xcalloc((n)*(s)) -#define _XkbRealloc(o,s) Xrealloc((o),(s)) #define _XkbTypedAlloc(t) ((t *)xalloc(sizeof(t))) #define _XkbTypedCalloc(n,t) ((t *)Xcalloc((n)*sizeof(t))) #define _XkbTypedRealloc(o,n,t) \ ((o)?(t *)Xrealloc((o),(n)*sizeof(t)):_XkbTypedCalloc(n,t)) #define _XkbClearElems(a,f,l,t) bzero(&(a)[f],((l)-(f)+1)*sizeof(t)) -#define _XkbFree(p) Xfree(p) #define _XkbLibError(c,l,d) /* Epoch fail */ #define _XkbErrCode2(a,b) ((XID)((((unsigned int)(a))<<24)|((b)&0xffffff))) diff --git a/xkb/XKBAlloc.c b/xkb/XKBAlloc.c index 559a52483..7265d83f2 100644 --- a/xkb/XKBAlloc.c +++ b/xkb/XKBAlloc.c @@ -58,7 +58,7 @@ XkbSymInterpretRec *prev_interpret; compat->sym_interpret= _XkbTypedRealloc(compat->sym_interpret, nSI,XkbSymInterpretRec); if (compat->sym_interpret==NULL) { - _XkbFree(prev_interpret); + xfree(prev_interpret); compat->size_si= compat->num_si= 0; return BadAlloc; } @@ -74,7 +74,7 @@ XkbSymInterpretRec *prev_interpret; if (nSI>0) { compat->sym_interpret= _XkbTypedCalloc(nSI,XkbSymInterpretRec); if (!compat->sym_interpret) { - _XkbFree(compat); + xfree(compat); return BadAlloc; } } @@ -100,12 +100,12 @@ register XkbCompatMapPtr compat; bzero((char *)&compat->groups[0],XkbNumKbdGroups*sizeof(XkbModsRec)); if (which&XkbSymInterpMask) { if ((compat->sym_interpret)&&(compat->size_si>0)) - _XkbFree(compat->sym_interpret); + xfree(compat->sym_interpret); compat->size_si= compat->num_si= 0; compat->sym_interpret= NULL; } if (freeMap) { - _XkbFree(compat); + xfree(compat); xkb->compat= NULL; } return; @@ -161,7 +161,7 @@ XkbNamesPtr names; _XkbClearElems(names->key_aliases,names->num_key_aliases, nTotalAliases-1,XkbKeyAliasRec); } else { - _XkbFree(prev_aliases); + xfree(prev_aliases); } } if (names->key_aliases==NULL) { @@ -183,7 +183,7 @@ XkbNamesPtr names; _XkbClearElems(names->radio_groups,names->num_rg,nTotalRG-1, Atom); } else { - _XkbFree(prev_radio_groups); + xfree(prev_radio_groups); } } if (names->radio_groups==NULL) @@ -211,29 +211,29 @@ XkbNamesPtr names; type= map->types; for (i=0;inum_types;i++,type++) { if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } } if ((which&XkbKeyNamesMask)&&(names->keys!=NULL)) { - _XkbFree(names->keys); + xfree(names->keys); names->keys= NULL; names->num_keys= 0; } if ((which&XkbKeyAliasesMask)&&(names->key_aliases)){ - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases=NULL; names->num_key_aliases=0; } if ((which&XkbRGNamesMask)&&(names->radio_groups)) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } if (freeMap) { - _XkbFree(names); + xfree(names); xkb->names= NULL; } return; @@ -261,7 +261,7 @@ static void XkbFreeControls(XkbDescPtr xkb,unsigned which,Bool freeMap) { if (freeMap && (xkb!=NULL) && (xkb->ctrls!=NULL)) { - _XkbFree(xkb->ctrls); + xfree(xkb->ctrls); xkb->ctrls= NULL; } return; @@ -286,7 +286,7 @@ static void XkbFreeIndicatorMaps(XkbDescPtr xkb) { if ((xkb!=NULL)&&(xkb->indicators!=NULL)) { - _XkbFree(xkb->indicators); + xfree(xkb->indicators); xkb->indicators= NULL; } return; @@ -330,6 +330,6 @@ XkbFreeKeyboard(XkbDescPtr xkb,unsigned which,Bool freeAll) if (which&XkbControlsMask) XkbFreeControls(xkb,XkbAllControlsMask,True); if (freeAll) - _XkbFree(xkb); + xfree(xkb); return; } diff --git a/xkb/XKBGAlloc.c b/xkb/XKBGAlloc.c index 9561a3df8..752b11a94 100644 --- a/xkb/XKBGAlloc.c +++ b/xkb/XKBGAlloc.c @@ -51,7 +51,7 @@ _XkbFreeGeomLeafElems( Bool freeAll, if ((freeAll)||(*elems==NULL)) { *num_inout= *sz_inout= 0; if (*elems!=NULL) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } return; @@ -115,7 +115,7 @@ register char *ptr; if (freeAll) { (*num_inout)= (*sz_inout)= 0; if (*elems) { - _XkbFree(*elems); + xfree(*elems); *elems= NULL; } } @@ -138,11 +138,11 @@ _XkbClearProperty(char *prop_in) XkbPropertyPtr prop= (XkbPropertyPtr)prop_in; if (prop->name) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; } if (prop->value) { - _XkbFree(prop->value); + xfree(prop->value); prop->value= NULL; } return; @@ -184,7 +184,7 @@ _XkbClearColor(char *color_in) XkbColorPtr color= (XkbColorPtr)color_in; if (color->spec) - _XkbFree(color->spec); + xfree(color->spec); return; } @@ -381,11 +381,11 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbTextDoodad: { if (doodad->text.text!=NULL) { - _XkbFree(doodad->text.text); + xfree(doodad->text.text); doodad->text.text= NULL; } if (doodad->text.font!=NULL) { - _XkbFree(doodad->text.font); + xfree(doodad->text.font); doodad->text.font= NULL; } } @@ -393,7 +393,7 @@ XkbDoodadPtr doodad= (XkbDoodadPtr)doodad_in; case XkbLogoDoodad: { if (doodad->logo.logo_name!=NULL) { - _XkbFree(doodad->logo.logo_name); + xfree(doodad->logo.logo_name); doodad->logo.logo_name= NULL; } } @@ -413,7 +413,7 @@ register XkbDoodadPtr doodad; _XkbClearDoodad((char *)doodad); } if (freeAll) - _XkbFree(doodads); + xfree(doodads); } return; } @@ -442,10 +442,10 @@ XkbFreeGeometry(XkbGeometryPtr geom,unsigned which,Bool freeMap) XkbFreeGeomKeyAliases(geom,0,geom->num_key_aliases,True); if (freeMap) { if (geom->label_font!=NULL) { - _XkbFree(geom->label_font); + xfree(geom->label_font); geom->label_font= NULL; } - _XkbFree(geom); + xfree(geom); } return; } @@ -469,8 +469,8 @@ _XkbGeomAlloc( void ** old, *total= (*num)+num_new; if ((*old)!=NULL) - (*old)= _XkbRealloc((*old),(*total)*sz_elem); - else (*old)= _XkbCalloc((*total),sz_elem); + (*old)= xrealloc((*old),(*total)*sz_elem); + else (*old)= xcalloc((*total),sz_elem); if ((*old)==NULL) { *total= *num= 0; return BadAlloc; @@ -664,8 +664,8 @@ register XkbPropertyPtr prop; for (i=0,prop=geom->properties;inum_properties;i++,prop++) { if ((prop->name)&&(strcmp(name,prop->name)==0)) { if (prop->value) - _XkbFree(prop->value); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + xfree(prop->value); + prop->value= xalloc(strlen(value)+1); if (prop->value) strcpy(prop->value,value); return prop; @@ -676,13 +676,13 @@ register XkbPropertyPtr prop; return NULL; } prop= &geom->properties[geom->num_properties]; - prop->name= (char *)_XkbAlloc(strlen(name)+1); + prop->name= xalloc(strlen(name)+1); if (!name) return NULL; strcpy(prop->name,name); - prop->value= (char *)_XkbAlloc(strlen(value)+1); + prop->value= xalloc(strlen(value)+1); if (!value) { - _XkbFree(prop->name); + xfree(prop->name); prop->name= NULL; return NULL; } @@ -738,7 +738,7 @@ register XkbColorPtr color; } color= &geom->colors[geom->num_colors]; color->pixel= pixel; - color->spec= (char *)_XkbAlloc(strlen(spec)+1); + color->spec= xalloc(strlen(spec)+1); if (!color->spec) return NULL; strcpy(color->spec,spec); @@ -852,7 +852,7 @@ XkbSectionPtr section; return NULL; if ((sz_doodads>0)&&(_XkbAllocDoodads(section,sz_doodads)!=Success)) { if (section->rows) { - _XkbFree(section->rows); + xfree(section->rows); section->rows= NULL; section->sz_rows= section->num_rows= 0; } diff --git a/xkb/XKBMAlloc.c b/xkb/XKBMAlloc.c index de8ee29fa..728c0297b 100644 --- a/xkb/XKBMAlloc.c +++ b/xkb/XKBMAlloc.c @@ -79,7 +79,7 @@ XkbClientMapPtr map; map->types= _XkbTypedRealloc(map->types,nTotalTypes,XkbKeyTypeRec); if (map->types==NULL) { - _XkbFree(prev_types); + xfree(prev_types); map->num_types= map->size_types= 0; return BadAlloc; } @@ -172,7 +172,7 @@ XkbServerMapPtr map; need= map->num_acts+nNewActions; map->acts= _XkbTypedRealloc(map->acts,need,XkbAction); if (map->acts==NULL) { - _XkbFree(prev_acts); + xfree(prev_acts); map->num_acts= map->size_acts= 0; return BadAlloc; } @@ -222,15 +222,15 @@ XkbCopyKeyType(XkbKeyTypePtr from,XkbKeyTypePtr into) if ((!from)||(!into)) return BadMatch; if (into->map) { - _XkbFree(into->map); + xfree(into->map); into->map= NULL; } if (into->preserve) { - _XkbFree(into->preserve); + xfree(into->preserve); into->preserve= NULL; } if (into->level_names) { - _XkbFree(into->level_names); + xfree(into->level_names); into->level_names= NULL; } *into= *from; @@ -299,10 +299,10 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type= &xkb->map->types[type_ndx]; if (map_count==0) { if (type->map!=NULL) - _XkbFree(type->map); + xfree(type->map); type->map= NULL; if (type->preserve!=NULL) - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; type->map_count= 0; } @@ -313,7 +313,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->map=_XkbTypedRealloc(type->map,map_count,XkbKTMapEntryRec); if (!type->map) { if (prev_map) - _XkbFree(prev_map); + xfree(prev_map); return BadAlloc; } if (want_preserve) { @@ -325,12 +325,12 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } if (!type->preserve) { if (prev_preserve) - _XkbFree(prev_preserve); + xfree(prev_preserve); return BadAlloc; } } else if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= map_count; @@ -342,7 +342,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; type->level_names=_XkbTypedRealloc(type->level_names,new_num_lvls,Atom); if (!type->level_names) { if (prev_level_names) - _XkbFree(prev_level_names); + xfree(prev_level_names); return BadAlloc; } } @@ -422,7 +422,7 @@ KeyCode matchingKeys[XkbMaxKeyCount],nMatchingKeys; } } type->num_levels= new_num_lvls; - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms= newSyms; xkb->map->num_syms= nSyms; return Success; @@ -518,7 +518,7 @@ KeySym *newSyms; xkb->map->key_sym_map[i].offset = nSyms; nSyms+= nKeySyms; } - _XkbFree(xkb->map->syms); + xfree(xkb->map->syms); xkb->map->syms = newSyms; xkb->map->num_syms = nSyms; return &xkb->map->syms[xkb->map->key_sym_map[key].offset]; @@ -640,7 +640,7 @@ int tmp; xkb->map->key_sym_map= _XkbTypedRealloc(xkb->map->key_sym_map, (maxKC+1),XkbSymMapRec); if (!xkb->map->key_sym_map) { - _XkbFree(prev_key_sym_map); + xfree(prev_key_sym_map); return BadAlloc; } bzero((char *)&xkb->map->key_sym_map[xkb->max_key_code], @@ -658,7 +658,7 @@ int tmp; xkb->map->modmap= _XkbTypedRealloc(xkb->map->modmap, (maxKC+1),unsigned char); if (!xkb->map->modmap) { - _XkbFree(prev_modmap); + xfree(prev_modmap); return BadAlloc; } bzero((char *)&xkb->map->modmap[xkb->max_key_code],tmp); @@ -677,7 +677,7 @@ int tmp; xkb->server->behaviors=_XkbTypedRealloc(xkb->server->behaviors, (maxKC+1),XkbBehavior); if (!xkb->server->behaviors) { - _XkbFree(prev_behaviors); + xfree(prev_behaviors); return BadAlloc; } bzero((char *)&xkb->server->behaviors[xkb->max_key_code], @@ -695,7 +695,7 @@ int tmp; xkb->server->key_acts= _XkbTypedRealloc(xkb->server->key_acts, (maxKC+1),unsigned short); if (!xkb->server->key_acts) { - _XkbFree(prev_key_acts); + xfree(prev_key_acts); return BadAlloc; } bzero((char *)&xkb->server->key_acts[xkb->max_key_code], @@ -713,7 +713,7 @@ int tmp; xkb->server->vmodmap= _XkbTypedRealloc(xkb->server->vmodmap, (maxKC+1),unsigned short); if (!xkb->server->vmodmap) { - _XkbFree(prev_vmodmap); + xfree(prev_vmodmap); return BadAlloc; } bzero((char *)&xkb->server->vmodmap[xkb->max_key_code], @@ -732,7 +732,7 @@ int tmp; xkb->names->keys= _XkbTypedRealloc(xkb->names->keys, (maxKC+1),XkbKeyNameRec); if (!xkb->names->keys) { - _XkbFree(prev_keys); + xfree(prev_keys); return BadAlloc; } bzero((char *)&xkb->names->keys[xkb->max_key_code], @@ -793,7 +793,7 @@ XkbAction *newActs; xkb->server->key_acts[i]= nActs; nActs+= nKeyActs; } - _XkbFree(xkb->server->acts); + xfree(xkb->server->acts); xkb->server->acts = newActs; xkb->server->num_acts= nActs; return &xkb->server->acts[xkb->server->key_acts[key]]; @@ -816,42 +816,42 @@ XkbClientMapPtr map; XkbKeyTypePtr type; for (i=0,type=map->types;inum_types;i++,type++) { if (type->map!=NULL) { - _XkbFree(type->map); + xfree(type->map); type->map= NULL; } if (type->preserve!=NULL) { - _XkbFree(type->preserve); + xfree(type->preserve); type->preserve= NULL; } type->map_count= 0; if (type->level_names!=NULL) { - _XkbFree(type->level_names); + xfree(type->level_names); type->level_names= NULL; } } } - _XkbFree(map->types); + xfree(map->types); map->num_types= map->size_types= 0; map->types= NULL; } } if (what&XkbKeySymsMask) { if (map->key_sym_map!=NULL) { - _XkbFree(map->key_sym_map); + xfree(map->key_sym_map); map->key_sym_map= NULL; } if (map->syms!=NULL) { - _XkbFree(map->syms); + xfree(map->syms); map->size_syms= map->num_syms= 0; map->syms= NULL; } } if ((what&XkbModifierMapMask)&&(map->modmap!=NULL)) { - _XkbFree(map->modmap); + xfree(map->modmap); map->modmap= NULL; } if (freeMap) { - _XkbFree(xkb->map); + xfree(xkb->map); xkb->map= NULL; } return; @@ -868,31 +868,31 @@ XkbServerMapPtr map; what= XkbAllServerInfoMask; map= xkb->server; if ((what&XkbExplicitComponentsMask)&&(map->explicit!=NULL)) { - _XkbFree(map->explicit); + xfree(map->explicit); map->explicit= NULL; } if (what&XkbKeyActionsMask) { if (map->key_acts!=NULL) { - _XkbFree(map->key_acts); + xfree(map->key_acts); map->key_acts= NULL; } if (map->acts!=NULL) { - _XkbFree(map->acts); + xfree(map->acts); map->num_acts= map->size_acts= 0; map->acts= NULL; } } if ((what&XkbKeyBehaviorsMask)&&(map->behaviors!=NULL)) { - _XkbFree(map->behaviors); + xfree(map->behaviors); map->behaviors= NULL; } if ((what&XkbVirtualModMapMask)&&(map->vmodmap!=NULL)) { - _XkbFree(map->vmodmap); + xfree(map->vmodmap); map->vmodmap= NULL; } if (freeMap) { - _XkbFree(xkb->server); + xfree(xkb->server); xkb->server= NULL; } return; diff --git a/xkb/XKBMisc.c b/xkb/XKBMisc.c index 82d37d19f..9cb7061f3 100644 --- a/xkb/XKBMisc.c +++ b/xkb/XKBMisc.c @@ -507,7 +507,7 @@ unsigned changed,tmp; mc->changed|= changed; } if (interps!=ibuf) - _XkbFree(interps); + xfree(interps); return True; } diff --git a/xkb/maprules.c b/xkb/maprules.c index a0141a3d1..168c5277f 100644 --- a/xkb/maprules.c +++ b/xkb/maprules.c @@ -78,7 +78,7 @@ static void FreeInputLine(InputLine *line) { if (line->line!=line->buf) - _XkbFree(line->line); + xfree(line->line); line->line_num= 1; line->num_line= 0; line->sz_line= DFLT_LINE_SIZE; @@ -91,11 +91,11 @@ InputLineAddChar(InputLine *line,int ch) { if (line->num_line>=line->sz_line) { if (line->line==line->buf) { - line->line= (char *)_XkbAlloc(line->sz_line*2); + line->line= xalloc(line->sz_line*2); memcpy(line->line,line->buf,line->sz_line); } else { - line->line=(char *)_XkbRealloc((char *)line->line,line->sz_line*2); + line->line= xrealloc((char *)line->line,line->sz_line*2); } line->sz_line*= 2; } @@ -553,9 +553,9 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs) static void FreeMultiDefs(XkbRF_MultiDefsPtr defs) { - if (defs->options) _XkbFree(defs->options); - if (defs->layout[1]) _XkbFree(defs->layout[1]); - if (defs->variant[1]) _XkbFree(defs->variant[1]); + if (defs->options) xfree(defs->options); + if (defs->layout[1]) xfree(defs->layout[1]); + if (defs->variant[1]) xfree(defs->variant[1]); } static void @@ -769,7 +769,7 @@ int len, ndx; } str= index(&str[0],'%'); } - name= (char *)_XkbAlloc(len+1); + name= xalloc(len+1); str= orig; outstr= name; while (*str!='\0') { @@ -819,7 +819,7 @@ int len, ndx; } *outstr++= '\0'; if (orig!=name) - _XkbFree(orig); + xfree(orig); return name; } @@ -988,32 +988,32 @@ XkbRF_GroupPtr group; return; if (rules->rules) { for (i=0,rule=rules->rules;inum_rules;i++,rule++) { - if (rule->model) _XkbFree(rule->model); - if (rule->layout) _XkbFree(rule->layout); - if (rule->variant) _XkbFree(rule->variant); - if (rule->option) _XkbFree(rule->option); - if (rule->keycodes) _XkbFree(rule->keycodes); - if (rule->symbols) _XkbFree(rule->symbols); - if (rule->types) _XkbFree(rule->types); - if (rule->compat) _XkbFree(rule->compat); - if (rule->geometry) _XkbFree(rule->geometry); + if (rule->model) xfree(rule->model); + if (rule->layout) xfree(rule->layout); + if (rule->variant) xfree(rule->variant); + if (rule->option) xfree(rule->option); + if (rule->keycodes) xfree(rule->keycodes); + if (rule->symbols) xfree(rule->symbols); + if (rule->types) xfree(rule->types); + if (rule->compat) xfree(rule->compat); + if (rule->geometry) xfree(rule->geometry); bzero((char *)rule,sizeof(XkbRF_RuleRec)); } - _XkbFree(rules->rules); + xfree(rules->rules); rules->num_rules= rules->sz_rules= 0; rules->rules= NULL; } if (rules->groups) { for (i=0, group=rules->groups;inum_groups;i++,group++) { - if (group->name) _XkbFree(group->name); - if (group->words) _XkbFree(group->words); + if (group->name) xfree(group->name); + if (group->words) xfree(group->words); } - _XkbFree(rules->groups); + xfree(rules->groups); rules->num_groups= 0; rules->groups= NULL; } if (freeRules) - _XkbFree(rules); + xfree(rules); return; } diff --git a/xkb/xkb.c b/xkb/xkb.c index b2fe11cae..445c55ffd 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1363,7 +1363,7 @@ unsigned i,len; char *desc,*start; len= (rep->length*4)-(SIZEOF(xkbGetMapReply)-SIZEOF(xGenericReply)); - start= desc= (char *)xcalloc(1, len); + start= desc= xcalloc(1, len); if (!start) return BadAlloc; if ( rep->nTypes>0 ) @@ -2184,8 +2184,8 @@ unsigned first,last; if (maxRG>(int)xkbi->nRadioGroups) { int sz = maxRG*sizeof(XkbRadioGroupRec); if (xkbi->radioGroups) - xkbi->radioGroups=(XkbRadioGroupPtr)_XkbRealloc(xkbi->radioGroups,sz); - else xkbi->radioGroups= (XkbRadioGroupPtr)_XkbCalloc(1, sz); + xkbi->radioGroups= xrealloc(xkbi->radioGroups,sz); + else xkbi->radioGroups= xcalloc(1, sz); if (xkbi->radioGroups) { if (xkbi->nRadioGroups) bzero(&xkbi->radioGroups[xkbi->nRadioGroups], @@ -2627,7 +2627,7 @@ int size; size= rep->length*4; if (size>0) { - data = (char *)xalloc(size); + data = xalloc(size); if (data) { register unsigned i,bit; xkbModsWireDesc * grp; @@ -2994,7 +2994,7 @@ register unsigned bit; length = rep->length*4; if (length>0) { CARD8 *to; - to= map= (CARD8 *)xalloc(length); + to= map= xalloc(length); if (map) { xkbIndicatorMapWireDesc *wire = (xkbIndicatorMapWireDesc *)to; for (i=0,bit=1;iindicators,n); } - start = desc = (char *)xalloc(length); + start = desc = xalloc(length); if ( !start ) return BadAlloc; if (xkb->names) { @@ -4116,7 +4116,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nKeyAliases*2; } else if (names->key_aliases!=NULL) { - _XkbFree(names->key_aliases); + xfree(names->key_aliases); names->key_aliases= NULL; names->num_key_aliases= 0; } @@ -4135,7 +4135,7 @@ _XkbSetNames(ClientPtr client, DeviceIntPtr dev, xkbSetNamesReq *stuff) tmp+= stuff->nRadioGroups; } else if (names->radio_groups) { - _XkbFree(names->radio_groups); + xfree(names->radio_groups); names->radio_groups= NULL; names->num_rg= 0; } @@ -4735,7 +4735,7 @@ XkbSendGeometry( ClientPtr client, if (geom!=NULL) { len= rep->length*4; - start= desc= (char *)xalloc(len); + start= desc= xalloc(len); if (!start) return BadAlloc; desc= XkbWriteCountedString(desc,geom->label_font,client->swapped); @@ -4829,7 +4829,7 @@ CARD16 len,*plen; swaps(plen,n); } len= *plen; - str= (char *)_XkbAlloc(len+1); + str= xalloc(len+1); if (str) { memcpy(str,&wire[2],len); str[len]= '\0'; @@ -5444,7 +5444,7 @@ unsigned char *wire,*str,*tmp,*legal; wire= *pWire; len= (*(unsigned char *)wire++); if (len>0) { - str= (unsigned char *)_XkbCalloc(1, len+1); + str= xcalloc(1, len+1); if (str) { tmp= str; for (i=0;inoClientException; @@ -5869,11 +5869,11 @@ ProcXkbGetKbdByName(ClientPtr client) XkbFreeKeyboard(new,XkbAllComponentsMask,True); new= NULL; } - if (names.keycodes) { _XkbFree(names.keycodes); names.keycodes= NULL; } - if (names.types) { _XkbFree(names.types); names.types= NULL; } - if (names.compat) { _XkbFree(names.compat); names.compat= NULL; } - if (names.symbols) { _XkbFree(names.symbols); names.symbols= NULL; } - if (names.geometry) { _XkbFree(names.geometry); names.geometry= NULL; } + if (names.keycodes) { xfree(names.keycodes); names.keycodes= NULL; } + if (names.types) { xfree(names.types); names.types= NULL; } + if (names.compat) { xfree(names.compat); names.compat= NULL; } + if (names.symbols) { xfree(names.symbols); names.symbols= NULL; } + if (names.geometry) { xfree(names.geometry); names.geometry= NULL; } return client->noClientException; } @@ -6188,7 +6188,7 @@ char * str; } WriteToClient(client,SIZEOF(xkbGetDeviceInfoReply), (char *)&rep); - str= (char*) xalloc(nameLen); + str= xalloc(nameLen); if (!str) return BadAlloc; XkbWriteCountedString(str,dev->name,client->swapped); diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c index 9293c60be..489f309a4 100644 --- a/xkb/xkbEvents.c +++ b/xkb/xkbEvents.c @@ -1136,7 +1136,7 @@ ClientPtr client = NULL; autoCtrls= interest->autoCtrls; autoValues= interest->autoCtrlValues; client= interest->client; - _XkbFree(interest); + xfree(interest); found= True; } while ((!found)&&(interest->next)) { @@ -1146,7 +1146,7 @@ ClientPtr client = NULL; autoCtrls= victim->autoCtrls; autoValues= victim->autoCtrlValues; client= victim->client; - _XkbFree(victim); + xfree(victim); found= True; } interest = interest->next; diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index 7c611bcc7..bea8ce0cc 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -222,19 +222,19 @@ static void XkbSetRulesUsed(XkbRMLVOSet *rmlvo) { if (XkbRulesUsed) - _XkbFree(XkbRulesUsed); + xfree(XkbRulesUsed); XkbRulesUsed= (rmlvo->rules?_XkbDupString(rmlvo->rules):NULL); if (XkbModelUsed) - _XkbFree(XkbModelUsed); + xfree(XkbModelUsed); XkbModelUsed= (rmlvo->model?_XkbDupString(rmlvo->model):NULL); if (XkbLayoutUsed) - _XkbFree(XkbLayoutUsed); + xfree(XkbLayoutUsed); XkbLayoutUsed= (rmlvo->layout?_XkbDupString(rmlvo->layout):NULL); if (XkbVariantUsed) - _XkbFree(XkbVariantUsed); + xfree(XkbVariantUsed); XkbVariantUsed= (rmlvo->variant?_XkbDupString(rmlvo->variant):NULL); if (XkbOptionsUsed) - _XkbFree(XkbOptionsUsed); + xfree(XkbOptionsUsed); XkbOptionsUsed= (rmlvo->options?_XkbDupString(rmlvo->options):NULL); if (XkbWantRulesProp) QueueWorkProc(XkbWriteRulesProp,NULL,NULL); @@ -246,27 +246,27 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) { if (rmlvo->rules) { if (XkbRulesDflt) - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt= _XkbDupString(rmlvo->rules); } if (rmlvo->model) { if (XkbModelDflt) - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt= _XkbDupString(rmlvo->model); } if (rmlvo->layout) { if (XkbLayoutDflt) - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt= _XkbDupString(rmlvo->layout); } if (rmlvo->variant) { if (XkbVariantDflt) - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt= _XkbDupString(rmlvo->variant); } if (rmlvo->options) { if (XkbOptionsDflt) - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt= _XkbDupString(rmlvo->options); } return; @@ -275,15 +275,15 @@ XkbSetRulesDflts(XkbRMLVOSet *rmlvo) void XkbDeleteRulesDflts(void) { - _XkbFree(XkbRulesDflt); + xfree(XkbRulesDflt); XkbRulesDflt = NULL; - _XkbFree(XkbModelDflt); + xfree(XkbModelDflt); XkbModelDflt = NULL; - _XkbFree(XkbLayoutDflt); + xfree(XkbLayoutDflt); XkbLayoutDflt = NULL; - _XkbFree(XkbVariantDflt); + xfree(XkbVariantDflt); XkbVariantDflt = NULL; - _XkbFree(XkbOptionsDflt); + xfree(XkbOptionsDflt); XkbOptionsDflt = NULL; XkbFreeKeyboard(xkb_cached_map, XkbAllComponentsMask, True); @@ -643,7 +643,7 @@ void XkbFreeInfo(XkbSrvInfoPtr xkbi) { if (xkbi->radioGroups) { - _XkbFree(xkbi->radioGroups); + xfree(xkbi->radioGroups); xkbi->radioGroups= NULL; } if (xkbi->mouseKeyTimer) { @@ -675,7 +675,7 @@ XkbFreeInfo(XkbSrvInfoPtr xkbi) XkbFreeKeyboard(xkbi->desc,XkbAllComponentsMask,True); xkbi->desc= NULL; } - _XkbFree(xkbi); + xfree(xkbi); return; } diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c index a70ac841d..59cdba416 100644 --- a/xkb/xkbLEDs.c +++ b/xkb/xkbLEDs.c @@ -605,12 +605,12 @@ void XkbFreeSrvLedInfo(XkbSrvLedInfoPtr sli) { if ((sli->flags&XkbSLI_IsDefault)==0) { - if (sli->maps) _XkbFree(sli->maps); - if (sli->names) _XkbFree(sli->names); + if (sli->maps) xfree(sli->maps); + if (sli->names) xfree(sli->names); } sli->maps= NULL; sli->names= NULL; - _XkbFree(sli); + xfree(sli); return; } diff --git a/xkb/xkmread.c b/xkb/xkmread.c index dc8ab612d..206c40382 100644 --- a/xkb/xkmread.c +++ b/xkb/xkmread.c @@ -57,7 +57,7 @@ char *new; if (str==NULL) return NULL; - new= (char *)_XkbCalloc(strlen(str)+1,sizeof(char)); + new= xcalloc(strlen(str)+1,sizeof(char)); if (new) strcpy(new,str); return new; @@ -73,10 +73,10 @@ int newCount= *newCountRtrn; if (oldPtr==NULL) { if (newCount==0) return NULL; - oldPtr= _XkbCalloc(newCount,elemSize); + oldPtr= xcalloc(newCount,elemSize); } else if (oldCount Date: Thu, 30 Apr 2009 18:49:06 -0700 Subject: [PATCH 36/89] Fix a couple off-by-one array boundary checks. Error: Write outside array bounds at Xext/geext.c:406 in function 'GEWindowSetMask' [Symbolic analysis] In array dereference of cli->nextSib[extension] with index 'extension' Array size is 128 elements (of 4 bytes each), index <= 128 Error: Buffer overflow at dix/events.c:592 in function 'SetMaskForEvent' [Symbolic analysis] In array dereference of filters[deviceid] with index 'deviceid' Array size is 20 elements (of 512 bytes each), index >= 0 and index <= 20 Error: Read buffer overflow at hw/xfree86/loader/loader.c:226 in function 'LoaderOpen' [Symbolic analysis] In array dereference of refCount[new_handle] with index 'new_handle' Array size is 256 elements (of 4 bytes each), index >= 1 and index <= 256 These bugs were found using the Parfait source code analysis tool. For more information see http://research.sun.com/projects/parfait Signed-off-by: Alan Coopersmith Signed-off-by: Adam Jackson Acked-by: Peter Hutterer --- Xext/geext.c | 2 +- dix/events.c | 2 +- hw/xfree86/loader/loader.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Xext/geext.c b/Xext/geext.c index a58db038e..7ab99517d 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -364,7 +364,7 @@ GEWindowSetMask(ClientPtr pClient, DeviceIntPtr pDev, extension = (extension & 0x7F); - if (extension > MAXEXTENSIONS) + if (extension >= MAXEXTENSIONS) { ErrorF("Invalid extension number.\n"); return; diff --git a/dix/events.c b/dix/events.c index be88891a4..157f9a8a1 100644 --- a/dix/events.c +++ b/dix/events.c @@ -588,7 +588,7 @@ XineramaConfineCursorToWindow(DeviceIntPtr pDev, void SetMaskForEvent(int deviceid, Mask mask, int event) { - if (deviceid < 0 || deviceid > MAXDEVICES) + if (deviceid < 0 || deviceid >= MAXDEVICES) FatalError("SetMaskForEvent: bogus device id"); filters[deviceid][event] = mask; } diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c index ab7736254..1803d0eb1 100644 --- a/hw/xfree86/loader/loader.c +++ b/hw/xfree86/loader/loader.c @@ -223,7 +223,7 @@ LoaderOpen(const char *module, const char *cname, int handle, * Find a free handle. */ new_handle = 1; - while (refCount[new_handle] && new_handle < MAX_HANDLE) + while (new_handle < MAX_HANDLE && refCount[new_handle]) new_handle++; if (new_handle == MAX_HANDLE) { From 1e816065e5ec3b9394dc1fa5815457a664e15fd9 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 8 May 2009 21:31:01 -0700 Subject: [PATCH 37/89] Don't printf NULL pointers on HAL connection error Fixes Solaris bug 6801386 Xorg core dumps on startup if hald not running http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6801386 Signed-off-by: Alan Coopersmith --- config/hal.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/config/hal.c b/config/hal.c index 36fa839fb..731d9b8fc 100644 --- a/config/hal.c +++ b/config/hal.c @@ -493,12 +493,14 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) } if (!libhal_ctx_init(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't initialise context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx; } if (!libhal_device_property_watch_all(info->hal_ctx, &error)) { LogMessage(X_ERROR, "config/hal: couldn't watch all properties: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); goto out_ctx2; } libhal_ctx_set_device_added(info->hal_ctx, device_added); @@ -518,7 +520,8 @@ connect_and_register(DBusConnection *connection, struct config_hal_info *info) out_ctx2: if (!libhal_ctx_shutdown(info->hal_ctx, &error)) LogMessage(X_WARNING, "config/hal: couldn't shut down context: %s (%s)\n", - error.name, error.message); + error.name ? error.name : "unknown error", + error.message ? error.message : "null"); out_ctx: libhal_ctx_free(info->hal_ctx); out_err: From c2b668e6fff11c52f2a3f0dc3f4d1fc2c5bcf3e6 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 5 May 2009 20:27:53 -0700 Subject: [PATCH 38/89] XQuartz: pbproxy standalone: added missing variable declarations. (cherry picked from commit 2d947d17a3ef5fb8cef959bff0eb08b8bb5b6548) --- hw/xquartz/pbproxy/app-main.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m index cb0fa5744..d4b43c6ae 100644 --- a/hw/xquartz/pbproxy/app-main.m +++ b/hw/xquartz/pbproxy/app-main.m @@ -50,6 +50,9 @@ static void signal_handler (int sig) { } int main (int argc, const char *argv[]) { + const char *s; + int i; + #ifdef DEBUG printf("pid: %u\n", getpid()); #endif From ebfd6688d1927288155221e7a78fbca9f9293952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Sun, 10 May 2009 23:27:56 -0400 Subject: [PATCH 39/89] Make compositing with transformed windows work again. The coordinate translation was broken in pretty much every way imaginable. --- fb/fbpict.c | 24 ++++++++---------------- render/mipict.c | 4 ++-- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/fb/fbpict.c b/fb/fbpict.c index 1355e9071..c89691d1b 100644 --- a/fb/fbpict.c +++ b/fb/fbpict.c @@ -159,22 +159,9 @@ fbComposite (CARD8 op, { pixman_image_t *src, *mask, *dest; - xDst += pDst->pDrawable->x; - yDst += pDst->pDrawable->y; - if (pSrc->pDrawable) - { - xSrc += pSrc->pDrawable->x; - ySrc += pSrc->pDrawable->y; - } - if (pMask && pMask->pDrawable) - { - xMask += pMask->pDrawable->x; - yMask += pMask->pDrawable->y; - } - - miCompositeSourceValidate (pSrc, xSrc, ySrc, width, height); + miCompositeSourceValidate (pSrc, xSrc - xDst, ySrc - yDst, width, height); if (pMask) - miCompositeSourceValidate (pMask, xMask, yMask, width, height); + miCompositeSourceValidate (pMask, xMask - xDst, yMask - yDst, width, height); src = image_from_pict (pSrc, TRUE); mask = image_from_pict (pMask, TRUE); @@ -292,7 +279,8 @@ create_bits_picture (PicturePtr pict, fbGetDrawable (pict->pDrawable, bits, stride, bpp, xoff, yoff); - bits = (FbBits*)((CARD8*)bits + yoff * stride * sizeof(FbBits) + xoff * (bpp / 8)); + bits = (FbBits*)((CARD8*)bits + + pict->pDrawable->y * stride * sizeof(FbBits) + pict->pDrawable->x * (bpp / 8)); image = pixman_image_create_bits ( pict->format, @@ -321,8 +309,12 @@ create_bits_picture (PicturePtr pict, { if (pict->clientClipType != CT_NONE) pixman_image_set_has_client_clip (image, TRUE); + + pixman_region_translate (pict->pCompositeClip, - pict->pDrawable->x, - pict->pDrawable->y); pixman_image_set_clip_region (image, pict->pCompositeClip); + + pixman_region_translate (pict->pCompositeClip, pict->pDrawable->x, pict->pDrawable->y); } /* Indexed table */ diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..c653ec4f5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -358,8 +358,6 @@ miCompositeSourceValidate (PicturePtr pPicture, if (pScreen->SourceValidate) { - x -= pPicture->pDrawable->x; - y -= pPicture->pDrawable->y; if (pPicture->transform) { xPoint points[4]; @@ -394,6 +392,8 @@ miCompositeSourceValidate (PicturePtr pPicture, width = xmax - xmin; height = ymax - ymin; } + x += pPicture->pDrawable->x; + y += pPicture->pDrawable->y; (*pScreen->SourceValidate) (pDrawable, x, y, width, height); } } From ac13145dbcb284293582435409d8a90f276785c5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 15:45:46 +1000 Subject: [PATCH 40/89] xkb: if kbd init failed, NULL out the pointers after freeing them (#21278) Reproducible: Configure a server that uses the keyboard driver with an invalid ruleset, e.g. (Option "XkbRules" "foobar"). Ensure that Option "AllowEmptyInput" is "off" in the ServerFlags or ServerLayout section. Start the server. After failing to init the keymap, the server will try to clean up after the device, double-freeing some xkb structs that have not been reset properly. X.Org Bug 21278 Signed-off-by: Peter Hutterer --- xkb/xkbInit.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xkb/xkbInit.c b/xkb/xkbInit.c index bea8ce0cc..e707f7ad3 100644 --- a/xkb/xkbInit.c +++ b/xkb/xkbInit.c @@ -622,10 +622,13 @@ unwind_desc: XkbFreeKeyboard(xkb, 0, TRUE); unwind_info: xfree(xkbi); + dev->key->xkbInfo = NULL; unwind_kbdfeed: xfree(dev->kbdfeed); + dev->kbdfeed = NULL; unwind_key: xfree(dev->key); + dev->key = NULL; return FALSE; } From 0952d12717031e9dda9e48123bb922d0f4e81834 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Mon, 11 May 2009 15:27:46 -0400 Subject: [PATCH 41/89] xselinux: Relax ownership restriction on SetSelectionUseContext. Instead, clients should keep track of the selection instances they use. --- Xext/xselinux.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Xext/xselinux.c b/Xext/xselinux.c index 2c7262140..3a6f0960d 100644 --- a/Xext/xselinux.c +++ b/Xext/xselinux.c @@ -1346,15 +1346,6 @@ ProcSELinuxSetCreateContext(ClientPtr client, unsigned offset) goto out; privPtr = &serverClient->devPrivates; } - else if (offset == USE_SEL) { - /* Selection use context currently requires no selections owned */ - Selection *pSel; - for (pSel = CurrentSelections; pSel; pSel = pSel->next) - if (pSel->client == client) { - rc = BadMatch; - goto out; - } - } ptr = dixLookupPrivate(privPtr, subjectKey); pSid = (security_id_t *)(ptr + offset); From f250eea2e90fc50bec5214c2f41132b95edc2c46 Mon Sep 17 00:00:00 2001 From: Jerome Glisse Date: Mon, 11 May 2009 22:52:46 +0200 Subject: [PATCH 42/89] DRI2: update DRI2 private drawable width & height according to X drawable --- hw/xfree86/dri2/dri2.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 1d49d7c65..385c5e8d4 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -257,6 +257,8 @@ do_get_buffers(DrawablePtr pDraw, int *width, int *height, pPriv->buffers = buffers; pPriv->bufferCount = *out_count; + pPriv->width = pDraw->width; + pPriv->height = pDraw->height; *width = pPriv->width; *height = pPriv->height; From b746a00cffca5c553b607a8e9c1074294a23b443 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 16:11:01 -0700 Subject: [PATCH 43/89] Resync COPYING file with notices in code base as of xorg-server-1.6.1 Remove notices for code no longer in tree (Xprint, Xgl, kdrive, cfb, etc.) Add/update notices for new/changed code in tree Signed-off-by: Alan Coopersmith --- COPYING | 793 ++++++++------------------------------------------------ 1 file changed, 111 insertions(+), 682 deletions(-) diff --git a/COPYING b/COPYING index 6faa4b196..f92d653d9 100644 --- a/COPYING +++ b/COPYING @@ -7,10 +7,12 @@ Juliusz Chroboczek sorts before Intel Corporation sorts before Daniel Stone). Copyright © 2000-2001 Juliusz Chroboczek +Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer Copyright © 1999 Keith Packard +Copyright © 2007-2008 Red Hat, Inc. Copyright © 2005-2007 Daniel Stone Copyright © 2006-2008 Simon Thum Copyright © 2006 Luc Verhaegen @@ -88,30 +90,6 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2005 Kean Johnston -Copyright 1999 by The XFree86 Project, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of The XFree86 Project, Inc -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -The XFree86 Project, Inc and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THE XFREE86 PROJECT, INC AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELL, DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - Copyright 1985-1998, 2001 The Open Group Copyright 2002 Red Hat Inc., Durham, North Carolina. @@ -161,6 +139,7 @@ in this Software without prior written authorization from the X Consortium. Copyright © 1999-2000 SuSE, Inc. +Copyright © 2007 Red Hat, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that @@ -180,28 +159,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2005 Novell, Inc. - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -Novell, Inc. not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Novell, Inc. makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -NOVELL, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL NOVELL, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. All Rights Reserved @@ -228,32 +185,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987 by Sun Microsystems, Inc. Mountain View, CA. -All Rights Reserved - -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright no- -tice appear in all copies and that both that copyright no- -tice and this permission notice appear in supporting docu- -mentation, and that the names of Sun or The Open Group -not be used in advertising or publicity pertaining to -distribution of the software without specific prior -written permission. Sun and The Open Group make no -representations about the suitability of this software for -any purpose. It is provided "as is" without any express or -implied warranty. - -SUN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT- -NESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SUN BE LI- -ABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Sun Microsystems Permission to use, copy, modify, distribute, and sell this software and its @@ -321,26 +252,6 @@ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1987-1992 by Digital Equipment Corp., Maynard, MA -X11R6 Changes Copyright (c) 1994 by Robert Chesler of Absol-Puter, Hudson, NH. - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Digital not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -DIGITAL AND ABSOL-PUTER DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL DIGITAL OR ABSOL-PUTER BE LIABLE FOR ANY -SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1997 Digital Equipment Corporation. All rights reserved. @@ -545,7 +456,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2005 Red Hat, Inc. +Copyright © 2008 Red Hat, Inc. +Partly based on code Copyright © 2000 SuSE, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -558,14 +470,31 @@ Hat makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -RED HAT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +Red Hat DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT BE LIABLE FOR ANY SPECIAL, INDIRECT OR +NO EVENT SHALL Red Hat BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of SuSE not be used in advertising or +publicity pertaining to distribution of the software without specific, +written prior permission. SuSE makes no representations about the +suitability of this software for any purpose. It is provided "as is" +without express or implied warranty. + +SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE +BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION +OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + Copyright (c) 2006, Red Hat, Inc. @@ -590,7 +519,7 @@ used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Red Hat. -Copyright © 2006 Red Hat, Inc +Copyright © 2006, 2007 Red Hat, Inc Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without @@ -693,26 +622,6 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright IBM Corporation 1987,1988,1989 -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of IBM not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - (C) Copyright IBM Corporation 2003 All Rights Reserved. @@ -931,29 +840,6 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Intel Corporation. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL INTEL, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR -THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2004 Nokia Permission to use, copy, modify, distribute, and sell this software and its @@ -975,30 +861,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1998-2003 VIA Technologies, Inc. -Copyright 2001-2003 S3 Graphics, Inc. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sub license, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - (c)Copyright 1988,1991 Adobe Systems Incorporated. All rights reserved. @@ -1106,60 +968,26 @@ Copyright © 1999 Keith Packard Copyright © 2000 Compaq Computer Corporation Copyright © 2002 MontaVista Software Inc. Copyright © 2005 OpenedHand Ltd. +Copyright © 2006 Nokia Corporation Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the name of Keith Packard or Compaq not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard and Compaq makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. +documentation, and that the name of the authors and/or copyright holders +not be used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. The authors and/or +copyright holders make no representations about the suitability of this +software for any purpose. It is provided "as is" without express or +implied warranty. -KEITH PACKARD AND COMPAQ DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Michael Taht or MontaVista not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Michael Taht and Montavista make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MICHAEL TAHT AND MONTAVISTA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Matthew Allum or OpenedHand not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Matthew Allum and OpenedHand make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -MATTHEW ALLUM AND OPENEDHAND DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL EITHER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. +THE AUTHORS AND/OR COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD +TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS, IN NO EVENT SHALL THE AUTHORS AND/OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright 1993 by Davor Matic @@ -1173,31 +1001,6 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -(c) Copyright 1996 by Sebastien Marineau - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -HOLGER VEIT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name of Sebastien Marineau shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Sebastien Marineau. - - Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. @@ -1270,29 +1073,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell and David Dawes -not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Thomas Roell and -David Dawes makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -THOMAS ROELL AND DAVID DAWES DISCLAIMS ALL WARRANTIES WITH REGARD TO -THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS, IN NO EVENT SHALL THOMAS ROELL OR DAVID DAWES BE LIABLE FOR -ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF -CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright 1990,91,92,93 by Thomas Roell, Germany. Copyright 1991,92,93 by SGCS (Snitily Graphics Consulting Services), USA. @@ -1316,124 +1096,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Wexelblat -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Wexelblat and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID WEXELBLAT AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright 2001-2005 by Kean Johnston -Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany -Copyright 1993 by David Dawes -Copyright 1993 by David Wexelblat - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the names of Thomas Roell, David Dawes -and Kean Johnston not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -Thomas Roell, David Dawes and Kean Johnston make no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS ROELL, DAVID DAWES AND KEAN JOHNSTON DISCLAIM ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THOMAS ROELLm DAVID WEXELBLAT -OR KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR -PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -Copyright (c) 2001-2003 Torrey T. Lyons. -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -TORREY T. LYONS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name(s) of the above copyright -holders shall not be used in advertising or otherwise to promote the sale, -use or other dealings in this Software without prior written authorization. - - -Copyright © 2004 David Reveman - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of -David Reveman not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior permission. -David Reveman makes no representations about the suitability of this -software for any purpose. It is provided "as is" without express or -implied warranty. - -DAVID REVEMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL DAVID REVEMAN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright 1993 Gerrit Jan Akkerman - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of Gerrit Jan Akkerman not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -GERRIT JAN AKKERMAN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, -IN NO EVENT SHALL GERRIT JAN AKKERMAN BE LIABLE FOR ANY SPECIAL, INDIRECT -OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1998 by Alan Hourihane, Wigan, England. Copyright 2000-2002 by Alan Hourihane, Flint Mountain, North Wales. @@ -1504,27 +1166,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1993 by Thomas Mueller - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Thomas Mueller not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Thomas Mueller makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -THOMAS MUELLER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THOMAS MUELLER BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 2004, Egbert Eich Permission is hereby granted, free of charge, to any person obtaining a copy @@ -1662,27 +1303,6 @@ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright 2001,2005 by Kean Johnston - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name Kean Johnston not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Kean Johnston makes no -representations about the suitability of this software for any purpose. -It is provided "as is" without express or implied warranty. - -KEAN JOHNSTON DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL KEAN JOHNSTON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF -USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat @@ -1729,69 +1349,6 @@ CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2004 Franco Catrin - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Franco Catrin not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Franco Catrin makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -FRANCO CATRIN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL FRANCO CATRIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Ralph Thomas - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Ralph Thomas not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Ralph Thomas makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -RALPH THOMAS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL RALPH THOMAS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -Copyright © 2004 Damien Ciabrini - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Anders Carlsson not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Anders Carlsson makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -DAMIEN CIABRINI DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL ANDERS CARLSSON BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2003-2004 Anders Carlsson Permission to use, copy, modify, distribute, and sell this software and its @@ -1836,31 +1393,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2000 Silicon Integrated Systems Corp, Inc., HsinChu, Taiwan. -Copyright 2003 Eric Anholt -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -ERIC ANHOLT OR SILICON INTEGRATED SYSTEMS CORP BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2004 PillowElephantBadgerBankPond Permission to use, copy, modify, distribute, and sell this software and its @@ -1882,27 +1414,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 2004 by Costas Stylianou +44(0)7850 394095 - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Costas Sylianou not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Costas Stylianou makes no representations -about the suitability of this software for any purpose. It is provided -"as is" without express or implied warranty. - -COSTAS STYLIANOU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL COSTAS STYLIANOU BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright (c) 1998 Todd C. Miller Permission to use, copy, modify, and distribute this software for any @@ -1918,32 +1429,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1995 Pascal Haible. All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -PASCAL HAIBLE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF -OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Except as contained in this notice, the name of Pascal Haible shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from -Pascal Haible. - - Copyright © 2003-2004 Philip Blundell Permission to use, copy, modify, distribute, and sell this software and its @@ -2005,16 +1490,19 @@ Copyright © 2004, 2005 Red Hat, Inc. Copyright © 2004 Nicholas Miell Copyright © 2005 Trolltech AS Copyright © 2006 Intel Corporation +Copyright © 2006-2007 Keith Packard +Copyright © 2008 Red Hat, Inc +Copyright © 2008 George Sapountzis Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Red Hat not be used in advertising or +the above copyright notice appear in all copies and that both that copyright +notice and this permission notice appear in supporting documentation, and +that the name of the copyright holders not be used in advertising or publicity pertaining to distribution of the software without specific, -written prior permission. Red Hat makes no representations about the -suitability of this software for any purpose. It is provided "as is" -without express or implied warranty. +written prior permission. The copyright holders make no representations +about the suitability of this software for any purpose. It is provided "as +is" without express or implied warranty. THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND @@ -2053,7 +1541,8 @@ Copyright 1987, 1998 The Open Group Copyright © 1998-1999, 2001 The XFree86 Project, Inc. Copyright © 2000 VA Linux Systems, Inc. Copyright (c) 2000, 2001 Nokia Home Communications -Copyright 2003-2006 Sun Microsystems, Inc. +Copyright 2003-2006, 2008 Sun Microsystems, Inc. +Copyright © 2007, 2008 Red Hat, Inc. All rights reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2082,33 +1571,6 @@ or other dealings in this Software without prior written authorization of the copyright holder. -Copyright (c) 1998-1999 Shunsuke Akiyama . -Copyright (c) 1998-1999 X-TrueType Server Project -Copyright (c) 1999 Lennart Augustsson -All rights reserved - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - - Copyright 1996 by Thomas E. Dickey All Rights Reserved @@ -2131,45 +1593,14 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -(c) Copyright 1996 Hewlett-Packard Company -(c) Copyright 1996 International Business Machines Corp. -(c) Copyright 1996, 2004 Sun Microsystems, Inc. -(c) Copyright 1996 Novell, Inc. -(c) Copyright 1996 Digital Equipment Corp. -(c) Copyright 1996 Fujitsu Limited -(c) Copyright 1996 Hitachi, Ltd. -Copyright (c) 2003-2005 Roland Mainz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the names of the copyright holders shall -not be used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from said -copyright holders. - - Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. Copyright (c) 2001 Andreas Monitzer. Copyright (c) 2001-2004 Greg Parker. Copyright (c) 2001-2004 Torrey T. Lyons Copyright (c) 2002-2003 Apple Computer, Inc. Copyright (c) 2004-2005 Alexander Gottwald -Copyright (c) 2002-2007 Apple Inc. +Copyright (c) 2002-2009 Apple Inc. +Copyright (c) 2007 Jeremy Huddleston All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a @@ -2196,6 +1627,8 @@ use or other dealings in this Software without prior written authorization. Copyright (C) 1999,2000 by Eric Sunshine +Copyright (C) 2001-2005 by Thomas Winischhofer, Vienna, Austria. + All rights reserved. Redistribution and use in source and binary forms, with or without @@ -2274,6 +1707,7 @@ the author(s). Copyright (C) 1996-1999 SciTech Software, Inc. Copyright (C) David Mosberger-Tang Copyright (C) 1999 Egbert Eich +Copyright (C) 2008 Bart Trojanowski, Symbio Technologies, LLC Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, @@ -2360,26 +1794,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright 1994 by Glenn G. Lai -All Rights Reserved - -Permission to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyr notice and this permission notice appear in -supporting documentation, and that the name of Glenn G. Lai not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. - -Glenn G. Lai DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL -DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. - - Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany Copyright 1992 by David Dawes Copyright 1992 by Jim Tsillas @@ -2453,28 +1867,6 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright (C) 1996 David S. Miller (davem@redhat.com) -Copyright (C) 1999 Jakub Jelinek (jj@ultra.linux.cz) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JAKUB JELINEK OR DAVID MILLER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - Copyright 1997,1998 by UCHIYAMA Yasushi Permission to use, copy, modify, distribute, and sell this software and its @@ -2557,28 +1949,10 @@ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -Copyright © 2006-2007 Keith Packard - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting documentation, and -that the name of the copyright holders not be used in advertising or -publicity pertaining to distribution of the software without specific, -written prior permission. The copyright holders make no representations -about the suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. Copyright 2006 Adam Jackson. +Copyright 2007 Red Hat, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -2597,3 +1971,58 @@ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Copyright © 2007 OpenedHand Ltd + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of OpenedHand Ltd not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. OpenedHand Ltd makes no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +OpenedHand Ltd DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL OpenedHand Ltd BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + +Copyright (c) 1989, 1990, 1993, 1994 + The Regents of the University of California. All rights reserved. + +This code is derived from software contributed to Berkeley by +Chris Torek. + +This code is derived from software contributed to Berkeley by +Michael Rendell of Memorial University of Newfoundland. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. From f3c61377d0fb1f09a18833995556fc9ffd11e097 Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Tue, 12 May 2009 18:27:09 -0700 Subject: [PATCH 44/89] COPYING file updates for git master changes since 1.6 branch Signed-off-by: Alan Coopersmith --- COPYING | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/COPYING b/COPYING index f92d653d9..b2cf8b26c 100644 --- a/COPYING +++ b/COPYING @@ -11,10 +11,11 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard -Copyright © 2007-2008 Red Hat, Inc. -Copyright © 2005-2007 Daniel Stone -Copyright © 2006-2008 Simon Thum +Copyright © 2007-2009 Red Hat, Inc. +Copyright © 2005-2008 Daniel Stone +Copyright © 2006-2009 Simon Thum Copyright © 2006 Luc Verhaegen Permission is hereby granted, free of charge, to any person obtaining a @@ -45,6 +46,7 @@ licenses. Copyright (C) 1994-2003 The XFree86 Project, Inc. All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in @@ -68,16 +70,16 @@ be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the XFree86 Project. -Copyright 1997-2003 by The XFree86 Project, Inc. +Copyright 1997 by The XFree86 Project, Inc. Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting -documentation, and that the names of Orest Zborowski and David Wexelblat +documentation, and that the name of the XFree86 Project, Inc. not be used in advertising or publicity pertaining to distribution of -the software without specific, written prior permission. Orest Zborowski -and David Wexelblat make no representations about the suitability of this +the software without specific, written prior permission. The Xfree86 +Project, Inc. makes no representations about the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. @@ -597,7 +599,7 @@ authorization from the X Consortium. Copyright 1998-2000 Precision Insight, Inc., Cedar Park, Texas. Copyright 2000 VA Linux Systems, Inc. -Copyright (c) 2002 Apple Computer, Inc. +Copyright (c) 2002, 2008, 2009 Apple Computer, Inc. Copyright (c) 2003-2004 Torrey T. Lyons. All Rights Reserved. @@ -1001,8 +1003,8 @@ the suitability of this software for any purpose. It is provided "as is" without express or implied warranty. -Copyright (C) 2001-2004 Harold L Hunt II -All Rights Reserved. +Copyright (C) 2001-2004 Harold L Hunt II All Rights Reserved. +Copyright (C) Colin Harrison 2005-2008 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -1280,29 +1282,6 @@ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (C) 1999 Jeff Hartmann -Copyright (C) 1999 Precision Insight, Inc. -Copyright (C) 1999 Xi Graphics, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -JEFF HARTMANN, OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright 1992 by Rich Murphey Copyright 1993 by David Wexelblat From fc3ce861cdab8606610726ce7c53f57d950c2407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:35:25 +0200 Subject: [PATCH 45/89] randr12: Fix calculation of gamma ramp values. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The reciprocal gamma value was missed in the first copy and this mistake was propagated to the second one. Signed-off-by: Michel Dänzer --- hw/xfree86/modes/xf86Crtc.c | 6 +++--- hw/xfree86/modes/xf86RandR12.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 1b241cd33..0ab2f3df9 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -2228,19 +2228,19 @@ xf86CrtcSetInitialGamma(xf86CrtcPtr crtc, float gamma_red, float gamma_green, red[i] = i << 8; else red[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_red) * (double)(size - 1) * 256); + 1. / (double)gamma_red) * (double)(size - 1) * 256); if (gamma_green == 1.0) green[i] = i << 8; else green[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_green) * (double)(size - 1) * 256); + 1. / (double)gamma_green) * (double)(size - 1) * 256); if (gamma_blue == 1.0) blue[i] = i << 8; else blue[i] = (CARD16)(pow((double)i/(double)(size - 1), - (double)gamma_blue) * (double)(size - 1) * 256); + 1. / (double)gamma_blue) * (double)(size - 1) * 256); } /* Default size is 256, so anything else is failure. */ diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index f941a3b4a..c71cfe5c3 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1703,7 +1703,7 @@ gamma_to_ramp(float gamma, CARD16 *ramp, int size) if (gamma == 1.0) ramp[i] = i << 8; else - ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), gamma) + ramp[i] = (CARD16)(pow((double)i / (double)(size - 1), 1. / gamma) * (double)(size - 1) * 256); } } From 2c1190f888515292de01e60fe74657c34b99fd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:39:16 +0200 Subject: [PATCH 46/89] randr12: Initialize and keep track of updates to VidMode extension gamma value. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way clients querying the gamma value via the VidMode extension at least get the last value set via the same, rather than always something bogus. Signed-off-by: Michel Dänzer --- hw/xfree86/common/xf86Helper.c | 10 +++++----- hw/xfree86/modes/xf86RandR12.c | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 0db77178a..61b3390e2 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -919,11 +919,6 @@ Bool xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) { MessageType from = X_DEFAULT; - /* Pretend we succeeded if we support better a gamma system. - * This avoids a confusing message. - */ - if (xf86_crtc_supports_gamma(scrp)) - return TRUE; #if 0 xf86MonPtr DDC = (xf86MonPtr)(scrp->monitor->DDC); #endif @@ -955,6 +950,11 @@ xf86SetGamma(ScrnInfoPtr scrp, Gamma gamma) scrp->gamma.green = 1.0; scrp->gamma.blue = 1.0; } + /* Pretend we succeeded if we support better a gamma system. + * This avoids a confusing message. + */ + if (xf86_crtc_supports_gamma(scrp)) + return TRUE; xf86DrvMsg(scrp->scrnIndex, from, "Using gamma correction (%.1f, %.1f, %.1f)\n", scrp->gamma.red, scrp->gamma.green, scrp->gamma.blue); diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index c71cfe5c3..1e3b70c09 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -1740,6 +1740,8 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) xfree(points); + pScrn->gamma = gamma; + return Success; } From 2075d4bf9e53b8baef0b919da6c44771220cd4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Thu, 14 May 2009 11:46:41 +0200 Subject: [PATCH 47/89] glx: If a destroyed window is bound to the current context, make it not current. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Avoids subsequent crashes due to stale pointers to the DrawableRec, see https://bugs.freedesktop.org/show_bug.cgi?id=21132#c15 and previous comments. Signed-off-by: Michel Dänzer --- glx/glxext.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 93391e9fd..6bc7bef8e 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -126,6 +126,10 @@ static Bool DrawableGone(__GLXdrawable *glxPriv, XID xid) __GLXcontext *c; for (c = glxAllContexts; c; c = c->next) { + if (c->isCurrent && (c->drawPriv == glxPriv || c->readPriv == glxPriv)) { + (*c->loseCurrent)(c); + __glXFlushContextCache(); + } if (c->drawPriv == glxPriv) c->drawPriv = NULL; if (c->readPriv == glxPriv) From c66cf7b64c7bcb31c81b9fde27cc40c1440753b1 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:53:08 -0400 Subject: [PATCH 48/89] Update several of my and/or Red Hat's licenses to standard form. --- COPYING | 70 +---------------------------- dix/window.c | 29 ++++++------ hw/xfree86/ddc/interpret_edid.c | 21 ++++----- hw/xfree86/ddc/print_edid.c | 21 ++++----- hw/xfree86/xf8_16bpp/cfb8_16.h | 15 ++++--- hw/xfree86/xf8_16bpp/xf8_16module.c | 15 ++++--- mi/mibstore.c | 21 ++++----- os/backtrace.c | 21 ++++----- 8 files changed, 75 insertions(+), 138 deletions(-) diff --git a/COPYING b/COPYING index b2cf8b26c..09f330e0f 100644 --- a/COPYING +++ b/COPYING @@ -11,6 +11,7 @@ Copyright © 1998 Egbert Eich Copyright © 2006-2007 Intel Corporation Copyright © 2006 Nokia Corporation Copyright © 2006-2008 Peter Hutterer +Copyright © 2006 Adam Jackson Copyright © 2009 NVIDIA Corporation Copyright © 1999 Keith Packard Copyright © 2007-2009 Red Hat, Inc. @@ -498,51 +499,6 @@ OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright (c) 2006, Red Hat, Inc. - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -RED HAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. - - -Copyright © 2006, 2007 Red Hat, Inc - -Permission to use, copy, modify, distribute, and sell this software -and its documentation for any purpose is hereby granted without -fee, provided that the above copyright notice appear in all copies -and that both that copyright notice and this permission notice -appear in supporting documentation, and that the name of Red Hat, -Inc not be used in advertising or publicity pertaining to -distribution of the software without specific, written prior -permission. Red Hat, Inc makes no representations about the -suitability of this software for any purpose. It is provided "as -is" without express or implied warranty. - -RED HAT, INC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -NO EVENT SHALL RED HAT, INC BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - Copyright © 2006 Red Hat, Inc. (C) Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. All Rights Reserved. @@ -1928,30 +1884,6 @@ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright 2006 Adam Jackson. -Copyright 2007 Red Hat, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -on the rights to use, copy, modify, merge, publish, distribute, sub -license, and/or sell copies of the Software, and to permit persons to whom -the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice (including the next -paragraph) shall be included in all copies or substantial portions of the -Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL -THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Copyright © 2007 OpenedHand Ltd Permission to use, copy, modify, distribute, and sell this software and its diff --git a/dix/window.c b/dix/window.c index 324ddb71e..df8ac53f7 100644 --- a/dix/window.c +++ b/dix/window.c @@ -2,25 +2,24 @@ Copyright (c) 2006, Red Hat, Inc. -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice (including the next +paragraph) shall be included in all copies or substantial portions of the +Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -RED HAT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of Red Hat shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from Red Hat. +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. Copyright 1987, 1998 The Open Group diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index c0e3df96c..3edfd1fb5 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * interpret_edid.c: interpret a primary EDID block */ diff --git a/hw/xfree86/ddc/print_edid.c b/hw/xfree86/ddc/print_edid.c index 7b6e2989a..e16dcbb9a 100644 --- a/hw/xfree86/ddc/print_edid.c +++ b/hw/xfree86/ddc/print_edid.c @@ -3,22 +3,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. * * print_edid.c: print out all information retrieved from display device */ diff --git a/hw/xfree86/xf8_16bpp/cfb8_16.h b/hw/xfree86/xf8_16bpp/cfb8_16.h index d847a60c1..b6ab955f3 100644 --- a/hw/xfree86/xf8_16bpp/cfb8_16.h +++ b/hw/xfree86/xf8_16bpp/cfb8_16.h @@ -4,9 +4,9 @@ * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the @@ -14,10 +14,11 @@ * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifndef _CFB8_16_H diff --git a/hw/xfree86/xf8_16bpp/xf8_16module.c b/hw/xfree86/xf8_16bpp/xf8_16module.c index dd4f011b1..6a4529ae8 100644 --- a/hw/xfree86/xf8_16bpp/xf8_16module.c +++ b/hw/xfree86/xf8_16bpp/xf8_16module.c @@ -4,9 +4,9 @@ * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * the Software is furnished to do so, subject to the following conditions: + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the @@ -14,10 +14,11 @@ * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_XORG_CONFIG_H diff --git a/mi/mibstore.c b/mi/mibstore.c index ef89a76c7..262b4944d 100644 --- a/mi/mibstore.c +++ b/mi/mibstore.c @@ -2,22 +2,23 @@ * Copyright 2007 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_DIX_CONFIG_H diff --git a/os/backtrace.c b/os/backtrace.c index 19ff58d7a..3cfae3e16 100644 --- a/os/backtrace.c +++ b/os/backtrace.c @@ -2,22 +2,23 @@ * Copyright 2008 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software") - * to deal in the software without restriction, including without limitation - * on the rights to use, copy, modify, merge, publish, distribute, sub - * license, and/or sell copies of the Software, and to permit persons to whom - * them Software is furnished to do so, subject to the following conditions: + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTIBILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. */ #ifdef HAVE_DIX_CONFIG_H From ed9aecf8517bf74e943e3e5dd3ee407524e8f122 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 14 May 2009 06:55:21 -0400 Subject: [PATCH 49/89] COPYING: SGI FreeB 1.1 -> SGI FreeB 2.0 --- COPYING | 89 ++++++++++++--------------------------------------------- 1 file changed, 19 insertions(+), 70 deletions(-) diff --git a/COPYING b/COPYING index 09f330e0f..e2a71d60d 100644 --- a/COPYING +++ b/COPYING @@ -310,79 +310,28 @@ dealings in this Software without prior written authorization from Digital Equipment Corporation. -Copyright (c) 1993-1997 by Silicon Graphics Computer Systems, Inc. +SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) +Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. -Permission to use, copy, modify, and distribute this -software and its documentation for any purpose and without -fee is hereby granted, provided that the above copyright -notice appear in all copies and that both that copyright -notice and this permission notice appear in supporting -documentation, and that the name of Silicon Graphics not be -used in advertising or publicity pertaining to distribution -of the software without specific prior written permission. -Silicon Graphics makes no representation about the suitability -of this software for any purpose. It is provided "as is" -without any express or implied warranty. +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON -GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH -THE USE OR PERFORMANCE OF THIS SOFTWARE. +The above copyright notice including the dates of first publication and +either this permission notice or a reference to +http://oss.sgi.com/projects/FreeB/ +shall be included in all copies or substantial portions of the Software. - -License Applicability. Except to the extent portions of this file are -made subject to an alternative license as permitted in the SGI Free -Software License B, Version 1.1 (the "License"), the contents of this -file are subject only to the provisions of the License. You may not use -this file except in compliance with the License. You may obtain a copy -of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 -Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: - -http://oss.sgi.com/projects/FreeB - -Note that, as provided in the License, the Software is distributed on an -"AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS -DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND -CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A -PARTICULAR PURPOSE, AND NON-INFRINGEMENT. - -Original Code. The Original Code is: OpenGL Sample Implementation, -Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. -Copyright in any portions created by third parties is as indicated -elsewhere herein. All Rights Reserved. - -Additional Notice Provisions: The application programming interfaces -established by SGI in conjunction with the Original Code are The -OpenGL(R) Graphics System: A Specification (Version 1.2.1), released -April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version -1.3), released November 4, 1998; and OpenGL(R) Graphics with the X -Window System(R) (Version 1.3), released October 19, 1998. This software -was created using the OpenGL(R) version 1.2.1 Sample Implementation -published by SGI, but has not been independently verified as being -compliant with the OpenGL(R) version 1.2.1 Specification. - - -The contents of this file are subject to the GLX Public License Version 1.0 -(the "License"). You may not use this file except in compliance with the -License. You may obtain a copy of the License at Silicon Graphics, Inc., -attn: Legal Services, 2011 N. Shoreline Blvd., Mountain View, CA 94043 -or at http://www.sgi.com/software/opensource/glx/license.html. - -Software distributed under the License is distributed on an "AS IS" -basis. ALL WARRANTIES ARE DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY -IMPLIED WARRANTIES OF MERCHANTABILITY, OF FITNESS FOR A PARTICULAR -PURPOSE OR OF NON- INFRINGEMENT. See the License for the specific -language governing rights and limitations under the License. - -The Original Software is GLX version 1.2 source code, released February, -1999. The developer of the Original Software is Silicon Graphics, Inc. -Those portions of the Subject Software created by Silicon Graphics, Inc. -are Copyright (c) 1991-9 Silicon Graphics, Inc. All Rights Reserved. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF +OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. Copyright (c) 1994, 1995 Hewlett-Packard Company From 4cc33190ef1a4207c0f8fc74201cdf2568a239c2 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Thu, 14 May 2009 17:01:57 +0200 Subject: [PATCH 50/89] xfree86: Add two __FreeBSD_kernel__ checks Debian bug#525475 Reported-by: Petr Salinger Signed-off-by: Julien Cristau --- hw/xfree86/os-support/bus/Pci.h | 3 ++- hw/xfree86/os-support/shared/stdResource.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/os-support/bus/Pci.h b/hw/xfree86/os-support/bus/Pci.h index 7623e9738..79b38f015 100644 --- a/hw/xfree86/os-support/bus/Pci.h +++ b/hw/xfree86/os-support/bus/Pci.h @@ -168,7 +168,8 @@ #endif /* !defined(DEBUGPCI) */ -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__OpenBSD__) || defined(__NetBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define ARCH_PCI_INIT bsdPciInit #endif diff --git a/hw/xfree86/os-support/shared/stdResource.c b/hw/xfree86/os-support/shared/stdResource.c index a4c162d97..9db349bc0 100644 --- a/hw/xfree86/os-support/shared/stdResource.c +++ b/hw/xfree86/os-support/shared/stdResource.c @@ -43,7 +43,8 @@ /* Avoid Imakefile changes */ #include "bus/Pci.h" -#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \ +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \ + defined(__NetBSD__) || defined(__OpenBSD__) || \ defined(__DragonFly__) || defined(__sun) || defined(__GNU__) #define xf86StdAccResFromOS xf86AccResFromOS #endif From c1bbac2708bbccbec01cecba39cdf2b8160c1dc3 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Thu, 14 May 2009 16:00:41 -0400 Subject: [PATCH 51/89] Fix mem_barrier() on Alpha Some clean up (da086901c6579e41b28b1418fa12ebb82744fc87) went a bit too far and removed the needed mem_barrier macro on Alpha. This re-adds it. --- hw/xfree86/common/compiler.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/common/compiler.h b/hw/xfree86/common/compiler.h index 2601693ca..40b463efb 100644 --- a/hw/xfree86/common/compiler.h +++ b/hw/xfree86/common/compiler.h @@ -357,7 +357,8 @@ static __inline__ void stw_u(unsigned long r5, unsigned short * r11) # endif } -# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") +# define mem_barrier() __asm__ __volatile__("mb" : : : "memory") +# define write_mem_barrier() __asm__ __volatile__("wmb" : : : "memory") # elif defined(linux) && defined(__ia64__) From 850675d4de4373e5df95507dbf2cd9affaaf54bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 52/89] EXA: Take GC client clip type into account for migration. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes http://bugs.freedesktop.org/show_bug.cgi?id=18950 . Signed-off-by: Michel Dänzer --- exa/exa_accel.c | 35 +++++++++++++++++------------------ exa/exa_priv.h | 10 ++++++---- exa/exa_render.c | 2 +- exa/exa_unaccel.c | 2 +- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/exa/exa_accel.c b/exa/exa_accel.c index d284ff560..39f343784 100644 --- a/exa/exa_accel.c +++ b/exa/exa_accel.c @@ -406,7 +406,8 @@ exaHWCopyNtoN (DrawablePtr pSrcDrawable, xfree(rects); if (!pGC || !exaGCReadsDestination(pDstDrawable, pGC->planemask, - pGC->fillStyle, pGC->alu)) { + pGC->fillStyle, pGC->alu, + pGC->clientClipType)) { dstregion = REGION_CREATE(pScreen, NullBox, 0); REGION_COPY(pScreen, dstregion, srcregion); REGION_TRANSLATE(pScreen, dstregion, dst_off_x - dx - src_off_x, @@ -734,7 +735,8 @@ exaPolySegment (DrawablePtr pDrawable, GCPtr pGC, int nseg, } static Bool exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, - Pixel pixel, CARD32 planemask, CARD32 alu); + Pixel pixel, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); static void exaPolyFillRect(DrawablePtr pDrawable, @@ -787,10 +789,11 @@ exaPolyFillRect(DrawablePtr pDrawable, if (((pGC->fillStyle == FillSolid || pGC->tileIsPixel) && exaFillRegionSolid(pDrawable, pReg, pGC->fillStyle == FillSolid ? pGC->fgPixel : pGC->tile.pixel, pGC->planemask, - pGC->alu)) || + pGC->alu, pGC->clientClipType)) || (pGC->fillStyle == FillTiled && !pGC->tileIsPixel && exaFillRegionTiled(pDrawable, pReg, pGC->tile.pixmap, &pGC->patOrg, - pGC->planemask, pGC->alu))) { + pGC->planemask, pGC->alu, + pGC->clientClipType))) { goto out; } } @@ -952,11 +955,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc) } static Bool -exaFillRegionSolid (DrawablePtr pDrawable, - RegionPtr pRegion, - Pixel pixel, - CARD32 planemask, - CARD32 alu) +exaFillRegionSolid (DrawablePtr pDrawable, RegionPtr pRegion, Pixel pixel, + CARD32 planemask, CARD32 alu, unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap = exaGetDrawablePixmap (pDrawable); @@ -969,7 +969,8 @@ exaFillRegionSolid (DrawablePtr pDrawable, pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap; pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillSolid, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; exaGetDrawableDeltas(pDrawable, pPixmap, &xoff, &yoff); REGION_TRANSLATE(pScreen, pRegion, xoff, yoff); @@ -1032,12 +1033,9 @@ out: * Based on fbFillRegionTiled(), fbTile(). */ Bool -exaFillRegionTiled (DrawablePtr pDrawable, - RegionPtr pRegion, - PixmapPtr pTile, - DDXPointPtr pPatOrg, - CARD32 planemask, - CARD32 alu) +exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType) { ExaScreenPriv(pDrawable->pScreen); PixmapPtr pPixmap; @@ -1060,13 +1058,14 @@ exaFillRegionTiled (DrawablePtr pDrawable, if (tileWidth == 1 && tileHeight == 1) return exaFillRegionSolid(pDrawable, pRegion, exaGetPixmapFirstPixel (pTile), planemask, - alu); + alu, clientClipType); pixmaps[0].as_dst = TRUE; pixmaps[0].as_src = FALSE; pixmaps[0].pPix = pPixmap = exaGetDrawablePixmap (pDrawable); pixmaps[0].pReg = exaGCReadsDestination(pDrawable, planemask, FillTiled, - alu) ? NULL : pRegion; + alu, clientClipType) + ? NULL : pRegion; pixmaps[1].as_dst = FALSE; pixmaps[1].as_src = TRUE; pixmaps[1].pPix = pTile; diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 9efbbc98c..874e7e987 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -415,11 +415,12 @@ ExaCheckAddTraps (PicturePtr pPicture, static _X_INLINE Bool exaGCReadsDestination(DrawablePtr pDrawable, unsigned long planemask, - unsigned int fillStyle, unsigned char alu) + unsigned int fillStyle, unsigned char alu, + unsigned int clientClipType) { - return ((alu != GXcopy && alu != GXclear &&alu != GXset && + return ((alu != GXcopy && alu != GXclear && alu != GXset && alu != GXcopyInverted) || fillStyle == FillStippled || - !EXA_PM_IS_SOLID(pDrawable, planemask)); + clientClipType != CT_NONE || !EXA_PM_IS_SOLID(pDrawable, planemask)); } void @@ -427,7 +428,8 @@ exaCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc); Bool exaFillRegionTiled (DrawablePtr pDrawable, RegionPtr pRegion, PixmapPtr pTile, - DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu); + DDXPointPtr pPatOrg, CARD32 planemask, CARD32 alu, + unsigned int clientClipType); void exaGetImage (DrawablePtr pDrawable, int x, int y, int w, int h, diff --git a/exa/exa_render.c b/exa/exa_render.c index a9344977f..14d710b57 100644 --- a/exa/exa_render.c +++ b/exa/exa_render.c @@ -945,7 +945,7 @@ exaComposite(CARD8 op, ret = exaFillRegionTiled(pDst->pDrawable, ®ion, (PixmapPtr)pSrc->pDrawable, - &patOrg, FB_ALLONES, GXcopy); + &patOrg, FB_ALLONES, GXcopy, CT_NONE); REGION_UNINIT(pDst->pDrawable->pScreen, ®ion); diff --git a/exa/exa_unaccel.c b/exa/exa_unaccel.c index 4279c877c..0d53b67d8 100644 --- a/exa/exa_unaccel.c +++ b/exa/exa_unaccel.c @@ -106,7 +106,7 @@ ExaCheckPutImage (DrawablePtr pDrawable, GCPtr pGC, int depth, EXA_GC_PROLOGUE(pGC); EXA_FALLBACK(("to %p (%c)\n", pDrawable, exaDrawableLocation(pDrawable))); if (exaGCReadsDestination(pDrawable, pGC->planemask, pGC->fillStyle, - pGC->alu)) + pGC->alu, pGC->clientClipType)) exaPrepareAccess (pDrawable, EXA_PREPARE_DEST); else exaPrepareAccessReg (pDrawable, EXA_PREPARE_DEST, pExaPixmap->pDamage ? From 7c8327f0a75087a85864256a9cea80dd4b86def5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Fri, 15 May 2009 15:48:37 +0200 Subject: [PATCH 53/89] EXA: Always damage glyph cache pixmap manually after uploading a glyph. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Michel Dänzer --- exa/exa_glyphs.c | 71 ++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/exa/exa_glyphs.c b/exa/exa_glyphs.c index d2a0168b4..b8d2e52bf 100644 --- a/exa/exa_glyphs.c +++ b/exa/exa_glyphs.c @@ -354,8 +354,14 @@ exaGlyphCacheHashRemove(ExaGlyphCachePtr cache, * is to use the UploadToScreen() driver hook; this allows us to * pipeline glyph uploads and to avoid creating offscreen pixmaps for * glyphs that we'll never use again. + * + * If we can't do it with UploadToScreen (because the glyph is offscreen, etc), + * we fall back to CompositePicture. + * + * We need to damage the cache pixmap manually in either case because the damage + * layer unwrapped the picture screen before calling exaGlyphs. */ -static Bool +static void exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaGlyphCachePtr cache, int pos, @@ -369,16 +375,16 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, ExaMigrationRec pixmaps[1]; if (!pExaScr->info->UploadToScreen || pExaScr->swappedOut || pExaPixmap->accel_blocked) - return FALSE; + goto composite; /* If the glyph pixmap is already uploaded, no point in doing * things this way */ if (exaPixmapIsOffscreen(pGlyphPixmap)) - return FALSE; + goto composite; /* UploadToScreen only works if bpp match */ if (pGlyphPixmap->drawable.bitsPerPixel != pCachePixmap->drawable.bitsPerPixel) - return FALSE; + goto composite; /* cache pixmap must be offscreen. */ pixmaps[0].as_dst = TRUE; @@ -388,26 +394,37 @@ exaGlyphCacheUploadGlyph(ScreenPtr pScreen, exaDoMigration (pixmaps, 1, TRUE); if (!exaPixmapIsOffscreen(pCachePixmap)) - return FALSE; + goto composite; /* CACHE_{X,Y} are in pixmap coordinates, no need for cache{X,Y}off */ - if (!pExaScr->info->UploadToScreen(pCachePixmap, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height, - (char *)pExaPixmap->sys_ptr, - pExaPixmap->sys_pitch)) - return FALSE; + if (pExaScr->info->UploadToScreen(pCachePixmap, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height, + (char *)pExaPixmap->sys_ptr, + pExaPixmap->sys_pitch)) + goto damage; - /* This pixmap should never be bound to a window, so no need to offset coordinates. */ +composite: + CompositePicture (PictOpSrc, + pGlyphPicture, + None, + cache->picture, + 0, 0, + 0, 0, + CACHE_X(pos), + CACHE_Y(pos), + pGlyph->info.width, + pGlyph->info.height); + +damage: + /* The cache pixmap isn't a window, so no need to offset coordinates. */ exaPixmapDirty (pCachePixmap, CACHE_X(pos), CACHE_Y(pos), - CACHE_X(pos) + pGlyph->info.width, - CACHE_Y(pos) + pGlyph->info.height); - - return TRUE; + CACHE_X(pos) + cache->glyphWidth, + CACHE_Y(pos) + cache->glyphHeight); } static ExaGlyphCacheResult @@ -483,23 +500,7 @@ exaGlyphCacheBufferGlyph(ScreenPtr pScreen, cache->evictionPosition = rand() % cache->size; } - /* Now actually upload the glyph into the cache picture; if - * we can't do it with UploadToScreen (because the glyph is - * offscreen, etc), we fall back to CompositePicture. - */ - if (!exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph)) { - CompositePicture (PictOpSrc, - GlyphPicture(pGlyph)[pScreen->myNum], - None, - cache->picture, - 0, 0, - 0, 0, - CACHE_X(pos), - CACHE_Y(pos), - pGlyph->info.width, - pGlyph->info.height); - } - + exaGlyphCacheUploadGlyph(pScreen, cache, pos, pGlyph); } buffer->mask = cache->picture; From 2be5eecb4b0f30b9c55d12521415edbb88c1f8fd Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 15 May 2009 17:29:32 +0200 Subject: [PATCH 54/89] xfree86: add edid quirk for Samsung Syncmaster 2333HD It reports vertical size in cm in the detailed mode. X.Org bug#21750 Reported-by: Peter Poklop Signed-off-by: Julien Cristau --- hw/xfree86/modes/xf86EdidModes.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 9e6a666f7..4340edd1f 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -160,6 +160,11 @@ static Bool quirk_detailed_v_in_cm (int scrnIndex, xf86MonPtr DDC) DDC->vendor.prod_id == 47360) return TRUE; + /* Bug #21750: Samsung Syncmaster 2333HD */ + if (memcmp (DDC->vendor.name, "SAM", 4) == 0 && + DDC->vendor.prod_id == 1157) + return TRUE; + return FALSE; } From 94c5093c8bc803d0b14429b5a4d07ae46da865cc Mon Sep 17 00:00:00 2001 From: David Marx Date: Wed, 13 May 2009 17:53:30 -0700 Subject: [PATCH 55/89] Solaris: Make sure non-inline versions of asm routines end with ret statements Signed-off-by: Alan Coopersmith --- hw/xfree86/os-support/solaris/solaris-amd64.S | 2 +- hw/xfree86/os-support/solaris/solaris-ia32.S | 2 +- hw/xfree86/os-support/solaris/solaris-sparcv8plus.S | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xfree86/os-support/solaris/solaris-amd64.S b/hw/xfree86/os-support/solaris/solaris-amd64.S index 9f5e58cb0..4a0e0f48a 100644 --- a/hw/xfree86/os-support/solaris/solaris-amd64.S +++ b/hw/xfree86/os-support/solaris/solaris-amd64.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-ia32.S b/hw/xfree86/os-support/solaris/solaris-ia32.S index e2d9cf60a..280154bab 100644 --- a/hw/xfree86/os-support/solaris/solaris-ia32.S +++ b/hw/xfree86/os-support/solaris/solaris-ia32.S @@ -32,7 +32,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) ret; SET_SIZE(f) #endif FUNCTION_START(inb,4) diff --git a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S index fb23942ef..dbaa0308b 100644 --- a/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S +++ b/hw/xfree86/os-support/solaris/solaris-sparcv8plus.S @@ -33,7 +33,7 @@ #define _ASM #include #define FUNCTION_START(f,n) ENTRY(f) -#define FUNCTION_END(f) SET_SIZE(f) +#define FUNCTION_END(f) retl; nop; SET_SIZE(f) #endif /* Converted from common/compiler.h gcc inline format to Sun cc inline From 8609a4e883e917d1652fbe810108de99bc89713f Mon Sep 17 00:00:00 2001 From: Alan Coopersmith Date: Fri, 15 May 2009 11:22:32 -0700 Subject: [PATCH 56/89] Correct some Sun license notices to Sun's standard X11 license format Signed-off-by: Alan Coopersmith --- COPYING | 21 --------------------- composite/compalloc.c | 41 ++++++++++++++++++++++++----------------- composite/compext.c | 41 ++++++++++++++++++++++++----------------- composite/compinit.c | 41 ++++++++++++++++++++++++----------------- composite/compint.h | 41 ++++++++++++++++++++++++----------------- composite/compoverlay.c | 41 ++++++++++++++++++++++++----------------- composite/compwindow.c | 41 ++++++++++++++++++++++++----------------- xfixes/cursor.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixes.c | 41 ++++++++++++++++++++++++----------------- xfixes/xfixesint.h | 41 ++++++++++++++++++++++++----------------- 10 files changed, 216 insertions(+), 174 deletions(-) diff --git a/COPYING b/COPYING index e2a71d60d..5dc8c1dfb 100644 --- a/COPYING +++ b/COPYING @@ -188,27 +188,6 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Copyright © 2006 Sun Microsystems - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of Sun Microsystems not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Sun Microsystems makes no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - Copyright 1987-1991, 1993 by Digital Equipment Corporation, Maynard, Massachusetts. Copyright 1991 Massachusetts Institute of Technology, Cambridge, Massachusetts. Copyright 1991, 1993 Olivetti Research Limited, Cambridge, England. diff --git a/composite/compalloc.c b/composite/compalloc.c index 1bac9a417..3f427dbe1 100644 --- a/composite/compalloc.c +++ b/composite/compalloc.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compext.c b/composite/compext.c index 829c90fbf..608f29a8a 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compinit.c b/composite/compinit.c index ee269afa0..dfc3929ee 100644 --- a/composite/compinit.c +++ b/composite/compinit.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compint.h b/composite/compint.h index fd2fea153..852c277c2 100644 --- a/composite/compint.h +++ b/composite/compint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compoverlay.c b/composite/compoverlay.c index 68b4f1288..e213ce71e 100644 --- a/composite/compoverlay.c +++ b/composite/compoverlay.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/composite/compwindow.c b/composite/compwindow.c index 577fa733e..4267a51c7 100644 --- a/composite/compwindow.c +++ b/composite/compwindow.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2003 Keith Packard * diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 6fa2dff8e..534c82605 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c index 3b8ed5a13..25c92ea93 100644 --- a/xfixes/xfixes.c +++ b/xfixes/xfixes.c @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * diff --git a/xfixes/xfixesint.h b/xfixes/xfixesint.h index 04117a46c..d7c53ee07 100644 --- a/xfixes/xfixesint.h +++ b/xfixes/xfixesint.h @@ -1,23 +1,30 @@ /* - * Copyright © 2006 Sun Microsystems + * Copyright © 2006 Sun Microsystems, Inc. All rights reserved. * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Sun Microsystems not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Sun Microsystems makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, and/or sell copies of the Software, and to permit persons + * to whom the Software is furnished to do so, provided that the above + * copyright notice(s) and this permission notice appear in all copies of + * the Software and that both the above copyright notice(s) and this + * permission notice appear in supporting documentation. * - * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + * OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL + * INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING + * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, + * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION + * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * of the copyright holder. * * Copyright © 2002 Keith Packard * From c1d7deca9281ba1df0df1abcea1fe7f841b10ff9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 12 May 2009 21:24:07 +1000 Subject: [PATCH 57/89] mi: un-deprecate miPointerWarpCursor This function was deprecated in ef68273f5bdb27a492ec0b69548ec4fbede46c08 because it didn't take a device argument. The device argument was added in 1c7568b8a1417257fa67c7fca69aa253099b9461 though, so the deprecation is obsolete. Signed-off-by: Peter Hutterer --- mi/mipointer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mi/mipointer.h b/mi/mipointer.h index 8b13f0848..7dc1ae7cc 100644 --- a/mi/mipointer.h +++ b/mi/mipointer.h @@ -108,7 +108,7 @@ extern _X_EXPORT void miPointerWarpCursor( ScreenPtr /*pScreen*/, int /*x*/, int /*y*/ -) _X_DEPRECATED; +); /* Deprecated in favour of miPointerSetPosition. */ extern _X_EXPORT void miPointerAbsoluteCursor( From 6f9e22049862ee9ac7f604411d005d8bb1b2dd1c Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:51:40 +1000 Subject: [PATCH 58/89] dix: ensure Activate/DeactivateGrab has a valid value. Xephyr doesn't manually set Activate/DeactivateGrab for new devices, resulting in a NULL-pointer dereference later when a grab is activated. Avoid the segfault by ensuring that the pointer is always valid. Signed-off-by: Peter Hutterer --- dix/devices.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dix/devices.c b/dix/devices.c index afe340b2f..6f464e7ca 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -224,6 +224,8 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) /* device grab defaults */ dev->deviceGrab.grabTime = currentTime; + dev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + dev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; dev->coreEvents = TRUE; From b1b5ec45c1cb650ccb8c659218f9481379c777d9 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 11 May 2009 12:53:56 +1000 Subject: [PATCH 59/89] kdrive: set Activate/Deactivate grab for input devices (#21591) X.Org Bug 21591 --- hw/kdrive/src/kinput.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/kdrive/src/kinput.c b/hw/kdrive/src/kinput.c index 7ed36017f..0d216a9b8 100644 --- a/hw/kdrive/src/kinput.c +++ b/hw/kdrive/src/kinput.c @@ -915,6 +915,8 @@ KdAddKeyboard (KdKeyboardInfo *ki) return !Success; } + ki->dixdev->deviceGrab.ActivateGrab = ActivateKeyboardGrab; + ki->dixdev->deviceGrab.DeactivateGrab = DeactivateKeyboardGrab; RegisterOtherDevice(ki->dixdev); #ifdef DEBUG @@ -984,6 +986,8 @@ KdAddPointer (KdPointerInfo *pi) return BadDevice; } + pi->dixdev->deviceGrab.ActivateGrab = ActivatePointerGrab; + pi->dixdev->deviceGrab.DeactivateGrab = DeactivatePointerGrab; RegisterOtherDevice(pi->dixdev); for (prev = &kdPointers; *prev; prev = &(*prev)->next); From 2f6253376df45e508284ff7766b186cfc7fb56d6 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Sat, 9 May 2009 10:33:20 +1000 Subject: [PATCH 60/89] xfree86: Remove superfluous ifdef DEBUG checks. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Bus.c | 46 ++++++------------- hw/xfree86/common/xf86Config.c | 12 ++--- hw/xfree86/common/xf86Events.c | 20 ++------ hw/xfree86/common/xf86Helper.c | 46 ++++++------------- hw/xfree86/common/xf86Init.c | 18 ++------ hw/xfree86/common/xf86Mode.c | 16 ++----- hw/xfree86/common/xf86VidMode.c | 18 +++----- hw/xfree86/common/xf86fbman.c | 36 +++++---------- hw/xfree86/common/xf86sbusBus.c | 14 ++---- hw/xfree86/os-support/linux/int10/linux.c | 36 ++++----------- .../os-support/linux/int10/vm86/linux_vm86.c | 4 +- hw/xfree86/os-support/linux/lnx_acpi.c | 14 ++---- hw/xfree86/os-support/linux/lnx_apm.c | 14 ++---- hw/xfree86/os-support/linux/lnx_axp.c | 12 ++--- hw/xfree86/os-support/linux/lnx_font.c | 12 ++--- hw/xfree86/os-support/linux/lnx_video.c | 20 +++----- hw/xfree86/os-support/sco/sco_video.c | 8 +--- hw/xfree86/os-support/shared/bios_mmap.c | 4 +- hw/xfree86/os-support/shared/posix_tty.c | 21 +++------ hw/xfree86/ramdac/TI.c | 4 +- hw/xfree86/vbe/vbeModes.c | 4 +- hw/xfree86/vgahw/vgaHW.c | 40 +++++----------- 22 files changed, 118 insertions(+), 301 deletions(-) diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c index 8040f580b..8382d911a 100644 --- a/hw/xfree86/common/xf86Bus.c +++ b/hw/xfree86/common/xf86Bus.c @@ -639,9 +639,7 @@ xf86EnableAccess(ScrnInfoPtr pScrn) register xf86AccessPtr pAcc; EntityAccessPtr tmp; -#ifdef DEBUG - ErrorF("Enable access %i\n",pScrn->scrnIndex); -#endif + DebugF("Enable access %i\n",pScrn->scrnIndex); /* Entity is not under access control or currently enabled */ if (!pScrn->access) { @@ -844,10 +842,8 @@ checkConflictBlock(resRange *range, resPtr pRes) case ResBlock: if (range->rBegin < pRes->block_end && range->rEnd > pRes->block_begin) { -#ifdef DEBUG - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return pRes->block_end < range->rEnd ? pRes->block_end : range->rEnd; } @@ -856,12 +852,10 @@ checkConflictBlock(resRange *range, resPtr pRes) if (pRes->sparse_base > range->rEnd) return 0; val = (~pRes->sparse_mask | pRes->sparse_base) & getMask(range->rEnd); -#ifdef DEBUG - ErrorF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," + DebugF("base = 0x%lx, mask = 0x%lx, begin = 0x%lx, end = 0x%lx ," "val = 0x%lx\n", pRes->sparse_base, pRes->sparse_mask, range->rBegin, range->rEnd, val); -#endif i = sizeof(memType) * 8; tmp = prev = pRes->sparse_base; @@ -873,11 +867,9 @@ checkConflictBlock(resRange *range, resPtr pRes) prev = tmp; } if (tmp >= range->rBegin) { -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-d conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-d conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return tmp; } else @@ -902,10 +894,8 @@ checkConflictSparse(resRange *range, resPtr pRes) case ResSparse: tmp = pRes->sparse_mask & range->rMask; if ((tmp & pRes->sparse_base) == (tmp & range->rBase)) { -#ifdef DEBUG - ErrorF("s-b conflict w: %lx %lx\n", + DebugF("s-b conflict w: %lx %lx\n", pRes->sparse_base,pRes->sparse_mask); -#endif return pRes->sparse_mask; } return 0; @@ -918,9 +908,7 @@ checkConflictSparse(resRange *range, resPtr pRes) tmp = prev = range->rBase; while (i) { -#ifdef DEBUG - ErrorF("tmp = 0x%lx\n",tmp); -#endif + DebugF("tmp = 0x%lx\n",tmp); tmp |= 1<< (--i) & val; if (tmp > pRes->block_end) tmp = prev; @@ -947,11 +935,9 @@ checkConflictSparse(resRange *range, resPtr pRes) m_mask = mask > m_mask ? mask : m_mask; base = base + mask + 1; } -#ifdef DEBUG - ErrorF("conflict found at: 0x%lx\n",tmp); - ErrorF("b-b conflict w: %lx %lx\n", + DebugF("conflict found at: 0x%lx\n",tmp); + DebugF("b-b conflict w: %lx %lx\n", pRes->block_begin,pRes->block_end); -#endif return ~m_mask; } } @@ -1557,12 +1543,10 @@ xf86EnterServerState(xf86State state) * We take care not to call xf86BlockSIGIO() twice. */ SetSIGIOForState(state); -#ifdef DEBUG if (state == SETUP) - ErrorF("Entering SETUP state\n"); + DebugF("Entering SETUP state\n"); else - ErrorF("Entering OPERATING state\n"); -#endif + DebugF("Entering OPERATING state\n"); /* When servicing a dumb framebuffer we don't need to do anything */ if (doFramebufferMode) return; @@ -1620,10 +1604,8 @@ xf86EnterServerState(xf86State state) xf86Screens[i]->busAccess = NULL; } -#ifdef DEBUG if (xf86Screens[i]->busAccess) - ErrorF("Screen %i setting vga route\n",i); -#endif + DebugF("Screen %i setting vga route\n",i); switch (rt) { case MEM_IO: xf86MsgVerb(X_INFO, 3, "Screen %i shares mem & io resources\n",i); @@ -1967,9 +1949,7 @@ xf86PostScreenInit(void) return; } -#ifdef DEBUG - ErrorF("PostScreenInit generation: %i\n",serverGeneration); -#endif + DebugF("PostScreenInit generation: %i\n",serverGeneration); if (serverGeneration == 1) { checkRoutingForScreens(OPERATING); for (i=0; ilist.next; } -#ifdef DEBUG - ErrorF("Found %d screens in the layout section %s", + DebugF("Found %d screens in the layout section %s", count, conf_layout->lay_identifier); -#endif if (!count) /* alloc enough storage even if no screen is specified */ count = 1; @@ -1678,10 +1676,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; idp = (XF86ConfInactivePtr)idp->list.next; } -#ifdef DEBUG - ErrorF("Found %d inactive devices in the layout section %s\n", + DebugF("Found %d inactive devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif gdp = xnfalloc((count + 1) * sizeof(GDevRec)); gdp[count].identifier = NULL; idp = conf_layout->lay_inactive_lst; @@ -1703,10 +1699,8 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, count++; irp = (XF86ConfInputrefPtr)irp->list.next; } -#ifdef DEBUG - ErrorF("Found %d input devices in the layout section %s\n", + DebugF("Found %d input devices in the layout section %s\n", count, conf_layout->lay_identifier); -#endif indp = xnfcalloc((count + 1), sizeof(IDevPtr)); indp[count] = NULL; irp = conf_layout->lay_input_lst; diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index aa818c358..e9b4dfe60 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -183,9 +183,7 @@ ProcessInputEvents (void) void xf86ProcessActionEvent(ActionEvent action, void *arg) { -#ifdef DEBUG - ErrorF("ProcessActionEvent(%d,%x)\n", (int) action, arg); -#endif + DebugF("ProcessActionEvent(%d,%x)\n", (int) action, arg); switch (action) { case ACTION_TERMINATE: if (!xf86Info.dontZap) { @@ -429,9 +427,7 @@ xf86VTSwitch(void) InputInfoPtr pInfo; IHPtr ih; -#ifdef DEBUG - ErrorF("xf86VTSwitch()\n"); -#endif + DebugF("xf86VTSwitch()\n"); #ifdef XFreeXDGA if(!DGAVTSwitch()) @@ -444,10 +440,8 @@ xf86VTSwitch(void) */ if (xf86Screens[0]->vtSema) { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", + DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -#endif #ifdef DPMSExtension if (DPMSPowerLevel != DPMSModeOn) DPMSSet(serverClient, DPMSModeOn); @@ -483,9 +477,7 @@ xf86VTSwitch(void) * switch failed */ -#ifdef DEBUG - ErrorF("xf86VTSwitch: Leave failed\n"); -#endif + DebugF("xf86VTSwitch: Leave failed\n"); prevSIGIO = xf86BlockSIGIO(); xf86AccessEnter(); xf86EnterServerState(SETUP); @@ -534,9 +526,7 @@ xf86VTSwitch(void) } } else { -#ifdef DEBUG - ErrorF("xf86VTSwitch: Entering\n"); -#endif + DebugF("xf86VTSwitch: Entering\n"); if (!xf86VTSwitchTo()) return; prevSIGIO = xf86BlockSIGIO(); diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 61b3390e2..441efb098 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -212,15 +212,13 @@ xf86AllocateScreen(DriverPtr drv, int flags) xf86Screens[i]->CurrentAccess = &xf86CurrentAccess; xf86Screens[i]->resourceType = MEM_IO; -#ifdef DEBUG /* OOps -- What's this ? */ - ErrorF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", + DebugF("xf86AllocateScreen - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); if ( NULL != xf86Screens[i]->pScreen ) { - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); } -#endif xf86Screens[i]->DriverFunc = drv->driverFunc; @@ -1735,9 +1733,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); /* * Check for devices that need duplicated instances. This is required @@ -1820,9 +1816,7 @@ xf86MatchPciInstances(const char *driverName, int vendorID, instances[i].dev = dev; } } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Now check that a chipset or chipID override in the device section * is valid. Chipset has precedence over chipID. @@ -1926,11 +1920,9 @@ xf86MatchPciInstances(const char *driverName, int vendorID, if (instances[i].screen == 0 && !xf86CheckPciSlot( pPci )) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", driverName, pPci->bus, pPci->dev, pPci->func); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); @@ -2621,10 +2613,8 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, int i; Bool existing = FALSE; -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", + DebugF("xf86RegisterRootWindowProperty(%d, %ld, %ld, %d, %ld, %p)\n", ScrnIndex, property, type, format, len, value); -#endif if (ScrnIndex<0 || ScrnIndex>=xf86NumScreens) { return(BadMatch); @@ -2660,15 +2650,11 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, pNewProp->size = len; pNewProp->data = value; -#ifdef DEBUG - ErrorF("new property filled\n"); -#endif + DebugF("new property filled\n"); if (NULL==xf86RegisteredPropertiesTable) { -#ifdef DEBUG - ErrorF("creating xf86RegisteredPropertiesTable[] size %d\n", + DebugF("creating xf86RegisteredPropertiesTable[] size %d\n", xf86NumScreens); -#endif if ( NULL==(xf86RegisteredPropertiesTable=(RootWinPropPtr*)xnfcalloc(sizeof(RootWinProp),xf86NumScreens) )) { return(BadAlloc); } @@ -2677,12 +2663,10 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } } -#ifdef DEBUG - ErrorF("xf86RegisteredPropertiesTable %p\n", + DebugF("xf86RegisteredPropertiesTable %p\n", (void *)xf86RegisteredPropertiesTable); - ErrorF("xf86RegisteredPropertiesTable[%d] %p\n", + DebugF("xf86RegisteredPropertiesTable[%d] %p\n", ScrnIndex, (void *)xf86RegisteredPropertiesTable[ScrnIndex]); -#endif if (!existing) { if ( xf86RegisteredPropertiesTable[ScrnIndex] == NULL) { @@ -2690,17 +2674,13 @@ xf86RegisterRootWindowProperty(int ScrnIndex, Atom property, Atom type, } else { pRegProp = xf86RegisteredPropertiesTable[ScrnIndex]; while (pRegProp->next != NULL) { -#ifdef DEBUG - ErrorF("- next %p\n", (void *)pRegProp); -#endif + DebugF("- next %p\n", (void *)pRegProp); pRegProp = pRegProp->next; } pRegProp->next = pNewProp; } } -#ifdef DEBUG - ErrorF("xf86RegisterRootWindowProperty succeeded\n"); -#endif + DebugF("xf86RegisterRootWindowProperty succeeded\n"); return(Success); } diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index cf28ae73e..c4e5898ae 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -316,9 +316,7 @@ xf86CreateRootWindow(WindowPtr pWin) CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr) dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey); -#ifdef DEBUG - ErrorF("xf86CreateRootWindow(%p)\n", pWin); -#endif + DebugF("xf86CreateRootWindow(%p)\n", pWin); if ( pScreen->CreateWindow != xf86CreateRootWindow ) { /* Can't find hook we are hung on */ @@ -365,9 +363,7 @@ xf86CreateRootWindow(WindowPtr pWin) } } -#ifdef DEBUG - ErrorF("xf86CreateRootWindow() returns %d\n", ret); -#endif + DebugF("xf86CreateRootWindow() returns %d\n", ret); return (ret); } @@ -471,10 +467,8 @@ probe_devices_from_device_sections(DriverPtr drvp) if ( (devList[i]->screen == 0) && !xf86CheckPciSlot( pPci ) ) continue; -#ifdef DEBUG - ErrorF("%s: card at %d:%d:%d is claimed by a Device section\n", + DebugF("%s: card at %d:%d:%d is claimed by a Device section\n", drvp->driverName, pPci->bus, pPci->dev, pPci->func); -#endif /* Allocate an entry in the lists to be returned */ entry = xf86ClaimPciSlot(pPci, drvp, device_id, @@ -1246,12 +1240,10 @@ InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv) FatalError("AddScreen/ScreenInit failed for driver %d\n", i); } -#ifdef DEBUG - ErrorF("InitOutput - xf86Screens[%d]->pScreen = %p\n", + DebugF("InitOutput - xf86Screens[%d]->pScreen = %p\n", i, xf86Screens[i]->pScreen ); - ErrorF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", + DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n", i, xf86Screens[i]->pScreen->CreateWindow ); -#endif dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates, xf86CreateRootWindowKey, diff --git a/hw/xfree86/common/xf86Mode.c b/hw/xfree86/common/xf86Mode.c index 522d3c28b..6dcebe15e 100644 --- a/hw/xfree86/common/xf86Mode.c +++ b/hw/xfree86/common/xf86Mode.c @@ -654,10 +654,8 @@ xf86CheckModeForMonitor(DisplayModePtr mode, MonPtr monitor) return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86CheckModeForMonitor(%p %s, %p %s)\n", + DebugF("xf86CheckModeForMonitor(%p %s, %p %s)\n", mode, mode->name, monitor, monitor->id); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -808,10 +806,8 @@ xf86InitialCheckModeForDriver(ScrnInfoPtr scrp, DisplayModePtr mode, return MODE_ERROR; } -#ifdef DEBUG - ErrorF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", + DebugF("xf86InitialCheckModeForDriver(%p, %p %s, %p, 0x%x, %d, %d, %d)\n", scrp, mode, mode->name , clockRanges, strategy, maxPitch, virtualX, virtualY); -#endif /* Some basic mode validity checks */ if (0 >= mode->HDisplay || mode->HDisplay > mode->HSyncStart || @@ -1210,14 +1206,12 @@ xf86ValidateModes(ScrnInfoPtr scrp, DisplayModePtr availModes, range vrefresh[MAX_VREFRESH]; Bool inferred_virtual = FALSE; -#ifdef DEBUG - ErrorF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", + DebugF("xf86ValidateModes(%p, %p, %p, %p,\n\t\t %p, %d, %d, %d, %d, %d, %d, %d, %d, 0x%x)\n", scrp, availModes, modeNames, clockRanges, linePitches, minPitch, maxPitch, pitchInc, minHeight, maxHeight, virtualX, virtualY, apertureSize, strategy ); -#endif /* Some sanity checking */ if (scrp == NULL || scrp->name == NULL || !scrp->monitor || @@ -1860,15 +1854,13 @@ xf86SetCrtcForModes(ScrnInfoPtr scrp, int adjustFlags) do { xf86SetModeCrtc(p, adjustFlags); -#ifdef DEBUG - ErrorF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", + DebugF("%sMode %s: %d (%d) %d %d (%d) %d %d (%d) %d %d (%d) %d\n", (p->type & M_T_DEFAULT) ? "Default " : "", p->name, p->CrtcHDisplay, p->CrtcHBlankStart, p->CrtcHSyncStart, p->CrtcHSyncEnd, p->CrtcHBlankEnd, p->CrtcHTotal, p->CrtcVDisplay, p->CrtcVBlankStart, p->CrtcVSyncStart, p->CrtcVSyncEnd, p->CrtcVBlankEnd, p->CrtcVTotal); -#endif p = p->next; } while (p != NULL && p != scrp->modes); } diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c index d855bd1a8..49b86e73a 100644 --- a/hw/xfree86/common/xf86VidMode.c +++ b/hw/xfree86/common/xf86VidMode.c @@ -56,12 +56,6 @@ static Bool VidModeClose(int i, ScreenPtr pScreen); #endif -#ifdef DEBUG -# define DEBUG_P(x) ErrorF(x"\n"); -#else -# define DEBUG_P(x) /**/ -#endif - Bool VidModeExtensionInit(ScreenPtr pScreen) { @@ -69,7 +63,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModePtr pVidMode; if (!xf86GetVidModeEnabled()) { - DEBUG_P("!xf86GetVidModeEnabled()"); + DebugF("!xf86GetVidModeEnabled()\n"); return FALSE; } @@ -77,7 +71,7 @@ VidModeExtensionInit(ScreenPtr pScreen) if (!dixSetPrivate(&pScreen->devPrivates, VidModeKey, xcalloc(sizeof(VidModeRec), 1))) { - DEBUG_P("xcalloc failed"); + DebugF("xcalloc failed\n"); return FALSE; } @@ -89,7 +83,7 @@ VidModeExtensionInit(ScreenPtr pScreen) VidModeCount++; return TRUE; #else - DEBUG_P("no vidmode extension"); + DebugF("no vidmode extension\n"); return FALSE; #endif } @@ -123,13 +117,13 @@ VidModeAvailable(int scrnIndex) VidModePtr pVidMode; if (VidModeKey == NULL) { - DEBUG_P("VidModeKey == NULL"); + DebugF("VidModeKey == NULL\n"); return FALSE; } pScrn = xf86Screens[scrnIndex]; if (pScrn == NULL) { - DEBUG_P("pScrn == NULL"); + DebugF("pScrn == NULL\n"); return FALSE; } @@ -137,7 +131,7 @@ VidModeAvailable(int scrnIndex) if (pVidMode) return TRUE; else { - DEBUG_P("pVidMode == NULL"); + DebugF("pVidMode == NULL\n"); return FALSE; } } diff --git a/hw/xfree86/common/xf86fbman.c b/hw/xfree86/common/xf86fbman.c index 510c3d8c4..5b8871723 100644 --- a/hw/xfree86/common/xf86fbman.c +++ b/hw/xfree86/common/xf86fbman.c @@ -802,10 +802,10 @@ LinearRemoveCBWrapper(FBAreaPtr area) xfree(pLink); } -#ifdef DEBUG static void -Dump(FBLinearLinkPtr pLink) +DumpDebug(FBLinearLinkPtr pLink) { +#ifdef DEBUG if (!pLink) ErrorF("MMmm, PLINK IS NULL!\n"); while (pLink) { @@ -817,8 +817,8 @@ Dump(FBLinearLinkPtr pLink) pLink = pLink->next; } -} #endif +} static FBLinearPtr AllocateLinear( @@ -889,9 +889,7 @@ AllocateLinear( linear->linear.RemoveLinearCallback = NULL; linear->linear.devPrivate.ptr = NULL; -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return &(linear->linear); } @@ -916,15 +914,11 @@ localAllocateOffscreenLinear( xf86FBScreenKey); /* Try to allocate from linear memory first...... */ -#ifdef DEBUG - ErrorF("ALLOCATING LINEAR\n"); -#endif + DebugF("ALLOCATING LINEAR\n"); if ((linear = AllocateLinear(offman, length, gran, privData))) return linear; -#ifdef DEBUG - ErrorF("NOPE, ALLOCATING AREA\n"); -#endif + DebugF("NOPE, ALLOCATING AREA\n"); if(!(link = xalloc(sizeof(FBLinearLink)))) return NULL; @@ -978,9 +972,7 @@ localAllocateOffscreenLinear( } else xfree(link); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return linear; } @@ -1005,17 +997,13 @@ localFreeOffscreenLinear(FBLinearPtr linear) } if(pLink->area) { /* really an XY area */ -#ifdef DEBUG - ErrorF("FREEING AREA\n"); -#endif + DebugF("FREEING AREA\n"); localFreeOffscreenArea(pLink->area); if(pLinkPrev) pLinkPrev->next = pLink->next; else offman->LinearAreas = pLink->next; xfree(pLink); -#ifdef DEBUG - Dump(offman->LinearAreas); -#endif + DumpDebug(offman->LinearAreas); return; } @@ -1037,10 +1025,8 @@ localFreeOffscreenLinear(FBLinearPtr linear) } } -#ifdef DEBUG - ErrorF("FREEING LINEAR\n"); - Dump(offman->LinearAreas); -#endif + DebugF("FREEING LINEAR\n"); + DumpDebug(offman->LinearAreas); } diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c index 924c2bcb6..4936e75be 100644 --- a/hw/xfree86/common/xf86sbusBus.c +++ b/hw/xfree86/common/xf86sbusBus.c @@ -435,9 +435,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, return actualcards; } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, allocatedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, allocatedInstances); for (i = 0; i < allocatedInstances; i++) { char *promPath = NULL; @@ -494,9 +492,7 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, xfree(promPath); } -#ifdef DEBUG - ErrorF("%s instances found: %d\n", driverName, numClaimedInstances); -#endif + DebugF("%s instances found: %d\n", driverName, numClaimedInstances); /* * Of the claimed instances, check that another driver hasn't already @@ -510,11 +506,9 @@ xf86MatchSbusInstances(const char *driverName, int sbusDevId, if (!xf86CheckSbusSlot(psdp->fbNum)) continue; -#ifdef DEBUG - ErrorF("%s: card at fb%d %08x is claimed by a Device section\n", + DebugF("%s: card at fb%d %08x is claimed by a Device section\n", driverName, psdp->fbNum, psdp->node.node); -#endif - + /* Allocate an entry in the lists to be returned */ numFound++; retEntities = xnfrealloc(retEntities, numFound * sizeof(int)); diff --git a/hw/xfree86/os-support/linux/int10/linux.c b/hw/xfree86/os-support/linux/int10/linux.c index 8274bbbfb..0cf3507c3 100644 --- a/hw/xfree86/os-support/linux/int10/linux.c +++ b/hw/xfree86/os-support/linux/int10/linux.c @@ -115,9 +115,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) if ((!vidMem) || (!sysMem)) { if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if (!sysMem) { -#ifdef DEBUG - ErrorF("Mapping sys bios area\n"); -#endif + DebugF("Mapping sys bios area\n"); if ((sysMem = mmap((void *)(SYS_BIOS), BIOS_SIZE, PROT_READ | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, SYS_BIOS)) @@ -128,9 +126,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } } if (!vidMem) { -#ifdef DEBUG - ErrorF("Mapping VRAM area\n"); -#endif + DebugF("Mapping VRAM area\n"); if ((vidMem = mmap((void *)(V_RAM), VRAM_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED | MAP_FIXED, fd, V_RAM)) @@ -162,9 +158,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) (pointer)xnfcalloc(1, ALLOC_ENTRIES(pagesize)); if (!xf86IsEntityPrimary(entityIndex)) { -#ifdef DEBUG - ErrorF("Mapping high memory area\n"); -#endif + DebugF("Mapping high memory area\n"); if ((high_mem = shmget(counter++, HIGH_MEM_SIZE, IPC_CREAT | SHM_R | SHM_W)) == -1) { if (errno == ENOSYS) @@ -176,9 +170,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) goto error1; } } else { -#ifdef DEBUG - ErrorF("Mapping Video BIOS\n"); -#endif + DebugF("Mapping Video BIOS\n"); videoBiosMapped = TRUE; if ((fd = open(DEV_MEM, O_RDWR, 0)) >= 0) { if ((vMem = mmap((void *)(V_BIOS), SYS_BIOS - V_BIOS, @@ -195,9 +187,7 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) } ((linuxInt10Priv*)pInt->private)->highMem = high_mem; -#ifdef DEBUG - ErrorF("Mapping 640kB area\n"); -#endif + DebugF("Mapping 640kB area\n"); if ((low_mem = shmget(counter++, V_RAM, IPC_CREAT | SHM_R | SHM_W)) == -1) { xf86DrvMsg(screen, X_ERROR, @@ -229,16 +219,12 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) Int10Current = pInt; -#ifdef DEBUG - ErrorF("Mapping int area\n"); -#endif + DebugF("Mapping int area\n"); if (xf86ReadBIOS(0, 0, (unsigned char *)0, LOW_PAGE_SIZE) < 0) { xf86DrvMsg(screen, X_ERROR, "Cannot read int vect\n"); goto error3; } -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); /* * Read in everything between V_BIOS and SYS_BIOS as some system BIOSes * have executable code there. Note that xf86ReadBIOS() can only bring in @@ -246,17 +232,13 @@ xf86ExtendedInitInt10(int entityIndex, int Flags) */ if (!videoBiosMapped) { memset((pointer)V_BIOS, 0, SYS_BIOS - V_BIOS); -#ifdef DEBUG - ErrorF("Reading BIOS\n"); -#endif + DebugF("Reading BIOS\n"); for (cs = V_BIOS; cs < SYS_BIOS; cs += V_BIOS_SIZE) if (xf86ReadBIOS(cs, 0, (pointer)cs, V_BIOS_SIZE) < V_BIOS_SIZE) xf86DrvMsg(screen, X_WARNING, "Unable to retrieve all of segment 0x%06lX.\n", (long)cs); -#ifdef DEBUG - ErrorF("done\n"); -#endif + DebugF("done\n"); } if (xf86IsEntityPrimary(entityIndex) && !(initPrimary(options))) { diff --git a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c index 9412b07a4..34afd9502 100644 --- a/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c +++ b/hw/xfree86/os-support/linux/int10/vm86/linux_vm86.c @@ -172,9 +172,7 @@ vm86_GP_fault(xf86Int10InfoPtr pInt) break; case 0xf4: -#ifdef DEBUG - ErrorF("hlt at %p\n", lina); -#endif + DebugF("hlt at %p\n", lina); return FALSE; case 0x0f: diff --git a/hw/xfree86/os-support/linux/lnx_acpi.c b/hw/xfree86/os-support/linux/lnx_acpi.c index 8e11f4a59..5fad19451 100644 --- a/hw/xfree86/os-support/linux/lnx_acpi.c +++ b/hw/xfree86/os-support/linux/lnx_acpi.c @@ -135,15 +135,11 @@ lnxACPIOpen(void) int r = -1; static int warned = 0; -#ifdef DEBUG - ErrorF("ACPI: OSPMOpen called\n"); -#endif + DebugF("ACPI: OSPMOpen called\n"); if (ACPIihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("ACPI: Opening device\n"); -#endif + DebugF("ACPI: Opening device\n"); if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) > -1) { memset(&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; @@ -172,10 +168,8 @@ static void lnxCloseACPI(void) { int fd; - -#ifdef DEBUG - ErrorF("ACPI: Closing device\n"); -#endif + + DebugF("ACPI: Closing device\n"); if (ACPIihPtr) { fd = xf86RemoveGeneralHandler(ACPIihPtr); shutdown(fd, 2); diff --git a/hw/xfree86/os-support/linux/lnx_apm.c b/hw/xfree86/os-support/linux/lnx_apm.c index 9dae00e57..4ccc7d662 100644 --- a/hw/xfree86/os-support/linux/lnx_apm.c +++ b/hw/xfree86/os-support/linux/lnx_apm.c @@ -160,15 +160,11 @@ lnxAPMOpen(void) { int fd, pfd; -#ifdef DEBUG - ErrorF("APM: OSPMOpen called\n"); -#endif + DebugF("APM: OSPMOpen called\n"); if (APMihPtr || !xf86Info.pmFlag) return NULL; -#ifdef DEBUG - ErrorF("APM: Opening device\n"); -#endif + DebugF("APM: Opening device\n"); if ((fd = open( APM_DEVICE, O_RDWR )) > -1) { if (access( APM_PROC, R_OK ) || ((pfd = open( APM_PROC, O_RDONLY)) == -1)) { @@ -191,10 +187,8 @@ static void lnxCloseAPM(void) { int fd; - -#ifdef DEBUG - ErrorF("APM: Closing device\n"); -#endif + + DebugF("APM: Closing device\n"); if (APMihPtr) { fd = xf86RemoveGeneralHandler(APMihPtr); close(fd); diff --git a/hw/xfree86/os-support/linux/lnx_axp.c b/hw/xfree86/os-support/linux/lnx_axp.c index f7151c8f4..d25999924 100644 --- a/hw/xfree86/os-support/linux/lnx_axp.c +++ b/hw/xfree86/os-support/linux/lnx_axp.c @@ -69,21 +69,15 @@ lnxGetAXP(void) switch (count) { case 1: sscanf(res, "cpu model : %s",cpu); -#ifdef DEBUG - ErrorF("CPU %s\n",cpu); -#endif + DebugF("CPU %s\n",cpu); break; case 5: sscanf(res, "system type : %s",systype); -#ifdef DEBUG - ErrorF("system type : %s\n",systype); -#endif + DebugF("system type : %s\n",systype); break; case 6: sscanf(res, "system variation : %s",sysvari); -#ifdef DEBUG - ErrorF("system variation: %s\n",sysvari); -#endif + DebugF("system variation: %s\n",sysvari); break; } count++; diff --git a/hw/xfree86/os-support/linux/lnx_font.c b/hw/xfree86/os-support/linux/lnx_font.c index e9a5b6aef..5b2696af5 100644 --- a/hw/xfree86/os-support/linux/lnx_font.c +++ b/hw/xfree86/os-support/linux/lnx_font.c @@ -65,9 +65,7 @@ getfont(int *width, int *height, op.flags = 0; SYSCALL(result = ioctl(xf86Info.consoleFd, KDFONTOP, &op)); -#ifdef DEBUG - ErrorF("Console font read: h: %i count: %i\n",op.height,op.charcount); -#endif + DebugF("Console font read: h: %i count: %i\n",op.height,op.charcount); if (!result) { @@ -130,9 +128,7 @@ lnx_savefont(void) int fd; int width = 32, height = 32, charcount = 2048; -#ifdef DEBUG - ErrorF("SAVE font\n"); -#endif + DebugF("SAVE font\n"); #if CHECK_OS_VERSION /* Check if the kernel has full support for this */ @@ -247,9 +243,7 @@ lnx_restorefont(void) { if (lnxfont.data == NULL) return FALSE; -#ifdef DEBUG - ErrorF("RESTORE font\n"); -#endif + DebugF("RESTORE font\n"); #if 0 /* must wack the height to make the kernel reprogram the VGA registers */ if (!setfont(lnxfont.width, lnxfont.height + 1, lnxfont.charcount, diff --git a/hw/xfree86/os-support/linux/lnx_video.c b/hw/xfree86/os-support/linux/lnx_video.c index ed3576638..73409dfba 100644 --- a/hw/xfree86/os-support/linux/lnx_video.c +++ b/hw/xfree86/os-support/linux/lnx_video.c @@ -292,9 +292,7 @@ mtrr_add_wc_region(int screenNum, unsigned long base, unsigned long size, lbase = lbase >> 1, d_size <<= 1); while (d_size > n_size) d_size = d_size >> 1; -#ifdef DEBUG - ErrorF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); -#endif + DebugF("WC_BASE: 0x%lx WC_END: 0x%lx\n",base,base+d_size-1); n_base += d_size; n_size -= d_size; if (n_size) { @@ -424,11 +422,9 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx \n", + DebugF("base: %lx, realBase: %lx, alignOff: %lx \n", Base,realBase,alignOff); -#endif - + #if defined(__ia64__) || defined(__arm__) || defined(__s390__) #ifndef MAP_WRITECOMBINED #define MAP_WRITECOMBINED 0x00010000 @@ -469,9 +465,7 @@ mapVidMem(int ScreenNum, unsigned long Base, unsigned long Size, int flags) " (0x%08lx,0x%lx) (%s)\n", Base, Size, strerror(errno)); } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (char *)base + alignOff; } #endif /* !(__sparc__) */ @@ -481,10 +475,8 @@ unmapVidMem(int ScreenNum, pointer Base, unsigned long Size) { memType alignOff = (memType)Base - ((memType)Base & ~(getpagesize() - 1)); - -#ifdef DEBUG - ErrorF("alignment offset: %lx\n",alignOff); -#endif + + DebugF("alignment offset: %lx\n",alignOff); munmap((caddr_t)((memType)Base - alignOff), (Size + alignOff)); } diff --git a/hw/xfree86/os-support/sco/sco_video.c b/hw/xfree86/os-support/sco/sco_video.c index 7edf71db3..f63b71df8 100644 --- a/hw/xfree86/os-support/sco/sco_video.c +++ b/hw/xfree86/os-support/sco/sco_video.c @@ -124,9 +124,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) realBase = Base & ~(getpagesize() - 1); alignOff = Base - realBase; -#ifdef DEBUG - ErrorF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); -#endif + DebugF("base: %lx, realBase: %lx, alignOff: %lx\n", Base,realBase,alignOff); base = mmap((caddr_t)0, Size + alignOff, (flags & VIDMEM_READONLY) ? PROT_READ : (PROT_READ | PROT_WRITE), @@ -138,9 +136,7 @@ mapVidMemMMAP(int ScreenNum, unsigned long Base, unsigned long Size, int flags) return 0; /* NOTREACHED */ } -#ifdef DEBUG - ErrorF("base: %lx aligned base: %lx\n",base, base + alignOff); -#endif + DebugF("base: %lx aligned base: %lx\n",base, base + alignOff); return (pointer)((char *)base + alignOff); } diff --git a/hw/xfree86/os-support/shared/bios_mmap.c b/hw/xfree86/os-support/shared/bios_mmap.c index 96d56bf1c..40afd5b8e 100644 --- a/hw/xfree86/os-support/shared/bios_mmap.c +++ b/hw/xfree86/os-support/shared/bios_mmap.c @@ -68,10 +68,8 @@ xf86ReadBIOS(unsigned long Base, unsigned long Offset, unsigned char *Buf, close(fd); return(-1); } -#ifdef DEBUG - ErrorF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", + DebugF("xf86ReadBIOS: BIOS at 0x%08x has signature 0x%04x\n", Base, ptr[0] | (ptr[1] << 8)); -#endif (void)memcpy(Buf, (void *)(ptr + Offset), Len); (void)munmap((caddr_t)ptr, mlen); (void)close(fd); diff --git a/hw/xfree86/os-support/shared/posix_tty.c b/hw/xfree86/os-support/shared/posix_tty.c index 697d0e51c..bf1bb03a3 100644 --- a/hw/xfree86/os-support/shared/posix_tty.c +++ b/hw/xfree86/os-support/shared/posix_tty.c @@ -400,17 +400,14 @@ int xf86ReadSerial (int fd, void *buf, int count) { int r; -#ifdef DEBUG int i; -#endif + SYSCALL (r = read (fd, buf, count)); -#ifdef DEBUG - ErrorF("ReadingSerial: 0x%x", + DebugF("ReadingSerial: 0x%x", (unsigned char)*(((unsigned char *)buf))); for (i = 1; i < r; i++) - ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); + DebugF("\n"); return (r); } @@ -418,14 +415,12 @@ int xf86WriteSerial (int fd, const void *buf, int count) { int r; -#ifdef DEBUG int i; - ErrorF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); + DebugF("WritingSerial: 0x%x",(unsigned char)*(((unsigned char *)buf))); for (i = 1; i < count; i++) ErrorF(", 0x%x",(unsigned char)*(((unsigned char *)buf) + i)); - ErrorF("\n"); -#endif + DebugF("\n"); SYSCALL (r = write (fd, buf, count)); return (r); } @@ -482,9 +477,7 @@ xf86FlushInput(int fd) struct timeval timeout; char c[4]; -#ifdef DEBUG - ErrorF("FlushingSerial\n"); -#endif + DebugF("FlushingSerial\n"); if (tcflush(fd, TCIFLUSH) == 0) return 0; diff --git a/hw/xfree86/ramdac/TI.c b/hw/xfree86/ramdac/TI.c index f421fc39a..1c541d76b 100644 --- a/hw/xfree86/ramdac/TI.c +++ b/hw/xfree86/ramdac/TI.c @@ -115,10 +115,8 @@ TIramdacCalculateMNPForClock( VCO = 8.0 * IntRef * best_m / best_n; ActualClock = VCO / ( 1 << p ); -#ifdef DEBUG - ErrorF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", + DebugF( "f_out=%ld f_vco=%.1f n=%d m=%d p=%d\n", ActualClock, VCO, *rN, *rM, *rP); -#endif return (ActualClock); } diff --git a/hw/xfree86/vbe/vbeModes.c b/hw/xfree86/vbe/vbeModes.c index fb730a708..1a4d2407c 100644 --- a/hw/xfree86/vbe/vbeModes.c +++ b/hw/xfree86/vbe/vbeModes.c @@ -414,11 +414,9 @@ VBESetModeParameters(ScrnInfoPtr pScrn, vbeInfoPtr pVbe) data->block->PixelClock = best->Clock * 1000; /* XXX May not have this. */ clock = VBEGetPixelClock(pVbe, data->mode, data->block->PixelClock); -#ifdef DEBUG - ErrorF("Setting clock %.2fMHz, closest is %.2fMHz\n", + DebugF("Setting clock %.2fMHz, closest is %.2fMHz\n", (double)data->block->PixelClock / 1000000.0, (double)clock / 1000000.0); -#endif if (clock) data->block->PixelClock = clock; data->mode |= (1 << 11); diff --git a/hw/xfree86/vgahw/vgaHW.c b/hw/xfree86/vgahw/vgaHW.c index 9d466e3dc..004376b75 100644 --- a/hw/xfree86/vgahw/vgaHW.c +++ b/hw/xfree86/vgahw/vgaHW.c @@ -1025,32 +1025,24 @@ vgaHWSaveMode(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 0; i < save->numCRTC; i++) { save->CRTC[i] = hwp->readCrtc(hwp, i); -#ifdef DEBUG - ErrorF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); -#endif + DebugF("CRTC[0x%02x] = 0x%02x\n", i, save->CRTC[i]); } hwp->enablePalette(hwp); for (i = 0; i < save->numAttribute; i++) { save->Attribute[i] = hwp->readAttr(hwp, i); -#ifdef DEBUG - ErrorF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); -#endif + DebugF("Attribute[0x%02x] = 0x%02x\n", i, save->Attribute[i]); } hwp->disablePalette(hwp); for (i = 0; i < save->numGraphics; i++) { save->Graphics[i] = hwp->readGr(hwp, i); -#ifdef DEBUG - ErrorF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); -#endif + DebugF("Graphics[0x%02x] = 0x%02x\n", i, save->Graphics[i]); } for (i = 1; i < save->numSequencer; i++) { save->Sequencer[i] = hwp->readSeq(hwp, i); -#ifdef DEBUG - ErrorF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); -#endif + DebugF("Sequencer[0x%02x] = 0x%02x\n", i, save->Sequencer[i]); } } @@ -1088,18 +1080,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) hwp->writeDacReadAddr(hwp, 0x00); for (i = 0; i < 6; i++) { save->DAC[i] = hwp->readDacData(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } /* @@ -1131,18 +1121,16 @@ vgaHWSaveColormap(ScrnInfoPtr scrninfp, vgaRegPtr save) for (i = 6; i < 768; i++) { save->DAC[i] = hwp->readDacData(hwp); DACDelay(hwp); -#ifdef DEBUG switch (i % 3) { case 0: - ErrorF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); + DebugF("DAC[0x%02x] = 0x%02x, ", i / 3, save->DAC[i]); break; case 1: - ErrorF("0x%02x, ", save->DAC[i]); + DebugF("0x%02x, ", save->DAC[i]); break; case 2: - ErrorF("0x%02x\n", save->DAC[i]); + DebugF("0x%02x\n", save->DAC[i]); } -#endif } } @@ -1772,9 +1760,7 @@ vgaHWMapMem(ScrnInfoPtr scrp) * XXX This is not correct but we do it * for now. */ -#ifdef DEBUG - ErrorF("Mapping VGAMem\n"); -#endif + DebugF("Mapping VGAMem\n"); hwp->Base = xf86MapDomainMemory(scr_index, VIDMEM_MMIO_32BIT, hwp->dev, hwp->MapPhys, hwp->MapSize); return hwp->Base != NULL; @@ -1790,9 +1776,7 @@ vgaHWUnmapMem(ScrnInfoPtr scrp) if (hwp->Base == NULL) return; -#ifdef DEBUG - ErrorF("Unmapping VGAMem\n"); -#endif + DebugF("Unmapping VGAMem\n"); xf86UnMapVidMem(scr_index, hwp->Base, hwp->MapSize); hwp->Base = NULL; } From 8331bde0adeccefb275c4d707e7b2cb1d95b1581 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Fri, 15 May 2009 21:36:28 +0100 Subject: [PATCH 61/89] Cygwin/X: link with libmain.a to provide main() Commit 987579c930bda803427a28cb82773c389f5110d6 moves main.c into into libmain.a to be linked with separately, and updates the various DDXs to link with libmain.a, except Xwin, which also needs this change. Signed-off-by: Jon TURNEY --- hw/xwin/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am index 504c2a6cd..4f9513088 100644 --- a/hw/xwin/Makefile.am +++ b/hw/xwin/Makefile.am @@ -147,7 +147,7 @@ XWin_SOURCES = $(SRCS) INCLUDES = -I$(top_srcdir)/miext/rootless XWin_DEPENDENCIES = $(XWIN_LIBS) -XWin_LDADD = $(XWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) +XWin_LDADD = $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS) .rc.o: $(WINDRES) --use-temp-file -i $< --input-format=rc -o $@ -O coff -DPROJECT_NAME=\"$(VENDOR_NAME_SHORT)\" From 510cbd43cd4e34bd459e8f74ab2855714b4ca95d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:48:57 +0200 Subject: [PATCH 62/89] EXA: Defragment offscreen memory. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At most once per second, under the following circumstances: * We can't satisfy an offscreen memory allocation, but there seems to be enough offscreen memory available in total. or * The server has been idle for at least 100ms, and there is more than one available offscreen area. Signed-off-by: Michel Dänzer --- exa/exa.c | 53 ++++++++++ exa/exa.h | 13 +++ exa/exa_offscreen.c | 231 ++++++++++++++++++++++++++++++++++++++++++-- exa/exa_priv.h | 8 ++ 4 files changed, 297 insertions(+), 8 deletions(-) diff --git a/exa/exa.c b/exa/exa.c index 2de348a8d..089350b24 100644 --- a/exa/exa.c +++ b/exa/exa.c @@ -1048,6 +1048,50 @@ exaCreateScreenResources(ScreenPtr pScreen) return TRUE; } +static void +ExaBlockHandler(int screenNum, pointer blockData, pointer pTimeout, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, BlockHandler); + (*pScreen->BlockHandler) (screenNum, blockData, pTimeout, pReadmask); + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + + /* Try and keep the offscreen memory area tidy every now and then (at most + * once per second) when the server has been idle for at least 100ms. + */ + if (pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + pExaScr->nextDefragment = now + + max(100, (INT32)(pExaScr->lastDefragment + 1000 - now)); + AdjustWaitForDelay(pTimeout, pExaScr->nextDefragment - now); + } +} + +static void +ExaWakeupHandler(int screenNum, pointer wakeupData, unsigned long result, + pointer pReadmask) +{ + ScreenPtr pScreen = screenInfo.screens[screenNum]; + ExaScreenPriv(pScreen); + + unwrap(pExaScr, pScreen, WakeupHandler); + (*pScreen->WakeupHandler) (screenNum, wakeupData, result, pReadmask); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + + if (result == 0 && pExaScr->numOffscreenAvailable > 1) { + CARD32 now = GetTimeInMillis(); + + if ((int)(now - pExaScr->nextDefragment) > 0) { + ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + } + } +} + /** * exaCloseScreen() unwraps its wrapped screen functions and tears down EXA's * screen private, before calling down to the next CloseSccreen. @@ -1063,6 +1107,10 @@ exaCloseScreen(int i, ScreenPtr pScreen) if (ps->Glyphs == exaGlyphs) exaGlyphsFini(pScreen); + if (pScreen->BlockHandler == ExaBlockHandler) + unwrap(pExaScr, pScreen, BlockHandler); + if (pScreen->WakeupHandler == ExaWakeupHandler) + unwrap(pExaScr, pScreen, WakeupHandler); unwrap(pExaScr, pScreen, CreateGC); unwrap(pExaScr, pScreen, CloseScreen); unwrap(pExaScr, pScreen, GetImage); @@ -1223,6 +1271,11 @@ exaDriverInit (ScreenPtr pScreen, /* * Replace various fb screen functions */ + if ((pExaScr->info->flags & EXA_OFFSCREEN_PIXMAPS) && + !(pExaScr->info->flags & EXA_HANDLES_PIXMAPS)) { + wrap(pExaScr, pScreen, BlockHandler, ExaBlockHandler); + wrap(pExaScr, pScreen, WakeupHandler, ExaWakeupHandler); + } wrap(pExaScr, pScreen, CreateGC, exaCreateGC); wrap(pExaScr, pScreen, CloseScreen, exaCloseScreen); wrap(pExaScr, pScreen, GetImage, exaGetImage); diff --git a/exa/exa.h b/exa/exa.h index 3e1f1c75a..0701ec98f 100644 --- a/exa/exa.h +++ b/exa/exa.h @@ -66,6 +66,9 @@ struct _ExaOffscreenArea { ExaOffscreenArea *next; unsigned eviction_cost; + + ExaOffscreenArea *prev; /* Double-linked list for defragmentation */ + int align; /* required alignment */ }; /** @@ -744,6 +747,16 @@ typedef struct _ExaDriver { */ #define EXA_SUPPORTS_PREPARE_AUX (1 << 4) +/** + * EXA_SUPPORTS_OFFSCREEN_OVERLAPS indicates to EXA that the driver Copy hooks + * can handle the source and destination occupying overlapping offscreen memory + * areas. This allows the offscreen memory defragmentation code to defragment + * areas where the defragmented position overlaps the fragmented position. + * + * Typically this is supported by traditional 2D engines but not by 3D engines. + */ +#define EXA_SUPPORTS_OFFSCREEN_OVERLAPS (1 << 5) + /** @} */ /* in exa.c */ diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index d7198cbdc..043fd83ae 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -172,7 +172,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0; + int tmp, real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -213,6 +213,35 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, /* does it fit? */ if (real_size <= area->size) break; + + free_total += area->size; + + if (area->size > largest_avail) + largest_avail = area->size; + } + + if (!area && free_total >= size) { + CARD32 now = GetTimeInMillis(); + + /* Don't defragment more than once per second, to avoid adding more + * overhead than we're trying to prevent + */ + if (abs((INT32) (now - pExaScr->lastDefragment)) > 1000) { + area = ExaOffscreenDefragment(pScreen); + pExaScr->lastDefragment = now; + + if (area) { + /* adjust size to match alignment requirement */ + real_size = size; + tmp = area->base_offset % align; + if (tmp) + real_size += (align - tmp); + + /* does it fit? */ + if (real_size > area->size) + area = NULL; + } + } } if (!area) @@ -255,16 +284,31 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (!new_area) return NULL; new_area->base_offset = area->base_offset + real_size; + +#if DEBUG_OFFSCREEN + if (new_area->base_offset >= pExaScr->info->memorySize) + ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", + new_area->base_offset); +#endif + new_area->offset = new_area->base_offset; + new_area->align = 0; new_area->size = area->size - real_size; new_area->state = ExaOffscreenAvail; new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; new_area->next = area->next; + if (area->next) + area->next->prev = new_area; + else + pExaScr->info->offScreenAreas->prev = new_area; area->next = new_area; + new_area->prev = area; area->size = real_size; - } + } else + pExaScr->numOffscreenAvailable--; + /* * Mark this area as in use */ @@ -277,6 +321,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, area->last_use = pExaScr->offScreenCounter++; area->offset = (area->base_offset + align - 1); area->offset -= area->offset % align; + area->align = align; ExaOffscreenValidate (pScreen); @@ -391,7 +436,7 @@ exaEnableDisableFBAccess (int index, Bool enable) /* merge the next free area into this one */ static void -ExaOffscreenMerge (ExaOffscreenArea *area) +ExaOffscreenMerge (ExaScreenPrivPtr pExaScr, ExaOffscreenArea *area) { ExaOffscreenArea *next = area->next; @@ -399,7 +444,13 @@ ExaOffscreenMerge (ExaOffscreenArea *area) area->size += next->size; /* frob pointer */ area->next = next->next; + if (area->next) + area->next->prev = area; + else + pExaScr->info->offScreenAreas->prev = area; xfree (next); + + pExaScr->numOffscreenAvailable--; } /** @@ -436,19 +487,19 @@ exaOffscreenFree (ScreenPtr pScreen, ExaOffscreenArea *area) if (area == pExaScr->info->offScreenAreas) prev = NULL; else - for (prev = pExaScr->info->offScreenAreas; prev; prev = prev->next) - if (prev->next == area) - break; + prev = area->prev; + + pExaScr->numOffscreenAvailable++; /* link with next area if free */ if (next && next->state == ExaOffscreenAvail) - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); /* link with prev area if free */ if (prev && prev->state == ExaOffscreenAvail) { area = prev; - ExaOffscreenMerge (area); + ExaOffscreenMerge (pExaScr, area); } ExaOffscreenValidate (pScreen); @@ -468,6 +519,167 @@ ExaOffscreenMarkUsed (PixmapPtr pPixmap) pExaPixmap->area->last_use = pExaScr->offScreenCounter++; } +/** + * Defragment offscreen memory by compacting allocated areas at the end of it, + * leaving the total amount of memory available as a single area at the + * beginning (when there are no pinned allocations). + */ +_X_HIDDEN ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen) +{ + ExaScreenPriv (pScreen); + ExaOffscreenArea *area, *largest_available = NULL; + int largest_size = 0; + PixmapPtr pDstPix; + ExaPixmapPrivPtr pExaDstPix; + + pDstPix = (*pScreen->CreatePixmap) (pScreen, 0, 0, 0, 0); + + if (!pDstPix) + return NULL; + + pExaDstPix = ExaGetPixmapPriv (pDstPix); + pExaDstPix->offscreen = TRUE; + + for (area = pExaScr->info->offScreenAreas->prev; + area != pExaScr->info->offScreenAreas; + ) + { + ExaOffscreenArea *prev = area->prev; + PixmapPtr pSrcPix; + ExaPixmapPrivPtr pExaSrcPix; + Bool save_offscreen; + int save_pitch; + + if (area->state != ExaOffscreenAvail || + prev->state == ExaOffscreenLocked || + (prev->state == ExaOffscreenRemovable && + prev->save != exaPixmapSave)) { + area = prev; + continue; + } + + if (prev->state == ExaOffscreenAvail) { + if (area == largest_available) { + largest_available = prev; + largest_size += prev->size; + } + area = prev; + ExaOffscreenMerge (pExaScr, area); + continue; + } + + if (area->size > largest_size) { + largest_available = area; + largest_size = area->size; + } + + pSrcPix = prev->privData; + pExaSrcPix = ExaGetPixmapPriv (pSrcPix); + + pExaDstPix->fb_ptr = pExaScr->info->memoryBase + + area->base_offset + area->size - prev->size + prev->base_offset - + prev->offset; + pExaDstPix->fb_ptr -= (unsigned long)pExaDstPix->fb_ptr % prev->align; + + if (pExaDstPix->fb_ptr <= pExaSrcPix->fb_ptr) { + area = prev; + continue; + } + + if (!(pExaScr->info->flags & EXA_SUPPORTS_OFFSCREEN_OVERLAPS) && + (pExaSrcPix->fb_ptr + prev->size) > pExaDstPix->fb_ptr) { + area = prev; + continue; + } + + save_offscreen = pExaSrcPix->offscreen; + save_pitch = pSrcPix->devKind; + + pExaSrcPix->offscreen = TRUE; + pSrcPix->devKind = pExaSrcPix->fb_pitch; + + pDstPix->drawable.width = pSrcPix->drawable.width; + pDstPix->devKind = pSrcPix->devKind; + pDstPix->drawable.height = pSrcPix->drawable.height; + pDstPix->drawable.depth = pSrcPix->drawable.depth; + pDstPix->drawable.bitsPerPixel = pSrcPix->drawable.bitsPerPixel; + + if (!pExaScr->info->PrepareCopy (pSrcPix, pDstPix, -1, -1, GXcopy, ~0)) { + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + area = prev; + continue; + } + + pExaScr->info->Copy (pDstPix, 0, 0, 0, 0, pDstPix->drawable.width, + pDstPix->drawable.height); + pExaScr->info->DoneCopy (pDstPix); + exaMarkSync (pScreen); + + DBG_OFFSCREEN(("Before swap: prev=0x%08x-0x%08x-0x%08x area=0x%08x-0x%08x-0x%08x\n", + prev->base_offset, prev->offset, prev->base_offset + prev->size, + area->base_offset, area->offset, area->base_offset + area->size)); + + /* Calculate swapped area offsets and sizes */ + area->base_offset = prev->base_offset; + area->offset = area->base_offset; + prev->offset += pExaDstPix->fb_ptr - pExaSrcPix->fb_ptr; + assert(prev->offset >= pExaScr->info->offScreenBase && + prev->offset < pExaScr->info->memorySize); + prev->base_offset = prev->offset; + if (area->next) + prev->size = area->next->base_offset - prev->base_offset; + else + prev->size = pExaScr->info->memorySize - prev->base_offset; + area->size = prev->base_offset - area->base_offset; + + DBG_OFFSCREEN(("After swap: area=0x%08x-0x%08x-0x%08x prev=0x%08x-0x%08x-0x%08x\n", + area->base_offset, area->offset, area->base_offset + area->size, + prev->base_offset, prev->offset, prev->base_offset + prev->size)); + + /* Swap areas in list */ + if (area->next) + area->next->prev = prev; + else + pExaScr->info->offScreenAreas->prev = prev; + if (prev->prev->next) + prev->prev->next = area; + else + pExaScr->info->offScreenAreas = area; + prev->next = area->next; + area->next = prev; + area->prev = prev->prev; + prev->prev = area; + if (!area->prev->next) + pExaScr->info->offScreenAreas = area; + +#if DEBUG_OFFSCREEN + if (prev->prev == prev || prev->next == prev) + ErrorF("Whoops, prev points to itself!\n"); + + if (area->prev == area || area->next == area) + ErrorF("Whoops, area points to itself!\n"); +#endif + + pExaSrcPix->fb_ptr = pExaDstPix->fb_ptr; + pExaSrcPix->offscreen = save_offscreen; + pSrcPix->devKind = save_pitch; + } + + pDstPix->drawable.width = 0; + pDstPix->drawable.height = 0; + pDstPix->drawable.depth = 0; + pDstPix->drawable.bitsPerPixel = 0; + + (*pScreen->DestroyPixmap) (pDstPix); + + if (area->state == ExaOffscreenAvail && area->size > largest_size) + return area; + + return largest_available; +} + /** * exaOffscreenInit initializes the offscreen memory manager. * @@ -491,15 +703,18 @@ exaOffscreenInit (ScreenPtr pScreen) area->state = ExaOffscreenAvail; area->base_offset = pExaScr->info->offScreenBase; area->offset = area->base_offset; + area->align = 0; area->size = pExaScr->info->memorySize - area->base_offset; area->save = NULL; area->next = NULL; + area->prev = area; area->last_use = 0; area->eviction_cost = 0; /* Add it to the free areas */ pExaScr->info->offScreenAreas = area; pExaScr->offScreenCounter = 1; + pExaScr->numOffscreenAvailable = 1; ExaOffscreenValidate (pScreen); diff --git a/exa/exa_priv.h b/exa/exa_priv.h index 874e7e987..b3df1a586 100644 --- a/exa/exa_priv.h +++ b/exa/exa_priv.h @@ -145,6 +145,8 @@ typedef struct { typedef void (*EnableDisableFBAccessProcPtr)(int, Bool); typedef struct { ExaDriverPtr info; + ScreenBlockHandlerProcPtr SavedBlockHandler; + ScreenWakeupHandlerProcPtr SavedWakeupHandler; CreateGCProcPtr SavedCreateGC; CloseScreenProcPtr SavedCloseScreen; GetImageProcPtr SavedGetImage; @@ -170,6 +172,9 @@ typedef struct { unsigned disableFbCount; Bool optimize_migration; unsigned offScreenCounter; + unsigned numOffscreenAvailable; + CARD32 lastDefragment; + CARD32 nextDefragment; /* Store all accessed pixmaps, so we can check for duplicates. */ PixmapPtr prepare_access[6]; @@ -460,6 +465,9 @@ ExaOffscreenSwapOut (ScreenPtr pScreen); void ExaOffscreenSwapIn (ScreenPtr pScreen); +ExaOffscreenArea* +ExaOffscreenDefragment (ScreenPtr pScreen); + Bool exaOffscreenInit(ScreenPtr pScreen); From 4addfcd633484b7f53b5df1b92bfca8bfc1dc48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 18 May 2009 17:53:35 +0200 Subject: [PATCH 63/89] EXA: Allocate from the end of free offscreen memory rather than from the start. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way we don't always need to scan over previously allocated areas when looking for an available one, and there might be less fragmentation. Signed-off-by: Michel Dänzer --- exa/exa_offscreen.c | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/exa/exa_offscreen.c b/exa/exa_offscreen.c index 043fd83ae..eb53b2a30 100644 --- a/exa/exa_offscreen.c +++ b/exa/exa_offscreen.c @@ -93,7 +93,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) { ExaOffscreenArea *begin, *end, *best; unsigned cost, best_cost; - int avail, real_size, tmp; + int avail, real_size; best_cost = UINT_MAX; begin = end = pExaScr->info->offScreenAreas; @@ -111,10 +111,7 @@ exaFindAreaToEvict(ExaScreenPrivPtr pExaScr, int size, int align) break; /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = begin->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (begin->base_offset + begin->size - size) % align; while (avail < real_size && end != NULL) { @@ -172,7 +169,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, { ExaOffscreenArea *area; ExaScreenPriv (pScreen); - int tmp, real_size = 0, free_total = 0, largest_avail = 0; + int real_size = 0, free_total = 0, largest_avail = 0; #if DEBUG_OFFSCREEN static int number = 0; ErrorF("================= ============ allocating a new pixmap %d\n", ++number); @@ -205,10 +202,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, continue; /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size <= area->size) @@ -232,10 +226,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, if (area) { /* adjust size to match alignment requirement */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* does it fit? */ if (real_size > area->size) @@ -257,10 +248,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, } /* adjust size needed to account for alignment loss for this area */ - real_size = size; - tmp = area->base_offset % align; - if (tmp) - real_size += (align - tmp); + real_size = size + (area->base_offset + area->size - size) % align; /* * Kick out first area if in use @@ -283,13 +271,7 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, ExaOffscreenArea *new_area = xalloc (sizeof (ExaOffscreenArea)); if (!new_area) return NULL; - new_area->base_offset = area->base_offset + real_size; - -#if DEBUG_OFFSCREEN - if (new_area->base_offset >= pExaScr->info->memorySize) - ErrorF("new_area->base_offset = 0x%08x >= memorySize!\n", - new_area->base_offset); -#endif + new_area->base_offset = area->base_offset; new_area->offset = new_area->base_offset; new_area->align = 0; @@ -298,13 +280,14 @@ exaOffscreenAlloc (ScreenPtr pScreen, int size, int align, new_area->save = NULL; new_area->last_use = 0; new_area->eviction_cost = 0; - new_area->next = area->next; - if (area->next) - area->next->prev = new_area; + new_area->next = area; + new_area->prev = area->prev; + if (area->prev->next) + area->prev->next = new_area; else - pExaScr->info->offScreenAreas->prev = new_area; - area->next = new_area; - new_area->prev = area; + pExaScr->info->offScreenAreas = new_area; + area->prev = new_area; + area->base_offset = new_area->base_offset + new_area->size; area->size = real_size; } else pExaScr->numOffscreenAvailable--; From 3cea176d5abcb0f14eefbdcbe17fed0847524dd4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:30:33 -0400 Subject: [PATCH 64/89] xace: Fix a bad device access hook call. Add a proper access mode, and reverse the logic of the return value. Zero ("Success") is returned on success from the hook calls. Signed-off-by: Eamon Walsh --- dix/events.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dix/events.c b/dix/events.c index 157f9a8a1..b3caec8be 100644 --- a/dix/events.c +++ b/dix/events.c @@ -4088,10 +4088,10 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) { xKeymapEvent ke; ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; - if (XaceHook(XACE_DEVICE_ACCESS, client, dev, FALSE)) - memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); - else + if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); + else + memmove((char *)&ke.map[0], (char *)&dev->key->down[1], 31); ke.type = KeymapNotify; DeliverEventsToWindow(dev, pWin, (xEvent *)&ke, 1, From 77e90261d5f91e1170c6e02deb0e3739c24fcfd6 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 19:36:03 -0400 Subject: [PATCH 65/89] dix/events.c: Use wClient where appropriate. Signed-off-by: Eamon Walsh --- dix/events.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dix/events.c b/dix/events.c index b3caec8be..fd9337682 100644 --- a/dix/events.c +++ b/dix/events.c @@ -3989,8 +3989,7 @@ CoreEnterLeaveEvent( if ((type == EnterNotify) && (mask & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = grab ? rClient(grab) - : clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = grab ? rClient(grab) : wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -4087,7 +4086,7 @@ CoreFocusEvent(DeviceIntPtr dev, int type, int mode, int detail, WindowPtr pWin) ((pWin->eventMask | wOtherEventMasks(pWin)) & KeymapStateMask)) { xKeymapEvent ke; - ClientPtr client = clients[CLIENT_ID(pWin->drawable.id)]; + ClientPtr client = wClient(pWin); if (XaceHook(XACE_DEVICE_ACCESS, client, dev, DixReadAccess)) bzero((char *)&ke.map[0], 31); else @@ -5181,7 +5180,7 @@ DeleteWindowFromAnyEvents(WindowPtr pWin, Bool freeResources) to None */ #ifdef NOTDEF - || clients[CLIENT_ID(parent->drawable.id)]->clientGone + || wClient(parent)->clientGone #endif ); DoFocusEvents(keybd, pWin, parent, focusEventMode); From 22a33a7250f879b8f3eb84176a1dc57027d8cfe4 Mon Sep 17 00:00:00 2001 From: Eamon Walsh Date: Tue, 19 May 2009 22:45:26 -0400 Subject: [PATCH 66/89] glx: Register names for the GLX resource types. Signed-off-by: Eamon Walsh --- glx/glxext.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glx/glxext.c b/glx/glxext.c index 6bc7bef8e..bdacf8865 100644 --- a/glx/glxext.c +++ b/glx/glxext.c @@ -36,6 +36,7 @@ #include "glxserver.h" #include #include +#include #include "privates.h" #include #include "g_disptab.h" @@ -317,6 +318,10 @@ void GlxExtensionInit(void) __glXDrawableRes = CreateNewResourceType((DeleteType)DrawableGone); __glXSwapBarrierRes = CreateNewResourceType((DeleteType)SwapBarrierGone); + RegisterResourceName(__glXContextRes, "GLXContext"); + RegisterResourceName(__glXDrawableRes, "GLXDrawable"); + RegisterResourceName(__glXSwapBarrierRes, "GLXSwapBarrier"); + if (!dixRequestPrivate(glxClientPrivateKey, sizeof (__GLXclientState))) return; if (!AddCallback (&ClientStateCallback, glxClientCallback, 0)) From 79138eec1b49cbaca6a16f2bdd8579b5828aeb28 Mon Sep 17 00:00:00 2001 From: Matthias Hopf Date: Tue, 10 Mar 2009 16:03:26 +0100 Subject: [PATCH 67/89] randr: Setting gamma: inverse logic looks more sane --- hw/xfree86/modes/xf86Crtc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c index 0ab2f3df9..353b26874 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c @@ -353,7 +353,7 @@ xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotati } /* Only upload when needed, to avoid unneeded delays. */ - if (!crtc->active) + if (crtc->active) crtc->funcs->gamma_set(crtc, crtc->gamma_red, crtc->gamma_green, crtc->gamma_blue, crtc->gamma_size); From a2c5ee36b21c2ee5c0468f1b251e74c1412dbecb Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 21 May 2009 10:20:48 -0400 Subject: [PATCH 68/89] EDID: Be more cautious about finding vendor blocks. Many old monitors zero-fill the detailed descriptors, so check for that to avoid a useless warning like: (WW) RADEON(0): Unknown vendor-specific block 0 --- hw/xfree86/ddc/interpret_edid.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index 3edfd1fb5..bdcc92e64 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -285,6 +285,8 @@ get_std_timing_section(Uchar *c, struct std_timings *r, } } +static const unsigned char empty_block[18]; + static void get_dt_md_section(Uchar *c, struct edid_version *ver, struct detailed_monitor_section *det_mon) @@ -336,10 +338,10 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, det_mon[i].type = DS_UNKOWN; break; } - if (c[3] <= 0x0F) { + if (c[3] <= 0x0F && memcmp(c, empty_block, sizeof(empty_block))) { det_mon[i].type = DS_VENDOR + c[3]; } - } else { + } else { det_mon[i].type = DT; get_detailed_timing_section(c,&det_mon[i].section.d_timings); } From a8bd1e1f96d8e5380972a7dce8d9940cd912aa09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Thu, 21 May 2009 18:21:28 -0400 Subject: [PATCH 69/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of drawable of the alpha map. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index 777f111e5..fe1b8dad5 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From cabff9007a4abad026b450a4aab155c7bcd94326 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 15 May 2009 08:33:07 +1000 Subject: [PATCH 70/89] xfree86: treat other drivers as mouse drivers in the config. Historically, if no input device was referenced in the ServerLayout, the server would pick the first "mouse" device found in the xorg.conf. This patch gives evdev, synaptics, vmmouse and void the same status. If there is a section in the config file using this driver - use it as the core pointer. Device selection is in driver-order, not in config-order. If a "mouse" device is listed after a "synaptics" device, the "mouse" device gets preference. This replicates the original behaviour. This code only takes effect if AllowEmptyInput is off and there is no core pointer in the server layout. Signed-off-by: Peter Hutterer --- hw/xfree86/common/xf86Config.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 73235a974..165958b07 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1090,8 +1090,8 @@ Bool xf86DRI2Enabled(void) * 2. The "CorePointer" and "CoreKeyboard" InputDevices referred to by * the active ServerLayout. * 3. The first InputDevices marked as "CorePointer" and "CoreKeyboard". - * 4. The first InputDevices that use the 'mouse' and 'keyboard' or 'kbd' - * drivers. + * 4. The first InputDevices that use 'keyboard' or 'kbd' and a valid mouse + * driver (mouse, synaptics, evdev, vmmouse, void) * 5. Default devices with an empty (default) configuration. These defaults * will reference the 'mouse' and 'keyboard' drivers. */ @@ -1110,6 +1110,8 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) int count = 0; MessageType from = X_DEFAULT; int found = 0; + const char *mousedrivers[] = { "mouse", "synaptics", "evdev", "vmmouse", + "void", NULL }; /* * First check if a core pointer or core keyboard have been specified @@ -1219,13 +1221,15 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) } } - /* 4. First pointer with 'mouse' as the driver. */ + /* 4. First pointer with an allowed mouse driver. */ if (!foundPointer && !xf86Info.allowEmptyInput) { + const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - if (!confInput) { - confInput = xf86findInputByDriver("mouse", + while (driver && !confInput) { + confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); + driver++; } if (confInput) { foundPointer = TRUE; @@ -1280,10 +1284,13 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) * section ... deal. */ for (devs = servlayoutp->inputs; devs && *devs; devs++) { - if (!strcmp((*devs)->driver, "void") || !strcmp((*devs)->driver, "mouse") || - !strcmp((*devs)->driver, "vmmouse") || !strcmp((*devs)->driver, "evdev") || - !strcmp((*devs)->driver, "synaptics")) { - found = 1; break; + const char **driver = mousedrivers; + while(*driver) { + if (!strcmp((*devs)->driver, *driver)) { + found = 1; + break; + } + driver++; } } if (!found && !xf86Info.allowEmptyInput) { From 7db55a0806c82bd4143c8bf1b8eb2b62e456ad9a Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Wed, 20 May 2009 14:38:25 +1000 Subject: [PATCH 71/89] dix: remove superfluous loop in change_modmap. A device can only be attached to a single master device. So instead of looping and searching for the master device, we can just use dev->u.master directly. Signed-off-by: Peter Hutterer --- dix/inpututils.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/dix/inpututils.c b/dix/inpututils.c index c6300880b..152214506 100644 --- a/dix/inpututils.c +++ b/dix/inpututils.c @@ -275,14 +275,10 @@ change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *modkeymap, do_modmap_change(client, tmp, modmap); } } - else { - for (tmp = inputInfo.devices; tmp; tmp = tmp->next) { - if (tmp->isMaster && tmp->u.lastSlave == dev) { - /* If this fails, expect the results to be weird. */ - if (check_modmap_change(client, tmp, modmap)) - do_modmap_change(client, tmp, modmap); - } - } + else if (dev->u.master && dev->u.master->u.lastSlave == dev) { + /* If this fails, expect the results to be weird. */ + if (check_modmap_change(client, dev->u.master, modmap)) + do_modmap_change(client, dev->u.master, modmap); } return Success; From 525aa17f804d37d1cfcbbf6b8e6cddb45e999b20 Mon Sep 17 00:00:00 2001 From: Tomas Janousek Date: Wed, 20 May 2009 15:03:01 +0200 Subject: [PATCH 72/89] Bug #6428, #16458, #21464: Fix crash due to uninitialized VModMap fields. In ProcXkbGetKbdByName, mrep.firstVModMapKey, .nVModMapKeys and .totalVModMapKeys were not initialized, contained random values and caused accesses to unallocated and later modified memory, causing XkbSizeVirtualModMap and XkbWriteVirtualModMap to see different number of nonzero values, resulting in writes past the end of an array in XkbSendMap. This patch initializes those values sensibly and reverts commits 5c0a2088 and 6dd4fc46, which have been plain non-sense. Signed-off-by: Tomas Janousek Signed-off-by: Peter Hutterer --- xkb/xkb.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/xkb/xkb.c b/xkb/xkb.c index 445c55ffd..ec46238b8 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -1308,7 +1308,7 @@ XkbSizeVirtualModMap(XkbDescPtr xkb,xkbGetMapReply *rep) rep->totalVModMapKeys= 0; return 0; } - for (nRtrn=i=0;inVModMapKeys-1;i++) { + for (nRtrn=i=0;inVModMapKeys;i++) { if (xkb->server->vmodmap[i+rep->firstVModMapKey]!=0) nRtrn++; } @@ -1327,7 +1327,7 @@ unsigned short * pMap; wire= (xkbVModMapWireDesc *)buf; pMap= &xkb->server->vmodmap[rep->firstVModMapKey]; - for (i=0;inVModMapKeys-1;i++,pMap++) { + for (i=0;inVModMapKeys;i++,pMap++) { if (*pMap!=0) { wire->key= i+rep->firstVModMapKey; wire->vmods= *pMap; @@ -5670,7 +5670,7 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.present = 0; mrep.totalSyms = mrep.totalActs = mrep.totalKeyBehaviors= mrep.totalKeyExplicit= - mrep.totalModMapKeys= 0; + mrep.totalModMapKeys= mrep.totalVModMapKeys= 0; if (rep.reported&(XkbGBN_TypesMask|XkbGBN_ClientSymbolsMask)) { mrep.present|= XkbKeyTypesMask; mrep.firstType = 0; @@ -5696,6 +5696,8 @@ ProcXkbGetKbdByName(ClientPtr client) mrep.firstKeyExplicit = new->min_key_code; mrep.nKeyActs = mrep.nKeyBehaviors = mrep.nKeyExplicit = XkbNumKeys(new); + mrep.firstVModMapKey= new->min_key_code; + mrep.nVModMapKeys= XkbNumKeys(new); } else { mrep.virtualMods= 0; From 99e22b86c5f1a3653f3caaf01368a777d2b208d0 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Fri, 22 May 2009 12:01:55 -0400 Subject: [PATCH 73/89] EDID: Add modes from Established Timings III descriptor to mode pool EDID 1.4, section 3.10.3.9 --- hw/xfree86/ddc/edid.h | 2 +- hw/xfree86/ddc/interpret_edid.c | 1 + hw/xfree86/modes/xf86EdidModes.c | 87 ++++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h index b55600329..42ee9d15e 100644 --- a/hw/xfree86/ddc/edid.h +++ b/hw/xfree86/ddc/edid.h @@ -533,7 +533,7 @@ struct detailed_monitor_section { struct whitePoints wp[2]; /* 32 */ /* color management data */ struct cvt_timings cvt[4]; /* 64 */ - /* established timings III */ + Uchar est_iii[6]; /* 6 */ } section; /* max: 80 */ }; diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c index bdcc92e64..12a52545e 100644 --- a/hw/xfree86/ddc/interpret_edid.c +++ b/hw/xfree86/ddc/interpret_edid.c @@ -330,6 +330,7 @@ get_dt_md_section(Uchar *c, struct edid_version *ver, break; case ADD_EST_TIMINGS: det_mon[i].type = DS_EST_III; + memcpy(det_mon[i].section.est_iii, c + 6, 6); break; case ADD_DUMMY: det_mon[i].type = DS_DUMMY; diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c index 4340edd1f..50b669c3e 100644 --- a/hw/xfree86/modes/xf86EdidModes.c +++ b/hw/xfree86/modes/xf86EdidModes.c @@ -641,6 +641,85 @@ DDCModesFromCVT(int scrnIndex, struct cvt_timings *t) } #endif +static const struct { + short w; + short h; + short r; + short rb; +} EstIIIModes[] = { + /* byte 6 */ + { 640, 350, 85, 0 }, + { 640, 400, 85, 0 }, + { 720, 400, 85, 0 }, + { 640, 480, 85, 0 }, + { 848, 480, 60, 0 }, + { 800, 600, 85, 0 }, + { 1024, 768, 85, 0 }, + { 1152, 864, 75, 0 }, + /* byte 7 */ + { 1280, 768, 60, 1 }, + { 1280, 768, 60, 0 }, + { 1280, 768, 75, 0 }, + { 1280, 768, 85, 0 }, + { 1280, 960, 60, 0 }, + { 1280, 960, 85, 0 }, + { 1280, 1024, 60, 0 }, + { 1280, 1024, 85, 0 }, + /* byte 8 */ + { 1360, 768, 60, 0 }, + { 1440, 900, 60, 1 }, + { 1440, 900, 60, 0 }, + { 1440, 900, 75, 0 }, + { 1440, 900, 85, 0 }, + { 1400, 1050, 60, 1 }, + { 1400, 1050, 60, 0 }, + { 1400, 1050, 75, 0 }, + /* byte 9 */ + { 1400, 1050, 85, 0 }, + { 1680, 1050, 60, 1 }, + { 1680, 1050, 60, 0 }, + { 1680, 1050, 75, 0 }, + { 1680, 1050, 85, 0 }, + { 1600, 1200, 60, 0 }, + { 1600, 1200, 65, 0 }, + { 1600, 1200, 70, 0 }, + /* byte 10 */ + { 1600, 1200, 75, 0 }, + { 1600, 1200, 85, 0 }, + { 1792, 1344, 60, 0 }, + { 1792, 1344, 85, 0 }, + { 1856, 1392, 60, 0 }, + { 1856, 1392, 75, 0 }, + { 1920, 1200, 60, 1 }, + { 1920, 1200, 60, 0 }, + /* byte 11 */ + { 1920, 1200, 75, 0 }, + { 1920, 1200, 85, 0 }, + { 1920, 1440, 60, 0 }, + { 1920, 1440, 75, 0 }, +}; + +static DisplayModePtr +DDCModesFromEstIII(unsigned char *est) +{ + DisplayModePtr modes = NULL; + int i, j, m; + + for (i = 0; i < 6; i++) { + for (j = 7; j > 0; j--) { + if (est[i] & (1 << j)) { + m = (i * 8) + (7 - j); + modes = xf86ModesAdd(modes, + FindDMTMode(EstIIIModes[m].w, + EstIIIModes[m].h, + EstIIIModes[m].r, + EstIIIModes[m].rb)); + } + } + } + + return modes; +} /* * This is only valid when the sink claims to be continuous-frequency @@ -811,6 +890,7 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) for (i = 0; i < DET_TIMINGS; i++) { struct detailed_monitor_section *det_mon = &DDC->det_mon[i]; + Mode = NULL; switch (det_mon->type) { case DT: Mode = DDCModeFromDetailedTiming(scrnIndex, @@ -818,22 +898,23 @@ xf86DDCGetModes(int scrnIndex, xf86MonPtr DDC) preferred, quirks); preferred = FALSE; - Modes = xf86ModesAdd(Modes, Mode); break; case DS_STD_TIMINGS: Mode = DDCModesFromStandardTiming(det_mon->section.std_t, quirks, timing_level, rb); - Modes = xf86ModesAdd(Modes, Mode); break; #if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(7,0,0,0,0) case DS_CVT: Mode = DDCModesFromCVT(scrnIndex, det_mon->section.cvt); - Modes = xf86ModesAdd(Modes, Mode); break; #endif + case DS_EST_III: + Mode = DDCModesFromEstIII(det_mon->section.est_iii); + break; default: break; } + Modes = xf86ModesAdd(Modes, Mode); } /* Add established timings */ From c70511931ca1441878daed50e710fa514f6ab077 Mon Sep 17 00:00:00 2001 From: Matthieu Herrb Date: Sun, 24 May 2009 10:32:38 +0200 Subject: [PATCH 74/89] fix typo in cabff9007 which led to an unintialized memory read and a crash. --- hw/xfree86/common/xf86Config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 165958b07..24049aaa0 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1226,7 +1226,7 @@ checkCoreInputDevices(serverLayoutPtr servlayoutp, Bool implicitLayout) const char **driver = mousedrivers; confInput = xf86findInput(CONF_IMPLICIT_POINTER, xf86configptr->conf_input_lst); - while (driver && !confInput) { + while (*driver && !confInput) { confInput = xf86findInputByDriver(*driver, xf86configptr->conf_input_lst); driver++; From 12e725d08b4cf7dbb7f09b9ec09fa1b621156ea9 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Fri, 22 May 2009 09:54:38 +0200 Subject: [PATCH 75/89] randr: fix server crash in RRGetScreenInfo We don't return rates to randr < 1.1 clients, so don't allocate space for them. This fixes a FatalError due to not all allocated space being used. X.Org bug#21861 Reported-by: Guillaume Quintin Signed-off-by: Julien Cristau --- randr/rrscreen.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/randr/rrscreen.c b/randr/rrscreen.c index 94bf3ce99..46890bf74 100644 --- a/randr/rrscreen.c +++ b/randr/rrscreen.c @@ -664,8 +664,9 @@ ProcRRGetScreenInfo (ClientPtr client) rep.sizeID = pData->size; rep.rate = pData->refresh; - extraLen = (rep.nSizes * sizeof (xScreenSizes) + - rep.nrateEnts * sizeof (CARD16)); + extraLen = rep.nSizes * sizeof (xScreenSizes); + if (has_rate) + extraLen += rep.nrateEnts * sizeof (CARD16); if (extraLen) { From 6583477035234e23ead2fad9db7a07e5862447a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicolai=20H=C3=A4hnle?= Date: Sat, 23 May 2009 13:35:24 +0200 Subject: [PATCH 76/89] Remove reference to non-existing requestLog and requestLogIndex These fields were removed in 252ec504817e05b185e4896a2d899e9c00b8aeef. Signed-off-by: Nicolai Haehnle Signed-off-by: Peter Hutterer --- dix/dispatch.c | 6 ------ include/dixstruct.h | 4 ---- 2 files changed, 10 deletions(-) diff --git a/dix/dispatch.c b/dix/dispatch.c index ce3294d32..dbb97e05f 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -413,12 +413,6 @@ Dispatch(void) } client->sequence++; -#ifdef DEBUG - if (client->requestLogIndex == MAX_REQUEST_LOG) - client->requestLogIndex = 0; - client->requestLog[client->requestLogIndex] = MAJOROP; - client->requestLogIndex++; -#endif #ifdef XSERVER_DTRACE XSERVER_REQUEST_START(LookupMajorName(MAJOROP), MAJOROP, ((xReq *)client->requestBuffer)->length, diff --git a/include/dixstruct.h b/include/dixstruct.h index 7335fad95..696b793ff 100644 --- a/include/dixstruct.h +++ b/include/dixstruct.h @@ -37,10 +37,6 @@ SOFTWARE. * translation from client ids to server addresses. */ -#ifdef DEBUG -#define MAX_REQUEST_LOG 100 -#endif - extern _X_EXPORT CallbackListPtr ClientStateCallback; typedef struct { From d053c3b35f730fdaddd22f841dbd8ed6c9a07ba0 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 2 Nov 2008 20:46:40 +0000 Subject: [PATCH 77/89] Xming: Slightly adjust the formatting of the logged command line Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winprocarg.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c index 38ee9a2df..f20598db9 100755 --- a/hw/xwin/winprocarg.c +++ b/hw/xwin/winprocarg.c @@ -1448,13 +1448,13 @@ winLogCommandLine (int argc, char *argv[]) for (i = 0, iCurrLen = 0; i < argc; ++i) if (argv[i]) { - /* Add a character for lines that overflow */ + /* Adds two characters for lines that overflow */ if ((strlen (argv[i]) < CHARS_PER_LINE && iCurrLen + strlen (argv[i]) > CHARS_PER_LINE) || strlen (argv[i]) > CHARS_PER_LINE) { iCurrLen = 0; - ++iSize; + iSize += 2; } /* Add space for item and trailing space */ @@ -1484,7 +1484,7 @@ winLogCommandLine (int argc, char *argv[]) iCurrLen = 0; /* Add line break if it fits */ - strncat (g_pszCommandLine, "\n", iSize - strlen (g_pszCommandLine)); + strncat (g_pszCommandLine, "\n ", iSize - strlen (g_pszCommandLine)); } strncat (g_pszCommandLine, argv[i], iSize - strlen (g_pszCommandLine)); From a72865868f03b675f86990476fcee601822894b3 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:09:43 +0000 Subject: [PATCH 78/89] Cygwin/X: Consolidate dialog initialization in winInitDialog() Changed windialogs.c to set icons via window properties rather than class properties, and use LoadImage() for small icons, because LoadIcon() can only open large icons. Since this code is redundant across the dialogs, I put it in the winCenterDialog function, along with a few other redundant instructions, and renamed in winInitDialog(). Also, don't bogusly put our dialogs at the center of the virtual desktop if we are on a multimonitor system (this causes the dialog to end up split across two monitors in a dual-monitor side-by-side setup) Corrections to use HWND_TOPMOST instead of HWND_TOP and not to use SWP_NOZORDER from Colin Harrison fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/windialogs.c | 116 +++++++++++++++++++------------------------ 1 file changed, 50 insertions(+), 66 deletions(-) diff --git a/hw/xwin/windialogs.c b/hw/xwin/windialogs.c index ab06b0d00..274c04618 100755 --- a/hw/xwin/windialogs.c +++ b/hw/xwin/windialogs.c @@ -181,32 +181,64 @@ winUnoverrideURLButton (HWND hwnd, int id) /* * Center a dialog window in the desktop window + * and set small and large icons to X icons. */ static void -winCenterDialog (HWND hwndDlg) +winInitDialog (HWND hwndDlg) { HWND hwndDesk; - RECT rc, rcDlg, rcDesk; + RECT rc, rcDlg, rcDesk; + HICON hIcon, hIconSmall; hwndDesk = GetParent (hwndDlg); if (!hwndDesk || IsIconic (hwndDesk)) hwndDesk = GetDesktopWindow (); - GetWindowRect (hwndDesk, &rcDesk); - GetWindowRect (hwndDlg, &rcDlg); - CopyRect (&rc, &rcDesk); - - OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); - OffsetRect (&rc, -rc.left, -rc.top); - OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); - - SetWindowPos (hwndDlg, - HWND_TOP, - rcDesk.left + (rc.right / 2), - rcDesk.top + (rc.bottom / 2), + /* Remove minimize and maximize buttons */ + SetWindowLong (hwndDlg, GWL_STYLE, + GetWindowLong (hwndDlg, GWL_STYLE) + & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); + + /* Set Window not to show in the task bar */ + SetWindowLong (hwndDlg, GWL_EXSTYLE, + GetWindowLong (hwndDlg, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); + + /* Center dialog window in the screen. Not done for multi-monitor systems, where + * it is likely to end up split across the screens. In that case, it appears + * near the Tray icon. + */ + if (GetSystemMetrics(SM_CMONITORS)>1) { + /* Still need to refresh the frame change. */ + SetWindowPos (hwndDlg, HWND_TOPMOST, 0,0,0,0, + SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + } else { + GetWindowRect (hwndDesk, &rcDesk); + GetWindowRect (hwndDlg, &rcDlg); + CopyRect (&rc, &rcDesk); + + OffsetRect (&rcDlg, -rcDlg.left, -rcDlg.top); + OffsetRect (&rc, -rc.left, -rc.top); + OffsetRect (&rc, -rcDlg.right, -rcDlg.bottom); + + SetWindowPos (hwndDlg, + HWND_TOPMOST, + rcDesk.left + (rc.right / 2), + rcDesk.top + (rc.bottom / 2), 0, 0, - SWP_NOSIZE | SWP_NOZORDER); + SWP_NOSIZE | SWP_FRAMECHANGED); + } + + /* Set icon to standard app icon */ + hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN)); + hIconSmall = LoadImage (g_hInstance, + MAKEINTRESOURCE(IDI_XWIN), IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_SHARED); + + PostMessage (hwndDlg, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + PostMessage (hwndDlg, WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); } @@ -271,15 +303,6 @@ winDisplayExitDialog (winPrivScreenPtr pScreenPriv) winExitDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgExit, GWL_STYLE, - GetWindowLong (g_hDlgExit, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgExit, GWL_EXSTYLE, - GetWindowLong (g_hDlgExit, GWL_EXSTYLE) & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgExit, HWND_TOPMOST, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgExit, SW_SHOW); @@ -314,14 +337,7 @@ winExitDlgProc (HWND hDialog, UINT message, /* Store pointers to private structures for future use */ s_pScreenPriv = (winPrivScreenPtr) lParam; - winCenterDialog (hDialog); - - /* Set icon to standard app icon */ - PostMessage (hDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, - MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hDialog); /* Format the connected clients string */ pszConnectedClients = Xprintf (CONNECTED_CLIENTS_FORMAT, @@ -413,17 +429,6 @@ winDisplayDepthChangeDialog (winPrivScreenPtr pScreenPriv) pScreenPriv->hwndScreen, winChangeDepthDlgProc, (int) pScreenPriv); - - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgDepthChange, GWL_STYLE, - GetWindowLong (g_hDlgDepthChange, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE, - GetWindowLong (g_hDlgDepthChange, GWL_EXSTYLE) - & ~WS_EX_APPWINDOW ); - SetWindowPos (g_hDlgDepthChange, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgDepthChange, SW_SHOW); @@ -480,13 +485,7 @@ winChangeDepthDlgProc (HWND hwndDialog, UINT message, s_pScreenPriv->dwLastWindowsBitsPixel); #endif - winCenterDialog( hwndDialog ); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog( hwndDialog ); return TRUE; @@ -572,15 +571,6 @@ winDisplayAboutDialog (winPrivScreenPtr pScreenPriv) winAboutDlgProc, (int) pScreenPriv); - /* Drop minimize and maximize buttons */ - SetWindowLong (g_hDlgAbout, GWL_STYLE, - GetWindowLong (g_hDlgAbout, GWL_STYLE) - & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX)); - SetWindowLong (g_hDlgAbout, GWL_EXSTYLE, - GetWindowLong (g_hDlgAbout, GWL_EXSTYLE) & ~WS_EX_APPWINDOW); - SetWindowPos (g_hDlgAbout, 0, 0, 0, 0, 0, - SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE); - /* Show the dialog box */ ShowWindow (g_hDlgAbout, SW_SHOW); @@ -622,13 +612,7 @@ winAboutDlgProc (HWND hwndDialog, UINT message, s_pScreenInfo = s_pScreenPriv->pScreenInfo; s_pScreen = s_pScreenInfo->pScreen; - winCenterDialog (hwndDialog); - - /* Set icon to standard app icon */ - PostMessage (hwndDialog, - WM_SETICON, - ICON_SMALL, - (LPARAM) LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN))); + winInitDialog (hwndDialog); /* Override the URL buttons */ winOverrideURLButton (hwndDialog, ID_ABOUT_CHANGELOG); From 888e6961a4ee76d05d212cfb946f089caafb3f69 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Wed, 7 Jan 2009 18:29:16 +0000 Subject: [PATCH 79/89] Cygwin/X: Correctly allow for the native window frame width in ValidateSizing() Fix internal WM to correctly calculate the native window border when validating window sizing Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index b5e789c2c..0dd88851f 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -207,6 +207,8 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, WinXSizeHints sizeHints; RECT *rect; int iWidth, iHeight; + RECT rcClient, rcWindow; + int iBorderWidthX, iBorderWidthY; /* Invalid input checking */ if (pWin==NULL || lParam==0) @@ -228,19 +230,20 @@ ValidateSizing (HWND hwnd, WindowPtr pWin, iWidth = rect->right - rect->left; iHeight = rect->bottom - rect->top; - /* Now remove size of any borders */ - iWidth -= 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight -= (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); - + /* Now remove size of any borders and title bar */ + GetClientRect(hwnd, &rcClient); + GetWindowRect(hwnd, &rcWindow); + iBorderWidthX = (rcWindow.right - rcWindow.left) - (rcClient.right - rcClient.left); + iBorderWidthY = (rcWindow.bottom - rcWindow.top) - (rcClient.bottom - rcClient.top); + iWidth -= iBorderWidthX; + iHeight -= iBorderWidthY; /* Constrain the size to legal values */ ConstrainSize (sizeHints, &iWidth, &iHeight); - /* Add back the borders */ - iWidth += 2 * GetSystemMetrics(SM_CXSIZEFRAME); - iHeight += (GetSystemMetrics(SM_CYCAPTION) - + 2 * GetSystemMetrics(SM_CYSIZEFRAME)); + /* Add back the size of borders and title bar */ + iWidth += iBorderWidthX; + iHeight += iBorderWidthY; /* Adjust size according to where we're dragging from */ switch(wParam) { From 4ec110327bdc4f2617cd6116539812d7ef96b24e Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Sun, 4 Jan 2009 18:29:49 +0000 Subject: [PATCH 80/89] Xming: Prevent the mouse wheel from stalling when another window is minimized. Fix internal WM to prevent the mouse wheel from stalling when another window is minimized. Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwndproc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/xwin/winmultiwindowwndproc.c b/hw/xwin/winmultiwindowwndproc.c index 0dd88851f..becae2949 100644 --- a/hw/xwin/winmultiwindowwndproc.c +++ b/hw/xwin/winmultiwindowwndproc.c @@ -786,6 +786,10 @@ winTopLevelWindowProc (HWND hwnd, UINT message, if (!pWin || !pWin->overrideRedirect) /* for OOo menus */ winSendMessageToWM (s_pScreenPriv->pWMInfo, &wmMsg); } + /* Prevent the mouse wheel from stalling when another window is minimized */ + if (HIWORD(wParam) == 0 && LOWORD(wParam) == WA_ACTIVE && + (HWND)lParam != NULL && (HWND)lParam != (HWND)GetParent(hwnd)) + SetFocus(hwnd); return 0; case WM_ACTIVATEAPP: From 71ba9856a4f01aa7a42f1178c8da98a2e5ac23ae Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Tue, 3 Feb 2009 15:52:11 +0000 Subject: [PATCH 81/89] Xming: Cache atom lookups in clipboard integration code Cache the CLIPBOARD atom lookups in winClipboardWindowProc() Cache atom lookups in winClipboardFlushXEvents() Recache on server regeneration Copyright (C) Colin Harrison 2005-2008 http://www.straightrunning.com/XmingNotes/ http://sourceforge.net/projects/xming/ Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardwndproc.c | 26 +++++++++++++------------- hw/xwin/winclipboardxevents.c | 27 +++++++++++++++------------ 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/hw/xwin/winclipboardwndproc.c b/hw/xwin/winclipboardwndproc.c index 04c0c586a..65faedf65 100644 --- a/hw/xwin/winclipboardwndproc.c +++ b/hw/xwin/winclipboardwndproc.c @@ -36,6 +36,7 @@ #include #include #include "winclipboard.h" +#include "misc.h" extern void winFixClipboardChain(); @@ -261,6 +262,8 @@ winClipboardWindowProc (HWND hwnd, UINT message, case WM_DRAWCLIPBOARD: { + static Atom atomClipboard; + static int generation; static Bool s_fProcessingDrawClipboard = FALSE; Display *pDisplay = g_pClipboardDisplay; Window iWindow = g_iClipboardWindow; @@ -268,6 +271,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD: Enter\n"); + if (generation != serverGeneration) + { + generation = serverGeneration; + atomClipboard = XInternAtom (pDisplay, "CLIPBOARD", False); + } + /* * We've occasionally seen a loop in the clipboard chain. * Try and fix it on the first hint of recursion. @@ -355,17 +364,13 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Release CLIPBOARD selection if owned */ iReturn = XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)); + atomClipboard); if (iReturn == g_iClipboardWindow) { winDebug ("winClipboardWindowProc - WM_DRAWCLIPBOARD - " "CLIPBOARD selection is owned by us.\n"); XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, None, CurrentTime); } @@ -399,17 +404,12 @@ winClipboardWindowProc (HWND hwnd, UINT message, /* Reassert ownership of the CLIPBOARD */ iReturn = XSetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False), + atomClipboard, iWindow, CurrentTime); if (iReturn == BadAtom || iReturn == BadWindow || - XGetSelectionOwner (pDisplay, - XInternAtom (pDisplay, - "CLIPBOARD", - False)) != iWindow) + XGetSelectionOwner (pDisplay, atomClipboard) != iWindow) { winErrorFVerb (1, "winClipboardWindowProc - WM_DRAWCLIPBOARD - " "Could not reassert ownership of CLIPBOARD\n"); diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 95e86b1dc..ab8d5e42f 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -34,6 +34,7 @@ #include #endif #include "winclipboard.h" +#include "misc.h" /* @@ -53,18 +54,20 @@ winClipboardFlushXEvents (HWND hwnd, Display *pDisplay, Bool fUseUnicode) { - Atom atomLocalProperty = XInternAtom (pDisplay, - WIN_LOCAL_PROPERTY, - False); - Atom atomUTF8String = XInternAtom (pDisplay, - "UTF8_STRING", - False); - Atom atomCompoundText = XInternAtom (pDisplay, - "COMPOUND_TEXT", - False); - Atom atomTargets = XInternAtom (pDisplay, - "TARGETS", - False); + static Atom atomLocalProperty; + static Atom atomCompoundText; + static Atom atomUTF8String; + static Atom atomTargets; + static int generation; + + if (generation != serverGeneration) + { + generation = serverGeneration; + atomLocalProperty = XInternAtom (pDisplay, WIN_LOCAL_PROPERTY, False); + atomUTF8String = XInternAtom (pDisplay, "UTF8_STRING", False); + atomCompoundText = XInternAtom (pDisplay, "COMPOUND_TEXT", False); + atomTargets = XInternAtom (pDisplay, "TARGETS", False); + } /* Process all pending events */ while (XPending (pDisplay)) From fbe9ed27b1c2f932a74aa6ced134ecec021a3fc1 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 10:55:38 +0000 Subject: [PATCH 82/89] Xming: Avoid log spam if a windows application won't provide CF_UNICODETEXT clipboard format Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index ab8d5e42f..0a64ba6db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -191,8 +191,13 @@ winClipboardFlushXEvents (HWND hwnd, if (fUseUnicode && !IsClipboardFormatAvailable (CF_UNICODETEXT)) { - ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " - "available from Win32 clipboard. Aborting.\n"); + static int count; /* Hack to stop acroread spamming the log */ + static HWND lasthwnd; /* I've not seen any other client get here repeatedly? */ + if (hwnd != lasthwnd) count = 0; + count++; + if (count < 6) ErrorF ("winClipboardFlushXEvents - CF_UNICODETEXT is not " + "available from Win32 clipboard. Aborting %d.\n", count); + lasthwnd = hwnd; /* Abort */ fAbort = TRUE; From d190a27a33ab8c198568baf184fad14df57e24ad Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Thu, 29 Jan 2009 11:00:49 +0000 Subject: [PATCH 83/89] Xming: Various tidy ups in winClipboardFlushXEvents() Signed-off-by: Jon TURNEY --- hw/xwin/winclipboardxevents.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hw/xwin/winclipboardxevents.c b/hw/xwin/winclipboardxevents.c index 0a64ba6db..ec40814db 100644 --- a/hw/xwin/winclipboardxevents.c +++ b/hw/xwin/winclipboardxevents.c @@ -311,6 +311,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Initialize the text property */ xtpText.value = NULL; + xtpText.nitems = 0; /* Create the text property from the text list */ if (fUseUnicode) @@ -371,10 +372,13 @@ winClipboardFlushXEvents (HWND hwnd, /* Release the clipboard data */ GlobalUnlock (hGlobal); pszGlobalData = NULL; + fCloseClipboard = FALSE; + CloseClipboard (); /* Clean up */ XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Setup selection notify event */ eventSelection.type = SelectionNotify; @@ -405,7 +409,11 @@ winClipboardFlushXEvents (HWND hwnd, winClipboardFlushXEvents_SelectionRequest_Done: /* Free allocated resources */ if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (hGlobal && pszGlobalData) @@ -446,7 +454,10 @@ winClipboardFlushXEvents (HWND hwnd, /* Close clipboard if it was opened */ if (fCloseClipboard) + { + fCloseClipboard = FALSE; CloseClipboard (); + } break; @@ -628,6 +639,7 @@ winClipboardFlushXEvents (HWND hwnd, /* Conversion succeeded or some unconvertible characters */ if (ppszTextList != NULL) { + iReturnDataLen = 0; for (i = 0; i < iCount; i++) { iReturnDataLen += strlen(ppszTextList[i]); @@ -673,6 +685,7 @@ winClipboardFlushXEvents (HWND hwnd, ppszTextList = NULL; XFree (xtpText.value); xtpText.value = NULL; + xtpText.nitems = 0; /* Convert the X clipboard string to DOS format */ winClipboardUNIXtoDOS (&pszReturnData, strlen (pszReturnData)); @@ -786,7 +799,11 @@ winClipboardFlushXEvents (HWND hwnd, if (ppszTextList) XFreeStringList (ppszTextList); if (xtpText.value) + { XFree (xtpText.value); + xtpText.value = NULL; + xtpText.nitems = 0; + } if (pszConvertData) free (pszConvertData); if (pwszUnicodeStr) From 966c8fccf16e77c8f459b4b175718323f2ec5d58 Mon Sep 17 00:00:00 2001 From: Colin Harrison Date: Mon, 5 Jan 2009 18:04:42 +0000 Subject: [PATCH 84/89] Xming: Fix some log spam Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowwm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/xwin/winmultiwindowwm.c b/hw/xwin/winmultiwindowwm.c index ea9dfca36..194dbf64c 100644 --- a/hw/xwin/winmultiwindowwm.c +++ b/hw/xwin/winmultiwindowwm.c @@ -1359,7 +1359,9 @@ winMultiWindowXMsgProcErrorHandler (Display *pDisplay, XErrorEvent *pErr) pErr->error_code, pszErrorMsg, sizeof (pszErrorMsg)); +#if CYGMULTIWINDOW_DEBUG ErrorF ("winMultiWindowXMsgProcErrorHandler - ERROR: %s\n", pszErrorMsg); +#endif return 0; } From 9955252564922e7e8702dfb6eab52c75605a4a22 Mon Sep 17 00:00:00 2001 From: Jon TURNEY Date: Mon, 5 Jan 2009 17:55:58 +0000 Subject: [PATCH 85/89] Cygwin/X: Remove unused TimeSinceLastInputEvent() Signed-off-by: Jon TURNEY --- hw/xwin/InitInput.c | 10 ---------- hw/xwin/win.h | 1 - hw/xwin/winmouse.c | 1 - 3 files changed, 12 deletions(-) diff --git a/hw/xwin/InitInput.c b/hw/xwin/InitInput.c index 76c1715cf..2eaa024a8 100644 --- a/hw/xwin/InitInput.c +++ b/hw/xwin/InitInput.c @@ -48,7 +48,6 @@ DISPATCH_PROC(winProcSetSelectionOwner); * Local global declarations */ -CARD32 g_c32LastInputEventTime = 0; DeviceIntPtr g_pwinPointer; DeviceIntPtr g_pwinKeyboard; @@ -110,15 +109,6 @@ void DDXRingBell(int volume, int pitch, int duration) } -int -TimeSinceLastInputEvent () -{ - if (g_c32LastInputEventTime == 0) - g_c32LastInputEventTime = GetTickCount (); - return GetTickCount () - g_c32LastInputEventTime; -} - - /* See Porting Layer Definition - p. 17 */ void InitInput (int argc, char *argv[]) diff --git a/hw/xwin/win.h b/hw/xwin/win.h index 8005d5b33..9009df29b 100644 --- a/hw/xwin/win.h +++ b/hw/xwin/win.h @@ -636,7 +636,6 @@ extern DevPrivateKey g_iGCPrivateKey; extern DevPrivateKey g_iPixmapPrivateKey; extern DevPrivateKey g_iWindowPrivateKey; extern unsigned long g_ulServerGeneration; -extern CARD32 g_c32LastInputEventTime; extern DWORD g_dwEnginesSupported; extern HINSTANCE g_hInstance; extern int g_copyROP[]; diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c index 188126b3a..9cfc945f8 100644 --- a/hw/xwin/winmouse.c +++ b/hw/xwin/winmouse.c @@ -354,7 +354,6 @@ winMouseButtonsHandle (ScreenPtr pScreen, void winEnqueueMotion(int x, int y) { miPointerSetPosition(g_pwinPointer, &x, &y); - g_c32LastInputEventTime = GetTickCount(); int i, nevents; int valuators[2]; From 996357e905c1082479bb238110b93bc170b8cb84 Mon Sep 17 00:00:00 2001 From: Joe Krahn Date: Tue, 20 Jan 2009 17:22:37 +0000 Subject: [PATCH 86/89] Cygwin/X: Update icons directly, rather than modifying the window's class Update icons directly to windows rather than modifying the window's class. Respect custom icons overriden via the configuration file. fd.o bugzilla #4491 Signed-off-by: Jon TURNEY --- hw/xwin/winmultiwindowicons.c | 58 ++++++++++++++------------------ hw/xwin/winprefs.c | 35 +++++++++---------- hw/xwin/winwin32rootlesswindow.c | 8 ++--- 3 files changed, 46 insertions(+), 55 deletions(-) diff --git a/hw/xwin/winmultiwindowicons.c b/hw/xwin/winmultiwindowicons.c index 88416bb70..8200aad88 100644 --- a/hw/xwin/winmultiwindowicons.c +++ b/hw/xwin/winmultiwindowicons.c @@ -364,43 +364,37 @@ void winUpdateIcon (Window id) { WindowPtr pWin; - HICON hIcon, hiconOld; + HICON hIcon, hIconSmall=NULL, hIconOld; pWin = (WindowPtr) LookupIDByType (id, RT_WINDOW); if (!pWin) return; - hIcon = winOverrideIcon ((unsigned long)pWin); - - if (!hIcon) - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); - - if (hIcon) - { - winWindowPriv(pWin); - - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - - /* Delete the icon if its not the default */ - winDestroyIcon(hiconOld); - } + winWindowPriv(pWin); + if (pWinPriv->hWnd) { + hIcon = winOverrideIcon ((unsigned long)pWin); + if (!hIcon) { + hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXICON)); + if (!hIcon) { + hIcon = g_hIconX; + hIconSmall = g_hSmallIconX; + } else { + /* Leave undefined if not found */ + hIconSmall = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); + } } - - hIcon = winXIconToHICON (pWin, GetSystemMetrics(SM_CXSMICON)); - if (hIcon) - { - winWindowPriv(pWin); - if (pWinPriv->hWnd) - { - hiconOld = (HICON) SetClassLong (pWinPriv->hWnd, - GCL_HICONSM, - (int) hIcon); - winDestroyIcon (hiconOld); - } - } + /* Set the large icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); + + /* Delete the icon if its not the default */ + winDestroyIcon(hIconOld); + + /* Same for the small icon */ + hIconOld = (HICON) SendMessage (pWinPriv->hWnd, + WM_SETICON, ICON_SMALL, (LPARAM) hIconSmall); + winDestroyIcon(hIconOld); + + } } void winInitGlobalIcons (void) diff --git a/hw/xwin/winprefs.c b/hw/xwin/winprefs.c index 8152064cb..fe49ae224 100644 --- a/hw/xwin/winprefs.c +++ b/hw/xwin/winprefs.c @@ -189,35 +189,28 @@ ReloadEnumWindowsProc (HWND hwnd, LPARAM lParam) /* It's our baby, either clean or dirty it */ if (lParam==FALSE) { - hicon = (HICON)GetClassLong(hwnd, GCL_HICON); + /* Reset the window's icon to undefined. */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_BIG, 0); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICON, (LONG)LoadIcon (NULL, IDI_APPLICATION)); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* If the old icon is generated on-the-fly, get rid of it, will regen */ winDestroyIcon (hicon); - - hicon = (HICON)GetClassLong(hwnd, GCL_HICONSM); - /* Unselect any icon in the class structure */ - SetClassLong (hwnd, GCL_HICONSM, 0); - - /* If it's generated on-the-fly, get rid of it, will regen */ + /* Same for the small icon */ + hicon = (HICON)SendMessage(hwnd, WM_SETICON, ICON_SMALL, 0); winDestroyIcon (hicon); - - /* Remove any menu additions, use bRevert flag */ + + /* Remove any menu additions; bRevert=TRUE destroys any modified menus */ GetSystemMenu (hwnd, TRUE); - /* This window is now clean of our taint */ + /* This window is now clean of our taint (but with undefined icons) */ } else { - /* Make the icon default, dynamic, or from xwinrc */ - SetClassLong (hwnd, GCL_HICON, (LONG)g_hIconX); - SetClassLong (hwnd, GCL_HICONSM, (LONG)g_hSmallIconX); + /* winUpdateIcon() will set the icon default, dynamic, or from xwinrc */ wid = (Window)GetProp (hwnd, WIN_WID_PROP); if (wid) winUpdateIcon (wid); + /* Update the system menu for this window */ SetupSysMenu ((unsigned long)hwnd); @@ -241,8 +234,12 @@ ReloadPrefs (void) int i; #ifdef XWIN_MULTIWINDOW - /* First, iterate over all windows replacing their icon with system */ - /* default one and deleting any custom system menus */ + /* First, iterate over all windows, deleting their icons and custom menus. + * This is really only needed because winDestroyIcon() will try to + * destroy the old global icons, which will have changed. + * It is probably better to set a windows USER_DATA to flag locally defined + * icons, and use that to accurately know when to destroy old icons. + */ EnumThreadWindows (g_dwCurrentThreadID, ReloadEnumWindowsProc, FALSE); #endif diff --git a/hw/xwin/winwin32rootlesswindow.c b/hw/xwin/winwin32rootlesswindow.c index 3f521d600..2b2f63010 100755 --- a/hw/xwin/winwin32rootlesswindow.c +++ b/hw/xwin/winwin32rootlesswindow.c @@ -177,12 +177,12 @@ winMWExtWMUpdateIcon (Window id) if (pRLWinPriv->hWnd) { - hiconOld = (HICON) SetClassLong (pRLWinPriv->hWnd, - GCL_HICON, - (int) hIcon); - + + hiconOld = (HICON) SendMessage (pRLWinPriv->hWnd, + WM_SETICON, ICON_BIG, (LPARAM) hIcon); winDestroyIcon(hiconOld); } + hIcon=NULL; } } From f1441b83538e6ba8a1557c4f5ea50c53a1837087 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 27 May 2009 10:06:10 -0700 Subject: [PATCH 87/89] XQuartz: More localization updates (cherry picked from commit b107390c9f30571902556b4d053e62d345a06254) --- .../Resources/Dutch.lproj/locversion.plist | 2 +- .../Dutch.lproj/main.nib/designable.nib | 127 +- .../Dutch.lproj/main.nib/keyedobjects.nib | Bin 46175 -> 46115 bytes .../Resources/French.lproj/locversion.plist | 2 +- .../Resources/German.lproj/locversion.plist | 2 +- .../German.lproj/main.nib/designable.nib | 317 +-- .../German.lproj/main.nib/keyedobjects.nib | Bin 50746 -> 53122 bytes .../Resources/Italian.lproj/locversion.plist | 2 +- .../Resources/Japanese.lproj/locversion.plist | 2 +- .../Resources/Spanish.lproj/locversion.plist | 2 +- .../Spanish.lproj/main.nib/designable.nib | 221 +- .../Spanish.lproj/main.nib/keyedobjects.nib | Bin 53308 -> 53745 bytes .../Resources/da.lproj/locversion.plist | 2 +- .../da.lproj/main.nib/designable.nib | 2 +- .../da.lproj/main.nib/keyedobjects.nib | Bin 49367 -> 49339 bytes .../Resources/fi.lproj/locversion.plist | 2 +- .../fi.lproj/main.nib/designable.nib | 494 +++-- .../fi.lproj/main.nib/keyedobjects.nib | Bin 50882 -> 53312 bytes .../Resources/ko.lproj/locversion.plist | 2 +- .../ko.lproj/main.nib/designable.nib | 34 +- .../ko.lproj/main.nib/keyedobjects.nib | Bin 46775 -> 46678 bytes .../Resources/no.lproj/locversion.plist | 2 +- .../Resources/pl.lproj/locversion.plist | 2 +- .../pl.lproj/main.nib/designable.nib | 435 ++-- .../pl.lproj/main.nib/keyedobjects.nib | Bin 49985 -> 52417 bytes .../Resources/pt.lproj/locversion.plist | 2 +- .../pt.lproj/main.nib/designable.nib | 44 +- .../pt.lproj/main.nib/keyedobjects.nib | Bin 50446 -> 50446 bytes .../Resources/pt_PT.lproj/locversion.plist | 2 +- .../pt_PT.lproj/main.nib/designable.nib | 1968 +++++------------ .../pt_PT.lproj/main.nib/keyedobjects.nib | Bin 51308 -> 51384 bytes .../Resources/ru.lproj/locversion.plist | 2 +- .../Resources/sv.lproj/locversion.plist | 2 +- .../sv.lproj/main.nib/designable.nib | 602 +++-- .../sv.lproj/main.nib/keyedobjects.nib | Bin 50165 -> 52576 bytes .../Resources/zh_CN.lproj/locversion.plist | 2 +- .../Resources/zh_TW.lproj/locversion.plist | 2 +- .../zh_TW.lproj/main.nib/designable.nib | 20 +- .../zh_TW.lproj/main.nib/keyedobjects.nib | Bin 41976 -> 42003 bytes 39 files changed, 1731 insertions(+), 2567 deletions(-) diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist index 51e3827a3..151315080 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib index 05eca0db4..ab78847d0 100644 --- a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/designable.nib @@ -1,18 +1,17 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES - YES @@ -20,7 +19,7 @@ YES - + YES @@ -194,7 +193,7 @@ - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -202,7 +201,7 @@ submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -461,9 +460,7 @@ 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBrYW4gaGV0IGdlYnJ1aWsgdmFuIHRvZXRzY29tYmlu -YXRpZXMgdm9vciBtZW51Y29tbWFkbydzIGNvbmZsaWN0ZXJlbiBtZXQgWDExLXByb2dyYW1tYSdzIGRp -ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 + Als u deze optie inschakelt, kan het gebruik van toetscombinaties voor menucommado's conflicteren met X11-programma's die de Meta-modifier gebruiken. LucidaGrande 11 @@ -475,9 +472,9 @@ ZSBkZSBNZXRhLW1vZGlmaWVyIGdlYnJ1aWtlbi4 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -619,9 +616,7 @@ ZW4uCg 67239424 4194304 - Vm9vciBYMTEtZ2VsdWlkc3NpZ25hbGVuIHdvcmR0IGhldCB3YWFyc2NodXdpbmdzc2lnbmFhbCB2YW4g -aGV0IHN5c3RlZW0gZ2VicnVpa3QsIHpvYWxzIGluZ2VzdGVsZCBpbiBoZXQgdGFiYmxhZCAnR2VsdWlk -c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg + Voor X11-geluidssignalen wordt het waarschuwingssignaal van het systeem gebruikt, zoals ingesteld in het tabblad 'Geluidseffecten' van het systeemvoorkeurenpaneel 'Geluid'. @@ -861,9 +856,7 @@ c2VmZmVjdGVuJyB2YW4gaGV0IHN5c3RlZW12b29ya2V1cmVucGFuZWVsICdHZWx1aWQnLg 67239424 4194304 - SGllcm1lZSBzY2hha2VsdCB1IGhldCBtZW51b25kZXJkZWVsICJrb3BpZWVyIiBpbiBlbiBtYWFrdCB1 -IHN5bmNocm9uaXNhdGllIG1vZ2VsaWprIHR1c3NlbiBoZXQga2xlbWJvcmQgdmFuIE9TIFggZW4gZGUg -Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg + Hiermee schakelt u het menuonderdeel "kopieer" in en maakt u synchronisatie mogelijk tussen het klembord van OS X en de CLIPBOARD- en PRIMARY-buffer van X11. @@ -983,8 +976,7 @@ Q0xJUEJPQVJELSBlbiBQUklNQVJZLWJ1ZmZlciB2YW4gWDExLg 67239424 4194304 - VmFud2VnZSBiZXBlcmtpbmdlbiBpbiBoZXQgWDExLXByb3RvY29sIHdlcmt0IGRlemUgb3B0aWUgbW9n -ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 + Vanwege beperkingen in het X11-protocol werkt deze optie mogelijk niet altijd in alle programma's. @@ -1114,7 +1106,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.) + Indien ingeschakeld, wordt bij aanmaak van een nieuw X11-venster X11.app op de voorgrond geplaatst (in plaats van Finder.app, Terminal.app, enz.). @@ -1187,10 +1179,7 @@ ZWxpamsgbmlldCBhbHRpamQgaW4gYWxsZSBwcm9ncmFtbWEncy4 67239424 4194304 - V2FubmVlciB1IFgxMSBzdGFydCwgd29yZGVuIGVyIFhhdXRob3JpdHktdG9lZ2FuZ3Njb250cm9sZXNs -ZXV0ZWxzIGFhbmdlbWFha3QuIEFscyBoZXQgSVAtYWRyZXMgdmFuIGhldCBzeXN0ZWVtIHdvcmR0IGdl -d2lqemlnZCwgd29yZGVuIGRlemUgdG9ldHNlbiBvbmdlbGRpZyB3YWFyZG9vciBoZXQgbW9nZWxpamsg -aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 + Wanneer u X11 start, worden er Xauthority-toegangscontrolesleutels aangemaakt. Als het IP-adres van het systeem wordt gewijzigd, worden deze toetsen ongeldig waardoor het mogelijk is dat X11-programma's niet kunnen worden gestart. @@ -1207,10 +1196,7 @@ aXMgZGF0IFgxMS1wcm9ncmFtbWEncyBuaWV0IGt1bm5lbiB3b3JkZW4gZ2VzdGFydC4 67239424 4194304 - QWxzIHUgZGV6ZSBvcHRpZSBpbnNjaGFrZWx0LCBtb2V0ICdWb2VyIGlkZW50aXRlaXRzY29udHJvbGUg -dWl0IHZvb3IgdmVyYmluZGluZ2VuJyBvb2sgd29yZGVuIGluZ2VzY2hha2VsZCB0ZXIgYmV2ZWlsaWdp -bmcgdmFuIGhldCBzeXN0ZWVtLiBBbHMgZGV6ZSBvcHRpZSBpcyB1aXRnZXNjaGFrZWxkLCB3b3JkZW4g -dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 + Als u deze optie inschakelt, moet 'Voer identiteitscontrole uit voor verbindingen' ook worden ingeschakeld ter beveiliging van het systeem. Als deze optie is uitgeschakeld, worden verbindingen van externe programma's niet toegestaan. @@ -1255,11 +1241,10 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {564, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1272,7 +1257,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1361,8 +1346,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Naam @@ -1399,8 +1384,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 40 1000 - 75628032 - 0 + 75628096 + 2048 Commando @@ -1426,8 +1411,8 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 10 1000 - 67239424 - 0 + 75628096 + 2048 Toetsen @@ -1454,7 +1439,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 6 System controlBackgroundColor - + @@ -1484,6 +1469,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 -1 0 YES + 0 {{1, 17}, {301, 198}} @@ -1567,7 +1553,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1587,7 +1573,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UHJvZ3JhbW1hJ3M + Programma's 1048576 2147483647 @@ -1595,7 +1581,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 submenuAction: - UHJvZ3JhbW1hJ3M + Programma's YES @@ -1611,7 +1597,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - UGFzIGFhbuKApg + Pas aan… 1048576 2147483647 @@ -2186,28 +2172,26 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2205,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + MainMenu @@ -2466,7 +2450,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 196 - + X11Controller @@ -2476,7 +2460,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + PrefsPanel @@ -2740,7 +2724,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - + EditPrograms @@ -2763,7 +2747,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 - + DockMenu @@ -3317,6 +3301,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3606,6 +3591,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3673,9 +3659,9 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} com.apple.InterfaceBuilder.CocoaPlugin - {{437, 672}, {564, 308}} + {{325, 672}, {564, 308}} {{184, 290}, {481, 345}} @@ -3896,9 +3882,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3906,9 +3890,7 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 YES - - YES - + YES @@ -3946,6 +3928,15 @@ dmVyYmluZGluZ2VuIHZhbiBleHRlcm5lIHByb2dyYW1tYSdzIG5pZXQgdG9lZ2VzdGFhbi4 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Dutch.lproj/main.nib/keyedobjects.nib index 4aa9bb3c923b2aea8ff8b0a90107fff59838e258..ea9418ee9c022f9a4f4681c4dad5afcee8e851ca 100644 GIT binary patch literal 46115 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 literal 46175 zcmd?S2VhfG+c&OJkXfMY8ro0-Z2}!kk$V&oMM1!U2(nc~ zMci9J6!$_@Km`?Xi;4>e{GW4f(k5;3)%W+kzwi6~KPzpLd&aZQv(9r)rpzo2R8+QW z_cp?aAc`a;yOA5a$=D{LDbxK$l@()~%=VX81VX`aO?>4=(*p2rRFlfk%$**(1t~~H ztx!9Zi!MUlPa3>+l-91#iXM@V$5^ehfd3pTn==*YO+pP5eIo0Dpu};P3Ho_;;cZm1smKZjweC zkaThZX-1lp)}#~ZMS7DyWC$5bhLN#k94RJcBuGMJE}2K>lPk$`vVyE7x02h*9pp}O zH@S~IMjj_mkSEC=vX|^9-%~;AH1*LbG(e}*GFncn=w);f zwdfV}8hR7GnXaQ7=vKOoZl`zChv`%FY5D?viyoqf=}~%&eoeopKht06Z}hB$kRnk@ zlN^#ErAV35c~Y*FCv}oKOWmaIQZK2$G)NjO4VOkpW2DJavE-L7m6)_xS}ENut&wh# z)=68Wozi{MF6k-hY3Uj1W$6{^Rq25Aj`XhdzVw0gvGj@bx%7qft@N|>hxDiHl;dPw z_Q+{+1G$;pTy7z^k=x51WoSIBGR zTjbm2JLEg%d*p}YhvjGGee!eiOY&Rt0r{Bxk^HgznL-swkrhR8C{86#Nl;Rh7D{WS zz0zIjp$t+6E5nr$$|z-$GFh3X1e9{6LRqL>rd*{gRc=&nQf^jmQPwJ(mAjRl%6-a% z$`i`d%8SaI%3I1&<(Trh@`Z9r`BC{p`BPO@O?9gtHC@e6o2X6IwrV>yOU+h0sa@1w z>JW9bIz}y0i`7!KOr5RHQ5UI}dY!sly-B@U-KuU=?@{knpHQDv_o>gRZ>a~=BkKF= zr|JpyTlJ*+t9n}fP5oUXnyeXGvX-KGwez(WT1zcQ%hkGQUA2B%e{Fy^P#dNdXocD( z+H`G(R-sjDmuZW%tF)!sDs8oP15&gbwOio#TJ2VCowi=PP1~ex*6z^m)b7#l)gI6u z)E?6w*PhXKYtL!VYcFfBXm4t7Y42+9X&-1GYM*GwwJ)?UwUgR++K<|4?KkbL136@e z;)rwT4v!<=k>W^oWIE1sG;%a{GT>bTl*ljCN`TF0%9jgC!@+Z{U`_cG=^LFQb&Rx#?oew$pIiGVr?|jkulJjNf zTh7DI51mJyA3MKte(n6u`MvW8=TFX`oxeDLb)I(q=KRxnCJx2jthd$o>o4dp>M!Xp z>#yjq>aXdq>u>09>Tl@>^tbhc`aAl&`g{5z{jh#Se_#JV|4=`wAJae5Kh{6dkL#c6 zC-l$s&-E|#FZHkVuk~;AZ}pSXKZtOL3_#&E;@8U2!hm<#HJ=)8%$~T=A|1SE4J)mF!A!rMl8w4P5E23|FS> zJXb@P*LA+Dk*l$*iL0sW0#`Fvb5{#jOV@?2R<72rHm&kPrcXe=e zbairdc3tG^;_B+^=IZY1;p*w?{A z(v|NTnasT0yuw^;UTH2duQHdKSDV+E%gk%d>&)fm3iEn%rMb#nZQfwsXx?PrY_2hH zG1r>6n(NH<=56K%bECP*+-z6`+s!-7JI(FpUFHt+Zu1`VUUR2;pSjDt-+aJ) z(0s^z*nGr%)O^f*+lHKQKQukDABKkIawFPt4=yr{)RsGxKxv z3-e3!EAwmf8}nQ9r1_osz4?QA%KXv%#r)0ub99qnRcYx_cRbRN136I~(vb@p$V6`B zLGdU7C88vhj8af4N<$4$I?6zq=seUAdC~c(5o(N@pr+^o)C@I8El^8z;e?_2Lw#lb zioyPQ6_bYM_b&BSRM_v}NxyPMsZci$ilbumbSvdBXGZ{u6DG>_=mo6mg^kY+>~52X&DO z0~ac~O^iIt$b}ZN9E@(XNIa5me9BT8Y0Zd>k$sGAW@Im;8{Ptimpc2pk?S%+@S6-D zVE7=z?=pOd;g1;poZ&AS{+{7e4FAaRPYnOe@GlI*q^BAFo#8(iKEnuNgfJp8A~T{e z0%D{w;$XzdNE{=&)#Pn-Jz5DoS%p@k8_855T$W*xi1gh85~oiZo0SE!Tv;9}E%ld=E%ulCOMI1no2~27ZClW7Xakq1L|8n}rcA&cfxKRNZ3YIUI zeOL!W{K2Y$mHx5{%VQ;4O|AG*{1aPtcB18*(S2x_m0)F9O%9_6(L?BA^au?4D0&P% z4g)`dHle4`(=hm5Xb;+po<;l6UKpH@0c05x^p}N#fuf5;MTKt9(0o|=eP>k#W)BG! z5AjvZ0FjP-0t;_ga9|mzAduvN6@3B~d=V9Mu@21j7mFt_;J}J}|4d)GuQF6_x#Jg| zJ$p7D)G7kV6RjkNm1d z=S>)19x4GtQ08k^F}cF-X7}lQ04C!6KL*_Y3i>p)yf$yY;k^A8owUxk8l8)`N6{(t zV=Qm2hV@hZy|8d_(Xi1viq4?37)4Nu>DV{|`!rBRK2RiH`0YbM?*)PZSjE~FtYL>x zkYT;nv%K6l4>%|O+Rfsyz8UMNb6DWU7Ke&va7tIN2W(=uSP#vug)!>^C*mZu1E*Lm ztV@9=EyoV=1%kY*AP#PTmT$x9I0I+m^Ke7!LTiXM%9?0Z)etI%fiO*D+ypnp7euhd z7h27u2-U`F6~WkQoexXD7MH5mDZT)=1GuuG{lx%RTN|8QwES+Ihuh;0xFha_JL8LR z7u*$h!`*QYtDTi?>5oht<>SWA(EJSOcvl?+TVwGX%ivgZoARwAu*ptgHxJ zV~0U1zzd+&;Ush%f`{T^Xb&F2g)`jMUU)gsKbK44q%k4zLi|>87{{7h^x38bJilh=He*)ggkB)ltASKj067J@*ICN%N_A zCeXYbdR_!H?`+e&5-s0oH31D#$c<_F>;QOHTtFgV)y8Wcp8xmos*k>l@s)T9(06GJ zeN#cPbpvd=bNUv#8|D{H^Ou*+2Jg}zEcScn`2FQ2zS(}S&lhZ46{sBHI~Qy#@b!NW zwnMd7F}?*@b}L?o*8_ALICOY3co(C5B{5X*1yJ_pP`X=A7~?OW0)TN*8ZoUtWbeRt z;_Z>)s)ymo_KgfPIWmY35H0uD57sVxKYpNE3?8i>iQ9wz5g~B596u@)3VMA&w2E`l z=Slq3-=j}`=a%mt%Oxffxip4CYiBn-3W_L6BJ!L7cc>>5rDBSP?hz0sJ;T zSYr+Fkr-t%EK2ncttHe^>K-2x>VCK_&L4xi$DiQi)(C54jTVa);)D2e{6#H742#lY zQAV~dAr9hG_(%LxgdbLP$NUI4#t-*ZaB&3<5#dE`-2cR9@L5uAHi#U9dx14NGL|)F zOhI7!{6IbMiiX`c#=uZBMpf+LIlz@2KYj2QZ?|C3&!|^6_x(-TF_Tp0^%ht0fSc1 zrxI|u#KxfwTE3mMCGAKS$tF1@m*kQ5q=V(NimehWU`@BmteMs@ILDjKXmW09M3t9GzdvRmq$>B!ce!NPjW_x(}+;-4ETT^6nFd1cHGwA7r69oyzJP zWds>X@*@2L@~=b|I!`4f zWEx;JJr*OZSu+5ZQjQUL;Jr$HpoP4}VBoy7ZLU>}xTHSZW|4AI0pnH0j2DlcRuIMu z+2frT9xqf@;-3LzDy}v1W#>ZmQnK*hNA)VQlw4ge*~@Fl9^aFzNiQg?*?=rCAXt1Z zU{;b9fxpmsWIef!Y#%OJ}Y%I|8LOXVd_H>C9T|Cam~ifE{E9 zG;V6mvscVLeAVA;&984oY#{fO2grkwIjy--D`G)pzOi7)ynMz9fJnqm990(MW`07R z1~+pxDAz^cX2wnS&74_LSP_X-s@+lYEZHa8G3z1T?x;HnrH~iMi{vHpGI@o(N?s$c zlQ+nlnt zn%%F|S5g77ko}_2oeD8rEfnoZA=>H_j-~;~w@y-gK#Tg>|2Gt+n29nEU|TJ_Vfqk^Dq{CclsaAPK*c(;y=J z-=E|RIZF}6fDOcfoC+eH29$<~nKKGt>Jusozbdk+0@0B`5uWwxFOXxTfpxXT_&+zK zG}5hmJPt^3WQ<>s(=Mx(H>*>}h3`-agzQxSg@f=cRj3L-4(bFV3BvF>V2CBwmDZJj zkabnPz*8LnKPvwHNj(630>z9pgqaufe~fq|bB_zp-C?1K;%Ev@-%3+y8g0NMZlJ!H zwMHZ%y5k@KIMqT{U$cV(ho1!&r^#vBkb3F)F!j~eH5}??A99k@#)9bY&?dAg`I%n8 zThnH=Ic-5((hJGQv?VO0j{*NInoVPeN)C?*`)w$Dmj-5r zK^%}@WT$ih+%b{YAcywLo@JGgw@hRBh&$W59R7evTy9;-$oY(9dLZRR8ZlxFbGv(b z5fcB_z+d<6MGtt*-)(xAj-dr~EIABdj-%u01UivUqLXPM zy@VX&VhhVeh(9a@&>}NK<&`jfn0FP>fI}fz$~8pfb+&b*b-lI1T5a7DFR?Rd)KH(V z>}^`aGibD!`sq|!LZ^W=at#7PF;$GvxW@$oEM%>;R(bS{i5FKD1&V$B%X#Qx3-}CL zx|x=WGzHJJAD}@Rf+1%DiDz+IO$$`=te1e8Yis}Dc5QO_f7zWnA?pTvkP2G4nO36C z&_OgjNN3YIG(_jZNb~4?x`19PMiUP?id?txloyv;Abe@4L?po0SU0;B>n7`lG5Pbr z|11LyK22!_ilQ z1EjNC#jbJw*&*QQGR{*_L5JzJf~(ho;H{w7)0JS;?xHu)8^h}l)|b8h5{BjvF9mW< z3zdT5vGeTKZ6GY`tXr*()_N;3J~8V|508Y#j`Gi_s4ViA*06JpVCSukd$f#VpOhFu ze!W0G3y_Z`^d_6o)*5RACn6|;B0Gy)O+K4lx6>tCfmCHx zFpIK5=UR{V(0l1lu^#WI5AgM9ZE4)2j}3m~9%FZlSA4N-`&WzQF|k;lB*%ovZ><*j zvAsi(M1;+of6b5Q>Hhj@eJf>)gHaqKC+YiPj;*)u;vAb`OS@Pehv`Rk+zQ;^u@$kT4&iPrEjGk##Le zlDbWjCB-%%Tzzs?%$FFbPp&j!!9{;MUU;`csaJcpl2eKkp6w&nv)r?_9SUKLC6gSH z-0%}GB}j=MYu>jDeD>abPr3{7{Y$f64(1_tqh3@19 z3$pTBd9$;!xfRUi_AsmC!i6774e2t;E1fSjvUP~mSZX3QrQ@Uv=y-G&0M|llDP2fc zNUfzdQd_B=lqF@OyT~!2up(O!K1i#9%L*RyaDRCqR2(Q04(4nh=rz~}=vfL5HEi+t zBYP1;L*)?Zig#efdR0|chJwN*WW#cfdMhT03<<8OZ(gArR9E$Q5xWH0{72kr*3;IL zpunE6_P9y>fG#7>x?d2&Z6y}E8w@TD%?(*q3;U?@NG* z%AXUcESmO~bP-CCx=3AtivnC>2%fQa*R%;mau0Se~#!2I)3DQKg*LnedUgV*r)SZAHlo|?Qn<|xn@ht$+n+5_G zkfwvs&4`GdR4SE8K`DgxO0%SL5Iyjq$Z~&%z^SzB?zxax`rF^Eds0u>;!K~I|(n7AqBrC>F zy4_;KT)G_P47a5B?WD1EWn@oFT7pvWE$9f4V5xL9AbX7+VFM@jkx!-T!G#g91ce+$qY;|qGH_`&C> z5Gis{*M&1fGe^(l)Ur)4Wc6W-Us{WD#t*B6G&)yr6?|78cGso#X!%y)(gtaxvF(|xUgMwSL4o=9U3vp_#hXB7JFpwhc~YY?Kx;!>~+tR_?rGqs(1jIaQsL{p# znUysP1Ra$Q3B}ORIwlkd-xVwrHmfW;X@fRNM@2ig^)YWZPPB_{a-a06Xp&$Z=S>RT zNutplQQuNef=BvN`bu;-VSU9r)HZ`BrIXV4(hpz;e*~rU8T@>1+rKYjl+rJtluk>( zaiz49E2Z0_lu{N~L|GyV{M+{LOBvbrPnNj-lNDK&HE#dFLQ$S zjy*P5wqe|+!uDH5QMunAtTsh*OZh^9;VJ8vb77bzX9I@0VGMt?G5iTIOoF(+Lo08` zT-&4hn+Ud)JBJbMCJ^i)_mq2u5j<6m;Lmjt%oV#~T*{~TN@sY1Q=u{_TLHbv{R&%s z*4beMKGeZpnB*D~^p^(+5}dZqauU49lQH1=34cz$m>iLZz|SywxI6;LkdO9)?zfY| z)^G6hr}eu{kv|;o3P148NKbi;TmV1gC*h8v0hJKAf)`a_VAuZoWU$SIWj z%f2uP{epxg@-#URCgJI75}v6`!p7X9%!b6hx01&jMWHfS06;^YIOiEqzR?FBW0+zy z{PX<0%fHFLgN^+|{!>09pH+~86(aHnw!RaaA3S>sA|26z;Rq1&r#!U?QFqiU-(3C~ zcszD@QN36FP86|1;GX)lajUVDhIa@s-sJ{dG-Yrf-X*AGE_Fx(gPmkO6%QBlq)4ud5@u(Tkj z4R}2rv;7z5fX0t{vk-PPvfF`oklSuy#DwtujCbXW6nJd7OTmJN~&#zlr;Jg`B`ZI`*8>PRsjr_j`k{ zvH{K480aVd?*eZ+Gkg)l8wJRltUs)EHpDGC#6v(?HnHDBalq~JGNql8CHGfylw5{E z<2Gful?C;!?HJC5J<$5>veHTEtX!mY;da?pz0DZDK+JZb^+(u8;e4}w6dnraW-nY= zZ;nuDM<*(M=t`v@x=R_L476?o5UlGNZf;Ddk*0t&XYvXyrRn3!q)N^gmON_iFJJ-ErKV{y6Ec)2?RX1L5(9BNkK1s`=P zq!u7s;}624N^Xx^&#bAC^cKTJP(L-qU+HUI26>*T0Z{VcS)h6?I-&N1G9;3rW4I;H zs7(yJz#=UtVjX3qlD|#Kk0dyFsw|QMub(Nw-(d}o|O2D%d2KodP8NrVOgLU%9Ua7Kv)fK7Y>HtAwD0V z#09J@RN^lUOrPN`_Emc4h?*i1&Tx;IKMw?FLm0$`jAO~ANf5>#oDwRBzz2u{&AlPO z6NI-sFdcGoZR*FCDVHl(MEf}H8O{T2t-WHM@$@DzJ1e*SKe3QXuCmOwkje^fA(fTN zDrI%VLgv<3$PRTaWRo#q{_Ry&3mv}ND)Snba7 z`M6wH%>f~YvqdFApRZKt;;?kohsY<&aixoLB7(>OdqFciu*R5V30cbhYh$tp7W6ma z1^vD917Fbn`GOu)&w{?27a)t(39GpZjynlhA*b(!<59)-N0T$-8S&-hCtJ({(tk7&Or zzXH*IixBPN2+@Xw*$-KQ>~=ykg%fSCwT|JTb%-`@u$`3b z?5qbKHBQx)E~*iMXLtmj5dcrbMA>PJoKAcr=A0&KADyTsg#k)a8*qSzaW0Om15ly6 zdmru$fExe=7i!gJp4je~>Yd|*qiJ@84Gx2F>ciaSEb^6C)<;;iq3Q)h8buHp6+vWl z6e3aLn3Hub%I*h5T7(g4t+wHa1*INz_W>?SxBp?14??N+Yf=xQ79xoUjsN^QD zmhMw?)jYXC?GV;|;~Bn8q+TXOl%Lw!R(?@?cWPJURlBP_cL3-A;v|NB3_~OlV7QFoSqxV(Jg<(5R6D@Wa1|0rDmbbP0~qlC zWEkIqcZD`Hg>A|XXM+A-G7SJ4XKP7y64#Pyp?Znxi)hJ7HCpnLx>_grVsRB(2HMHPb zz%r=4Rt1UXs|$d?3u{O;HO$`>mA1_V!b+2($Mp!QQLYYt&^C_WEns zJFPBz+ZI56s|FeGl)!X2Nl@XPS?Zf1(6+TxiQo1bi|b?hN_7=rbVChB)593esKKa1 z*sT9ejQXoC#ALLO$i+>BbJJs!g+>RRL zf??!BHOPfiS{->v^RGASK`rbGBlnO%?h*A-^|1(YWi`mntczSPfm}6nLP0xJ5x#wd zb>U1`q3o@CN7f#0hO%@JRUkGFQioo(U z^>y`)2$r*Iu&k_$r7e`zSVj=5UUJn~{e@7zqrMB8=uizxvjHWBFJyR*jZ-dtMYDl(^=YC(poxwNP4tO+oNJ;gu8HQ>(L|w$qKpdm`5qEqO;z5xkVBq1CFCnF zhOi%ALg6ouDIsa)6(@ka)#1Cn>BNm_MDs%IdcaffZX z#qbIq&pfv>4!q3n4!I?o>n z`;UUO;04%2E5P-%!2@rA4pm9y`5c#mg zZ)Y_?ThtaafqfILDPZ3$g8fwy?3YGipKVJS$36=J>H4sD0`_eL_E}ms$9@UN{^~l| zUmVWkhqGl|up*G!xqUFlaO8?B1AloNZy#86uwbS_HV5Q!jyTTZjYKf@;?qIv2>5i4 z;Ik}(&$afV;oJ->KaS2hToz3Sbb1PO`e=PQI@fS?uB(I2%D-TyP<6f__fLcq!I^0X z0nu2)>o&06&rh)c>O2M$2U#Gl1D)xs1THrRHruboF#UKAr=0g`^u;rdh@bc zKG46|j$O2AT7Yw473aW>^~5eG3c_(#75CHZXu@7lKyV&@@eTe^IovVAGhrn@NDM>@ z11cb*gwRc#@+bZnU3@6)!yp|RRN+1dZ zL&1Z6K18*u3{;4v%O#=OT0k~fXwVr|5I5Ru8UCCrR^;>!Y9XNatO&htj?jCJE$p1$ zdG`Jl&s?0F+@pZpbHn7mR9nc&eG@15E%lK53r?SNroqc#liAzspA}*>^M*n*1XTfD zk-rG5MF*QaPh~yntlVcy>>rHMTk>+uyJYkvs)Gh%F6u30ia)LRIfqW z3wAF^T|B~P8!!4)!cI_D&Devr*X&mF7=A3aRd#hN+*x~@x3VCq{e%s8a%HHb1kTLW z6d%PF!z#PA!}h?CYkrFNnE+e&g^mABlMdQ3F>(dN&)6foA*~B{HPutghV!%& zqH#Nh_wdG(xn%jKgsLiICr7KbueEPTdn=CNXBpmS&4NwnDf|v4PT#4J6sd&jODHhb zzSn-(qWz$q;?fBFq4pIvyu2JX!1P@j0I7bMX77z)%OuU~@dY zec!p7f~c|fhxQH5vk1eGN8e|)D|BZO*N&Y;?gW%11QMVpKZu+KsCyE?(Z`YF=m%$tRyYPqZOC!QV8_Ld zA?Pm0Four;m=JZZSxCMvFz0ST?VA6aY!aagu-&2PFBpK9WpwOa_u%QbUqY!X!Bkrmz}c+t>bE_!c|H zIi?DH0|MU}j#5V%;2UBXT+fdq_39A#i|&W8+&M#y371U&x)r$ngrH8rU-hQCR6%<$yg?$Bhi1WcaHHX}*mija?%T^$SqOz{O!Kcx7Vu)TYjw zFm=o*Y@xa+W(lp=zLA%4WPcFIs*`OS4DK1@14z{G-K)Bffs8Fk~^?N{N7feVX zyxM1d0}fN&`qlbK{vil%XWozUeqG_zMIFN%gBb8Za&p8tH?2pa5#x;B9(e>QliJUo zuX&bG>zUf8=Gmm$&-&Fo^Vfb>EiJH>Qv2D!ntrotKO0cLB?HT)lGIF%Gv^_DiK&zMMi^YEEr5 zZmN{R-v1k#F0TS1d;~6K>1u5TonnD`ZDr+&ZLT!9QEWcLGvKB!@WqZ>hZr8ga5Dyu z$4H)!8v&OFj$(L-wGHxYaG}>{aIx3zqL|BP&1BdVl@r%9T){JUW!8SU_vKIPRgp;O z4|jo`Z=JBdunKv}*FZQ>Zuvx_VICv#)~T>a0zi4;J{!n-eQag(-B$3WR#~8-!Dm>)<2xvwg3kemB*-X1&9LMmqC*PTV37pqt z#4SQGapoS5+HvQ44goP6eiy@tDAM>|8TjvAL2e&yNl)`5y;gC|~`M)e2bw2ET z#QCW6G3Vp*Z_X#Bw$7)VPt%sp-3oH-;sIIRh zNsKfT^_2qLT&RKM;c^~?%h|BC1OcNbCN09Z|AfhM?*GTdm9`Ri1x`$XGc^tt00_ll z&K}^=SK&%T=K;ub!8HnbaEXFSzJi+$!2KkdaDl|qNQ)!H6KH>Zfxcr54XN0%sMRY**hxK{c;78ehW`F~t8#oIh4XW8ij%uN8IvVZnu^EufgGXHD2(!*dopHuJj_ z1?%Flt-sx*A#MuioLfqz@(|oq?SL9%lWb7?!>0`$<0Q~wP)VAL56WlYE;4wgJWIPv zZqRNUc|UoG+JQ6#od~BhKo4(FJAm$ODEEgmeos_=B=kc+DD-ETS_6(3A zFK{e^nu08x0l)Wv{vE{IYol;O)L2HypkAUF+uK)*vyVKjovN8})BsP+TBzaRb%1}H$rg{8$lt2SDT3$NT^*{JQG0E z7Fwra^v~c`8>=DwJpq?Z!dxK0g*@wP&-f^>3Hu7(aWgVR{O!-Dsp8#uda;U!ggu~B zb3RQM-h7GW7PEnBgb9y;wuP2p4K4?h@fx=tE1V*@zyqdSj+%_x9dMB4DZA(#W8OXKZ$PzN8r0QTWCu9V}UA03@>H*^v;rrD&OJeT_wQWEY&yD58wSFw@%6mox@hj!ui;8O%i zd&fB2pHOzwmgrmVPiR-xcogc_YCk$c1{o@>&$UPci#k8nuV{7-r=nh$0>+JTDSi`9 z1u(chY*qjdfw8$DCLlrMxL+}m%i-msvhka+JF%mdL%}V6pRiBC47V_`iGe#LcA zC>U`ot`|PVY49mBxDNp?1-8KB`8eWEh!t?eIzQ}AtgGcwfTP0Yf35H=gs|%Egs|#a zdbXaU=jwTSd%c6+QSYR8)-Te#=w0=0dUw5t-c#?T_tyL9ef56m7JYy|P#>fZ)-TqF z=tK2k`fz=OK2p!uN9m*WF?xYMRv)L2*C*%`^-20eI_vusgBE4Am>r?d-eVQK7 zr|UEHQoT$M>LGomK1(mxEA&deN}sLI(dX*(^!fS%{Zf6Qewn^Vw{)gou3w=q*00o; z=vV1W^{e%3^kw?B`gQtpeT9C#zEWSMuhwtSZ`5zXiTWD-7JaRLtG-TOuivI`&^PLv z^v(JfeXG7rzg@pWzf<3?-=*)+@7C|p@6~te_vyRz`}GI(2la>ahxJGFNA<__$Mq-l zC-tZFr}by_-TEGVul}sQPk)Y)HjK1oq#Yw!jAS#C!$>Y8d5pAYqyr-z8G)ouXGSh! zqzfZm8R^DIcSd?J0(qZajPwR%NFPS}GSZI`;OqcKz_A^~$Y4e;W@HE>Lm3&y$Z$qR zFfx*nd`3nwGMbSwj1(|3mJtxx@r+DhWFjMz7@5pSAtRSC;$vhABSnl9Gva4tDkCL~ zOk*U#$aF?#FjC4$86!bPLX6C0WELakjKDQcm5fv|GMkY(jLc(S`12_Ni?zKd0?&9;xNvDejn}w-$x&3&dU8-d>@(-sXePd0hoGg!30r zP|pv+c${W)dc3Ox7sm$`7N|gfhuk&kAQ<2aNnG_dE_b^c#=H4s$!Zq zj6(BB(gq$RMNLqBb{;;z22#Y8fg&$I$l-1N-+5}H#f0h$&s*n>AI|r6M8SSRp%2r<&0H5C>NZOCz4;2=szuf%% z?>YknkY>l?_BYN+K&Rv=Rt&Gc>lPk#9|h$IAfR3z2Y8#?rxIFu!-co4ypeL9R^CWa zK`U?6K4LTv;Baw#)HDU+zzR%}UWc^R<=ybKL7k_OJF(zllc+^|t}~M@#&FPE!|W+h zvjfkkgl~I>agt+~;3)e(CU~$VW-7{4UAi_Cd~y$@ZLKZ3zRniy8P|pK60H=l2qu z!v12fovsTjXIqJJZ3k^UQMib^vEj4ST8k;7ym@m_h~PQE5vfQ95K>4{L)5?BwQ{bDqTy zpTmca!(%$e`d9x}*jT;rxt|psl{Adp%~O-3vC*&-H2}-Z7%BSCpX`Duo74m%-sb!= z`c{$S;2}7u63(sISs6$HbcrF>KMbuv>&0}h(R#5tt(x!BY7ufLq9MqSg76)nUif~| zN_brcubS8XNQ%xO%Nlp1Az;r=VA%C^5n2ndlE z0~;`+?&*WNchNz=t#y{-Idn9yj`(jnlpk$YAi>Z)2GzevphqQQI|4~Unwo*DJEQ-D^i9|j(|U5N}&HpU?QKX6S)(nif|?wSU$e~bb9e~nj=8zmlp+xSn8 z4!2roMQJ(P{~50ntp{RUL?yq3fVFsSn9RC$-M<^Kb`cE}B8I z<)E@&-K*?J#WWl0?modC$Wf@_`-B*zEmZ22LEU!&8jZU_wf1ZA=z zdIQv)Pe9Y?2&gO@ghs+e=**ELw^RoyozNl_#GR!L=v&7kY~n6x3Az*oP=(wd4ORO( zmdM-DaHSnS50#@~BukozJIMuTsq-py8B~u|q7b?o4OE^*v!x`c&|iiYLS6Ygyaw=1 zUX%r;EKc}Jdr{#u$(jje+PuCyf!7!Q#PEJzq>V+TIn=1Tj zLgm-vyz&bQ-Ja&v^VeHtqBPyhtIn>o1~7aVl(sW`idTL82qo)`NbpVBP>!jHO8O71 zZBUz7Xu$~-fH0TAeNq=fts9huS(dd!RIq=~@N@7D;GaT)yQr}rVtv93K)gE^*Aa+}8;cS3qS|9PU_dj@z+$mAS2I!t<_*FPuaDdmYeFasY zP%I@g{4>LQ8GaW^N*@-ro&cfCdY)gyI+5Xn798Az+PW^hSd*xtM($Tpt$B#y*BQ|) zrzq$9oEP8+L|OhX5glN36U*M{ZuBsE8oi9(MjxZE(a-2_3@`>7gN(t(#l{e0s4>hK zZj3NS8u`X3W3(~GC@{tvu8kZP8V~SB^6dQhHs!?K0GXlnRV}?;` zlo>%IWXv>X8RbTWQE5~evyC~%Tw|Uw-&kN=YAiG^GZq<^!Hmm|D~!d)mBtd|Dr2c} zwQ-HH%(&LL&RA}&Fs?UN8mo-e#tp`e#!be}#v0=mW36$kvCdd;+-7VrHX56Z&BhjE ztFg_v-MGWJ)7Wm@W$ZBSHtsR*HFg^J8M}=8jR%YejfaefjYo_}jmM0~jVFvJji-#K zjc1JA#vWs@@vO1Wc+Pm<*l)aGylA{+yllK;ylT8=yl%W&#vjI?#u?+RiA<=HHmNC@vZ@8Y95@HyC-7k+&E*z{uN- z9AxAjM&4!QJw^^Oa+r}LjJ(gt2aJ5k$Wca)G4c^3Ajh9Da-5M*89BkoXN-K#$QO)! z$;elXe9g!=jC{+;Nk+b745lgONWOIm5_V zMiHZ!QNk!?RAN+SRAE$QRAbb^sFTq+Ms-GAj2euZjJg^1FdENj0;7qHCNY}KXbPjL zjHWT#fYEeDGZ@We^gKozGU{dYd`25F+L+NMj5cNT0!EuL+MLlAjJ9O-LPlFL+M3Ze zjJ9R89iv%{W;2?@XfC69jJ9XA1EU=o?ZjwjMlWKt3!_~b?Z#+#Mtd;YlhIy`_GYvX zqkS3e$7p{>2QWI2(Lsz3X7pl4hcG&n(P4}ZXLJOkBN@$SbQGhb86CrD0i$CX9mnW+ zMkg>jkaIvL(p9e2;ckq;0DSv{ujP8 zY?phY2hZ`~OZfZSJ)|N3`$#;ZMhSn_-~FR|1%IJ>@TDH?cCUB8%-?SC;CuPs?H;%{ zkTi1N#NQ0zzXI_HU$vjVx|sjE58f_?$#oB2;K6sex4S#@k4Jd$Wge2|!Pj}PfcQxd z_V5Q+@?Rw$lH$R0J-C^NWOzut2Vd^K!h^T)XX`u|&`IXQrttSW`73C#g#S(V;7J}_ z=^-Y6G}8SL|04kH=T7mEro7EF{IfRv*M%N_L$c398t`|wxPRi00j8Gj8~F$K@LzX& z@U?E)gO~9)1Nkq%hn(-hg&uqre>WKVT(!?by74#J?o>X6+klHkExJ-CDWau5Fo)3zSG%Dt2~$>P5r z_h5^+bMapu55Agz*wRA`{`WyQ^N=R|)einRfxmjlgPVIWK!umad2mw?Y3#vM_=6=L zev>5h!&g1W-#_fZVo>;kffgP-n|A=>N;huhzc%wJ@$papIj|Vdk z&gJh0@LxdQ86Lb+c;DtvX!%CVzS-UUHOl!me~-L@D;3N$=Go2WS=5<-k!r7DQ>Mc$ z3jAwU0f;3V#diU~x7+!PdzKeX85UJ(!gGALZT&Hb>*`#(oh;|gf4_D8ak_s z;c~=->PPBH^>-~rYoz6By|m%lbZwTlKwGY@)9%t9(Vo`cfEyo9!c7i8YQJc|X@6>G z9oQi`6i1xH<#0O^9LbI}M~0)Jqq!s3(caO~(G!l^k8@0L6g$csbK&ImO2=Bq7RTL= zU5?$31CI9{pE*8veCasl_|2(0UCw0Z7UwqS9nS4=VDBF1PUkK-UiT23l6%bg1e}h0 z#<|D2&$-|ElJiyP8_omHcbtcu?>mn=KX!iV{M`AK^IPZl&L5q>IDd2g8HeI%oD%1V z)8ovz__(CF)VTDx^Wx5rYZBKiu4P>7xOQm!Er<5M#PPZ zD~KB(H!1FtxS}|J-0Zl;ao5J(7jT$O*KyYuuCH9*xK6shcb#(m%gpP{Rp!m+E#|G}dUJ!h$=qUYGq;d2aJ;@NDvI z@oe=x=h^Rh#q*};fajp+UC$xU5zn8Vv+>R2TgJDI&y8;%-!Z;({6+Cy_Ux zPPj4Q=7fz2n-g{>yq9n|;b_9~gcAv$Cw!Ukb;7p^-zEHzh!c%OH+;)&Vq#`uqr@hO z7bG@M9FdrxI5u%oVqu~$u_&=PacbhU#6aRTiPt8sOuQ*^P2$?bb&0nnZcN;f_;%tu ziANHTC4QWEJn=;0=ZRk?ex3Mj;!jCZk|!x4DJdx>$(z(TscBNPqyb5Tl7=OXN*a?i zHfem)#H7hdQNn4V(CEbyx(T)aI!zQ`@HIrnXP*nA$nDOKP{&{M1WRFH5~5 zb!qA~sn@11PhF9^GIe$84XImFUrBu}^+4)-sfSbFPyI0USn9{A$5T(FewF%LnwsWF zi%WB*C8wpOrKe@4bxZ4!);DcX+Qn%@(}t&wOdFLpDJ_r|Ok0%3(ymCmGVQ9go6_z` z+n%-~?Vhxq4U`7n26+v7H7IT{tHBiwRy5er;H3udG&t7ai*za7OwUMfo}QcDJG~&? zmtK@!nqHP3N}rWpkzSR4S-O>eb^5aO>(f`KuS>rzePjCO^sVW)r{9^rJ^iip57NI% z|0(@!hMM8YNX$siNX=-Fk&$s;#`zhIGcL$zk&&A*Bx790gp5fUg&Dq#;*6;oD>7DP z+>mio#+r<^8S67PWNgmZma#MA(TqJA2Q%K!_&no}OiyM)W>RKKW`oR(%+Z;XGfOiU zWiHFSIdf~~9hrA!-ko`G=B~^KG9Su(B=hmir!seEKAZV`=Aq2*GXKAt&ig&7!*SdF zq-wS9y&;ScMwkIYfDlL^At8$m;Q*eK1BWqsDXSS;TGKqt3XsQR^Pnx_7l& zx7Jnbs#fdU>-t{r^TYG}6ZiGp9~eoDE(``El_6os7z&1xp=N{`Rg8&@84R4Ukg=Mv zg>is!h;f8*nsJ43m2sVMgK?knfbodgirIzPkD0=hGYw25Glywr<}t0zVy1&x!5qx2 zVNPOBVNPXEW0K7I%*D)A%&p88=5gjl=4IwB<~`=q z$(CeCvOC$EJScfca&0n|yf}GP@{h^4lAp1XSglxXSZ!I~vO2IjvAVE&vih)CECox) z%3@`+a#*D-2g}8(WDQ{rV-07GU^TG5W6fc$V69_qW9?=gW4&a(Vtr(P&2GhR!*0v& z%I?PQ!Irbr*(!DhJCm(r8`%ZyDt0w{BzqKl40{}V0(%m>j@`iC$ZlruW*=l9Vjp22 zW1nT8V_#suWWQp+X1`^>XMbS-%W1>u&l$*Ja#$P=N6PVWhH{2+hI2-6YB-}gV>#nF z6FE~k(>P6>?>S32%Q!1IyE!eKy_}yo2RPR`4>^Bv-f-J-+jBc|J9E2o`*ZnRF;~jf zaC5n(Tt7F$t>)Hor*WrqXL4t8S93RVo4H%K+qgTqySXjgJ=}BLi`>iHYup>$Tio|4 zvXq<@Z_415aVaxXW~Z!4*_X0E8tJe-nQf|405$ z{KNdC{Nwze`KS1&`Dgj(`FHux`7ime_^Xqz3%CNQKrYYY1TzGU0#pze-~v)W3z`IT1j_|G1@{CG1b+x#3SJ3b3*HLe3qA<`5quVW5w;T! z6c!4Lgm$4v=o6L;0bxiuNC*jGVN_TxY!H4YTp-*e+$TIKJTLrJ_(=Fx_>ZWAsFSFR zsGF#Vh$B*p)FO>YE7FVdL|&0!6c7bPVbNGoqX-qnMYxC*Z4@<&wurWgc8Ye3T10z9 z=R_Apmqph^H$=BY@6%*yiZo@KI!%+NP1C0t(u`@AwEVQ9w34*iG%RgV+TygOY0J}A zrX5T>oOU$rc-qOdU((K`olSczW{ElC6mhCpAQp+mVyRdzR*N;_EOEBjFCHeIBAzO) z7dMD!h*yYLiPwnNiZ_Tii8qV4h<}zONm@zTNZLxim2{AFl5~-Dlk}GKl`tg960f9M zQYV=vnJ$?rnI%~#*(TW`*(Lc=vPbfh0MfyVNOlOUtEz6qHs-XGs@HH%d24w@G(McS$cvuSl;+Z%A)Rf0y2q-j{xs zsbw0OPL?IhmYHO^vOJkpRxB%(xnv&MR2e2)BwHd|E?X&EEjupzS$0ZxMs{9yNp?kc zO?F-Oms}(l%VlzfTq#$}HFBLiOP(V)%M0W-d4;@MUMFvm&y>%SWAY#5>*O2c&GN1C z?ebmn-SYE_ZxtOBofTab-4#6*y%qfw0~9O;N5NMJ6f6`vJf(p#msNpGLtF`b`oNH0xyq`T9->HhS2 z=^N6Irk_o}p8hEPtujg3L&;KVmHA4$GN`Okj!}+RPEyt?>y^`$jY>?3D-+5&%K6Gg z%3aE1$}`HV%A3kt%70XCR2&sg#aD?`5|vz~RH;?jsvMO?m9Ltrny=cTI-okPI-xqH zI-@$Tx}>_Sx~96Jx~00Ky03budaQb-dZT)$`dj@!btiRKbq{rKbzk)WHB-$}=cvu< zJavJ(NL{LSs9kEedYGD4H>u~U=c^Z~7ps@4SEzqbZ_Kb{lxF}L;S4aNBBMHEd`3eC znXx5fTgHxz-5Gl_e#$tQaX8~h#&4P=O)Jeens%BFnogRon(mrDnt_@{nthu6nuD4n zn&X<2n$w!Insb^bnVmAbWOmQ&nb{|^U*^C}W+pdNkcnol&)k^VoVhh~N9OL#mdw4G z`!cU+J8QdYduV%U`)K=V2WXjEmX@dGYsFfr)}tM+9jC3;&eJZ_ZqPPsw`zB2cWd`( z_i3+a?`fZF-)P@!KWabgzS1S>TI)LLy6C#;`s&!aRGmtfs{?dl9i)rsV!FY)VY)H8 zak>e*X}TueT-^fQBHa?*a@|VZYTa7hdff@#N!>5Hv$_kqOS-GNYq~%60=-Bt(aZD- zy;85%XX9)@0qzJ~q=h9TL&F{BuT2B{&_;4%0N<%XbP zkfFj5H6VtmhE;|&hINJwhGxSS!*;_?!ydzd?4)dFHY=Nx&C3>Kr)5jCW!VMURoT_q zHQA%H$7N5*o}68q-H<)Y$S`IYvyDDuz!)-uM%aiL2ODdQqm5&YaU)@*j7`S5#s$U| z#_h&k#uno~;{oGg<1ypU#$SwQj8Ba(jIWGujPH#fjGv63O}$K|CcDXH@|b+4auZ+* zn?O_46f+Go4L4z?A57~_n@n3w+fBPnEv7xDOQyG`_ok1gPo^(9Nja@@+U0c0*_3lC z=S+d>x!>n5&0UeZ zI(KdE`rJ*q&AG?TUzwB4tNA%QNJe^2~Xbyii_kUR_>8-i*9i zdGS0vFOfGd|J(f3d||#gUzVSqug=fR*XBF&Yw}0ukISEsKRJJDetrJT{CNH=>$leK z)-T4`&Ob*^=R^?U15>oRML z^@jB~>+jaP)(6(d)<3K-t#1lO6yOD90bMY=U|zw(g2e?(3U(J_^Z%V7%Ci82o**OV}(Nss|tq~&Mf?)a9!cX!sf!Qg*ys&749uOXmi`DY-4S4 z8)2huvu$&23v4TFn{1nH+iW{+Kic-%ezM)L{bsvuyK8%3du)4ZdsfuCNLZ9sBrTE` zDT~xanMJxHW09p;Qfw@PW3a-`&V$;pz_C1*+=m3AoYRNA$)dugxIKBfIj2bQu+Q%i@IPA{cO7nH6j z-B`M-^ib)I(uZYVmvt=bRo1^uQl>4lm6ep)%baEIvQcHz%NonDvhT`>vV~(ZS?8pkP0qQ_1)qgO_HOka^j`2@@?Q1+ z>b>cG?tSU~%lp>*x38VAy|0t6tFMPI#h2<6`oun|&*;nXS$tNX%?J2GKF|mIqQ0@d z@xDpET3?+H^DXi%_AT?R^sV;o^8M)B>)Y=;=sV-P?YrZ-66Q?4z~DmRwrmb=P5<^FP@JXDSZ z=s;6oPGDYOLE!tqlECu7%D|eyy1<6OrofiKw!n_S?m$amU*JICaNua*MBrrLm%y38 z`M|}%mB6*YuYsF^TY)=)`+k z2D$+~fZjk~U;w}b*Z>zu1%!YYkOAp{3eW&LAPX=8Ie;0+2MPciPz;m;cEAa^0UrtKc_5eozrq2Gv1LP!}`=O~JxoaWERJ2~G;m4AQ~#!HdBw z!Rx`B!P~*R!3V*|!Kc9&!Pmie!4JVtq23`;NEylu=|a9xMQCVfbZA^?VrX(`YN$Sh zh316jg%*Yuhn9wxhgOC*hBk+`hPH=(30)4|3OxyT3U>*23-<{34)+TW4D-T*uqj*^ zE)JK5?O`N5H9RX!hnIxcg%5|%grA1rgg=MB3`!c*Wl-Nij6tcO19X8N&FC!6{%JI1QWuHi9S^2MLe@6X0xc9=HHp1TF@bfh)k( z;9774*bHt3cYwRVAHhA~K5##H5IhVX1&@P2gQvjL;92lIcoDn|UITvxZ-TeL-@$v} zL+}as6np``0$+pgz`wzd;Aij)^gpN-)COt`eG7GjIz!!{9#C(nA2bk3hS(4nN`-__ z8YF>aP&%ZBG9evgfQ(QMWPz-Z4Jv`kAP3}zyihp=Kw$`kU?>X3pux~ks0ylvMna>Y zG0-?@0yGJl0@Xnc&`f9+6o&|if)dbdXf8A#S_CbImO{&+RnQt}9kc;zhPFW4p?wv9 zR6MVES@Ejkb;a9?zbigge6IKcC&8`YHgG$*J=_uQ0(XOZ!hPU=@IaUevtSO)gZZ!s z7Q<3l4lCgdI1|>x*>DbQf%D-)xCkzR%U}oWg1xXG4!}Wp5DdW)7=bI{q402c1Y84; zfycv>;99sIZh&XNv*0+4!xWr==fLyeh4Ah$FIyBBF|DBDzRc#2CqmSR&Sl zEm9J(M_du_e>QL+5{iJ4!O^+V1<~)LOQS2ItD|e98=}q8tpGW_UzK*_&eu#dGenFCu)<|2VJ<CK6*2-D zg^WceAd``)$TVaIG7E_#1VSUTk$K2MWHGV~S&6Jc)*%~_&B!)nC-Nh*7uk;-LXILQ zkdw%1%%_F?B36rjKREa$=U4HD-&I#OyIw%p0qVt&5$G{ZrYqQc{^$ zd9m_#5#%9wL|6&`E|&{A^!~RJ5)V1I20Z_W$4^tS;L+V zdtcS3N>OF6qN?UqJ*j#>oIBh%JUo1I_1Nm^)yt}HRX?r%I6^$aJ|Z$=>WHQh>qZHM*Men&CAYM^%lg8{K-eb#&wCRby6+X&$qCY|pWRvAVH=v9YmR#&sJf z9(Qqk>UhKW-0{Kjl@t0;SU2Iqgbx$DPpqFbc~aA))02}YXH51_{$=v($sea=PH|2d zI%V#Zl~Y=#T(0d{yS?^6?bF)#Q#=00pj`Qn!Rb>MtgES8Rkye9THTxaQT6NUPt`w| z);MiZL!#ki!}W#-(>2p`r!Sb%aYk^)jG6qIB{PpUe%;7!v^Lrs9gXhBP-D0eY8-;H zQ7+0u`KSmLqcSudRil}x9yOpwG#AZ73s4(cf|j99)Pwp_01cxM3Zn>Gi4H-Bp~KM; zXbn0B9gj{zr=U~OdUQJ4h+-&?QfL!82c3^DM88Lupv%#f=xTH=x*pw#Hlth79q2B! z1>KA8M-QS$&|~Nc^b~pqJ&#^OucE)AzoEaQ_t1yvWArKd0)2(PLEoVt&`;>U*#EGv zu{Ky+tUcBV>xy;9dSZRB{ul#G#yA)c6JR1tjLEQcOpR$UEvCl|m#ztbJu(8+#Y!X(B)nU`H8Q3fg!@k1^jK-RzBiJ$Q1a=BLgPq4NVOOy0*bVGA>^626 zdw@N{{=lANe`2q(x7d5^1NI5~H~v-p>v)@ZyLg9qr+Alm_js>(-+2ExBc2@R#8cv_ zaY0-Zm&E09WjrIUjc3J;@!Ys2ZjIaG#qqMZGwzA|;}G5#AAmD)HlBj>aS<-T<+u{h zz_oZ5Zp3r(JiGue!b@=n?#6w101x3H4&w+u7$1gL<2Cpgd^|o0uf^-}>3AcK;W$p= zP54}V0scL{6kma_#@FH-@Me4~z60Nl@4JZG=2`hh+o04<2Ui!_+9(~ z{uqCXzrbJNZ}9i{NBlGK74bFEhG<80AUYG>h@M0rqCdePSOk|yC4_{SkP+#Gn#d&d zL^hE_SO_a&BT5K6;Uc_5IT0iV5fwy~s3e9G!-vl0wum9NFqVZ zA?6c{h$X~wVioZNv7XpOY$3K2yNDKIA8~*eO@ zCelpilZ9k4Sw=cZ59ucXGE72bgp83x$SQIKIf@)hP9P_fQ^{%M400A3Ckc`!XOr{D zh2&y#8M%^NL#`t?kj>;4ayz+`+(RB9kCG?Jv*ZQxGWjcco4iXtBL5(tkuS-=$oJ$& z@(b09YDcxFI#S)Jo>U*IA2ontQCvzurBPB!PN^v!Wuz=rAyrB_C^zM!$|-;XDVRd2 z!PGEnBsH3vK-E(9)O4zm!YG`gs01~KT1YLXmQkyz_0(o+8?~F-L;XY@q>fQ1sMFL1 z>JoL8x=G!k9#T)JXVgpT4fT%thx(WPif&DROLwF@)7|La^Z=Skv*{FCNK0u2ok3^P z2HHfM>3q6?E}~0m2koZI=^!1ZK^mqj>7n!pdK5jDo*VL&gxhbV7{l9P2|B{sSf7_+?|Ly diff --git a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist index 02995842e..6adec6831 100644 --- a/hw/xquartz/bundle/Resources/French.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/French.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist index 4e0034631..5272fed2a 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/German.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib index d71a98a56..12517fe8f 100644 --- a/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/German.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Drei Maustasten nachbilden LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ bsO8bGVpc3RlIGRpZSBYMTEtUHJvZ3JhbW1lIHN0w7ZyZW4sIGRpZSBNZXRhLVNvbmRlcnRhc3RlbiB2 ZXJ3ZW5kZW4uA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ ZXJ3ZW5kZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ LCB3aWUgaW4gZGVyIFN5c3RlbWVpbnN0ZWxsdW5nIOKAnlRvbmVmZmVrdGXigJwgZmVzdGdlbGVndC4< + 3 YES @@ -1262,7 +1267,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1275,7 +1280,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1360,9 +1365,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1398,9 +1403,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 Textzelle LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 6 System controlBackgroundColor - + @@ -1467,8 +1472,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1479,8 +1484,10 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1501,7 +1508,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1511,7 +1518,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1568,7 +1575,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3316,11 +3323,8 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3375,7 +3379,6 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3390,6 +3393,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect 244.ImportedFromIB2 @@ -3409,6 +3413,7 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3608,14 +3613,11 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3636,265 +3638,266 @@ dGVuIFByb2dyYW1tZW4gbmljaHQgZXJsYXVidC4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{325, 198}, {613, 302}} + com.apple.InterfaceBuilder.CocoaPlugin {{325, 198}, {613, 302}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {512, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {512, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {375, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/German.lproj/main.nib/keyedobjects.nib index a95fee95b159798500ccdac0ff5f9bd9ad64fc4d..a017a7f401d1e90405ad02bb736e623e2c6f84e9 100644 GIT binary patch literal 53122 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 S{@afJull|Fzx;o1ANxPVYiM!+ literal 50746 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 M)cC*t|A!|2AFbIbnE(I) diff --git a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist index 3c4e94cd1..26ba572cd 100644 --- a/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Italian.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist index 8db4f8aba..b78c7c5fe 100644 --- a/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Japanese.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 76 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist index 05ec1981c..068c07777 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib index d2eb1d110..adbcd6f5c 100644 --- a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/designable.nib @@ -1,14 +1,14 @@ - + 1050 - 10A222 - 708 - 994.5 - 404.00 + 10A314 + 718 + 1013 + 415.00 com.apple.InterfaceBuilder.CocoaPlugin - 708 + 718 YES @@ -19,7 +19,7 @@ YES - + YES @@ -229,7 +229,7 @@ - RWRpY2nDs24 + Edición 1048576 2147483647 @@ -237,7 +237,7 @@ submenuAction: - RWRpY2nDs24 + Edición YES @@ -314,7 +314,7 @@ - UmVjb3JyZXIgdmVudGFuYXMgYWwgcmV2w6lzA + Recorrer ventanas al revés ~ 1179914 2147483647 @@ -397,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -409,6 +409,7 @@ 256 {{13, 10}, {593, 292}} + YES @@ -425,11 +426,12 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 0 - U2ltdWxhciByYXTDs24gZGUgdHJlcyBib3RvbmVzA + Simular ratón de tres botones LucidaGrande 13 @@ -456,13 +458,12 @@ 256 {{36, 40}, {501, 42}} + YES 67239424 4194304 - Q3VhbmRvIGVzdGEgb3BjacOzbiBlc3TDoSBhY3RpdmFkYSwgcHVlZGUgcXVlIGxvcyBlcXVpdmFsZW50 -ZXMgZGUgdGVjbGFkbyBkZSBsYSBiYXJyYSBkZSBtZW7DunMgaW50ZXJmaWVyYW4gY29uIGxhcyBhcGxp -Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA + Cuando esta opción está activada, puede que los equivalentes de teclado de la barra de menús interfieran con las aplicaciones X11 que usen el modificador Meta. LucidaGrande 11 @@ -474,16 +475,16 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA 6 System controlTextColor - + 3 MAA @@ -495,6 +496,7 @@ Y2FjaW9uZXMgWDExIHF1ZSB1c2VuIGVsIG1vZGlmaWNhZG9yIE1ldGEuA 256 {{36, 170}, {501, 34}} + YES 67239424 @@ -513,6 +515,7 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{18, 88}, {402, 18}} + YES 67239424 @@ -535,12 +538,12 @@ IHBhcmEgYWN0aXZhciBlbCBib3TDs24gY2VudHJhbCBvIGRlcmVjaG8gZGVsIHJhdMOzbi4KA256 {{36, 112}, {501, 28}} + YES 67239424 4194304 - UGVybWl0ZSBxdWUgbG9zIGNhbWJpb3MgZW4gZWwgbWVuw7ogZGUgdGVjbGFkbyByZWVtcGxhY2VuIGxh -IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA + Permite que los cambios en el menú de teclado reemplacen la distribución de teclas actual de X11. @@ -553,11 +556,12 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 256 {{18, 146}, {402, 18}} + YES 67239424 0 - U2VndWlyIGxhIGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFkbyBkZWwgc2lzdGVtYQ + Seguir la distribución de teclado del sistema 1211912703 @@ -573,6 +577,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA {{10, 33}, {573, 246}} + Entrada @@ -618,9 +623,7 @@ IGRpc3RyaWJ1Y2nDs24gZGUgdGVjbGFzIGFjdHVhbCBkZSBYMTEuA 67239424 4194304 - TG9zIHNvbmlkb3MgZGUgWDExIHVzYXLDoW4gZWwgc29uaWRvIGRlIGFsZXJ0YSBlc3TDoW5kYXIgZGVs -IHNpc3RlbWEgZGVmaW5pZG8gZW4gZWwgcGFuZWwg4oCcRWZlY3RvcyBkZSBzb25pZG/igJ0gZGUgUHJl -ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg + Los sonidos de X11 usarán el sonido de alerta estándar del sistema definido en la pestaña “Efectos de sonido” del panel Sonido de Preferencias del Sistema. @@ -654,7 +657,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 75 - Los de la pantalla + Desde la pantalla 1048576 2147483647 @@ -744,8 +747,7 @@ ZmVyZW5jaWFzIGRlbCBTaXN0ZW1hLg 67239424 4194304 - RXN0YSBvcGNpw7NuIHNlcsOhIGVmZWN0aXZhIGxhIHByw7N4aW1hIHZleiBxdWUgc2UgaW5pY2llIFgx -MS4 + Esta opción será efectiva la próxima vez que se inicie X11. @@ -784,8 +786,7 @@ MS4 67239424 0 - TW9zdHJhIGJhcnJhIGRlIG1lbsO6cyBhdXRvbcOhdGljYW1lbnRlIGVuIGxhIG1vZGFsaWRhZCBkZSBw -YW50YWxsYSBjb21wbGV0YSA + Mostra barra de menús automáticamente en la modalidad de pantalla completa 1211912703 @@ -807,9 +808,7 @@ YW50YWxsYSBjb21wbGV0YSA 67239424 4194304 - QWN0aXZhIGxhIHZlbnRhbmEgcmHDrXogZGUgWDExLiBVc2UgbGEgY29tYmluYWNpw7NuIGRlIHRlY2xh -cyBDb21hbmRvICsgT3BjacOzbiArIEEgcGFyYSBlbnRyYXIgbyBzYWxpciBkZSBsYSBtb2RhbGlkYWQg -ZGUgcGFudGFsbGEgY29tcGxldGEuA + Activa la ventana raíz de X11. Use la combinación de teclas Comando + Opción + A para entrar o salir de la modalidad de pantalla completa. @@ -842,7 +841,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 0 - QWN0aXZhciBzaW5jcm9uaXphY2nDs24 + Activar sincronización 1211912703 @@ -864,9 +863,7 @@ ZGUgcGFudGFsbGEgY29tcGxldGEuA 67239424 4194304 - QWN0aXZhIGVsIMOtdGVtIGRlIG1lbsO6ICJjb3BpYXIiIHkgcGVybWl0ZSBzaW5jcm9uaXphciBlbCBw -b3J0YXBhcGVsZXMgZGUgT1NYIHkgbG9zIGLDumZlcnMgQ0xJUEJPQVJEIHkgUFJJTUFSWSBkZSBYMTEu -A + Activa el ítem de menú “copiar” y permite sincronizar el portapapeles de OSX y los búfers CLIPBOARD y PRIMARY de X11. @@ -904,8 +901,7 @@ A 67239424 0 - QWN0dWFsaXphciBlbCBQUklNQVJZIChjbGljIGNvbiBlbCBib3TDs24gY2VudHJhbCkgY3VhbmRvIGNh -bWJpZSBlbCBwb3J0YXBhcGVsZXMuA + Actualizar el PRIMARY (clic con el botón central) cuando cambie el portapapeles. 1211912703 @@ -971,8 +967,7 @@ bWJpZSBlbCBwb3J0YXBhcGVsZXMuA 67239424 4194304 - RGVzYWN0aXZlIGVzdGEgb3BjacOzbiBzaSBkZXNlYSB1c2FyIHhjbGlwYm9hcmQsIGtsaXBwZXIgbyBj -dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 + Desactive esta opción si desea usar xclipboard, klipper o cualquier otro gestor de portapapeles de X11. @@ -988,8 +983,7 @@ dWFscXVpZXIgb3RybyBnZXN0b3IgZGUgcG9ydGFwYXBlbGVzIGRlIFgxMS4 67239424 4194304 - QSBjYXVzYSBkZSBsYXMgbGltaXRhY2lvbmVzIGRlbCBwcm90b2NvbG8gZGUgWDExLCBwdWVkZSBxdWUg -ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA + A causa de las limitaciones del protocolo de X11, puede que esta opción no funcione siempre en algunas aplicaciones. @@ -1043,9 +1037,7 @@ ZXN0YSBvcGNpw7NuIG5vIGZ1bmNpb25lIHNpZW1wcmUgZW4gYWxndW5hcyBhcGxpY2FjaW9uZXMuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBoYWNlciBjbGljIGVuIHVuYSB2ZW50YW5hIGluYWN0aXZh -LCBsYSB2ZW50YW5hIHNlIGFjdGl2YSB5IGFkZW3DoXMgZWwgY2xpYyBkZWwgcmF0w7NuIHNlIHRyYW5z -bWl0ZSBhIGVsbGEuA + Cuando está activada, al hacer clic en una ventana inactiva, la ventana se activa y además el clic del ratón se transmite a ella. @@ -1061,7 +1053,7 @@ bWl0ZSBhIGVsbGEuA 67239424 0 - RW5mb2NhciBsYSBwb3NpY2nDs24gZGVsIHJhdMOzbg + Enfocar la posición del ratón 1211912703 @@ -1121,9 +1113,7 @@ bWl0ZSBhIGVsbGEuA 67239424 4194304 - Q3VhbmRvIGVzdMOhIGFjdGl2YWRhLCBhbCBjcmVhciB1bmEgbnVldmEgdmVudGFuYSBkZSBYMTEgZWwg -YXJjaGl2byBYMTEuYXBwIHNlIHNpdMO6YSBlbiBwcmltZXIgcGxhbm8gKHBvciBlbmNpbWEgZGUgRmlu -ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ + Cuando está activada, al crear una nueva ventana de X11 el archivo X11.app se sitúa en primer plano (por encima de Finder.app, Terminal.app, etc.) @@ -1196,10 +1186,7 @@ ZGVyLmFwcCwgVGVybWluYWwuYXBwLCBldGMuKQ 67239424 4194304 - QWwgaW5pY2lhciBYMTEgc2UgY3JlYXLDoW4gdW5hcyBjbGF2ZXMgZGUgY29udHJvbCBkZSBhY2Nlc28g -WGF1dGhvcml0eS4gU2kgbGEgZGlyZWNjacOzbiBJUCBkZWwgc2lzdGVtYSBjYW1iaWEsIGVzdGFzIGNs -YXZlcyBkZWphcsOhbiBkZSBzZXIgdsOhbGlkYXMsIGxvIHF1ZSBpbXBlZGlyw61hIHF1ZSBwdWRpZXNl -biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg + Al iniciar X11 se crearán unas claves de control de acceso Xauthority. Si la dirección IP del sistema cambia, estas claves dejarán de ser válidas, lo que impediría que pudiesen ejecutarse las aplicaciones X11. @@ -1216,10 +1203,7 @@ biBlamVjdXRhcnNlIGxhcyBhcGxpY2FjaW9uZXMgWDExLg 67239424 4194304 - U2kgZXN0YSBvcGNpw7NuIGVzdMOhIGFjdGl2YWRhLCBsYSBvcGNpw7NuIOKAnEF1dGVudGljYXIgY29u -ZXhpb25lc+KAnSB0YW1iacOpbiBkZWJlIGVzdGFybG8gcGFyYSBnYXJhbnRpemFyIGxhIHNlZ3VyaWRh -ZCBkZWwgc2lzdGVtYS4gU2kgZXN0w6EgZGVzYWN0aXZhZGEsIGxhcyBjb25leGlvbmVzIGRlIGFwbGlj -YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg + Si esta opción está activada, la opción “Autenticar conexiones” también debe estarlo para garantizar la seguridad del sistema. Si está desactivada, las conexiones de aplicaciones remotas no están permitidas. @@ -1236,8 +1220,7 @@ YWNpb25lcyByZW1vdGFzIG5vIGVzdMOhbiBwZXJtaXRpZGFzLg 67239424 4194304 - RXN0YXMgb3BjaW9uZXMgc2Vyw6FuIGVmZWN0aXZhcyBsYSBwcsOzeGltYSB2ZXogcXVlIHNlIGluaWNp -ZSBYMTEuA + Estas opciones serán efectivas la próxima vez que se inicie X11. @@ -1265,10 +1248,12 @@ ZSBYMTEuA {619, 308} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1276,15 +1261,15 @@ ZSBYMTEuA 2 {{302, 440}, {454, 271}} 1350041600 - TWVuw7ogZGUgYXBsaWNhY2lvbmVzIFgxMQ + Menú de aplicaciones X11 NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -1293,6 +1278,7 @@ ZSBYMTEuA 265 {{340, 191}, {110, 32}} + YES 67239424 @@ -1316,6 +1302,7 @@ ZSBYMTEuA 265 {{340, 159}, {110, 32}} + YES 67239424 @@ -1349,12 +1336,14 @@ ZSBYMTEuA 256 {301, 198} + YES 256 {301, 17} + @@ -1362,6 +1351,7 @@ ZSBYMTEuA 256 {{302, 0}, {16, 17}} + YES @@ -1370,19 +1360,22 @@ ZSBYMTEuA 62.730998992919922 1000 - 75628032 - 0 + 75628096 + 2048 Nombre 3 MC4zMzMzMzI5OQA - + 6 System - headerTextColor - + disabledControlTextColor + + 3 + MC4zMzMzMzMzMzMzAA + @@ -1405,16 +1398,16 @@ ZSBYMTEuA - 99 + 88 40 1000 - 75628032 - 0 + 75628096 + 2048 Comando - + 338820672 @@ -1433,13 +1426,13 @@ ZSBYMTEuA - 71 + 82 10 1000 - 67239424 - 0 - RnVuY2nDs24gcsOhcGlkYQ + 75628096 + 2048 + Función rápida 6 @@ -1447,7 +1440,7 @@ ZSBYMTEuA headerColor - + 338820672 @@ -1465,7 +1458,7 @@ ZSBYMTEuA 6 System controlBackgroundColor - + @@ -1496,10 +1489,12 @@ ZSBYMTEuA -1 0 YES + 0 {{1, 17}, {301, 198}} + @@ -1510,6 +1505,7 @@ ZSBYMTEuA 256 {{302, 17}, {15, 198}} + _doScroller: 0.99492377042770386 @@ -1519,10 +1515,11 @@ ZSBYMTEuA 256 {{1, 215}, {301, 15}} + 1 _doScroller: - 0.68852460384368896 + 0.99668874172185429 @@ -1533,6 +1530,7 @@ ZSBYMTEuA {{1, 0}, {301, 17}} + @@ -1542,6 +1540,7 @@ ZSBYMTEuA {{20, 20}, {318, 231}} + 50 @@ -1556,11 +1555,12 @@ ZSBYMTEuA 265 {{340, 223}, {114, 32}} + YES -2080244224 137887744 - QcOxYWRpciDDrXRlbQ + Añadir ítem -2038284033 @@ -1576,14 +1576,16 @@ ZSBYMTEuA {454, 271} + + {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps - TWVuw7o + Menú YES @@ -1623,7 +1625,7 @@ ZSBYMTEuA - UGVyc29uYWxpemFy4oCmA + Personalizar… 1048576 2147483647 @@ -2198,28 +2200,26 @@ ZSBYMTEuA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2233,7 +2233,7 @@ ZSBYMTEuA - + MainMenu @@ -2478,7 +2478,7 @@ ZSBYMTEuA 196 - + X11Controller @@ -2488,7 +2488,7 @@ ZSBYMTEuA YES - + PrefsPanel @@ -2752,7 +2752,7 @@ ZSBYMTEuA YES - + EditPrograms @@ -2775,7 +2775,7 @@ ZSBYMTEuA - + DockMenu @@ -3329,6 +3329,7 @@ ZSBYMTEuA YES YES + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3618,6 +3619,7 @@ ZSBYMTEuA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3685,10 +3687,10 @@ ZSBYMTEuA com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{438, 548}, {619, 308}} + {{300, 409}, {619, 308}} com.apple.InterfaceBuilder.CocoaPlugin - - {{438, 548}, {619, 308}} + + {{300, 409}, {619, 308}} {{184, 290}, {481, 345}} @@ -3705,11 +3707,11 @@ ZSBYMTEuA {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} + {{68, 453}, {454, 271}} {{433, 406}, {486, 327}} @@ -3910,9 +3912,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3920,9 +3920,7 @@ ZSBYMTEuA YES - - YES - + YES @@ -3960,6 +3958,15 @@ ZSBYMTEuA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 3 diff --git a/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/Spanish.lproj/main.nib/keyedobjects.nib index fe4b554dbe8b9c179efa8601a3bedf730bb57046..6d445d1dbf8c3f496d87c43a9c04f97384eafdf4 100644 GIT binary patch literal 53745 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

)QN1T4l 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 literal 53308 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 zyCR1pMLprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib index 53166fe2c..e0c838bcc 100644 --- a/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/da.lproj/main.nib/designable.nib @@ -626,7 +626,7 @@ ZXJzaWd0Lg 256 - {{74, 202}, {128, 26}} + {{70, 202}, {128, 26}} YES diff --git a/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/da.lproj/main.nib/keyedobjects.nib index 3b79218e1e3cf73403ad9dab8574d00715a4c181..e1c0a2eb1eb2cc4d0ea9c4acf9a01d9aca85baad 100644 GIT binary patch literal 49339 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 N?0@lp{Qu|v`ag`Z0h|B; literal 49367 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib index 215618845..dbdfc1e8e 100644 --- a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ RW11bG9pIGtvbG1lbsOkcHDDpGltaXN0w6QgaGlpcnTDpA LucidaGrande - 1.300000e+01 + 13 1044 @@ -461,7 +465,7 @@ w6Rpcml0w6QgWDExLW9oamVsbWlhLCBqb3RrYSBrw6R5dHTDpHbDpHQgTWV0YS1tdXVudG9uw6RwcMOk aW50w6QuA LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +474,9 @@ aW50w6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -639,7 +643,7 @@ ZXR1c3BhbmVlbGlzc2EuA 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -706,6 +710,7 @@ ZXR1c3BhbmVlbGlzc2EuA + 3 YES @@ -898,8 +903,8 @@ dXR0dXUuA 67239424 0 - UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCAKa3VuIE1h -YyBPUyBYOm4gbGVpa2Vww7Z5dMOkIG11dXR0dXUuA + UMOkaXZpdMOkIFgxMTpuIGVuc2lzaWphaW5lbiB2YWxpbnRhIChrZXNraW9zb2l0dXMpLCBrdW4gTWFj +IE9TIFg6biBsZWlrZXDDtnl0w6QgbXV1dHR1dS4 1211912703 @@ -1265,7 +1270,7 @@ ZXJyYW4uA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1278,7 +1283,7 @@ ZXJyYW4uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1363,9 +1368,9 @@ ZXJyYW4uA YES - 1.217310e+02 - 6.273100e+01 - 1.000000e+03 + 121.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1401,9 +1406,9 @@ ZXJyYW4uA - 9.900000e+01 - 4.000000e+01 - 1.000000e+03 + 99 + 40 + 1000 75628032 0 @@ -1428,9 +1433,9 @@ ZXJyYW4uA - 7.100000e+01 - 1.000000e+01 - 1.000000e+03 + 71 + 10 + 1000 67239424 0 @@ -1450,7 +1455,7 @@ ZXJyYW4uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1460,7 +1465,7 @@ ZXJyYW4uA 6 System controlBackgroundColor - + @@ -1470,8 +1475,8 @@ ZXJyYW4uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1482,8 +1487,10 @@ ZXJyYW4uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1492,6 +1499,7 @@ ZXJyYW4uA {{1, 17}, {301, 198}} + 4 @@ -1503,7 +1511,7 @@ ZXJyYW4uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1513,7 +1521,7 @@ ZXJyYW4uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1524,6 +1532,7 @@ ZXJyYW4uA {{1, 0}, {301, 17}} + 4 @@ -1532,6 +1541,7 @@ ZXJyYW4uA

{{20, 20}, {318, 231}} + 50 @@ -1568,7 +1578,7 @@ ZXJyYW4uA
{{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps
@@ -3316,11 +3326,8 @@ ZXJyYW4uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3380,7 +3387,6 @@ ZXJyYW4uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBPropertyAccessControl @@ -3399,6 +3405,7 @@ ZXJyYW4uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3420,6 +3427,7 @@ ZXJyYW4uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBPropertyAccessControl 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles @@ -3693,21 +3701,18 @@ ZXJyYW4uA YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3722,349 +3727,350 @@ ZXJyYW4uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - - + + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{706, 450}, {525, 323}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{706, 450}, {525, 323}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {469, 271}} - - - + com.apple.InterfaceBuilder.CocoaPlugin + + + {{68, 585}, {469, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + {{145, 836}, {357, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 709}, {131, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/fi.lproj/main.nib/keyedobjects.nib index 677f9796b35d0ad39b04d564fd24f96781173963..dfb04f15fdf9a7bc1be8bcd0bc2fd94a78a58c27 100644 GIT binary patch literal 53312 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 literal 50882 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

wolaG!|sBvL^N#4Iz-f!A5au!wFc#RSQuxNv( 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 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib index 9917b6326..32291ca88 100644 --- a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/designable.nib @@ -1,5 +1,5 @@ - + 1050 10A222 @@ -12,7 +12,6 @@

YES - YES @@ -398,10 +397,10 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} - + 256 YES @@ -475,9 +474,9 @@ mCDsnojsirXri4jri6QuA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -1026,7 +1025,7 @@ teuLiOuLpC4gA 67239424 0 - 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0g66y07IucA + 67mE7Zmc7ISxIOyciOuPhOyasCDtgbTrpq0 1211912703 @@ -1049,8 +1048,8 @@ teuLiOuLpC4gA 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDruYTtmZzshLEg7JyI64+E7Jqw66W8IO2BtOumre2VmOuptCDr -p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDrpbwg7Ya16rO87ZWY7JesIO2ZnOyE -se2ZlOuQnCDsnIjrj4TsmrDrpbwg7YG066at7ZWp64uI64ukLg +p4jsmrDsiqQg7YG066at7J20IOu5hO2ZnOyEsSDsnIjrj4TsmrDroZwg7Ya16rO865CgIOu/kOunjCDs +lYTri4jrnbwg67mE7Zmc7ISxIOyciOuPhOyasOqwgCAg7Zmc7ISx7ZmU65Cp64uI64ukLg @@ -1128,8 +1127,8 @@ soPsnYAg7J2867aAIOyXreq4sOuKpeydhCDqsIDsp4Dqs6Ag7J6I7Iq164uI64ukLg 67239424 4194304 7Zmc7ISx7ZmU65CY7JeI7J2EIOuVjCDsg4jroZzsmrQgWDExIOyciOuPhOyasOulvCDsg53shLHtlZjr -qbQoRmluZGVyLmFwcCDrsI8gVGVybWluYWwuYXBwIOuTsSDrjIDsi6ApIFgxMS5hcHDqsIAg66eoIOyV -nuycvOuhnCDsnbTrj5nrkKnri4jri6QuA +qbQgKEZpbmRlci5hcHAg67CPIO2EsOuvuOuEkC5hcHAg65OxIOuMgOyLoCkgWDExLmFwcOydtCDrp6gg +7JWe7Jy866GcIOydtOuPmeuQqeuLiOuLpC4 @@ -1222,8 +1221,8 @@ nbQg7Jyg7Zqo7ZWY7KeAIOyViuqyjCDrkJjslrQgWDExIOydkeyaqSDtlITroZzqt7jrnqjsnbQg7Iuk 67239424 4194304 - 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7J24 -7KadIOyXsOqysOuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr + 7Zmc7ISx7ZmU65CY66m0LCDsi5zsiqTthZwg67O07JWI7J2EIO2ZleyduO2VmOq4sCDsnITtlbQg7Jew +6rKwIOyduOymneuPhCDtmZzshLHtmZTrkJjslrTslbwg7ZWp64uI64ukLiDruYTtmZzshLHtmZTrkJjr qbQsIOybkOqyqSDsnZHsmqkg7ZSE66Gc6re4656oIOyXsOqysOydtCDtl4jsmqnrkJjsp4Ag7JWK7Iq1 64uI64ukLg @@ -1271,11 +1270,10 @@ i6QuA {484, 308} - {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1288,7 +1286,7 @@ i6QuA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1470,7 +1468,7 @@ i6QuA 6 System controlBackgroundColor - + @@ -1583,7 +1581,7 @@ i6QuA {{0, 0}, {1280, 938}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps diff --git a/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/ko.lproj/main.nib/keyedobjects.nib index 310a9f403c3c8cf017df1f8ba37ee73a4da44614..1a91df72081739dbe4e0516cfc7ba1d4c35cc959 100644 GIT binary patch literal 46678 zcmdqK33wDm(*WGZ%$ou~9_kHjG!;{^enLetjtE;N3 zt9nKi=H(Wb#K*snFd~Q|0f|UL7Gz70o8T@g&h-=wj>{~{8j}lGX>lcm;Rj-V6hBszu8pbybU=o9oU`VM`MenP)ujBVJC zH5`P4aRiRRHSrxd0Vm?-xHY~T_r?A2U_1m5#iQ{!T!f49Bs>*Q!w=&p@jUz#ejcyF ztMRLN6W)y9#Bbqu@G1O0K8?@d&+!-dOZ+YV75`0a#7-3ABq1b*)FidYoumT7U2=^|)Iv2HNo&wpdI!CWwxgYBcRHB5>1diy3+OmHflj6~=!0}7eV9H$7t`nH zQo5Y3qO0jTx`FPbd+9!Ugr1=v(@*FHdXZkC*XVEbclwt=1p(Owi=YS&AxMZ4Y72FQ z)=pJ2ZwtqSDc&RY74H>Ch#6v@m@gKH#o|Lk%kqR}u4RekdCN-6%a%=+&6Zu3-IjMO?^;e--nV>g`NZ<2K6+(Pakca%HHo#ngbzVf|tx;#qGlE=z< z@&tLJ{D7>>kIIk9bL7Y6dGb^8)AD?IfxJ+DR$eT>C@+;)$}h`nBF5i&f3)t6;TSZC1_d zw1!&4tTn7r)>vz8>mAnm*2dN(Yg_AG)*jZL*51|>>j3Kz>rm?$YpylVnr|(#7F#D- zbt|(zVV!Gz%KEf*k@Z>Y3)bb}qYqno)H|%qj`pR3%9%ZkxPkCF}uN+VgDy7OH<*@RO z@~(13IjX#;98-=fCzO-QDdm0Tv~or{t9+oGQ$AEaQqC(ME1xKzDxWEzD_%No5Su<91e%-&>T*O%Ms)Vc7!-W9bt}eM}#BNQNt1Ch<3y{ zYC38;VjZ;|bsTjaagKV9I~?^L4IB*}cRCt58atXenmU>};vET&L`QQ+lB0#ArK6Rj zwWE!rt>Z37J4bs*2S-OoCr4*T7e`k|vZI@$yW?(04@XbOJ&sgYqYp1o>I%plWPFiQJi`G?3*1Bok zwY#+*T2JjBt(VqYOVRpheYJjCe{F!4s-hH1mK5n6^eQp?mv zX<1sf=GI1QIocR4SG!LetL16=T7l-#3bk=skyfmgXydgB+C*)VHd&jZP1UAp)3y7x z2Q*z{+6?VMZKn2+HcNY0o2@;fJ*qvX&Cwp$p3vrMPiphDr?jWF`Pu?)q4tcnNPAXW ztUaeK(Vo{{&|cJ*YA$LUSYuX0wb#0@zN!zS# z(Y9*awC&msZKw8zwoBWsy{WyW?a}sX`?R;U{n`QTpjN6K(hh6yXzyxAw4>U4+A;08 zc0xO;ozmXdPHShhv)TvRIqgI3BkjEQvG$4fsrH%nx%P#2LA$73(!SKb(!SQd(JpJ> zYTs!;YCmh&2F4YP&&&JN8H5~2MH+G<7YahbCqEIx7K{Zh=6pL!3 zI;bv+L-o)ds6J|d8lpQKqtEZp<3`o8v9>e$3in zm~eRd064`awBePy;SH4G;l<0u16t|sDJV(FEXd4p7r~X$iup{pFk)roOfp5(Xj>HAhJRk3j|AoG$8=KWK?sq1J$B z)8dk%+=3ikfbKdMg3*_m`p0s3Qz@&n{g(S)RNpU3b(femQ&1m0?losO)ED(b{m}rFiqgy!aXq1D-pj>nx8jJE!J}N*SREWl*B2WHbd$Mbpr9bU%6k0gcfN^dOpv9zwIw!)P{o1U-r#LvzsM=m|6zJ&ER_r_j^7 zP1p4L`gHvPeT)9Ken9_3|4jcvzo>t!|D<2n|6*8R*v7Dv;V_0@W_T6DuQI%r;q?q} zV0a_Ln;G89@OFlGGQ5l7HyPf`@Y@U@V7Qdw!wkR6@KJ`3F?@pIQw*PG_+y4IGW;dO z-!uFp!&eyoiQ%6a{)OSI3}0jTI>R>@{*B>382*b9;1|pYVT3XwFd{M{F#;?nzYhbl z04+q%phf6ev>4UBw@+&C%u((<;Fn}~aY=50!7qH|J>!eA+`6hebh}P`%=ZE?oH9H; zApzz`Ns%Wn&s~(B?ap)OWR|$iQC)_XXE;NE*>gwr9bb~?E-9Ob%h58l0(At|foElR z{ULe zw(iEZRU?Yc3T6XsPZ>J7bf1y8?Xf(##Xe46Aq=B-7|HcSl1v_BmymGB`QBmgP z<#10$9bxELm@1)#Fy;+PDs`i{o%Ty^)@xr|LuXl7J(K>*EHvA#}t^wE;H;Y~%GN zCcaIfUm#UE#*I^9?pGS4vWbe50Irr$yBWaMTW{!2h7T<;2;r6%#?ua|#&bSNi zij#3S++B~?6ZIB)OTC@mUhkxL)|2(_dJnzl*@|q28+yU(4dC_Bn^uG>VGO8)1e9># zIEr0|PNyIEuIhO9H=Do%@gQg--G?8?F3HD?&2!GAuid>j?og;Xp8XpKWGp<)+t$d+ zjAg)8VMYfgc@7?fbIWil0Dubh)+R`8DkIk_Yj5XKtJ4vJlicC1|=-+xS1^wyNMxB=SR=#O4kUpw7Kua7^z$Ja_AxVD(Bzy#Zg z-+*>@`$H5`4$;d5Lt;477h(YK0jtxAmRW@Q+YKY$os5pPs1 z7kG68PGEuvCd7v@0S!T{`al!mL6s3s8+B^?;S+(eCJyu(RJ|9lPV-J&5~RnyM1uA7 zDgcvELO8Z0lGK16qka8x88*Z>dV{lfEnRzB8SM3;rH1-&v#k-8 zVIP)NDsS37(^Adajcsr zWF5?j)%qlu5k8BIY~*u#lRmlX5N#pLIKKmBc0!-Kd_7jMx~7z=DYM_9fRNATOUtil zGm?Gy8?+b}QTKz?w2#OvEG*6__N_?#Y)f*895%{r)^*+fsWX%uAxFu3U3-mJB;ZW>vW8;m(9+2LW^$&Injo6_mJP(VLf-T9}yy zUG#A0=8P!;zz29Hn!jO1ljegwx*AvvK%nuio}vP?acJT0qFfUiXrWtyu_DZHhF9(K z-rVexF|d3{<3&uu0Fi<~1Lx&|?<{R{p*t0j$tuyAKEs7UEa=RM^dB!e~`oE zFY-4<6vH2-0yzwTce&djD6De%u)w01Qw~-&#<;@sER!@qa9H;7G3TzgWKR|^rmxj? zMjVW&`fQgK>9d{Sm{4?m$kgWX35{bD+O(d21_e>s3&v4uC5Ne?fDb2^q4x(F2`lfNkx>1?!QQ@GO*fWgG>S$W3}kdx&KoOe z46R9PaSs;H5>>#- zk6TW=(q!6ApQFE|ulx{bayRWkW!jV8LwnKQG==t|eNidx58RMS)964t2(Hp$hV(23 zf`csK6NOK4nAcrl>XyxFe!*QBnUjn;#ee1&_@r}GmJXpq=`a9$I2}Pw(hPEmj-;7% z6wRX9FeDrZV|chc@cm8%Sh)WThJ-tp(_k(c^9m*lNXtS`QAv=%{zCc_`XYV4K39Kg zRB6eMnIOAq4q8jc&|G>S9ZU0I=tmoE0}FDYs?T#N(fX5hJKX_*!M|a>$7khcXWm_u z39{2CX&Gom>n~J&^Zf40&8e5O7$P!8c2Px=Xwlg4y(u%2SaOcO`w4K1S!z$E(g% z{@BnbyzTC}?!0V%2T(TsO#A`}!@tgzjp$rsM2FKS={))reVWb(7F`VtJ zpHmsm;6ADS@_=k(Jb9o`Os9EJNWx#8TmsS;>n{Q$JqI%Sc|Bw>2OySrhx`~oeuAE)rwqtXbI4x>$Y1t@JgyA# z{(&Js3y^={h5USwfMK@2;)Q%w*2b@oE;zoT@?d>Vb@HV#SgZ9VLrqRMCc=mQ97ivK z6yZGgCH=~a=C@!?{lU4;;CV2ACKi`lIF*oJV+BnIZ065gKLc}J)#o{#oVOa7m{kVu z25{0%1Gshi`V427my^o-F(CEl$UhCy(9-?1`+9v#yeY?Ix-^Nw*HdA$TJLoqdT8I&9qGm!Y!*dvJ z#h-&Bd;q93b!tM3#<7VBiChCFab1|udiwNFgt|f;A4{R0aEGB2K!OPMg$6=H;ZC$c zXe=}#mxQK5Ga+6`5S(1me7>Lt`3B!dELWVF>$gt|?^+Wn$y_B<1sXvQl z0gJhT#c~)PSk7Xd3>ItA8dxmeV6lY6Ht@UU^y!~EgE^B4_t7E3Sk7ob+dJu8Ay3Fh zJH5+2tcr_fh`<$TnMFD768)ID=spT=nZy2@9q$=#E@2^BCp?2*1Hvu#l7|~m`UzOyKc^oD zf9=LYC*ltr-^T+a+*97oJ3mf(KE5YuReSV!&qhTMh1<)yW&*43L1Ho2Z zPg{j;em(6L-h`g^=w~bUr1^R}&wk;6Uq9~(N1&hg^bafd6XEOU+~|D~ zN0!{GCsRtC6iykcvL7Fda$)hZa8h_51jcFMjIj&tV{|S^s!OcuBcPnrmu3E|LHo3J&}q6xg?50GtmNC?+RTg+D)xjMbUf%isq83 zX!PCg16S5=03|c&@bg36hQA~ub9@C#i$S6(sITbX1;kd25F>>QF^UV|z54h14_*OW zhDt(G8&iRE>Dv4s6}T8H)&^AS04i}pf*1^_G^hrZ9|4u`e5h2|`T`f{d0DVKj%g^?e~XXf$(^{RPi{JA?q&hmt6*(t zR)5rcizx=`f9f{^qdq`P71P9lVj3UQ-}K-0o1BAho+)>^kl(~~Ax0b`4u!wr47UU> zW;hm#!6(CYU?PG22Atfc)xToCiJ9Ukpi&l4$qiIW0V?HIL#01}N;iB|Dlj+GO4Cv7 zrgNKrIt?^Az5+Hv!G=1M2KJYiCSxJEorjzh`%|M(9LK4_z?l9!FgYfO6NT&IWMe`z zjv@9=>2fA-?q!DCvr@(T#RmXQ9nhQsXpRFkX9Y%+VFGym?ZeaK40%27qz;g}Yxu-fjRgS0KhiATt8K2)<;>^Zc3*g=R=Fqbwwn#4qw@1~X^3wCe; z_v{@+&LEm&|bc z-ZW!f2wdW;;9X6Ymj~xBs2kp>vDz|R_k8Q6ICFxVugn6}%`M=48S4QP3hovF=P8H7 zd{zdZ5ts@KJr0lY+c3n;TE?ahcepYf!EhwQ%NVX1)Nc}ZFRx%Yn&G7kFK0N0;g=Y$ z!Eh98%1oV_*b-dK&08iJ?A|&Fe#gUN+Z*u%g47$a17>}{%mR0w*Wi|9T}U&XbJ0^1 znzm}ws%0B@Bd7{f$M0%7Y(FH%gZfX3pMDyA1$^ay6xRMRk^?o9Gzr2ueGC5=8Ls8E z+ofRG&J%}#J~=OiN#WqLxgkYx9|N>-T#AJKvfrc{QWPqcVu1T@O0iOH@g^*}E=h5q zePI1z?BKYw!P~(>=O?Xbd;!Gry0eXF&0>bzGTa6PWo!L8 zprWDNUVtBPr?wBs`W(nK{ig4_kskN5_=MC%YAU8k@lpZ^GluIje5VefqfHr3tl}<_ zlB5<=OEFDq4HB2(h789sh$k~uuAxVp!`QSm6ioBh&4G+CG68&cQah==)Pc^In$Rq% z3wLFi9tPBjkNq7wkhZQqm*M){b>(rkF_q)y2#6JGjAF};jDwy0mFQZ;pYgDpLxrbv zxpLvrc&F1h&PTDn2$qV$g}ltJhNnwTk3_NiB4D1+-nV7rp^X<&(@Op@si)5$#&83D z{V=aP%y5DkYYZtx>cjm~K5z0$DaGem2t>sJ5?Cz~w^|G;He$GO85O~s#HpCj(pc&@ zZwf|Ik7`J26JG)UV zcq`{~>24C;B;TfU2YLVz`=UaKm(GRg=>lIZNU8IneE6RU_p-Sy!|R?Nv;G5UN!U@c z_A^e_(suj4-*^6C9E8!?0?}i%lmqn0_0gjlgP=hlSNZ4x{toc28T3d<3QUiDsX+1o zJ>mn=BZ1SSsUJP+mOiw-o{yb&?OD5f&)U=ZrC`6F5lYvVvkYK#jWf!of&-iPU)i*O z`*720Ih|{=N)>#BP-%)Z74VtvwM&{aoaB!VH#QTJ40LXH*(A-79t3eQQ)nj55)z~Y zx=?zwIwjVEE3rhM67x8n`_AuMabg%Bn_X8opGUFW9yySF@NKTaca(5d#yyxI^}MEG zbH1zt_`I8VHKiw)`}R9|L73OxHJ{;`u4ALRy zzN23+TcDRjAAZ~QxK+{)X{V4b?UHtj!D74wwC>DsH~k>PJsD1cWgf)g_YcGr`=tZW zSE;c|V;Fku>c39oOkqmS+vbTQ(ox`v_kbsk15fM#o_N1Ho=E0A(b>lnc|MLqEe&?NRKh2CqB$;sT_9XleRp_(7lJ@UjFDNz;Ze}{PxDN(k-^J69oKELqyNB?>)tehuBL$@- zOSmNhV6WkWeE`F$RbV&wOq#dgWDU$ZmYSAYmRNv&PaxRSIPCrXVDIWalgEbTy4S=w7V zSUOrdSvp&~Sh`x086L`T2E$nl!wv)3-5!R)bevda+6$qU9+sW}QZGwWW63#;VQ`%c zHtfp5CT?6wBzkweZqH$6>1XLrE?EW$%`9m`f~7rOXi2Y5V2$7cYp73Pz%Z%6l(D;?Ed^!EonIiwz>f7X zDwt)vO~t%RgS-78t*s|Y0md2tDQ&U4W}X76wN@}4Mw|+Ufdy`pTNoggB1V9e~j^oI?$77ultjmjK!2US#ta&aaBB&yKuJWLH^M z1G29IvTFg^&VcNO>X0qq$c`;Xwzkh5aw28lij&(p5_@Bhe{3wvVh=yUbwg!x_(t?r zth&vz9gy7VMY53Laehd06$h-E(Bfb6%v;{F>;WwI0+w$BmR$hL((14*;#hjhv5fL@ zWJNyp$LzL-4@A;?mScd~3Bb${NhJ)AuZUU_UkD_c#spvI1r|xCEoUreK_qppDv~B} zkyKnJk~%>aYZhd<=E6E{6s*fKA;UG>5H&pSmESFdY}g{-+Re;S*?4isq(H)G9b~|i zKFO(IYBp0FmRSZM%>B2vax_CYBMQl~1nn6v7irj|~HL9?jkCTYA6I`T+Rw%1{8~rgYkF z9X>0h9GX_->3lHCVoT?3I(It#@E#CO_i(wsFJjYvxLf8YK(W;-`qBO@Q&r*rDnwXr zlq>wl^=%B_@2Bto@LP9S{svc#;FPhrMyBE+S=1q6SO=#p!!yBO$?)s|gqN+dO^A>c z@T3~-#~7aB?@CSN>$q0s%-1|2fIgI+vP%x4^JQF>?hkUh>t%E|!a&ZXZH_o_h*N4y zZy$pIy^Nd@&PrVVnS$TvAm?}Zh*S(C*$(4%V$0e;Hpimaw~q5I-UG=S4{>*M#d3Tq z`m}AeYC}qrqvaT&MJ*pK9%6V_6pDi7Z=LU{u5pj=mulj{L3XjNJ~%xN*Rj26v& zJm?FG;eKOoOrI{+zdnBBN>0hO=?4h951%5GENP?N(mLTy>I0ZYj5tTLXe(RRka72+l4;u(!`8 zS3cN2?NAYQLwRpVY(pXWZ`=GBz#`~(mMko7(?y} z&J5v-I8N>@r^tO^EBbGSpJaGG!;1n9zyLW_xGoQbtv6%3&13i}|Gl@{^y$fi=7*uqPKFvqrN$)6d*J!p$Z9_Dbt;^tECY)+e0%sn0fXcb>Ycf#F*g!uNePDCh ziiM9$*?P!aD04Ft%+G!xH2>H;hmT&Ftp+A5r~L61n=kV3Qdo-nMB~~yC>AC@v|Kj& z6+|j8&)1EcBm6}vv{5EV15tFeoC6fi^-**I!wbtO%57NiJhU-A53Rj=BY>}2&X)^h za0<#Pfe88xCn&^Jdza!KXD=UPo4#hB_h8r613fsA&kQV`bUK||@uk9PK&m_{f$Ifd z-2>r<3I5B9<1YazwGqSi6n;)LQ`qCP_1YQ|5IrviDV`^fVw!;8zv19lVN z#%Pk@weh(P71%W(GkJ#mAke2zAo@JV>9fd>K2fD5n=b}-4wUxh+BL9ypxS9Uic{9` z-^owNbIUz}E956lpJVy0Az&$Zw|k7e2EfluIY{Kg-=;apY~St;_|7w&x7_C$JSia| zqYy&fAodEP4drL#MMm(WcU#S!Uzi8GE6e0(P{*N0v5Z2#o8-5@Coi#dG57ag;RYlG z$i1oAqAj%LJ$wVb(KCX5{AQyR&nFhpQ@M6vQPn#xg{@=0lj+3*hT548`44eE^I$;G4G z?h2&;fV4Acbuh8_+<51j{&$<20GC?G)ra4JKA zcc4JeArSTq5Ch*-D5XHDu12XNP%0V5nm1%bQ1V=K@3}_B73u^*9q@TU%kM#*?oelZ z0j~ucs1@q)Xypay8To=Wf&?4okL&3Jd8BWJ=3;=dNyg)ofbd9&81?}3R3)mlE);|) zBk1>iC^&l96ptrAP`QR^u@$!dpxk*KO!+fabf6GwZDx(9N!CR8f1Azwg)cuZ(xI7JfT;dgV`vH939IQ`Cw!Rcs&wY{~2 zwWAeWA=WNJg0&HRcemb6E|iDp$*qx@LpX~E>^{fvhkO}*hA*QT{%F*$Ylot}+cef* z5R?n-TppgEkv-lVu!bdAG*^4_aqh zAF|E@YRm?zOoZ<_*2hh%m=W8M;SyAZ2`+QWd}UJRTQ~QGLd4AcwUE(a?ATf78T8To z@P){k3Uh1$S}Zmu|3{!}293-1D79e28OPHbCxsQxtQ+%hiTWV?N9K zoR&w)GRsS(rKJNb*^@|H+?51dC*nA?4WE;)*m{w>EZe0;mSgmo^ek*vUm~r95%?Rr zNn9hQSmUJ~WD{wP8w$Tl31S+)%Oc=*V!Rw<=_%gC_25X5IzqZFUsyrgN_%iOYa@`o z{b@33gRV&}rCpW?OIMNvzP-+t_OgvOm(IgcPMs~Cge!6mMYxkV#L@-VrCp_Xbd?b6 zG$8|RCGFspquSC`p;(Sbt7Ixnu@oErE6i85E%@piWF15dEHd0%5I4{bHYOp81vYbZ z(5SHVhWMmUAjq_*4x{oE4-Whtf*~P%hA)2XdIRt*8evRr^_36?t?OV|Sa>kW4*dtd z-+mf`@IQdeZ?KTF^a1)d?nlejq0fAMw6QZb8zd*3M3St-g#HSS$conc!UixSHS|Km zF%5AH<8?T{?+N`o9@IAm5=8pzD|mS14MR0|)+fVZCQWq^!ioA#9oVCr7|+PQ z8&1XoPR`LU@#XMr-3*TK=&AY~9^O)09|ZDWFNG9=BE5~?h=-mW;l3c4h%@!0un}bN zDN3;|g+V=SZw9au*cWyz1+0b>VYBNWBTH@PY#-V_qDi)o#ouk8+CH;=Zu>%LX}cg{+a=qV zj6^XK%?NPb*|P9UQj?KbM(Q$Bi;>zq{F1~t`5F)GNuJ=C1ObxVTk3;hx;L&JRdH+h zj$nk49ox76auDYK`;~sWu^xkCPdMMgfvL8uy2wa9hzsgmzHl&zjaA$AWf%_TGdLVX z`ERBuhj`?1!gbtGdKN_U5J;GbfX@ubxJa{f0P%TUOruHsIc_NT2C<(au92F`eNbIg zS9%7*(}$45kVJuSLlEonf>R8Zc0igFq*PI4X$oTYoU{n`0y^P(md>P(rKu1Bg1ZiG zNC-{BVQ3YuBke+U;Yk+|sa-)WK;QgYNXO@BGQg5%Z6sunWl*O!xGU478UX2TfGb0$ zmiFQ$9ERg?7_Y;76f$r_FckaKu5hA99dtoz0?{seI2@K_*rsU;j(#NVslvD3(+d*tpg5|5`-zT2rWklBP<<3p8lH-$U!<18=5%RR}XtwC~vsRuHC5vG!w{clL0$K+#coxp-aq6HydP2kS)C0|Op}Nw9 z3GP9vW?zuH+jx&>0LY1Os}Xp5;j%67It3akH8xp>a&g}PG(rO?MmP-c4JFQUxj6@b z9ii9aQL9iI7BK*wp~?mubkI4#-As%Jb0r6Q>@2Tblb37&m2ZMx0(t)xC_jLBgx->C zvP3SfXG3S(^uwUByi94IXE5ag@sKdWv@cBS!tw>TFF?}=vM(-~_J#OfxqSiJI$27P za->DHn{)uq{_)xtptUc9hBmAVuWd0^7H#?E)&Z& zXufG<5aP2hfc0yWHim_9Ri@T>!@}SM^col)eAdNeBQUWW*XGsR7vbgh1?1fM+ZXM) zZIKAJ1!qFwsID-KKI4M>10mWe2}W+K5uxBSFBZdqa@Fr=VVs5mHmr;%%B>8{t&A)P zCFCO6&%o%+t(b*+nTheutxODHq?hzDel`Xe7)K$c6qJ20{b~gh<1-@|2w2=}VsM`u zw=sBd_a(25q3__?HC`(Nq9jcNgHMr0V6_+~2B?Xdh81Mm7&cjHX!5FZr_xAitTa)Y zD$SI5B|%A4nkz|43#FyfN@=aMQQ9hZDeaW@N(ZH*(n;y8bWyr0$>;?ft=z5jP4N{Z4)>8tcp`YQvJR3%Lrs0>o>RnnEg$`EC!GE5n+j8HO^kxHgAO36~P6}K{4 z$x+5AxypUYSS3%%R|*u5QmBkmij-odL>aG4P$nvql*!5zWvVhwnXcTgJfP?bQ)Va+ zDl?Ublv&Ed%53EknHjC5qA6C<4&>B2}?Mv`?!he7DZNOwl=W~2urJsG)&5wK}{Gm^qcA4d8z z(vOk;j0|8Tm60??1~M{;k$V|QXJjxVLl_y#$S_8RGctma3`RyWlF7&@MzR>mX2i|N zXhw1v0e;J6UWE>+!j1)5h2Hki@CNMIQkx7h9W@HK@QyH1Y z$aF^TXXF7!bVk791a^c|nr1Tc5F@h~d6*HHJ&!Q*C?k(CGKZ1J8G>mystK0lD}T zBTq9jpOFQOEM(*vMiw#hEF+5L(7iOZqi~9w}6`@dEj*fX@K`A zz;qDc?uO&r`KDzF{L1Ip^AJl;poY~G=-=DM;*AcdzR|M%zyIS12o7dXKX%}I?wp6R zfjEBLQR#u-t@IZd$*j2rxv z006On^&pzDF8|l*Hk^)wZi5&8OM+QBxEe&ixGnj4?pwiW;W@-_+nmxVQ+Q&u%xdn>P^@crbnQmmew3iv{1h zn0XvGFF4^gc-c7o{r~$hF{t5?emp|K*n9OjqbrS46-jP}h*v&SfDYu_x(eTAFtZtp9k|llM=~03;qZEjgU}Y&}Yl#0olxCn>-Lp{3ShL$(cvz z@nSWqXJH@i+!lZ!tg>u2UM<24hS_?#wb+0kp@|@*jUOw>zsq}a`VB*aNEME7#5{Mbc|vO}H(ou?`hmyK-}I>vb;mBI&v8Qy zhjq`*bJs79?K=@pG50t_{iLKHc!A_)fnU)o0<~NLRI`}p0iw`5Kaja!ktYY<1X%2G zhWj25<^AtbR8C`;xLw^^N{3Ch~xPo;?58i9MWz)hNBP6bE?m1uqs7Se{ot z42&18hKDL^8m@Ckcn_{Iv}ltAzZsPTL5sIoqBnsV7a16&TbsVs`0~7-H3*ZhdVCkh zDI#!Rx3W>fs%N7>R2%-!?DF5c3a-Yu@GS?;_gUNqxA8ZV!1{=v*%;dZ-a!VG53Zh! z01=^7n`PqlE^tapg+Qdna8}F?-=7vH~QzX;UWJ2T5i1wb3ho%&Ob2TH^&Rs z3Cw@xP6cimRc5R0!(iXO>|{RPOy_?_#5ZPT0^mQI{wqE>Z8^Ayrzm#{ z#9C+O#rh&sZs}9>(ft4RaDxh7`IfizB=JaKz7)Ephz3fy%$Zz%BrXhpH3|oUILeN( zMGY$qrEh#qPqS|~q#F0P@7N8_X>rwa+P^w;f~vPx{d>F(&&q$xV0)Z>s>kX7-ZJqw zFa2ym{z@=Dw9e{>*5~GI5?E&bXO?-vfg7(Zz;4S+@6+q$%bkkLWG>rHe;hx#UR5D<9~YN#shDO{)g>RNVWT4NfECgE?aw?34uA{KkL5e_0L1$ z<0f;jq+HJZ&mF7B=c6ky_WmYXhO>4TBM-@)?Ny70*$+E!hChuv(x9Pg%rbx5hQC;p z_jv~p!`xu6>XdC@_&mV_XzUupxBobB&!E>nfM4cPl-u|f_e=ad@fGJ|x!WqH`YQkA zU9LvH@s~)N^t^@9VR$)#014I4h5wYxH`m{$GJ!J=+#FoCf$z6yYhFQZm+$P=zXhEC zhTRMqc7|QSPt+`5CIqykeO9db(nFK50Si`)!5DG-)2v)*`xJ{$!JB<^;l1a7F;%{T zSZd>Owy&P{6#+Gm!R1F4{AZ3c;KaU#mNreuTe@)krz|I9SYlkFCg>@vN=AK7UIjeD;(5377c|+%SC7m#4M&-isALSnGiDDO^yK)6(WXap$W7r zJ%+}i$>K!P3NkvLhC{n&!b<=ihPTV!4=2#C#N8qMcNoe*Pw^01%S$9!x`I5GM+L~( zK(oaZAp+ME=R?+Ab2NfnmZ`K8!h-sthtO5rMZ5&Z5AH&b;JTzG%7u4$+(nad9opa0 z0X>FmLlAK%$Pj5GHMLG7o8%N!B#UB8G{6!ez7A=(5Ppo($YDztYk!E?B&0Q(BFE!o zh@P2)hCrb4H)1M;IFAH2mrXs(~hn!SGt}c90-F4?Ql%Tec&93P1*gN_T{i>Icw+ zs4m?kO|`~b2ceO;qfm@;#3x7#cr(H_e3#S`0-oQq2qX#4+=4LN4*CE+*@!OQs())_ zQb7I&gmOXJMPtZ>;32q>7NPU-%~?7GLGESvCx)*xd=x@@AujZ7hEFk!A&L@12${?e zfVj%Td~fj3WBvkx(|S*csf0QLBNj7iH=n1D^kVo;o>_7UVmcZA4NiaG#$%K%JkNq? z`d>T+1wtje>2K?h(s50%&C^-JA;8%P%lrevEFm3bBSa?`LJVh${w&W;A&6&lKc>JZ5?eykU_CJ%7T(NeAh<44>wiAP~2D zj1jC~gb308Jihe_o?i0+!yhvo#_)Fi3x>bs*>_|4i7{U@BJwEhn>^H&2s|Y9U4~zU zNa(FRlysF29YD}Cq__+=;<+KF`7a*B4e_J9AflN^-qvOKiV+UI6T)N}KCFMD1IQP7 zq%?`+5u|Mx-pn&wzT`osXN|<3myLXxSp7OgL!X3HmLA4oq9-6GwuKH+w~35Mj1Zn# zGmhc4JSw)7M_FeX(Y-%1{0oHDu7D6+BOVoo)&^-a5Tv>u!pR}BHW)%~A#k^zkyiuU z&{rR++w}Tg381zzC%xKQZKJkT?^4^T?bQxyN41mMS?!{BRg=|jYIpT+wTIeMy+`e( z_EuBWK5AdJpW0s?pr)#6>Oggndas(U4pxV#L)BsGaCL;5p^j8D)lq7enytFk(Q1x5 zM$J|4Q^%@#YQ9>adelO7oLZz7t0n4qb%Hukoup1yr>IlaY3g+Ke)Rzrj{a9?s1K?$ z)rZts>ci@6^%3<^^)Yph`ndXpI#+#Cou@vfKCRAI7pM!>XVgXNv+82?IdzHpy!wLr zqPkRlNnNHcS68Sj)tA**)K%(g^;LC^x>jAMu2)}EH>j_x8`VwfW_63YRo$j;S9hp8 z)i=~#>TdN-^(}Rex>wz&zOC+852y##QuUB}Sbax*S3RO0Ro_#OsmIk5>PhvK`o4Nv zJ)@pgKTyx9AF3az=hctZPt;G<&(zP=FVqX_MfH;UrTUfnwfc>ES^ZZ1PW@i}LH$v^ zqW+}*tp1{2Rj;YPs@K&U>P_`G^>_6T^-uLL^=}PnSR)$M1WnW=&7#SgRkLY!P0<{h zs%e^2b1|})k$sH3&B%U64lr_%ky1tuF>;uZcNlq>kt2*8W#m0ZU=|!_k%BaSulTjC=L5v178p3EOqhXAO zGaA8YB%?JLjbb#K(HKT+GFpq#SVn6zT8GiPjK(oqkI_3AtuRZOmvB zMw>F)jL~>T6Btcov^k?mjJ9C3C8MnvZOv#KM%yxa7o+VMZO>>2MmsXviP6rCc44$D zqsfeRW3)S?cQe|9(VmRn!)Px?do!BCXdg!VGTM*P{)`S_G?mdbMh7xFh|zl)O=om4 zqeB=S%IGjghch~Y(F{gMGMdTgC`Pjw&1Tfi=x9cB7#+iCE~ED`I+oEqM)MghVAR8C zA*16MEn>8o(Go_-Gdh9MiHuHSbTXq;7@f-KG)AX0dOxENFsd`k7@fiBgN)8(^dUxP zG5Rp0vl)Ga(MK75jL|uaKF;V9jLv2BNk-=}`V^y2GdiEq1&l6a^chAMG5Rc{i(Po6 z3nw_?{no;Qdt9WRi`3yi*Yb}9{;?qlQ8gzB;n@y;xy;#yf8EDFy1Pg?|4wn?wa#~3 z_;D8rbK%!q_)Zt;=)$i%-{aN7ox}K76fgOP3r}?6CtO5xkti2dUHDP{Y_|(P;Dmg+ zX}ru%7k-$3Z*e~8jNw0Cbw1Av)po*LuY?6FTzG;D$GAwe3m5Vmi7vdHKexMZ9DF}q z>cTVmeGC8S?ZPGe8{X6PstdpDBB9P%&Z{n5?83}N>N=M@kMPG^UHE>d=)w(M*x@4W z`7Hwmx3e|>z1&6MZ7kDWq=pOU^FGeF@Jbh+?7|)R;{p6*hYPzn7;o{5Ui{+~{_(mC zkK^BCT(|-MhHCZr_bTUV7m0M?cz%)UTB2LdGkC#mydd;FieL0_!D|!XI)Y!U;~$G$c$f=6;shu*@#{OC z3tV`(^Qa4Q_~ts93m5Ub8~H~L|JcqyUgjU`c|$riQXb zDcTQuoX_;uKvtHS-WteDegUWRXuoRL`5S(_^c{5{yr_b|+IN}uE9!`36bWaqHbx0h zsw3(Tc4jsjZCPbmZ@DQeat*n$+*kXlpHN9cw*n18WnoESp1^!5J8xtX-|Wt?AYw)?rq+)ngrJeZV@~`m}Y4 zb-i_q^-XK3^|qYBz8?xDL4x4HVx5e2S*%EARZS8D_ZSUHS+K$;y*iJzn=UK?Y z{K)n(-9Q%Fte0!n2 z*gnBN**?wwfPIGjA^U9mv-X$lui3ZTciMN^-?Z)39cj%6X98WpsI~FoRYfXMEvi+us}5CDU22#bq1I3vg6Y)_46L4DT&002H53e}3@~>d2P0=57&wc( zX3Yy=((DCO#XOj?`-I7=1g$*arSc#aHcs2IfpujJ2RYx&Uqkw z7C9F?mpESlak$d?igT-TyYqABm(H)9m!01^e{%lfyz0E>yzac|s^f}tHFPy{HE}g_ zCAgZqTD#i1+PS*A2Dq|ZZdZ;g*EQBv;+o)^=z7Gp(Y4LB!}W%1w`-qkzw3bOpzDz9 z9oM(6E3ThiS6#olZn*w*{T+mZf`USV+6Q$BN)GBC)FUV*sBciep#DLrK?8%P1nEH! z1w9<}NYG7cVg=Yu{8`Yh=C;Gp2};K<;p z;F#cA!L@_$2yPI3XK;()5y4r(?%Y zQkWcO3sb_>FlSg$SV&k{SVUNxunu9J!n%YdhjkC@6_yg#H!Lk|P}sz0vX% zW`;cy_E^~CVT;3-gzXO77q&m_VA!FscfyW^od`P>_DQ%UTnSgho#8>@;o*_tHNvC9 zW5R2NcM9(oes_4!@Lu65;RC|c!Uu(Cg}cLNg+CVlc=+7#dErloFA85Az9f82_`2{j z;U9&69R6we=iy(5e;xi!_~r2L!heX+B0?g5LCMV3TPh@2GpaO9%M#gR)Q zUx-{9dA$a$q1A|}kyN95jWIQ*)p)qZ{2DLS*j3|DjgvKgs_|EpEh;3cX;k~D0a0mD zgQ5mU4UHNel@XO0l@;ZV%8AO2DvFvKrAIvy^;p#7QBOoY6ZLG=;;6Tyjz)bHbs_5e zs2kBFT8NgStjt-5Eh^`S`FS2M zG0((28}nSu3o%P$mdCstvpQyN%v&-0V)n}QKd5=F7Oth% z`hRLV@2{o~$NjtNwpvGVhwME`Ad`e75O((P-au}0y%$j&IB+3uv6!3YF09r~(Yjk) zXx+1pYH{ycwZ5%;)>ZY}b3W(${O~+~#Os{b(~rSr$Qf!zIz!9QGmMN(hK=E4lrV-e zP)0dp1Y~i*Sb_IJB zdklLfdp3J6yOy0~H?r5T*Rt2MH?ohi&#^DC|78Eee#?H({+IoU(~;AMlfoIu;c}E5 zBPW;R;goPjamH}Qa>jG2I3#B==X=gl&T`I5P6KB(=SR*S&VJ4z&QZ>#9m=iZ&gU-VuH$atZsKm?Hgk7zcXRi0_j3<&4|9)lf90Ow{=t33eZqaleZl>} zYsc%s>&ffQ8^q)BjJzyfJ}=0Fcq4h^dDD3FcsOr4?It_le(%--h3g-=5!z--VybXY+Y{Az#dw@g4kn{*U}E{3HC^{AYqM1RVsO1U&`4 z1u24og294R0ZYIZa0PsUNFWhN1u}tIkR`AQvIWJ0pkRmq5G)Xof+d1wf(AjOV2xm{ zV7*|Yph>V*uw8IWa8__$a8Ynsa8>Y^;GM9Iu${2Gu&=PckS*j2`9h&kEDQ+&VMG`e z!a_t?CM*|@5RMU!6^<9q6w<M@ zyTyCO2gFw;y(E1kDUyK_ri3lwO863?L@bd?6Uj5l3&|_VKa#hS_mY35-K0#ZN~)HoOSMwHG$;*8 z0cluTDutx56p>DoZkIMocS-k24@-|qf0dq)o|2xH{w_T$Juho38z_^?B^Hiqe8(UOT zT}b;Q?Qz;WbvJbnbuabT>VE3MYNnc_=Bq_&sal~Uxl>X>@CdYpQKdWw3H`Umw+ z^=|b(^#S!^^)dDD>a*$#>dTr=8m2~}$87d5;43&m)hAP7(!xTfcp~kS#u+^~5&}{g{u-CBPaL91PaKqTf z*umJ<*xmS*vA6MSV?W~n;~?WaV}tPr;~L{S<3{6VW0P^K@s#no@gL&{<0n%qQ(My) zrjDl0rmm(wCY348ly1_QjHXOemdR!cn`WBknHHE5rlg59(WdWAi%m;REv6@?r=}OC z*QU3o_ok1g&zXHQO_|nAM`nIzVWuT%zU5u+1%GWz&zN@G;_>+v&fug z)|fNQg=VMOWA>YaX21-a5p$J!vbowk-8{=Y*F4|6z??9zH*YX+GXHGeYTjYqW!_`H zXz6bG%F@fy*D}b$u&^u~3*RENh%Hi!+>&VlEn!Q<60;zdVU`h=QI=ZEkCu&=Cd)R< z4$CgfZp%K)fvm!;@~q)m699s(YD66&bGm}$@Y`2$@a$H+up~XV()Js zWKXrT?L52LKFL1CUTvRgpJ$(MUtq`VNjqVu?Dh8V>@D^u_NVq2_Sg2e_7CAHyWPi%}4~gY;$YJDIau z#yciDCOfJfHI9XjX2%}KLB|otF~ zJ8y6Pko>Xvlk*e#cs`ZCFn>}0lKjT}HTg~XTl2T)@66wwzc2rK{*C-w`FHZ~<=@YL znE$w-eSx?@QJ^W%7U&C11?B>4fxRH7@T)>up}bI4s43JI>I+SU=E7iMb>Ymyd4=B; zE+|YCCJV_zx^Q8UqNu2-xX4}PD+(43DGC>r7ELT#Qna#Yb#ctde>@$ur5#ixr~iq93laJF@R;q2(_ z;_T+^=M*_5PPtR%R6BE=LFW)>*cov~oim)clXTWQ7dgLoHam|yPdZOKTb$>dPn@4! ztzGS09bBDUyP+Rp2Uexm+HX&o$CjY4Ixy#+vZp@u@lWy9* z(7nU`tNWz;wEK7WS@%u%Q}+w^Yxf)XJNIW#4^J=8*Pgzf{vNI;-J|muJ((VhXNYIG zXQXG0XRK$u2lFiUEcLALtn&Qm+3DHs+2=XnIpk^a-1hwCx$k-4dE|NL?d)4Uq5)@$%)db7NC?+|a;8}UZHL%n6*ncnT*X74WVKJQ`gZ{9QBv)=RGOWrHq zYu=mQJKjg$C*G&N4!*v=0lvY$R3F=C@n!jJz8qhkuh8f8d3+VVmA(dFqi>yWv#;5= z%eTk3&v(#w*mu--+;`e{$#=zf)%Voj%HP)C-rv#R*+0lH^DF&of4X1i5BP)rA^xyG z;*a?e|1ke7{|^67|1bW-{^S0${`3Az{wx0L{+s?={yY9B{x|-2{`Y~dfkA=P06V}9 z2m%>_+(1E~IN%C+0&oBglm|uxMg^t^W(DR3Y6EqF?*q#MD+3LI#=!Q#&cN=#-oXAq zOW=IqQs7G9THsOOY2ZcRRp6gstKe6`-ocb$zu zLT5rPp>v_@p+A7mKsTTV&52TTF` zfdjz7AQR+(d{78VKsl%aHJ}zWfF{rkT0uML0Q0~Cuo!fMUeFJQKmZJb5iknEAOemV~gW)6LW8o9wQ{lVe z$Kj{p7vWbWolDpyk`i5swWO#dUh-`TQ9_q|SF*HZMM*=+>XNl38%j2pG?i>C*->(~ zwP-vUE}DveGrB>mnB-mm*gp*CIC}w<32U z_agTr4{*8QwT0?E2FQAT47pNQ51L_5R4fTckLxUg&#DX{w z4-!BkND3(+6{LnTART0YOpqC}LUt$z%7Y4^V#oz~AwLv?0H_3tKv4*WP-qx59IAju zLzU1ts0x}4RYNt&p=b#JFW#}q&1G)v>hW>)?Ll2=R&@<>I z^cs2ty@&pVK1bU`+eJG>J4d@lzl`>X_Kfz9rbPQk2Sx`+Q=_aXH_DHSqLQdAs)(jV zjZt%~A~rf!85GvPUKEnEl3;csCArs414@8M0-U07~e}VVH`{9G| zVfZNgD|{0E4L$?6z~|wM@D=zv{0Dp=eu(r%1|WkGCc;7ZhzOA)3M36lM|6l0F(Xza z8_7iqkYdD*_>dq1ASDQdzzB+zBO{QJ$QWcCQiV)Ls*&l)EMzV+A6bAT5FDY9g~(!L zDY61-KvpAbkqyXZqzT!EG$X$tdyxakVdNNc0{IR39XW?wM6Mv$kw1{z$Y02PaqG&l$#+Hp;Ja*66yJO#u%Nw_N+@bMp#&;U89lvryn+g00r>n$Ox2v91y`RXOXrDN8 zVq)T!iTfu$p454ga#H4`(UT5O?lQS)@|7v=rYNUarW8)8n6h%p<*8k!>ZiV`POWxS zd#a~a|4_ZY`ra8meYb&B>bcHSeZ>F@3=F{nJlPe>$W44EBut z8Ic)@8CPbunz?aS;jHpm@mYV*?m7Fw>ZbDqxmFc+HpZrt3g-tF24ck#$tv(z+FOE9=(PZHy0% zm&MEDBjTgtmGN=$s`%u1b$oh!R(x)}HeMIU;@`%JI2B(QUmRZ=UlCsw{~^96zAnBo zzB%3$-xl8y-xc2--xog+KO8?A|22Lheky)C-V#3_zZkz9zZSm{zZJg|zZbtBe;9uf ze-?ice-(cde;@xC|BSW9+F>2APFNT0ORNXh6YGQZ#Rg!5u~dwOaWOt7#Kf2slVd7O zgJocP%!p-T7R-j_V7XWUR*bnZFXqQW7>Jc(QEVuNV#BZz*eI+L8;4E6CSg;tY1j;G zHZ~Wl#lFE7Ul8_}72~|Rq&?fW=VdtT>?ua6GVba)F+lFRwaid!^uc8 zmPC@nk|UC%l9kEv$%)A+$!WHT$%hKxhA23@@<#Gj@=o$z^6%uMTy9D+}X2q~c;(uj0IM;Hk+VI{JOT%v#|CftON2oeBM zLO=vephP)QL5wEG5)+6?#8je&m`ThbYKb}mBa#G3)Dw${CB$-K712oiNUSF|5kC`K zi5RbBOVZsiKoOX;tlbh_)NAVJCR?K zy~w^~f099RNIoec<)o5SlNqF*G?5n4MrM=wWFhG$1LP1gOh(8UiIBs{k>nV1EIEOk zLQW%Rk#op-MNOuvsp-@ls+NjV-%QCw}^*`zn^^|%}y`tVx|5BgnHgpHNGu@5u zNvF^QX(r8~`Lu|Z(&@C0HqaJ2o6e<+Xcz6L0Xjm*XoN1Khts3!N_sq9MNg)u($nY} z^jx}*{+6cbMf5UyCH(`vmfk>brkm&;^e%cIeV9H@pQeAO&(W9ZYxE8J7JY~Qi+(^q zrC-tS=nwR#`nL65>%Xk;Uf;KVK>fgaZoQyhSg)$j`p>=mU)r?!zwQ3^|MvfPea`;_ Dy8EsH literal 46775 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 fNeoTYCZ;Cl{O20~mrpLprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist index d24c81354..233544b10 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pl.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib index 1d3d386cb..9e99f1cd2 100644 --- a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A222 + 708 + 994.5 + 404.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 708 + YES @@ -393,7 +397,7 @@ View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emuluj mysz z trzema przyciskami LucidaGrande - 1.300000e+01 + 13 1044 @@ -460,7 +464,7 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4 LucidaGrande - 1.100000e+01 + 11 3100 @@ -469,9 +473,9 @@ b2xpZG93YcSHIHogcHJvZ3JhbWFtaSBYMTEgdcW8eXdhasSFY3ltaSBtb2R5ZmlrYXRvcmEgTWV0YS4< 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NwA @@ -638,7 +642,7 @@ eSBkxbp3acSZa293ZS4 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -705,6 +709,7 @@ eSBkxbp3acSZa293ZS4 + 3 YES @@ -1209,10 +1214,10 @@ Lg 67239424 4194304 - R2R5IHfFgsSFY3pvbmUsIHcgY2VsdSB6YXBld25pZW5pYSBiZXpwaWVjemXFhHN0d2Egd8WCxIVjem9u -YSBtdXNpIGJ5xIcgdGFrxbxlIG9wY2phIFV3aWVyenl0ZWxuaWFqIHBvxYLEhWN6ZW5pYS4gR2R5IHd5 -xYLEhWN6b25lLCBwb8WCxIVjemVuaWEgemUgemRhbG55Y2ggcHJvZ3JhbcOzdyBuaWUgc8SFIGRvendv -bG9uZS4 + R2R5IHBvbGUgamVzdCB6YXpuYWN6b25lLCBkbGEgYmV6cGllY3plxYRzdHdhIHfFgsSFY3pvbmEgbXVz +aSBiecSHIHRha8W8ZSBvcGNqYSBVd2llcnp5dGVsbmlhaiBwb8WCxIVjemVuaWEuIEdkeSBwb2xlIG5p +ZSBqZXN0IHphem5hY3pvbmUsIHBvxYLEhWN6ZW5pYSB6ZSB6ZGFsbnljaCBwcm9ncmFtw7N3IG5pZSBz +xIUgZG96d29sb25lLg @@ -1260,7 +1265,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs
@@ -1273,7 +1278,7 @@ bG9uZS4 View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1358,9 +1363,9 @@ bG9uZS4 YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 75628032 0 @@ -1397,9 +1402,9 @@ bG9uZS4 - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 75628032 0 @@ -1425,9 +1430,9 @@ bG9uZS4 - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 67239424 0 @@ -1447,7 +1452,7 @@ bG9uZS4 S29tw7Nya2EgdGVrc3Rvd2E LucidaGrande - 1.200000e+01 + 12 16 @@ -1457,7 +1462,7 @@ bG9uZS4 6 System controlBackgroundColor - + @@ -1468,8 +1473,8 @@ bG9uZS4 - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1480,8 +1485,10 @@ bG9uZS4 MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 @@ -1502,7 +1509,7 @@ bG9uZS4 _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1519,7 @@ bG9uZS4 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1569,7 +1576,7 @@ bG9uZS4 {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -3317,11 +3324,8 @@ bG9uZS4 YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3378,7 +3382,6 @@ bG9uZS4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3393,6 +3396,7 @@ bG9uZS4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3414,6 +3418,7 @@ bG9uZS4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3665,14 +3670,11 @@ bG9uZS4 YES + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3691,323 +3693,324 @@ bG9uZS4 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{437, 548}, {584, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{437, 548}, {584, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {454, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {454, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {333, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + {{523, 716}, {155, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + diff --git a/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pl.lproj/main.nib/keyedobjects.nib index 2aecc443f7562ff2fd2e520a10bd9cc5ddb8289f..363a2acc7a33f7458962bd1eec5bb7f1721b86a2 100644 GIT binary patch literal 52417 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

}!}xG;s|QkY)qcy$8$5~J~g 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�lN$`8A5kK2x%cmjfzf0l(kXr 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 O|8c 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 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist index 1972524b8..d14c37b4e 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pt.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib index 64cf2bd04..42b40e4a8 100644 --- a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/designable.nib @@ -450,7 +450,7 @@ 256 - {{36, 67}, {559, 28}} + {{36, 60}, {548, 31}} YES @@ -487,7 +487,7 @@ 256 - {{36, 170}, {559, 37}} + {{36, 162}, {548, 42}} YES @@ -506,7 +506,7 @@ ZS4KA 256 - {{18, 98}, {402, 18}} + {{18, 97}, {402, 18}} YES @@ -528,7 +528,7 @@ ZS4KA 256 - {{36, 118}, {525, 25}} + {{36, 126}, {548, 14}} YES @@ -585,7 +585,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{18, 78}, {402, 18}} + {{18, 70}, {402, 18}} YES @@ -607,7 +607,7 @@ IG1hcGEgZG8gdGVjbGFkbyBhdHVhbCBkbyBYMTEuA 256 - {{36, 44}, {539, 28}} + {{36, 36}, {548, 28}} YES @@ -715,7 +715,7 @@ cm9zLg 256 - {{17, 205}, {50, 20}} + {{17, 191}, {45, 34}} YES @@ -772,7 +772,7 @@ YW1lbnRlLg 256 - {{37, 98}, {409, 23}} + {{37, 97}, {409, 23}} YES @@ -794,7 +794,7 @@ YW1lbnRlLg 256 - {{36, 120}, {539, 23}} + {{36, 126}, {548, 17}} YES @@ -850,7 +850,7 @@ YXJhIGRpZ2l0YXIgZSBzYWlyIGRvIG1vZG8gdGVsYSBjaGVpYS4 256 - {{36, 188}, {536, 32}} + {{36, 188}, {536, 28}} YES @@ -868,7 +868,7 @@ b3MgYnVmZmVycyBQUklOQ0lQQUlTIGRvIFgxMS4 256 - {{34, 107}, {511, 23}} + {{37, 96}, {511, 23}} YES @@ -891,7 +891,7 @@ bSBmb3IgYWx0ZXJhZGEuA 256 - {{34, 87}, {501, 18}} + {{37, 71}, {501, 23}} YES @@ -914,7 +914,7 @@ ZW0gZm9yIGFsdGVyYWRhLg 256 - {{34, 62}, {553, 23}} + {{37, 46}, {553, 23}} YES @@ -937,7 +937,7 @@ eHRvIGZvciBzZWxlY2lvbmFkby4 256 - {{34, 165}, {511, 23}} + {{37, 159}, {511, 23}} YES @@ -960,7 +960,7 @@ QSBmb3IgYWx0ZXJhZGEuA 256 - {{48, 134}, {524, 28}} + {{55, 125}, {529, 28}} YES @@ -978,7 +978,7 @@ YSBkbyBYMTEuA 256 - {{48, 28}, {536, 28}} + {{55, 14}, {526, 28}} YES @@ -1011,7 +1011,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{15, 212}, {402, 18}} + {{18, 212}, {402, 18}} YES @@ -1033,7 +1033,7 @@ o28gbmVtIHNlbXByZSBmdW5jaW9uZSBlbSBhbGd1bnMgYXBsaWNhdGl2b3MuA 256 - {{31, 175}, {542, 31}} + {{36, 175}, {542, 31}} YES @@ -1051,7 +1051,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{15, 151}, {402, 18}} + {{18, 151}, {402, 18}} YES @@ -1073,7 +1073,7 @@ ZG8gcGFyYSBlc3NhIGphbmVsYSwgYSBxdWFsIHRhbWLDqW0gw6kgYXRpdmFkYS4 256 - {{31, 126}, {441, 21}} + {{36, 128}, {441, 17}} YES @@ -1090,7 +1090,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{15, 107}, {402, 18}} + {{18, 107}, {402, 18}} YES @@ -1112,7 +1112,7 @@ dW5zIGluY29udmVuaWVudGVzLg 256 - {{31, 59}, {542, 42}} + {{36, 73}, {542, 28}} YES diff --git a/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt.lproj/main.nib/keyedobjects.nib index 7129958e4609addb2efec12bd7f773ebb79a3f5b..ed121ede67352b58c7663450b683062b3d84c00b 100644 GIT binary patch literal 50446 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 sx?^?c>Mqs2tNT>48A#ge6%*AjyW^gd!kw6%j#2 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 diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist index 3e2a0f49e..4910e409d 100644 --- a/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib index fdf839e0a..1bab3a8f8 100644 --- a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/designable.nib @@ -1,17 +1,26 @@ - + 1050 - 9C31 - 629 - 949.26 - 352.00 + 9G55 + 677.1 + 949.43 + 353.00 YES YES - com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + YES + YES @@ -21,41 +30,41 @@ - FirstResponder + FirstResponder NSApplication - MainMenu + MainMenu YES - X11 - + X11 + 1048576 2147483647 - NSImage + NSImage NSMenuCheckmark - - + + NSImage NSMenuMixedState submenuAction: - + X11 YES Acerca do X11 - + 2147483647 - + @@ -64,30 +73,30 @@ 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + - U2VydmnDp29zA - + U2VydmnDp29zA + 1048576 2147483647 - + submenuAction: - + U2VydmnDp29zA YES @@ -98,12 +107,12 @@ YES YES - - + + 1048576 2147483647 - + @@ -112,58 +121,58 @@ 1572864 2147483647 - + YES YES - - + + 1048576 2147483647 - + Ocultar o X11 - h + h 1048576 2147483647 - + 42 T2N1bHRhciBvdXRyYXMgYXBsaWNhw6fDtWVzA - + h 1572864 2147483647 - + Mostrar tudo - + 1048576 2147483647 - + 42 YES YES - - + + 1048576 2147483647 - + @@ -172,7 +181,7 @@ 1048576 2147483647 - + _NSAppleMenu @@ -180,51 +189,51 @@ - QXBsaWNhw6fDtWVzA - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + Personalizar... - + 1048576 2147483647 - + - RWRpw6fDo28 - + RWRpw6fDo28 + 1048576 2147483647 - + submenuAction: - + RWRpw6fDo28 YES @@ -234,22 +243,22 @@ 1048576 2147483647 - + - Janela - + Janela + 1048576 2147483647 - + submenuAction: - + Janela YES @@ -259,7 +268,7 @@ 1048576 2147483647 - + @@ -268,27 +277,27 @@ 1048576 2147483647 - + Zoom - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + @@ -297,7 +306,7 @@ 1048840 2147483647 - + @@ -306,38 +315,38 @@ 1179914 2147483647 - + YES YES - - + + 1048576 2147483647 - + Passar tudo para a frente - + 1048576 2147483647 - + YES YES - - + + 1048576 2147483647 - + _NSWindowsMenu @@ -345,25 +354,25 @@ - Ajuda - + Ajuda + 1048576 2147483647 - + submenuAction: - + Ajuda YES Ajuda do X11 - + 1048576 2147483647 - + @@ -372,7 +381,7 @@ _NSMainMenu - X11Controller + X11Controller 3 @@ -380,10 +389,11 @@ {{319, 328}, {633, 308}} 1350041600 UHJlZmVyw6puY2lhcyBkbyBYMTE - NSPanel + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -393,168 +403,6 @@ 256 - - YES - - - 256 - - YES - - - 256 - {{18, 210}, {402, 18}} - - YES - - 67239424 - 0 - U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM - - LucidaGrande - 1.300000e+01 - 1044 - - - 1211912703 - 2 - - - NSSwitch - - - NSSwitch - - - - 200 - 25 - - - - - 256 - {{36, 57}, {510, 28}} - - YES - - 67239424 - 4194304 - U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu -dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp -ZmljYWRvciBNZXRhLg - - - 1.100000e+01 - 3100 - - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2OQA - - - - 6 - - controlTextColor - - 3 - MAA - - - - - - - 256 - {{36, 165}, {510, 39}} - - YES - - 67239424 - 4194304 - QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh -cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo - - - - - - - - - - 256 - {{18, 91}, {402, 18}} - - YES - - 67239424 - 0 - QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA - - - 1211912703 - 2 - - - - - 200 - 25 - - - - - 256 - {{36, 121}, {510, 19}} - - YES - - 67239424 - 4194304 - UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh -byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg - - - - - - - - - - 256 - {{18, 146}, {402, 18}} - - YES - - 67239424 - 0 - U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ - - - 1211912703 - 2 - - - - - 200 - 25 - - - - {{10, 33}, {587, 246}} - - - {{13, 10}, {607, 292}} @@ -563,7 +411,165 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1 - + + + 256 + + YES + + + 256 + {{18, 210}, {402, 18}} + + YES + + 67239424 + 0 + U2ltdWxhciByYXRvIGRlIHRyw6pzIGJvdMO1ZXM + + LucidaGrande + 1.300000e+01 + 1044 + + + 1211912703 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + + + + 256 + {{36, 57}, {510, 28}} + + YES + + 67239424 + 4194304 + U2UgZXN0aXZlcmVtIGFjdGl2YXMsIGFzIHRlY2xhcyBlcXVpdmFsZW50ZXMgZGEgYmFycmEgZGUgbWVu +dXMgcG9kZW0gaW50ZXJmZXJpciBuYXMgYXBsaWNhw6fDtWVzIFgxMSBxdWUgdXRpbGl6YW0gbyBtb2Rp +ZmljYWRvciBNZXRhLg + + LucidaGrande + 1.100000e+01 + 3100 + + + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2OQA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 256 + {{36, 162}, {510, 42}} + + YES + + 67239424 + 4194304 + QW8gY2xpY2FyLCBtYW50ZW5oYSBwcmVtaWRhcyBhcyB0ZWNsYXMgT3DDp8OjbyBvdSBDb21hbmRvIHBh +cmEgYWN0aXZhciBvcyBib3TDtWVzIGNlbnRyYWwgb3UgZGlyZWl0byBkbyByYXRvLgo + + + + + + + + + + 256 + {{18, 91}, {402, 18}} + + YES + + 67239424 + 0 + QWN0aXZhciBhcyBlcXVpdmFsw6puY2lhcyBkZSB0ZWNsYWRvIHBhcmEgWDExA + + + 1211912703 + 2 + + + + + 200 + 25 + + + + + 256 + {{36, 121}, {510, 19}} + + YES + + 67239424 + 4194304 + UGVybWl0ZSBxdWUgYWx0ZXJhw6fDtWVzIGRvIG1lbnUgZGUgZW50cmFkYSBzZSBzb2JyZXBvbmhhbSBh +byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg + + + + + + + + + + 256 + {{18, 146}, {402, 18}} + + YES + + 67239424 + 0 + U2VndWlyIGEgZGlzcG9zacOnw6NvIGRvIHRlY2xhZG8gZG8gc2lzdGVtYQ + + + 1211912703 + 2 + + + + + 200 + 25 + + + + {{10, 33}, {587, 246}} + + Entrada @@ -591,10 +597,10 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg 1211912703 2 - + - - + + 200 25 @@ -612,7 +618,7 @@ byBhY3R1YWwgbWFwYSBkZSB0ZWNsYXMgZG8gWDExLg dGVtYSwgdGFsIGNvbW8gZXN0aXZlciBkZWZpbmlkbyBlbSBFZmVpdG9zIHNvbm9yb3MsIG5hcyBwcmVm ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA - + @@ -621,7 +627,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 - {{64, 201}, {131, 26}} + {{68, 201}, {131, 26}} YES @@ -632,11 +638,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 109199615 1 - + LucidaGrande 1.300000e+01 16 - + @@ -645,12 +651,12 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Do monitor - + 1048576 2147483647 1 - + _popUpItemAction: -1 @@ -666,11 +672,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 256 cores - + 1048576 2147483647 - + _popUpItemAction: 8 @@ -678,11 +684,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA Milhares - + 1048576 2147483647 - + _popUpItemAction: 15 @@ -690,11 +696,11 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA TWlsaMO1ZXM - + 1048576 2147483647 - + _popUpItemAction: 24 @@ -718,7 +724,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA 4194304 Q29yZXM6Cg - + @@ -736,7 +742,7 @@ ZXLDqm5jaWFzIGRvIHNpc3RlbWEuA RXN0YSBvcMOnw6NvIGVudHJhcsOhIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEgZm9y IGV4ZWN1dGFkby4 - + @@ -756,10 +762,10 @@ IGV4ZWN1dGFkby4 1211912703 2 - + - - + + 200 25 @@ -779,10 +785,10 @@ bXBsZXRvA 1211912703 2 - + - - + + 200 25 @@ -800,7 +806,7 @@ bXBsZXRvA cyBDb21hbmRvLU9ww6fDo28tQSBwYXJhIGVudHJhciBlIHNhaXIgZG8gbW9kbyBkZSBlY3LDoyBjb21w bGV0by4 - + @@ -836,10 +842,10 @@ bGV0by4 1211912703 2 - + - - + + 200 25 @@ -876,10 +882,10 @@ TUFSWSBkbyBYMTEuA 1211912703 2 - + - - + + 200 25 @@ -899,10 +905,10 @@ cmVhIGRlIGNvbGFnZW0gbXVkYXIuA 1211912703 2 - + - - + + 200 25 @@ -922,10 +928,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -944,10 +950,10 @@ Y2lvbmFkbyB0ZXh0byBub3ZvLg 1211912703 2 - + - - + + 200 25 @@ -1016,10 +1022,10 @@ cHJlIGZ1bmNpb25hcsOhIGVtIGFsZ3VtYXMgYXBsaWNhw6fDtWVzLg 1211912703 2 - + - - + + 200 25 @@ -1056,10 +1062,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1094,10 +1100,10 @@ b21wbGV0YW1lbnRlLiA 1211912703 2 - + - - + + 200 25 @@ -1147,10 +1153,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1169,10 +1175,10 @@ Yy4pLg 1211912703 2 - + - - + + 200 25 @@ -1191,7 +1197,7 @@ U2UgbyBlbmRlcmXDp28gSVAgZG8gc2lzdGVtYSBmb3IgYWx0ZXJhZG8sIGVzdGFzIGNoYXZlcyBwZXJk ZW0gYSB2YWxpZGFkZSwgcG9kZW5kbywgYXNzaW0sICBpbXBvc3NpYmlsaXRhciBhIGV4ZWN1w6fDo28g ZGFzIGFwbGljYcOnw7VlcyBYMTEuA - + @@ -1211,7 +1217,7 @@ p8OjbyDigJxBdXRlbnRpY2FyIGxpZ2HDp8O1ZXPigJ0gcGFyYSBnYXJhbnRpciBhIHNlZ3VyYW7Dp2Eg ZG8gc2lzdGVtYS4gU2UgbsOjbyBhY3RpdmFyIGVzdGEgb3DDp8OjbywgbsOjbyBzw6NvIHBlcm1pdGlk YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 - + @@ -1229,7 +1235,7 @@ YXMgbGlnYcOnw7VlcyBhIHBhcnRpciBkZSBhcGxpY2HDp8O1ZXMgcmVtb3Rhcy4 RXN0YXMgb3DDp8O1ZXMgZW50cmFyw6NvIGVtIHZpZ29yIGRhIHByw7N4aW1hIHZleiBxdWUgbyBYMTEg Zm9yIGV4ZWN1dGFkby4 - + @@ -1248,12 +1254,17 @@ Zm9yIGV4ZWN1dGFkby4 0 YES YES + + YES + + {633, 308} {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_prefs @@ -1262,10 +1273,11 @@ Zm9yIGV4ZWN1dGFkby4 {{360, 400}, {477, 271}} 1350041600 TWVudSBBcGxpY2HDp8OjbyBkbyBYMTE - + NSPanel View + {3.40282e+38, 3.40282e+38} {320, 240} @@ -1275,7 +1287,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 191}, {123, 32}} + {{318, 191}, {155, 32}} YES @@ -1287,7 +1299,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1298,7 +1310,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 159}, {123, 32}} + {{318, 159}, {155, 32}} YES @@ -1310,7 +1322,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1331,26 +1343,26 @@ Zm9yIGV4ZWN1dGFkby4 256 - {301, 198} + {279, 198} YES 256 - {301, 17} + {279, 17} 256 - {{302, 0}, {16, 17}} + {{280, 0}, {16, 17}} YES - 1.227310e+02 + 9.973100e+01 6.273100e+01 1.000000e+03 @@ -1364,7 +1376,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerTextColor @@ -1372,9 +1384,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - Q8OpbHVsYSBkZSB0ZXh0bw + Q8OpbHVsYSBkZSB0ZXh0bw - + 3 @@ -1388,7 +1400,7 @@ Zm9yIGV4ZWN1dGFkby4 - 1.000000e+02 + 1.010000e+02 4.000000e+01 1.000000e+03 @@ -1402,9 +1414,9 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + @@ -1425,7 +1437,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System headerColor @@ -1434,18 +1446,18 @@ Zm9yIGV4ZWN1dGFkby4 338820672 1024 - + Q8OpbHVsYSBkZSB0ZXh0bw - + LucidaGrande 1.200000e+01 16 - + YES 6 - + System controlBackgroundColor @@ -1462,7 +1474,7 @@ Zm9yIGV4ZWN1dGFkby4 6 - + System gridColor 3 @@ -1477,9 +1489,8 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 17}, {301, 198}} + {{1, 17}, {279, 198}} - 4 @@ -1487,20 +1498,20 @@ Zm9yIGV4ZWN1dGFkby4 256 - {{302, 17}, {15, 198}} + {{280, 17}, {15, 198}} - _doScroller: + _doScroller: 9.949238e-01 256 - {{1, 215}, {301, 15}} + {{1, 215}, {279, 15}} 1 - + _doScroller: 6.885246e-01 @@ -1510,18 +1521,16 @@ Zm9yIGV4ZWN1dGFkby4 YES - {{1, 0}, {301, 17}} + {{1, 0}, {279, 17}} - 4 - {{20, 20}, {318, 231}} + {{20, 20}, {296, 231}} - 50 @@ -1533,7 +1542,7 @@ Zm9yIGV4ZWN1dGFkby4 265 - {{340, 223}, {123, 32}} + {{318, 223}, {155, 32}} YES @@ -1545,7 +1554,7 @@ Zm9yIGV4ZWN1dGFkby4 -2038284033 1 - + @@ -1558,6 +1567,7 @@ Zm9yIGV4ZWN1dGFkby4 {{0, 0}, {1440, 878}} {320, 262} + {3.40282e+38, 3.40282e+38} x11_apps @@ -1568,51 +1578,51 @@ Zm9yIGV4ZWN1dGFkby4 YES YES - - + + 1048576 2147483647 - + - - + QXBsaWNhw6fDtWVzA + 1048576 2147483647 - + submenuAction: - + QXBsaWNhw6fDtWVzA YES YES YES - - + + 1048576 2147483647 - + UGVyc29uYWxpemFy4oCmA - + 1048576 2147483647 - + - + @@ -1700,7 +1710,7 @@ Zm9yIGV4ZWN1dGFkby4 - apps_table_show: + apps_table_show: @@ -1788,7 +1798,7 @@ Zm9yIGV4ZWN1dGFkby4 - prefs_changed: + prefs_changed: @@ -1796,7 +1806,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1804,7 +1814,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1812,7 +1822,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1820,7 +1830,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1828,7 +1838,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1836,7 +1846,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -1924,7 +1934,7 @@ Zm9yIGV4ZWN1dGFkby4 - + apps_table_show: @@ -2004,7 +2014,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2012,7 +2022,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2020,7 +2030,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2100,7 +2110,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2108,7 +2118,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2116,7 +2126,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2124,7 +2134,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2132,7 +2142,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2164,7 +2174,7 @@ Zm9yIGV4ZWN1dGFkby4 - + prefs_changed: @@ -2212,7 +2222,7 @@ Zm9yIGV4ZWN1dGFkby4 - + MainMenu 19 @@ -2457,7 +2467,7 @@ Zm9yIGV4ZWN1dGFkby4 196 - + X11Controller 244 @@ -3307,6 +3317,9 @@ Zm9yIGV4ZWN1dGFkby4 YES YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency 100293.IBPluginDependency @@ -3363,6 +3376,7 @@ Zm9yIGV4ZWN1dGFkby4 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 + 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3377,7 +3391,6 @@ Zm9yIGV4ZWN1dGFkby4 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect - 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3399,7 +3412,6 @@ Zm9yIGV4ZWN1dGFkby4 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect - 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3650,345 +3662,347 @@ Zm9yIGV4ZWN1dGFkby4 YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - - - - - - - - - - - - - - - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{168, 821}, {113, 23}} - + com.apple.InterfaceBuilder.CocoaPlugin {{202, 626}, {154, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{349, 858}, {315, 153}} - + com.apple.InterfaceBuilder.CocoaPlugin {{271, 666}, {301, 153}} - {{437, 749}, {484, 308}} - + {{437, 548}, {633, 308}} - {{184, 290}, {633, 308}} + {{437, 548}, {633, 308}} - + {{184, 290}, {633, 308}} + - - {inf, inf} - {320, 240} - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{58, 803}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin {{100, 746}, {155, 33}} - + com.apple.InterfaceBuilder.CocoaPlugin - {{68, 585}, {454, 271}} - + {{68, 585}, {477, 271}} - - + + {{68, 585}, {477, 271}} {{433, 406}, {486, 327}} + - - - - + {3.40282e+38, 3.40282e+38} + {320, 240} + com.apple.InterfaceBuilder.CocoaPlugin {{145, 1011}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin {{67, 819}, {336, 20}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - - + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin {{20, 641}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin {{79, 616}, {218, 203}} - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin @@ -4018,33 +4032,27 @@ Zm9yIGV4ZWN1dGFkby4 YES - - NSObject - - + FirstResponder + NSObject - IBUserSource - - - - - - - - - - - + IBUserSource + NSFormatter - - - + NSObject - - + IBUserSource + + + + + X11Controller + NSObject + + IBUserSource + @@ -4052,863 +4060,5 @@ Zm9yIGV4ZWN1dGFkby4 0 ../X11.xcodeproj 1 - - YnBsaXN0MDDUAAEAAgADAAQABQAGAAkAClgkdmVyc2lvblQkdG9wWSRhcmNoaXZlclgkb2JqZWN0cxIA -AYag0QAHAAhdSUIub2JqZWN0ZGF0YYABXxAPTlNLZXllZEFyY2hpdmVyrxEDmwALAAwAMQA1ADkAQABD -AEQASABMAJQAnACsALMAtAC1ALoAuwC8AL8AwwDEAMcAygDLAMwA0ADVAOMA6QDqAQYBBwEOAQ8BEgEW -ARcBFgEbAR4BHwEjASkBKgEtATIBNwE4AT0BSQFUAVUBVgFaAV8BaAFvAXABdAF2AXcBfAGDAYgBiQGS -AZMBlAGZAaEBpwGoAbMBtAG2AbcBvAHDAcQBxQHKAdEB0gHbAdwB4QHoAe0B7gIFAgkCCwIYAhwCHQIe -AiECKAIyAh0CMwI9Ah0CPgJIAh0CSQJNAlACVQJdAmICYwJkAmUCagJxAnICcwJ4AnkCfgKFAoYCjwKQ -ApUCnAKdAqYCpwKoAq0CsgK5AroCwwLEAsUCygLTAtcC2ALdAuQC5QLmAucC7ALzAvkC+gMDAwQDBQMK -AwsDEAMXAxwDHQMmAycDLAMzAzQDNQM2AzsDRANFA0oDSwNQA1EDVgNdA14DZwNoA20DdAN1A3oDgQOC -A4sDjAORA5kDmgObA6ADoQOmA60DrgO3A7gDuQO+A78DxAPLA88D0APRA9YD3QPeA+gD6QPuA/gD+QP6 -A/4EAAQFBAYECQQMBA8EEAQVBBwEHQQmBCcEKQQqBC8ENgQ3BDgEPQRCBEkESgRRBFIEUwRYBFkEXQRk -BGgEaQRqBGsEcAR1BHoEgQSCBIMEhASJBJAEkQSSBJcEngSfBKgEqQSuBK8EtAS7BLwExQTGBMsE0gTT -BNwE3QTeBOME6gTrBOwE7QTyBPcE/gT/BQgFCQUKBQ8FKwU6BTsFQgVLBUwFTwVUBWkFagVtBXMFhQWM -BY0FkAWVBZYFmQWjBaQFpwWqBbMFuQW6BcIFywXRBdIF1wXYBeIF5gXrBewF8QXyBfUF9wX4Bf0F/gYD -AxwGCgYTBhQGGQYaBh8GIAYlBiYGKwYsBjEGMgY3Bj4GPwZHBkgGSgZLBlAGUQZWBlcGXAZdBmIGYwZo -BoAGgQaCBoMGhgaHBowGkAaeBqIGqwayBrMGuwa8BsMGxAbMBs0G1AbVBt0G3gbfBuEG4gbqBvMG9gb3 -BvoHAQcEBw8HFgcXBx8HIAcnBygHMAcxBzgHOQdBB0IHSQdKB1IG3gdTB1QHWwddB2gHbwdwB3cG3gd4 -B3kHgAeCB4sHkgeTB5oHmweiB6MHqgerB7IHswe6Bt4Huwe8B8IHygfRB9IH2gfbB+IH4wfrB+wH8wf0 -B/wG3gf9B/4IAAgBCAIIAwgECAcICAgNCBIIGQgaCBsIHAghCCYIJwgvCDgBVQg5CEgIUQhaAVUIWwhg -CGMIZAhtCHYIfwiAAVUIiQiOCJcBVQiYCJwIpQFVCKYIsgi7CMMIxAjFCM4IzwjYAVUI2QjdCN4I3wjk -COUI6gjrCYIJiwmMCY0JkAmYCZwJnQmgCagJqQmtCa4JrwmyCbkJugnGCccJyAaGCAEIAgnKCcsAOAnO -CdAKZwr/C5cLmAuZC5oLmwucC50LngufC6ALoQuiC6MLpAulC6YLpwuoC6kLqgurC6wLrQuuC68LsAux -C7ILswu0C7ULtgu3C7gLuQu6C7sLvAu9C74LvwvAC8ELwgvDC8QLxQvGC8cLyAvJC8oLywvMC80LzgvP -C9AL0QvSC9ML1AvVC9YL1wvYC9kL2gvbC9wL3QveC98L4AvhC+IL4wvkC+UL5gvnC+gL6QvqC+sL7Avt -C+4L7wvwC/EL8gvzC/QL9Qv2C/cL+Av5C/oL+wv8C/0GhQv+C/8MAAwBDAIMAwwEDAUMBgwHDAgMCQwK -DAsMDAwNDA4MDwwQDBEMEgwTDBQMFQwWDBcMGAwZDBoMGwwcDB0MHgwfDCAMIQwiDCMMJAwlDCYMJwwo -DCkMLAwvDQwN6Q3qDesN7A3tDe4N7w3wDfEN8g3zDfQN9Q32DfcN+A35DfoN+w38Df0N/g3/DgAOAQ4C -DgMOBA4FDgYOBw4IDgkOCg4LDgwODQ4ODg8OEA4RDhIOEw4UDhUOFg4XDhgOGQ4aDhsOHA4dDh4OHw4g -DiEOIg4jDiQOJQ4mDicOKA4pDioOKw4sDi0OLg4vDjAOMQ4yDjMONA41DjYONw44DjkOOg47DjwOPQ4+ -Dj8OQA5BDkIOQw5EDkUORg5HDkgOSQ5KDksOTA5NDk4OTw5QDlEOUg5TDlQOVQ5WDlcOWA5ZDloOWw5c -Dl0OXg5fDmAOYQ5iDmMOZA5lDmYOZw5oDmkOag5rDmwObQ5uDm8OcA5xDnIOcw50DnUOdg53DngOeQ56 -DnsOfA59Dn4Ofw6ADoEOgg6DDoQOhQ6GDocOiA6JDooOiw6MAkcOjQ6ODo8OkA6RDpIOkw6UDpUOlg6X -DpgOmQ6aDpsOnA6dDp4Onw6gDqEOog6jDqQOpQ6mDqcOqA6pDqoOqw6sDq0Org6vDrAOsQ6yDrMOtA61 -DrYOtw64DrkOug67DrwOvQ6+Dr8OwA7BDsIOxQ7IDstVJG51bGzfEBIADQAOAA8AEAARABIAEwAUABUA -FgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADBWTlNSb290 -ViRjbGFzc11OU09iamVjdHNLZXlzXxAPTlNDbGFzc2VzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5T2lk -c1ZhbHVlc11OU0Nvbm5lY3Rpb25zW05TTmFtZXNLZXlzW05TRnJhbWV3b3JrXU5TQ2xhc3Nlc0tleXNa -TlNPaWRzS2V5c11OU05hbWVzVmFsdWVzXxAZTlNBY2Nlc3NpYmlsaXR5Q29ubmVjdG9yc11OU0ZvbnRN -YW5hZ2VyXxAQTlNWaXNpYmxlV2luZG93c18QD05TT2JqZWN0c1ZhbHVlc18QF05TQWNjZXNzaWJpbGl0 -eU9pZHNLZXlzWU5TTmV4dE9pZFxOU09pZHNWYWx1ZXOAAoEDmoECB4ECuoEDmYAJgQIkgAaBArmBAruB -AiWBA5eAAIAHgQIjgQOYEgAElb2BArzSAA4AMgAzADRbTlNDbGFzc05hbWWABYAD0gAOADYANwA4WU5T -LnN0cmluZ4AEXU5TQXBwbGljYXRpb27SADoAOwA8AD1YJGNsYXNzZXNaJGNsYXNzbmFtZaMAPQA+AD9f -EA9OU011dGFibGVTdHJpbmdYTlNTdHJpbmdYTlNPYmplY3TSADoAOwBBAEKiAEIAP15OU0N1c3RvbU9i -amVjdF8QEElCQ29jb2FGcmFtZXdvcmvSAA4ARQBGAEdaTlMub2JqZWN0c4AIoNIAOgA7AEkASqMASgBL -AD9cTlNNdXRhYmxlU2V0VU5TU2V00gAOAEUATQBOgDqvEEUATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoA -WwBcAF0AXgBfAGAAYQBiAGMAZABlAGYAZwBoAGkAagBrAGwAbQBuAG8AcABxAHIAcwB0AHUAdgB3AHgA -eQB6AHsAfAB9AH4AfwCAAIEAggCDAIQAhQCGAIcAiACJAIoAiwCMAI0AjgCPAJAAkQCSAJOACoAagC2A -PYBEgEyAUIBVgG2Ac4B3gHmAfoCEgIWAi4CPgJSAm4CdgKOAqICrgK2Ar4C0gLeAvIDAgMKAyIDKgM+A -4IDngOuA7IDygPSA+oD7gPyBAQGBAQWBAQqBAQyBARGBAReBARyBAR2BASOBAU2BAU+BAVSBAVaBAViB -AVqBAVyBAV6BAWWBAWeBAWmBAWuBAW2BAdOBAdSBAdmBAgOBAgXUAA4AlQCWAJcAmACZAJoAm11OU0Rl -c3RpbmF0aW9uWE5TU291cmNlV05TTGFiZWyAGYAWgAuAGNgADgCdAJ4AnwCgAKEAogCjAKQApQCmAKcA -qACpAKoAq1dOU1RpdGxlXxARTlNLZXlFcXVpdk1vZE1hc2taTlNLZXlFcXVpdl1OU01uZW1vbmljTG9j -WU5TT25JbWFnZVxOU01peGVkSW1hZ2VWTlNNZW51gBWADRIAEgEKgA4Sf////4APgBOADNQADgCdAK0A -rgCvALAAsQCyVk5TTmFtZVtOU01lbnVJdGVtc4A7gQH0gQH8gQH2XxAkUGVyY29ycmVyIGphbmVsYXMg -bm8gc2VudGlkbyBpbnZlcnNvUX7TAA4AMgC2ALcAuAC5Xk5TUmVzb3VyY2VOYW1lgBKAEIARV05TSW1h -Z2VfEA9OU01lbnVDaGVja21hcmvSADoAOwC9AL6iAL4AP18QEE5TQ3VzdG9tUmVzb3VyY2XTAA4AMgC2 -ALcAuADCgBKAEIAUXxAQTlNNZW51TWl4ZWRTdGF0ZdIAOgA7AMUAxqIAxgA/Wk5TTWVudUl0ZW3SAA4A -MgAzAMmABYAXXVgxMUNvbnRyb2xsZXJfEBBwcmV2aW91c193aW5kb3c60gA6ADsAzQDOowDOAM8AP18Q -FU5TTmliQ29udHJvbENvbm5lY3Rvcl5OU05pYkNvbm5lY3RvctQADgCVAJYAlwDRANIAmQDUgCyAG4AW -gCvXANYADgDXANgA2QDaANsA3ADdAN4A3wDgAOEA3F8QD05TTmV4dFJlc3BvbmRlcldOU0ZyYW1lVk5T -Q2VsbFhOU3ZGbGFnc1lOU0VuYWJsZWRbTlNTdXBlcnZpZXeAHIAqgB2AHhEBAAmAHNUA1gAOANcA5ADZ -ACsA5gDnAOgA4FpOU1N1YnZpZXdzgACBAYaBAamBAaRfEBV7ezM0LCA5Nn0sIHs0MDksIDIzfX3eAOsA -DgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBAAEBANIBAwEEAQVbTlNDZWxs -RmxhZ3NfEBNOU0FsdGVybmF0ZUNvbnRlbnRzXU5TTm9ybWFsSW1hZ2VfEBJOU1BlcmlvZGljSW50ZXJ2 -YWxeTlNCdXR0b25GbGFnczJfEBBOU0FsdGVybmF0ZUltYWdlXxAPTlNLZXlFcXVpdmFsZW50Wk5TQ29u -dGVudHNZTlNTdXBwb3J0XU5TQ29udHJvbFZpZXdfEA9OU1BlcmlvZGljRGVsYXlcTlNDZWxsRmxhZ3My -XU5TQnV0dG9uRmxhZ3MSBAH+AIApgCiAIxAZEAKAJYAogB+AIIAbEMgQABJIPFH/bxA0AEEAYwB0AHUA -YQBsAGkAegBhAHIAIABDAEwASQBQAEIATwBBAFIARAAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4BCACtAQkBCgELAQwBDVZOU1NpemVY -TlNmRmxhZ3OAIiNAKgAAAAAAAIAhEQQUXEx1Y2lkYUdyYW5kZdIAOgA7ARABEaIBEQA/Vk5TRm9udNMA -DgAyALYAtwC4ARWAEoAQgCRYTlNTd2l0Y2jSAA4BGAEZARpbTlNJbWFnZU5hbWWAJ4Am0gA6ADsBHAEd -ogEdAD9fEBNOU0J1dHRvbkltYWdlU291cmNlUNIAOgA7ASABIaQBIQEiANgAP1xOU0J1dHRvbkNlbGxc -TlNBY3Rpb25DZWxs0gA6ADsBJAElpQElASYBJwEoAD9YTlNCdXR0b25ZTlNDb250cm9sVk5TVmlld1tO -U1Jlc3BvbmRlcl8QHHN5bmNfcGFzdGVib2FyZF90b19jbGlwYm9hcmTSADoAOwErASyjASwAzwA/XxAU -TlNOaWJPdXRsZXRDb25uZWN0b3LUAA4AlQCWAJcA0QEvAB8BMYAsgC6AAoA81AAOAJ0ArQCuAK8BNAD6 -ATaAO4AvgCiAMFRNZW510gAOAEUATQE6gDqiATsBPIAxgDLaAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoBL11OU0lzU2VwYXJhdG9yXE5TSXNEaXNhYmxlZIAVgCgSABAAAAmAKAmAD4AT -gC7aAA4BSgCdAJ4AnwCgAKEAogCjAUsApAFNAU4BQgD6AKgAqQCqAS8BU1lOU1N1Ym1lbnVYTlNBY3Rp -b26AFYA1gDOAKIAPgBOALoA0agBBAHAAbABpAGMAYQDnAPUAZQBzXnN1Ym1lbnVBY3Rpb2460wAOAJ0A -rgCvAU4BWYA7gDOANtIADgBFAE0BXIA6ogFdAV6AN4A42gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFC -AOEA+gDhAKgAqQCqAU2AFYAoCYAoCYAPgBOANdgADgCdAJ4AnwCgAKEAogCjAKQBagFCAPoAqACpAKoB -TYAVgDmAKIAPgBOANW0AUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJtIAOgA7AXEBcqMBcgFzAD9eTlNN -dXRhYmxlQXJyYXlXTlNBcnJhedIAOgA7AXUAo6IAowA/WGRvY2tNZW511AAOAJUAlgCXAJgAmQF6AXuA -GYAWgD6AQ9cA1gAOANcA2ADZANoA2wF9AN0BfwGAAOAA4QF9gD+AKoBAgEEJgD/VANYADgDXAOQA2QAr -AOYBhgGHAOCAAIEBhoEBuoEBrV8QFnt7MTUsIDIxMn0sIHs0MDIsIDE4fX3eAOsADgDsAO0A7gDvAPAA -8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoBjwEBAXoBAwEEAQWAKYAogCOAJYAogEKAIIA+XxAi -Q2xpcXVlIGF0cmF2ZXNzYSBqYW5lbGFzIGluYWN0aXZhc15wcmVmc19jaGFuZ2VkOtQADgCVAJYAlwCY -AJkBlwGYgBmAFoBFgEvXANYADgDXANgA2QDaANsBmgDdAZwBnQGeAOEBmoBGgCqAR4BIEQEJCYBG1QDW -AA4A5ADZAaIAKwDmAaUA4AGmW05TRnJhbWVTaXplgACBAYaBAhaBAhdfEBd7ezM0MCwgMTU5fSwgezEy -MywgMzJ9fd0A6wAOAOwA7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD8AasBAQGtAa4BAQGXAQMBsQGy -gCmAKBABgCCASoBJgCCARRIIOAAAE/////+GgkD/V1JlbW92ZXLSAA4ANgA3AR6ABF8QEmFwcHNfdGFi -bGVfZGVsZXRlOtQADgCVAJYAlwCYAJkBugG7gBmAFoBNgE/YAA4AnQCeAJ8AoAChAKIAowCkAb4BQgD6 -AKgAqQCqAKuAFYBOgCiAD4ATgAxfEBlQYXNzYXIgdHVkbyBwYXJhIGEgZnJlbnRlXxAPYnJpbmdfdG9f -ZnJvbnQ61AAOAJUAlgCXAJgAmQHIAXuAGYAWgFGAQ9cA1gAOANcA2ADZANoA2wDcAN0BzQHOAOAA4QDc -gByAKoBSgFMJgBxfEBV7ezM0LCA3MX0sIHs1NTAsIDIzfX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1 -APYA9wD4APkA+gD7APwA/QD+APoB2AEBAcgBAwEEAQWAKYAogCOAJYAogFSAIIBRbxBPAEEAYwB0AHUA -YQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAAbwAgAGIA -bwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC7UAA4AlQCWAJcAmACZAd8Be4AZgBaAVoBD1wDWAA4A -1wDYANkA2gDbAeIB4wHkAeUA4ADhAeKAV4BsgFiAWQmAV9UA1gAOANcA5ADZACsA5gHrAewA4IAAgQGG -gQGggQGPXxAWe3s2NCwgMjAxfSwgezEzMSwgMjZ9fd8QEwDrAe8B8ADsAO4ADgDvAPAA8QDzAMYA9AHx -AfIB8wD1APYAowD3AfQA4QGrAPoB9wH4AasB+QH6AQEB/AHfAf4A4QDhAgECAgIDAgRfEBpOU01lbnVJ -dGVtUmVzcGVjdEFsaWdubWVudF8QD05TQXJyb3dQb3NpdGlvbl8QD05TUHJlZmVycmVkRWRnZV8QEk5T -VXNlc0l0ZW1Gcm9tTWVudV1OU0FsdGVyc1N0YXRlE/////+EQf5ACYAoEEuAa4BagFuAIIBcgFYQAwkJ -EQGQEQQAgF0SBoJA/9QADgEIAK0BCQEKAQsBDAIIgCKAIRAQ0gAOADYANwEegATcAgwADgCdAJ4AnwCg -AKEAogCjAUsCDQIOAeUApAIRAUIA+gCoAKkAqgIDAhYCFwGrWE5TVGFyZ2V0VU5TVGFnV05TU3RhdGWA -WYAVgF6AKIAPgBOAXYBfE///////////0wAOAJ0ArgCvAhoCG4A7gGCAYVpEbyBtb25pdG9yXxARX3Bv -cFVwSXRlbUFjdGlvbjrSAA4ANgA3AiCABFpPdGhlclZpZXdz0gAOAEUATQIjgDqkAfwCJQImAieAXIBi -gGWAaNsCDAAOAJ0AngCfAKAAoQCiAKMBSwINAeUApAIrAUIA+gCoAKkAqgIDAjACMYBZgBWAY4AogA+A -E4BdgGQQCFkyNTYgY29yZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCNgFCAPoAqACpAKoCAwI7 -AjyAWYAVgGaAKIAPgBOAXYBnEA9YTWlsaGFyZXPbAgwADgCdAJ4AnwCgAKEAogCjAUsCDQHlAKQCQQFC -APoAqACpAKoCAwJGAkeAWYAVgGmAKIAPgBOAXYBqEBhnAE0AaQBsAGgA9QBlAHPSADoAOwJKAkumAksC -TAEhASIA2AA/XxARTlNQb3BVcEJ1dHRvbkNlbGxeTlNNZW51SXRlbUNlbGzSADoAOwJOAk+mAk8BJQEm -AScBKAA/XU5TUG9wVXBCdXR0b27UAA4AlQCWAJcAmACZAlMCVIAZgBaAboBy2AAOAJ0AngCfAKAAoQCi -AKMApAJXAlgCWQCoAKkAqgJcgBWAcBIAGAAAgHGAD4ATgG/UAA4AnQCtAK4ArwJfAmACYYA7gQHegQHr -gQHgbxAWAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwByAOMAIABjAG8AbQBwAGwAZQB0AG9RYV8QEnRvZ2ds -ZV9mdWxsc2NyZWVuOtQADgCVAJYAlwCYAB8CaAJpgBmAAoB0gHbXAA4AnQCfAKAAoQCiAKMApAJsAPoA -qACpAKoCXIAVgHWAKIAPgBOAb11BY2VyY2EgZG8gWDExXxAdb3JkZXJGcm9udFN0YW5kYXJkQWJvdXRQ -YW5lbDrUAA4AlQCWAJcA0QJTAJkCd4AsgG6AFoB4XxAWdG9nZ2xlX2Z1bGxzY3JlZW5faXRlbdQADgCV -AJYAlwCYAJkCfAF7gBmAFoB6gEPXANYADgDXANgA2QDaANsA3ADdAoECggDgAOEA3IAcgCqAe4B8CYAc -XxAWe3szNCwgMTU5fSwgezQwOSwgMjN9fd4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6 -APsA/AD9AP4A+gKMAQECfAEDAQQBBYApgCiAI4AlgCiAfYAggHpvEDYAQQBjAHQAdQBhAGwAaQB6AGEA -cgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAHEAdQBhAG4AZABvACAAbwAgAEMA -TABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC7UAA4AlQCWAJcA0QKSAJkClIAsgH+AFoCD1wDWAA4A -1wDYANkA2gDbAX0A3QKYApkA4ADhAX2AP4AqgICAgQmAP18QFnt7MTUsIDEwN30sIHs0MDIsIDE4fX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCowEBApIBAwEEAQWAKYAo -gCOAJYAogIKAIIB/XxAVRm9jbyBlbSBqYW5lbGFzIG5vdmFzXxATZm9jdXNfb25fbmV3X3dpbmRvd9QA -DgCVAJYAlwCYAJkCkgF7gBmAFoB/gEPUAA4AlQCWAJcA0QKvAJkCsYAsgIaAFoCK1wDWAA4A1wDYANkA -2gDbAeIA3QK1ArYA4ADhAeKAV4AqgIeAiAmAV18QFnt7MTgsIDE0OX0sIHs0MDksIDIzfX3eAOsADgDs -AO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoCwAEBAq8BAwEEAQWAKYAogCOAJYAo -gImAIICGbxASAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvXxARZW5hYmxlX2Z1bGxz -Y3JlZW7UAA4AlQCWAJcA0QLHAJkCyYAsgIyAFoCO2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAtKAFYAoCYAoCYAPgBOAjdMADgCdAK4ArwFOAtaAO4AzgQHuXmFwcHNfc2VwYXJhdG9y -1AAOAJUAlgCXAJgAmQLbAtyAGYAWgJCAk9gADgCdAJ4AnwCgAKEAogCjAKQC3wFCAuAAqACpAKoAq4AV -gJGAkoAPgBOADFlNaW5pbWl6YXJRbV8QEG1pbmltaXplX3dpbmRvdzrUAA4AlQCWAJcA0QLpAJkC64As -gJWAFoCa1wDWAA4A1wDYANkA2gDbAu0A3QLvAvAA4ADhAu2AloAqgJeAmAmAltYA1gAOANcA5ADZANsC -9ADmAvYC9wDgAvSBAXaBAYaBAYWBAXiBAXZfEBV7ezE4LCA5MX0sIHs0MDIsIDE4fX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDAAEBAukBAwEEAQWAKYAogCOAJYAogJmA -IICVbxAsAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABl -ACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMV8QEGVuYWJsZV9rZXllcXVpdnPUAA4AlQCW -AJcAmACZAV4DCYAZgBaAOICcXxAQYXBwc190YWJsZV9zaG93OtQADgCVAJYAlwCYAJkDDgF7gBmAFoCe -gEPXANYADgDXANgA2QDaANsDEQDdAxMDFADgAOEDEYCfgCqAoIChCYCf1QDWAA4A1wDkANkAKwDmAxoD -GwDggACBAYaBAcqBAb1fEBZ7ezE4LCAyMTB9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A7wDwAPEA8gDz -APQA9QD2APcA+AD5APoA+wD8AP0A/gD6AyMBAQMOAQMBBAEFgCmAKIAjgCWAKICigCCAnm8QEwBBAHUA -dABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBz1AAOAJUAlgCXAJgAHwMqAyuAGYACgKSAp9gA -DgCdAJ4AnwCgAKEAogCjAKQDLgJYAy8AqACpAKoCXIAVgKWApoAPgBOAb28QGQBPAGMAdQBsAHQAYQBy -ACAAbwB1AHQAcgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzUWhfEBZoaWRlT3RoZXJBcHBsaWNhdGlv -bnM61AAOAJUAlgCXANEDOACZAzqALICpgBaAqtoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA -4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxfEBB3aW5kb3dfc2VwYXJhdG9y1AAOAJUAlgCXANEByACZA0mA -LIBRgBaArF8QGnN5bmNfcGFzdGVib2FyZF90b19wcmltYXJ51AAOAJUAlgCXAJgAmQKvA0+AGYAWgIaA -rl8QGmVuYWJsZV9mdWxsc2NyZWVuX2NoYW5nZWQ61AAOAJUAlgCXAJgAmQNUAXuAGYAWgLCAQ9cA1gAO -ANcA2ADZANoA2wDcAN0DWQNaAOAA4QDcgByAKoCxgLIJgBxfEBV7ezM0LCA0Nn0sIHs1NDQsIDIzfX3e -AOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoDZAEBA1QBAwEEAQWAKYAo -gCOAJYAogLOAIICwbxBOAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMA -bwBsAGEAZwBlAG0AIABpAG0AZQBkAGkAYQB0AGEAbQBlAG4AdABlACAAcQB1AGEAbgBkAG8AIABmAG8A -cgAgAHMAZQBsAGUAYwBjAGkAbwBuAGEAZABvACAAdABlAHgAdABvACAAbgBvAHYAbwAu1AAOAJUAlgCX -AJgAmQNrAwmAGYAWgLWAnNgADgCdAJ4AnwCgAKEAogCjAKQDbwFCAPoAqACpAKoC0oAVgLaAKIAPgBOA -jV8QD1BlcnNvbmFsaXphci4uLtQADgCVAJYAlwCYAJkDeAF7gBmAFoC4gEPXANYADgDXANgA2QDaANsB -4gDdA30DfgDgAOEB4oBXgCqAuYC6CYBXXxAVe3sxOCwgNjN9LCB7NDAyLCAxOH193gDrAA4A7ADtAO4A -7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6A4gBAQN4AQMBBAEFgCmAKIAjgCWAKIC7gCCA -uF8QJlV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1h1AAOAJUAlgCXAJgAHwOPA5CA -GYACgL2Av9kADgCdAJ4AnwCgAKEAogCjAg0ApAOTAUIA+gCoAKkAqgJcA5iAFYC+gCiAD4ATgG8QKlxN -b3N0cmFyIHR1ZG9fEBZ1bmhpZGVBbGxBcHBsaWNhdGlvbnM61AAOAJUAlgCXANEDVACZA5+ALICwgBaA -wV8QGHN5bmNfcHJpbWFyeV9pbW1lZGlhdGVsedQADgCVAJYAlwDRA6MAmQOlgCyAw4AWgMfXANYADgDX -ANgA2QDaANsBfQDdA6kDqgDgAOEBfYA/gCqAxIDFCYA/XxAWe3sxNSwgMTUxfSwgezQwMiwgMTh9fd4A -6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gO0AQEDowEDAQQBBYApgCiA -I4AlgCiAxoAggMNfEBFGb2NvIHNlZ3VlIG8gcmF0b18QE2ZvY3VzX2ZvbGxvd3NfbW91c2XUAA4AlQCW -AJcA0QJ8AJkDvYAsgHqAFoDJXxAcc3luY19jbGlwYm9hcmRfdG9fcGFzdGVib2FyZNQADgCVAJYAlwCY -AJkDwgPDgBmAFoDLgM7YAA4AnQCeAJ8AoAChAKIAowCkA8YBQgD6AKgAqQCqA8qAFYDNgCiAD4ATgMzT -AA4AnQCuAK8DzQPOgDuBAf6BAgBcQWp1ZGEgZG8gWDExWXgxMV9oZWxwOtQADgCVAJYAlwDRA9MAmQPV -gCyA0IAWgN/XANYADgDXANgA2QDaANsA3APYA9kD2gDgAOEA3IAcgN6A0YDSCYAcXxAWe3s0OCwgMTI1 -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiA+MD5APTA+YD518QEU5TQmFja2dyb3Vu -ZENvbG9yW05TVGV4dENvbG9ygN2A1YDTgNSA0BIAQAAAgNpvEG0ARABlAHMAYQBjAHQAaQB2AGUAIABl -AHMAdABhACAAbwBwAOcA4wBvACAAcwBlACAAcAByAGUAdABlAG4AZABlAHIAIAB1AHQAaQBsAGkAegBh -AHIAIABvACAAeABjAGwAaQBwAGIAbwBhAHIAZAAsACAAbwAgAGsAbABpAHAAcABlAHIAIABvAHUAIABx -AHUAYQBsAHEAdQBlAHIAIABvAHUAdAByAG8AIABnAGUAcwB0AG8AcgAgAGQAZQAgAGMAbABpAHAAYgBv -AGEAcgBkACAAWAAxADEALtQADgEIAK0BCQEKA+sBDAPtgCIjQCYAAAAAAACAIREMHNUADgPvA/AD8QPy -A/MD9AP1A/YD91dOU0NvbG9yXE5TQ29sb3JTcGFjZVtOU0NvbG9yTmFtZV1OU0NhdGFsb2dOYW1lgNmA -2BAGgNeA1lZTeXN0ZW1cY29udHJvbENvbG9y0wAOA/AD+wPzAf4D/VdOU1doaXRlgNlLMC42NjY2NjY2 -OQDSADoAOwP/A++iA+8AP9UADgPvA/AD8QPyA/MEAgP1BAMD94DZgNyA24DWXxAQY29udHJvbFRleHRD -b2xvctMADgPwA/sD8wH+BAiA2UIwANIAOgA7BAoEC6QECwEiANgAP18QD05TVGV4dEZpZWxkQ2VsbNIA -OgA7BA0EDqUEDgEmAScBKAA/W05TVGV4dEZpZWxkWnN5bmNfdGV4dDHUAA4AlQCWAJcAmACZBBMEFIAZ -gBaA4YDm1wDWAA4A1wDYANkA2gDbAZoA3QQYBBkBngDhAZqARoAqgOKA4wmARl8QF3t7MzQwLCAyMjN9 -LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA9gD3BB4A+QD6APwBqwEBBCIEIwEBBBMB -AwGxAbIT/////4QB/gCAKYAogCCA5YDkgCCA4V8QEkFkaWNpb25hciBlbGVtZW50b9IADgA2ADcBHoAE -XxAPYXBwc190YWJsZV9uZXc61AAOAJUAlgCXAJgAmQQtBC6AGYAWgOiA6tgADgCdAJ4AnwCgAKEAogCj -AKQEMQFCAPoAqACpAKoAq4AVgOmAKIAPgBOADFRab29tXHpvb21fd2luZG93OtQADgCVAJYAlwCYAJkC -6QF7gBmAFoCVgEPUAA4AlQCWAJcA0QQ/AJkEQYAsgO2AFoDx1wDWAA4A1wDYANkA2gDbANwD2ARFBEYA -4ADhANyAHIDegO6A7wmAHF8QFXt7NDgsIDE0fSwgezUzNCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD -4QPiBE0D5AQ/A+YD54DdgNWA8IDUgO2A2m8QXQBEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDn -APUAZQBzACAAZABvACAAcAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADn -AOMAbwAgAG4AZQBtACAAcwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBs -AGcAdQBtAGEAcwAgAGEAcABsAGkAYwBhAOcA9QBlAHMALlpzeW5jX3RleHQy1AAOAJUAlgCXANEBOwCZ -BFeALIAxgBaA818QFWRvY2tfd2luZG93X3NlcGFyYXRvctMADgCWAJcAmARbBFyAGYD1gPnYAA4AnQCe -AJ8AoAChAKIAowCkBF8BQgRgAKgAqQCqBGOAFYD3gPiAD4ATgPbTAA4AnQCuAK8EZgRngDuBAfCBAfJW -Q29waWFyUWNVY29weTrUAA4AlQCWAJcAmACZA6MBe4AZgBaAw4BD1AAOAJUAlgCXAJgAmQDSAXuAGYAW -gBuAQ9QADgCVAJYAlwCYAB8EeAR5gBmAAoD9gQEA2AAOAJ0AngCfAKAAoQCiAKMApAR8AUIEfQCoAKkA -qgJcgBWA/oD/gA+AE4BvW1NhaXIgZG8gWDExUXFadGVybWluYXRlOtQADgCVAJYAlwCYAB8EhwSIgBmA -AoEBAoEBBNkADgCdAJ4AnwCgAKEAogCjAg0ApASLAUIDLwCoAKkAqgJcA5iAFYEBA4CmgA+AE4BvXU9j -dWx0YXIgbyBYMTFVaGlkZTrUAA4AlQCWAJcAmACZBJUBe4AZgBaBAQaAQ9cA1gAOANcA2ADZANoA2wDc -AN0EmgSbAOAA4QDcgByAKoEBB4EBCAmAHF8QFnt7MTgsIDIyMn0sIHs0MDksIDIzfX3eAOsADgDsAO0A -7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoEpQEBBJUBAwEEAQWAKYAogCOAJYAogQEJ -gCCBAQZvEBUAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG/UAA4AlQCWAJcA -0QFNAJkErYAsgDWAFoEBC15kb2NrX2FwcHNfbWVuddQADgCVAJYAlwCYAJkEsgF7gBmAFoEBDYBD1wDW -AA4A1wDYANkA2gDbAeIA3QS3BLgA4ADhAeKAV4AqgQEOgQEPCYBXXxAVe3szNywgODh9LCB7NDc2LCAx -OH193gDrAA4A7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD6BMIBAQSyAQMBBAEF -gCmAKIAjgCWAKIEBEIAggQENbxBBAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0AGkAYwBhAG0A -ZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABtAG8AZABvACAA -ZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAb9QADgCVAJYAlwDRBMgAmQTKgCyBARKAFoEBFtcA -1gAOANcA2ADZANoA2wMRAN0EzgTPAOAA4QMRgJ+AKoEBE4EBFAmAn18QFnt7MTgsIDEzM30sIHs0MDIs -IDE4fX3eAOsADgDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+APoE2QEBBMgBAwEE -AQWAKYAogCOAJYAogQEVgCCBARJvECUAUABlAHIAbQBpAHQAaQByACAAbABpAGcAYQDnAPUAZQBzACAA -ZABlACAAYwBsAGkAZQBuAHQAZQBzACAAZABhACAAcgBlAGQAZVplbmFibGVfdGNw1AAOAJUAlgCXAJgA -mQThBOKAGYAWgQEYgQEb2AAOAJ0AngCfAKAAoQCiAKMApATlAUIE5gCoAKkAqgJcgBWBARmBARqAD4AT -gG9vEA8AUAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC5RLFtwcmVmc19zaG93OtQADgCVAJYAlwCY -AJkEyAF7gBmAFoEBEoBD1AAOAJUAlgCXANEE9ACZBPaALIEBHoAWgQEi1wDWAA4A1wDYANkA2gDbAu0A -3QT6BPsA4ADhAu2AloAqgQEfgQEgCYCWXxAWe3sxOCwgMTQ2fSwgezQwMiwgMTh9fd4A6wAOAOwA7QDu -AO8A8ADxAPIA8wD0APUA9gD3APgA+QD6APsA/AD9AP4A+gUFAQEE9AEDAQQBBYApgCiAI4AlgCiBASGA -IIEBHm8QKQBTAGUAZwB1AGkAcgAgAGEAIABkAGkAcwBwAG8AcwBpAOcA4wBvACAAZABvACAAdABlAGMA -bABhAGQAbwAgAGQAbwAgAHMAaQBzAHQAZQBtAGFbc3luY19rZXltYXDUAA4AlQCWAJcA0QUMAJkFDoAs -gQEkgBaBAUzfEBMA1gUQAA4FEQUSA98FEwUUBRUFFgUXANkBogDaBRgFGQDbBRoFGwUcAQQFHQUeBR8F -IADhBSIFIwGrBSQA4AUlAOEFJwIXBRwFKQUqXxAfTlNEcmFnZ2luZ1NvdXJjZU1hc2tGb3JOb25Mb2Nh -bFlOU1R2RmxhZ3NcTlNIZWFkZXJWaWV3XxASTlNBbGxvd3NUeXBlU2VsZWN0XE5TQ29ybmVyVmlld18Q -F05TSW50ZXJjZWxsU3BhY2luZ1dpZHRoXxAZTlNDb2x1bW5BdXRvcmVzaXppbmdTdHlsZV8QGE5TSW50 -ZXJjZWxsU3BhY2luZ0hlaWdodFtOU0dyaWRDb2xvcl8QHE5TRHJhZ2dpbmdTb3VyY2VNYXNrRm9yTG9j -YWxeTlNUYWJsZUNvbHVtbnNbTlNSb3dIZWlnaHSBASWBAUsSUkCAAIEBJ4EBOQmBASsjQAgAAAAAAAAj -QAAAAAAAAACBASYJgQFIgQElgQEvI0AxAAAAAAAA2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQUyBTMF -NAU1BQwFNwUwBQxZTlNjdkZsYWdzWU5TRG9jVmlld1lOU0JHQ29sb3JdTlNOZXh0S2V5Vmlld4EBLIEC -D4ECDhAEgQINEQkAgQEkgQFGgQEsgQEkWnszMDEsIDE5OH3WANYADgDZAaIA2wU8BT0FPgDgBT8FPQUM -W05TVGFibGVWaWV3gQEogQEqgQEpgQEogQEk2gDWAA4A1wUsAOQA2QUtBS4A2wUvBTAFMQVFBTMFRgU1 -BR8FNwUwBR+BASyBAg+BAhOBAhKBASeBAUaBASyBASdZezMwMSwgMTd90gA6ADsFTQVOpAVOAScBKAA/ -XxARTlNUYWJsZUhlYWRlclZpZXfVANYADgDXANkA2wUwBVEFUgDgBTCBASyBAS6BAS2BASzeANYFVQAO -ANcFVgUUBVcA5AVYANkA2wVZBS8FWgGaBVwFXQVeBV8FIgU9BWIFYwVkAZoFZgUcBRxbTlNIU2Nyb2xs -ZXJYTlNzRmxhZ3NfEBBOU0hlYWRlckNsaXBWaWV3XE5TU2Nyb2xsQW10c1tOU1ZTY3JvbGxlcl1OU0Nv -bnRlbnRWaWV3gEaBAgiBAhWBAhQQMoEBK4EBKIECDE8QEEEgAABBIAAAQZgAAEGYAAARARKARoECEIEB -JYEBJV8QFHt7MzAyLCAwfSwgezE2LCAxN3190gA6ADsFawVspAVsAScBKAA/XV9OU0Nvcm5lclZpZXfS -AA4ARQBNBW+AOqMFcAVxBXKBATCBATuBAT/aBXQADgV1BXYFdwV4BXkFegV7BTwA4QV9BX4FfwWAAf4F -gQWCAOEFDF5OU0lzUmVzaXplYWJsZVxOU0hlYWRlckNlbGxXTlNXaWR0aFpOU0RhdGFDZWxsXk5TUmVz -aXppbmdNYXNrWk5TTWluV2lkdGhaTlNNYXhXaWR0aFxOU0lzRWRpdGFibGUJgQE6gQExI0BersjAAAAA -gQE3I0BPXZFgAAAAI0CPQAAAAAAACYEBJNcA6wAOA98A8gDzAPYD4AWGBYcFiAWJA+QBBAWLEgSB/gCB -ATaBATOBATKA1IEBNFROb21l0wAOA/AD+wPzAf4Fj4DZSzAuMzMzMzMyOTkA1QAOA+8D8APxA/ID8wQC -A/UFkwP3gNmA3IEBNYDWXxAPaGVhZGVyVGV4dENvbG9y0gA6ADsFlwWYpQWYBAsBIgDYAD9fEBFOU1Rh -YmxlSGVhZGVyQ2VsbNkA6wAOA98A8gDzAPQA9gWaA+AFmwPhBSAFngEBBQwCAgD6A+dfEBNOU1BsYWNl -aG9sZGVyU3RyaW5nEhQx/kCA3YEBOYEBOIAggQEkgCiA2m8QDwBDAOkAbAB1AGwAYQAgAGQAZQAgAHQA -ZQB4AHQAb9MADgPwA/sD8wH+BaaA2UIxANIAOgA7BagFqaIFqQA/XU5TVGFibGVDb2x1bW7aBXQADgV1 -BXYFdwV4BXkFegV7BTwA4QV9Ba0FrgWvAf4FsAWCAOEFDAmBATqBATwjQFkAAAAAAACBAT4jQEQAAAAA -AAAJgQEk1wDrAA4D3wDyAPMA9gPgBYYFhwWIBbYD5AEEBYuBATaBATOBAT2A1IEBNFdDb21hbmRv2QDr -AA4D3wDyAPMA9AD2BZoD4AWbA+EFIAWeAQEFDAICAPoD54DdgQE5gQE4gCCBASSAKIDa2gV0AA4FdQV2 -BXcFeAV5BXoFewU8AOEFfQXFBcYFxwH+BcgFggDhBQwJgQE6gQFAI0BRQAAAAAAAgQFEI0AkAAAAAAAA -CYEBJNcA6wAOA98A8gDzAPYD4AD4BYcFzQXOA+QBBAWLgQE2gQFCgQFBgNSBATRWQXRhbGhv1QAOA+8D -8APxA/ID8wUgA/UF1QP3gNmBATmBAUOA1ltoZWFkZXJDb2xvctoA6wAOA98A8gDzAPQA9gXZBZoD4AWb -A+EFNwWeBd0FDAICAOEA+gPnXxARTlNEcmF3c0JhY2tncm91bmSA3YEBRoEBOIEBRYEBJAmAKIDa1AAO -AQgArQEJAQoF5AEMAgiAIiNAKAAAAAAAAIAh1QAOA+8D8APxA/ID8wP0A/UF6QP3gNmA2IEBR4DWXxAW -Y29udHJvbEJhY2tncm91bmRDb2xvctUADgPvA/AD8QPyA/MF7gP1Be8D94DZgQFKgQFJgNZZZ3JpZENv -bG9y0wAOA/AD+wPzAf4F9IDZRDAuNQDSADoAOwX2BTylBTwBJgEnASgAP1phcHBzX3RhYmxl1AAOAJUA -lgCXANEB3wCZBfyALIBWgBaBAU5VZGVwdGjUAA4AlQCWAJcAmACZBgEBe4AZgBaBAVCAQ9cA1gAOANcA -2ADZANoA2wLtAN0GBgYHAOAA4QLtgJaAKoEBUYEBUgmAlt4A6wAOAOwA7QDuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APsA/AD9AP4A+gYQAQEGAQEDAQQBBYApgCiAI4AlgCiBAVOAIIEBUG8QGwBTAGkAbQB1 -AGwAYQByACAAcgBhAHQAbwAgAGQAZQAgAHQAcgDqAHMAIABiAG8AdAD1AGUAc9QADgCVAJYAlwDRAS8A -mQYYgCyALoAWgQFVWWRvY2tfbWVuddQADgCVAJYAlwDRBJUAmQYegCyBAQaAFoEBV18QD3N5bmNfcGFz -dGVib2FyZNQADgCVAJYAlwDRAmgAmQYkgCyAdIAWgQFZXngxMV9hYm91dF9pdGVt1AAOAJUAlgCXANEA -mQAfBiqALIAWgAKBAVtYZGVsZWdhdGXUAA4AlQCWAJcA0QN4AJkGMIAsgLiAFoEBXVt1c2Vfc3lzYmVl -cNQADgCVAJYAlwCYAJkGNQY2gBmAFoEBX4EBZNcA1gAOANcA2ADZANoA2wGaAN0GOgY7AZ4A4QGagEaA -KoEBYIEBYQmARl8QF3t7MzQwLCAxOTF9LCB7MTIzLCAzMn193QDrAA4A7ADuAO8A8ADxAPIA8wD0APUA -9gD3APgA+QD6APwBqwEBBkMGRAEBBjUBAwGxAbKAKYAogCCBAWOBAWKAIIEBX1hEdXBsaWNhctIADgA2 -ADcBHoAEXxAVYXBwc190YWJsZV9kdXBsaWNhdGU61AAOAJUAlgCXANEEsgCZBk+ALIEBDYAWgQFmXxAW -ZW5hYmxlX2Z1bGxzY3JlZW5fbWVuddQADgCVAJYAlwDRAw4AmQZVgCyAnoAWgQFoW2VuYWJsZV9hdXRo -1AAOAJUAlgCXANEGAQCZBluALIEBUIAWgQFqXGZha2VfYnV0dG9uc9QADgCVAJYAlwDRAXoAmQZhgCyA -PoAWgQFsXWNsaWNrX3Rocm91Z2jUAA4AlQCWAJcA0QZlAJkGZ4AsgQFugBaBAdLdBmkADgZqBmsGbAZt -Bm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0A/QH+Bn4Gf1xOU1dpbmRvd1ZpZXdcTlNTY3Jl -ZW5SZWN0XxATTlNGcmFtZUF1dG9zYXZlTmFtZV1OU1dpbmRvd1RpdGxlWU5TV1RGbGFnc11OU1dpbmRv -d0NsYXNzXxAWTlNXaW5kb3dDb250ZW50TWluU2l6ZVxOU1dpbmRvd1JlY3RfEA9OU1dpbmRvd0JhY2tp -bmdfEBFOU1dpbmRvd1N0eWxlTWFza1lOU01pblNpemVbTlNWaWV3Q2xhc3OBAXSBAdGBAc6BAdCBAXAS -UHgAAIEBcYEBc4EBb4EBz4EBcl8QGHt7MzE5LCAzMjh9LCB7NjMzLCAzMDh9fW8QEwBQAHIAZQBmAGUA -cgDqAG4AYwBpAGEAcwAgAGQAbwAgAFgAMQAxV05TUGFuZWzSAA4ANgA3BoWABFRWaWV3WnszMjAsIDI0 -MH3VANYADgDkANkBogArAOYGigDgBouAAIEBhoEBdYEBzdIADgBFAE0GjoA6oQL0gQF23ADWAA4GkQUR -ANcBEQDkANkF2QDbBpIGkwZ1BpUGlgEEBpcBAQaZAOAA4QZ1AOEGnV5OU1RhYlZpZXdJdGVtc18QFk5T -QWxsb3dUcnVuY2F0ZWRMYWJlbHNfEBVOU1NlbGVjdGVkVGFiVmlld0l0ZW2BAXSBAcyBAYiBAYeAIIEB -dwmBAXQJgQGJ0gAOAEUATQaggDqhAu2AltIADgBFAE0GpIA6pgYBBqYGpwLpBqkE9IEBUIEBeYEBfYCV -gQGBgQEe1wDWAA4A1wDYANkA2gDbAu0D2AauBq8A4ADhAu2AloDegQF6gQF7CYCWXxAVe3szNiwgNTd9 -LCB7NTEwLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4ga2A+QGpgPmAPoD54DdgNWBAXyA1IEB -eYAogNpvEIMAUwBlACAAZQBzAHQAaQB2AGUAcgBlAG0AIABhAGMAdABpAHYAYQBzACwAIABhAHMAIAB0 -AGUAYwBsAGEAcwAgAGUAcQB1AGkAdgBhAGwAZQBuAHQAZQBzACAAZABhACAAYgBhAHIAcgBhACAAZABl -ACAAbQBlAG4AdQBzACAAcABvAGQAZQBtACAAaQBuAHQAZQByAGYAZQByAGkAcgAgAG4AYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxACAAcQB1AGUAIAB1AHQAaQBsAGkAegBhAG0AIABvACAAbQBv -AGQAaQBmAGkAYwBhAGQAbwByACAATQBlAHQAYQAu1wDWAA4A1wDYANkA2gDbAu0D2Aa/BsAA4ADhAu2A -loDegQF+gQF/CYCWXxAWe3szNiwgMTY1fSwgezUxMCwgMzl9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APh -A+IGxwPkBqcD5gD6A+eA3YDVgQGAgNSBAX2AKIDabxBrAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEA -bgB0AGUAbgBoAGEAIABwAHIAZQBtAGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMA -bwAgAG8AdQAgAEMAbwBtAGEAbgBkAG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIA -bwB0APUAZQBzACAAYwBlAG4AdAByAGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEA -dABvAC4ACtcA1gAOANcA2ADZANoA2wLtA9gG0AbRAOAA4QLtgJaA3oEBgoEBgwmAll8QFnt7MzYsIDEy -MX0sIHs1MTAsIDE5fX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBtgD5AapA+YA+gPngN2A1YEBhIDU -gQGBgCiA2m8QWQBQAGUAcgBtAGkAdABlACAAcQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABv -ACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIAYQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABh -AG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0AYQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAg -AFgAMQAxAC5fEBZ7ezEwLCAzM30sIHs1ODcsIDI0Nn190gA6ADsG4AEnowEnASgAP18QFnt7MTMsIDEw -fSwgezYwNywgMjkyfX3SAA4ARQBNBuSAOqUGnQbmBucG6AbpgQGJgQGNgQGigQGrgQG81gAOBusBJwbs -A+8AlwbtBu4C7QL0A+IG8lxOU0lkZW50aWZpZXJZTlNUYWJWaWV3gQGMgQGKgJaBAXaA1YEBi9IADgA2 -ADcG9YAEUTFXRW50cmFkYdIAOgA7BvgG+aIG+QA/XU5TVGFiVmlld0l0ZW3WAA4G6wEnBuwD7wCXBu0G -/AHiAvQD4gcAgQGMgQGOgFeBAXaA1YEBodIADgA2ADcHA4AEUTLSAA4ARQBNBwaAOqgDeAcIAd8HCgcL -Aq8EsgcOgLiBAZCAVoEBlIEBmICGgQENgQGc1wDWAA4A1wDYANkA2gDbAeID2AcSBxMA4ADhAeKAV4De -gQGRgQGSCYBXXxAVe3szNiwgMTV9LCB7NTIxLCA0Mn192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED4gca -A+QHCAPmAPoD54DdgNWBAZOA1IEBkIAogNpvEIoATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIA -bwBzACAAZABvACAAWAAxADEAIAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAA -cABhAGQAcgDjAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMA -dABpAHYAZQByACAAZABlAGYAaQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8A -cgBvAHMALAAgAG4AYQBzACAAcAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUA -bQBhAC7XANYADgDXANgA2QDaANsB4gPYByMHJADgAOEB4oBXgN6BAZWBAZYJgFdfEBV7ezE3LCAyMDV9 -LCB7NTUsIDIwfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiBysBAQcKA+YA+gPngN2A1YEBl4AggQGU -gCiA2ldDb3JlczoK1wDWAA4A1wDYANkA2gDbAeID2Ac0BzUA4ADhAeKAV4DegQGZgQGaCYBXXxAWe3sz -NiwgMTgzfSwgezM5MiwgMTR9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IHPAPkBwsD5gD6A+eA3YDV -gQGbgNSBAZiAKIDabxBDAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBtACAA -dgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEA -IABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC7XANYADgDXANgA2QDaANsB4gPYB0UHRgDgAOEB4oBX -gN6BAZ2BAZ4JgFdfEBZ7ezM2LCAxMTV9LCB7NTIxLCAyOH192QDrAA4D3wDyAPMA9AD2BZoD4AD4A+ED -4gdNA+QHDgPmAPoD54DdgNWBAZ+A1IEBnIAogNpvEHgAQQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6AGUAIABhACAAYwBvAG0AYgBp -AG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBuAGQAbwAtAE8AcADnAOMAbwAt -AEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAgAGQAbwAgAG0AbwBkAG8AIABk -AGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC5lAFMAYQDtAGQAYdYADgbrAScG7APvAJcG7QdW -ANwC9APiB1qBAYyBAaOAHIEBdoDVgQGq0gAOADYANwcDgATSAA4ARQBNB1+AOqgElQdhANIByANUAnwD -0wQ/gQEGgQGlgBuAUYCwgHqA0IDt1wDWAA4A1wDYANkA2gDbANwD2AdrB2wA4ADhANyAHIDegQGmgQGn -CYAcXxAWe3szNiwgMTg4fSwgezU0MCwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB3MD5AdhA+YD -54DdgNWBAaiA1IEBpYDabxCBAEEAYwB0AGkAdgBhACAAbwAgAGkAdABlAG0AIABkAGUAIABtAGUAbgB1 -ACAAIgBjAG8AcABpAGEAcgAiACAAZQAgAHAAZQByAG0AaQB0AGUAIABhACAAcwBpAG4AYwByAG8AbgBp -AHoAYQDnAOMAbwAgAGUAbgB0AHIAZQAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAg -AGQAbwAgAE8AUwAgAFgAIABlACAAbwBzACAAYgB1AGYAZgBlAHIAcwAgAEMATABJAFAAQgBPAEEAUgBE -ACAAZQAgAFAAUgBJAE0AQQBSAFkAIABkAG8AIABYADEAMQAubxAPAMEAcgBlAGEAIABkAGUAIABjAG8A -bABhAGcAZQBt1gAOBusBJwbsA+8AlwbtB3sBfQL0A+IHf4EBjIEBrIA/gQF2gNWBAbvSAA4ANgA3BwOA -BNIADgBFAE0HhIA6pgF6B4YDoweIApIHioA+gQGugMOBAbKAf4EBttcA1gAOANcA2ADZANoA2wF9A9gH -jgePAOAA4QF9gD+A3oEBr4EBsAmAP18QFnt7MjMsIDE3NX0sIHs1MTksIDMxfX3YAOsADgPfAPIA8wD0 -APYD4AD4A+ED4geWA+QHhgPmA+eA3YDVgQGxgNSBAa6A2m8QggBTAGUAIABhAHMAcwBpAG4AYQBsAGEA -cgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoA -YQBuAGUAbABhACAAaQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA -8wAgAGEAIAB0AHIAYQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMA -dABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAg1wDW -AA4A1wDYANkA2gDbAX0D2AeeB58A4ADhAX2AP4DegQGzgQG0CYA/XxAWe3syMywgMTI1fSwgezQ5MCwg -MjB9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB6YD5AeIA+YD54DdgNWBAbWA1IEBsoDaXxBJTyBmb2Nv -IGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBlZmVpdG9zIGFk -dmVyc29zLtcA1gAOANcA2ADZANoA2wF9A9gHrgevAOAA4QF9gD+A3oEBt4EBuAmAP18QFXt7MjMsIDcz -fSwgezUwOSwgMjh9fdgA6wAOA98A8gDzAPQA9gPgAPgD4QPiB7YD5AeKA+YD54DdgNWBAbmA1IEBtoDa -bxB6AEEAIABjAHIAaQBhAOcA4wBvACAAZABlACAAdQBtAGEAIABuAG8AdgBhACAAagBhAG4AZQBsAGEA -IABYADEAMQAgAGYAYQB6ACAAYwBvAG0AIABxAHUAZQAgAFgAMQAxAC4AYQBwAHAAIAB2AGUAbgBoAGEA -IABwAGEAcgBhACAAcAByAGkAbQBlAGkAcgBvACAAcABsAGEAbgBvACAAKABlAG0AIAB2AGUAegAgAGQA -ZQAgAEYAaQBuAGQAZQByAC4AYQBwAHAALAAgAFQAZQByAG0AaQBuAGEAbAAuAGEAcABwACwAIABlAHQA -YwAuACkALldKYW5lbGFz1QAOAScG7APvAJcG7QMRAvQD4gfBgQGMgJ+BAXaA1YEBy9IADgBFAE0HxIA6 -pQMOBMgHxwfIB8mAnoEBEoEBvoEBwoEBxtcA1gAOANcA2ADZANoA2wMRA9gHzQfOAOAA4QMRgJ+A3oEB -v4EBwAmAn18QFnt7MzYsIDE2Mn0sIHs0OTYsIDQyfX3ZAOsADgPfAPIA8wD0APYFmgPgAPgD4QPiB9UD -5AfHA+YA+gPngN2A1YEBwYDUgQG+gCiA2m8QwwBMAGEAbgDnAGEAcgAgAG8AIABYADEAMQAgAGMAcgBp -AGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkAIABkAGUAIABjAG8AbgB0AHIAbwBs -AG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUAbgBkAGUAcgBlAOcAbwAgAEkAUAAg -AGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUAcgBhAGQAbwAsACAAZQBzAHQAYQBz -ACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEAbABpAGQAYQBkAGUALAAgAHAAbwBk -AGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMAcwBpAGIAaQBsAGkAdABhAHIAIABh -ACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEALtcA -1gAOANcA2ADZANoA2wMRA9gH3gffAOAA4QMRgJ+A3oEBw4EBxAmAn18QFXt7MzYsIDcxfSwgezQ5Niwg -NTZ9fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH5gPkB8gD5gD6A+eA3YDVgQHFgNSBAcKAKIDabxDP -AFMAZQAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABwAHIAZQBjAGkAcwBh -ACAAaQBnAHUAYQBsAG0AZQBuAHQAZQAgAGQAZQAgAGEAYwB0AGkAdgBhAHIAIABhACAAbwBwAOcA4wBv -ACAgHABBAHUAdABlAG4AdABpAGMAYQByACAAbABpAGcAYQDnAPUAZQBzIB0AIABwAGEAcgBhACAAZwBh -AHIAYQBuAHQAaQByACAAYQAgAHMAZQBnAHUAcgBhAG4A5wBhACAAZABvACAAcwBpAHMAdABlAG0AYQAu -ACAAUwBlACAAbgDjAG8AIABhAGMAdABpAHYAYQByACAAZQBzAHQAYQAgAG8AcADnAOMAbwAsACAAbgDj -AG8AIABzAOMAbwAgAHAAZQByAG0AaQB0AGkAZABhAHMAIABsAGkAZwBhAOcA9QBlAHMAIABhACAAcABh -AHIAdABpAHIAIABkAGUAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAcgBlAG0AbwB0AGEAcwAu1wDWAA4A -1wDYANkA2gDbAxED2AfvB/AA4ADhAxGAn4DegQHHgQHICYCfXxAWe3syMCwgLTE2fSwgezQwNCwgMTR9 -fdkA6wAOA98A8gDzAPQA9gWaA+AA+APhA+IH9wPkB8kD5gD6A+eA3YDVgQHJgNSBAcaAKIDabxBGAEUA -cwB0AGEAcwAgAG8AcADnAPUAZQBzACAAZQBuAHQAcgBhAHIA4wBvACAAZQBtACAAdgBpAGcAbwByACAA -ZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAxADEAIABmAG8AcgAgAGUA -eABlAGMAdQB0AGEAZABvAC5pAFMAZQBnAHUAcgBhAG4A5wBh0gA6ADsH/wbspAbsAScBKAA/Wns2MzMs -IDMwOH1fEBV7ezAsIDB9LCB7MTQ0MCwgODc4fX1aezMyMCwgMjYyfVl4MTFfcHJlZnPSADoAOwgFCAai -CAYAP18QEE5TV2luZG93VGVtcGxhdGVbcHJlZnNfcGFuZWzUAA4AlQCWAJcAmACZBPQBe4AZgBaBAR6A -Q9QADgCVAJYAlwCYAJkIEAgRgBmAFoEB1YEB2NgADgCdAJ4AnwCgAKEAogCjAKQIFAFCCBUAqACpAKoA -q4AVgQHWgQHXgA+AE4AMVkZlY2hhclF3XWNsb3NlX3dpbmRvdzrUAA4AlQCWAJcA0QgeAB8IIIAsgQHa -gAKBAgLUAA4AnQCtAK4ArwgjCCQIJYA7gQHbgQIBgQHcWE1haW5NZW510gAOAEUATQgpgDqlCCoIKwgs -CC0ILoEB3YEB7IEB74EB84EB/doADgFKAJ0AngCfAKAAoQCiAKMBSwCkAlwCXwFCAPoAqACpAKoIHgg3 -gBWAb4EB3oAogA+AE4EB2oEB31NYMTHSAA4ARQBNCDuAOqwCaAThCD4IPwhAAlMIQgSHAyoDjwhGBHiA -dIEBGIEB4YEB4oEB6IBugQHpgQECgKSAvYEB6oD92gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb9oADgFKAJ0AngCfAKAAoQCiAKMBSwCkCFMIVAFCAPoAqACp -AKoCXAhZgBWBAeWBAeOAKIAPgBOAb4EB5GgAUwBlAHIAdgBpAOcAbwBz1AAOAJ0ArQCuAK8IVAheCF+A -O4EB44EB54EB5tIADgBFAE0IYoA6oF8QD19OU1NlcnZpY2VzTWVuddoADgCdAJ4BPgCfAT8AoAChAKIA -owCkAPoBQgDhAPoA4QCoAKkAqgJcgBWAKAmAKAmAD4ATgG/aAA4AnQCeAT4AnwE/AKAAoQCiAKMApAD6 -AUIA4QD6AOEAqACpAKoCXIAVgCgJgCgJgA+AE4Bv2gAOAJ0AngE+AJ8BPwCgAKEAogCjAKQA+gFCAOEA -+gDhAKgAqQCqAlyAFYAoCYAoCYAPgBOAb1xfTlNBcHBsZU1lbnXaAA4BSgCdAJ4AnwCgAKEAogCjAUsA -pALSAU4BQgD6AKgAqQCqCB4IiIAVgI2AM4AogA+AE4EB2oEB7dIADgBFAE0Ii4A6ogLHA2uAjIC12gAO -AUoAnQCeAJ8AoAChAKIAowFLAKQEYwRmAUIA+gCoAKkAqggeCJaAFYD2gQHwgCiAD4ATgQHagQHxZgBF -AGQAaQDnAOMAb9IADgBFAE0ImoA6oQRbgPXaAA4BSgCdAJ4AnwCgAKEAogCjAUsApACrALABQgD6AKgA -qQCqCB4IpIAVgAyBAfSAKIAPgBOBAdqBAfVWSmFuZWxh0gAOAEUATQiogDqpCBAC2wQtCKwIrQCaCK8B -ugM4gQHVgJCA6IEB94EB+IALgQH7gE2AqdoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoBQgDhAPoA4QCo -AKkAqgCrgBWAKAmAKAmAD4ATgAzYAA4AnQCeAJ8AoAChAKIAowCkCL0Ivgi/AKgAqQCqAKuAFYEB+RIA -EAEIgQH6gA+AE4AMXxARUGVyY29ycmVyIGphbmVsYXNRYNoADgCdAJ4BPgCfAT8AoAChAKIAowCkAPoB -QgDhAPoA4QCoAKkAqgCrgBWAKAmAKAmAD4ATgAxeX05TV2luZG93c01lbnXaAA4BSgCdAJ4AnwCgAKEA -ogCjAUsApAPKA80BQgD6AKgAqQCqCB4I14AVgMyBAf6AKIAPgBOBAdqBAf9VQWp1ZGHSAA4ARQBNCNuA -OqEDwoDLW19OU01haW5NZW51VG1lbnXUAA4AlQCWAJcA0QRbAJkI44AsgPWAFoECBF5jb3B5X21lbnVf -aXRlbdQADgCVAJYAlwCYAJkIrQjpgBmAFoEB+IECBlxuZXh0X3dpbmRvdzrSAA4ARQjsCO2BAiKvEJQH -3wIDCEYHJAKSA3gIrAcKAV4GZQVcAq8EzwY7A34EYwivAscGqQT0BD8GAQdGBR8C7QF9A6MCfAInBw4I -KgdsBqYFMAitAJoBlwbpBLIGrwLwBwgG5wFdB68DVAhCAxQIEAEvCD4GBwPTA1oILATIB4YHiAefA8IB -5QGaAU0B/AkuAboEEwcTBnUDjwE7AmgFcQS4B8cCmQfJBYAIHgCZAzgC0gCrA2sCgghTCC0E+wbmAw4G -6AVmAlMHCwdhBXIBegQtA6oCJQGAAyoFDAVwAiYDEQbRBBkGwAK2B/AEWwg/AlwEhwY1CCsJYwadA9oI -LgWvB8gC2whAAcgERgGdBHgB4gSbB48C9ASVB84HigHOBccHNQLpA8oB3wDcANIGpwDfATwE4YEBxIBd -gQHqgQGWgH+AuIEB94EBlIA4gQFugQIIgIaBARSBAWGAuoD2gQH7gIyBAYGBAR6A7YEBUIEBnoEBJ4CW -gD+Aw4B6gGiBAZyBAd2BAaeBAXmBASyBAfiAC4BFgQG8gQENgQF7gJiBAZCBAaKAN4EBuICwgQHpgKGB -AdWALoEB4YEBUoDQgLKBAe+BARKBAa6BAbKBAbSAy4BZgEaANYBcgQIYgE2A4YEBkoEBdIC9gDGAdIEB -O4EBD4EBvoCBgQHGgQE3gQHagBaAqYCNgAyAtYB8gQHlgQHzgQEggQGNgJ6BAauBAhCAboEBmIEBpYEB -P4A+gOiAxYBigEGApIEBJIEBMIBlgJ+BAYOA44EBf4CIgQHIgPWBAeKAb4EBAoEBX4EB7IECIIEBiYDS -gQH9gQE+gQHCgJCBAeiAUYDvgEiA/YBXgQEIgQGwgQF2gQEGgQHAgQG2gFOBAUSBAZqAlYDMgFaAHIAb -gQF9gB6AMoEBGNkA1gIMAA4A1wVWANkBSwDbCYMFMAUwCYYJhwGrAOAJiAUwCYpZTlNQZXJjZW50gQEs -gQEsgQILgQIJgQIKgQEsIz/mCGTAAAAAXxAVe3sxLCAyMTV9LCB7MzAxLCAxNX19XF9kb1Njcm9sbGVy -OtIAOgA7CY4Jj6UJjwEmAScBKAA/Wk5TU2Nyb2xsZXLSAA4ARQBNCZKAOqUFHAVmBVwFPQUigQElgQIQ -gQIIgQEogQEr0gAOAEUATQmagDqhBQyBASRfEBV7ezEsIDE3fSwgezMwMSwgMTk4fX3SADoAOwmeCZ+k -CZ8BJwEoAD9aTlNDbGlwVmlld9gA1gIMAA4A1wDZAUsA2wmDBTAFMAmGCaQA4AmIBTAJp4EBLIEBLIEC -C4ECEYECCoEBLCM/79ZqYAAAAF8QFnt7MzAyLCAxN30sIHsxNSwgMTk4fX3SAA4ARQBNCauAOqEFH4EB -J18QE3t7MSwgMH0sIHszMDEsIDE3fX1fEBZ7ezIwLCAyMH0sIHszMTgsIDIzMX190gA6ADsJsAmxpAmx -AScBKAA/XE5TU2Nyb2xsVmlld9IADgBFAE0JtIA6pAY1AZcFMAQTgQFfgEWBASyA4Vp7NDc3LCAyNzF9 -3QZpAA4GagZrBmwGbQZuBm8GcAZxBnIGcwZ0AZoGdgm9Cb4JvwZ6BnsJwQnCAP0JwwnECcWARoEB0YEC -HYECH4ECGoEBcYECHIECGRALgQIegQIbXxAYe3szNjAsIDQwMH0sIHs0NzcsIDI3MX19bxAVAE0AZQBu -AHUAIABBAHAAbABpAGMAYQDnAOMAbwAgAGQAbwAgAFgAMQAx0gAOADYANwaFgARYeDExX2FwcHPSAA4A -MgAzCc2ABYECIdIAOgA7Cc8Bc6IBcwA/0gAOAEUI7AnSgQIirxCUB8gB5QJcBwoBfQHiAKsB4gFNAB8F -MAHiBMgGNQN4CCwAqwLSAu0C7QDcAu0HDgUwBp0G6AF9ANwCAwHiCB4HYQLtAZoAqwCrAZoC9AHiBqYC -6QHiAvQBTQeKANwCXAMOAKsAHwJcBgEA3ANUCB4DEQF9AX0HiAPKAd8JLgE8AgMAHwCrAZoHCAZlAlwB -LwJcBQwEsgMRApIDEQVwAB8AHwCrCCsILQLSAnwIPwgeBPQC9AMRAvQFMAJcAeIA3AUMAX0AqwOjAgMB -egJcBTAFDAIDBukGqQQTBqcCrwfJBGMCXAgqAlwBmggeAB8C9APTCB4FcQMRAKsCXADcBD8BlwJcBuYE -lQeGBnUA3AfHAX0ByAVyBwsC7QguAeIG5wDcAu0A0gEvAlyBAcKAWYBvgQGUgD+AV4AMgFeANYACgQEs -gFeBARKBAV+AuIEB74AMgI2AloCWgByAloEBnIEBLIEBiYEBq4A/gByAXYBXgQHagQGlgJaARoAMgAyA -RoEBdoBXgQF5gJWAV4EBdoA1gQG2gByAb4CegAyAAoBvgQFQgByAsIEB2oCfgD+AP4EBsoDMgFaBAhiA -MoBdgAKADIBGgQGQgQFugG+ALoBvgQEkgQENgJ+Af4CfgQEwgAKAAoAMgQHsgQHzgI2AeoEB4oEB2oEB -HoEBdoCfgQF2gQEsgG+AV4AcgQEkgD+ADIDDgF2APoBvgQEsgQEkgF2BAbyBAYGA4YEBfYCGgQHGgPaA -b4EB3YBvgEaBAdqAAoEBdoDQgQHagQE7gJ+ADIBvgByA7YBFgG+BAY2BAQaBAa6BAXSAHIEBvoA/gFGB -AT+BAZiAloEB/YBXgQGigByAloAbgC6Ab9IADgBFCOwKaYECIq8QlQffAgMIRgckApIBXgisA3gHCgZl -BVwCrwTPBjsDfgRjCK8CxwQ/BqkE9AUfBgEHRgLtAX0DowJ8Bw4CJwgqAZcFMAamCK0AmgdsBukEsgav -AvAHCAbnAV0DVAevCEIBLwgQAxQIPgYHA9MDWggsBMgHhgeIB58DwgHlAZoBTQH8CS4BugQTBxMGdQOP -ATsCaAVxBLgHxwKZB8kFgAgeAJkDOALSAKsDawKCCFMILQT7BuYG6AMOAB8CUwVmBXIHYQcLBC0BegOq -AiUBgAMqBQwFcAMRAiYG0QQZArYGwAfwBFsGNQJcCD8EhwgrCWMGnQPaCC4FrwfIAtsIQAGdAcgERgR4 -AeIFxwSVAvQEmweKB84BzgePANIBPAPKANwB3wLpBqcA3wc1BOGBAcSAXYEB6oEBloB/gDiBAfeAuIEB -lIEBboECCICGgQEUgQFhgLqA9oEB+4CMgO2BAYGBAR6BASeBAVCBAZ6AloA/gMOAeoEBnIBogQHdgEWB -ASyBAXmBAfiAC4EBp4EBvIEBDYEBe4CYgQGQgQGigDeAsIEBuIEB6YAugQHVgKGBAeGBAVKA0ICygQHv -gQESgQGugQGygQG0gMuAWYBGgDWAXIECGIBNgOGBAZKBAXSAvYAxgHSBATuBAQ+BAb6AgYEBxoEBN4EB -2oAWgKmAjYAMgLWAfIEB5YEB84EBIIEBjYEBq4CegAKAboECEIEBP4EBpYEBmIDogD6AxYBigEGApIEB -JIEBMICfgGWBAYOA44CIgQF/gQHIgPWBAV+Ab4EB4oEBAoEB7IECIIEBiYDSgQH9gQE+gQHCgJCBAeiA -SIBRgO+A/YBXgQFEgQEGgQF2gQEIgQG2gQHAgFOBAbCAG4AygMyAHIBWgJWBAX2AHoEBmoEBGNIADgBF -COwLAYECIq8QlQsCCwMLBAsFCwYLBwsICwkLCgsLCwwLDQsOCw8LEAsRCxILEwsUCxULFgsXCxgLGQsa -CxsLHAsdCx4LHwsgCyELIgsjCyQLJQsmCycLKAspCyoLKwssCy0LLgsvCzALMQsyCzMLNAs1CzYLNws4 -CzkLOgs7CzwLPQs+Cz8LQAtBC0ILQwtEC0ULRgtHC0gLSQtKC0sLTAtNC04LTwgjAMkLUgtTC1QLVQtW -C1cLWAtZC1oLWwtcC10LXgtfC2ALYQtiC2MLZAtlC2YLZwtoC2kLagtrC2wLbQtuC28LcAtxC3ILcwt0 -C3ULdgt3C3gLeQt6C3sLfAt9C34LfwuAC4ELgguDC4QLhQuGC4cLiAuJC4oLiwuMC40LjguPC5ALkQuS -C5MLlAuVC5aBAiaBAieBAiiBAimBAiqBAiuBAiyBAi2BAi6BAi+BAjCBAjGBAjKBAjOBAjSBAjWBAjaB -AjeBAjiBAjmBAjqBAjuBAjyBAj2BAj6BAj+BAkCBAkGBAkKBAkOBAkSBAkWBAkaBAkeBAkiBAkmBAkqB -AkuBAkyBAk2BAk6BAk+BAlCBAlGBAlKBAlOBAlSBAlWBAlaBAleBAliBAlmBAlqBAluBAlyBAl2BAl6B -Al+BAmCBAmGBAmKBAmOBAmSBAmWBAmaBAmeBAmiBAmmBAmqBAmuBAmyBAm2BAm6BAm+BAnCBAnGBAnKB -AnOBAduAF4ECdIECdYECdoECd4ECeIECeYECeoECe4ECfIECfYECfoECf4ECgIECgYECgoECg4EChIEC -hYEChoECh4ECiIECiYECioECi4ECjIECjYECjoECj4ECkIECkYECkoECk4EClIEClYECloECl4ECmIEC -mYECmoECm4ECnIECnYECnoECn4ECoIECoYECooECo4ECpIECpYECpoECp4ECqIECqYECqoECq4ECrIEC -rYECroECr4ECsIECsYECsoECs4ECtIECtYECtoECt4ECuG8Q4QBUAGUAeAB0ACAARgBpAGUAbABkACAA -QwBlAGwAbAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUAcwB0AGEAIABvAHAA5wDjAG8ALAAgAHAA -cgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAAZABlACAAYQBjAHQAaQB2AGEAcgAgAGEA -IABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMgHQAgAHAA -YQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcAdQByAGEAbgDnAGEAIABkAG8AIABzAGkA -cwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkAdgBhAHIAIABlAHMAdABhACAAbwBwAOcA -4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQAaQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUA -cwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkAYwBhAOcA9QBlAHMAIAByAGUAbQBvAHQA -YQBzAC4AKV8QEU1lbnUgKE90aGVyVmlld3MpW1NlcGFyYXRvci0xXxAZVGV4dCBGaWVsZCBDZWxsIChD -b3JlczoKKV8QIUNoZWNrIEJveCAoRm9jbyBlbSBqYW5lbGFzIG5vdmFzKW8QGQBNAGUAbgB1ACAASQB0 -AGUAbQAgACgAUABlAHIAcwBvAG4AYQBsAGkAegBhAHIgJgApW1NlcGFyYXRvci01XxAyQ2hlY2sgQm94 -IChVdGlsaXphciBvIGVmZWl0byBkZSBhbGVydGEgZG8gc2lzdGVtYSlfEBVTdGF0aWMgVGV4dCAoQ29y -ZXM6CilaUHJlZnNQYW5lbF8QE0hvcml6b250YWwgU2Nyb2xsZXJvEB4AQwBoAGUAYwBrACAAQgBvAHgA -IAAoAE0AbwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEDMAQgB1AHQAdABvAG4AIABD -AGUAbABsACAAKABQAGUAcgBtAGkAdABpAHIAIABsAGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBl -AG4AdABlAHMAIABkAGEAIAByAGUAZABlAClfEBZCdXR0b24gQ2VsbCAoRHVwbGljYXIpXxA0QnV0dG9u -IENlbGwgKFV0aWxpemFyIG8gZWZlaXRvIGRlIGFsZXJ0YSBkbyBzaXN0ZW1hKW0ATQBlAG4AdQAgACgA -RQBkAGkA5wDjAG8AKVtTZXBhcmF0b3ItNltTZXBhcmF0b3ItOG8QawBTAHQAYQB0AGkAYwAgAFQAZQB4 -AHQAIAAoAEQAZQB2AGkAZABvACAAYQAgAGwAaQBtAGkAdABhAOcA9QBlAHMAIABkAG8AIABwAHIAbwB0 -AG8AYwBvAGwAbwAgAFgAMQAxACwAIABlAHMAdABhACAAbwBwAOcA4wBvACAAbgBlAG0AIABzAGUAbQBw -AHIAZQAgAGYAdQBuAGMAaQBvAG4AYQByAOEAIABlAG0AIABhAGwAZwB1AG0AYQBzACAAYQBwAGwAaQBj -AGEA5wD1AGUAcwAuAClvEGcAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABQAGUAcgBtAGkAdABlACAA -cQB1AGUAIABhAGwAdABlAHIAYQDnAPUAZQBzACAAZABvACAAbQBlAG4AdQAgAGQAZQAgAGUAbgB0AHIA -YQBkAGEAIABzAGUAIABzAG8AYgByAGUAcABvAG4AaABhAG0AIABhAG8AIABhAGMAdAB1AGEAbAAgAG0A -YQBwAGEAIABkAGUAIAB0AGUAYwBsAGEAcwAgAGQAbwAgAFgAMQAxAC4AKW8QNQBDAGgAZQBjAGsAIABC -AG8AeAAgACgAUwBlAGcAdQBpAHIAIABhACAAZABpAHMAcABvAHMAaQDnAOMAbwAgAGQAbwAgAHQAZQBj -AGwAYQBkAG8AIABkAG8AIABzAGkAcwB0AGUAbQBhAClfEBFUYWJsZSBIZWFkZXIgVmlld28QJwBDAGgA -ZQBjAGsAIABCAG8AeAAgACgAUwBpAG0AdQBsAGEAcgAgAHIAYQB0AG8AIABkAGUAIAB0AHIA6gBzACAA -YgBvAHQA9QBlAHMAKW8QigBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAQQBjAHQAaQB2 -AGEAIABhACAAagBhAG4AZQBsAGEAIAByAGEAaQB6ACAAZABvACAAWAAxADEALgAgAFUAdABpAGwAaQB6 -AGUAIABhACAAYwBvAG0AYgBpAG4AYQDnAOMAbwAgAGQAZQAgAHQAZQBjAGwAYQBzACAAQwBvAG0AYQBu -AGQAbwAtAE8AcADnAOMAbwAtAEEAIABwAGEAcgBhACAAZQBuAHQAcgBhAHIAIABlACAAcwBhAGkAcgAg -AGQAbwAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAC4AKVZWaWV3LTRW -Vmlldy0zXxAdQ2hlY2sgQm94IChGb2NvIHNlZ3VlIG8gcmF0bylvEEIAQwBoAGUAYwBrACAAQgBvAHgA -IAAoAEEAYwB0AHUAYQBsAGkAegBhAHIAIABhACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0A -IABxAHUAYQBuAGQAbwAgAG8AIABDAEwASQBQAEIATwBBAFIARAAgAG0AdQBkAGEAcgAuAClvEIYAUwB0 -AGEAdABpAGMAIABUAGUAeAB0ACAAKABBAGMAdABpAHYAYQAgAGEAIABqAGEAbgBlAGwAYQAgAHIAYQBp -AHoAIABkAG8AIABYADEAMQAuACAAVQB0AGkAbABpAHoAZQAgAGEAIABjAG8AbQBiAGkAbgBhAOcA4wBv -ACAAZABlACAAdABlAGMAbABhAHMAIABDAG8AbQBhAG4AZABvAC0ATwBwAOcA4wBvAC0AQQAgAHAAYQBy -AGEAIABlAG4AdAByAGEAcgAgAGUAIABzAGEAaQByACAAZABvACAAbQBvAGQAbwAgAGQAZQAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8ALgApbxATAE0AZQBuAHUAIABJAHQAZQBtACAAKABNAGkAbABoAPUA -ZQBzAClfEA9NZW51IEl0ZW0gKFgxMSlfEBVQdXNoIEJ1dHRvbiAoUmVtb3ZlcilbU2Nyb2xsIFZpZXdv -EJEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0 -AGkAdgBhAHMALAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABk -AGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBl -AHIAaQByACAAbgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABp -AGwAaQB6AGEAbQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKV8QHU1lbnUg -SXRlbSAoUGVyY29ycmVyIGphbmVsYXMpXxAwTWVudSBJdGVtIChQZXJjb3JyZXIgamFuZWxhcyBubyBz -ZW50aWRvIGludmVyc28pbxCTAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBAGMAdABp -AHYAYQAgAG8AIABpAHQAZQBtACAAZABlACAAbQBlAG4AdQAgACIAYwBvAHAAaQBhAHIAIgAgAGUAIABw -AGUAcgBtAGkAdABlACAAYQAgAHMAaQBuAGMAcgBvAG4AaQB6AGEA5wDjAG8AIABlAG4AdAByAGUAIABh -ACAA4QByAGUAYQAgAGQAZQAgAGMAbwBsAGEAZwBlAG0AIABkAG8AIABPAFMAIABYACAAZQAgAG8AcwAg -AGIAdQBmAGYAZQByAHMAIABDAEwASQBQAEIATwBBAFIARAAgAGUAIABQAFIASQBNAEEAUgBZACAAZABv -ACAAWAAxADEALgApbxAZAFQAYQBiACAAVgBpAGUAdwAgAEkAdABlAG0AIAAoAFMAZQBnAHUAcgBhAG4A -5wBhAClvEE0AQwBoAGUAYwBrACAAQgBvAHgAIAAoAE0AbwBzAHQAcgBhAHIAIABhAHUAdABvAG0AYQB0 -AGkAYwBhAG0AZQBuAHQAZQAgAGEAIABiAGEAcgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABlAG0AIABt -AG8AZABvACAAZABlACAAZQBjAHIA4wAgAGMAbwBtAHAAbABlAHQAbwApbxCVAFQAZQB4AHQAIABGAGkA -ZQBsAGQAIABDAGUAbABsACAAKABTAGUAIABlAHMAdABpAHYAZQByAGUAbQAgAGEAYwB0AGkAdgBhAHMA -LAAgAGEAcwAgAHQAZQBjAGwAYQBzACAAZQBxAHUAaQB2AGEAbABlAG4AdABlAHMAIABkAGEAIABiAGEA -cgByAGEAIABkAGUAIABtAGUAbgB1AHMAIABwAG8AZABlAG0AIABpAG4AdABlAHIAZgBlAHIAaQByACAA -bgBhAHMAIABhAHAAbABpAGMAYQDnAPUAZQBzACAAWAAxADEAIABxAHUAZQAgAHUAdABpAGwAaQB6AGEA -bQAgAG8AIABtAG8AZABpAGYAaQBjAGEAZABvAHIAIABNAGUAdABhAC4AKW8QOgBCAHUAdAB0AG8AbgAg -AEMAZQBsAGwAIAAoAEEAYwB0AGkAdgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBz -ACAAZABlACAAdABlAGMAbABhAGQAbwAgAHAAYQByAGEAIABYADEAMQApbxCYAFMAdABhAHQAaQBjACAA -VABlAHgAdAAgACgATwBzACAAcwBpAG4AYQBpAHMAIABzAG8AbgBvAHIAbwBzACAAZABvACAAWAAxADEA -IAB1AHQAaQBsAGkAegBhAHIA4wBvACAAbwAgAGEAbABlAHIAdABhACAAcABhAGQAcgDjAG8AIABkAG8A -IABzAGkAcwB0AGUAbQBhACwAIAB0AGEAbAAgAGMAbwBtAG8AIABlAHMAdABpAHYAZQByACAAZABlAGYA -aQBuAGkAZABvACAAZQBtACAARQBmAGUAaQB0AG8AcwAgAHMAbwBuAG8AcgBvAHMALAAgAG4AYQBzACAA -cAByAGUAZgBlAHIA6gBuAGMAaQBhAHMAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AKW8QHwBUAGEAYgAg -AFYAaQBlAHcAIABJAHQAZQBtACAAKADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQApW1NlcGFy -YXRvci05bxBaAEMAaABlAGMAawAgAEIAbwB4ACAAKABBAGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEA -cgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBtAGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEA -dQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBpAG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4A -bwB2AG8ALgApbxCMAFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABBACAAYwByAGkAYQDn -AOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoAYQBuAGUAbABhACAAWAAxADEAIABmAGEAegAg -AGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAAdgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBp -AG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAAdgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAu -AGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAAcAAsACAAZQB0AGMALgApAC4AKVtTZXBhcmF0 -b3ItMlhEb2NrTWVudV8QEk1lbnUgSXRlbSAoRmVjaGFyKW8QIQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwA -IAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVtTZXBhcmF0b3ItM28QKQBC -AHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAFMAaQBtAHUAbABhAHIAIAByAGEAdABvACAAZABlACAAdABy -AOoAcwAgAGIAbwB0APUAZQBzAClvEHsAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABEAGUAcwBhAGMA -dABpAHYAZQAgAGUAcwB0AGEAIABvAHAA5wDjAG8AIABzAGUAIABwAHIAZQB0AGUAbgBkAGUAcgAgAHUA -dABpAGwAaQB6AGEAcgAgAG8AIAB4AGMAbABpAHAAYgBvAGEAcgBkACwAIABvACAAawBsAGkAcABwAGUA -cgAgAG8AdQAgAHEAdQBhAGwAcQB1AGUAcgAgAG8AdQB0AHIAbwAgAGcAZQBzAHQAbwByACAAZABlACAA -YwBsAGkAcABiAG8AYQByAGQAIABYADEAMQAuAClvEFwAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABB -AGMAdAB1AGEAbABpAHoAYQByACAAYQAgAOEAcgBlAGEAIABkAGUAIABjAG8AbABhAGcAZQBtACAAaQBt -AGUAZABpAGEAdABhAG0AZQBuAHQAZQAgAHEAdQBhAG4AZABvACAAZgBvAHIAIABzAGUAbABlAGMAYwBp -AG8AbgBhAGQAbwAgAHQAZQB4AHQAbwAgAG4AbwB2AG8ALgApbxASAE0AZQBuAHUAIABJAHQAZQBtACAA -KABFAGQAaQDnAOMAbwApbxAxAEMAaABlAGMAawAgAEIAbwB4ACAAKABQAGUAcgBtAGkAdABpAHIAIABs -AGkAZwBhAOcA9QBlAHMAIABkAGUAIABjAGwAaQBlAG4AdABlAHMAIABkAGEAIAByAGUAZABlAClvEJAA -UwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABTAGUAIABhAHMAcwBpAG4AYQBsAGEAcgAgAGUAcwB0AGEA -IABvAHAA5wDjAG8ALAAgAGEAbwAgAGMAbABpAGMAYQByACAAbgB1AG0AYQAgAGoAYQBuAGUAbABhACAA -aQBuAGEAYwB0AGkAdgBhACwAIABvACAAYwBsAGkAcQB1AGUAIABuAOMAbwAgAHMA8wAgAGEAIAB0AHIA -YQB6ACAAcABhAHIAYQAgAGEAIABmAHIAZQBuAHQAZQAgAGMAbwBtAG8AIABhAGMAdABpAHYAYQAgAGEA -IABqAGEAbgBlAGwAYQAgAGMAbwBtAHAAbABlAHQAYQBtAGUAbgB0AGUALgAgAClfEFdTdGF0aWMgVGV4 -dCAoTyBmb2NvIGRhIGphbmVsYSBkbyBYMTEgc2VndWUgbyBjdXJzb3IuIElzdG8gdGVtIGFsZ3VucyBl -ZmVpdG9zIGFkdmVyc29zLilfEFtUZXh0IEZpZWxkIENlbGwgKE8gZm9jbyBkYSBqYW5lbGEgZG8gWDEx -IHNlZ3VlIG8gY3Vyc29yLiBJc3RvIHRlbSBhbGd1bnMgZWZlaXRvcyBhZHZlcnNvcy4pXxAYTWVudSBJ -dGVtIChBanVkYSBkbyBYMTEpXxAfUG9wIFVwIEJ1dHRvbiBDZWxsIChEbyBtb25pdG9yKV5Db250ZW50 -IFZpZXctMW8QEwBNAGUAbgB1ACAAKABBAHAAbABpAGMAYQDnAPUAZQBzACkALQAxXxAWTWVudSBJdGVt -IChEbyBtb25pdG9yKVxFZGl0UHJvZ3JhbXNfECVNZW51IEl0ZW0gKFBhc3NhciB0dWRvIHBhcmEgYSBm -cmVudGUpXxAgUHVzaCBCdXR0b24gKEFkaWNpb25hciBlbGVtZW50bylvEJwAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAE8AcwAgAHMAaQBuAGEAaQBzACAAcwBvAG4AbwByAG8AcwAgAGQAbwAg -AFgAMQAxACAAdQB0AGkAbABpAHoAYQByAOMAbwAgAG8AIABhAGwAZQByAHQAYQAgAHAAYQBkAHIA4wBv -ACAAZABvACAAcwBpAHMAdABlAG0AYQAsACAAdABhAGwAIABjAG8AbQBvACAAZQBzAHQAaQB2AGUAcgAg -AGQAZQBmAGkAbgBpAGQAbwAgAGUAbQAgAEUAZgBlAGkAdABvAHMAIABzAG8AbgBvAHIAbwBzACwAIABu -AGEAcwAgAHAAcgBlAGYAZQByAOoAbgBjAGkAYQBzACAAZABvACAAcwBpAHMAdABlAG0AYQAuAClcQ29u -dGVudCBWaWV3XxAYTWVudSBJdGVtIChNb3N0cmFyIHR1ZG8pWVNlcGFyYXRvcl8QGU1lbnUgSXRlbSAo -QWNlcmNhIGRvIFgxMSlfEBZUYWJsZSBDb2x1bW4gKENvbWFuZG8pbxBPAEIAdQB0AHQAbwBuACAAQwBl -AGwAbAAgACgATQBvAHMAdAByAGEAcgAgAGEAdQB0AG8AbQBhAHQAaQBjAGEAbQBlAG4AdABlACAAYQAg -AGIAYQByAHIAYQAgAGQAZQAgAG0AZQBuAHUAcwAgAGUAbQAgAG0AbwBkAG8AIABkAGUAIABlAGMAcgDj -ACAAYwBvAG0AcABsAGUAdABvAClvENEAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABMAGEAbgDnAGEA -cgAgAG8AIABYADEAMQAgAGMAcgBpAGEAIABjAGgAYQB2AGUAcwAgAFgAYQB1AHQAaABvAHIAaQB0AHkA -IABkAGUAIABjAG8AbgB0AHIAbwBsAG8AIABkAGUAIABhAGMAZQBzAHMAbwAuACAAUwBlACAAbwAgAGUA -bgBkAGUAcgBlAOcAbwAgAEkAUAAgAGQAbwAgAHMAaQBzAHQAZQBtAGEAIABmAG8AcgAgAGEAbAB0AGUA -cgBhAGQAbwAsACAAZQBzAHQAYQBzACAAYwBoAGEAdgBlAHMAIABwAGUAcgBkAGUAbQAgAGEAIAB2AGEA -bABpAGQAYQBkAGUALAAgAHAAbwBkAGUAbgBkAG8ALAAgAGEAcwBzAGkAbQAsACAAIABpAG0AcABvAHMA -cwBpAGIAaQBsAGkAdABhAHIAIABhACAAZQB4AGUAYwB1AOcA4wBvACAAZABhAHMAIABhAHAAbABpAGMA -YQDnAPUAZQBzACAAWAAxADEALgApXxAjQnV0dG9uIENlbGwgKEZvY28gZW0gamFuZWxhcyBub3Zhcylv -EFQAUwB0AGEAdABpAGMAIABUAGUAeAB0ACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0 -AHIAYQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAg -AHEAdQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClvECMAVABlAHgA -dAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEMA6QBsAHUAbABhACAAZABlACAAdABlAHgAdABvACkA -LQAyW1NlcGFyYXRvci03bxARAE0AZQBuAHUAIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKV1NZW51IChK -YW5lbGEpXxAbTWVudSBJdGVtIChQZXJzb25hbGl6YXIuLi4pbxBEAEIAdQB0AHQAbwBuACAAQwBlAGwA -bAAgACgAQQBjAHQAdQBhAGwAaQB6AGEAcgAgAGEAIADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUA -bQAgAHEAdQBhAG4AZABvACAAbwAgAEMATABJAFAAQgBPAEEAUgBEACAAbQB1AGQAYQByAC4AKW8QDwBN -AGUAbgB1ACAAKABTAGUAcgB2AGkA5wBvAHMAKV8QEk1lbnUgSXRlbSAoSmFuZWxhKW8QNwBCAHUAdAB0 -AG8AbgAgAEMAZQBsAGwAIAAoAFMAZQBnAHUAaQByACAAYQAgAGQAaQBzAHAAbwBzAGkA5wDjAG8AIABk -AG8AIAB0AGUAYwBsAGEAZABvACAAZABvACAAcwBpAHMAdABlAG0AYQApbxAVAFQAYQBiACAAVgBpAGUA -dwAgAEkAdABlAG0AIAAoAFMAYQDtAGQAYQApXxAXVGFiIFZpZXcgSXRlbSAoSmFuZWxhcylvEB8AQwBo -AGUAYwBrACAAQgBvAHgAIAAoAEEAdQB0AGUAbgB0AGkAYwBhAHIAIABsAGkAZwBhAOcA9QBlAHMAKVxG -aWxlJ3MgT3duZXJvECIATQBlAG4AdQAgAEkAdABlAG0AIAAoAEEAbAB0AGUAcgBuAGEAcgAgAGUAYwBy -AOMAIABjAG8AbQBwAGwAZQB0AG8AKV8QEVZlcnRpY2FsIFNjcm9sbGVyXxAVVGFibGUgQ29sdW1uIChB -dGFsaG8pbxCPAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBjAHQAaQB2AGEAIABvACAAaQB0AGUA -bQAgAGQAZQAgAG0AZQBuAHUAIAAiAGMAbwBwAGkAYQByACIAIABlACAAcABlAHIAbQBpAHQAZQAgAGEA -IABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvACAAZQBuAHQAcgBlACAAYQAgAOEAcgBlAGEAIABkAGUA -IABjAG8AbABhAGcAZQBtACAAZABvACAATwBTACAAWAAgAGUAIABvAHMAIABiAHUAZgBmAGUAcgBzACAA -QwBMAEkAUABCAE8AQQBSAEQAIABlACAAUABSAEkATQBBAFIAWQAgAGQAbwAgAFgAMQAxAC4AKW8QUQBT -AHQAYQB0AGkAYwAgAFQAZQB4AHQAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDh -ACAAZQBtACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABv -ACAAWAAxADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKV8QEE1lbnUgSXRlbSAoWm9vbSlf -EC5DaGVjayBCb3ggKENsaXF1ZSBhdHJhdmVzc2EgamFuZWxhcyBpbmFjdGl2YXMpXxAfQnV0dG9uIENl -bGwgKEZvY28gc2VndWUgbyByYXRvKV8QFU1lbnUgSXRlbSAoMjU2IGNvcmVzKV8QMEJ1dHRvbiBDZWxs -IChDbGlxdWUgYXRyYXZlc3NhIGphbmVsYXMgaW5hY3RpdmFzKW8QJQBNAGUAbgB1ACAASQB0AGUAbQAg -ACgATwBjAHUAbAB0AGEAcgAgAG8AdQB0AHIAYQBzACAAYQBwAGwAaQBjAGEA5wD1AGUAcwApXxAiVGFi -bGUgVmlldyAoTm9tZSwgQ29tYW5kbywgQXRhbGhvKV8QE1RhYmxlIENvbHVtbiAoTm9tZSlfEBRNZW51 -IEl0ZW0gKE1pbGhhcmVzKW8QawBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgAUABlAHIA -bQBpAHQAZQAgAHEAdQBlACAAYQBsAHQAZQByAGEA5wD1AGUAcwAgAGQAbwAgAG0AZQBuAHUAIABkAGUA -IABlAG4AdAByAGEAZABhACAAcwBlACAAcwBvAGIAcgBlAHAAbwBuAGgAYQBtACAAYQBvACAAYQBjAHQA -dQBhAGwAIABtAGEAcABhACAAZABlACAAdABlAGMAbABhAHMAIABkAG8AIABYADEAMQAuAClfECBCdXR0 -b24gQ2VsbCAoQWRpY2lvbmFyIGVsZW1lbnRvKW8QIABCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAE0A -bwBkAG8AIABlAGMAcgDjACAAYwBvAG0AcABsAGUAdABvAClvEH0AVABlAHgAdAAgAEYAaQBlAGwAZAAg -AEMAZQBsAGwAIAAoAEEAbwAgAGMAbABpAGMAYQByACwAIABtAGEAbgB0AGUAbgBoAGEAIABwAHIAZQBt -AGkAZABhAHMAIABhAHMAIAB0AGUAYwBsAGEAcwAgAE8AcADnAOMAbwAgAG8AdQAgAEMAbwBtAGEAbgBk -AG8AIABwAGEAcgBhACAAYQBjAHQAaQB2AGEAcgAgAG8AcwAgAGIAbwB0APUAZQBzACAAYwBlAG4AdABy -AGEAbAAgAG8AdQAgAGQAaQByAGUAaQB0AG8AIABkAG8AIAByAGEAdABvAC4ACgApbxBYAFQAZQB4AHQA -IABGAGkAZQBsAGQAIABDAGUAbABsACAAKABFAHMAdABhAHMAIABvAHAA5wD1AGUAcwAgAGUAbgB0AHIA -YQByAOMAbwAgAGUAbQAgAHYAaQBnAG8AcgAgAGQAYQAgAHAAcgDzAHgAaQBtAGEAIAB2AGUAegAgAHEA -dQBlACAAbwAgAFgAMQAxACAAZgBvAHIAIABlAHgAZQBjAHUAdABhAGQAbwAuAClfEBJNZW51IEl0ZW0g -KENvcGlhcilfEBZQdXNoIEJ1dHRvbiAoRHVwbGljYXIpWk1lbnUgKFgxMSlvEBQATQBlAG4AdQAgAEkA -dABlAG0AIAAoAFMAZQByAHYAaQDnAG8AcwApXxAZTWVudSBJdGVtIChPY3VsdGFyIG8gWDExKW8QFgBN -AGUAbgB1ACAASQB0AGUAbQAgACgAQQBwAGwAaQBjAGEA5wD1AGUAcwApW0FwcGxpY2F0aW9uXxAXVGFi -IFZpZXcgSXRlbSAoRW50cmFkYSlvEH8AVABlAHgAdAAgAEYAaQBlAGwAZAAgAEMAZQBsAGwAIAAoAEQA -ZQBzAGEAYwB0AGkAdgBlACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAHMAZQAgAHAAcgBlAHQAZQBuAGQA -ZQByACAAdQB0AGkAbABpAHoAYQByACAAbwAgAHgAYwBsAGkAcABiAG8AYQByAGQALAAgAG8AIABrAGwA -aQBwAHAAZQByACAAbwB1ACAAcQB1AGEAbABxAHUAZQByACAAbwB1AHQAcgBvACAAZwBlAHMAdABvAHIA -IABkAGUAIABjAGwAaQBwAGIAbwBhAHIAZAAgAFgAMQAxAC4AKV8QEU1lbnUgSXRlbSAoQWp1ZGEpbxAh -AFQAZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4 -AHQAbwApbxDdAFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAUwBlACAAYQBjAHQAaQB2AGEAcgAgAGUA -cwB0AGEAIABvAHAA5wDjAG8ALAAgAHAAcgBlAGMAaQBzAGEAIABpAGcAdQBhAGwAbQBlAG4AdABlACAA -ZABlACAAYQBjAHQAaQB2AGEAcgAgAGEAIABvAHAA5wDjAG8AICAcAEEAdQB0AGUAbgB0AGkAYwBhAHIA -IABsAGkAZwBhAOcA9QBlAHMgHQAgAHAAYQByAGEAIABnAGEAcgBhAG4AdABpAHIAIABhACAAcwBlAGcA -dQByAGEAbgDnAGEAIABkAG8AIABzAGkAcwB0AGUAbQBhAC4AIABTAGUAIABuAOMAbwAgAGEAYwB0AGkA -dgBhAHIAIABlAHMAdABhACAAbwBwAOcA4wBvACwAIABuAOMAbwAgAHMA4wBvACAAcABlAHIAbQBpAHQA -aQBkAGEAcwAgAGwAaQBnAGEA5wD1AGUAcwAgAGEAIABwAGEAcgB0AGkAcgAgAGQAZQAgAGEAcABsAGkA -YwBhAOcA9QBlAHMAIAByAGUAbQBvAHQAYQBzAC4AKV8QFU1lbnUgSXRlbSAoTWluaW1pemFyKVtTZXBh -cmF0b3ItNF8QFUJ1dHRvbiBDZWxsIChSZW1vdmVyKW8QWwBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBj -AHQAdQBhAGwAaQB6AGEAcgAgAFAAUgBJAE0AQQBSAFkAIAAoAGMAbABpAHEAdQBlACAAYwBvAG0AIABv -ACAAYgBvAHQA4wBvACAAYwBlAG4AdAByAGEAbAApACAAcQB1AGEAbgBkAG8AIABhACAA4QByAGUAYQAg -AGQAZQAgAGMAbwBsAGEAZwBlAG0AIABtAHUAZABhAHIALgApbxBvAFQAZQB4AHQAIABGAGkAZQBsAGQA -IABDAGUAbABsACAAKABEAGUAdgBpAGQAbwAgAGEAIABsAGkAbQBpAHQAYQDnAPUAZQBzACAAZABvACAA -cAByAG8AdABvAGMAbwBsAG8AIABYADEAMQAsACAAZQBzAHQAYQAgAG8AcADnAOMAbwAgAG4AZQBtACAA -cwBlAG0AcAByAGUAIABmAHUAbgBjAGkAbwBuAGEAcgDhACAAZQBtACAAYQBsAGcAdQBtAGEAcwAgAGEA -cABsAGkAYwBhAOcA9QBlAHMALgApXxAXTWVudSBJdGVtIChTYWlyIGRvIFgxMSlWVmlldy0ybxAjAFQA -ZQB4AHQAIABGAGkAZQBsAGQAIABDAGUAbABsACAAKABDAOkAbAB1AGwAYQAgAGQAZQAgAHQAZQB4AHQA -bwApAC0AMW8QIQBDAGgAZQBjAGsAIABCAG8AeAAgACgAQQBjAHQAaQB2AGEAcgAgAHMAaQBuAGMAcgBv -AG4AaQB6AGEA5wDjAG8AKW8QQgBUAG8AcAAgAFQAYQBiACAAVgBpAGUAdwAgACgARQBuAHQAcgBhAGQA -YQAsACAAUwBhAO0AZABhACwAIADBAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAsACAASgBhAG4A -ZQBsAGEAcwAsACAAUwBlAGcAdQByAGEAbgDnAGEAKW8QIwBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAo -AEEAYwB0AGkAdgBhAHIAIABzAGkAbgBjAHIAbwBuAGkAegBhAOcA4wBvAClvEIgAUwB0AGEAdABpAGMA -IABUAGUAeAB0ACAAKABBACAAYwByAGkAYQDnAOMAbwAgAGQAZQAgAHUAbQBhACAAbgBvAHYAYQAgAGoA -YQBuAGUAbABhACAAWAAxADEAIABmAGEAegAgAGMAbwBtACAAcQB1AGUAIABYADEAMQAuAGEAcABwACAA -dgBlAG4AaABhACAAcABhAHIAYQAgAHAAcgBpAG0AZQBpAHIAbwAgAHAAbABhAG4AbwAgACgAZQBtACAA -dgBlAHoAIABkAGUAIABGAGkAbgBkAGUAcgAuAGEAcABwACwAIABUAGUAcgBtAGkAbgBhAGwALgBhAHAA -cAAsACAAZQB0AGMALgApAC4AKW8Q1QBUAGUAeAB0ACAARgBpAGUAbABkACAAQwBlAGwAbAAgACgATABh -AG4A5wBhAHIAIABvACAAWAAxADEAIABjAHIAaQBhACAAYwBoAGEAdgBlAHMAIABYAGEAdQB0AGgAbwBy -AGkAdAB5ACAAZABlACAAYwBvAG4AdAByAG8AbABvACAAZABlACAAYQBjAGUAcwBzAG8ALgAgAFMAZQAg -AG8AIABlAG4AZABlAHIAZQDnAG8AIABJAFAAIABkAG8AIABzAGkAcwB0AGUAbQBhACAAZgBvAHIAIABh -AGwAdABlAHIAYQBkAG8ALAAgAGUAcwB0AGEAcwAgAGMAaABhAHYAZQBzACAAcABlAHIAZABlAG0AIABh -ACAAdgBhAGwAaQBkAGEAZABlACwAIABwAG8AZABlAG4AZABvACwAIABhAHMAcwBpAG0ALAAgACAAaQBt -AHAAbwBzAHMAaQBiAGkAbABpAHQAYQByACAAYQAgAGUAeABlAGMAdQDnAOMAbwAgAGQAYQBzACAAYQBw -AGwAaQBjAGEA5wD1AGUAcwAgAFgAMQAxAC4AKW8QXQBCAHUAdAB0AG8AbgAgAEMAZQBsAGwAIAAoAEEA -YwB0AHUAYQBsAGkAegBhAHIAIABQAFIASQBNAEEAUgBZACAAKABjAGwAaQBxAHUAZQAgAGMAbwBtACAA -bwAgAGIAbwB0AOMAbwAgAGMAZQBuAHQAcgBhAGwAKQAgAHEAdQBhAG4AZABvACAAYQAgAOEAcgBlAGEA -IABkAGUAIABjAG8AbABhAGcAZQBtACAAbQB1AGQAYQByAC4AKW8QlABUAGUAeAB0ACAARgBpAGUAbABk -ACAAQwBlAGwAbAAgACgAUwBlACAAYQBzAHMAaQBuAGEAbABhAHIAIABlAHMAdABhACAAbwBwAOcA4wBv -ACwAIABhAG8AIABjAGwAaQBjAGEAcgAgAG4AdQBtAGEAIABqAGEAbgBlAGwAYQAgAGkAbgBhAGMAdABp -AHYAYQAsACAAbwAgAGMAbABpAHEAdQBlACAAbgDjAG8AIABzAPMAIABhACAAdAByAGEAegAgAHAAYQBy -AGEAIABhACAAZgByAGUAbgB0AGUAIABjAG8AbQBvACAAYQBjAHQAaQB2AGEAIABhACAAagBhAG4AZQBs -AGEAIABjAG8AbQBwAGwAZQB0AGEAbQBlAG4AdABlAC4AIAApbxBAAEMAaABlAGMAawAgAEIAbwB4ACAA -KABBAGMAdAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEA -IADhAHIAZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEBgATQBlAG4AdQAg -AEkAdABlAG0AIAAoAEEAcABsAGkAYwBhAOcA9QBlAHMAKQAtADFcTWVudSAoQWp1ZGEpVlZpZXctMV8Q -GVBvcHVwIEJ1dHRvbiAoRG8gbW9uaXRvcilvEDgAQwBoAGUAYwBrACAAQgBvAHgAIAAoAEEAYwB0AGkA -dgBhAHIAIABhAHMAIABlAHEAdQBpAHYAYQBsAOoAbgBjAGkAYQBzACAAZABlACAAdABlAGMAbABhAGQA -bwAgAHAAYQByAGEAIABYADEAMQApbxB5AFMAdABhAHQAaQBjACAAVABlAHgAdAAgACgAQQBvACAAYwBs -AGkAYwBhAHIALAAgAG0AYQBuAHQAZQBuAGgAYQAgAHAAcgBlAG0AaQBkAGEAcwAgAGEAcwAgAHQAZQBj -AGwAYQBzACAATwBwAOcA4wBvACAAbwB1ACAAQwBvAG0AYQBuAGQAbwAgAHAAYQByAGEAIABhAGMAdABp -AHYAYQByACAAbwBzACAAYgBvAHQA9QBlAHMAIABjAGUAbgB0AHIAYQBsACAAbwB1ACAAZABpAHIAZQBp -AHQAbwAgAGQAbwAgAHIAYQB0AG8ALgAKAClvEEIAQgB1AHQAdABvAG4AIABDAGUAbABsACAAKABBAGMA -dAB1AGEAbABpAHoAYQByACAAQwBMAEkAUABCAE8AQQBSAEQAIABxAHUAYQBuAGQAbwAgAGEAIADhAHIA -ZQBhACAAZABlACAAYwBvAGwAYQBnAGUAbQAgAG0AdQBkAGEAcgAuAClvEFUAVABlAHgAdAAgAEYAaQBl -AGwAZAAgAEMAZQBsAGwAIAAoAEUAcwB0AGEAIABvAHAA5wDjAG8AIABlAG4AdAByAGEAcgDhACAAZQBt -ACAAdgBpAGcAbwByACAAZABhACAAcAByAPMAeABpAG0AYQAgAHYAZQB6ACAAcQB1AGUAIABvACAAWAAx -ADEAIABmAG8AcgAgAGUAeABlAGMAdQB0AGEAZABvAC4AKW8QGwBNAGUAbgB1ACAASQB0AGUAbQAgACgA -UAByAGUAZgBlAHIA6gBuAGMAaQBhAHMALgAuAC4AKdIADgBFCOwMK4ECIqDSAA4ARQjsDC6BAiKg0gAO -AEUI7AwxgQIirxDaAJAH3wIDCEYBXgcKAJEFXAKvBM8AUABVAscEPwT0AGcFHwLtA6MHDgBzB2wFMAGX -CK0AmgCOBukEsgavBwgAZQNUCEIBLwgQCD4GBwPTB4YEyAHlAGMJLgQTAH8HEwBSAI0DjwCKAIYFcQB0 -BLgHxwgeAJkAbwCLAoIILQBgBPsAcgJTB2EFcgCIA6oCJQGAAyoFDAbRAHgEGQBiAI8H8ASHAF4AewfI -AtsIQABsAcgAaACMBHgB4gXHBJUC9AfOAHAAeQLpA8oB3wDcAN8AaQBuByQCkgN4CKwAXABtBmUAYQCA -AGsGOwN+BGMIrwapAIQGAQdGAIIBfQJ8AicIKgamAHwC8AbnAV0AWwevAGQDFABRAHUAkwNaCCwHiACJ -B58DwgBPAZoBTQH8AboAfgZ1ATsCaAKZB8kAgQWAAIMAVAM4AtIAVgCrA2sIUwbmAw4G6AAfBWYHCwF6 -BC0AkgBaBXACJgMRAHoAdgbAArYAUwRbCD8CXAY1AF0IKwljAHEGnQPaAGYAfQCHCC4AWQWvAZ0ERgB3 -AFgEmwePB4oBzgBXAF8HNQDSATwAhQanBOEAaoEB1IEBxIBdgQHqgDiBAZSBAdmBAgiAhoEBFIAagFCA -jIDtgQEegK+BASeAloDDgQGcgOyBAaeBASyARYEB+IALgQFtgQG8gQENgQF7gQGQgKuAsIEB6YAugQHV -gQHhgQFSgNCBAa6BARKAWYCjgQIYgOGBARyBAZKAPYEBa4C9gQFlgQFYgQE7gPKBAQ+BAb6BAdqAFoDP -gQFngHyBAfOAlIEBIIDrgG6BAaWBAT+BAVyAxYBigEGApIEBJIEBg4D8gOOAnYEB04EByIEBAoCLgQEK -gQHCgJCBAeiAwoBRgLSBAWmA/YBXgQFEgQEGgQF2gQHAgOCBAQGAlYDMgFaAHIAegLeAyoEBloB/gLiB -AfeAhIDIgQFugJuBAR2AwIEBYYC6gPaBAfuBAYGBAVSBAVCBAZ6BAU2AP4B6gGiBAd2BAXmBAQyAmIEB -ooA3gH6BAbiAqIChgC2A9IECBYCygQHvgQGygQFegQG0gMuACoBGgDWAXIBNgQEXgQF0gDGAdICBgQHG -gQEjgQE3gQFPgEyAqYCNgFWADIC1gQHlgQGNgJ6BAauAAoECEIEBmIA+gOiBAgOAeYEBMIBlgJ+BAQWA -+oEBf4CIgESA9YEB4oBvgQFfgIWBAeyBAiCA54EBiYDSgK2BARGBAVqBAf2Ad4EBPoBIgO+A+4BzgQEI -gQGwgQG2gFOAbYCPgQGagBuAMoEBVoEBfYEBGIC80gAOAEUI7A0OgQIirxDaDQ8NEA0RDRINEw0UDRUN -Fg0XDRgNGQ0aDRsNHA0dDR4NHw0gDSENIg0jDSQNJQ0mDScNKA0pDSoNKw0sDS0NLg0vDTANMQ0yDTMN -NA01DTYNNw04DTkNOg07DTwNPQ0+DT8NQA1BDUINQw1EDUUNRg1HDUgNSQ1KDUsNTA1NDU4NTw1QDVEN -Ug1TDVQNVQ1WDVcNWA1ZDVoNWw1cDV0NXg1fDWANYQ1iDWMNZA1lDWYNZw1oDWkNag1rDWwNbQ1uDW8N -cA1xDXINcw10DXUNdg13DXgNeQ16DXsNfA19DX4Nfw2ADYENgg2DDYQNhQ2GDYcNiA2JDYoNiw2MDY0N -jg2PDZANkQ2SDZMNlA2VDZYNlw2YDZkNmg2bDZwNnQ2eDZ8NoA2hDaINow2kDaUNpg2nDagNqQ2qDasN -rA2tDa4Nrw2wDbENsg2zDbQNtQ22DbcNuA25DboNuw28Db0Nvg2/DcANwQ3CDcMNxA3FDcYNxw3IDckN -yg3LDcwNzQ3ODc8N0A3RDdIN0w3UDdUN1g3XDdgN2Q3aDdsN3A3dDd4N3w3gDeEN4g3jDeQN5Q3mDecN -6IECvYECvoECv4ECwIECwYECwoECw4ECxIECxYECxoECx4ECyIECyYECyoECy4ECzIECzYECzoECz4EC -0IEC0YEC0oEC04EC1IEC1YEC1oEC14EC2IEC2YEC2oEC24EC3IEC3YEC3oEC34EC4IEC4YEC4oEC44EC -5IEC5YEC5oEC54EC6IEC6YEC6oEC64EC7IEC7YEC7oEC74EC8IEC8YEC8oEC84EC9IEC9YEC9oEC94EC -+IEC+YEC+oEC+4EC/IEC/YEC/oEC/4EDAIEDAYEDAoEDA4EDBIEDBYEDBoEDB4EDCIEDCYEDCoEDC4ED -DIEDDYEDDoEDD4EDEIEDEYEDEoEDE4EDFIEDFYEDFoEDF4EDGIEDGYEDGoEDG4EDHIEDHYEDHoEDH4ED -IIEDIYEDIoEDI4EDJIEDJYEDJoEDJ4EDKIEDKYEDKoEDK4EDLIEDLYEDLoEDL4EDMIEDMYEDMoEDM4ED -NIEDNYEDNoEDN4EDOIEDOYEDOoEDO4EDPIEDPYEDPoEDP4EDQIEDQYEDQoEDQ4EDRIEDRYEDRoEDR4ED -SIEDSYEDSoEDS4EDTIEDTYEDToEDT4EDUIEDUYEDUoEDU4EDVIEDVYEDVoEDV4EDWIEDWYEDWoEDW4ED -XIEDXYEDXoEDX4EDYIEDYYEDYoEDY4EDZIEDZYEDZoEDZ4EDaIEDaYEDaoEDa4EDbIEDbYEDboEDb4ED -cIEDcYEDcoEDc4EDdIEDdYEDdoEDd4EDeIEDeYEDeoEDe4EDfIEDfYEDfoEDf4EDgIEDgYEDgoEDg4ED -hIEDhYEDhoEDh4EDiIEDiYEDioEDi4EDjIEDjYEDjoEDj4EDkIEDkYEDkoEDk4EDlIEDlYEDlhDNEgAB -iBkRAXwQlRECFBEBgRIABJUuEgADDmcRAh0SAAGIFxIABJWuEgAElbQRARASAASVqxEBchIABJW1EgAE -lQcRAV8SAASVShECHxIABJW3EgAElZkRAScRASURAhkRAhoRAZIRAWESAASVuBIAAYgMEQF0EgAEla8S -AASVqRECIREBpxDLEI8SAAGICxIABJWnEgAElUYRAXcSAAGIHhEBBxEBHREBNhEBkRIAAYgUEgAElWUS -AASVaBCWEgAElboRAUERASkRAhMSAASVuREBeBAdEMQSAASVthEBgxIABJWmEBMRAYkSAAGIEhEBjBEC -IBIABJWHEQIXEQGGEgAElUsRAbMSAASVSBCREQEoEgABiBESAASVMBIAAYfWEQGPEQGLEgABiBsQhhEB -ERECEhEBeRAXEJASAASVaRIABJWjEQE0EQGHEIgRAV4RAj8SAASViBEBXBIAAYgYEQE3EQGuEQFwEQGk -EQF+EgAElYYSAASVohEBjREBphIAAYghEgAElVARAXMQXBIABJVnEgAEla0Q9BECFhEBiBIABJWwEgAB -h8QSAAGIExCpEQIYEQFxEQGsEQFrEgABiL8RAYUSAASVMhIABJWlEQF9EDgRAWwSAASVuxIAAYgQEgAE -lYURAhUSAASVahIABJVTEgAElSsSAAGIFhEBqhC1EQIbEgAElaoQoxIABJVMEQEwEgAElU0RAaURAhwR -AR4RAg8RAYAQBREBPhD1EQIMEDoSAASVUREBexEBLRECPREBihDPEgAElSoRAQ4RAY4RATEQghEBYBEB -dhIABJUxEgAElbwSAAGHxxEBghIABJVHEMwSAASVmxIABJWyEQEqEQF/EQFiEgAElbESAASVZhIAAYgN -EgABiL0RAS8QnRCDEDkRASQRAiIRAQ0T//////////0QzhEBXRIABJWoEQIjEQGEEQGtEQGjEQIlEQI+ -EgABh8USAASVrBIABJWzEQGxEgAElZgSAASVSRIABJVSEgAElaQRAiQQyhIAAYgiEgAElZ8RAg4SAASV -nBEBbRCBEQGv0gAOAEUATQ7EgDqg0gAOAEUI7A7HgQIioNIADgBFCOwOyoECIqDSADoAOw7MDs2iDs0A -P15OU0lCT2JqZWN0RGF0YQAIABkAIgAnADEAOgA/AEQAUgBUAGYHoAemB/EH+Af/CA0IHwg7CEkIVQhh -CG8IegiICKQIsgjFCNcI8Qj7CQgJCgkNCRAJEwkWCRgJGwkdCSAJIwkmCSkJKwktCTAJMwk4CTsJRAlQ -CVIJVAldCWcJaQl3CYAJiQmUCZsJrQm2Cb8JyAnNCdwJ7wn4CgMKBQoGCg8KFgojCikKMgo0CsEKwwrF -CscKyQrLCs0KzwrRCtMK1QrXCtkK2wrdCt8K4QrjCuUK5wrpCusK7QrvCvEK8wr1CvcK+Qr7Cv0K/wsB -CwMLBQsHCwkLCwsNCw8LEQsTCxULGAsbCx4LIQskCycLKgstCzALMws2CzkLPAs/C0ILRQtIC0sLTgtR -C1QLVwtaC10LYAtjC2YLdwuFC44LlguYC5oLnAueC78LxwvbC+YL9Av+DAsMEgwUDBYMGwwdDCIMJAwm -DCgMOQxADEwMTgxRDFQMVwx+DIAMjQycDJ4MoAyiDKoMvAzFDMoM3QzqDOwM7gzwDQMNDA0RDRwNJQ0n -DSkNNw1KDVMNWg1yDYENkg2UDZYNmA2aDbcNyQ3RDdgN4Q3rDfcN+Q37Df0N/w4CDgMOBQ4aDiUOJw4q -Di0OMA5IDoEOjQ6jDrEOxg7VDugO+g8FDw8PHQ8vDzwPSg9PD1EPUw9VD1cPWQ9bD10PXw9hD2MPZQ9n -D2wP1w/oD+8P+A/6EAMQBRAIEBUQHhAjECoQNxA5EDsQPRBGEE8QWxBdEF8QaBBtEIMQhBCNEJYQoxCw -ELkQxBDNENcQ3hDqEQkREhEZETARQRFDEUURRxFJEVoRXBFeEWARYhFnEXARchF3EXkRexGkEbIRvxHB -EcMRyBHJEcsRzBHOEdAR0hH7EgUSDhIQEhISFBIWEhgSGhIcEh4SMxJCEk8SURJTElUSXhJgEmUSZxJp -EpISlBKWEpcSmRKaEpwSnhKgEsESwxLFEscSyRLLEs0S6BLxEvgTBxMPExgTHRMmEzcTORM7Ez0TPxNc -E14TYBNiE2QTZRNnE3wTfhOBE4QThxOgE9kT2xPdE98T4RPjE+UT5xPpFA4UHRQuFDAUMhQ0FDYUUxRV -FFcUWRRbFF4UXxRhFHYUghSEFIcUihSNFKcU3BTeFOAU4hTkFOYU6BTqFOwU8RT6FQIVCxUNFSIVMxU1 -FTcVORU7FVwVXhVgFWIVZBVmFWgVhBWWFacVqRWrFa0VrxXMFc4V0BXSFdQV1RXXFe8WKBYqFiwWLhYw -FjIWNBY2FjgW2RbqFuwW7hbwFvIXDxcRFxMXFRcXFxgXGhcvFzEXNBc3FzoXUxeiF78X0RfjF/gYBhgP -GBAYEhgUGBYYGBgaGBwYHhggGCIYIxgkGCcYKhgsGDEYQhhEGEYYSBhRGFMYhBiNGJMYmxidGJ8YoRij -GKUYpxipGKsYtBjBGMMYxRjHGNIY5hjvGPEY/BkFGQcZEBkSGRQZFhkYGUUZRxlJGUsZTRlPGVEZUxlV -GVcZYRmOGZAZkhmUGZYZmBmaGZwZnhmgGakZ1hnYGdoZ3BneGeAZ4hnkGeYZ6Bn3GgAaDRohGjAaORpG -GlQaZRpnGmkaaxptGo4akBqSGpcamRqbGp0anxqwGrIatRq4Grsa6hrsGwEbEhsUGxYbGBsaGzcbORs7 -Gz0bPxtBG0MbURtxG4IbhBuGG4gbihujG7Qbthu4G7obvBvZG9sb3RvfG+Eb4hvkG/0cNhw4HDocPBw+ -HEAcQhxEHEYctRzGHMgcyhzMHM4c6xztHO8c8RzzHPQc9h0PHUgdSh1MHU4dUB1SHVQdVh1YHXAdhh2X -HZkdmx2dHZ8dsB2yHbQdth24HdUd1x3ZHdsd3R3eHeAd+R4yHjQeNh44HjoePB4+HkAeQh5pHn0ejh6Q -HpIelB6WHr8ewR7DHsQexh7HHskeyx7NHtoe3B7eHuEe8B8BHwMfBR8HHwkfKh8sHy4fMB8yHzQfNh9A -H0IfVR9mH2gfah9sH24fix+NH48fkR+TH5Qflh+vH7IftR+4H7sfvh/WIA8gESATIBUgFyAZIBsgHSAf -IHogjSCeIKAgoiCkIKYguSDKIMwgziDQINIg7yDxIPMg9SD3IPgg+iEPIREhFCEXIRohMyFsIW4hcCFy -IXQhdiF4IXohfCGlIbYhuCG6IbwhviHfIeEh4yHlIech6SHrIiAiIiI7IkwiTiJQIlIiVCJ9In8igSKC -IoQihSKHIokiiyKeIq8isSKzIrUityLUIuUi5yLpIusi7SMKIxsjHSMfIyEjIyNAI0IjRCNGI0gjSSNL -I2MjnCOeI6AjoiOkI6YjqCOqI6wkSyRcJF4kYCRiJGQkhSSHJIkkiySNJI8kkSSjJLQktiS4JLokvCTZ -JNsk3STfJOEk4iTkJPwlNSU3JTklOyU9JT8lQSVDJUUlbiV/JYElgyWFJYclrCWuJbAlsiW0JbYluCW6 -Jccl4CXxJfMl9SX3JfkmFCYlJicmKSYrJi0mSiZMJk4mUCZSJlMmVSZuJqcmqSarJq0mryaxJrMmtSa3 -Jssm4SbyJvQm9ib4JvonGScqJywnLicwJzInUydVJ1cnWSdbJ10nXydsJ24ncSd0J4EniyecJ54noCei -J6QnwSfDJ8UnxyfJJ8onzCflKAYoGigmKCgoKigsKC4oMCg1KDcpFCklKScpMCkyKTUpSilSKV8payl5 -KXspfSl/KYEpgymKKZcppCmsKa4puinDKcgp3SnfKeEp4ynlKfgqBSoHKgoqEyocKi4qNypCKk4qWSpq -KmwqbipwKnIqjyqRKpMqlSqXKpgqmiq0Kukq8ir0KvYq+Cr6Kvwq/isAKxUrHisgKzIrQytFK0crSStL -K2wrbitwK3IrdCt2K3grfSuKK5srnSufK6Eroyu0K7YruCu6K7wr2SvbK90r3yvhK+Ir5Cv8LB0sHywh -LCMsJSwnLCks5izxLQItBC0GLQgtCi0iLS8tMS0zLTUtVi1YLVotXC1eLWAtYi1vLXEtdC13LX4tgC2G -LZctmS2bLZ0tny2wLbIttC22LbgtyS3LLc0tzy3SLfMt9S33Lfkt+y39Lf8uCy4NLhguKS4rLi0uMC4z -LlguWi5dLl8uYS5jLmUucy55LooujC6OLpEuky6wLrIutC63Lrouuy69LtYvDy8RLxMvFS8XLxkvHC8e -LyEvTi9fL2EvYy9lL2gvdy+IL4ovjC+PL5Evri+wL7IvtS+4L7kvuy/TMAwwDjAQMBIwFDAWMBkwGzAe -MKMwtDC2MLkwuzC+MNsw3TDfMOIw5TDmMOgxATE6MTwxPjFAMUIxRDFHMUkxTDGZMaQxtTG3MbkxvDG/ -MeAx4jHlMegx6jHsMe4yDzIRMh0yLjIwMjIyNTI3MkgySjJNMk8yUjJvMnEyczJ2MnkyejJ8MpUyzjLQ -MtIy1DLWMtgy2zLdMuAzNTNBM1IzVDNXM1kzXDOrM80z1zPkM/k0BjQgNDw0VzRjNII0kTSdNKA0ozSo -NKs0rjSvNLI0uzTENMc0yDTLNM400TTaNQM1DTUXNSE1LzUyNTU1ODU6NT01QDVDNUY1STVMNVc1cDV8 -NX81gjWFNYg1izW0Nbc1ujW9NcA1wzXGNck1zDXWNd816DX8NhE2FDYXNho2HTZWNmI2azZ+Nos2lzal -Nqc2qjatNrA2sja1Nrg2uzbONtE20zbWNtk23DbzNvw3BTcTNxw3HjclNyg3KzcuN1c3ZjdzN3s3hjeV -N6A3qze4N7k3vDe/N8g3yzfUN9033jfhN/44AzgGOAk4DDgOOBE4FjgjOCU4MThGOEg4SjhNOE84YThq -OHU4iTiuOMQ4yTjLOM440TjTONY42DjaOPs5CDkKOQ05FjkbOSk5UjlTOVY5WTliOWU5bjlvOXI5jzmS -OZU5mDmaOZ05pTnKOcw5zznSOdQ51znZOds6BDoFOgg6CzoUOhc6IDohOiQ6QTpEOkc6SjpMOk86Vjpr -Om06cDpzOnU6gTqqOr46wDrDOsY6yTrMOs06zzrROuI65DrtOu87BDsGOwg7CzsNOyY7Ozs9O0A7QztF -O087XDteO2M7bDt3O4I7kzuVO5c7mTucO6I7szu1O7c7uju8O9k72zvdO+A74zvkO+Y8HzwhPCM8JTwn -PCk8LDwuPDE8ajx7PH08fzyBPIQ8jjyfPKE8pDymPKk8uzzMPM480DzSPNU85Dz1PPc8+Tz7PP49Bz0Y -PRo9HD0ePSE9LT0+PUA9Qj1FPUg9ZT1nPWk9bD1vPXA9cj2MPcE9wz3FPcc9yj3NPc890j3bPeQ95j3+ -Pg8+ET4UPhY+GT4yPkM+RT5HPkk+TD5YPmk+az5uPnA+cz6APpE+kz6VPpc+mj6oPrk+uz6+PsA+wz74 -PwU/Ej8oPzY/QD9OP2c/dD+GP5o/pD+wP7M/tj+5P7w/vz/EP8c/yj/NP9A/0z/uQBdAH0AoQCpAL0A6 -QE9AUUBUQFdAWkBjQGVAaEBrQJxAq0DEQNxA30DiQOVA6EDqQO1A7kDxQPJA9UD+QQBBA0EFQQ5BEEEd -QSBBI0EmQShBK0EuQUtBTUFPQVJBVUFWQVhBcEGVQZdBmUGcQZ5BoUGjQaVCrkLLQs1Cz0LSQtVC1kLY -QvFDFkMYQxpDHUMfQyJDJEMmQ/9EHEQeRCBEI0QmRCdEKURCRGdEaURrRG5EcERzRHVEd0UsRUVFTkVV -RW5Fd0V5RYRFh0WKRY1FkEWTRaxFuUXDRcZFyUXLRc5F0EXTRdxF3kXgRehF8UX2RgRGHUYgRiNGJUYo -RipGLUY2RjhGOkZDRkVGVkZYRltGXUZgRmNGZUZoRmtGiEaKRoxGj0aSRpNGlUatRtJG1EbWRtlG20be -RuBG4kf5SBZIGEgaSB1IIEghSCNIO0hgSGJIZEhnSGlIbEhuSHBIeEiVSJdImUicSJ9IoEiiSLtI4Eji -SORI50jpSOxI7kjwSXlJlkmYSZpJnUmgSaFJo0m8SeFJ40nlSehJ6kntSe9J8UrkSu9LCEsLSw5LEEsT -SxVLGEshSyNLLEsuSz9LQktFS0dLSUtLS01LT0tRS25LcEtyS3VLeEt5S3tLlEu1S7dLuUu8S75LwUvD -TMhM6U0CTQVNCE0KTQ1ND00STRtNHU0mTShNNU03TTpNPE0/TUFNRE1hTWNNZU1oTWtNbE1uTYdNqE2q -TaxNr02xTbRNtk69TtpO3E7eTuFO5E7lTudPAE8hTyNPJU8oTypPLU8vT3tPmE+aT5xPn0+iT6NPpU+9 -T95P4E/iT+VP50/qT+xQ41DrUQBRA1EFUQhRClENURZRGFEjUSVRKFErUS5RMVFOUVBRUlFVUVhRWVFb -UXRRmVGbUZ1RoFGiUaVRp1GpUzJTT1NRU1NTVlNZU1pTXFN0U5lTm1OdU6BTolOlU6dTqVVKVWdVaVVr -VW5VcVVyVXRVjVWyVbRVtlW5VbtVvlXAVcJWUVZkVm1WdlaBVplWpFauVrdWvFbPVttW7FbuVvBW81b1 -VwZXCFcKVw1XEFcxVzNXNlc5VztXPVc/V0ZXSFdWV2dXaVdsV25XcVeCV4RXh1eKV41XllefV6FXrFev -V7JXtVe4V7tX5FfmV+hX61ftV+9X8Vf0V/dX+1gEWAZYH1ghWCRYJ1gqWC1YL1gyWDVYN1g5WDxYPlhn -WGlYa1hsWG5Yb1hxWHNYdVieWKBYo1imWKhYqlisWK5YsVjCWNNY1VjYWNtY3ljnWOlY6lj8WSVZJ1kp -WSpZLFktWS9ZMVkzWVxZXllgWWFZY1lkWWZZaFlqWZNZlVmXWZhZmlmbWZ1Zn1mhWa5Z11nZWdtZ3Vnf -WeFZ41nmWelZ8ln0WflZ+1n9WiZaKFoqWi1aL1oxWjNaNlo5WkZaT1pRWlRaVlp/WoFag1qGWohailqM -Wo9aklqZWqJapFq3WrpavFq+WsFaxFrGWslay1rNWvZa+Fr6Wvta/Vr+WwBbAlsEWyVbJ1sqWy9bMls0 -WzZbOFtMW05bd1t5W3tbfFt+W39bgVuDW4VblFu9W79bwVvEW8ZbyFvKW81b0FvWW99b4VvkW+Zb8lv3 -XAhcClwMXA5cEVwgXDFcM1w1XDhcO1xIXFFcVF1/XYJdhF2HXYpdjF2OXZFdlF2WXZldnF2eXaFdpF2m -Xahdq12tXbBds121Xbhdu12+XcBdwl3EXcZdyF3LXc5d0V3UXddd2l3cXd5d4V3kXedd6V3sXe9d8V30 -XfZd+V37Xf5eAF4DXgZeCF4KXg1eEF4TXhZeGV4bXh1eH14hXiNeJl4oXipeLV4wXjJeNF42XjlePF4/ -XkFeRF5HXkpeTF5OXlBeUl5UXlZeWV5cXl9eYl5kXmdeal5sXm9ecl51XndeeV57Xn1ef16BXoReh16J -Xotejl6QXpNelV6YXppenV6fXqJepV6oXqterl6wXrNetl65Xrtevl7AXsJexF7GXshey17OXtFe1F7X -Xtpe3F7fXuJe5F7mXuhe6l7sXu9e8V7zXvZfG18lXyhfK18uXzFfNF83X0BfWF9lX25feV+EX41fj1+a -X51foF+jX6ZfqV+yX7Rft1+6X9Jf21/kX+9gEGATYBZgGWAcYB9gImArYERgTWBPYFJgVWBrYIRgjWCW -YKNgrGCuYLdgumC8YL9gwWDMYQFhA2EGYQlhDGEPYRJhFWEYYRphHWEgYTthaGFxYXNhfGGFYYdhimGT -YZhhoWGkYs9i0mLUYtZi2WLbYt1i32LhYuNi5WLoYupi7WLwYvJi9WL3Yvli+2L9Yv9jAWMEYwdjCmMN -Yw9jEWMTYxVjGGMbYx1jH2MhYyNjJWMoYypjLWMvYzFjNGM2YzljO2M9Yz9jQWNDY0VjSGNKY0xjT2NR -Y1NjVWNYY1pjXGNfY2FjY2NlY2djaWNsY29jcWNzY3VjeGN7Y31jf2OBY4RjhmOIY4pjjWOQY5JjlGOX -Y5pjnWOgY6JjpWOoY6pjrGOuY7Fjs2O1Y7djuWO7Y71jwGPDY8VjyGPLY81j0GPSY9Vj12PZY9xj3mPg -Y+Nj5WPoY+pj7WPwY/Jj9GP2Y/hj+mP8Y/5kAWQEZAdkCmQMZA9kEWQTZBZkGWQbZB5kIGQjZCVkJ2Qp -ZCtkLWQ2ZDllZmVpZWtlbmVxZXNldWV4ZXplfWWAZYNlhWWIZYtljWWPZZJllGWWZZllnGWfZaJlpWWn -Zallq2WtZbBlsmW1ZbdlumW9ZcBlwmXFZchly2XOZdBl02XWZdhl2mXdZeBl4mXlZedl6mXtZe9l8WX0 -Zfdl+mX9ZgBmAmYEZgZmCGYKZg1mD2YRZhRmF2YZZhtmHWYgZiNmJmYoZitmLmYxZjNmNWY3ZjlmO2Y9 -ZkBmQ2ZGZklmTGZOZlBmUmZVZlhmW2ZeZmBmYmZkZmZmaGZqZm1mcGZyZnRmd2Z5ZntmfmaBZoNmhmaI -ZotmjmaRZpRml2aZZpxmn2aiZqRmp2apZqtmrWavZrFmtGa3ZrpmvWbAZsNmxWbIZspmzGbOZtBm0mbU -Ztdm2WbcZt9m6GbraBhoG2geaCFoJGgnaCpoLWgwaDNoNmg5aDxoP2hCaEVoSGhLaE5oUWhUaFdoWmhd -aGBoY2hmaGlobGhvaHJodWh4aHtofmiBaIRoh2iKaI1okGiTaJZomWicaJ9oomilaKhoq2iuaLFotGi3 -aLpovWjAaMNoxmjJaMxoz2jSaNVo2GjbaN5o4WjkaOdo6mjtaPBo82j2aPlo/Gj/aQJpBWkHaQppDWkQ -aRNpFmkZaRxpH2kiaSVpKGkraS5pMWk0aTdpOmk9aUBpQ2lGaUlpTGlPaVJpVWlYaVtpXmlhaWRpZ2lq -aW1pcGlzaXZpeWl8aX9pgmmFaYhpi2mOaZFplGmXaZppnWmgaaNppmmpaaxpr2myabVpuGm7ab5pwWnE -acdpymnNadBp02nWa5trr2u7a9dr+2wwbDxscWyJbJRsqmzpbVJta22ibb1tyW3Vbq5vf2/scABwUXFo -cW9xdnGWch1zLHNVc2dzf3OLdLB00HUDdix2YXb+eCt4onnVehZ6InrZe/R8AHwJfB58Y3xvfMR9vX54 -fp9/BIAngIGA34D6gRyBK4FUgW2BeoGigcWDAIMNgyiDMoNOg2eECIWthdOGfobHhtOG+IcGhySHr4fQ -h+WIVoiDiJ2I3ojriTKJRolein+LJIs3i2iLiouii9WMIoxHjF2MdI1NjXCNs46wj2OPeI+Rj5yPx4/j -kBKQHpA4kTmRTZGSk0+TZ5Nzk4uURJUllT+VRpWPldSWW5akl7eZZJohm0ybz5wCnA+cFpwynKWdmp4h -ns6fB58QnxOfFJ8dnyCfIZ8qny2g5KDnoOqg7KDvoPGg9KD3oPqg/KD/oQGhA6EFoQehCqEMoQ+hEaET -oRahGKEboR6hIKEjoSWhKKEroS6hMaE0oTahOKE7oT2hQKFDoUahSKFLoU6hUKFSoVWhV6FaoV2hX6Fi -oWShZ6FqoW2hb6FyoXWheKF6oXyhf6GBoYShhqGJoYuhjaGQoZOhlqGYoZqhnKGeoaGhpKGmoaihqqGt -obChs6G1obihu6G9ocChwqHEocahyaHLoc2h0KHTodah2aHbod6h4KHioeSh5qHooeqh7KHvofGh86H2 -ofih+qH9of+iAqIEogeiCaILog6iEaIUoheiGqIdoh+iIaIjoiaiKaIsoi6iMaIzojWiOKI6ojyiPqJA -okOiRaJIokuiTqJRolOiVaJXolmiW6JdomCiY6JlomeiaaJsom+icqJ1oneieaJ7on2if6KBooSih6KJ -ooyijqKRopSilqKYopuinaKgoqKipKKnoqmirKKuorCisqK1oreiuqK8or+iwqLEoseiyaLLos6i0aLU -otai2aLbot2i36LhouSi56Lqouyi7qLwovOi9aL3ovqi/aMAowKjC6MOpMWkyKTLpM6k0aTUpNek2qTd -pOCk46TmpOmk7KTvpPKk9aT4pPuk/qUBpQSlB6UKpQ2lEKUTpRalGaUcpR+lIqUlpSilK6UupTGlNKU3 -pTqlPaVApUOlRqVJpUylT6VSpVWlWKVbpV6lYaVkpWelaqVtpXClc6V2pXmlfKV/pYKlhaWIpYuljqWR -pZSll6WapZ2loKWjpaalqaWspa+lsqW1pbilu6W+pcGlxKXHpcqlzaXQpdOl1qXZpdyl36XipeWl6KXr -pe6l8aX0pfel+qX9pgCmA6YGpgmmDKYPphKmFaYYphumHqYhpiSmJ6Yqpi2mMKYzpjamOaY8pj+mQqZF -pkimS6ZOplGmVKZXplqmXaZgpmOmZqZppmymb6ZypnWmeKZ7pn6mgaaEpoemiqaNppCmk6aWppmmnKaf -pqKmpaaopqumrqaxprSmt6a6pr2mwKbDpsamyabMps+m0qbVptim26bepuGm5Kbnpuqm7abwpvOm9qb5 -pvym/6cCpwWnCKcLpw6nEacUpxenGqcdpyCnI6cmpymnLKcvpzKnNac4pzunPqdBp0SnR6dKp02nUKdT -p1WnWqddp1+nYqdlp2qnb6dyp3enfKeBp4SniaeMp5GnlqeZp56noaemp6unrqexp7Snt6e6p72nwqfH -p8qnz6fUp9en2qfcp96n46fop+2n8Kf1p/in+6f+qAGoBqgLqBCoEqgXqBqoHaggqCWoKKgqqCyoMag0 -qDmoO6g+qEOoRqhJqE6oUahUqFmoXKhhqGOoZqhrqHCodah4qHuogKiCqIWoiKiLqI2oj6iUqJmonKif -qKGopKinqKyor6i0qLeouqi9qMCow6jIqM2o0KjTqNio3ajgqOKo56jsqO6o8aj0qPmo/qkDqQWpCKkL -qQ6pEakWqRmpHqkjqSapKKkrqTCpNak6qT2pQqlHqUypUalUqVapWaleqWCpZaloqW2pcKlzqXapeal8 -qX6pgamDqYapiKmNqZCpk6mWqZmpm6mgqaOppqmpqauprqmxqbapu6nAqcOpyKnKqc+p1KnXqdqp3ani -qeep7KnxqfSp9qn4qfqp/aoAqgOqDKoOqhGqFqoZqhyqH6oiqiWqKKotqjKqN6o6qj+qRKpJqk6qUapT -qliqXapgqmWqaKpqqm2qdqp4qnmqgqqFqoaqj6qSqpOqnKqhAAAAAAAAAgIAAAAAAAAOzgAAAAAAAAAA -AAAAAAAAqrA - diff --git a/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/pt_PT.lproj/main.nib/keyedobjects.nib index 9aabfb63d1415e3bc07e2837890e8803b06bd68b..74a1efe39798b0da4c697972f6d7b1e8aef41f17 100644 GIT binary patch literal 51384 zcmeEv2VfM{*6_V|W?N=wvYXzsX(XYhK`7FT^j<>=OR|K8BpXtwB6ATb3IZYm3P?v0 zL`4J(Dk_R%?-fx|>=jfj_@6Vgo82_zmG67+fA2%HJN1@x&prK|ol;TiuBy(;dW}%R zh(JVQAVy*#L1R;AxhkvNp7N2Y)t-uRsm{uxX>PbQHq|p_x~r(VDumD_TVEz7VxHKq zM{E6Jv9sE#(n4GC;1L5{b6v&Vy)PZG3%3!8SV=Z%OFEElq$lY``jUa2^XVeGgf6Aa=t_D6T}yAF zx6(~?Gu=+_pm)&&^ay=`K1d&>PtlX~Ir=<(g}zTu(T|zHY|PH0n1dy;RF=s)vo5SV zyOI^KDXfT1V`Z#@&0%xdJhp&wwt}r>tJyksGuyy!Wjonkb|*W?9%hfTC)f%0411Nm z#olM9*oW*B_67TreZ#(E-?N|CAA%r=f-ERPun;E13UNZ3&`d}dS_-*Bp3qt7BJ>mn z2t$Qo!USQWP$*0mTtcZ(Cd?9M3v+}8!eZfCVTo|PaHFtZ*dS~ZwhKFi+l2$d-NFOH zgTh0?W5UzI3E?H-W#J9sP2nBkUE#EFR`^W#Uid-yS@>Oy5~IZ!F;+|v6GexZCT5EH zVkfZ|y-OS*juc0U6U2$4OPnf}iRI!fakhB1xKLawE)$oF*NZE}o5aoHR&krSQ@m5W zOMF0lOgtt&BR(s>EWRS16~7R_5-*5NFI&oj<9 zE-+qgTqq_ORU(Q7E_QZ*c4`pHYJ#vnbJ)e zrc6_7QyWvBsjaD_sgtRjskf<*X|QRmX`HFRnjbSCH$Q7WX@1H4 zy7>+ByXN=IADTZkpEZAFxrVg2EU~PzthTJN++^8g*=*Tmxx=#8vfpx#2c`^ z=}GCh^py0pbV7PYdR96qJtsXcy&%0Py(GOXy&}CTy(Yaby&=6Ry(PUZy(7IVy(hgd zosvF~PD>w3A4wleXQWT0Po=ZcXVT}=7t)u~S7N;Mwe*ejt@NGrz4U|hqjXL>Fa0F_ zEd3%~kbaeZlYW=}kSGlyD_NiBzJLXeCC8RpOL*B|%A497>XstfVNZN}AG4 zNmnwIOr^QfLTRbAQd%o*lq@A%$x(8ZJf*GDPRUo=D;<=MN+;zCrL)pS>8f;7x+^`D zo=PvJx6((sQt7MoQ~E0dl!3}1Ww0_t8LA9ZhAShKk;*7#v@%8+tBg|$l<~?0Wuh`k zDO4saPGyQxq!cSIWvWu5OjF#-bY+H8s+1|^ibttXW-66Rl~S$LD6^E=${b~`GEbSW zT%{~fu2vQ*s=}2;$~DSjhyK;xJSGiN!r|dUmD0e9bl)IIC zlzWwf%6-Zq<$mR`azuGRc~E&sd008BJfb|RJf<8|9#@`Fo>Y!2CzO-Q3!_rYYf4K$ zu!RtrC?uHJh@FIxP!dMMNd$=`Q6!qgkXRB&;z5Kqf?7YomEv62agz{vvuIxRT=~DiPv3Kqn)KSF1QjsctrQ2 zB3D(Fdy2c%T|IY*yV!dV-tFlrF9(?bq=l;SgGUT@mbt319XRe&2`95Xl{4@uy+yoJ z0R2G&cnCMN7nPmNci7LV*x>tbERpdl)y+S&Y zPUH&Gd91z;uBrn4pd8xRK{}Hzq^q_XgKDasFwqfOD`N+bs6Ei9tGCmg^w>^%kgk(p zAT?Fho-+L=K&oGlo}MC)vvxIbXuU}vawRN;S9YsX&0FOi3?;+Ja5937B%{b^GKP#L<46G+PbQFwWD+SPlZlf|Aw{H^ zxX4seLZ%TnnNDVqQc_0BiHB5>nWU0bk!n&yW|7%s4w*~lk@@5*vVdGo77~?kvWQ$m z7L#kq60(#mBg@HkLzuYdWU*IJ*YmYKBhjSzM#Iy>2yv#oX+BOKBp?DoYO^|F6MM8r^`9Lp3_yF zuI6+Nr#EuCp3{w--pc7_PG9Eq6;5B{^bJnm;`D7!&v5!Fr=M~91*czf`U9uuI6cql z&zxT1^fylb;PfJAgfq&Sz?p$FKr8cWunz0U&15~PH~m04mDnt)WkQ*W_WW8xs7Zk+sJmZgX|=`$ZoQS+)j3A2!qHy+*MWK zDKBL!02&t%g=$xMwMINVm1WM-eq}%t3T+{SM+|jUx;@42qJHp1 z1U zZw<)4zIwSzopWKc)Q&a>9uDX=M5Gsq8mq>rp|)rnQzPLhShcB=?Szel^u1!(pB|v> zgJ3rl!=D3oN)hadkKw2Y&dXqrl)|-Y;z4|Qk-S7+Ca;iJ$!p|wSkV#gc`o=ussjr< zRhy<7lG3d?(f+A+yBIcMU`>&`*m-586VO55Z{Ol4tbZnN8Tr= z0A_$Y8s=%lEJ6)a!vTpja3NC8c2^fo)7$xoe7qfo3S+ppf(NhVa)UWENwHuxi zO36kls2OT9?CJD+JDM8EPHLiN+|ksarofI&RnshLO19@wwi?Pd1C&kn*uqJ7z{_f&<~2%_GNXJDN}1(++^sBi+z3 zw5pjbG!ih#Q#{C7H3NtM2nyO2*v*5=U1gqfchNvk5#ZC1at%|FKf33*inSBiNP}GE zHEOQfIt1i1qQ-0$u9)^nPxXhxZ{az@}oeYJ;l>V|D=!x~Wyq*4d?06K6x z9Z0&uq=bGp-GivZLq1=Mi?+LU{dr%7Tr%n8_B?I|gN^$FO4 zZU9^0h+Qz^5*YCnFyd~Fjd(iEqcglCE{73!QM+n`?d)HanY2()R{ofQ>Tg__t`ST)TvJ8+pmSV*KRVAAm_Q?DFb>?(DYz*^UW zMH}K8dZRYPe(J!+hPV#Ea&y2!_E!h!Yv{2BgH%_k$!oY!Uub*V4a-#px&!<-tmXKM zO4rn?2E(Ga!CGvCVGV|Xji^u3KuDpxs3xS)9qJGuX+zav7IjE{lD3cT_mQ;8oR095 zwCpUMq~(B&(f)6gE9fC0X}2{XX~Th}4ffbV0WWJbye!uUTagzxOM#e`XvFM1fTL=> zm-IMms;AY3^-=nW2J2Dk*v4ReEC3yj13HZHqQmIG{c?gnL!Z@9;xUc~kAv1V6qGP$ zrK7qA=t70F(&=zIrdEQ40u(EF3ThOE)t+mwHLjkPA_;NROZpYrO1~!C=r{CRvYmcM zzo$Qtlk`V=j-IDK!I*xb7wE6_H?oKR4rdqXpY#Vt87s6Uf{0w{EGdD>>yiQz>pq^! z!Jcv;&dyRG&m(p57G}`b<+lo$8(lzM=}gTUCmv=ns5k#j3t zBVZd9Rl{37J(cCYw;}-yC`uNAm@%TlSp?mVaTixl(^O(;rKYUBdkuigRpp+CL#m#O z>?Eq;TYX*bl4;dI`!!J%HbrsCd$p;M} zyF>d0Z)knsdT(bTER=xZCco#>Qsx=DeyV5sUgL}km6uS=W$5hP9r&s zfQdtY`d0tk;FeO7rD z7m$nfUVE0hD{!WOVftg;%c^lHNBds#su-}pHGu5k%*t6bXHm8swODm>7Ba+U>+T># z``ZBD@MotXDm-aZCl%Vl=FiV*pViW#5z6d#0R8+0UT}0}-FC8WIyfd42I9C^rDr|W zTF-RgXG;XAA^QCL6LpABFG*&sHU4PhbVb~cO+XCv51Hj0gAV_` znVe)!L^aTfHG~ZjIp||mYMDAiEmb`u2Ybpi-sx4Xn2Wr|N>GPtrZr7KhqA^2=Vop; zoy~xWqxPY-gcJd_^D)yvL{Q5IWVO!4e>ojGfQAOP9ahdf+nI-Sg=e%EUWZmZ(9TR& z2`yE#8a9ieLZaP7{RnXY09EQK(X^#xX!P9|_%SE=Pa zvb;TC%@*!r3z@3xPW5*HE`%mhVmp1@uF_(>@^%0OA0kKDB7ovGY%%?bEdlm1Ak7?70?dk z&{*vp`1Ayheie*9n>2*bS~gn+IH+^f3gA3Nx)NSHe;v;2nYzq#(KHwjwn$m5UcbJP)x}`QXO!6q~hez0>wZmMbavbL9?tpI7 zJaym>D_+B%(%?Qzy+*AVuOpp?rSH^3l4pHr0%Um!dqG1JkSh>TfaLM1}}2GWgrqMi_`x zr?p+#PXFiIl^?N>cd(Dy8O>JeHF0*YtaQ$WZK{3O?e{G7`;h`(wM7*8W%*h`31xJ4j-A)!#?|V&dg3zsne1d2*so{-U_YyC zKwQ32U29R-=*)BrvTI;S7s-Bs2o!kNMfGj>x80y4RDjJ2EdrVa0Pg5EEmZo7G#a3v>!0`>+J0SN z<#JBawF;k!r4~|@2zIhj2nCUHJ&2UIHUcRjQiuwG)CP4UKniR!x<#@>_CElHWO4$! zuWt*v1)#9rV{6&K7J^z5TJUCSkUO>TRHC`OzXb_a6XAM*v9k1_0R#0NL!Z zrGe^*N@E!;ESiWAHR@?m8cHA&!0Ef;Y1FwuyV9;B8lmb5Y@+Uby9+(Eow8lMz5e=V z!F>A&R|{f>qbo0!f=8n>nG^10Ep4T82Ic?o)rp&@tTCa*k|jt zse9Dj0F~__=JteW_m(W`_9rME-N8N$-XBoxK;r-dL$wEGF!U9Dsfxgr{nVnc+*L>M z7pB0{7sE!_3mf6CdVoMTfG|yPC2bsyO9Yd1o>e`MXOV4_nRtoweL;od@9 zvr*OH7X;gd!{cyGb-AlOj$)Sstm&22no+9?!i-#H&ha%>uEMIhRa0E9ioo?v6y^(8 z!TK`wZuQM+>8%8S9? z*nNtprh2He+*KN=APdU?jMo7e?*lMCP!Ej43IO8`!YTx#utGfq_;kN|*rFctX$)Rh zh_Ft$*=ML2$|;zD(E$SZlauYWz5YFh3SkR?d07K69|17mS7=KH9b#q;0Jgf)ISah8 zPRDedo3qLRE+a69&vI5xECTQ1jKb<^py!tO%@jaHcfq9hz@#67Nk3X|(r9oN?iBXn zq^WLjepo#U24`(nxp|;UwEYL%I>P-ht6dFd^$5)BA&;${mx|VC)Ka$}`*_NS8adFp zi%v8=8W$-6B2fm!0_m(1NQll)(0kGo0?YaV8R`Mv$?jx0gqk_v$r^Y9DJ)pl;xwBy zfT=<=NuvqHZ=kNlN&whV0NA4duwwwQ6Ab_+JT5#TJXs5{r`5;RCwu_QLqAwfTO=uM zH9r{GtKO<7H;o5@Y_agHaFR_HjtVcZ>p?a;u09DO*|89aks~NQm%-?fG&+G;>K1o| z0bZ$wYYyPF6}5b}3a&fg9LXmVRD=nVVh79}-$i1JmU+B_aGK*Kz!l)1^=Q|NNlWiN z^v}AXtqN}o9%#b{>rxHoddqmd8d}8ma7A!j9<2vm&eutNU=I%P5CeZBt?Pu@yJtN9{Fqo9;xl| zkA*V|Ner zKcud!y#d&G0kH8mz{Z!lhgXcEn$MGO)p(JIQK zA_j{#(JqFFp<J)YB*Y`;3=?8fZuC47{)Zc zPcvSj!K(`Bk5^yS8`2ypU=$iNQnP!2+NEFDVj>#p!Cmg{L4OQ;fVaIJYpSV!17&+O zbfPk$U(sxAXga{>^=8nD0u#~tQs3lsn)*7Y#hjL?uY?Sp1AFOJ^$iu=_ER}^sjq>3 z4%t3fr*d=J;~s67n+wNTuu0Jt+?4U#C(3FF44Q(*R=k{Bj90~xIxJ)6=eEwv%4whD zYLN?MAmC&{!Tj7DFwf-VWi6;DnTRQ5kC=**i3$+~MP8eXn6570hLZhzXh9R3(@((Z z|F&kSdzNe$TZk=Tm0OE#$VoAaoDg#moka=$+UW*E9FXQ_(%`RII!9L4ltb`|t5^#t zfS4KZTk3{SS25_xzBdqvQ`B$OZvbWAv8Zoa)bD&_>VRVcjl_4}SzW$c>>_p*y9su& z2Ro;}r=C{NfT;eNy1E|GM5RW&QtXT4^eQ#)tEWIz|C?e2#9=VkE)90q2Qbw4JhoU+ zOxzm5M}q?rI~1#tEcr!mbZVfyiG;5joW(%68jMtUTpTNos~zdn>WAt_KBXcTOlxiP zHR_&?>j{X{h?1|d>4ayI zC7@^ItPU}_s*`e^F(C7)%V@AwgnF6QiyPY2-$z!B>oN%XK{nR9G1$As=>f3+MEz8Q zJxEvx`|Ng_gw+;-p9j)<)4-nz!0#3S{IdZ3Gdl2RfOLSv(|MHc@ zKAwsy4ayKYIPkOXQVanQ`E*{LU-pFd_11Lh#INH8F0RgxvAqCvgtH<54=xEVUMZaG zZ5C?_duU-K}XZ3(Vx;EUleLhm=c3y+IcpW*n!{&Q9rW-tP;7uSm$*w5^u@T|BA z4cx`RY28!Zu1a8JUfQevsD2N|p0_~~`~jN>rBJ+06^CVy=?$?*&SIw~42j#t9q_-; zxalL>^*h^5c4(dLg;vjlJ_xOHn&NAAKQx=;o5J1d^4osLUopLOKA4kUTpA9|dL6L4QY!)OyEC1`J|!<^x)E-AujD%>adhX{!TPM4q&S&HFI zzpo=m9jlZ^dhuD@gGJB+lC%0GTSqq}a2Wrhx1y8P-Woa8cWc8@BfasFSY2}0iEp6K z-8ZwkqpD9d$qw;3@p)7CC9{f#rNp1;``z$V8ExvgKQM6`t9Nw zwp{!~{1oD){Lv*CUMR+jg~uQe+}KyZ-wjrgtjo%jOH5r3q$K|(OIU%>hND>(E&QXMZ>`S#3S*NWyL%iNrP(WLfEqLr8cj+|e zUo@3mr>S&9hTfDM(3E0}Dgh}0Ro7{{%%M>~LkpU{9q_WNe%8v+dbgpqp$+kd32K_c zPz0+#S`frxL?(nY`nmKMvkf`B4LSaZK|r;D*BYU8hIWR0-~Ljc<}{SkFdwbUMy8OZ z6Fam4WnF@i8oI##xzA7QI1NV}4uPr92B#4Ku48>Rj)c~5r9qRNbwbN&B&Sin{jHJO z_L_Mww*%Up@-Ef?5TLb(0{f3vOOeQH9=o0p8s3gf|4r+VLX!Sm=JK&p-O*wa8LMB}DmtU(jVH2}nM z8p~;%5B|9T|Mr?PmzR$c;@=t|WGI3)Ib2_<;4~grCdOmyuEpmfTu|1+**dk+>JlE> zS5Sh~1sW7O@IFd(_-s?+w+=yFJVvPK0y@H>(dggCFmk$KMj%Eea_Xpq64`$Cdr2+D zPzfk;BoHN%5G4|Hl$Zmevd;j8)55>$@L3KM)!n){MKmw@n3Y$?g7Z-TGN19u2Ns=; zPJ!#l{Cq;QKK;59TTeg*zX;t51OcCr-3rEpqB#N>#}kO2c!uHvj!8#M1n*@7nzVL- zV&)`YBSzN~stog~0fj2VLiI;Z(;zfgld7)p(rpo>Dj%_43^Em^h9!ojhGmB3!Y<*c zVTGE^X*#DZIBmmeE|_AEahhLmVW|Q3`f9@(Tv&>>SRgeSoM!rri~3&IaJ_AwSN&|l zxM2=NdW5A#KdUGaR z`KLqcNyG6#XytL*HV|66*S&2XAk5zmtrr1W%Nt@zJA_uQ$2PbLXk88tAV)^mD(+(B zvw_^IE{uG985MBUmWtp%x3;5o?i>)o1Mo#HY!>|0*GV)&_J-ljT37)gYtLy1AFMPl zNuFj#!_9>Zswp~l3h3AhKOO6cbSxj~*hI}kf>MaSw-FAAB|24VXmUX51dVT;g1+tzl;F;7|&#*>V&$nQc6_y#k7fu;|G@LV>SMTGrn+ie2y*Ta5>A-p< zKv)4B=Yl~CHql(3uu$DO?csBX2*Ul%1bvw3!tD`ljxQs4Vmswb{gH(aSjUSlUh z#HY#oOtg)`9oIuQ@dR4v5ZiRP))zr^VZtw_;QKl~2&5Y2UQNFWWK>;{(Iq+*UHrlX zV$oD>X>_A#pynTFyVF~!D+=j!$(OSgxXW4-MHrnV z;VdnwDX;Q6@~a%qVk`#Ysj9!f(Tiq`HpbMB9yn${PW$^tkIwMyEX__14w1h@C^x18 zF>DZm#OVMehJC?zp?T6^z&_U^MEQNj-c7RzCi24R-H;BX4S$^YJ;KD2+6v0^UY_ z%5RxQc?{b`s-)9*6nPQv5d%>~$Kwny1@q}*y1dl~-tc*eTf?*1KJJ>4@U$-1p?F>j zIUoLeXtFPYE19JAnEra~0eEu#7EY>}9F1MTLce1)#fvnN9kDj76~iy#v>OJg)y( zef?joFc#4=sI#c`l)f+NxIAT~FSL4Mrxal$};cBz^Bp0Dz9&_M0a z?-{E%b{GYYL?69xygukO=2FC6fQmZe6y%#VMi@$sWr27xk<&>&!hqiOR@q)94MfUI zn!$|KfEaxO5u*?hV}gzteQM2MxSjN6(>%p+7HDhu81CVf|50O@Tf@>i>#Nx?jaP{` z?-Xy={Zs}1I0h}^4`87ug5;r<8qAJ<8%h6tGFmA-yPfja1t*M6*45B}cn~hui z(Vv{o{th)41EXhnz5O(4#xGOlXihsyVGf`J-aYaL5S; z$;c~z>%p5L0l}M?mswqZGWQto)h9EX(|L^~3mOjr!0z|uGGwQRh4P^DGur~ zo&(5T!Rd9QFbCKVR~X|j(8RAe#ueDc4VO7alMpyYPFKP<@+C@}jO3WftoeuDQNhRh zE^OXn4}@^)KyM_+QVVXI;)VX+02t#9dYkvg;CeR<%YDm|Tkno3&J?es%34luZUj|K z4pWjTIS^HD3Lzmhh|_gCz7*P0A%Pj(N0qM10AU<74DfJ6?y9?7(;$Xj4Oj~_XO`Pj zQ`G>e07DLwjiy!z-57-K25`|g$oAJVvTLaj#Ki&Dm~vrJpT$>hfhaXlcA)jCkcWpw zfy$sOSHSa-(y-Cg0iIut&u<#91rI`yeVNlAkxYrHGf6ac#gS}5^7c~Tdi5~%G=Uxs ziTk&4`XZ-W#}0D3%hA8&m2^#gLDDt#GxawOFby<;uCa~N!<;_E>7$&U1e7ri0mon+ z*CSLWD4-MlE-_PQ(-?>ffGR8CJ;kB|`J8SC#-uqHw{W^+1W?OKRr>7!*CEK+rU~lu zeZqXY##CsUY;w|}rXu4qlgl*KRAQP2s1F+2E>3rIx=(G#>3)rN-^J7AVJ^}+ZWb@^8CAww$T2&`KJwW)9g{{G=>EAm%4()DKD*jCv{NBj95&h|hpxAWMd z!GVEZE|lGU`UXmXD7B%OfqE87Pyu09jdE4fwm_)rT(veVe!?J66~u~EYH8ztCqNpT z*}XK+bkN7iab{ptI;8FY{P824?n60=zc+u zBK-jV46?uzoF3=&DNca~KckLP3mRL3Z~c8zC?vq?liqzadSrpeQ+BzFjWr1Tn|E|0 zJ(-D_npq≤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 b_7?kq{p(+8(ZA``>3{5f`G5TXX5ao77T5Ln literal 51308 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 diff --git a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist index e086cf7a0..2c58741c7 100644 --- a/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/ru.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist index 5c8d62349..0fbea3558 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/sv.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib index 759ead2c9..808d57c7e 100644 --- a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/designable.nib @@ -1,11 +1,15 @@ - + 1050 - 9C31 - 677 - 949.26 - 352.00 + 10A314 + 718 + 1013 + 415.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 718 + YES @@ -15,7 +19,7 @@ YES - + YES @@ -68,7 +72,7 @@ - SW5zdMOkbGxuaW5nYXIuLi4 + Inställningar... , 1048576 2147483647 @@ -88,7 +92,7 @@ - VGrDpG5zdGVyA + Tjänster 1048576 2147483647 @@ -96,7 +100,7 @@ submenuAction: - VGrDpG5zdGVyA + Tjänster YES @@ -116,7 +120,7 @@ - VsOkeGxhIGhlbHNrw6RybXNsw6RnZQ + Växla helskärmsläge a 1572864 2147483647 @@ -136,7 +140,7 @@ - R8O2bSBYMTE + Göm X11 h 1048576 2147483647 @@ -146,7 +150,7 @@ - R8O2bSDDtnZyaWdhA + Göm övriga h 1572864 2147483647 @@ -250,7 +254,7 @@ - RsO2bnN0ZXI + Fönster 1048576 2147483647 @@ -258,12 +262,12 @@ submenuAction: - RsO2bnN0ZXI + Fönster YES - U3TDpG5nA + Stäng w 1048576 2147483647 @@ -301,7 +305,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXI + Bläddra genom fönster ` 1048840 2147483647 @@ -310,7 +314,7 @@ - QmzDpGRkcmEgZ2Vub20gZsO2bnN0ZXIgYmFrbMOkbmdlcw + Bläddra genom fönster baklänges ~ 1179914 2147483647 @@ -330,7 +334,7 @@ - TMOkZ2cgYWxsYSDDtnZlcnN0A + Lägg alla överst 1048576 2147483647 @@ -354,7 +358,7 @@ - SGrDpGxwA + Hjälp 1048576 2147483647 @@ -362,12 +366,12 @@ submenuAction: - SGrDpGxwA + Hjälp YES - WDExIEhqw6RscA + X11 Hjälp 1048576 2147483647 @@ -388,12 +392,12 @@ 2 {{288, 302}, {484, 308}} 1350041600 - WDExLWluc3TDpGxsbmluZ2FyA + X11-inställningar NSPanel View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -428,7 +432,7 @@ Emulera treknappsmus LucidaGrande - 1.300000e+01 + 13 1044 @@ -456,12 +460,10 @@ 67239424 4194304 - T20gZGUgw6RyIGFrdGl2ZXJhZGUga2FuIHRhbmdlbnRlciBzb20gbW90c3ZhcmFyIG1lbnlyYWRlbiBo -YW1uYSBpIGtvbmZsaWt0IG1lZCBYMTEtcHJvZ3JhbSBzb20gYW52w6RuZGVyIG1ldGFtb2RpZmllcmFy -ZW4uA + Om de är aktiverade kan tangenter som motsvarar menyraden hamna i konflikt med X11-program som använder metamodifieraren. LucidaGrande - 1.100000e+01 + 11 3100 @@ -470,9 +472,9 @@ ZW4uA 6 System controlColor - + 3 - MC42NjY2NjY2OQA + MC42NjY2NjY2NjY3AA @@ -535,8 +537,7 @@ ciBzw6UgYWt0aXZlcmFzIG11c2VucyBtaXR0LSByZXNwZWt0aXZlIGjDtmdlcmtuYXBwLgo 67239424 4194304 - VGlsbMOldGVyIGF0dCDDpG5kcmluZ2FyIGkgaW5kYXRhbWVueW4gc2tyaXZlciDDtnZlciBkZSBiZWZp -bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg + Tillåter att ändringar i indatamenyn skriver över de befintliga X11-tangentkopplingarna. @@ -553,7 +554,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - RsO2bGogZGF0b3JucyB0YW5nZW50Ym9yZHNsYXlvdXQ + Följ datorns tangentbordslayout 1211912703 @@ -592,7 +593,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 0 - QW52w6RuZCBzeXN0ZW1ldHMgdmFybmluZ3NlZmZla3Q + Använd systemets varningseffekt 1211912703 @@ -614,9 +615,7 @@ bnRsaWdhIFgxMS10YW5nZW50a29wcGxpbmdhcm5hLg 67239424 4194304 - WDExLWxqdWRldCBibGlyIGRldCB2YW5saWdhIHN5c3RlbXZhcm5pbmdzbGp1ZGV0IHNvbSB2YWx0cyBw -w6UgaW5zdMOkbGxuaW5nc3BhbmVsZW4gTGp1ZGVmZmVrdGVyIGkgU3lzdGVtaW5zdMOkbGxuaW5nYXIu -A + X11-ljudet blir det vanliga systemvarningsljudet som valts på inställningspanelen Ljudeffekter i Systeminställningar. @@ -639,7 +638,7 @@ A 1 LucidaGrande - 1.300000e+01 + 13 16 @@ -650,7 +649,7 @@ A 75 - RnLDpW4gYmlsZHNrw6RybQ + Från bildskärm 1048576 2147483647 @@ -671,7 +670,7 @@ A - MjU2IGbDpHJnZXI + 256 färger 1048576 2147483647 @@ -706,6 +705,7 @@ A + 3 YES @@ -739,7 +739,7 @@ A 67239424 4194304 - QWx0ZXJuYXRpdmV0IGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativet börjar gälla nästa gång X11 öppnas. @@ -756,7 +756,7 @@ A 67239424 0 - SGVsc2vDpHJtc2zDpGdlA + Helskärmsläge 1211912703 @@ -778,7 +778,7 @@ A 67239424 0 - VmlzYSBtZW55ZsOkbHRldCBhdXRvbWF0aXNrdCBpIGhlbHNrw6RybXNsw6RnZQ + Visa menyfältet automatiskt i helskärmsläge 1211912703 @@ -800,8 +800,7 @@ A 67239424 4194304 - QWt0aXZlcmFyIFgxMTpzIHJvdGbDtm5zdGVyLiBUcnljayBuZWQga29tbWFuZG8tYWx0LUEgZsO2ciBh -dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 + Aktiverar X11:s rotfönster. Tryck ned kommando-alt-A för att växla till och från helskärmsläge. @@ -856,9 +855,7 @@ dHQgdsOkeGxhIHRpbGwgb2NoIGZyw6VuIGhlbHNrw6RybXNsw6RnZS4 67239424 4194304 - QWt0aXZlcmFyIG1lbnlhbHRlcm5hdGl2ZXQg4oCdS29waWVyYeKAnSBvY2ggZ8O2ciBkZXQgbcO2amxp -Z3QgYXR0IHN5bmtyb25pc2VyYSBtZWxsYW4gdXJrbGlwcCBpIE9TWCBvY2ggQ0xJUEJPQVJELSBvY2gg -UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 + Aktiverar menyalternativet ”Kopiera” och gör det möjligt att synkronisera mellan urklipp i OSX och CLIPBOARD- och PRIMARY-buffertarna i X11. @@ -874,7 +871,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIENMSVBCT0FSRCBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera CLIPBOARD när urklipp ändras. 1211912703 @@ -896,7 +893,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIFBSSU1BUlkgKG1lbGxhbmtsaWNrKSBuw6RyIHVya2xpcHAgw6RuZHJhcy4 + Uppdatera PRIMARY (mellanklick) när urklipp ändras. 1211912703 @@ -918,7 +915,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgZGlyZWt0IG7DpHIgbnkgdGV4dCBtYXJrZXJhcy4 + Uppdatera urklipp direkt när ny text markeras. 1211912703 @@ -940,7 +937,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 0 - VXBwZGF0ZXJhIHVya2xpcHAgbsOkciBDTElQQk9BUkQgw6RuZHJhcy4 + Uppdatera urklipp när CLIPBOARD ändras. 1211912703 @@ -962,8 +959,7 @@ UFJJTUFSWS1idWZmZXJ0YXJuYSBpIFgxMS4 67239424 4194304 - QXZha3RpdmVyYSBkZXQgaMOkciBhbHRlcm5hdGl2ZXQgb20gZHUgdmlsbCBhbnbDpG5kYSB4Y2xpcGJv -YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA + Avaktivera det här alternativet om du vill använda xclipboard, klipper, eller någon annan urklippshanterare i X11. @@ -979,8 +975,7 @@ YXJkLCBrbGlwcGVyLCBlbGxlciBuw6Vnb24gYW5uYW4gdXJrbGlwcHNoYW50ZXJhcmUgaSBYMTEuA 67239424 4194304 - UMOlIGdydW5kIGF2IGJlZ3LDpG5zbmluZ2FyIGkgWDExLXByb3Rva29sbGV0IGthbnNrZSBkZXQgaMOk -ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA + På grund av begränsningar i X11-protokollet kanske det här alternativet inte fungerar i vissa program. @@ -1012,7 +1007,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 67239424 0 - S2xpY2thIGlnZW5vbSBpbmFrdGl2YSBmw7Zuc3Rlcg + Klicka igenom inaktiva fönster 1211912703 @@ -1028,7 +1023,7 @@ ciBhbHRlcm5hdGl2ZXQgaW50ZSBmdW5nZXJhciBpIHZpc3NhIHByb2dyYW0uA 256 - {{23, 175}, {385, 31}} + {{32, 175}, {385, 31}} YES @@ -1053,7 +1048,7 @@ cmthIGlubmVow6VsbGV0Lgo 67239424 0 - Rm9rdXMgZsO2bGplciBtdXM + Fokus följer mus 1211912703 @@ -1069,14 +1064,13 @@ cmthIGlubmVow6VsbGV0Lgo 256 - {{23, 128}, {385, 17}} + {{32, 128}, {385, 17}} YES 67239424 4194304 - RsO2bnN0ZXJmb2t1cyBpIFgxMSBmw7ZsamVyIHBla2FyZW4uIERldCBow6RyIGhhciBuw6VncmEgYmll -ZmZla3Rlci4 + Fönsterfokus i X11 följer pekaren. Det här har några bieffekter. @@ -1093,7 +1087,7 @@ ZmZla3Rlci4 67239424 0 - Rm9rdXMgcMOlIG55YSBmw7Zuc3Rlcg + Fokus på nya fönster 1211912703 @@ -1109,15 +1103,13 @@ ZmZla3Rlci4 256 - {{23, 73}, {385, 28}} + {{32, 73}, {385, 28}} YES 67239424 4194304 - TWVkIGRldCBow6RyIGFsdGVybmF0aXZldCBrb21tZXIgc2thcGFuZGV0IGF2IGV0dCBueXR0IFgxMS1m -w7Zuc3RlciBhdHQgbMOkZ2dhIFgxMSDDtnZlcnN0IChpc3TDpGxsZXQgZsO2ciBGaW5kZXIsIFRlcm1p -bmFsLCBldGMuKQ + Med det här alternativet kommer skapandet av ett nytt X11-fönster att lägga X11 överst (istället för Finder, Terminal, etc.) @@ -1128,7 +1120,7 @@ bmFsLCBldGMuKQ {{10, 33}, {438, 246}} - RsO2bnN0ZXI + Fönster @@ -1169,7 +1161,7 @@ bmFsLCBldGMuKQ 67239424 0 - VGlsbMOldCBhbnNsdXRuaW5nYXIgZnLDpW4gbsOkdHZlcmtza2xpZW50ZXI + Tillåt anslutningar från nätverksklienter 1211912703 @@ -1191,9 +1183,7 @@ bmFsLCBldGMuKQ 67239424 4194304 - TsOkciBkdSDDtnBwbmFyIFgxMSBza2FwYXMgWGF1dGhvcml0eS1ueWNrbGFyIHNvbSBrb250cm9sbGVy -YXIgw6V0a29tc3QuIE9tIGRhdG9ybnMgSVAtYWRyZXNzIMOkbmRyYXMgYmxpciBueWNrbGFybmEgb2dp -bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg + När du öppnar X11 skapas Xauthority-nycklar som kontrollerar åtkomst. Om datorns IP-adress ändras blir nycklarna ogiltiga vilket kan förhindra att X11-program öppnas. @@ -1210,10 +1200,7 @@ bHRpZ2Egdmlsa2V0IGthbiBmw7ZyaGluZHJhIGF0dCBYMTEtcHJvZ3JhbSDDtnBwbmFzLg 67239424 4194304 - T20gZGV0IMOkciBha3RpdmVyYXQgbcOlc3RlIEF1dGVudGlzZXJhIGFuc2x1dG5pbmdhciBvY2tzw6Ug -dmFyYSBha3RpdmVyYXQgZsO2ciBhdHQgc8Oka2Vyc3TDpGxsYSBzw6RrZXJoZXRlbiBpIHN5c3RlbWV0 -LiBPbSBkZXQgw6RyIGF2YWt0aXZlcmF0IHRpbGzDpXRzIGludGUgYW5zbHV0bmluZ2FyIGZyw6VuIGZq -w6RycnByb2dyYW0uA + Om det är aktiverat måste Autentisera anslutningar också vara aktiverat för att säkerställa säkerheten i systemet. Om det är avaktiverat tillåts inte anslutningar från fjärrprogram. @@ -1230,7 +1217,7 @@ w6RycnByb2dyYW0uA 67239424 4194304 - QWx0ZXJuYXRpdmVuIGLDtnJqYXIgZ8OkbGxhIG7DpHN0YSBnw6VuZyBYMTEgw7ZwcG5hcy4 + Alternativen börjar gälla nästa gång X11 öppnas. @@ -1241,7 +1228,7 @@ w6RycnByb2dyYW0uA {{10, 33}, {438, 246}} - U8Oka2VyaGV0A + Säkerhet @@ -1261,7 +1248,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_prefs @@ -1274,7 +1261,7 @@ w6RycnByb2dyYW0uA View - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} {320, 240} @@ -1359,12 +1346,12 @@ w6RycnByb2dyYW0uA YES - 1.227310e+02 - 6.273100e+01 - 1.000000e+03 + 122.73099999999999 + 62.731000000000002 + 1000 - 75628032 - 0 + 75628096 + 2048 Namn @@ -1398,12 +1385,12 @@ w6RycnByb2dyYW0uA - 1.000000e+02 - 4.000000e+01 - 1.000000e+03 + 100 + 40 + 1000 - 75628032 - 0 + 75628096 + 2048 Kommando @@ -1426,12 +1413,12 @@ w6RycnByb2dyYW0uA - 6.900000e+01 - 1.000000e+01 - 1.000000e+03 + 69 + 10 + 1000 - 67239424 - 0 + 75628096 + 2048 Kortkom. @@ -1448,7 +1435,7 @@ w6RycnByb2dyYW0uA Text Cell LucidaGrande - 1.200000e+01 + 12 16 @@ -1458,7 +1445,7 @@ w6RycnByb2dyYW0uA 6 System controlBackgroundColor - + @@ -1469,8 +1456,8 @@ w6RycnByb2dyYW0uA - 3.000000e+00 - 2.000000e+00 + 3 + 2 6 @@ -1481,16 +1468,20 @@ w6RycnByb2dyYW0uA MC41AA - 1.700000e+01 + 17 1379958784 + + 1 -1 0 YES + 0 {{1, 17}, {301, 198}} + 4 @@ -1502,7 +1493,7 @@ w6RycnByb2dyYW0uA _doScroller: - 9.949238e-01 + 0.99492380000000002 @@ -1512,7 +1503,7 @@ w6RycnByb2dyYW0uA 1 _doScroller: - 6.885246e-01 + 0.68852460000000004 @@ -1523,6 +1514,7 @@ w6RycnByb2dyYW0uA {{1, 0}, {301, 17}} + 4 @@ -1531,6 +1523,7 @@ w6RycnByb2dyYW0uA {{20, 20}, {318, 231}} + 50 @@ -1548,7 +1541,7 @@ w6RycnByb2dyYW0uA -2080244224 137887744 - TMOkZ2cgdGlsbCBvYmpla3Q + Lägg till objekt -2038284033 @@ -1567,7 +1560,7 @@ w6RycnByb2dyYW0uA {{0, 0}, {1440, 878}} {320, 262} - {3.40282e+38, 3.40282e+38} + {1.79769e+308, 1.79769e+308} x11_apps @@ -1611,7 +1604,7 @@ w6RycnByb2dyYW0uA - QW5wYXNzYeKApg + Anpassa… 1048576 2147483647 @@ -2186,28 +2179,26 @@ w6RycnByb2dyYW0uA YES 0 - - YES - + -2 - - RmlsZSdzIE93bmVyA + + File's Owner -1 - + First Responder -3 - + Application @@ -2221,7 +2212,7 @@ w6RycnByb2dyYW0uA - + MainMenu @@ -2466,7 +2457,7 @@ w6RycnByb2dyYW0uA 196 - + X11Controller @@ -2476,7 +2467,7 @@ w6RycnByb2dyYW0uA YES - + PrefsPanel @@ -2740,7 +2731,7 @@ w6RycnByb2dyYW0uA YES - + EditPrograms @@ -2763,7 +2754,7 @@ w6RycnByb2dyYW0uA - + DockMenu @@ -3315,10 +3306,8 @@ w6RycnByb2dyYW0uA YES - + YES - -1.IBPluginDependency - -2.IBPluginDependency -3.IBPluginDependency -3.ImportedFromIB2 100292.IBPluginDependency @@ -3376,7 +3365,6 @@ w6RycnByb2dyYW0uA 169.editorWindowContentRectSynchronizationRect 19.IBPluginDependency 19.ImportedFromIB2 - 196.IBPluginDependency 196.ImportedFromIB2 200295.IBPluginDependency 200295.IBShouldRemoveOnLegacySave @@ -3391,6 +3379,7 @@ w6RycnByb2dyYW0uA 24.ImportedFromIB2 24.editorWindowContentRectSynchronizationRect 244.IBEditorWindowLastContentRect + 244.IBPluginDependency 244.IBPropertyAccessControl 244.IBViewEditorWindowController.showingLayoutRectangles 244.IBWindowTemplateEditedContentRect @@ -3412,6 +3401,7 @@ w6RycnByb2dyYW0uA 272.IBPluginDependency 272.ImportedFromIB2 285.IBEditorWindowLastContentRect + 285.IBPluginDependency 285.IBViewEditorWindowController.showingBoundsRectangles 285.IBViewEditorWindowController.showingLayoutRectangles 285.IBWindowTemplateEditedContentRect @@ -3586,6 +3576,7 @@ w6RycnByb2dyYW0uA 379.IBPluginDependency 379.IBPropertyAccessControl 379.ImportedFromIB2 + 380.IBEditorWindowLastContentRect 380.IBPluginDependency 380.ImportedFromIB2 381.IBPluginDependency @@ -3664,13 +3655,11 @@ w6RycnByb2dyYW0uA YES com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -3689,330 +3678,330 @@ w6RycnByb2dyYW0uA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{168, 821}, {113, 23}} com.apple.InterfaceBuilder.CocoaPlugin - + {{202, 626}, {154, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - com.apple.InterfaceBuilder.CocoaPlugin - + {{349, 858}, {315, 153}} com.apple.InterfaceBuilder.CocoaPlugin - + {{271, 666}, {301, 153}} {{444, 200}, {484, 308}} - + com.apple.InterfaceBuilder.CocoaPlugin + {{444, 200}, {484, 308}} - + {{184, 290}, {481, 345}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + {{58, 803}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{100, 746}, {155, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + {{68, 585}, {496, 271}} - - + com.apple.InterfaceBuilder.CocoaPlugin + + {{68, 585}, {496, 271}} - + {{433, 406}, {486, 327}} - - + + {3.40282e+38, 3.40282e+38} {320, 240} com.apple.InterfaceBuilder.CocoaPlugin - + {{145, 836}, {347, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + {{67, 819}, {336, 20}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + + {{530, 368}, {171, 83}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{84, 676}, {127, 33}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - - + + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + {{20, 641}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + {{79, 616}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + com.apple.InterfaceBuilder.CocoaPlugin - + YES - - YES - + YES @@ -4020,9 +4009,7 @@ w6RycnByb2dyYW0uA YES - - YES - + YES @@ -4060,6 +4047,15 @@ w6RycnByb2dyYW0uA 0 + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES ../X11.xcodeproj 1 diff --git a/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/sv.lproj/main.nib/keyedobjects.nib index 11f4bc9352d3b6378a85a767ea51b1544a0c6001..ae0faf9bc6c4343371cc792e9b9a698f6e07fe01 100644 GIT binary patch literal 52576 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 literal 50165 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 1 LprojVersion - 75.1 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist index 15f4f1b9e..866f0f1ef 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/locversion.plist @@ -9,6 +9,6 @@ LprojRevisionLevel 1 LprojVersion - 73 + 83 diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib index 96b6f1fa3..14a5fd064 100644 --- a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib +++ b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/designable.nib @@ -396,7 +396,7 @@ {3.40282e+38, 3.40282e+38} {320, 240} - + 256 YES @@ -405,6 +405,7 @@ 256 {{13, 10}, {458, 292}} + YES @@ -421,6 +422,7 @@ 256 {{18, 210}, {402, 18}} + YES 67239424 @@ -452,6 +454,7 @@ 256 {{36, 92}, {399, 14}} + YES 67239424 @@ -469,7 +472,7 @@ 6 System controlColor - + 3 MC42NjY2NjY2OQA @@ -488,8 +491,9 @@ 256 - {{36, 162}, {385, 42}} + {{36, 176}, {385, 28}} + YES 67239424 @@ -508,6 +512,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{18, 112}, {402, 18}} + YES 67239424 @@ -530,6 +535,7 @@ vKDnmoTkuK3plpPmiJblj7PpgormjInpiJXjgIIKA 256 {{36, 141}, {385, 14}} + YES 67239424 @@ -548,6 +554,7 @@ h4njgII 256 {{18, 161}, {402, 18}} + YES 67239424 @@ -568,6 +575,7 @@ h4njgII {{10, 33}, {438, 246}} + 6Ly45YWlA @@ -1113,7 +1121,7 @@ uOWPjeeahOaViOaenOOAgg 67239424 4194304 55W25ZWT55So5pmC77yM5paw5bu655qEIFgxMSDoppbnqpflsIfmnIPkvb8gWDExLmFwcO+8iOiAjOS4 -jeaYryBGaW5kZXIuYXBw44CBVGVybWluYWwuYXBwIOetie+8ieenu+iHs+acgOWJjeOAgg +jeaYryBGaW5kZXIuYXBw44CB57WC56uv5qmfLmFwcCDnrYnvvInnp7voh7PmnIDliY3jgII @@ -1252,6 +1260,8 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 {484, 308} + + {{0, 0}, {1440, 878}} {320, 262} @@ -1450,7 +1460,7 @@ s7vntbHnmoQgSVAg5L2N5Z2A5pu05YuV77yM6YCZ5Lqb6Y215bCH5pyD54Sh5pWI77yM6YCZ5Y+v6IO9 6 System controlBackgroundColor - + diff --git a/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib b/hw/xquartz/bundle/Resources/zh_TW.lproj/main.nib/keyedobjects.nib index 4c99736818c82e681197832fade0bbc79cb85915..3f516a318ba58ab18905864a8a445ffee71acb4f 100644 GIT binary patch literal 42003 zcmd3P2VfM{*8eTDJG+^kVK=>JQ%FxpLhro`0YYyfWeI_hgfwbkE=`I8D!m)3Ac&~g zP*Fj|0*HbrDmHAOC|D2>{^!o@CL2i5_uluu@9%qL+nsyQIrrRi&OPUMXR?b6@=ME7 zQa(T!5k!%I49JMg$YW?!g`=c2zo>9vR9R8+u&At(oN@W^)zGM-?D3AAvQkfk=Wl)w ziO4jnXQyQS%iOH8EEQ*38}!ZS?U?Gw?dZJd2^-ynBxFIUs3~fRI-t&|3+jRHL(9>6 z^f-DF?MF|c=g{-$1@sbn6}^Uzpf}Mm^cFgfPN9#`r|2_u9(|53piAfqx{7{9zoF~c zgcaNXC*VZf7&pPqackTL{&m2ead+GY_r)1_G|s`fI1d-#GF*-;@MJs#&&7-IV!R5k z#%u99yczGnJMoivKYj{7hhM>m@G<-rK7l{L=kVwF3;YAVh%ez^@HPA=u@Z0MOQJ|D zi6ikOi8LYY;9Yyt6aMxh1L5x=GK`EMnIxO!kpeQ2l#uCU9+^+>CyU84vW9FXkCN?V z57|$iA_vJ!@e&!JOM5D8J;veYj{N%Wq8AI+;GBh#_*xxyy0`hw}$TwKf~|87_Jz8 zMUvq+!|(Jj!ykrgh8u>PMr<@2J&cmkVze23jUmQRW0=uyY-o%&CKywUsm5l;=EgS0 z&c^P>9>$)=zQ%OpK;sDGNaHADwlU9GV4P&EFitkkFwQZ~HO@0GGA=eQGp;bMHEuF) zHf}Q>GM+G=G=6CO-1vp@YvcFETgKZW5lv#C7%oPL4aImdK};5#i!H>~Vmq&J!1ii^Rp^GI5o-T3jP;6gP=m#ckp)@kw#N_=5PN z_>%at__}ylJSLtL-xEI)KNdd`KNY_ezY@O_zZZWJFN?p5H^iIbU*atjH3=rO$-~sZ zWHtGiLQJ8iFq7TX&=hS-Fr}Fqo0^!Knp&CKn>v_!nEI3XrU9lb(|A)Uyel(JHO(+p zn&z99npT_Ez&BN<9j1No`lRU@`1`WyEz|p^PfVYhzJX8Qnl73ynSL}~G5uk>W?pJu zZC+zuYu;eqYJS|j&-|qMY4btzOXgS2ubE#rzhOR#TA1H5pEZAE{+R2eK2zpT%%7Ui zdsIk@v|ZXE?UWvqc1gRX$E7{eUg-&GpY)`(UwTS6rAE^tSYl^saPVIw75u-jhyA?@J#@r=>H}htgT; zBk5!5ob-wGsq~q2Uiw`6Li$qrO8Q#5Ablf!D}5(@Fa020lrBj>N`a`-V{V83SZb&z!zoc8zZ40ts3$aj(U@=&X7SUp|m@OU_$zrj{7RA!Q zVzt;To)#~Qx5dZeYw@%ATLLVBmLN;8CBzbH3A5NO;g$$Xq$SGI&=PHlvBX;9Eb*2E zOQI#ol5A;YNwK6_(kzWFO)O0<%`D9=EiA1q?c^Z&n*67HUA`gTl>d@%$+s1xV1+1D z5fp=BR7Az3m=zC2QY?zBC`tpxs@N1y#Y^!f8H$hMtN1DYN`Mlm1S!Evh!U!VDRw1X ziBKYyD5aqit;8s?N}Lj}Bq)hWl9H@6Qc{#uB~59pG*Ox=&6MU!3#FyfN@=aMQQ9i) zl=eyorK8eG>8x~7x+>k2?n)1(r_xL5t=y;dQTi(BNh7Ap@Z4=PKPrOGnpA?0D^ z5oNiuLRqP-QdTQ#l(ot_WxcXN*{Ez%HY<-RRmv7+tFlemuIx~DDvv3?o>iVxo>yK_UQ`Y$FDWl8uPBFO&aLdmERN*UZYV?a?++2E+0f~?Zg zQGGMgb+->{e7* z)+ehlE6-7qX|?vv7@QCE6gYgC*6DWg;p)z>4!ZfU!(dp)lro@Vq)v-|fl3(N z$cUMdml@rl!fUK*WaK4AUSTAT(RC_PMMh#6UGIs674ZF`Q!pWEs4;2+>}o7>c2t8( z`47!dbJPOHN-ixc$uG=P1z@6MF$7&XSzKJFP%G3LwLxu%>hs_z9j?DAgg&;Qwx}Iy zugylE^0F*oG(+oUXy1(LH#)m|KOIr0D%1(J9}R?*mzEVx)PDp?_3YHSD5of^dNw#| zT~RmG9VWsVyOpY@&3ZRIQLini7wV1LgJ@g>JIV&ZsE#uI%08&CI_U{(SCo$Wq5fz9 z%0L6rAT$^aK||3nG#rgUBhe@{8fBs}C<|qy9F&V3Xe`P@<4`^tk0zi3G!Ye|B2T-3Bx=wvm-LCFZA6K7H zpHbgX-&RjDoWbx=hKDgcn&B}FXEB_^u!G_83>Pq5%gNrsp(ZUI7-X%3pL%~vs_eOlH(ZCH{-snY)63_p!%wk>VFol+kiHr zO=vTE6jh-uXe-)=wxbZ{JoM zs9vh&eT|YmXfJvK?F04aEqj(ZCYGut>U4&G%V9r^SQ~MBbROr(nJ_V{WP+}fFQS80=pbJVu5j z#AtkElx3AU^ln~9hpW(G)E=bZqSdv0kHV7m8#OdF6%0;UNl`(8W@566i%T=LrI%Sc zu4r;Ay_>huJ6q5@=v_{a4;YgCZ0AMQ#tN9!zvXtZsD#s~PxMLj9?WBq8dldVegLz0 z+Bu77LF6H7s3z#(8bO~!pQxaXe=z)KcJ?0+Z0MgeD5t1+YOC7H^cDJA)0S|xVO`^V z3*&s}9Ooj86RAdN<3#XYHlQC7pVG_dXY>n9zcxuQK`zMYl zE^&-4)kRaAf@|ncje;1p*@x%`bbAy1g>IqS7-5VFrdYrRY{dFzky~Pz&f=oNTt^A0 zf@Y^+=+2IU0$2tW-3qeuxW(>T$cjv7@9S-!WN@Rhz1DYP=02vl@F^9}1gc zs01uw3zo3~COe}%n>Q{6>wS&kNQMJp;-*h;+$7Q7vRP%KeR`9WmWlSX#+8+yVJn11 zHtdPLus8O>zSs}@;{Y6pgK#ho!J%jew&QRdfg|BvLmZ8+;aD7p zd<&^fR7GuM4X_e572YMNiE51XO)K*3(Wd|HBCBoeua12XWORl-d{1xzoxl-v1UJwH z*(>Ib{dK_U6awmilhBVi88^ZyI2EVCd}icNbHIF#)wolWBRj++?LRfiCU}p$uRJF| zH>-O|7HEOC&Tv!QtO_?n?cq}H`Q27JZl$gC6mBFZ=a=P-gJq1{;&!+_%!4KG;i zX?jl`ai=N_u2GvAoms7wZejH{U2xZ}xGU}kipo8o-ik{JK6KQg8~#CW+XMI9hI`^( zxHrBJwFfHn)-VAsvGd@>F&U_-R_xLGV#yhoRhZ|7+5#+mtB$3{>(qrP(SD44gNr5TRmtdcCSF+gR{(k}U>+7f|9t(f`$xt(t5 zwyg0OoQ1Qw32DjjZH8}xj!o9Wr_54UPdbYZJa!8ns~b6Q&77r|gHtI326dxWYr*63 zc!IXz+o~PvFgdso7vW+zlhe)*+Ll?EH4V%qsXU#fr+koe3 z)?opdpoK6)nz`Y+shJ0&FcOey_2cFt1&jh%1uzh)De%5=T4m*@P6JVwd3ZoG58-$z zj>Zq+hvDxuFb*s5N-uDkx92+7l@-Hk>aKQ!znwfyEfCUvoj<$7?c4#I`#V+}Dt_Wl ziHDB+RRPwnn-eN@Os)|HD9#2D#wJjlUZ6OA?-T_$v|I32-Oy@=vbTC4SjlSJ*W^F3 zeS3ku4Z7{qt%YVO`T$qGimaaH70ae%oN?@P+&^N-*iN@C)85V~JZS|q3STRI^<55_8C5p4Z0umW!!%{`Alun@;~77Tj2B5U3?A) zJ_kGWbvZsfvq7dc(4o0tx0RWBmp#)~=w+t}M%_JSr}0(%EB>vT(=v6mnhBh0tTby3 zQOMa3Xk9%~f_RDJh!Vuc$Pi@6mMU z32~02q{NZiH8&69YH;0yU~|l4-EJjC6L~BN##r;zrCPYDFZhnPI)D+j_Et;PF=`eF zGg}>HrDn4YFS7|q&G9tCq6ZCeca+3SO;(evRyPyy3GvfiLQTj|{7C=_#J{1fB%~(v z2ks(BBwh;sXkb=Jo}&!j=$;EUZv(UPAhgn`Q!~LoF8E!P@2Rj^uR(Gz45-*>7rU4%c#3132%sy~GTUzRW!sr=b^w3?5E&)at6AI<~CxvT@aH zaZg4*Bj+`r{gC=d9oj&?tWjV*3bf&2r#7@K7%5K3Zz;r0 zkkh5RfO}otXVYpKt%5sXUS>Urn!=1BJb@%K*yiKENj5a%1i?_F^TixUB=BfXF zh(=R^gYdgJ*ajR_6YKFUk&U0_m~Wf4 zEqZkVGK{vMEkVzTxg*!V7wvTFc*NKhpEwRe9$+X+MX8zAkfIVu z;6OxFSO#%MVQyAQZpZAR^0Izeg^q$6EeAI=6C~LkRG|`7VfScmH#4S#5Lz%;)gC=JP3-&wb;#$z8c~?vTRwHrc1%7;w7U{EmghB(HQ# zEGjQ`xN}khoRk442Y{0!cW{C+olK|Dsnv>kSbbJ~&ZU@5z-**8;fmR~Ip6PsA34kS zxOAp7^%X>C;Sj1)MrYGGw1m#1^R>XFQ&!G|ypp2w!rab91w|#Wksb(nJng;uy85E} zy!wKAz!P1>{(>*K^{JIoqKj}UeSoKsqN`I#mf+Js^%A<2E~5|8hv_49IbA_lLcpcb z#8Y0J&Wz%$90w4qec)Ll2$nhnaHXIqPs!If%U8%mJzNWsa z9)#SBv-4`nxeu^IeWg>1v%kmauB~*Jo}AKlB>akQ`Hq6z>L`#tPWNo1dt6B==X_{w zhHLxmGPoqIT4^+Ew%=*Zj@E6>o~6%KD@{}NP4$>-XU#LGsZIZb9VdMa)PMh7>i-s~ z|Is3=Z@uR1u8d=CGq#2vqi<>M`W^K|9qyXGOOMkNt^^v`iFZAbC-zW}>xr^)8Sf6X zW$r55H@<4&O764!&xARGyj?{;EI4P><8H|4Sy*=;!@7G1Xsj z{hWS5zocK$ujvK)4gHpWN57{((2MjE{gM7eFVmmtFZ2q%N`J)>piaNh-$6z7Ql_4? z^>uyZIYro;_Q{&UvsBP3LraPcfQ_q`(9{xG9m~s#O0y~)PL(&|7ER1X=bXFl=rgDu+*RoW>1Ylaxx$KK@bEi7-7?_v!s5cUQ<72xVH**yZfBG3c;*SdQ|XG&wa{k4T43G(M{Zp z_az`ffxa3DR{DeBDR|*H!5c>lzR)kmM*0Ib3PG@Y8<>^NN#(m}Ueg$;S2r|Cb}7l4 zTv}sRwfX7D4gSEA@J94!`AQZZx>XhLqfZ1{6y7k9}+)KT#{t2t-6ZIprde*Go zaM2yg=?+srbvg%~VxZRpc#jmKIF+0&VEGUAGhqFk>%us7(sm(UNDvZ*Bq3R7q@Gv5 zQomI%s+ZNPXWeT%nkd6C5gH3kxY>XXVLS--KUcpnLyw>SOT`tT9SAS}E(`G`@OFOe z`0(6Iea(-Qa|c-m4Ro^5Rp{nM!(sJn^@2u&p8RYEdnYZ))VL)m9Js&Ak81lo;Xaqw z6VmA%A%V_AJGkG2!cM;ea3JG~3LwBM0e(3^ zX~o=;a@Mg&%DIcnqbpla4d6}K+tY;k@V_khCYP6f23p2;$}#sveF5dv_W~CJpP-7lJnGE$&A7U3QI7dx zpA>>T>R<>IXS^`MjiILMCH2P|hWP#_HPxBT{dYnxp#n52=`M}>2{h_rAt$y*@_nU> zxqR02Ije(M(6CBjrW>(`)t}X0YKYaO-$aWKHR<15#pZ+blij3$1*Csjmwo`>oh)t9 z-%)UyE0bPcTR4Bj#fqN>^l?`f7rAvR3&?h+~KYJLnNKFR18SI&P`cpcql9#ZJPbxc3&lu%J1f2TK)_-WVqECu+ER;-ohRT!&V73CHkd;cej^d`dVj zoKROVOw>_O!D0}a3}#qi*z?Yq{xoRd`@#o&N-?h&9A=m@4BiRy=)ANIt6z7cjhlmo zyZ7Qh2kLjMM*SG%U;xKLbOlUsIp2!8gML>_Mv8fqTdwf|g)1xOx>5pa$!$wU>6o2E zv?PJcO|Qz%n^iH_9=z(RqlZ1DZxV+MRLoUNR$WaYb@B7HaKW7)kztdIpVa2SL`qX_ z{|sS4TFSkQ*(K1$x83|INcsoF#~ZUKV4r)C=LAjlK$g7o2n^wb5}ytd6oCE$*Vz(v`4fT$%PwM`Y*Lsj|yJQ~La6Y5g4oA6WV2ip4byrx0!juHUiN4RIKvCdv#+e60sS z(nnkCQEqG9xzY`3u+s4XLlblj(l{IFenU%IqV{7rNR3gepnwZ#u`u<(ozjG@yP=(- zy(UebQvzuQGaORA593b0MGI~B?sD?=?A{IC=o~{6zI*2mp5ag~$siuDwB~ZO2Xi=) zJ%mpxFF}I?kLIpNlU4>AT9aOyE!OzSx)30Jd#`wehXNBEJP62m3tHDoLLqzQ_X|ed zt>B#1zJ_#nR_zRjyI9ro6lqSyamF+Cu{s!7ZCS%=1ZOpjvzj*h!kC?7t~ym?3g8k8 zAfhP-gkljyF(oKB1#8$u{#`KyW+gn*>3bu6Q2&a)XKL8iYuM8tEi>{2?`_MXxBHDO zkJZ<83dzxbzEf33lO0@D@EEQt(U9%eRHbDds*(p0w_%(ipAI)nAX^L*8IENb@K|osmv{}mltpt za0iCF+^La=VQOD9ysk|xuSkKk+A`b@3J&$|kqpN`E(hJ6QF|_#Ho7zF#(j4+?{+SW z1%IWF)V|3AY;zePpNoL+e0Vn%*)z_R$L8!9(2T2N3YmR@2U40mIh@X(-e*V$4x@t& zWI*3_unmFUCWSkC@Xz`NvhUY5W4X48JafvaxLY?kx2Fv6yK~!-;Z9n4#ThKN)N(G3 zTkr_`UOPp@#~_85+@;W&OQC}Qs21t-M#jX1EAUz3k3Zcg|E7ohffV2|PW`r@=jB>nqg`*>X5fV`8+ug5j#LXREMB z-^UD}-o%y6(xP*qO)F@oHsKJn7R^E6uIyB^w8~*qQd0pG1;|>xr#}tXs|?qj;AcHG zHPA7!xBwDDP5^E(FR-|0cEb#}jfj_X7#_&*kdL&2jvHj01fZ=(inbdC7beeWQhgX6 z#PDDpl4p${yYk6-CtOT3rWuO@kO;Z(8=g+^x;`phKDmes*XIY z(I3VRsL8`JJc8kodJ;B!#V0Ek_Mbc|r=Y0RQAf@dT|;Y(QIK6Ge4kjs|<5B(q!!PQ^GICZQ!zf z8Q^;9#5&dz3>3z7u>5*ACN)tWa{jRBjvs_Z&L6J2{Qx>}87SBY6pZ2&sDpAH#cpT@ zoNlaw-?yr*8J^7>>^g7tLN|=tAyFb5chH%}oyNzEyNtVyk82Rw+r~Y{y%-svFzz!x ziQ|m>jZYb$Ha>%m#%GPs;ibmsvBCHPd^$)XjZYe1HolT+4TBRbC0TiSP#VyY)x03k zt*E4LQ6U^L$>K=r9*!(Xoa)JXfYE8`?b3l$iyeAC8(MTODk*fe@Pk|p$HwOX@|qX! zpyMI=xn<+D18Go^E1y`%>mDVJ()?+BP+o+9Lc-lw^>F0pjVptSME8<>y04k}`J9>c553@?oAVA3m*kx=l|{$qG9{IFeX z{a|E=RQ=nJ^^CdkRi1!1zGi$KBz)L-#Q28ssPRqXG2>gtD&srwxe78MJx@(0<$UyN^6L1oMf6wqDMm!m@Sp`O{HZ#yQo8hheYdjk~OG+v@z?Lm4&uD`K z{uu^+&v?oR5rOdoc&*~aLJl0)JDbn&0*3Er7~agTpWu&y;B!Fm(;C4~yNK{*1Qrp< zMIV3OFz5Kq_4JA{S;vWGeC7wcF5;zPy;8=Tsht_|V8ovhKWiGO0GAhO zkZ!ehv?HYbTMe)94~~=YwqW5wapq)Ny&*rxAv$^tpylbExla*^c&mtY;f%_3UkuJ5 zR}|DqTSS9s6d^sfgyA&|Z}?a=BSrKOCD9_vq9QgBt;YATQS=nOL~qfDm_=XF4_0aw zD0RY*|4KC;8o4)B5yG@AXPTe$@Q24avHEQW}o zbPkRa?VbX=1(z;o_#uXu@ks39?1A#MRJY=|7^PL+8}t9tTDF8^Q|_gIsI!Z)dYzr& zM|h#V!8pzCRM*+H$VyBUleURTHFfpc%E(1f$8JDuL{;N6Vj7M%RuP$(g*?4eZ*@># z2TQ>4O1>wa%>&0_d@wuj#GUR|P}EP=i~3?4v2B&u)|F0n*_!%iv!mEa>%p z^zWe2$Z%C;hp2kV#UY>)Sz@*uxtkdrcHr8OlX-Dj*dyh&Cf)c9OnN?_bZs6URS%BP z=UlUwAG_&W01grqUf|Pa@*OcvEao!_2Wwz1Ie%cdRx-Q=<`LlA>LGB}E`+u?8K-iD zc4UWGop3d&77-kDBF@k>?`4L!an18}LOg2fx*9>XE)yACHe08CC&N3`gTwM%e#%{W z?pI&wl9JrisXhyh?`?y1?mUDvyylpQdvp;dE)kdN0np6NNsowtMmVF1Tlo#?S2z+*ZF%TY))`%M*0%^+wjD2v)T}OFphiHHWy9AePflF5K zOZJZdU{hx4)Y5E+qc-wR+$lb$hpgafp1)&1kKx#lxJTSubL@xVXBa*Jr+#XV@;Cu2 z|L7=>e$r1n$|D{SpT*JQPRM`3Q680_jDscq9K+A@*Qc|m-dLIIOycPWc06llB9reC z%G|b1z;7||%aO8EIlnK$eo%wIO}^t0mirv85s!**>b$?i@N0GP{*L&rJMW-;uhizf zrB>Ygmw7)e0(w?FTATM*89u~$e<^#RxWH8`(|PxC=e=A%=w6F`x*yp80@y#w*+1;s zy;bkmv>>^9D_1QAoDQ3WHR88Cc#Y*(z5)Bge1Hv>jROc;UJYg!c5{uO;g2xFRo?E+ z5n2>J!7+7WRxO1J6R(I@^@Z^k!|&FyGZ24A+r>Xz8)UvSc$?vO^zHH3%6@s7)tlo< z!y!hU$PaGU;uUs0YfOZbtZ-6Jz;d|z{LCGYN7z%ZF`0n+i~N%JAUbhg0vtH_L2maQ zsi7q_R`>v6y!HDvIIq-d$?=VZ$;;%e>(6P1&(^`J$NoT-BrQ*#t%YRQH31#JI_flI`B+QHPu)YjCFpMw07 z5rN^ahW5$IFYE*0Q)iTA>IA7oQ)g2bQ&&?rQ+I~HX80<@zcYND5me7{26Pb)O;;ah zFf}*z1AtisoSfE8DbT_2HyLom+%?ERb<*RomHo;z#5B}2439UBfV9mtafvBYyaHR> zaE8BQ__1iKfY>DO`*{F#Hq4Ke`y3u1?wvF&D(I8T^Am&FH^#*+?LodpC!Z;=0bQpxwyr+zL$eqab68>$HkC&%e4vu@w%X0E~GpK$xX^ zWRK3Gb2YMu?w)||pvw1$o8DZ@uKaFkBUh(S0hSA$RD)UsK*9z2`w>p zB3BHr8%l)VAz__`M*$*l2R()>4ed=sgkgqsveYmEl5nYLH@<9mpX@+q4I*Ioj?)IF z5rC1|DI60=;C{v<#v7*Y!ZI?`5Mb&G zz?8GpL?*#b-`jLpxL{Z=OrYV$X+k%{Z8$bMUf5;oMh>C1VrOG3Qj8DK-Xv|j++b06%t)%U;>gK^B}HK{_i6O_2LBF_dM7tB#1EL*`1K4dPS z$_jQ;P04P!)L|Dv{lbOeX%e67Z6b*66Mwm(&ez|LI#LOlit&(3N) z^rzMHeEUz3`kPt_U&kkl^RI7II}>2`qSldhg1L( zugT;^H%WNABysu7_%WI!I092UhNTV359{#+9E_;pzRa(1(txFT04ar|Th3gNP8pPu zAyR~rE!2hp=)@`3PO|f|xR$ptA2uJ^YCfV@d2Bv8g+`1O?)8!aL+J9d7EzVS#v*c`hJxE((cYh-QM(3?quE z3qEalNq7v*-*IjrAxnQz@PM|bMG;1?#HUTog`MQE;brInAc)2)A)f9hGwE4l6|NM* zj7Q-2Mr4w3!qgm}#;3?(k_*ZVlnZYgCIAiK{?4r?7(_615kSB>{>ujFzB7LV z;jlj+ybH9@kejoi0CyDn0TVwPntZA)urI*0fd%m7WDfz0xLB>=Yye*xKr#g^E~oP= z_&0~{5{otoe zu)T0;CpE&Uh#pfkMO?u>xww}ct?kK;zu>L9CpS#Q)8OEHWANe!!JFU9lb6se?#Tg( z@Q*z?sN@LRz}=IBQg?QFaq?aRTFb9Ww8%a?OcexK8q za~DNc%)5=?ERBq>>HB&A5HQkv9QY9ck2nn}&27E(*8mDE~l zBej*OU%966B94S|FNMofuX`GZVjh7}!1=2*RP%4s&rAbnWR4SE8 z3(T}v`|_kEtVdT9+Z|yOQmJf zL(;?2Bhqqdg|t#yC9Rg$NNc5a(t2rwv{Bk5ZI&LDs-!K_R%sg}@r)!elE_FBBgu?3 zVkCu;R7TPmY0O9yMw&9xjFIMyv|t2`Un@phGt!2Uwv4o6q&*`Y80pAJCq|&!(?v@z zbY-L)Bi$M4!AMU=dNIbgWMmK{gBcmZ$WTUxF*2Ny z5sZvvWR&X1$Y@3~85zS!79-h=%Uh=Y-_jKFSZ93%ORjAvv5BL$31WTcRhB1VcC znZyWy2}&6$W2Bss3PvU~0>*4ABhwg}&d3Z#DjAu{$Sel;g&>TP*^JC#WG*A~7=g0Z z{fsPNWFaGq7+K871B^V#$Pz}DGO~=3hZuR7kw+L=&d3TzRx+}Rk=2aAT3O4;I!4wr zvVoC}jBH|LGb4{OQpLy?Mz%7tjgjq)>|kUkBabn%i;>-oJkH1-M)orD1S9(xd6JR+ zj6B82(~LaB$N@&4W#ldi_9F|oEuq-&x0!UT|fI$m*L!Qy)O+4#w;zBp^W<5~`^pXYt@&Qn4 zM+2d!Dewt;`oBTeqPW7kCBTszoMQjFf3EM21^ki#z@_oKb=u)RpZssV!gJj(hF{d8 ze#!hd4i)hs6Wqkl@rHa-;cSxo^#1E7YIw&%zzgrp0dve%ig!8?W<48T2WtaOhIel2 z#*dAlIEe3i6qV#pgR*f}f!(zWDze@~g8$^+StxFJKaLR7jzMx|u2bV(;Wnq=v+gGD zC-`}@?)6XE|33Otr@J4l(^7y>-YK$J*X`1Hvw9@pu8sAWg_>LU=)>ug$|qVs;Z^{{ z^Ly38a@Na^yxG9|#q|FZ5R{YJ`|nr8|IN($z@i+dt)~gv+!le=1R>uIC+A#v*WLKe z8`bcpjsF3||MATT_{t8^D*W0Bd#%oIkF75G$0eo0G4}ec&gN1aqlrZ{CtS( zXd6e{^X7i_PiEa3dyoF_yuSzUzv17{@;^H`#yg9sU#9;Q%*?wP`u8;b|7Gp+-6xwL z9pGHV)Gv&GFBI?uvE1A7U+3d`yAk6S7umgEpT2E<)j7GZ<^~r zx5_VUUjLjxNCdq6Pu|0U4;WClH@!ENe`9WRGv~H0oA3=@z56q6^6tFb87IvP=Jy^( zO+VAf8@8-pXf8$mpAJJZtwHw)wcJ>5o@ov5q}_$gk?Y)SX+{+yGY(JH-UAEu1e15W zeO>Ds1C~L{FYueTxRMO5>led+?+_H1fArrk#DB%d2iC2UT>Bv!*Y50w?6vQQQOgUo z)MW$~&gRshI=4<7zssrju3t0VZ|cIEM%CZ+U%5XNiW}+fUwKSg?~c-y`MD=694pJi zf7@V3Nf|uJ#eG}vS+_LrWUZdv>OT!n@3@}^iks->1!8N=yY6{<{=LG~o^AABK1pA1 ze#&Lg!|PvL|2zivt$Ql!vw!vENA47+SN%#^bF%W-Z%n!EsdLL-?{chl@W1xmCpq2qECbi6E8gU9 z+>(Cck~gep{@f2S@@BTWIdGr5dILJ{AM}Pg@pa0gCNo^meCz)DZ?Xrl?Qh_=rrov= zuBa03+wk|Z{@;jVMs~|DaKx0_(oXfhQj$R z?at8kQsoXO24mocudg>+sVj+4Utn{W!{8}`I@Pz{rCi6I7rFRi>z}N8yZRfe;14sx zBT+q$sL8FzYB2=JTywziT9b~wR}QKAo(2EzZ6P?DA$3dZ@1KKHudm}+THfE}!#ykIHFH z(Z+4x*3=1Gu(Sf$!e-Y8sH@j}fZ95sXg}r%T68~0&=EEJqo%1Wht_(y_8=9!J=q@xm}Tpq`F)b7ZWJi{)roR04NC#|R!NsN-nREFBZe z5wY-q!5kMR7Lp{7pvfFRV_0rFj4Ff)q}VtO4a28UmI*L3a0-7kpuNY`;9udq%VHV> z_beEK=G35Gq3SV}r16R|K8SMR7)LfozH(duoiF- zrjlcWIWicHK+`xb7%C_8$rYMqc-@5tMuny!2L5=)MLHgsqk&O>g9r~*%;N|m9Y2JY z0;q1J&;)LJR7!ui6DNemq6J28;Q|d8J9Dfr0L;ddL*Omf8e5^EB-dO44`ZAT=WUj8 zY_E>&g;LpE;RIAf2k3}i^e`IbMDxC`BY*&uJA)&CnrM$r++7XeRYz*rT^DS3IXrw3 zp5}OfVZgTJRl|1S5sMnu=cM{Q++n~2z+C{)b)s`MI4(TA5ss1pisuyLk6hG&Jn*PS z4nyPkHbCVv{JFZ_9heJGeIz10=Fy4ZNz>4{lK`4Cl|yj{0qSfW2fY!spSlcy{D3U0 zf#32QcO6%^sxd0u$M(rP5x0-SVoC6YzHVaJh@VRMu$IDgP*iVQ+}<^RsoZj!SHy%E!PEbdO~}y<#0eMb70eY z^#XvDIY_Q82R4o25aqGzK!7n37#PGdO@%Wv0LYsS7`qxsGN7cM;@G90YP1uE%!pCd zLA$0uf}AKP$;omfIYmyD)8xi-6S=9} zOl~f>kXy>F?@_lk2xv!iq_mlg} z1LO>Opgc$(EDw=~%ERR0@(6jPJW3udXUb#bEIC`wk#l8-JXX$=$I1EfczJ?cAWxJF zVuJV%}@&y(lN_sa|9h4LbK zvHXDipu9w0Dld~Ck{^~Ik(bLW1a z@(y{Y{FuB;-Yq{a?~(V)Pssb^C*}R}Q}WaDGx7oXS@}8ndHDtTMfsrolKis#ihM|Z zRenu=T|O)yk>8My%5TcYT@R`K0`wd`f;_{y;u0pOHV5&&nUkAIs6K z%YQKPDkHBk@;W1j89Bnp8;l%fMm}NWQ${{xd3QqurTipwc8W=S)3P*EIjG7tsU{qq%!l=xs!e|3Vt&G|j^<>nGQEx_l81-e; zk5PX{0~iftG>Fk)Mnf14Wi*UYJEP%@Mlc%5XcVIj8I5KX9wi*hC_Gv?p3wwG6B$in zG?~#xjHWP}%4iy+jTvpiXj4X;G1{Eb7L2xJv=yVR8EwO8TSnV4+Mdx4jCN$S6Qi9O z?ZRkRM!PZEozWhQ_GGjdqrDlukI_Di_GL7k(SD5fXLJCg8H^5ObP%J186CptP)3I_ zI-JoFjE-b<6r-aV&17^8qgjk*Gn&I_E~5@c$1FPlOlv z!k_z(@JBW8vA$z9@ULt({E+om{?z~*X=uYw@V6N@JjF)*Yk8h~+lC*s z5$Ho$k--1#w&6WCyp_N0!GDji;psNwWy6zf_+kEqY$I?@6B|}|n>6cVHeA5pJ;#6a zr72!*@mCA;W!%x znkPWx`;Xf2{WcQ8e{=AQU*hjX{-=+1B!794e`~c7i}fKJiL{Xr8=hCz z*f2zD!ise^5@6k6!y~N=_{U!S&o=(&1^!3lcN2dHM!=w1OyF3w9 z^7y;`HY{6P*|2KE&1|^RMxyw)-EDX&f9=QrJZ=r)Fa2$Jmkn!NKW1IYzsa-V6yCSS zXm9?`--gH7NT3ae^556+KYOiOPdly8@K4ZQSaF{fn0m^FXYxw|Y#5$UDXe(jh8OeK zXZfF08wuyHFh6BB(%yz2x3=J)$MY*B8{W%5thfGV!&~?_o;K2ezrJGKV#Bj-c(RRX zYLU;IjkCVZf7ANgVk0mZUSP4#x8W=svDd#T znBMAGTLJUSKfr@5lyk}_RmvyYW6XMX(jO?!Zx4b@@WlBD6ax=_X@%OOE@%L3+Q$Om ze6RSY37JHbk0}Pu&-OQsGUdY|(b=YDrpHY$nBFy=hw~iNY&CnDea!ymAakhMZjLlJ zG{>3~%*p0db7ON;a|?58a|d&0^L^%_=Hcd%W{0`RJjp!EyukdBdA)gy`5E)e=A-75 za5Uv>^B*3_L-LS46c0a-P>%$URF763Z9I;7yzTL>#|e-3Jl^*>?eU?UHxC6=^JqXb=K_j(JfN400kvEK zXyqAzL|zB@;>V@E(mrXw^t5zZ`c(Qwx@qyScw53Pv6gsCq9xVR*wVt%%F@Qt&eGd5 z#4^k>!ZO<8u#B~oT4r13TIO38Se99;EW0iHEU#NmT25I$u$-}cZ@FUmLng8$%W?xb z1j3<~5b_L#K&1@Aktq<0tb;&e69f@kAb{8bVZs3j5Dr36@HzwnAA_6!3|#z|3RMh> zsF)Q=k(CCDU5QcRltiVGlBTp(+AF=4k;-UgjFPS7DolAqS*KJfyOn2@SC!Y5Bg#?b znDUPDu5v>8TDh$JqFhyeSN?2ZYtXB~;06T^rZrgFU}J+P8@%4&c!RSIzG-mHYOs1) z{jGu4U~8z=ZjG=;S);A7)_7~8HQAbCZE78EonS4oPPbNC=UW$87h6|bAGL0`?ygc&){EAkZAM!Io4>80EzQ>2*3Fh~8)h40E3i$sJz!g6TV{LM zw%qoT?QPpx+sC#~Y@gcB+dj8_Y5UstjqMNHpSGK}+n&VJ$1~Kkp=TSTe=mFAV_RqR#bRpwRUHN|V1*9@yp<`UO#(X@w)2uo44%U&AW$pFYo)j`+E2D9^gIDd$4z<_iFFQymx!= z@qWVlN$=y{C%sR3f8c$_`$O-Kys!8q_$2u>@=5h+?9LahWU)}8Re7d zljT$5Q|43QGsS0`&nllaKI?oo_-yjo>{I3Qtk3g4FZ#Uf^QzCszFxjQzJ9&|zCper zzG1%MzLCDkzP)`%`i}M;&txS_|Ega-*=(!BHssmxB33+XY-5nYwFj_Z>V3E zU$$Sa-&ntKe&hWL{0jYw{Yw1G{L1|*{HFTN@SEv3$8WjcO25^9YyGzPZSys4R z9<(=TU(i!Q2ZD|Vi^1k#DOe6}5Nr$f3ib*13yuwL7n~m4KR6?JQ1Fo8vfzr~DZ$f% zX9QOU&k9~1yfS!o@VelQ!OsT&9DF7C*WllSuLWNZz8QQg1cjJGd_tl_VngCX5<`+h z(nI=(WP}U~84@xqWJE|=$o!C1A!|a`g=`4f6ml@+<&Z-muZ0{AITCU-p}&V-3%wqCGxQc5WFv5tEg&o^tZ7*Du$E!1!`g-o4;vXaI&4f>c34iBBdjv) zK-hC(FN7TodpYb-*lS^j!`=w{%dXh1c2B#v-PhjO-qhaQ-qPOM-qzmUexJR-UTL3Y zXZAVvdG_V@ZT21Z$Lzc9d+cZIXYC)`&)GkSvCV-ash9FO=a;$pO(mygVGB`3aG9|KYWY@^&hZP=}0kA}S(-q$d_ z;gW{y8b00d)rKE7ywLD+!@r_^qa&k}qT5GjM30KjkDd@+7+oA)8eI`RCAub5)&2^9upZ89TOXq5Yr^4Sxn2A)-lB~ zvtky;Y=}7!b3Eo`%=->f%vUj&Vt$JGCFW|ZHP$oMJJvVW zKQ=HnIJRMIOl*_bX0a_|TgA4CZ5P`iHY+wK))AW*n;$zqwjj1Jc1P@EvAbjU#6A)G zWb9M1&%{0(dpPz&?6l)WRu4i2DxIS^|asA^m;&#Rz zi+eln-MABR@5P;p`ylR2+~s)hc;9&c_`vw!_|SNJd_?@z__gut<2S}{j<1T}62C2e zNBp7qKjUx2{}q2b0VmJ|LxPxKPKZwEp3pO)cS4_p^n`v10}=)%OiXwBO^%=MsNS!bwt+oYWx6mgJS>ljN6VPl`y2N{UNLOKP6f zHEDFxn53K}M^au=eo{eFdD7&hsY$bw<|eI3T9vdmX?@bBq^hK?Njs8uB^^yVmh^Vg z@uc^XP9=SibSc@E?3L`3?4KN%9FiQC9G*Nac~$b7}K%<~Wp^d^DMKp@~e>L6re@^%R$8oDlZB;ZVs!FU}d!8%T z-q*Quool?WbDR^2AdyHSLnPvy<2ox9l-eT1iXBq1MXc0p)m|Z1te~h;tN7-2``o_o zAKtHj;(5D2VstS{F=JzrV^U)##AL=~#pJ}4#_WmN7qdU+V9b%2+L)s;^`h>go}wsG zZ_#(6exd=Qfug}8vnWxNBpNG95v7SHh%!V)qRpZ$qDoPfXoqOGXs@VRJWMPWyTl%G zoEQ-Y#33;%9xWatP8Vm2r->OcFD?>K7tavS63-FO6>k;)Dy|am6z>u56<3QdieHQ0 zh~J6-6MvF4m$a0Sk`hU&WVvLeWR0X;vQBbPa$9m&a!>M5(kOW32B}*Us@<7 zrL;66<)pKuv!#orCDL`$jnWF~R_QkBcIhtZ1?eT}6=|KcUV2k{Tl!8Wk;!C=Cc{@F zgJgP{QD%{aWs_u+Wd*XSGFmoG#>ke+s%15@gR&#C-(<&SC*>XGL*>KeF>;AqE?3A^ zazvgZpCq3wpCX?sr{xiOwfw5QPJTmvOMX}0AippFsQ6CNPw~BCpkk0>h+>#xm13Qu zT2Z4os5q>sRUA{CQJhoUP~249Rx~IcC>oWmm2H$?DLW`TE4wJaR;rX5C8X3VjY^Bs zrgSK;C|@c6RlZezP<~Q=Ry9|BtBO?_R3?>GWmmaW9+g+MS#?5nO7(~8jOx7Vg6fj$ znfhz>H|iehD0OdjUv+==0JT>gQjb!nsB_da)C<)s)Em@W)Q8l6sO#0Y)OXbP)DJc7 zH61lwG~G1aH9a*^n%anXZ|snXUOnGf%TX zQ=%!=Y}D-2?AIL79MaTk?rQ$gyw<$YywiNpw%2ylcGh;)exvs2S7} zY7Gs7qM>2X2uK7;AQ_~FY)}}&ARLN^5}+(72bu)sLsOs`&@5;+G#8o=l|$>G4bUd2 z0;+)yLWiMR=ooYfdH_9w9z%aYFLYgWU+cQ-zSZ^8_0jd!4b~ZTeqB%pbf^y373hj} zGj%`f=IG|?R_n@j>vS7*n{?H>8r?zNVO_26qVBTps;*8~uWQh~(*3J@r~9D$6br{r zj3r~|#+JqIiM<&6JobY=N*}G4>s5NK-k>+@ZF;-jr4Q%{eS$twKSrOdPu1t>OZ98@ zmHNH<7GA45OG0E5R6XYdF{omk~Dli~(b^ zG1WN1m}$&5PBP9kE-)@PZZ_^P?lRUG4;gEX$BfU7pG@scUz@%&4L7MwW|Pl^n1ZIT zDbX~>ly1s1O*Tz2Ei#pw%1oyXq?s@$n{&;1<^nTgE;27L*O(8O51W58pEjR0Uo+R4>&@@YA1%!+ zEiGSI+E_YRBo>)PY0+39i{4_im@Vm+3`>?J*FsvRS*BZxEwd~eEftnZOO<7ZWw+&k z<$~ps<*MbnrQXtL?P~32?O~0w_ObS}_O}kO4zwz)Dyz|IwxZUNR>GQK9c?YN&auw5 zF0d}PmRQ$Vf3;RwcUuoxf45$?KD0JkpIDz+|F(6v^|bY}^|AG}^|uYM4YOHoz=qmJ z+6Y^Mt-w}nn`!&mHpe#4R%WZTZL@8+?XvB)UAA4d)!FK8w{3T94YrSViCtz_*j09| zJ=Sipo9zxeVh`BI+o#y4+9~@qJ8NHR-)!Gvue4X$ciPX}FWN8Lui0+QGf?;Il> zB8S8wb0{4e2jtK@EDqQa=SXoBI0_x4gLW{Em5yzW?T%fJJ&tO}Nk^UIhU2E=wxhxE z+}X_8!r99CrSmK2Q0H)`$SHNool2+LX>&T9P5mTivNP2=!I|m&$+^V2)Va)A=3M36 z;XLX*?mXrE!+FM8=X~P)%lX{-()rre-PP08%hk^{z%|e{$QA8UxKu8y3%F3%NEhKs zaHYBmU8IY4F)rS<*0tWX$+g8*>DuPn?%MA<;5z5J>$>N9=xTI5b$xVwcDHbU;cnyZ z;*N6nb`Nq7aSwNk+)}r~o!}nr9^+1Sk9ViJ)7=x@Iqu2sX>P{7)V<7I=3eD4cdvJE zbXT}5-Bs?L?mg~m_dWLm_ak?s`-%Ih`u@W$ zHQWYn3%7&Y!yVzya96l5?0{Xc2lm1~*bfKcFgy|-1CN8#;B+_>UJRGOrEnR%5?&3L z!|UNqa3#D4-Urvf2jNHXWB4ij9R3^r2YwB|g+F*(d0TtG_4fAm^?vUi=pF1G;vMdd z@ru18y@Yp^H^DpFo8%qqP4k`*JZctow+|an;aWQd*I8&S@&KBp4i;qi=OZ6@AE%Gh# zE%hz;t@N$&t@W+U{OS+r9?hecvPBW8YuC=f0P|*S@#D55AAS&q#BmCGrLGCGr*00qKNvMY^nND?v* z8IPnP8AukAgG@s5kwSz*rXdW%Aw@_rG7Fi5%tIC+i;xne6e&YiBCCkw?fAtvOm{P`hW7z^OyRU``7t5`YZgE{%!t! z{{8;r{!{+b{%Pb{yYAA{)hh0fi{6If!+aKzz{G8YyoG$6Nn3-f$TtGfDB9v zuz@9kZGnA(+Q8Ys^}xNrgFs_&aBxU)cu*9S1{FbdP#cU58iSUgE$9q-f+;~VCRu7>JDH$t~UcR~%J`=N)S#?X_{U!murm!VgoH=%c-5225t&!9PI z1zLl)pdIJ{I)SdB8|V&tf+)}j^acIF0PrIi42FUcKn$cn4pcw`AP@_TzyfT*0o(uv zaR31U000VbFba$YV?i<)57Iz7$OKs+2jqc#Fa=BnG++P+iokR*1Iz+*z+5mNECh?e zQm_n^fmNU!tOFasX0R3f3aY>kunX)3)u09(0=3{MI1WyN-@$2c2Al&Iz-4e1)PZ_% z8{7r=zyt6IJO)p}Gw=eu1h2rq;4OF$K7!BT=HZs%*5NkccHxfU&f%`%ZsG3Xp5dr) z@9=lw{^0@Pf#E@6QCNy5qDkmjGzCpX)6t1&Hkym(q50?(ltgJXf^w*UPDf{;v(VY- zTyz1t7+s1kL(9-rXgRtL-H2A8mFPBf2f7R0i&mot&_ie~dJH{@{*InT&!Fef3+QF^ z8hRbQiQYyV(EI2^v=M!RK0{xiFVWZN8}vQ;5o?CEz`nrRVC}FDSZAy&)(z`{MPYrg zzF2>305%XCj19qtVIwdxCc~7N8iTM{%z&9O8|K8^7>vbXek_Ec7>;ESShv~TZyf~)?yp5&Da*~ zS8O}B3)_qB#|~nLv0CgHb^<$voyN{!=dtV9O}ri65$}R`!+YRScptnUJ^=p_kH&}L zF}MVm<0@Q>$KpoZg4=Ny4&y#NfCC)E2|NK$!pGs`@d`3bm80(_O-Y>!ev}S41X`9lv zrTv!naYE*VH4{!vxSZZLU6Q^&{b>5R^w$~vG6rR+GpaJ1XR0zSneNQ2%+kyUng2}e zK2bX{ZsO#LB@<6fY{)9eT9{Rr-8Ng4jb&$K&&XbseKhBXoDn%x&dQvVIWKa*$<^e> z=N9HJ&8?m!n`E4nK571>KPT1YHP3V9rQ~JhEzVn$_h;U_$%e`ECm+inls`6~$$wlh zv>>)%bOB#5w_wi{>y)%93k!P|_AQhafv1LULpgSxn9%XOnZu1>|CKDY=YXL9Qa#kn6~eWCdACR*^f&-Q-@f znyeuYl84D!@+f(nJW2jR{z;xCFOZkXt7IKnPu?aQ$Oq&j@(KAD`J8-7z9Ro6-;p24 zPgIkYMYX2dQthcuR2Qln)q{$n`cQqT{?rfDkJMml2sNCFp~RGwl2b}bLqSw5Wu(lM zm2yxn%0qc6gbGq&Y9tj;B~nS$I4XroqtdBNDvQdc@~C{OkRmCXVkn;ai7KXMQa@9_ zQ1hq-)MBcHT1J&oE2-5~Ikk@3NL5f)J|$QwU63Q9i)y>N2%k~N$L;kPwFgn zp1MR`rLI#qsoPWo^?-UrJ*J*g&#AwuSJWHo9rYjenQl`4=r(jax+C40?n-|{_oSof zK6GEYKm7weh#o=@qesvpT1qQuHLay%X#;JhZM1`S(J&oH`{^JJXpAQ41bQ?*mQJD5 z=nOiG&Y|<@0(vS<(bH&#=IA22n4U>5pchBH5u|A*5{`^)lBp7#HXzB7)JS?{Vk9S$ z7b$3BH0cP_wCee(3BCKdX>T(>vM5s01W2ujtd6XWY=~@*Y>jM->}YD(?`z7mA8M-E z9cvo(H1)nC=OdSzn5XMa`QkfGz2AqC$4v{K7fqJVzma#5|C-XEEtoHuHcUIFBh!WH z#`IvKm_AHDW&rae6U_``Vi*Y{XH<-qiDit8g|Ra(24;LrfB_7~5KID-#EfIcGZUCh zCYzbWaYkU7E} zWlk`^Gk-GYn2XF6rjDs+ZZi$c1E!IA$~gtc+E%8dk>|STk#5oveqAWBqK1MOmC3#g1mjvMFpDo55zW zx$IFi8)HanMHz%FK&vdh_(>>73*yOFJ6E7>Y`C%cEOW)HB3+27dX z>?!s%dzQVxUS_YcH`qJu1NI5~7yF!j#lB(Rv7fl+Tq~|E*PiRdb>+U{dU8=*U+#Nu zAUA}I;Ut`#({Osu#9289=jMD|fCC)Hjp7oyG2D1AgUjLaxB_k}7vThMIyaO1g`3YU z;!3z>+zPIoThCQ+m0T6KliS19aEG{B?gV$5JI`I=u5mZH2JQj(h5VC|kp->NUPZl&1{Muz(g~Yhix&U89qa#h|Nk#i{~v<+iiH3G literal 41976 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 From 6e6927247359cc0db47501fb9d2dbb7856aa5985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Sandmann=20Pedersen?= Date: Wed, 27 May 2009 15:51:19 -0400 Subject: [PATCH 88/89] Fix alpha map computation in miComputeCompositeRegion() According to the RENDER spec, the origin of the alpha map is interpreted relative to the origin of the drawable of the image, not the origin of the drawable of the alpha map. This commit fixes that and adds an alpha-test.c test program. The only use of alpha maps I have been able to find is in Qt and they don't use a non-zero alpha origin. --- render/mipict.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/render/mipict.c b/render/mipict.c index c653ec4f5..e0d40ae34 100644 --- a/render/mipict.c +++ b/render/mipict.c @@ -459,8 +459,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pSrc->alphaMap) { if (!miClipPictureSrc (pRegion, pSrc->alphaMap, - xDst - (xSrc + pSrc->alphaOrigin.x), - yDst - (ySrc + pSrc->alphaOrigin.y))) + xDst - (xSrc - pSrc->alphaOrigin.x), + yDst - (ySrc - pSrc->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; @@ -477,8 +477,8 @@ miComputeCompositeRegion (RegionPtr pRegion, if (pMask->alphaMap) { if (!miClipPictureSrc (pRegion, pMask->alphaMap, - xDst - (xMask + pMask->alphaOrigin.x), - yDst - (yMask + pMask->alphaOrigin.y))) + xDst - (xMask - pMask->alphaOrigin.x), + yDst - (yMask - pMask->alphaOrigin.y))) { pixman_region_fini (pRegion); return FALSE; From e08c6a0752772745f35f7afcf6c2b1c927b91cc0 Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Mon, 4 May 2009 19:24:47 -0500 Subject: [PATCH 89/89] randr: bug #21554 - re-probe outputs when coming back from laptop unsuspend Make xf86 RANDR wrap the EnterVT call chain, so it can re-probe the outputs when a laptop comes back from suspend/unsuspend (actually, any time that we enter our VT again). The X server should then send RR* events to clients, so they can cope with a monitor that was unplugged while the laptop was suspended. Signed-off-by: Federico Mena Quintero --- hw/xfree86/modes/xf86RandR12.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c index 1e3b70c09..0de21e253 100644 --- a/hw/xfree86/modes/xf86RandR12.c +++ b/hw/xfree86/modes/xf86RandR12.c @@ -55,6 +55,13 @@ typedef struct _xf86RandR12Info { int pointerY; Rotation rotation; /* current mode */ Rotation supported_rotations; /* driver supported */ + + /* Used to wrap EnterVT so we can re-probe the outputs when a laptop unsuspends + * (actually, any time that we switch back into our VT). + * + * See https://bugs.freedesktop.org/show_bug.cgi?id=21554 + */ + xf86EnterVTProc *orig_EnterVT; } XF86RandRInfoRec, *XF86RandRInfoPtr; #ifdef RANDR_12_INTERFACE @@ -1745,11 +1752,26 @@ xf86RandR12ChangeGamma(int scrnIndex, Gamma gamma) return Success; } +static Bool +xf86RandR12EnterVT (int screen_index, int flags) +{ + ScreenPtr pScreen = screenInfo.screens[screen_index]; + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); + + if (randrp->orig_EnterVT) { + if (!randrp->orig_EnterVT (screen_index, flags)) + return FALSE; + } + + return RRGetInfo (pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */ +} + static Bool xf86RandR12Init12 (ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; rrScrPrivPtr rp = rrGetScrPriv(pScreen); + XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); rp->rrGetInfo = xf86RandR12GetInfo12; rp->rrScreenSetSize = xf86RandR12ScreenSetSize; @@ -1767,6 +1789,10 @@ xf86RandR12Init12 (ScreenPtr pScreen) rp->rrSetConfig = NULL; pScrn->PointerMoved = xf86RandR12PointerMoved; pScrn->ChangeGamma = xf86RandR12ChangeGamma; + + randrp->orig_EnterVT = pScrn->EnterVT; + pScrn->EnterVT = xf86RandR12EnterVT; + if (!xf86RandR12CreateObjects12 (pScreen)) return FALSE;