From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by yocto-www.yoctoproject.org (Postfix, from userid 118) id 0AF0DE00CEE; Tue, 29 Sep 2015 13:35:49 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on yocto-www.yoctoproject.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham version=3.3.1 X-Spam-HAM-Report: * -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% * [score: 0.0000] X-Greylist: delayed 1531 seconds by postgrey-1.32 at yocto-www; Tue, 29 Sep 2015 13:35:35 PDT Received: from dev.rtsoft.ru (mail.dev.rtsoft.ru [213.79.90.226]) by yocto-www.yoctoproject.org (Postfix) with ESMTP id 8F5CAE00957 for ; Tue, 29 Sep 2015 13:35:35 -0700 (PDT) Received: from [192.168.112.12] (fw-int.dev.rtsoft.ru [192.168.1.70]) by dev.rtsoft.ru (Postfix) with ESMTP id 580AF434F2; Tue, 29 Sep 2015 23:10:01 +0300 (MSK) Message-ID: <560AF019.5060700@dev.rtsoft.ru> Date: Tue, 29 Sep 2015 23:10:01 +0300 From: Nikita Yushchenko Organization: RTSoft Software Development Center User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0 MIME-Version: 1.0 To: "meta-freescale@yoctoproject.org" Cc: Gennady Kuznetsov , Andrey Rusalin Subject: OV5640 autofocus kernel+gstreamer+Qt implementation X-BeenThere: meta-freescale@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Usage and development list for the meta-fsl-* layers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Sep 2015 20:35:49 -0000 X-Groupsio-MsgNum: 16044 Content-Type: multipart/mixed; boundary="------------050303030200050103040805" --------------050303030200050103040805 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Hi list. I've recently been working on integrating autofocus functionality of OV5640 camera into software stack on imx6-based board. This mail contains patches to kernel, gstreamer-imx and Qt5 that make things somehow working. In particular, declarative-camera example focuses ok, custom Qt-based project also does. Kernel patches are against imx_3.14.28_1.0.0_ga branch. First patch is generic mxc_v4l2_capture cleanup. Unfortunately driver was quite racy and did not survive even streaming stop+start from within Qt. Had to do some cleanup to mitigate that. Second patch contains actual implementation of focus-related v4l ioctls. Autofocus firmware embedded into patch was taken from http://crewrktablets.arctablet.com:8080/opendev/kernel_rockchip.git, branch rockchip-3.10-rk3288 file drivers/media/video/ov5640_af_firmware.c and converted to format that existing driver uses. I've tried different firmwares found over the net, this one shows the best behaviour. For gstreamer, I had to add GstPhotography implementation stub to imxv4l2videosrc. Implementation is far incomplete, only focus-related operations are there. gstreamer-imx patch is against version 0.11.1 For Qt, need several patches to qtmultimedia. We use meta-qt5 layer, frodo branch, which is Qt 5.4 based. We had to backport several patches from 5.5 for better GStreamer 1.0 support. Also we had to create several new patches. Attaching a tarball with all these. With all these changes, single autofocus works ok with unmodified Qt's declarative-camera example. Easy way to check continuous autofocus is: - apply this to declarative-camera.qml --- a/declarative-camera.qml 2015-09-26 11:29:54.000000000 +0300 +++ b/declarative-camera.qml 2015-09-16 13:12:51.000000000 +0300 @@ -56,6 +56,7 @@ StateChangeScript { script: { camera.captureMode = Camera.CaptureStillImage + camera.focus.focusMode = Camera.FocusAuto camera.start() } } @@ -68,6 +69,7 @@ StateChangeScript { script: { camera.captureMode = Camera.CaptureVideo + camera.focus.focusMode = Camera.FocusContinuous camera.start() } } - start it via /usr/bin/qt5/qmlscene /path/to/declarative-camera.qml [running declarative-camera binary without recompilation won't get these changes since binary has qml embedded and does not re-read it from files at execution time] - from within demo, switch to "video" mode - take a sheet of paper with printed text and try moving in near camera - on playback screen, see camera's attempts to keep focused Known issues/limitations: *) Legal status of AF firmware is unclear. *) AF firmware is loaded using byte operations, loading using group writes is not implemented. *) AF firmware is loaded unconditionally on device open; better to do it on first focus-related operation. *) Reloading AF firmware on suspend-resume is not implemented. With current implementation, autofocus will stop working after suspend-resume cycle. To restore, need to close and reopen camera device (which usually means - restart camera-using program). Proper fix for the two above should be: make "firmware not loaded" a state of firmware-control automata and threat firmware loading as required step for requested state changes; when suspending, just force "firmware not loaded" state. *) Driver does not have protection against AF firmware misfunction (such as - operation not completes in reasonable time). Such misfuction sometimes does happen. It is not fatal (newly issued operation succeeds) but still incorrect. *) Setting camera parameters is not implemented. Camera always captures at 640x480 with all default settings. *) Middleware (QT plugin + gstreamer) is incomplete and quite unfriendly to debug and use. It basically works for trivial scenarios (streaming video from camera to viewfinder, starting/stopping, capturing images) but tends to fail on anything else. On failure, it just displays "CameraBin error" message and stops working. This happens in different cases, which includes inaccurate Qt application behavior (such as too long frame processing, failing to release buffer in time, etc). Extracting details on what happened is possible via GST_DEBUG but is quite cumbersome and requires understanding of gstreamer internals. *) 'imx-ipuv3 2400000.ipu: IPU Warning - IPU_INT_STAT_5 = 0x00000001' message sometimes appears *) 'ERROR: unrecognized std! 0 (PAL=ff, NTSC=b000)' message sometimes appears *) pressing Capture button in Qt C++ camera example (qt5/examples/multimediawidgets/camera/camera) causes CameraBin error (tried to investigate this, immediate reason is that after streaming restart, QPainterVideoSurface receives first two frames ok but does not become back ready after that and refuses 3rd frame; why this happens is not clear yet) Any comments on all this are welcome. Nikita Yushchenko, System Software Engineer at Software Development Center, RTsoft --------------050303030200050103040805 Content-Type: text/x-patch; name="0001-mxc_v4l2_capture-rework.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-mxc_v4l2_capture-rework.patch" >From cfa4f86cd1e4ff6215e1be5584e6788452a7f5d5 Mon Sep 17 00:00:00 2001 From: Nikita Yushchenko Date: Fri, 28 Aug 2015 09:11:39 +0300 Subject: [PATCH] mxc_v4l2_capture: rework - clean up locking: use single spinlock to protect all queues - clean up races from O_NONBLOCK handling - get rid of unneeded checks of buffer flags when moving buffers between queues - those are not needed since there is only one possible path, ready_q -> working_q -> done_q. - get rid of cam->enc_counter, check list empty state directly - implement v4l-defined buffer behaviour over REQBUFS and STREAMOFF: - on REQBUFS, any queued buffers are forgotten thus ownersip is returned to userspace - on STREAMOFF, any queued buffers are moved to done, with V4L2_BUF_FLAG_ERROR set, however queues are not dropped and reader thread can get them - use file descriptor for remembering owner, not PID (one PID can have multiple FDs, and one FDs can end shared between PIDs) - implement owner checking on streaming-related ioctls - remember number of buffers allocated by REQBUFS and block attempts to use buffer index out of allocated range - use list_first_entry() instead of direct access to head->next - clean up some code paths and other misc cleanup Signed-off-by: Nikita Yushchenko --- .../media/platform/mxc/capture/mxc_v4l2_capture.c | 402 ++++++++++++--------- .../media/platform/mxc/capture/mxc_v4l2_capture.h | 9 +- 2 files changed, 235 insertions(+), 176 deletions(-) diff --git a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c index 3926baa..37ffd02 100644 --- a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c +++ b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c @@ -249,7 +249,13 @@ static int mxc_free_frame_buf(cam_data *cam) cam->frame[i].paddress); cam->frame[i].vaddress = 0; } + INIT_LIST_HEAD(&cam->frame[i].queue); } + cam->alloced_buffers = 0; + + INIT_LIST_HEAD(&cam->ready_q); + INIT_LIST_HEAD(&cam->working_q); + INIT_LIST_HEAD(&cam->done_q); return 0; } @@ -269,6 +275,11 @@ static int mxc_allocate_frame_buf(cam_data *cam, int count) pr_debug("In MVC:mxc_allocate_frame_buf - size=%d\n", cam->v2f.fmt.pix.sizeimage); + if (count < 2) + count = 2; + if (count > FRAME_NUM) + count = FRAME_NUM; + for (i = 0; i < count; i++) { cam->frame[i].vaddress = dma_alloc_coherent(0, @@ -278,8 +289,11 @@ static int mxc_allocate_frame_buf(cam_data *cam, int count) if (cam->frame[i].vaddress == 0) { pr_err("ERROR: v4l2 capture: " "mxc_allocate_frame_buf failed.\n"); - mxc_free_frame_buf(cam); - return -ENOBUFS; + if (i < 2) { + mxc_free_frame_buf(cam); + return -ENOBUFS; + } else + break; } cam->frame[i].buffer.index = i; cam->frame[i].buffer.flags = V4L2_BUF_FLAG_MAPPED; @@ -291,32 +305,11 @@ static int mxc_allocate_frame_buf(cam_data *cam, int count) cam->frame[i].index = i; } + cam->alloced_buffers = i; return 0; } /*! - * Free frame buffers status - * - * @param cam Structure cam_data * - * - * @return none - */ -static void mxc_free_frames(cam_data *cam) -{ - int i; - - pr_debug("In MVC:mxc_free_frames\n"); - - for (i = 0; i < FRAME_NUM; i++) - cam->frame[i].buffer.flags = V4L2_BUF_FLAG_MAPPED; - - cam->enc_counter = 0; - INIT_LIST_HEAD(&cam->ready_q); - INIT_LIST_HEAD(&cam->working_q); - INIT_LIST_HEAD(&cam->done_q); -} - -/*! * Return the buffer status * * @param cam Structure cam_data * @@ -409,9 +402,9 @@ static int mxc_streamon(cam_data *cam) pr_debug("In MVC:mxc_streamon\n"); - if (NULL == cam) { - pr_err("ERROR! cam parameter is NULL\n"); - return -1; + if (!cam || !cam->enc_update_eba) { + pr_err("ERROR! cam parameter is invalid\n"); + return -EINVAL; } if (cam->capture_on) { @@ -420,20 +413,12 @@ static int mxc_streamon(cam_data *cam) return -1; } - if (list_empty(&cam->ready_q)) { - pr_err("ERROR: v4l2 capture: mxc_streamon buffer has not been " - "queued yet\n"); - return -EINVAL; - } - if (cam->enc_update_eba && - cam->ready_q.prev == cam->ready_q.next) { + if (list_empty(&cam->ready_q) || list_is_singular(&cam->ready_q)) { pr_err("ERROR: v4l2 capture: mxc_streamon buffer need " "ping pong at least two buffers\n"); return -EINVAL; } - cam->capture_pid = current->pid; - if (cam->overlay_on == true) stop_preview(cam); @@ -443,30 +428,24 @@ static int mxc_streamon(cam_data *cam) return err; } - spin_lock_irqsave(&cam->queue_int_lock, lock_flags); + spin_lock_irqsave(&cam->queue_lock, lock_flags); cam->ping_pong_csi = 0; cam->local_buf_num = 0; - if (cam->enc_update_eba) { - frame = - list_entry(cam->ready_q.next, struct mxc_v4l_frame, queue); - list_del(cam->ready_q.next); - list_add_tail(&frame->queue, &cam->working_q); - frame->ipu_buf_num = cam->ping_pong_csi; - err = cam->enc_update_eba(cam->ipu, frame->buffer.m.offset, - &cam->ping_pong_csi); - - frame = - list_entry(cam->ready_q.next, struct mxc_v4l_frame, queue); - list_del(cam->ready_q.next); - list_add_tail(&frame->queue, &cam->working_q); - frame->ipu_buf_num = cam->ping_pong_csi; - err |= cam->enc_update_eba(cam->ipu, frame->buffer.m.offset, - &cam->ping_pong_csi); - spin_unlock_irqrestore(&cam->queue_int_lock, lock_flags); - } else { - spin_unlock_irqrestore(&cam->queue_int_lock, lock_flags); - return -EINVAL; - } + + frame = list_first_entry(&cam->ready_q, struct mxc_v4l_frame, queue); + list_del(&frame->queue); + list_add_tail(&frame->queue, &cam->working_q); + frame->ipu_buf_num = cam->ping_pong_csi; + err = cam->enc_update_eba(cam->ipu, frame->buffer.m.offset, + &cam->ping_pong_csi); + + frame = list_first_entry(&cam->ready_q, struct mxc_v4l_frame, queue); + list_del(&frame->queue); + list_add_tail(&frame->queue, &cam->working_q); + frame->ipu_buf_num = cam->ping_pong_csi; + err |= cam->enc_update_eba(cam->ipu, frame->buffer.m.offset, + &cam->ping_pong_csi); + spin_unlock_irqrestore(&cam->queue_lock, lock_flags); if (cam->overlay_on == true) start_preview(cam); @@ -491,7 +470,9 @@ static int mxc_streamon(cam_data *cam) */ static int mxc_streamoff(cam_data *cam) { - int err = 0; + int err; + unsigned long lock_flags; + struct mxc_v4l_frame *frame; pr_debug("In MVC:mxc_streamoff\n"); @@ -517,10 +498,38 @@ static int mxc_streamoff(cam_data *cam) } } - mxc_free_frames(cam); + spin_lock_irqsave(&cam->queue_lock, lock_flags); + mxc_capture_inputs[cam->current_input].status |= V4L2_IN_ST_NO_POWER; cam->capture_on = false; - return err; + + /* Looks like IPU code does not call callback for frame that is aborted + * due to stop. + * + * Need to move any frames in ready_q or working_q to done_q and + * mark those as error. Keep order: first working_q, then ready_q */ + + while (!list_empty(&cam->working_q)) { + frame = list_first_entry(&cam->working_q, struct mxc_v4l_frame, queue); + list_del(&frame->queue); + frame->buffer.flags &= ~V4L2_BUF_FLAG_QUEUED; + frame->buffer.flags |= (V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR); + list_add_tail(&frame->queue, &cam->done_q); + } + + while (!list_empty(&cam->ready_q)) { + frame = list_first_entry(&cam->ready_q, struct mxc_v4l_frame, queue); + list_del(&frame->queue); + frame->buffer.flags &= ~V4L2_BUF_FLAG_QUEUED; + frame->buffer.flags |= (V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR); + list_add_tail(&frame->queue, &cam->done_q); + } + + wake_up_interruptible(&cam->enc_queue); + + spin_unlock_irqrestore(&cam->queue_lock, lock_flags); + + return 0; } /*! @@ -1509,7 +1518,7 @@ static int mxc_v4l2_g_std(cam_data *cam, v4l2_std_id *e) * @return status 0 success, EINVAL invalid frame number, * ETIME timeout, ERESTARTSYS interrupted by user */ -static int mxc_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf) +static int mxc_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf, bool nonblock) { int retval = 0; struct mxc_v4l_frame *frame; @@ -1517,40 +1526,46 @@ static int mxc_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf) pr_debug("In MVC:mxc_v4l_dqueue\n"); - if (!wait_event_interruptible_timeout(cam->enc_queue, - cam->enc_counter != 0, - 10 * HZ)) { - pr_err("ERROR: v4l2 capture: mxc_v4l_dqueue timeout " - "enc_counter %x\n", - cam->enc_counter); - return -ETIME; - } else if (signal_pending(current)) { +retry: + retval = wait_event_interruptible_timeout(cam->enc_queue, + !list_empty(&cam->done_q) || nonblock || !cam->capture_on, + 10 * HZ); + if (signal_pending(current)) { pr_err("ERROR: v4l2 capture: mxc_v4l_dqueue() " "interrupt received\n"); return -ERESTARTSYS; } + if (!retval) { + pr_err("ERROR: v4l2 capture: mxc_v4l_dqueue timeout\n"); + return -ETIME; + } - if (down_interruptible(&cam->busy_lock)) - return -EBUSY; - - spin_lock_irqsave(&cam->dqueue_int_lock, lock_flags); - cam->enc_counter--; + retval = down_interruptible(&cam->busy_lock); + if (retval) + return retval; - frame = list_entry(cam->done_q.next, struct mxc_v4l_frame, queue); - list_del(cam->done_q.next); - if (frame->buffer.flags & V4L2_BUF_FLAG_DONE) { - frame->buffer.flags &= ~V4L2_BUF_FLAG_DONE; - } else if (frame->buffer.flags & V4L2_BUF_FLAG_QUEUED) { - pr_err("ERROR: v4l2 capture: VIDIOC_DQBUF: " - "Buffer not filled.\n"); - frame->buffer.flags &= ~V4L2_BUF_FLAG_QUEUED; - retval = -EINVAL; - } else if ((frame->buffer.flags & 0x7) == V4L2_BUF_FLAG_MAPPED) { - pr_err("ERROR: v4l2 capture: VIDIOC_DQBUF: " - "Buffer not queued.\n"); - retval = -EINVAL; + spin_lock_irqsave(&cam->queue_lock, lock_flags); + if (list_empty(&cam->done_q)) { + /* no streaming and no buffers => -EINVAL + * nonblock => -EAGAIN, + * otherwise => retry */ + if (!cam->capture_on) { + retval = -EINVAL; + goto out; + } else if (nonblock) { + retval = -EAGAIN; + goto out; + } else { + spin_unlock_irqrestore(&cam->queue_lock, lock_flags); + up(&cam->busy_lock); + goto retry; + } } + frame = list_first_entry(&cam->done_q, struct mxc_v4l_frame, queue); + list_del(&frame->queue); + frame->buffer.flags &= ~V4L2_BUF_FLAG_DONE; + cam->frame[frame->index].buffer.field = cam->device_type ? V4L2_FIELD_INTERLACED : V4L2_FIELD_NONE; @@ -1560,8 +1575,10 @@ static int mxc_v4l_dqueue(cam_data *cam, struct v4l2_buffer *buf) buf->m = cam->frame[frame->index].buffer.m; buf->timestamp = cam->frame[frame->index].buffer.timestamp; buf->field = cam->frame[frame->index].buffer.field; - spin_unlock_irqrestore(&cam->dqueue_int_lock, lock_flags); + retval = 0; +out: + spin_unlock_irqrestore(&cam->queue_lock, lock_flags); up(&cam->busy_lock); return retval; } @@ -1626,8 +1643,9 @@ static int mxc_v4l_open(struct file *file) err = prp_enc_select(cam); #endif } + if (err) + goto oops; - cam->enc_counter = 0; INIT_LIST_HEAD(&cam->ready_q); INIT_LIST_HEAD(&cam->working_q); INIT_LIST_HEAD(&cam->done_q); @@ -1758,16 +1776,21 @@ static int mxc_v4l_close(struct file *file) down(&cam->busy_lock); /* for the case somebody hit the ctrl C */ - if (cam->overlay_pid == current->pid && cam->overlay_on) { - err = stop_preview(cam); - cam->overlay_on = false; + if (cam->overlay_filp == file) { + if (cam->overlay_on) { + err = stop_preview(cam); + cam->overlay_on = false; + } + cam->overlay_filp = NULL; } - if (cam->capture_pid == current->pid) { - err |= mxc_streamoff(cam); - wake_up_interruptible(&cam->enc_queue); + if (cam->capture_filp == file) { + mxc_streamoff(cam); + mxc_free_frame_buf(cam); + cam->capture_filp = NULL; } if (--cam->open_count == 0) { + vidioc_int_s_power(cam->sensor, 0); clk_disable_unprepare(sensor->sensor_clk); wait_event_interruptible(cam->power_queue, @@ -1786,13 +1809,7 @@ static int mxc_v4l_close(struct file *file) #endif } - mxc_free_frame_buf(cam); file->private_data = NULL; - - /* capture off */ - wake_up_interruptible(&cam->enc_queue); - mxc_free_frames(cam); - cam->enc_counter++; } up(&cam->busy_lock); @@ -1962,12 +1979,6 @@ static long mxc_v4l_do_ioctl(struct file *file, struct v4l2_requestbuffers *req = arg; pr_debug(" case VIDIOC_REQBUFS\n"); - if (req->count > FRAME_NUM) { - pr_err("ERROR: v4l2 capture: VIDIOC_REQBUFS: " - "not enough buffers\n"); - req->count = FRAME_NUM; - } - if ((req->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)) { pr_err("ERROR: v4l2 capture: VIDIOC_REQBUFS: " "wrong buffer type\n"); @@ -1975,11 +1986,24 @@ static long mxc_v4l_do_ioctl(struct file *file, break; } + if (cam->capture_filp && cam->capture_filp != file) { + pr_err("ERROR: v4l2 capture: VIDIOC_REQBUFS: " + "streaming is active for other FD\n"); + retval = -EBUSY; + break; + } + mxc_streamoff(cam); - if (req->memory & V4L2_MEMORY_MMAP) { + if (req->memory == V4L2_MEMORY_MMAP) { mxc_free_frame_buf(cam); retval = mxc_allocate_frame_buf(cam, req->count); + if (!retval) { + req->count = cam->alloced_buffers; + if (!cam->capture_filp) + cam->capture_filp = file; + } } + break; } @@ -1992,27 +2016,40 @@ static long mxc_v4l_do_ioctl(struct file *file, pr_debug(" case VIDIOC_QUERYBUF\n"); if (buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) { - pr_err("ERROR: v4l2 capture: " - "VIDIOC_QUERYBUFS: " + pr_err("ERROR: v4l2 capture: VIDIOC_QUERYBUF: " "wrong buffer type\n"); retval = -EINVAL; break; } - if (buf->memory & V4L2_MEMORY_MMAP) { + if (index < 0 || index >= cam->alloced_buffers) { + pr_err("ERROR: v4l2 capture: VIDIOC_QUERYBUF: " + "index out of range\n"); + retval = -EINVAL; + } + + if (cam->capture_filp && cam->capture_filp != file) { + retval = -EBUSY; + break; + } + + if (buf->memory == V4L2_MEMORY_MMAP) { memset(buf, 0, sizeof(buf)); buf->index = index; } down(&cam->param_lock); - if (buf->memory & V4L2_MEMORY_USERPTR) { + if (buf->memory == V4L2_MEMORY_USERPTR) { mxc_v4l2_release_bufs(cam); retval = mxc_v4l2_prepare_bufs(cam, buf); } - if (buf->memory & V4L2_MEMORY_MMAP) + if (buf->memory == V4L2_MEMORY_MMAP) retval = mxc_v4l2_buffer_status(cam, buf); up(&cam->param_lock); + + if (!retval && !cam->capture_filp) + cam->capture_filp = file; break; } @@ -2020,35 +2057,46 @@ static long mxc_v4l_do_ioctl(struct file *file, * V4l2 VIDIOC_QBUF ioctl */ case VIDIOC_QBUF: { - struct v4l2_buffer *buf = arg; + struct v4l2_buffer *buf = arg, *tbuf; int index = buf->index; + pr_debug(" case VIDIOC_QBUF\n"); - spin_lock_irqsave(&cam->queue_int_lock, lock_flags); - if ((cam->frame[index].buffer.flags & 0x7) == - V4L2_BUF_FLAG_MAPPED) { - cam->frame[index].buffer.flags |= - V4L2_BUF_FLAG_QUEUED; - list_add_tail(&cam->frame[index].queue, - &cam->ready_q); - } else if (cam->frame[index].buffer. - flags & V4L2_BUF_FLAG_QUEUED) { + if (cam->capture_filp && cam->capture_filp != file) { + retval = -EBUSY; + break; + } + + if (index < 0 || index >= cam->alloced_buffers) { + pr_err("ERROR: v4l2 capture: VIDIOC_QBUF: " + "index out of range\n"); + retval = -EINVAL; + } + + tbuf = &cam->frame[index].buffer; + + spin_lock_irqsave(&cam->queue_lock, lock_flags); + + if (tbuf->flags & V4L2_BUF_FLAG_QUEUED) { pr_err("ERROR: v4l2 capture: VIDIOC_QBUF: " "buffer already queued\n"); retval = -EINVAL; - } else if (cam->frame[index].buffer. - flags & V4L2_BUF_FLAG_DONE) { + } else if (tbuf->flags & V4L2_BUF_FLAG_DONE) { pr_err("ERROR: v4l2 capture: VIDIOC_QBUF: " - "overwrite done buffer.\n"); - cam->frame[index].buffer.flags &= - ~V4L2_BUF_FLAG_DONE; - cam->frame[index].buffer.flags |= - V4L2_BUF_FLAG_QUEUED; + "buffer is in done queue %d\n", index); retval = -EINVAL; + } else { + list_add_tail(&cam->frame[index].queue, + &cam->ready_q); + tbuf->flags |= V4L2_BUF_FLAG_QUEUED; + tbuf->flags &= ~V4L2_BUF_FLAG_ERROR; } - buf->flags = cam->frame[index].buffer.flags; - spin_unlock_irqrestore(&cam->queue_int_lock, lock_flags); + buf->flags = tbuf->flags; + spin_unlock_irqrestore(&cam->queue_lock, lock_flags); + + if (!retval && !cam->capture_filp) + cam->capture_filp = file; break; } @@ -2059,13 +2107,13 @@ static long mxc_v4l_do_ioctl(struct file *file, struct v4l2_buffer *buf = arg; pr_debug(" case VIDIOC_DQBUF\n"); - if ((cam->enc_counter == 0) && - (file->f_flags & O_NONBLOCK)) { - retval = -EAGAIN; - break; + if (cam->capture_filp && cam->capture_filp != file) + retval = -EBUSY; + else { + retval = mxc_v4l_dqueue(cam, buf, file->f_flags & O_NONBLOCK); + if (!retval && !cam->capture_filp) + cam->capture_filp = file; } - - retval = mxc_v4l_dqueue(cam, buf); break; } @@ -2074,7 +2122,13 @@ static long mxc_v4l_do_ioctl(struct file *file, */ case VIDIOC_STREAMON: { pr_debug(" case VIDIOC_STREAMON\n"); - retval = mxc_streamon(cam); + if (cam->capture_filp && cam->capture_filp != file) + retval = -EBUSY; + else { + retval = mxc_streamon(cam); + if (!retval && !cam->capture_filp) + cam->capture_filp = file; + } break; } @@ -2083,7 +2137,13 @@ static long mxc_v4l_do_ioctl(struct file *file, */ case VIDIOC_STREAMOFF: { pr_debug(" case VIDIOC_STREAMOFF\n"); - retval = mxc_streamoff(cam); + if (cam->capture_filp && cam->capture_filp != file) + retval = -EBUSY; + else { + retval = mxc_streamoff(cam); + if (!retval && !cam->capture_filp) + cam->capture_filp = file; + } break; } @@ -2190,13 +2250,24 @@ static long mxc_v4l_do_ioctl(struct file *file, int *on = arg; pr_debug(" VIDIOC_OVERLAY on=%d\n", *on); if (*on) { - cam->overlay_on = true; - cam->overlay_pid = current->pid; - retval = start_preview(cam); + if (cam->overlay_filp) + retval = -EBUSY; + else { + retval = start_preview(cam); + if (!retval) { + cam->overlay_on = true; + cam->overlay_filp = file; + } + } } if (!*on) { - retval = stop_preview(cam); - cam->overlay_on = false; + if (cam->overlay_filp != file) + retval = cam->overlay_filp ? -EBUSY : -EINVAL; + else { + retval = stop_preview(cam); + cam->overlay_on = false; + cam->overlay_filp = NULL; + } } break; } @@ -2550,14 +2621,13 @@ static void camera_callback(u32 mask, void *dev) pr_debug("In MVC:camera_callback\n"); - spin_lock(&cam->queue_int_lock); - spin_lock(&cam->dqueue_int_lock); + spin_lock(&cam->queue_lock); + if (!list_empty(&cam->working_q)) { do_gettimeofday(&cur_time); - done_frame = list_entry(cam->working_q.next, - struct mxc_v4l_frame, - queue); + done_frame = list_first_entry(&cam->working_q, + struct mxc_v4l_frame, queue); if (done_frame->ipu_buf_num != cam->local_buf_num) goto next; @@ -2569,32 +2639,24 @@ static void camera_callback(u32 mask, void *dev) */ done_frame->buffer.timestamp = cur_time; - if (done_frame->buffer.flags & V4L2_BUF_FLAG_QUEUED) { - done_frame->buffer.flags |= V4L2_BUF_FLAG_DONE; - done_frame->buffer.flags &= ~V4L2_BUF_FLAG_QUEUED; + list_del(&done_frame->queue); + list_add_tail(&done_frame->queue, &cam->done_q); - /* Added to the done queue */ - list_del(cam->working_q.next); - list_add_tail(&done_frame->queue, &cam->done_q); + done_frame->buffer.flags &= ~V4L2_BUF_FLAG_QUEUED; + done_frame->buffer.flags |= V4L2_BUF_FLAG_DONE; - /* Wake up the queue */ - cam->enc_counter++; - wake_up_interruptible(&cam->enc_queue); - } else - pr_err("ERROR: v4l2 capture: camera_callback: " - "buffer not queued\n"); + wake_up_interruptible(&cam->enc_queue); } next: if (!list_empty(&cam->ready_q)) { - ready_frame = list_entry(cam->ready_q.next, - struct mxc_v4l_frame, - queue); + ready_frame = list_first_entry(&cam->ready_q, + struct mxc_v4l_frame, queue); if (cam->enc_update_eba) if (cam->enc_update_eba(cam->ipu, ready_frame->buffer.m.offset, &cam->ping_pong_csi) == 0) { - list_del(cam->ready_q.next); + list_del(&ready_frame->queue); list_add_tail(&ready_frame->queue, &cam->working_q); ready_frame->ipu_buf_num = cam->local_buf_num; @@ -2607,8 +2669,7 @@ next: } cam->local_buf_num = (cam->local_buf_num == 0) ? 1 : 0; - spin_unlock(&cam->dqueue_int_lock); - spin_unlock(&cam->queue_int_lock); + spin_unlock(&cam->queue_lock); return; } @@ -2742,8 +2803,7 @@ static int init_camera_struct(cam_data *cam, struct platform_device *pdev) cam->enc_callback = camera_callback; init_waitqueue_head(&cam->power_queue); - spin_lock_init(&cam->queue_int_lock); - spin_lock_init(&cam->dqueue_int_lock); + spin_lock_init(&cam->queue_lock); cam->self = kmalloc(sizeof(struct v4l2_int_device), GFP_KERNEL); cam->self->module = THIS_MODULE; diff --git a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h index 9294dc6..5f5d519 100644 --- a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h +++ b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.h @@ -119,16 +119,15 @@ typedef struct _cam_data { struct semaphore param_lock; /* Encoder */ + int alloced_buffers; struct list_head ready_q; struct list_head done_q; struct list_head working_q; int ping_pong_csi; - spinlock_t queue_int_lock; - spinlock_t dqueue_int_lock; + spinlock_t queue_lock; struct mxc_v4l_frame frame[FRAME_NUM]; struct mxc_v4l_frame dummy_frame; wait_queue_head_t enc_queue; - int enc_counter; dma_addr_t rot_enc_bufs[2]; void *rot_enc_bufs_vaddr[2]; int rot_enc_buf_size[2]; @@ -202,8 +201,8 @@ typedef struct _cam_data { /* misc status flag */ bool overlay_on; bool capture_on; - int overlay_pid; - int capture_pid; + struct file *overlay_filp; + struct file *capture_filp; bool low_power; wait_queue_head_t power_queue; unsigned int ipu_id; -- 2.1.4 --------------050303030200050103040805 Content-Type: text/x-patch; name="0002-mxc-ov5640-autofocus-support.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-mxc-ov5640-autofocus-support.patch" >From 804964d92e6b27c3d3f685a208240dd164d56808 Mon Sep 17 00:00:00 2001 From: Nikita Yushchenko Date: Wed, 16 Sep 2015 19:29:14 +0300 Subject: [PATCH] mxc/ov5640: autofocus support This includes OV5640 AF firmware and implementation of AF-related ioctl's. Signed-off-by: Nikita Yushchenko --- drivers/media/platform/mxc/capture/bin2ov5640fw.c | 30 + .../media/platform/mxc/capture/mxc_v4l2_capture.c | 24 + .../platform/mxc/capture/ov5640_af_firmware.c | 1363 ++++++++++++++++++++ drivers/media/platform/mxc/capture/ov5640_mipi.c | 615 +++++++++ 4 files changed, 2032 insertions(+) create mode 100644 drivers/media/platform/mxc/capture/bin2ov5640fw.c create mode 100644 drivers/media/platform/mxc/capture/ov5640_af_firmware.c diff --git a/drivers/media/platform/mxc/capture/bin2ov5640fw.c b/drivers/media/platform/mxc/capture/bin2ov5640fw.c new file mode 100644 index 0000000..1c9c520 --- /dev/null +++ b/drivers/media/platform/mxc/capture/bin2ov5640fw.c @@ -0,0 +1,30 @@ +/* Usage: bin2ov5640fw < fw.bin > ov5640_af_firmware.h */ + +#include +#include + +int main() +{ + unsigned char buf[0x1000]; + int i, len; + + len = read(0, buf, sizeof(buf)); + if (len < 0) { + fprintf(stderr, "read stdin: %m\n"); + return 1; + } + + printf("/* Generated by bin2ov5640fw */\n\n"); + + printf("static struct reg_value ov5640_af_firmware[] = {"); + for (i = 0; i < len; i++) { + printf("%s{0x%04x, 0x%02x, 0, 0}%s", + ((i % 3) == 0) ? "\n\t" : " ", + i + 0x8000, + buf[i], + (i < len - 1) ? "," : ""); + } + printf("\n};\n"); + + return 0; +} diff --git a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c index 37ffd02..f6d2a44 100644 --- a/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c +++ b/drivers/media/platform/mxc/capture/mxc_v4l2_capture.c @@ -1077,6 +1077,17 @@ static int mxc_v4l2_g_ctrl(cam_data *cam, struct v4l2_control *c) status = -ENODEV; } break; + case V4L2_CID_AUTO_FOCUS_STATUS: + case V4L2_CID_FOCUS_AUTO: + case V4L2_CID_AUTO_FOCUS_RANGE: + case V4L2_CID_3A_LOCK: + if (cam->sensor) + status = vidioc_int_g_ctrl(cam->sensor, c); + else { + pr_err("ERROR: v4l2 capture: slave not found!\n"); + status = -ENODEV; + } + break; default: pr_err("ERROR: v4l2 capture: unsupported ioctrl!\n"); } @@ -1241,6 +1252,18 @@ static int mxc_v4l2_s_ctrl(cam_data *cam, struct v4l2_control *c) ret = -ENODEV; } break; + case V4L2_CID_AUTO_FOCUS_START: + case V4L2_CID_AUTO_FOCUS_STOP: + case V4L2_CID_FOCUS_AUTO: + case V4L2_CID_AUTO_FOCUS_RANGE: + case V4L2_CID_3A_LOCK: + if (cam->sensor) + ret = vidioc_int_s_ctrl(cam->sensor, c); + else { + pr_err("ERROR: v4l2 capture: slave not found!\n"); + ret = -ENODEV; + } + break; case V4L2_CID_MXC_FLASH: #ifdef CONFIG_MXC_IPU_V1 ipu_csi_flash_strobe(true); @@ -1791,6 +1814,7 @@ static int mxc_v4l_close(struct file *file) if (--cam->open_count == 0) { + vidioc_int_dev_exit(cam->sensor); vidioc_int_s_power(cam->sensor, 0); clk_disable_unprepare(sensor->sensor_clk); wait_event_interruptible(cam->power_queue, diff --git a/drivers/media/platform/mxc/capture/ov5640_af_firmware.c b/drivers/media/platform/mxc/capture/ov5640_af_firmware.c new file mode 100644 index 0000000..3700259 --- /dev/null +++ b/drivers/media/platform/mxc/capture/ov5640_af_firmware.c @@ -0,0 +1,1363 @@ +/* Generated by bin2ov5640fw */ + +static struct reg_value ov5640_af_firmware[] = { + {0x8000, 0x02, 0, 0}, {0x8001, 0x0f, 0, 0}, {0x8002, 0xd6, 0, 0}, + {0x8003, 0x02, 0, 0}, {0x8004, 0x0a, 0, 0}, {0x8005, 0x39, 0, 0}, + {0x8006, 0xc2, 0, 0}, {0x8007, 0x01, 0, 0}, {0x8008, 0x22, 0, 0}, + {0x8009, 0x22, 0, 0}, {0x800a, 0x00, 0, 0}, {0x800b, 0x02, 0, 0}, + {0x800c, 0x0f, 0, 0}, {0x800d, 0xb2, 0, 0}, {0x800e, 0xe5, 0, 0}, + {0x800f, 0x1f, 0, 0}, {0x8010, 0x70, 0, 0}, {0x8011, 0x72, 0, 0}, + {0x8012, 0xf5, 0, 0}, {0x8013, 0x1e, 0, 0}, {0x8014, 0xd2, 0, 0}, + {0x8015, 0x35, 0, 0}, {0x8016, 0xff, 0, 0}, {0x8017, 0xef, 0, 0}, + {0x8018, 0x25, 0, 0}, {0x8019, 0xe0, 0, 0}, {0x801a, 0x24, 0, 0}, + {0x801b, 0x4e, 0, 0}, {0x801c, 0xf8, 0, 0}, {0x801d, 0xe4, 0, 0}, + {0x801e, 0xf6, 0, 0}, {0x801f, 0x08, 0, 0}, {0x8020, 0xf6, 0, 0}, + {0x8021, 0x0f, 0, 0}, {0x8022, 0xbf, 0, 0}, {0x8023, 0x34, 0, 0}, + {0x8024, 0xf2, 0, 0}, {0x8025, 0x90, 0, 0}, {0x8026, 0x0e, 0, 0}, + {0x8027, 0x93, 0, 0}, {0x8028, 0xe4, 0, 0}, {0x8029, 0x93, 0, 0}, + {0x802a, 0xff, 0, 0}, {0x802b, 0xe5, 0, 0}, {0x802c, 0x4b, 0, 0}, + {0x802d, 0xc3, 0, 0}, {0x802e, 0x9f, 0, 0}, {0x802f, 0x50, 0, 0}, + {0x8030, 0x04, 0, 0}, {0x8031, 0x7f, 0, 0}, {0x8032, 0x05, 0, 0}, + {0x8033, 0x80, 0, 0}, {0x8034, 0x02, 0, 0}, {0x8035, 0x7f, 0, 0}, + {0x8036, 0xfb, 0, 0}, {0x8037, 0x78, 0, 0}, {0x8038, 0xbd, 0, 0}, + {0x8039, 0xa6, 0, 0}, {0x803a, 0x07, 0, 0}, {0x803b, 0x12, 0, 0}, + {0x803c, 0x0f, 0, 0}, {0x803d, 0x04, 0, 0}, {0x803e, 0x40, 0, 0}, + {0x803f, 0x04, 0, 0}, {0x8040, 0x7f, 0, 0}, {0x8041, 0x03, 0, 0}, + {0x8042, 0x80, 0, 0}, {0x8043, 0x02, 0, 0}, {0x8044, 0x7f, 0, 0}, + {0x8045, 0x30, 0, 0}, {0x8046, 0x78, 0, 0}, {0x8047, 0xbc, 0, 0}, + {0x8048, 0xa6, 0, 0}, {0x8049, 0x07, 0, 0}, {0x804a, 0xe6, 0, 0}, + {0x804b, 0x18, 0, 0}, {0x804c, 0xf6, 0, 0}, {0x804d, 0x08, 0, 0}, + {0x804e, 0xe6, 0, 0}, {0x804f, 0x78, 0, 0}, {0x8050, 0xb9, 0, 0}, + {0x8051, 0xf6, 0, 0}, {0x8052, 0x78, 0, 0}, {0x8053, 0xbc, 0, 0}, + {0x8054, 0xe6, 0, 0}, {0x8055, 0x78, 0, 0}, {0x8056, 0xba, 0, 0}, + {0x8057, 0xf6, 0, 0}, {0x8058, 0x78, 0, 0}, {0x8059, 0xbf, 0, 0}, + {0x805a, 0x76, 0, 0}, {0x805b, 0x33, 0, 0}, {0x805c, 0xe4, 0, 0}, + {0x805d, 0x08, 0, 0}, {0x805e, 0xf6, 0, 0}, {0x805f, 0x78, 0, 0}, + {0x8060, 0xb8, 0, 0}, {0x8061, 0x76, 0, 0}, {0x8062, 0x01, 0, 0}, + {0x8063, 0x75, 0, 0}, {0x8064, 0x4a, 0, 0}, {0x8065, 0x02, 0, 0}, + {0x8066, 0x78, 0, 0}, {0x8067, 0xb6, 0, 0}, {0x8068, 0xf6, 0, 0}, + {0x8069, 0x08, 0, 0}, {0x806a, 0xf6, 0, 0}, {0x806b, 0x74, 0, 0}, + {0x806c, 0xff, 0, 0}, {0x806d, 0x78, 0, 0}, {0x806e, 0xc1, 0, 0}, + {0x806f, 0xf6, 0, 0}, {0x8070, 0x08, 0, 0}, {0x8071, 0xf6, 0, 0}, + {0x8072, 0x75, 0, 0}, {0x8073, 0x1f, 0, 0}, {0x8074, 0x01, 0, 0}, + {0x8075, 0x78, 0, 0}, {0x8076, 0xbc, 0, 0}, {0x8077, 0xe6, 0, 0}, + {0x8078, 0x75, 0, 0}, {0x8079, 0xf0, 0, 0}, {0x807a, 0x05, 0, 0}, + {0x807b, 0xa4, 0, 0}, {0x807c, 0xf5, 0, 0}, {0x807d, 0x4b, 0, 0}, + {0x807e, 0x12, 0, 0}, {0x807f, 0x0a, 0, 0}, {0x8080, 0xff, 0, 0}, + {0x8081, 0xc2, 0, 0}, {0x8082, 0x37, 0, 0}, {0x8083, 0x22, 0, 0}, + {0x8084, 0x78, 0, 0}, {0x8085, 0xb8, 0, 0}, {0x8086, 0xe6, 0, 0}, + {0x8087, 0xd3, 0, 0}, {0x8088, 0x94, 0, 0}, {0x8089, 0x00, 0, 0}, + {0x808a, 0x40, 0, 0}, {0x808b, 0x02, 0, 0}, {0x808c, 0x16, 0, 0}, + {0x808d, 0x22, 0, 0}, {0x808e, 0xe5, 0, 0}, {0x808f, 0x1f, 0, 0}, + {0x8090, 0xb4, 0, 0}, {0x8091, 0x05, 0, 0}, {0x8092, 0x23, 0, 0}, + {0x8093, 0xe4, 0, 0}, {0x8094, 0xf5, 0, 0}, {0x8095, 0x1f, 0, 0}, + {0x8096, 0xc2, 0, 0}, {0x8097, 0x01, 0, 0}, {0x8098, 0x78, 0, 0}, + {0x8099, 0xb6, 0, 0}, {0x809a, 0xe6, 0, 0}, {0x809b, 0xfe, 0, 0}, + {0x809c, 0x08, 0, 0}, {0x809d, 0xe6, 0, 0}, {0x809e, 0xff, 0, 0}, + {0x809f, 0x78, 0, 0}, {0x80a0, 0x4e, 0, 0}, {0x80a1, 0xa6, 0, 0}, + {0x80a2, 0x06, 0, 0}, {0x80a3, 0x08, 0, 0}, {0x80a4, 0xa6, 0, 0}, + {0x80a5, 0x07, 0, 0}, {0x80a6, 0xa2, 0, 0}, {0x80a7, 0x37, 0, 0}, + {0x80a8, 0xe4, 0, 0}, {0x80a9, 0x33, 0, 0}, {0x80aa, 0xf5, 0, 0}, + {0x80ab, 0x3c, 0, 0}, {0x80ac, 0x90, 0, 0}, {0x80ad, 0x30, 0, 0}, + {0x80ae, 0x28, 0, 0}, {0x80af, 0xf0, 0, 0}, {0x80b0, 0x75, 0, 0}, + {0x80b1, 0x1e, 0, 0}, {0x80b2, 0x10, 0, 0}, {0x80b3, 0xd2, 0, 0}, + {0x80b4, 0x35, 0, 0}, {0x80b5, 0x22, 0, 0}, {0x80b6, 0xe5, 0, 0}, + {0x80b7, 0x4b, 0, 0}, {0x80b8, 0x75, 0, 0}, {0x80b9, 0xf0, 0, 0}, + {0x80ba, 0x05, 0, 0}, {0x80bb, 0x84, 0, 0}, {0x80bc, 0x78, 0, 0}, + {0x80bd, 0xbc, 0, 0}, {0x80be, 0xf6, 0, 0}, {0x80bf, 0x90, 0, 0}, + {0x80c0, 0x0e, 0, 0}, {0x80c1, 0x8c, 0, 0}, {0x80c2, 0xe4, 0, 0}, + {0x80c3, 0x93, 0, 0}, {0x80c4, 0xff, 0, 0}, {0x80c5, 0x25, 0, 0}, + {0x80c6, 0xe0, 0, 0}, {0x80c7, 0x24, 0, 0}, {0x80c8, 0x0a, 0, 0}, + {0x80c9, 0xf8, 0, 0}, {0x80ca, 0xe6, 0, 0}, {0x80cb, 0xfc, 0, 0}, + {0x80cc, 0x08, 0, 0}, {0x80cd, 0xe6, 0, 0}, {0x80ce, 0xfd, 0, 0}, + {0x80cf, 0x78, 0, 0}, {0x80d0, 0xbc, 0, 0}, {0x80d1, 0xe6, 0, 0}, + {0x80d2, 0x25, 0, 0}, {0x80d3, 0xe0, 0, 0}, {0x80d4, 0x24, 0, 0}, + {0x80d5, 0x4e, 0, 0}, {0x80d6, 0xf8, 0, 0}, {0x80d7, 0xa6, 0, 0}, + {0x80d8, 0x04, 0, 0}, {0x80d9, 0x08, 0, 0}, {0x80da, 0xa6, 0, 0}, + {0x80db, 0x05, 0, 0}, {0x80dc, 0xef, 0, 0}, {0x80dd, 0x12, 0, 0}, + {0x80de, 0x0f, 0, 0}, {0x80df, 0x0b, 0, 0}, {0x80e0, 0xd3, 0, 0}, + {0x80e1, 0x78, 0, 0}, {0x80e2, 0xb7, 0, 0}, {0x80e3, 0x96, 0, 0}, + {0x80e4, 0xee, 0, 0}, {0x80e5, 0x18, 0, 0}, {0x80e6, 0x96, 0, 0}, + {0x80e7, 0x40, 0, 0}, {0x80e8, 0x0d, 0, 0}, {0x80e9, 0x78, 0, 0}, + {0x80ea, 0xbc, 0, 0}, {0x80eb, 0xe6, 0, 0}, {0x80ec, 0x78, 0, 0}, + {0x80ed, 0xb9, 0, 0}, {0x80ee, 0xf6, 0, 0}, {0x80ef, 0x78, 0, 0}, + {0x80f0, 0xb6, 0, 0}, {0x80f1, 0xa6, 0, 0}, {0x80f2, 0x06, 0, 0}, + {0x80f3, 0x08, 0, 0}, {0x80f4, 0xa6, 0, 0}, {0x80f5, 0x07, 0, 0}, + {0x80f6, 0x90, 0, 0}, {0x80f7, 0x0e, 0, 0}, {0x80f8, 0x8c, 0, 0}, + {0x80f9, 0xe4, 0, 0}, {0x80fa, 0x93, 0, 0}, {0x80fb, 0x12, 0, 0}, + {0x80fc, 0x0f, 0, 0}, {0x80fd, 0x0b, 0, 0}, {0x80fe, 0xc3, 0, 0}, + {0x80ff, 0x78, 0, 0}, {0x8100, 0xc2, 0, 0}, {0x8101, 0x96, 0, 0}, + {0x8102, 0xee, 0, 0}, {0x8103, 0x18, 0, 0}, {0x8104, 0x96, 0, 0}, + {0x8105, 0x50, 0, 0}, {0x8106, 0x0d, 0, 0}, {0x8107, 0x78, 0, 0}, + {0x8108, 0xbc, 0, 0}, {0x8109, 0xe6, 0, 0}, {0x810a, 0x78, 0, 0}, + {0x810b, 0xba, 0, 0}, {0x810c, 0xf6, 0, 0}, {0x810d, 0x78, 0, 0}, + {0x810e, 0xc1, 0, 0}, {0x810f, 0xa6, 0, 0}, {0x8110, 0x06, 0, 0}, + {0x8111, 0x08, 0, 0}, {0x8112, 0xa6, 0, 0}, {0x8113, 0x07, 0, 0}, + {0x8114, 0x78, 0, 0}, {0x8115, 0xb6, 0, 0}, {0x8116, 0xe6, 0, 0}, + {0x8117, 0xfe, 0, 0}, {0x8118, 0x08, 0, 0}, {0x8119, 0xe6, 0, 0}, + {0x811a, 0xc3, 0, 0}, {0x811b, 0x78, 0, 0}, {0x811c, 0xc2, 0, 0}, + {0x811d, 0x96, 0, 0}, {0x811e, 0xff, 0, 0}, {0x811f, 0xee, 0, 0}, + {0x8120, 0x18, 0, 0}, {0x8121, 0x96, 0, 0}, {0x8122, 0x78, 0, 0}, + {0x8123, 0xc3, 0, 0}, {0x8124, 0xf6, 0, 0}, {0x8125, 0x08, 0, 0}, + {0x8126, 0xa6, 0, 0}, {0x8127, 0x07, 0, 0}, {0x8128, 0x90, 0, 0}, + {0x8129, 0x0e, 0, 0}, {0x812a, 0x95, 0, 0}, {0x812b, 0xe4, 0, 0}, + {0x812c, 0x18, 0, 0}, {0x812d, 0x12, 0, 0}, {0x812e, 0x0e, 0, 0}, + {0x812f, 0xe9, 0, 0}, {0x8130, 0x40, 0, 0}, {0x8131, 0x02, 0, 0}, + {0x8132, 0xd2, 0, 0}, {0x8133, 0x37, 0, 0}, {0x8134, 0x78, 0, 0}, + {0x8135, 0xbc, 0, 0}, {0x8136, 0xe6, 0, 0}, {0x8137, 0x08, 0, 0}, + {0x8138, 0x26, 0, 0}, {0x8139, 0x08, 0, 0}, {0x813a, 0xf6, 0, 0}, + {0x813b, 0xe5, 0, 0}, {0x813c, 0x1f, 0, 0}, {0x813d, 0x64, 0, 0}, + {0x813e, 0x01, 0, 0}, {0x813f, 0x70, 0, 0}, {0x8140, 0x4a, 0, 0}, + {0x8141, 0xe6, 0, 0}, {0x8142, 0xc3, 0, 0}, {0x8143, 0x78, 0, 0}, + {0x8144, 0xc0, 0, 0}, {0x8145, 0x12, 0, 0}, {0x8146, 0x0e, 0, 0}, + {0x8147, 0xdf, 0, 0}, {0x8148, 0x40, 0, 0}, {0x8149, 0x05, 0, 0}, + {0x814a, 0x12, 0, 0}, {0x814b, 0x0e, 0, 0}, {0x814c, 0xda, 0, 0}, + {0x814d, 0x40, 0, 0}, {0x814e, 0x39, 0, 0}, {0x814f, 0x12, 0, 0}, + {0x8150, 0x0f, 0, 0}, {0x8151, 0x02, 0, 0}, {0x8152, 0x40, 0, 0}, + {0x8153, 0x04, 0, 0}, {0x8154, 0x7f, 0, 0}, {0x8155, 0xfe, 0, 0}, + {0x8156, 0x80, 0, 0}, {0x8157, 0x02, 0, 0}, {0x8158, 0x7f, 0, 0}, + {0x8159, 0x02, 0, 0}, {0x815a, 0x78, 0, 0}, {0x815b, 0xbd, 0, 0}, + {0x815c, 0xa6, 0, 0}, {0x815d, 0x07, 0, 0}, {0x815e, 0x78, 0, 0}, + {0x815f, 0xb9, 0, 0}, {0x8160, 0xe6, 0, 0}, {0x8161, 0x24, 0, 0}, + {0x8162, 0x03, 0, 0}, {0x8163, 0x78, 0, 0}, {0x8164, 0xbf, 0, 0}, + {0x8165, 0xf6, 0, 0}, {0x8166, 0x78, 0, 0}, {0x8167, 0xb9, 0, 0}, + {0x8168, 0xe6, 0, 0}, {0x8169, 0x24, 0, 0}, {0x816a, 0xfd, 0, 0}, + {0x816b, 0x78, 0, 0}, {0x816c, 0xc0, 0, 0}, {0x816d, 0xf6, 0, 0}, + {0x816e, 0x12, 0, 0}, {0x816f, 0x0f, 0, 0}, {0x8170, 0x02, 0, 0}, + {0x8171, 0x40, 0, 0}, {0x8172, 0x06, 0, 0}, {0x8173, 0x78, 0, 0}, + {0x8174, 0xc0, 0, 0}, {0x8175, 0xe6, 0, 0}, {0x8176, 0xff, 0, 0}, + {0x8177, 0x80, 0, 0}, {0x8178, 0x04, 0, 0}, {0x8179, 0x78, 0, 0}, + {0x817a, 0xbf, 0, 0}, {0x817b, 0xe6, 0, 0}, {0x817c, 0xff, 0, 0}, + {0x817d, 0x78, 0, 0}, {0x817e, 0xbe, 0, 0}, {0x817f, 0xa6, 0, 0}, + {0x8180, 0x07, 0, 0}, {0x8181, 0x75, 0, 0}, {0x8182, 0x1f, 0, 0}, + {0x8183, 0x02, 0, 0}, {0x8184, 0x78, 0, 0}, {0x8185, 0xb8, 0, 0}, + {0x8186, 0x76, 0, 0}, {0x8187, 0x01, 0, 0}, {0x8188, 0x02, 0, 0}, + {0x8189, 0x02, 0, 0}, {0x818a, 0x4a, 0, 0}, {0x818b, 0xe5, 0, 0}, + {0x818c, 0x1f, 0, 0}, {0x818d, 0x64, 0, 0}, {0x818e, 0x02, 0, 0}, + {0x818f, 0x60, 0, 0}, {0x8190, 0x03, 0, 0}, {0x8191, 0x02, 0, 0}, + {0x8192, 0x02, 0, 0}, {0x8193, 0x2a, 0, 0}, {0x8194, 0x78, 0, 0}, + {0x8195, 0xbe, 0, 0}, {0x8196, 0xe6, 0, 0}, {0x8197, 0xff, 0, 0}, + {0x8198, 0xc3, 0, 0}, {0x8199, 0x78, 0, 0}, {0x819a, 0xc0, 0, 0}, + {0x819b, 0x12, 0, 0}, {0x819c, 0x0e, 0, 0}, {0x819d, 0xe0, 0, 0}, + {0x819e, 0x40, 0, 0}, {0x819f, 0x08, 0, 0}, {0x81a0, 0x12, 0, 0}, + {0x81a1, 0x0e, 0, 0}, {0x81a2, 0xda, 0, 0}, {0x81a3, 0x50, 0, 0}, + {0x81a4, 0x03, 0, 0}, {0x81a5, 0x02, 0, 0}, {0x81a6, 0x02, 0, 0}, + {0x81a7, 0x28, 0, 0}, {0x81a8, 0x12, 0, 0}, {0x81a9, 0x0f, 0, 0}, + {0x81aa, 0x02, 0, 0}, {0x81ab, 0x40, 0, 0}, {0x81ac, 0x04, 0, 0}, + {0x81ad, 0x7f, 0, 0}, {0x81ae, 0xff, 0, 0}, {0x81af, 0x80, 0, 0}, + {0x81b0, 0x02, 0, 0}, {0x81b1, 0x7f, 0, 0}, {0x81b2, 0x01, 0, 0}, + {0x81b3, 0x78, 0, 0}, {0x81b4, 0xbd, 0, 0}, {0x81b5, 0xa6, 0, 0}, + {0x81b6, 0x07, 0, 0}, {0x81b7, 0x78, 0, 0}, {0x81b8, 0xb9, 0, 0}, + {0x81b9, 0xe6, 0, 0}, {0x81ba, 0x04, 0, 0}, {0x81bb, 0x78, 0, 0}, + {0x81bc, 0xbf, 0, 0}, {0x81bd, 0xf6, 0, 0}, {0x81be, 0x78, 0, 0}, + {0x81bf, 0xb9, 0, 0}, {0x81c0, 0xe6, 0, 0}, {0x81c1, 0x14, 0, 0}, + {0x81c2, 0x78, 0, 0}, {0x81c3, 0xc0, 0, 0}, {0x81c4, 0xf6, 0, 0}, + {0x81c5, 0x18, 0, 0}, {0x81c6, 0x12, 0, 0}, {0x81c7, 0x0f, 0, 0}, + {0x81c8, 0x04, 0, 0}, {0x81c9, 0x40, 0, 0}, {0x81ca, 0x04, 0, 0}, + {0x81cb, 0xe6, 0, 0}, {0x81cc, 0xff, 0, 0}, {0x81cd, 0x80, 0, 0}, + {0x81ce, 0x02, 0, 0}, {0x81cf, 0x7f, 0, 0}, {0x81d0, 0x00, 0, 0}, + {0x81d1, 0x78, 0, 0}, {0x81d2, 0xbf, 0, 0}, {0x81d3, 0xa6, 0, 0}, + {0x81d4, 0x07, 0, 0}, {0x81d5, 0xd3, 0, 0}, {0x81d6, 0x08, 0, 0}, + {0x81d7, 0xe6, 0, 0}, {0x81d8, 0x64, 0, 0}, {0x81d9, 0x80, 0, 0}, + {0x81da, 0x94, 0, 0}, {0x81db, 0x80, 0, 0}, {0x81dc, 0x40, 0, 0}, + {0x81dd, 0x04, 0, 0}, {0x81de, 0xe6, 0, 0}, {0x81df, 0xff, 0, 0}, + {0x81e0, 0x80, 0, 0}, {0x81e1, 0x02, 0, 0}, {0x81e2, 0x7f, 0, 0}, + {0x81e3, 0x00, 0, 0}, {0x81e4, 0x78, 0, 0}, {0x81e5, 0xc0, 0, 0}, + {0x81e6, 0xa6, 0, 0}, {0x81e7, 0x07, 0, 0}, {0x81e8, 0xc3, 0, 0}, + {0x81e9, 0x18, 0, 0}, {0x81ea, 0xe6, 0, 0}, {0x81eb, 0x64, 0, 0}, + {0x81ec, 0x80, 0, 0}, {0x81ed, 0x94, 0, 0}, {0x81ee, 0xb3, 0, 0}, + {0x81ef, 0x50, 0, 0}, {0x81f0, 0x04, 0, 0}, {0x81f1, 0xe6, 0, 0}, + {0x81f2, 0xff, 0, 0}, {0x81f3, 0x80, 0, 0}, {0x81f4, 0x02, 0, 0}, + {0x81f5, 0x7f, 0, 0}, {0x81f6, 0x33, 0, 0}, {0x81f7, 0x78, 0, 0}, + {0x81f8, 0xbf, 0, 0}, {0x81f9, 0xa6, 0, 0}, {0x81fa, 0x07, 0, 0}, + {0x81fb, 0xc3, 0, 0}, {0x81fc, 0x08, 0, 0}, {0x81fd, 0xe6, 0, 0}, + {0x81fe, 0x64, 0, 0}, {0x81ff, 0x80, 0, 0}, {0x8200, 0x94, 0, 0}, + {0x8201, 0xb3, 0, 0}, {0x8202, 0x50, 0, 0}, {0x8203, 0x04, 0, 0}, + {0x8204, 0xe6, 0, 0}, {0x8205, 0xff, 0, 0}, {0x8206, 0x80, 0, 0}, + {0x8207, 0x02, 0, 0}, {0x8208, 0x7f, 0, 0}, {0x8209, 0x33, 0, 0}, + {0x820a, 0x78, 0, 0}, {0x820b, 0xc0, 0, 0}, {0x820c, 0xa6, 0, 0}, + {0x820d, 0x07, 0, 0}, {0x820e, 0x12, 0, 0}, {0x820f, 0x0f, 0, 0}, + {0x8210, 0x02, 0, 0}, {0x8211, 0x40, 0, 0}, {0x8212, 0x06, 0, 0}, + {0x8213, 0x78, 0, 0}, {0x8214, 0xc0, 0, 0}, {0x8215, 0xe6, 0, 0}, + {0x8216, 0xff, 0, 0}, {0x8217, 0x80, 0, 0}, {0x8218, 0x04, 0, 0}, + {0x8219, 0x78, 0, 0}, {0x821a, 0xbf, 0, 0}, {0x821b, 0xe6, 0, 0}, + {0x821c, 0xff, 0, 0}, {0x821d, 0x78, 0, 0}, {0x821e, 0xbe, 0, 0}, + {0x821f, 0xa6, 0, 0}, {0x8220, 0x07, 0, 0}, {0x8221, 0x75, 0, 0}, + {0x8222, 0x1f, 0, 0}, {0x8223, 0x03, 0, 0}, {0x8224, 0x78, 0, 0}, + {0x8225, 0xb8, 0, 0}, {0x8226, 0x76, 0, 0}, {0x8227, 0x01, 0, 0}, + {0x8228, 0x80, 0, 0}, {0x8229, 0x20, 0, 0}, {0x822a, 0xe5, 0, 0}, + {0x822b, 0x1f, 0, 0}, {0x822c, 0x64, 0, 0}, {0x822d, 0x03, 0, 0}, + {0x822e, 0x70, 0, 0}, {0x822f, 0x26, 0, 0}, {0x8230, 0x78, 0, 0}, + {0x8231, 0xbe, 0, 0}, {0x8232, 0xe6, 0, 0}, {0x8233, 0xff, 0, 0}, + {0x8234, 0xc3, 0, 0}, {0x8235, 0x78, 0, 0}, {0x8236, 0xc0, 0, 0}, + {0x8237, 0x12, 0, 0}, {0x8238, 0x0e, 0, 0}, {0x8239, 0xe0, 0, 0}, + {0x823a, 0x40, 0, 0}, {0x823b, 0x05, 0, 0}, {0x823c, 0x12, 0, 0}, + {0x823d, 0x0e, 0, 0}, {0x823e, 0xda, 0, 0}, {0x823f, 0x40, 0, 0}, + {0x8240, 0x09, 0, 0}, {0x8241, 0x78, 0, 0}, {0x8242, 0xb9, 0, 0}, + {0x8243, 0xe6, 0, 0}, {0x8244, 0x78, 0, 0}, {0x8245, 0xbe, 0, 0}, + {0x8246, 0xf6, 0, 0}, {0x8247, 0x75, 0, 0}, {0x8248, 0x1f, 0, 0}, + {0x8249, 0x04, 0, 0}, {0x824a, 0x78, 0, 0}, {0x824b, 0xbe, 0, 0}, + {0x824c, 0xe6, 0, 0}, {0x824d, 0x75, 0, 0}, {0x824e, 0xf0, 0, 0}, + {0x824f, 0x05, 0, 0}, {0x8250, 0xa4, 0, 0}, {0x8251, 0xf5, 0, 0}, + {0x8252, 0x4b, 0, 0}, {0x8253, 0x02, 0, 0}, {0x8254, 0x0a, 0, 0}, + {0x8255, 0xff, 0, 0}, {0x8256, 0xe5, 0, 0}, {0x8257, 0x1f, 0, 0}, + {0x8258, 0xb4, 0, 0}, {0x8259, 0x04, 0, 0}, {0x825a, 0x10, 0, 0}, + {0x825b, 0x90, 0, 0}, {0x825c, 0x0e, 0, 0}, {0x825d, 0x94, 0, 0}, + {0x825e, 0xe4, 0, 0}, {0x825f, 0x78, 0, 0}, {0x8260, 0xc3, 0, 0}, + {0x8261, 0x12, 0, 0}, {0x8262, 0x0e, 0, 0}, {0x8263, 0xe9, 0, 0}, + {0x8264, 0x40, 0, 0}, {0x8265, 0x02, 0, 0}, {0x8266, 0xd2, 0, 0}, + {0x8267, 0x37, 0, 0}, {0x8268, 0x75, 0, 0}, {0x8269, 0x1f, 0, 0}, + {0x826a, 0x05, 0, 0}, {0x826b, 0x22, 0, 0}, {0x826c, 0x30, 0, 0}, + {0x826d, 0x01, 0, 0}, {0x826e, 0x03, 0, 0}, {0x826f, 0x02, 0, 0}, + {0x8270, 0x04, 0, 0}, {0x8271, 0xc0, 0, 0}, {0x8272, 0x30, 0, 0}, + {0x8273, 0x02, 0, 0}, {0x8274, 0x03, 0, 0}, {0x8275, 0x02, 0, 0}, + {0x8276, 0x04, 0, 0}, {0x8277, 0xc0, 0, 0}, {0x8278, 0x90, 0, 0}, + {0x8279, 0x51, 0, 0}, {0x827a, 0xa5, 0, 0}, {0x827b, 0xe0, 0, 0}, + {0x827c, 0x78, 0, 0}, {0x827d, 0x93, 0, 0}, {0x827e, 0xf6, 0, 0}, + {0x827f, 0xa3, 0, 0}, {0x8280, 0xe0, 0, 0}, {0x8281, 0x08, 0, 0}, + {0x8282, 0xf6, 0, 0}, {0x8283, 0xa3, 0, 0}, {0x8284, 0xe0, 0, 0}, + {0x8285, 0x08, 0, 0}, {0x8286, 0xf6, 0, 0}, {0x8287, 0xe5, 0, 0}, + {0x8288, 0x1f, 0, 0}, {0x8289, 0x70, 0, 0}, {0x828a, 0x3c, 0, 0}, + {0x828b, 0x75, 0, 0}, {0x828c, 0x1e, 0, 0}, {0x828d, 0x20, 0, 0}, + {0x828e, 0xd2, 0, 0}, {0x828f, 0x35, 0, 0}, {0x8290, 0x12, 0, 0}, + {0x8291, 0x0c, 0, 0}, {0x8292, 0x7a, 0, 0}, {0x8293, 0x78, 0, 0}, + {0x8294, 0x7e, 0, 0}, {0x8295, 0xa6, 0, 0}, {0x8296, 0x06, 0, 0}, + {0x8297, 0x08, 0, 0}, {0x8298, 0xa6, 0, 0}, {0x8299, 0x07, 0, 0}, + {0x829a, 0x78, 0, 0}, {0x829b, 0x8b, 0, 0}, {0x829c, 0xa6, 0, 0}, + {0x829d, 0x09, 0, 0}, {0x829e, 0x18, 0, 0}, {0x829f, 0x76, 0, 0}, + {0x82a0, 0x01, 0, 0}, {0x82a1, 0x12, 0, 0}, {0x82a2, 0x0c, 0, 0}, + {0x82a3, 0x5b, 0, 0}, {0x82a4, 0x78, 0, 0}, {0x82a5, 0x4e, 0, 0}, + {0x82a6, 0xa6, 0, 0}, {0x82a7, 0x06, 0, 0}, {0x82a8, 0x08, 0, 0}, + {0x82a9, 0xa6, 0, 0}, {0x82aa, 0x07, 0, 0}, {0x82ab, 0x78, 0, 0}, + {0x82ac, 0x8b, 0, 0}, {0x82ad, 0xe6, 0, 0}, {0x82ae, 0x78, 0, 0}, + {0x82af, 0x6e, 0, 0}, {0x82b0, 0xf6, 0, 0}, {0x82b1, 0x75, 0, 0}, + {0x82b2, 0x1f, 0, 0}, {0x82b3, 0x01, 0, 0}, {0x82b4, 0x78, 0, 0}, + {0x82b5, 0x93, 0, 0}, {0x82b6, 0xe6, 0, 0}, {0x82b7, 0x78, 0, 0}, + {0x82b8, 0x90, 0, 0}, {0x82b9, 0xf6, 0, 0}, {0x82ba, 0x78, 0, 0}, + {0x82bb, 0x94, 0, 0}, {0x82bc, 0xe6, 0, 0}, {0x82bd, 0x78, 0, 0}, + {0x82be, 0x91, 0, 0}, {0x82bf, 0xf6, 0, 0}, {0x82c0, 0x78, 0, 0}, + {0x82c1, 0x95, 0, 0}, {0x82c2, 0xe6, 0, 0}, {0x82c3, 0x78, 0, 0}, + {0x82c4, 0x92, 0, 0}, {0x82c5, 0xf6, 0, 0}, {0x82c6, 0x22, 0, 0}, + {0x82c7, 0x79, 0, 0}, {0x82c8, 0x90, 0, 0}, {0x82c9, 0xe7, 0, 0}, + {0x82ca, 0xd3, 0, 0}, {0x82cb, 0x78, 0, 0}, {0x82cc, 0x93, 0, 0}, + {0x82cd, 0x96, 0, 0}, {0x82ce, 0x40, 0, 0}, {0x82cf, 0x05, 0, 0}, + {0x82d0, 0xe7, 0, 0}, {0x82d1, 0x96, 0, 0}, {0x82d2, 0xff, 0, 0}, + {0x82d3, 0x80, 0, 0}, {0x82d4, 0x08, 0, 0}, {0x82d5, 0xc3, 0, 0}, + {0x82d6, 0x79, 0, 0}, {0x82d7, 0x93, 0, 0}, {0x82d8, 0xe7, 0, 0}, + {0x82d9, 0x78, 0, 0}, {0x82da, 0x90, 0, 0}, {0x82db, 0x96, 0, 0}, + {0x82dc, 0xff, 0, 0}, {0x82dd, 0x78, 0, 0}, {0x82de, 0x88, 0, 0}, + {0x82df, 0x76, 0, 0}, {0x82e0, 0x00, 0, 0}, {0x82e1, 0x08, 0, 0}, + {0x82e2, 0xa6, 0, 0}, {0x82e3, 0x07, 0, 0}, {0x82e4, 0x79, 0, 0}, + {0x82e5, 0x91, 0, 0}, {0x82e6, 0xe7, 0, 0}, {0x82e7, 0xd3, 0, 0}, + {0x82e8, 0x78, 0, 0}, {0x82e9, 0x94, 0, 0}, {0x82ea, 0x96, 0, 0}, + {0x82eb, 0x40, 0, 0}, {0x82ec, 0x05, 0, 0}, {0x82ed, 0xe7, 0, 0}, + {0x82ee, 0x96, 0, 0}, {0x82ef, 0xff, 0, 0}, {0x82f0, 0x80, 0, 0}, + {0x82f1, 0x08, 0, 0}, {0x82f2, 0xc3, 0, 0}, {0x82f3, 0x79, 0, 0}, + {0x82f4, 0x94, 0, 0}, {0x82f5, 0xe7, 0, 0}, {0x82f6, 0x78, 0, 0}, + {0x82f7, 0x91, 0, 0}, {0x82f8, 0x96, 0, 0}, {0x82f9, 0xff, 0, 0}, + {0x82fa, 0x12, 0, 0}, {0x82fb, 0x0c, 0, 0}, {0x82fc, 0x8e, 0, 0}, + {0x82fd, 0x79, 0, 0}, {0x82fe, 0x92, 0, 0}, {0x82ff, 0xe7, 0, 0}, + {0x8300, 0xd3, 0, 0}, {0x8301, 0x78, 0, 0}, {0x8302, 0x95, 0, 0}, + {0x8303, 0x96, 0, 0}, {0x8304, 0x40, 0, 0}, {0x8305, 0x05, 0, 0}, + {0x8306, 0xe7, 0, 0}, {0x8307, 0x96, 0, 0}, {0x8308, 0xff, 0, 0}, + {0x8309, 0x80, 0, 0}, {0x830a, 0x08, 0, 0}, {0x830b, 0xc3, 0, 0}, + {0x830c, 0x79, 0, 0}, {0x830d, 0x95, 0, 0}, {0x830e, 0xe7, 0, 0}, + {0x830f, 0x78, 0, 0}, {0x8310, 0x92, 0, 0}, {0x8311, 0x96, 0, 0}, + {0x8312, 0xff, 0, 0}, {0x8313, 0x12, 0, 0}, {0x8314, 0x0c, 0, 0}, + {0x8315, 0x8e, 0, 0}, {0x8316, 0x12, 0, 0}, {0x8317, 0x0c, 0, 0}, + {0x8318, 0x5b, 0, 0}, {0x8319, 0x78, 0, 0}, {0x831a, 0x8a, 0, 0}, + {0x831b, 0xe6, 0, 0}, {0x831c, 0x25, 0, 0}, {0x831d, 0xe0, 0, 0}, + {0x831e, 0x24, 0, 0}, {0x831f, 0x4e, 0, 0}, {0x8320, 0xf8, 0, 0}, + {0x8321, 0xa6, 0, 0}, {0x8322, 0x06, 0, 0}, {0x8323, 0x08, 0, 0}, + {0x8324, 0xa6, 0, 0}, {0x8325, 0x07, 0, 0}, {0x8326, 0x78, 0, 0}, + {0x8327, 0x8a, 0, 0}, {0x8328, 0xe6, 0, 0}, {0x8329, 0x24, 0, 0}, + {0x832a, 0x6e, 0, 0}, {0x832b, 0xf8, 0, 0}, {0x832c, 0xa6, 0, 0}, + {0x832d, 0x09, 0, 0}, {0x832e, 0x78, 0, 0}, {0x832f, 0x8a, 0, 0}, + {0x8330, 0xe6, 0, 0}, {0x8331, 0x24, 0, 0}, {0x8332, 0x01, 0, 0}, + {0x8333, 0xff, 0, 0}, {0x8334, 0xe4, 0, 0}, {0x8335, 0x33, 0, 0}, + {0x8336, 0xfe, 0, 0}, {0x8337, 0xd3, 0, 0}, {0x8338, 0xef, 0, 0}, + {0x8339, 0x94, 0, 0}, {0x833a, 0x0f, 0, 0}, {0x833b, 0xee, 0, 0}, + {0x833c, 0x64, 0, 0}, {0x833d, 0x80, 0, 0}, {0x833e, 0x94, 0, 0}, + {0x833f, 0x80, 0, 0}, {0x8340, 0x40, 0, 0}, {0x8341, 0x04, 0, 0}, + {0x8342, 0x7f, 0, 0}, {0x8343, 0x00, 0, 0}, {0x8344, 0x80, 0, 0}, + {0x8345, 0x05, 0, 0}, {0x8346, 0x78, 0, 0}, {0x8347, 0x8a, 0, 0}, + {0x8348, 0xe6, 0, 0}, {0x8349, 0x04, 0, 0}, {0x834a, 0xff, 0, 0}, + {0x834b, 0x78, 0, 0}, {0x834c, 0x8a, 0, 0}, {0x834d, 0xa6, 0, 0}, + {0x834e, 0x07, 0, 0}, {0x834f, 0xe5, 0, 0}, {0x8350, 0x1f, 0, 0}, + {0x8351, 0xb4, 0, 0}, {0x8352, 0x01, 0, 0}, {0x8353, 0x0a, 0, 0}, + {0x8354, 0xe6, 0, 0}, {0x8355, 0x60, 0, 0}, {0x8356, 0x03, 0, 0}, + {0x8357, 0x02, 0, 0}, {0x8358, 0x04, 0, 0}, {0x8359, 0xc0, 0, 0}, + {0x835a, 0x75, 0, 0}, {0x835b, 0x1f, 0, 0}, {0x835c, 0x02, 0, 0}, + {0x835d, 0x22, 0, 0}, {0x835e, 0x12, 0, 0}, {0x835f, 0x0c, 0, 0}, + {0x8360, 0x7a, 0, 0}, {0x8361, 0x78, 0, 0}, {0x8362, 0x80, 0, 0}, + {0x8363, 0xa6, 0, 0}, {0x8364, 0x06, 0, 0}, {0x8365, 0x08, 0, 0}, + {0x8366, 0xa6, 0, 0}, {0x8367, 0x07, 0, 0}, {0x8368, 0x12, 0, 0}, + {0x8369, 0x0c, 0, 0}, {0x836a, 0x7a, 0, 0}, {0x836b, 0x78, 0, 0}, + {0x836c, 0x82, 0, 0}, {0x836d, 0xa6, 0, 0}, {0x836e, 0x06, 0, 0}, + {0x836f, 0x08, 0, 0}, {0x8370, 0xa6, 0, 0}, {0x8371, 0x07, 0, 0}, + {0x8372, 0x78, 0, 0}, {0x8373, 0x6e, 0, 0}, {0x8374, 0xe6, 0, 0}, + {0x8375, 0x78, 0, 0}, {0x8376, 0x8c, 0, 0}, {0x8377, 0xf6, 0, 0}, + {0x8378, 0x78, 0, 0}, {0x8379, 0x6e, 0, 0}, {0x837a, 0xe6, 0, 0}, + {0x837b, 0x78, 0, 0}, {0x837c, 0x8d, 0, 0}, {0x837d, 0xf6, 0, 0}, + {0x837e, 0x7f, 0, 0}, {0x837f, 0x01, 0, 0}, {0x8380, 0xef, 0, 0}, + {0x8381, 0x25, 0, 0}, {0x8382, 0xe0, 0, 0}, {0x8383, 0x24, 0, 0}, + {0x8384, 0x4f, 0, 0}, {0x8385, 0xf9, 0, 0}, {0x8386, 0xc3, 0, 0}, + {0x8387, 0x78, 0, 0}, {0x8388, 0x81, 0, 0}, {0x8389, 0xe6, 0, 0}, + {0x838a, 0x97, 0, 0}, {0x838b, 0x18, 0, 0}, {0x838c, 0xe6, 0, 0}, + {0x838d, 0x19, 0, 0}, {0x838e, 0x97, 0, 0}, {0x838f, 0x50, 0, 0}, + {0x8390, 0x0a, 0, 0}, {0x8391, 0x12, 0, 0}, {0x8392, 0x0c, 0, 0}, + {0x8393, 0x82, 0, 0}, {0x8394, 0x78, 0, 0}, {0x8395, 0x80, 0, 0}, + {0x8396, 0xa6, 0, 0}, {0x8397, 0x04, 0, 0}, {0x8398, 0x08, 0, 0}, + {0x8399, 0xa6, 0, 0}, {0x839a, 0x05, 0, 0}, {0x839b, 0x74, 0, 0}, + {0x839c, 0x6e, 0, 0}, {0x839d, 0x2f, 0, 0}, {0x839e, 0xf9, 0, 0}, + {0x839f, 0x78, 0, 0}, {0x83a0, 0x8c, 0, 0}, {0x83a1, 0xe6, 0, 0}, + {0x83a2, 0xc3, 0, 0}, {0x83a3, 0x97, 0, 0}, {0x83a4, 0x50, 0, 0}, + {0x83a5, 0x08, 0, 0}, {0x83a6, 0x74, 0, 0}, {0x83a7, 0x6e, 0, 0}, + {0x83a8, 0x2f, 0, 0}, {0x83a9, 0xf8, 0, 0}, {0x83aa, 0xe6, 0, 0}, + {0x83ab, 0x78, 0, 0}, {0x83ac, 0x8c, 0, 0}, {0x83ad, 0xf6, 0, 0}, + {0x83ae, 0xef, 0, 0}, {0x83af, 0x25, 0, 0}, {0x83b0, 0xe0, 0, 0}, + {0x83b1, 0x24, 0, 0}, {0x83b2, 0x4f, 0, 0}, {0x83b3, 0xf9, 0, 0}, + {0x83b4, 0xd3, 0, 0}, {0x83b5, 0x78, 0, 0}, {0x83b6, 0x83, 0, 0}, + {0x83b7, 0xe6, 0, 0}, {0x83b8, 0x97, 0, 0}, {0x83b9, 0x18, 0, 0}, + {0x83ba, 0xe6, 0, 0}, {0x83bb, 0x19, 0, 0}, {0x83bc, 0x97, 0, 0}, + {0x83bd, 0x40, 0, 0}, {0x83be, 0x0a, 0, 0}, {0x83bf, 0x12, 0, 0}, + {0x83c0, 0x0c, 0, 0}, {0x83c1, 0x82, 0, 0}, {0x83c2, 0x78, 0, 0}, + {0x83c3, 0x82, 0, 0}, {0x83c4, 0xa6, 0, 0}, {0x83c5, 0x04, 0, 0}, + {0x83c6, 0x08, 0, 0}, {0x83c7, 0xa6, 0, 0}, {0x83c8, 0x05, 0, 0}, + {0x83c9, 0x74, 0, 0}, {0x83ca, 0x6e, 0, 0}, {0x83cb, 0x2f, 0, 0}, + {0x83cc, 0xf9, 0, 0}, {0x83cd, 0x78, 0, 0}, {0x83ce, 0x8d, 0, 0}, + {0x83cf, 0xe6, 0, 0}, {0x83d0, 0xd3, 0, 0}, {0x83d1, 0x97, 0, 0}, + {0x83d2, 0x40, 0, 0}, {0x83d3, 0x08, 0, 0}, {0x83d4, 0x74, 0, 0}, + {0x83d5, 0x6e, 0, 0}, {0x83d6, 0x2f, 0, 0}, {0x83d7, 0xf8, 0, 0}, + {0x83d8, 0xe6, 0, 0}, {0x83d9, 0x78, 0, 0}, {0x83da, 0x8d, 0, 0}, + {0x83db, 0xf6, 0, 0}, {0x83dc, 0x0f, 0, 0}, {0x83dd, 0xef, 0, 0}, + {0x83de, 0x64, 0, 0}, {0x83df, 0x10, 0, 0}, {0x83e0, 0x70, 0, 0}, + {0x83e1, 0x9e, 0, 0}, {0x83e2, 0xc3, 0, 0}, {0x83e3, 0x79, 0, 0}, + {0x83e4, 0x81, 0, 0}, {0x83e5, 0xe7, 0, 0}, {0x83e6, 0x78, 0, 0}, + {0x83e7, 0x83, 0, 0}, {0x83e8, 0x96, 0, 0}, {0x83e9, 0xff, 0, 0}, + {0x83ea, 0x19, 0, 0}, {0x83eb, 0xe7, 0, 0}, {0x83ec, 0x18, 0, 0}, + {0x83ed, 0x96, 0, 0}, {0x83ee, 0x78, 0, 0}, {0x83ef, 0x84, 0, 0}, + {0x83f0, 0xf6, 0, 0}, {0x83f1, 0x08, 0, 0}, {0x83f2, 0xa6, 0, 0}, + {0x83f3, 0x07, 0, 0}, {0x83f4, 0xc3, 0, 0}, {0x83f5, 0x79, 0, 0}, + {0x83f6, 0x8c, 0, 0}, {0x83f7, 0xe7, 0, 0}, {0x83f8, 0x78, 0, 0}, + {0x83f9, 0x8d, 0, 0}, {0x83fa, 0x96, 0, 0}, {0x83fb, 0x08, 0, 0}, + {0x83fc, 0xf6, 0, 0}, {0x83fd, 0xd3, 0, 0}, {0x83fe, 0x79, 0, 0}, + {0x83ff, 0x81, 0, 0}, {0x8400, 0xe7, 0, 0}, {0x8401, 0x78, 0, 0}, + {0x8402, 0x7f, 0, 0}, {0x8403, 0x96, 0, 0}, {0x8404, 0x19, 0, 0}, + {0x8405, 0xe7, 0, 0}, {0x8406, 0x18, 0, 0}, {0x8407, 0x96, 0, 0}, + {0x8408, 0x40, 0, 0}, {0x8409, 0x05, 0, 0}, {0x840a, 0x09, 0, 0}, + {0x840b, 0xe7, 0, 0}, {0x840c, 0x08, 0, 0}, {0x840d, 0x80, 0, 0}, + {0x840e, 0x06, 0, 0}, {0x840f, 0xc3, 0, 0}, {0x8410, 0x79, 0, 0}, + {0x8411, 0x7f, 0, 0}, {0x8412, 0xe7, 0, 0}, {0x8413, 0x78, 0, 0}, + {0x8414, 0x81, 0, 0}, {0x8415, 0x96, 0, 0}, {0x8416, 0xff, 0, 0}, + {0x8417, 0x19, 0, 0}, {0x8418, 0xe7, 0, 0}, {0x8419, 0x18, 0, 0}, + {0x841a, 0x96, 0, 0}, {0x841b, 0xfe, 0, 0}, {0x841c, 0x78, 0, 0}, + {0x841d, 0x86, 0, 0}, {0x841e, 0xa6, 0, 0}, {0x841f, 0x06, 0, 0}, + {0x8420, 0x08, 0, 0}, {0x8421, 0xa6, 0, 0}, {0x8422, 0x07, 0, 0}, + {0x8423, 0x79, 0, 0}, {0x8424, 0x8c, 0, 0}, {0x8425, 0xe7, 0, 0}, + {0x8426, 0xd3, 0, 0}, {0x8427, 0x78, 0, 0}, {0x8428, 0x8b, 0, 0}, + {0x8429, 0x96, 0, 0}, {0x842a, 0x40, 0, 0}, {0x842b, 0x05, 0, 0}, + {0x842c, 0xe7, 0, 0}, {0x842d, 0x96, 0, 0}, {0x842e, 0xff, 0, 0}, + {0x842f, 0x80, 0, 0}, {0x8430, 0x08, 0, 0}, {0x8431, 0xc3, 0, 0}, + {0x8432, 0x79, 0, 0}, {0x8433, 0x8b, 0, 0}, {0x8434, 0xe7, 0, 0}, + {0x8435, 0x78, 0, 0}, {0x8436, 0x8c, 0, 0}, {0x8437, 0x96, 0, 0}, + {0x8438, 0xff, 0, 0}, {0x8439, 0x78, 0, 0}, {0x843a, 0x8f, 0, 0}, + {0x843b, 0xa6, 0, 0}, {0x843c, 0x07, 0, 0}, {0x843d, 0xe5, 0, 0}, + {0x843e, 0x1f, 0, 0}, {0x843f, 0x64, 0, 0}, {0x8440, 0x02, 0, 0}, + {0x8441, 0x70, 0, 0}, {0x8442, 0x69, 0, 0}, {0x8443, 0x90, 0, 0}, + {0x8444, 0x0e, 0, 0}, {0x8445, 0x91, 0, 0}, {0x8446, 0x93, 0, 0}, + {0x8447, 0xff, 0, 0}, {0x8448, 0x18, 0, 0}, {0x8449, 0xe6, 0, 0}, + {0x844a, 0xc3, 0, 0}, {0x844b, 0x9f, 0, 0}, {0x844c, 0x50, 0, 0}, + {0x844d, 0x72, 0, 0}, {0x844e, 0x12, 0, 0}, {0x844f, 0x0c, 0, 0}, + {0x8450, 0x4a, 0, 0}, {0x8451, 0x12, 0, 0}, {0x8452, 0x0c, 0, 0}, + {0x8453, 0x2f, 0, 0}, {0x8454, 0x90, 0, 0}, {0x8455, 0x0e, 0, 0}, + {0x8456, 0x8e, 0, 0}, {0x8457, 0x12, 0, 0}, {0x8458, 0x0c, 0, 0}, + {0x8459, 0x38, 0, 0}, {0x845a, 0x78, 0, 0}, {0x845b, 0x80, 0, 0}, + {0x845c, 0x12, 0, 0}, {0x845d, 0x0c, 0, 0}, {0x845e, 0x6b, 0, 0}, + {0x845f, 0x7b, 0, 0}, {0x8460, 0x04, 0, 0}, {0x8461, 0x12, 0, 0}, + {0x8462, 0x0c, 0, 0}, {0x8463, 0x1d, 0, 0}, {0x8464, 0xc3, 0, 0}, + {0x8465, 0x12, 0, 0}, {0x8466, 0x06, 0, 0}, {0x8467, 0x45, 0, 0}, + {0x8468, 0x50, 0, 0}, {0x8469, 0x56, 0, 0}, {0x846a, 0x90, 0, 0}, + {0x846b, 0x0e, 0, 0}, {0x846c, 0x92, 0, 0}, {0x846d, 0xe4, 0, 0}, + {0x846e, 0x93, 0, 0}, {0x846f, 0xff, 0, 0}, {0x8470, 0x78, 0, 0}, + {0x8471, 0x8f, 0, 0}, {0x8472, 0xe6, 0, 0}, {0x8473, 0x9f, 0, 0}, + {0x8474, 0x40, 0, 0}, {0x8475, 0x02, 0, 0}, {0x8476, 0x80, 0, 0}, + {0x8477, 0x11, 0, 0}, {0x8478, 0x90, 0, 0}, {0x8479, 0x0e, 0, 0}, + {0x847a, 0x90, 0, 0}, {0x847b, 0xe4, 0, 0}, {0x847c, 0x93, 0, 0}, + {0x847d, 0xff, 0, 0}, {0x847e, 0xd3, 0, 0}, {0x847f, 0x78, 0, 0}, + {0x8480, 0x89, 0, 0}, {0x8481, 0xe6, 0, 0}, {0x8482, 0x9f, 0, 0}, + {0x8483, 0x18, 0, 0}, {0x8484, 0xe6, 0, 0}, {0x8485, 0x94, 0, 0}, + {0x8486, 0x00, 0, 0}, {0x8487, 0x40, 0, 0}, {0x8488, 0x03, 0, 0}, + {0x8489, 0x75, 0, 0}, {0x848a, 0x1f, 0, 0}, {0x848b, 0x05, 0, 0}, + {0x848c, 0x12, 0, 0}, {0x848d, 0x0c, 0, 0}, {0x848e, 0x4a, 0, 0}, + {0x848f, 0x12, 0, 0}, {0x8490, 0x0c, 0, 0}, {0x8491, 0x2f, 0, 0}, + {0x8492, 0x90, 0, 0}, {0x8493, 0x0e, 0, 0}, {0x8494, 0x8f, 0, 0}, + {0x8495, 0x12, 0, 0}, {0x8496, 0x0c, 0, 0}, {0x8497, 0x38, 0, 0}, + {0x8498, 0x78, 0, 0}, {0x8499, 0x7e, 0, 0}, {0x849a, 0x12, 0, 0}, + {0x849b, 0x0c, 0, 0}, {0x849c, 0x6b, 0, 0}, {0x849d, 0x7b, 0, 0}, + {0x849e, 0x40, 0, 0}, {0x849f, 0x12, 0, 0}, {0x84a0, 0x0c, 0, 0}, + {0x84a1, 0x1d, 0, 0}, {0x84a2, 0xd3, 0, 0}, {0x84a3, 0x12, 0, 0}, + {0x84a4, 0x06, 0, 0}, {0x84a5, 0x45, 0, 0}, {0x84a6, 0x40, 0, 0}, + {0x84a7, 0x18, 0, 0}, {0x84a8, 0x75, 0, 0}, {0x84a9, 0x1f, 0, 0}, + {0x84aa, 0x05, 0, 0}, {0x84ab, 0x22, 0, 0}, {0x84ac, 0xe5, 0, 0}, + {0x84ad, 0x1f, 0, 0}, {0x84ae, 0xb4, 0, 0}, {0x84af, 0x05, 0, 0}, + {0x84b0, 0x0f, 0, 0}, {0x84b1, 0xd2, 0, 0}, {0x84b2, 0x01, 0, 0}, + {0x84b3, 0xc2, 0, 0}, {0x84b4, 0x02, 0, 0}, {0x84b5, 0xe4, 0, 0}, + {0x84b6, 0xf5, 0, 0}, {0x84b7, 0x1f, 0, 0}, {0x84b8, 0xf5, 0, 0}, + {0x84b9, 0x1e, 0, 0}, {0x84ba, 0xd2, 0, 0}, {0x84bb, 0x35, 0, 0}, + {0x84bc, 0xd2, 0, 0}, {0x84bd, 0x33, 0, 0}, {0x84be, 0xd2, 0, 0}, + {0x84bf, 0x36, 0, 0}, {0x84c0, 0x22, 0, 0}, {0x84c1, 0xef, 0, 0}, + {0x84c2, 0x8d, 0, 0}, {0x84c3, 0xf0, 0, 0}, {0x84c4, 0xa4, 0, 0}, + {0x84c5, 0xa8, 0, 0}, {0x84c6, 0xf0, 0, 0}, {0x84c7, 0xcf, 0, 0}, + {0x84c8, 0x8c, 0, 0}, {0x84c9, 0xf0, 0, 0}, {0x84ca, 0xa4, 0, 0}, + {0x84cb, 0x28, 0, 0}, {0x84cc, 0xce, 0, 0}, {0x84cd, 0x8d, 0, 0}, + {0x84ce, 0xf0, 0, 0}, {0x84cf, 0xa4, 0, 0}, {0x84d0, 0x2e, 0, 0}, + {0x84d1, 0xfe, 0, 0}, {0x84d2, 0x22, 0, 0}, {0x84d3, 0xbc, 0, 0}, + {0x84d4, 0x00, 0, 0}, {0x84d5, 0x0b, 0, 0}, {0x84d6, 0xbe, 0, 0}, + {0x84d7, 0x00, 0, 0}, {0x84d8, 0x29, 0, 0}, {0x84d9, 0xef, 0, 0}, + {0x84da, 0x8d, 0, 0}, {0x84db, 0xf0, 0, 0}, {0x84dc, 0x84, 0, 0}, + {0x84dd, 0xff, 0, 0}, {0x84de, 0xad, 0, 0}, {0x84df, 0xf0, 0, 0}, + {0x84e0, 0x22, 0, 0}, {0x84e1, 0xe4, 0, 0}, {0x84e2, 0xcc, 0, 0}, + {0x84e3, 0xf8, 0, 0}, {0x84e4, 0x75, 0, 0}, {0x84e5, 0xf0, 0, 0}, + {0x84e6, 0x08, 0, 0}, {0x84e7, 0xef, 0, 0}, {0x84e8, 0x2f, 0, 0}, + {0x84e9, 0xff, 0, 0}, {0x84ea, 0xee, 0, 0}, {0x84eb, 0x33, 0, 0}, + {0x84ec, 0xfe, 0, 0}, {0x84ed, 0xec, 0, 0}, {0x84ee, 0x33, 0, 0}, + {0x84ef, 0xfc, 0, 0}, {0x84f0, 0xee, 0, 0}, {0x84f1, 0x9d, 0, 0}, + {0x84f2, 0xec, 0, 0}, {0x84f3, 0x98, 0, 0}, {0x84f4, 0x40, 0, 0}, + {0x84f5, 0x05, 0, 0}, {0x84f6, 0xfc, 0, 0}, {0x84f7, 0xee, 0, 0}, + {0x84f8, 0x9d, 0, 0}, {0x84f9, 0xfe, 0, 0}, {0x84fa, 0x0f, 0, 0}, + {0x84fb, 0xd5, 0, 0}, {0x84fc, 0xf0, 0, 0}, {0x84fd, 0xe9, 0, 0}, + {0x84fe, 0xe4, 0, 0}, {0x84ff, 0xce, 0, 0}, {0x8500, 0xfd, 0, 0}, + {0x8501, 0x22, 0, 0}, {0x8502, 0xed, 0, 0}, {0x8503, 0xf8, 0, 0}, + {0x8504, 0xf5, 0, 0}, {0x8505, 0xf0, 0, 0}, {0x8506, 0xee, 0, 0}, + {0x8507, 0x84, 0, 0}, {0x8508, 0x20, 0, 0}, {0x8509, 0xd2, 0, 0}, + {0x850a, 0x1c, 0, 0}, {0x850b, 0xfe, 0, 0}, {0x850c, 0xad, 0, 0}, + {0x850d, 0xf0, 0, 0}, {0x850e, 0x75, 0, 0}, {0x850f, 0xf0, 0, 0}, + {0x8510, 0x08, 0, 0}, {0x8511, 0xef, 0, 0}, {0x8512, 0x2f, 0, 0}, + {0x8513, 0xff, 0, 0}, {0x8514, 0xed, 0, 0}, {0x8515, 0x33, 0, 0}, + {0x8516, 0xfd, 0, 0}, {0x8517, 0x40, 0, 0}, {0x8518, 0x07, 0, 0}, + {0x8519, 0x98, 0, 0}, {0x851a, 0x50, 0, 0}, {0x851b, 0x06, 0, 0}, + {0x851c, 0xd5, 0, 0}, {0x851d, 0xf0, 0, 0}, {0x851e, 0xf2, 0, 0}, + {0x851f, 0x22, 0, 0}, {0x8520, 0xc3, 0, 0}, {0x8521, 0x98, 0, 0}, + {0x8522, 0xfd, 0, 0}, {0x8523, 0x0f, 0, 0}, {0x8524, 0xd5, 0, 0}, + {0x8525, 0xf0, 0, 0}, {0x8526, 0xea, 0, 0}, {0x8527, 0x22, 0, 0}, + {0x8528, 0xe8, 0, 0}, {0x8529, 0x8f, 0, 0}, {0x852a, 0xf0, 0, 0}, + {0x852b, 0xa4, 0, 0}, {0x852c, 0xcc, 0, 0}, {0x852d, 0x8b, 0, 0}, + {0x852e, 0xf0, 0, 0}, {0x852f, 0xa4, 0, 0}, {0x8530, 0x2c, 0, 0}, + {0x8531, 0xfc, 0, 0}, {0x8532, 0xe9, 0, 0}, {0x8533, 0x8e, 0, 0}, + {0x8534, 0xf0, 0, 0}, {0x8535, 0xa4, 0, 0}, {0x8536, 0x2c, 0, 0}, + {0x8537, 0xfc, 0, 0}, {0x8538, 0x8a, 0, 0}, {0x8539, 0xf0, 0, 0}, + {0x853a, 0xed, 0, 0}, {0x853b, 0xa4, 0, 0}, {0x853c, 0x2c, 0, 0}, + {0x853d, 0xfc, 0, 0}, {0x853e, 0xea, 0, 0}, {0x853f, 0x8e, 0, 0}, + {0x8540, 0xf0, 0, 0}, {0x8541, 0xa4, 0, 0}, {0x8542, 0xcd, 0, 0}, + {0x8543, 0xa8, 0, 0}, {0x8544, 0xf0, 0, 0}, {0x8545, 0x8b, 0, 0}, + {0x8546, 0xf0, 0, 0}, {0x8547, 0xa4, 0, 0}, {0x8548, 0x2d, 0, 0}, + {0x8549, 0xcc, 0, 0}, {0x854a, 0x38, 0, 0}, {0x854b, 0x25, 0, 0}, + {0x854c, 0xf0, 0, 0}, {0x854d, 0xfd, 0, 0}, {0x854e, 0xe9, 0, 0}, + {0x854f, 0x8f, 0, 0}, {0x8550, 0xf0, 0, 0}, {0x8551, 0xa4, 0, 0}, + {0x8552, 0x2c, 0, 0}, {0x8553, 0xcd, 0, 0}, {0x8554, 0x35, 0, 0}, + {0x8555, 0xf0, 0, 0}, {0x8556, 0xfc, 0, 0}, {0x8557, 0xeb, 0, 0}, + {0x8558, 0x8e, 0, 0}, {0x8559, 0xf0, 0, 0}, {0x855a, 0xa4, 0, 0}, + {0x855b, 0xfe, 0, 0}, {0x855c, 0xa9, 0, 0}, {0x855d, 0xf0, 0, 0}, + {0x855e, 0xeb, 0, 0}, {0x855f, 0x8f, 0, 0}, {0x8560, 0xf0, 0, 0}, + {0x8561, 0xa4, 0, 0}, {0x8562, 0xcf, 0, 0}, {0x8563, 0xc5, 0, 0}, + {0x8564, 0xf0, 0, 0}, {0x8565, 0x2e, 0, 0}, {0x8566, 0xcd, 0, 0}, + {0x8567, 0x39, 0, 0}, {0x8568, 0xfe, 0, 0}, {0x8569, 0xe4, 0, 0}, + {0x856a, 0x3c, 0, 0}, {0x856b, 0xfc, 0, 0}, {0x856c, 0xea, 0, 0}, + {0x856d, 0xa4, 0, 0}, {0x856e, 0x2d, 0, 0}, {0x856f, 0xce, 0, 0}, + {0x8570, 0x35, 0, 0}, {0x8571, 0xf0, 0, 0}, {0x8572, 0xfd, 0, 0}, + {0x8573, 0xe4, 0, 0}, {0x8574, 0x3c, 0, 0}, {0x8575, 0xfc, 0, 0}, + {0x8576, 0x22, 0, 0}, {0x8577, 0x75, 0, 0}, {0x8578, 0xf0, 0, 0}, + {0x8579, 0x08, 0, 0}, {0x857a, 0x75, 0, 0}, {0x857b, 0x82, 0, 0}, + {0x857c, 0x00, 0, 0}, {0x857d, 0xef, 0, 0}, {0x857e, 0x2f, 0, 0}, + {0x857f, 0xff, 0, 0}, {0x8580, 0xee, 0, 0}, {0x8581, 0x33, 0, 0}, + {0x8582, 0xfe, 0, 0}, {0x8583, 0xcd, 0, 0}, {0x8584, 0x33, 0, 0}, + {0x8585, 0xcd, 0, 0}, {0x8586, 0xcc, 0, 0}, {0x8587, 0x33, 0, 0}, + {0x8588, 0xcc, 0, 0}, {0x8589, 0xc5, 0, 0}, {0x858a, 0x82, 0, 0}, + {0x858b, 0x33, 0, 0}, {0x858c, 0xc5, 0, 0}, {0x858d, 0x82, 0, 0}, + {0x858e, 0x9b, 0, 0}, {0x858f, 0xed, 0, 0}, {0x8590, 0x9a, 0, 0}, + {0x8591, 0xec, 0, 0}, {0x8592, 0x99, 0, 0}, {0x8593, 0xe5, 0, 0}, + {0x8594, 0x82, 0, 0}, {0x8595, 0x98, 0, 0}, {0x8596, 0x40, 0, 0}, + {0x8597, 0x0c, 0, 0}, {0x8598, 0xf5, 0, 0}, {0x8599, 0x82, 0, 0}, + {0x859a, 0xee, 0, 0}, {0x859b, 0x9b, 0, 0}, {0x859c, 0xfe, 0, 0}, + {0x859d, 0xed, 0, 0}, {0x859e, 0x9a, 0, 0}, {0x859f, 0xfd, 0, 0}, + {0x85a0, 0xec, 0, 0}, {0x85a1, 0x99, 0, 0}, {0x85a2, 0xfc, 0, 0}, + {0x85a3, 0x0f, 0, 0}, {0x85a4, 0xd5, 0, 0}, {0x85a5, 0xf0, 0, 0}, + {0x85a6, 0xd6, 0, 0}, {0x85a7, 0xe4, 0, 0}, {0x85a8, 0xce, 0, 0}, + {0x85a9, 0xfb, 0, 0}, {0x85aa, 0xe4, 0, 0}, {0x85ab, 0xcd, 0, 0}, + {0x85ac, 0xfa, 0, 0}, {0x85ad, 0xe4, 0, 0}, {0x85ae, 0xcc, 0, 0}, + {0x85af, 0xf9, 0, 0}, {0x85b0, 0xa8, 0, 0}, {0x85b1, 0x82, 0, 0}, + {0x85b2, 0x22, 0, 0}, {0x85b3, 0xb8, 0, 0}, {0x85b4, 0x00, 0, 0}, + {0x85b5, 0xc1, 0, 0}, {0x85b6, 0xb9, 0, 0}, {0x85b7, 0x00, 0, 0}, + {0x85b8, 0x59, 0, 0}, {0x85b9, 0xba, 0, 0}, {0x85ba, 0x00, 0, 0}, + {0x85bb, 0x2d, 0, 0}, {0x85bc, 0xec, 0, 0}, {0x85bd, 0x8b, 0, 0}, + {0x85be, 0xf0, 0, 0}, {0x85bf, 0x84, 0, 0}, {0x85c0, 0xcf, 0, 0}, + {0x85c1, 0xce, 0, 0}, {0x85c2, 0xcd, 0, 0}, {0x85c3, 0xfc, 0, 0}, + {0x85c4, 0xe5, 0, 0}, {0x85c5, 0xf0, 0, 0}, {0x85c6, 0xcb, 0, 0}, + {0x85c7, 0xf9, 0, 0}, {0x85c8, 0x78, 0, 0}, {0x85c9, 0x18, 0, 0}, + {0x85ca, 0xef, 0, 0}, {0x85cb, 0x2f, 0, 0}, {0x85cc, 0xff, 0, 0}, + {0x85cd, 0xee, 0, 0}, {0x85ce, 0x33, 0, 0}, {0x85cf, 0xfe, 0, 0}, + {0x85d0, 0xed, 0, 0}, {0x85d1, 0x33, 0, 0}, {0x85d2, 0xfd, 0, 0}, + {0x85d3, 0xec, 0, 0}, {0x85d4, 0x33, 0, 0}, {0x85d5, 0xfc, 0, 0}, + {0x85d6, 0xeb, 0, 0}, {0x85d7, 0x33, 0, 0}, {0x85d8, 0xfb, 0, 0}, + {0x85d9, 0x10, 0, 0}, {0x85da, 0xd7, 0, 0}, {0x85db, 0x03, 0, 0}, + {0x85dc, 0x99, 0, 0}, {0x85dd, 0x40, 0, 0}, {0x85de, 0x04, 0, 0}, + {0x85df, 0xeb, 0, 0}, {0x85e0, 0x99, 0, 0}, {0x85e1, 0xfb, 0, 0}, + {0x85e2, 0x0f, 0, 0}, {0x85e3, 0xd8, 0, 0}, {0x85e4, 0xe5, 0, 0}, + {0x85e5, 0xe4, 0, 0}, {0x85e6, 0xf9, 0, 0}, {0x85e7, 0xfa, 0, 0}, + {0x85e8, 0x22, 0, 0}, {0x85e9, 0x78, 0, 0}, {0x85ea, 0x18, 0, 0}, + {0x85eb, 0xef, 0, 0}, {0x85ec, 0x2f, 0, 0}, {0x85ed, 0xff, 0, 0}, + {0x85ee, 0xee, 0, 0}, {0x85ef, 0x33, 0, 0}, {0x85f0, 0xfe, 0, 0}, + {0x85f1, 0xed, 0, 0}, {0x85f2, 0x33, 0, 0}, {0x85f3, 0xfd, 0, 0}, + {0x85f4, 0xec, 0, 0}, {0x85f5, 0x33, 0, 0}, {0x85f6, 0xfc, 0, 0}, + {0x85f7, 0xc9, 0, 0}, {0x85f8, 0x33, 0, 0}, {0x85f9, 0xc9, 0, 0}, + {0x85fa, 0x10, 0, 0}, {0x85fb, 0xd7, 0, 0}, {0x85fc, 0x05, 0, 0}, + {0x85fd, 0x9b, 0, 0}, {0x85fe, 0xe9, 0, 0}, {0x85ff, 0x9a, 0, 0}, + {0x8600, 0x40, 0, 0}, {0x8601, 0x07, 0, 0}, {0x8602, 0xec, 0, 0}, + {0x8603, 0x9b, 0, 0}, {0x8604, 0xfc, 0, 0}, {0x8605, 0xe9, 0, 0}, + {0x8606, 0x9a, 0, 0}, {0x8607, 0xf9, 0, 0}, {0x8608, 0x0f, 0, 0}, + {0x8609, 0xd8, 0, 0}, {0x860a, 0xe0, 0, 0}, {0x860b, 0xe4, 0, 0}, + {0x860c, 0xc9, 0, 0}, {0x860d, 0xfa, 0, 0}, {0x860e, 0xe4, 0, 0}, + {0x860f, 0xcc, 0, 0}, {0x8610, 0xfb, 0, 0}, {0x8611, 0x22, 0, 0}, + {0x8612, 0x75, 0, 0}, {0x8613, 0xf0, 0, 0}, {0x8614, 0x10, 0, 0}, + {0x8615, 0xef, 0, 0}, {0x8616, 0x2f, 0, 0}, {0x8617, 0xff, 0, 0}, + {0x8618, 0xee, 0, 0}, {0x8619, 0x33, 0, 0}, {0x861a, 0xfe, 0, 0}, + {0x861b, 0xed, 0, 0}, {0x861c, 0x33, 0, 0}, {0x861d, 0xfd, 0, 0}, + {0x861e, 0xcc, 0, 0}, {0x861f, 0x33, 0, 0}, {0x8620, 0xcc, 0, 0}, + {0x8621, 0xc8, 0, 0}, {0x8622, 0x33, 0, 0}, {0x8623, 0xc8, 0, 0}, + {0x8624, 0x10, 0, 0}, {0x8625, 0xd7, 0, 0}, {0x8626, 0x07, 0, 0}, + {0x8627, 0x9b, 0, 0}, {0x8628, 0xec, 0, 0}, {0x8629, 0x9a, 0, 0}, + {0x862a, 0xe8, 0, 0}, {0x862b, 0x99, 0, 0}, {0x862c, 0x40, 0, 0}, + {0x862d, 0x0a, 0, 0}, {0x862e, 0xed, 0, 0}, {0x862f, 0x9b, 0, 0}, + {0x8630, 0xfd, 0, 0}, {0x8631, 0xec, 0, 0}, {0x8632, 0x9a, 0, 0}, + {0x8633, 0xfc, 0, 0}, {0x8634, 0xe8, 0, 0}, {0x8635, 0x99, 0, 0}, + {0x8636, 0xf8, 0, 0}, {0x8637, 0x0f, 0, 0}, {0x8638, 0xd5, 0, 0}, + {0x8639, 0xf0, 0, 0}, {0x863a, 0xda, 0, 0}, {0x863b, 0xe4, 0, 0}, + {0x863c, 0xcd, 0, 0}, {0x863d, 0xfb, 0, 0}, {0x863e, 0xe4, 0, 0}, + {0x863f, 0xcc, 0, 0}, {0x8640, 0xfa, 0, 0}, {0x8641, 0xe4, 0, 0}, + {0x8642, 0xc8, 0, 0}, {0x8643, 0xf9, 0, 0}, {0x8644, 0x22, 0, 0}, + {0x8645, 0xeb, 0, 0}, {0x8646, 0x9f, 0, 0}, {0x8647, 0xf5, 0, 0}, + {0x8648, 0xf0, 0, 0}, {0x8649, 0xea, 0, 0}, {0x864a, 0x9e, 0, 0}, + {0x864b, 0x42, 0, 0}, {0x864c, 0xf0, 0, 0}, {0x864d, 0xe9, 0, 0}, + {0x864e, 0x9d, 0, 0}, {0x864f, 0x42, 0, 0}, {0x8650, 0xf0, 0, 0}, + {0x8651, 0xe8, 0, 0}, {0x8652, 0x9c, 0, 0}, {0x8653, 0x45, 0, 0}, + {0x8654, 0xf0, 0, 0}, {0x8655, 0x22, 0, 0}, {0x8656, 0xe8, 0, 0}, + {0x8657, 0x60, 0, 0}, {0x8658, 0x0f, 0, 0}, {0x8659, 0xec, 0, 0}, + {0x865a, 0xc3, 0, 0}, {0x865b, 0x13, 0, 0}, {0x865c, 0xfc, 0, 0}, + {0x865d, 0xed, 0, 0}, {0x865e, 0x13, 0, 0}, {0x865f, 0xfd, 0, 0}, + {0x8660, 0xee, 0, 0}, {0x8661, 0x13, 0, 0}, {0x8662, 0xfe, 0, 0}, + {0x8663, 0xef, 0, 0}, {0x8664, 0x13, 0, 0}, {0x8665, 0xff, 0, 0}, + {0x8666, 0xd8, 0, 0}, {0x8667, 0xf1, 0, 0}, {0x8668, 0x22, 0, 0}, + {0x8669, 0xe8, 0, 0}, {0x866a, 0x60, 0, 0}, {0x866b, 0x0f, 0, 0}, + {0x866c, 0xef, 0, 0}, {0x866d, 0xc3, 0, 0}, {0x866e, 0x33, 0, 0}, + {0x866f, 0xff, 0, 0}, {0x8670, 0xee, 0, 0}, {0x8671, 0x33, 0, 0}, + {0x8672, 0xfe, 0, 0}, {0x8673, 0xed, 0, 0}, {0x8674, 0x33, 0, 0}, + {0x8675, 0xfd, 0, 0}, {0x8676, 0xec, 0, 0}, {0x8677, 0x33, 0, 0}, + {0x8678, 0xfc, 0, 0}, {0x8679, 0xd8, 0, 0}, {0x867a, 0xf1, 0, 0}, + {0x867b, 0x22, 0, 0}, {0x867c, 0xe4, 0, 0}, {0x867d, 0x93, 0, 0}, + {0x867e, 0xfc, 0, 0}, {0x867f, 0x74, 0, 0}, {0x8680, 0x01, 0, 0}, + {0x8681, 0x93, 0, 0}, {0x8682, 0xfd, 0, 0}, {0x8683, 0x74, 0, 0}, + {0x8684, 0x02, 0, 0}, {0x8685, 0x93, 0, 0}, {0x8686, 0xfe, 0, 0}, + {0x8687, 0x74, 0, 0}, {0x8688, 0x03, 0, 0}, {0x8689, 0x93, 0, 0}, + {0x868a, 0xff, 0, 0}, {0x868b, 0x22, 0, 0}, {0x868c, 0xe6, 0, 0}, + {0x868d, 0xfb, 0, 0}, {0x868e, 0x08, 0, 0}, {0x868f, 0xe6, 0, 0}, + {0x8690, 0xf9, 0, 0}, {0x8691, 0x08, 0, 0}, {0x8692, 0xe6, 0, 0}, + {0x8693, 0xfa, 0, 0}, {0x8694, 0x08, 0, 0}, {0x8695, 0xe6, 0, 0}, + {0x8696, 0xcb, 0, 0}, {0x8697, 0xf8, 0, 0}, {0x8698, 0x22, 0, 0}, + {0x8699, 0xec, 0, 0}, {0x869a, 0xf6, 0, 0}, {0x869b, 0x08, 0, 0}, + {0x869c, 0xed, 0, 0}, {0x869d, 0xf6, 0, 0}, {0x869e, 0x08, 0, 0}, + {0x869f, 0xee, 0, 0}, {0x86a0, 0xf6, 0, 0}, {0x86a1, 0x08, 0, 0}, + {0x86a2, 0xef, 0, 0}, {0x86a3, 0xf6, 0, 0}, {0x86a4, 0x22, 0, 0}, + {0x86a5, 0xa4, 0, 0}, {0x86a6, 0x25, 0, 0}, {0x86a7, 0x82, 0, 0}, + {0x86a8, 0xf5, 0, 0}, {0x86a9, 0x82, 0, 0}, {0x86aa, 0xe5, 0, 0}, + {0x86ab, 0xf0, 0, 0}, {0x86ac, 0x35, 0, 0}, {0x86ad, 0x83, 0, 0}, + {0x86ae, 0xf5, 0, 0}, {0x86af, 0x83, 0, 0}, {0x86b0, 0x22, 0, 0}, + {0x86b1, 0xd0, 0, 0}, {0x86b2, 0x83, 0, 0}, {0x86b3, 0xd0, 0, 0}, + {0x86b4, 0x82, 0, 0}, {0x86b5, 0xf8, 0, 0}, {0x86b6, 0xe4, 0, 0}, + {0x86b7, 0x93, 0, 0}, {0x86b8, 0x70, 0, 0}, {0x86b9, 0x12, 0, 0}, + {0x86ba, 0x74, 0, 0}, {0x86bb, 0x01, 0, 0}, {0x86bc, 0x93, 0, 0}, + {0x86bd, 0x70, 0, 0}, {0x86be, 0x0d, 0, 0}, {0x86bf, 0xa3, 0, 0}, + {0x86c0, 0xa3, 0, 0}, {0x86c1, 0x93, 0, 0}, {0x86c2, 0xf8, 0, 0}, + {0x86c3, 0x74, 0, 0}, {0x86c4, 0x01, 0, 0}, {0x86c5, 0x93, 0, 0}, + {0x86c6, 0xf5, 0, 0}, {0x86c7, 0x82, 0, 0}, {0x86c8, 0x88, 0, 0}, + {0x86c9, 0x83, 0, 0}, {0x86ca, 0xe4, 0, 0}, {0x86cb, 0x73, 0, 0}, + {0x86cc, 0x74, 0, 0}, {0x86cd, 0x02, 0, 0}, {0x86ce, 0x93, 0, 0}, + {0x86cf, 0x68, 0, 0}, {0x86d0, 0x60, 0, 0}, {0x86d1, 0xef, 0, 0}, + {0x86d2, 0xa3, 0, 0}, {0x86d3, 0xa3, 0, 0}, {0x86d4, 0xa3, 0, 0}, + {0x86d5, 0x80, 0, 0}, {0x86d6, 0xdf, 0, 0}, {0x86d7, 0x90, 0, 0}, + {0x86d8, 0x38, 0, 0}, {0x86d9, 0x04, 0, 0}, {0x86da, 0x78, 0, 0}, + {0x86db, 0x52, 0, 0}, {0x86dc, 0x12, 0, 0}, {0x86dd, 0x0b, 0, 0}, + {0x86de, 0xfd, 0, 0}, {0x86df, 0x90, 0, 0}, {0x86e0, 0x38, 0, 0}, + {0x86e1, 0x00, 0, 0}, {0x86e2, 0xe0, 0, 0}, {0x86e3, 0xfe, 0, 0}, + {0x86e4, 0xa3, 0, 0}, {0x86e5, 0xe0, 0, 0}, {0x86e6, 0xfd, 0, 0}, + {0x86e7, 0xed, 0, 0}, {0x86e8, 0xff, 0, 0}, {0x86e9, 0xc3, 0, 0}, + {0x86ea, 0x12, 0, 0}, {0x86eb, 0x0b, 0, 0}, {0x86ec, 0x9e, 0, 0}, + {0x86ed, 0x90, 0, 0}, {0x86ee, 0x38, 0, 0}, {0x86ef, 0x10, 0, 0}, + {0x86f0, 0x12, 0, 0}, {0x86f1, 0x0b, 0, 0}, {0x86f2, 0x92, 0, 0}, + {0x86f3, 0x90, 0, 0}, {0x86f4, 0x38, 0, 0}, {0x86f5, 0x06, 0, 0}, + {0x86f6, 0x78, 0, 0}, {0x86f7, 0x54, 0, 0}, {0x86f8, 0x12, 0, 0}, + {0x86f9, 0x0b, 0, 0}, {0x86fa, 0xfd, 0, 0}, {0x86fb, 0x90, 0, 0}, + {0x86fc, 0x38, 0, 0}, {0x86fd, 0x02, 0, 0}, {0x86fe, 0xe0, 0, 0}, + {0x86ff, 0xfe, 0, 0}, {0x8700, 0xa3, 0, 0}, {0x8701, 0xe0, 0, 0}, + {0x8702, 0xfd, 0, 0}, {0x8703, 0xed, 0, 0}, {0x8704, 0xff, 0, 0}, + {0x8705, 0xc3, 0, 0}, {0x8706, 0x12, 0, 0}, {0x8707, 0x0b, 0, 0}, + {0x8708, 0x9e, 0, 0}, {0x8709, 0x90, 0, 0}, {0x870a, 0x38, 0, 0}, + {0x870b, 0x12, 0, 0}, {0x870c, 0x12, 0, 0}, {0x870d, 0x0b, 0, 0}, + {0x870e, 0x92, 0, 0}, {0x870f, 0xa3, 0, 0}, {0x8710, 0xe0, 0, 0}, + {0x8711, 0xb4, 0, 0}, {0x8712, 0x31, 0, 0}, {0x8713, 0x07, 0, 0}, + {0x8714, 0x78, 0, 0}, {0x8715, 0x52, 0, 0}, {0x8716, 0x79, 0, 0}, + {0x8717, 0x52, 0, 0}, {0x8718, 0x12, 0, 0}, {0x8719, 0x0c, 0, 0}, + {0x871a, 0x13, 0, 0}, {0x871b, 0x90, 0, 0}, {0x871c, 0x38, 0, 0}, + {0x871d, 0x14, 0, 0}, {0x871e, 0xe0, 0, 0}, {0x871f, 0xb4, 0, 0}, + {0x8720, 0x71, 0, 0}, {0x8721, 0x15, 0, 0}, {0x8722, 0x78, 0, 0}, + {0x8723, 0x52, 0, 0}, {0x8724, 0xe6, 0, 0}, {0x8725, 0xfe, 0, 0}, + {0x8726, 0x08, 0, 0}, {0x8727, 0xe6, 0, 0}, {0x8728, 0x78, 0, 0}, + {0x8729, 0x02, 0, 0}, {0x872a, 0xce, 0, 0}, {0x872b, 0xc3, 0, 0}, + {0x872c, 0x13, 0, 0}, {0x872d, 0xce, 0, 0}, {0x872e, 0x13, 0, 0}, + {0x872f, 0xd8, 0, 0}, {0x8730, 0xf9, 0, 0}, {0x8731, 0x79, 0, 0}, + {0x8732, 0x53, 0, 0}, {0x8733, 0xf7, 0, 0}, {0x8734, 0xee, 0, 0}, + {0x8735, 0x19, 0, 0}, {0x8736, 0xf7, 0, 0}, {0x8737, 0x90, 0, 0}, + {0x8738, 0x38, 0, 0}, {0x8739, 0x15, 0, 0}, {0x873a, 0xe0, 0, 0}, + {0x873b, 0xb4, 0, 0}, {0x873c, 0x31, 0, 0}, {0x873d, 0x07, 0, 0}, + {0x873e, 0x78, 0, 0}, {0x873f, 0x54, 0, 0}, {0x8740, 0x79, 0, 0}, + {0x8741, 0x54, 0, 0}, {0x8742, 0x12, 0, 0}, {0x8743, 0x0c, 0, 0}, + {0x8744, 0x13, 0, 0}, {0x8745, 0x90, 0, 0}, {0x8746, 0x38, 0, 0}, + {0x8747, 0x15, 0, 0}, {0x8748, 0xe0, 0, 0}, {0x8749, 0xb4, 0, 0}, + {0x874a, 0x71, 0, 0}, {0x874b, 0x15, 0, 0}, {0x874c, 0x78, 0, 0}, + {0x874d, 0x54, 0, 0}, {0x874e, 0xe6, 0, 0}, {0x874f, 0xfe, 0, 0}, + {0x8750, 0x08, 0, 0}, {0x8751, 0xe6, 0, 0}, {0x8752, 0x78, 0, 0}, + {0x8753, 0x02, 0, 0}, {0x8754, 0xce, 0, 0}, {0x8755, 0xc3, 0, 0}, + {0x8756, 0x13, 0, 0}, {0x8757, 0xce, 0, 0}, {0x8758, 0x13, 0, 0}, + {0x8759, 0xd8, 0, 0}, {0x875a, 0xf9, 0, 0}, {0x875b, 0x79, 0, 0}, + {0x875c, 0x55, 0, 0}, {0x875d, 0xf7, 0, 0}, {0x875e, 0xee, 0, 0}, + {0x875f, 0x19, 0, 0}, {0x8760, 0xf7, 0, 0}, {0x8761, 0x79, 0, 0}, + {0x8762, 0x52, 0, 0}, {0x8763, 0x12, 0, 0}, {0x8764, 0x0b, 0, 0}, + {0x8765, 0xd9, 0, 0}, {0x8766, 0x09, 0, 0}, {0x8767, 0x12, 0, 0}, + {0x8768, 0x0b, 0, 0}, {0x8769, 0xd9, 0, 0}, {0x876a, 0xaf, 0, 0}, + {0x876b, 0x47, 0, 0}, {0x876c, 0x12, 0, 0}, {0x876d, 0x0b, 0, 0}, + {0x876e, 0xb2, 0, 0}, {0x876f, 0xe5, 0, 0}, {0x8770, 0x44, 0, 0}, + {0x8771, 0xfb, 0, 0}, {0x8772, 0x7a, 0, 0}, {0x8773, 0x00, 0, 0}, + {0x8774, 0xfd, 0, 0}, {0x8775, 0x7c, 0, 0}, {0x8776, 0x00, 0, 0}, + {0x8777, 0x12, 0, 0}, {0x8778, 0x04, 0, 0}, {0x8779, 0xd3, 0, 0}, + {0x877a, 0x78, 0, 0}, {0x877b, 0x5a, 0, 0}, {0x877c, 0xa6, 0, 0}, + {0x877d, 0x06, 0, 0}, {0x877e, 0x08, 0, 0}, {0x877f, 0xa6, 0, 0}, + {0x8780, 0x07, 0, 0}, {0x8781, 0xaf, 0, 0}, {0x8782, 0x45, 0, 0}, + {0x8783, 0x12, 0, 0}, {0x8784, 0x0b, 0, 0}, {0x8785, 0xb2, 0, 0}, + {0x8786, 0xad, 0, 0}, {0x8787, 0x03, 0, 0}, {0x8788, 0x7c, 0, 0}, + {0x8789, 0x00, 0, 0}, {0x878a, 0x12, 0, 0}, {0x878b, 0x04, 0, 0}, + {0x878c, 0xd3, 0, 0}, {0x878d, 0x78, 0, 0}, {0x878e, 0x56, 0, 0}, + {0x878f, 0xa6, 0, 0}, {0x8790, 0x06, 0, 0}, {0x8791, 0x08, 0, 0}, + {0x8792, 0xa6, 0, 0}, {0x8793, 0x07, 0, 0}, {0x8794, 0xaf, 0, 0}, + {0x8795, 0x48, 0, 0}, {0x8796, 0x78, 0, 0}, {0x8797, 0x54, 0, 0}, + {0x8798, 0x12, 0, 0}, {0x8799, 0x0b, 0, 0}, {0x879a, 0xb4, 0, 0}, + {0x879b, 0xe5, 0, 0}, {0x879c, 0x43, 0, 0}, {0x879d, 0xfb, 0, 0}, + {0x879e, 0xfd, 0, 0}, {0x879f, 0x7c, 0, 0}, {0x87a0, 0x00, 0, 0}, + {0x87a1, 0x12, 0, 0}, {0x87a2, 0x04, 0, 0}, {0x87a3, 0xd3, 0, 0}, + {0x87a4, 0x78, 0, 0}, {0x87a5, 0x5c, 0, 0}, {0x87a6, 0xa6, 0, 0}, + {0x87a7, 0x06, 0, 0}, {0x87a8, 0x08, 0, 0}, {0x87a9, 0xa6, 0, 0}, + {0x87aa, 0x07, 0, 0}, {0x87ab, 0xaf, 0, 0}, {0x87ac, 0x46, 0, 0}, + {0x87ad, 0x7e, 0, 0}, {0x87ae, 0x00, 0, 0}, {0x87af, 0x78, 0, 0}, + {0x87b0, 0x54, 0, 0}, {0x87b1, 0x12, 0, 0}, {0x87b2, 0x0b, 0, 0}, + {0x87b3, 0xb6, 0, 0}, {0x87b4, 0xad, 0, 0}, {0x87b5, 0x03, 0, 0}, + {0x87b6, 0x7c, 0, 0}, {0x87b7, 0x00, 0, 0}, {0x87b8, 0x12, 0, 0}, + {0x87b9, 0x04, 0, 0}, {0x87ba, 0xd3, 0, 0}, {0x87bb, 0x78, 0, 0}, + {0x87bc, 0x58, 0, 0}, {0x87bd, 0xa6, 0, 0}, {0x87be, 0x06, 0, 0}, + {0x87bf, 0x08, 0, 0}, {0x87c0, 0xa6, 0, 0}, {0x87c1, 0x07, 0, 0}, + {0x87c2, 0xc3, 0, 0}, {0x87c3, 0x78, 0, 0}, {0x87c4, 0x5b, 0, 0}, + {0x87c5, 0xe6, 0, 0}, {0x87c6, 0x94, 0, 0}, {0x87c7, 0x08, 0, 0}, + {0x87c8, 0x18, 0, 0}, {0x87c9, 0xe6, 0, 0}, {0x87ca, 0x94, 0, 0}, + {0x87cb, 0x00, 0, 0}, {0x87cc, 0x50, 0, 0}, {0x87cd, 0x05, 0, 0}, + {0x87ce, 0x76, 0, 0}, {0x87cf, 0x00, 0, 0}, {0x87d0, 0x08, 0, 0}, + {0x87d1, 0x76, 0, 0}, {0x87d2, 0x08, 0, 0}, {0x87d3, 0xc3, 0, 0}, + {0x87d4, 0x78, 0, 0}, {0x87d5, 0x5d, 0, 0}, {0x87d6, 0xe6, 0, 0}, + {0x87d7, 0x94, 0, 0}, {0x87d8, 0x08, 0, 0}, {0x87d9, 0x18, 0, 0}, + {0x87da, 0xe6, 0, 0}, {0x87db, 0x94, 0, 0}, {0x87dc, 0x00, 0, 0}, + {0x87dd, 0x50, 0, 0}, {0x87de, 0x05, 0, 0}, {0x87df, 0x76, 0, 0}, + {0x87e0, 0x00, 0, 0}, {0x87e1, 0x08, 0, 0}, {0x87e2, 0x76, 0, 0}, + {0x87e3, 0x08, 0, 0}, {0x87e4, 0x78, 0, 0}, {0x87e5, 0x5a, 0, 0}, + {0x87e6, 0x12, 0, 0}, {0x87e7, 0x0b, 0, 0}, {0x87e8, 0xc6, 0, 0}, + {0x87e9, 0xff, 0, 0}, {0x87ea, 0xd3, 0, 0}, {0x87eb, 0x78, 0, 0}, + {0x87ec, 0x57, 0, 0}, {0x87ed, 0xe6, 0, 0}, {0x87ee, 0x9f, 0, 0}, + {0x87ef, 0x18, 0, 0}, {0x87f0, 0xe6, 0, 0}, {0x87f1, 0x9e, 0, 0}, + {0x87f2, 0x40, 0, 0}, {0x87f3, 0x0e, 0, 0}, {0x87f4, 0x78, 0, 0}, + {0x87f5, 0x5a, 0, 0}, {0x87f6, 0xe6, 0, 0}, {0x87f7, 0x13, 0, 0}, + {0x87f8, 0xfe, 0, 0}, {0x87f9, 0x08, 0, 0}, {0x87fa, 0xe6, 0, 0}, + {0x87fb, 0x78, 0, 0}, {0x87fc, 0x57, 0, 0}, {0x87fd, 0x12, 0, 0}, + {0x87fe, 0x0c, 0, 0}, {0x87ff, 0x08, 0, 0}, {0x8800, 0x80, 0, 0}, + {0x8801, 0x04, 0, 0}, {0x8802, 0x7e, 0, 0}, {0x8803, 0x00, 0, 0}, + {0x8804, 0x7f, 0, 0}, {0x8805, 0x00, 0, 0}, {0x8806, 0x78, 0, 0}, + {0x8807, 0x5e, 0, 0}, {0x8808, 0x12, 0, 0}, {0x8809, 0x0b, 0, 0}, + {0x880a, 0xbe, 0, 0}, {0x880b, 0xff, 0, 0}, {0x880c, 0xd3, 0, 0}, + {0x880d, 0x78, 0, 0}, {0x880e, 0x59, 0, 0}, {0x880f, 0xe6, 0, 0}, + {0x8810, 0x9f, 0, 0}, {0x8811, 0x18, 0, 0}, {0x8812, 0xe6, 0, 0}, + {0x8813, 0x9e, 0, 0}, {0x8814, 0x40, 0, 0}, {0x8815, 0x0e, 0, 0}, + {0x8816, 0x78, 0, 0}, {0x8817, 0x5c, 0, 0}, {0x8818, 0xe6, 0, 0}, + {0x8819, 0x13, 0, 0}, {0x881a, 0xfe, 0, 0}, {0x881b, 0x08, 0, 0}, + {0x881c, 0xe6, 0, 0}, {0x881d, 0x78, 0, 0}, {0x881e, 0x59, 0, 0}, + {0x881f, 0x12, 0, 0}, {0x8820, 0x0c, 0, 0}, {0x8821, 0x08, 0, 0}, + {0x8822, 0x80, 0, 0}, {0x8823, 0x04, 0, 0}, {0x8824, 0x7e, 0, 0}, + {0x8825, 0x00, 0, 0}, {0x8826, 0x7f, 0, 0}, {0x8827, 0x00, 0, 0}, + {0x8828, 0xe4, 0, 0}, {0x8829, 0xfc, 0, 0}, {0x882a, 0xfd, 0, 0}, + {0x882b, 0x78, 0, 0}, {0x882c, 0x62, 0, 0}, {0x882d, 0x12, 0, 0}, + {0x882e, 0x06, 0, 0}, {0x882f, 0x99, 0, 0}, {0x8830, 0x78, 0, 0}, + {0x8831, 0x5a, 0, 0}, {0x8832, 0x12, 0, 0}, {0x8833, 0x0b, 0, 0}, + {0x8834, 0xc6, 0, 0}, {0x8835, 0x78, 0, 0}, {0x8836, 0x57, 0, 0}, + {0x8837, 0x26, 0, 0}, {0x8838, 0xff, 0, 0}, {0x8839, 0xee, 0, 0}, + {0x883a, 0x18, 0, 0}, {0x883b, 0x36, 0, 0}, {0x883c, 0xfe, 0, 0}, + {0x883d, 0x78, 0, 0}, {0x883e, 0x66, 0, 0}, {0x883f, 0x12, 0, 0}, + {0x8840, 0x0b, 0, 0}, {0x8841, 0xbe, 0, 0}, {0x8842, 0x78, 0, 0}, + {0x8843, 0x59, 0, 0}, {0x8844, 0x26, 0, 0}, {0x8845, 0xff, 0, 0}, + {0x8846, 0xee, 0, 0}, {0x8847, 0x18, 0, 0}, {0x8848, 0x36, 0, 0}, + {0x8849, 0xfe, 0, 0}, {0x884a, 0xe4, 0, 0}, {0x884b, 0xfc, 0, 0}, + {0x884c, 0xfd, 0, 0}, {0x884d, 0x78, 0, 0}, {0x884e, 0x6a, 0, 0}, + {0x884f, 0x12, 0, 0}, {0x8850, 0x06, 0, 0}, {0x8851, 0x99, 0, 0}, + {0x8852, 0x12, 0, 0}, {0x8853, 0x0b, 0, 0}, {0x8854, 0xce, 0, 0}, + {0x8855, 0x78, 0, 0}, {0x8856, 0x66, 0, 0}, {0x8857, 0x12, 0, 0}, + {0x8858, 0x06, 0, 0}, {0x8859, 0x8c, 0, 0}, {0x885a, 0xd3, 0, 0}, + {0x885b, 0x12, 0, 0}, {0x885c, 0x06, 0, 0}, {0x885d, 0x45, 0, 0}, + {0x885e, 0x40, 0, 0}, {0x885f, 0x08, 0, 0}, {0x8860, 0x12, 0, 0}, + {0x8861, 0x0b, 0, 0}, {0x8862, 0xce, 0, 0}, {0x8863, 0x78, 0, 0}, + {0x8864, 0x66, 0, 0}, {0x8865, 0x12, 0, 0}, {0x8866, 0x06, 0, 0}, + {0x8867, 0x99, 0, 0}, {0x8868, 0x78, 0, 0}, {0x8869, 0x54, 0, 0}, + {0x886a, 0x12, 0, 0}, {0x886b, 0x0b, 0, 0}, {0x886c, 0xd0, 0, 0}, + {0x886d, 0x78, 0, 0}, {0x886e, 0x6a, 0, 0}, {0x886f, 0x12, 0, 0}, + {0x8870, 0x06, 0, 0}, {0x8871, 0x8c, 0, 0}, {0x8872, 0xd3, 0, 0}, + {0x8873, 0x12, 0, 0}, {0x8874, 0x06, 0, 0}, {0x8875, 0x45, 0, 0}, + {0x8876, 0x40, 0, 0}, {0x8877, 0x0a, 0, 0}, {0x8878, 0x78, 0, 0}, + {0x8879, 0x54, 0, 0}, {0x887a, 0x12, 0, 0}, {0x887b, 0x0b, 0, 0}, + {0x887c, 0xd0, 0, 0}, {0x887d, 0x78, 0, 0}, {0x887e, 0x6a, 0, 0}, + {0x887f, 0x12, 0, 0}, {0x8880, 0x06, 0, 0}, {0x8881, 0x99, 0, 0}, + {0x8882, 0x78, 0, 0}, {0x8883, 0x61, 0, 0}, {0x8884, 0xe6, 0, 0}, + {0x8885, 0x90, 0, 0}, {0x8886, 0x60, 0, 0}, {0x8887, 0x01, 0, 0}, + {0x8888, 0xf0, 0, 0}, {0x8889, 0x78, 0, 0}, {0x888a, 0x65, 0, 0}, + {0x888b, 0xe6, 0, 0}, {0x888c, 0xa3, 0, 0}, {0x888d, 0xf0, 0, 0}, + {0x888e, 0x78, 0, 0}, {0x888f, 0x69, 0, 0}, {0x8890, 0xe6, 0, 0}, + {0x8891, 0xa3, 0, 0}, {0x8892, 0xf0, 0, 0}, {0x8893, 0x78, 0, 0}, + {0x8894, 0x55, 0, 0}, {0x8895, 0xe6, 0, 0}, {0x8896, 0xa3, 0, 0}, + {0x8897, 0xf0, 0, 0}, {0x8898, 0x7d, 0, 0}, {0x8899, 0x01, 0, 0}, + {0x889a, 0x78, 0, 0}, {0x889b, 0x61, 0, 0}, {0x889c, 0x12, 0, 0}, + {0x889d, 0x0b, 0, 0}, {0x889e, 0xe9, 0, 0}, {0x889f, 0x24, 0, 0}, + {0x88a0, 0x01, 0, 0}, {0x88a1, 0x12, 0, 0}, {0x88a2, 0x0b, 0, 0}, + {0x88a3, 0xa6, 0, 0}, {0x88a4, 0x78, 0, 0}, {0x88a5, 0x65, 0, 0}, + {0x88a6, 0x12, 0, 0}, {0x88a7, 0x0b, 0, 0}, {0x88a8, 0xe9, 0, 0}, + {0x88a9, 0x24, 0, 0}, {0x88aa, 0x02, 0, 0}, {0x88ab, 0x12, 0, 0}, + {0x88ac, 0x0b, 0, 0}, {0x88ad, 0xa6, 0, 0}, {0x88ae, 0x78, 0, 0}, + {0x88af, 0x69, 0, 0}, {0x88b0, 0x12, 0, 0}, {0x88b1, 0x0b, 0, 0}, + {0x88b2, 0xe9, 0, 0}, {0x88b3, 0x24, 0, 0}, {0x88b4, 0x03, 0, 0}, + {0x88b5, 0x12, 0, 0}, {0x88b6, 0x0b, 0, 0}, {0x88b7, 0xa6, 0, 0}, + {0x88b8, 0x78, 0, 0}, {0x88b9, 0x6d, 0, 0}, {0x88ba, 0x12, 0, 0}, + {0x88bb, 0x0b, 0, 0}, {0x88bc, 0xe9, 0, 0}, {0x88bd, 0x24, 0, 0}, + {0x88be, 0x04, 0, 0}, {0x88bf, 0x12, 0, 0}, {0x88c0, 0x0b, 0, 0}, + {0x88c1, 0xa6, 0, 0}, {0x88c2, 0x0d, 0, 0}, {0x88c3, 0xbd, 0, 0}, + {0x88c4, 0x05, 0, 0}, {0x88c5, 0xd4, 0, 0}, {0x88c6, 0xc2, 0, 0}, + {0x88c7, 0x0e, 0, 0}, {0x88c8, 0xc2, 0, 0}, {0x88c9, 0x06, 0, 0}, + {0x88ca, 0x22, 0, 0}, {0x88cb, 0x85, 0, 0}, {0x88cc, 0x08, 0, 0}, + {0x88cd, 0x41, 0, 0}, {0x88ce, 0x90, 0, 0}, {0x88cf, 0x30, 0, 0}, + {0x88d0, 0x24, 0, 0}, {0x88d1, 0xe0, 0, 0}, {0x88d2, 0xf5, 0, 0}, + {0x88d3, 0x3d, 0, 0}, {0x88d4, 0xa3, 0, 0}, {0x88d5, 0xe0, 0, 0}, + {0x88d6, 0xf5, 0, 0}, {0x88d7, 0x3e, 0, 0}, {0x88d8, 0xa3, 0, 0}, + {0x88d9, 0xe0, 0, 0}, {0x88da, 0xf5, 0, 0}, {0x88db, 0x3f, 0, 0}, + {0x88dc, 0xa3, 0, 0}, {0x88dd, 0xe0, 0, 0}, {0x88de, 0xf5, 0, 0}, + {0x88df, 0x40, 0, 0}, {0x88e0, 0xa3, 0, 0}, {0x88e1, 0xe0, 0, 0}, + {0x88e2, 0xf5, 0, 0}, {0x88e3, 0x3c, 0, 0}, {0x88e4, 0xd2, 0, 0}, + {0x88e5, 0x34, 0, 0}, {0x88e6, 0xe5, 0, 0}, {0x88e7, 0x41, 0, 0}, + {0x88e8, 0x12, 0, 0}, {0x88e9, 0x06, 0, 0}, {0x88ea, 0xb1, 0, 0}, + {0x88eb, 0x09, 0, 0}, {0x88ec, 0x31, 0, 0}, {0x88ed, 0x03, 0, 0}, + {0x88ee, 0x09, 0, 0}, {0x88ef, 0x35, 0, 0}, {0x88f0, 0x04, 0, 0}, + {0x88f1, 0x09, 0, 0}, {0x88f2, 0x3b, 0, 0}, {0x88f3, 0x05, 0, 0}, + {0x88f4, 0x09, 0, 0}, {0x88f5, 0x3e, 0, 0}, {0x88f6, 0x06, 0, 0}, + {0x88f7, 0x09, 0, 0}, {0x88f8, 0x41, 0, 0}, {0x88f9, 0x07, 0, 0}, + {0x88fa, 0x09, 0, 0}, {0x88fb, 0x4a, 0, 0}, {0x88fc, 0x08, 0, 0}, + {0x88fd, 0x09, 0, 0}, {0x88fe, 0x5b, 0, 0}, {0x88ff, 0x12, 0, 0}, + {0x8900, 0x09, 0, 0}, {0x8901, 0x73, 0, 0}, {0x8902, 0x18, 0, 0}, + {0x8903, 0x09, 0, 0}, {0x8904, 0x89, 0, 0}, {0x8905, 0x19, 0, 0}, + {0x8906, 0x09, 0, 0}, {0x8907, 0x5e, 0, 0}, {0x8908, 0x1a, 0, 0}, + {0x8909, 0x09, 0, 0}, {0x890a, 0x6a, 0, 0}, {0x890b, 0x1b, 0, 0}, + {0x890c, 0x09, 0, 0}, {0x890d, 0xad, 0, 0}, {0x890e, 0x80, 0, 0}, + {0x890f, 0x09, 0, 0}, {0x8910, 0xb2, 0, 0}, {0x8911, 0x81, 0, 0}, + {0x8912, 0x0a, 0, 0}, {0x8913, 0x1d, 0, 0}, {0x8914, 0x8f, 0, 0}, + {0x8915, 0x0a, 0, 0}, {0x8916, 0x09, 0, 0}, {0x8917, 0x90, 0, 0}, + {0x8918, 0x0a, 0, 0}, {0x8919, 0x1d, 0, 0}, {0x891a, 0x91, 0, 0}, + {0x891b, 0x0a, 0, 0}, {0x891c, 0x1d, 0, 0}, {0x891d, 0x92, 0, 0}, + {0x891e, 0x0a, 0, 0}, {0x891f, 0x1d, 0, 0}, {0x8920, 0x93, 0, 0}, + {0x8921, 0x0a, 0, 0}, {0x8922, 0x1d, 0, 0}, {0x8923, 0x94, 0, 0}, + {0x8924, 0x0a, 0, 0}, {0x8925, 0x1d, 0, 0}, {0x8926, 0x98, 0, 0}, + {0x8927, 0x0a, 0, 0}, {0x8928, 0x17, 0, 0}, {0x8929, 0x9f, 0, 0}, + {0x892a, 0x0a, 0, 0}, {0x892b, 0x1a, 0, 0}, {0x892c, 0xec, 0, 0}, + {0x892d, 0x00, 0, 0}, {0x892e, 0x00, 0, 0}, {0x892f, 0x0a, 0, 0}, + {0x8930, 0x38, 0, 0}, {0x8931, 0x12, 0, 0}, {0x8932, 0x0f, 0, 0}, + {0x8933, 0x74, 0, 0}, {0x8934, 0x22, 0, 0}, {0x8935, 0x12, 0, 0}, + {0x8936, 0x0f, 0, 0}, {0x8937, 0x74, 0, 0}, {0x8938, 0xd2, 0, 0}, + {0x8939, 0x03, 0, 0}, {0x893a, 0x22, 0, 0}, {0x893b, 0xd2, 0, 0}, + {0x893c, 0x03, 0, 0}, {0x893d, 0x22, 0, 0}, {0x893e, 0xc2, 0, 0}, + {0x893f, 0x03, 0, 0}, {0x8940, 0x22, 0, 0}, {0x8941, 0xa2, 0, 0}, + {0x8942, 0x37, 0, 0}, {0x8943, 0xe4, 0, 0}, {0x8944, 0x33, 0, 0}, + {0x8945, 0xf5, 0, 0}, {0x8946, 0x3c, 0, 0}, {0x8947, 0x02, 0, 0}, + {0x8948, 0x0a, 0, 0}, {0x8949, 0x1d, 0, 0}, {0x894a, 0xc2, 0, 0}, + {0x894b, 0x01, 0, 0}, {0x894c, 0xc2, 0, 0}, {0x894d, 0x02, 0, 0}, + {0x894e, 0xc2, 0, 0}, {0x894f, 0x03, 0, 0}, {0x8950, 0x12, 0, 0}, + {0x8951, 0x0d, 0, 0}, {0x8952, 0x0d, 0, 0}, {0x8953, 0x75, 0, 0}, + {0x8954, 0x1e, 0, 0}, {0x8955, 0x70, 0, 0}, {0x8956, 0xd2, 0, 0}, + {0x8957, 0x35, 0, 0}, {0x8958, 0x02, 0, 0}, {0x8959, 0x0a, 0, 0}, + {0x895a, 0x1d, 0, 0}, {0x895b, 0x02, 0, 0}, {0x895c, 0x0a, 0, 0}, + {0x895d, 0x04, 0, 0}, {0x895e, 0x85, 0, 0}, {0x895f, 0x40, 0, 0}, + {0x8960, 0x4a, 0, 0}, {0x8961, 0x85, 0, 0}, {0x8962, 0x3c, 0, 0}, + {0x8963, 0x4b, 0, 0}, {0x8964, 0x12, 0, 0}, {0x8965, 0x0a, 0, 0}, + {0x8966, 0xff, 0, 0}, {0x8967, 0x02, 0, 0}, {0x8968, 0x0a, 0, 0}, + {0x8969, 0x1d, 0, 0}, {0x896a, 0x85, 0, 0}, {0x896b, 0x4a, 0, 0}, + {0x896c, 0x40, 0, 0}, {0x896d, 0x85, 0, 0}, {0x896e, 0x4b, 0, 0}, + {0x896f, 0x3c, 0, 0}, {0x8970, 0x02, 0, 0}, {0x8971, 0x0a, 0, 0}, + {0x8972, 0x1d, 0, 0}, {0x8973, 0xe4, 0, 0}, {0x8974, 0xf5, 0, 0}, + {0x8975, 0x22, 0, 0}, {0x8976, 0xf5, 0, 0}, {0x8977, 0x23, 0, 0}, + {0x8978, 0x85, 0, 0}, {0x8979, 0x40, 0, 0}, {0x897a, 0x31, 0, 0}, + {0x897b, 0x85, 0, 0}, {0x897c, 0x3f, 0, 0}, {0x897d, 0x30, 0, 0}, + {0x897e, 0x85, 0, 0}, {0x897f, 0x3e, 0, 0}, {0x8980, 0x2f, 0, 0}, + {0x8981, 0x85, 0, 0}, {0x8982, 0x3d, 0, 0}, {0x8983, 0x2e, 0, 0}, + {0x8984, 0x12, 0, 0}, {0x8985, 0x0f, 0, 0}, {0x8986, 0x46, 0, 0}, + {0x8987, 0x80, 0, 0}, {0x8988, 0x1f, 0, 0}, {0x8989, 0x75, 0, 0}, + {0x898a, 0x22, 0, 0}, {0x898b, 0x00, 0, 0}, {0x898c, 0x75, 0, 0}, + {0x898d, 0x23, 0, 0}, {0x898e, 0x01, 0, 0}, {0x898f, 0x74, 0, 0}, + {0x8990, 0xff, 0, 0}, {0x8991, 0xf5, 0, 0}, {0x8992, 0x2d, 0, 0}, + {0x8993, 0xf5, 0, 0}, {0x8994, 0x2c, 0, 0}, {0x8995, 0xf5, 0, 0}, + {0x8996, 0x2b, 0, 0}, {0x8997, 0xf5, 0, 0}, {0x8998, 0x2a, 0, 0}, + {0x8999, 0x12, 0, 0}, {0x899a, 0x0f, 0, 0}, {0x899b, 0x46, 0, 0}, + {0x899c, 0x85, 0, 0}, {0x899d, 0x2d, 0, 0}, {0x899e, 0x40, 0, 0}, + {0x899f, 0x85, 0, 0}, {0x89a0, 0x2c, 0, 0}, {0x89a1, 0x3f, 0, 0}, + {0x89a2, 0x85, 0, 0}, {0x89a3, 0x2b, 0, 0}, {0x89a4, 0x3e, 0, 0}, + {0x89a5, 0x85, 0, 0}, {0x89a6, 0x2a, 0, 0}, {0x89a7, 0x3d, 0, 0}, + {0x89a8, 0xe4, 0, 0}, {0x89a9, 0xf5, 0, 0}, {0x89aa, 0x3c, 0, 0}, + {0x89ab, 0x80, 0, 0}, {0x89ac, 0x70, 0, 0}, {0x89ad, 0x12, 0, 0}, + {0x89ae, 0x0f, 0, 0}, {0x89af, 0x16, 0, 0}, {0x89b0, 0x80, 0, 0}, + {0x89b1, 0x6b, 0, 0}, {0x89b2, 0x85, 0, 0}, {0x89b3, 0x3d, 0, 0}, + {0x89b4, 0x45, 0, 0}, {0x89b5, 0x85, 0, 0}, {0x89b6, 0x3e, 0, 0}, + {0x89b7, 0x46, 0, 0}, {0x89b8, 0xe5, 0, 0}, {0x89b9, 0x47, 0, 0}, + {0x89ba, 0xc3, 0, 0}, {0x89bb, 0x13, 0, 0}, {0x89bc, 0xff, 0, 0}, + {0x89bd, 0xe5, 0, 0}, {0x89be, 0x45, 0, 0}, {0x89bf, 0xc3, 0, 0}, + {0x89c0, 0x9f, 0, 0}, {0x89c1, 0x50, 0, 0}, {0x89c2, 0x02, 0, 0}, + {0x89c3, 0x8f, 0, 0}, {0x89c4, 0x45, 0, 0}, {0x89c5, 0xe5, 0, 0}, + {0x89c6, 0x48, 0, 0}, {0x89c7, 0xc3, 0, 0}, {0x89c8, 0x13, 0, 0}, + {0x89c9, 0xff, 0, 0}, {0x89ca, 0xe5, 0, 0}, {0x89cb, 0x46, 0, 0}, + {0x89cc, 0xc3, 0, 0}, {0x89cd, 0x9f, 0, 0}, {0x89ce, 0x50, 0, 0}, + {0x89cf, 0x02, 0, 0}, {0x89d0, 0x8f, 0, 0}, {0x89d1, 0x46, 0, 0}, + {0x89d2, 0xe5, 0, 0}, {0x89d3, 0x47, 0, 0}, {0x89d4, 0xc3, 0, 0}, + {0x89d5, 0x13, 0, 0}, {0x89d6, 0xff, 0, 0}, {0x89d7, 0xfd, 0, 0}, + {0x89d8, 0xe5, 0, 0}, {0x89d9, 0x45, 0, 0}, {0x89da, 0x2d, 0, 0}, + {0x89db, 0xfd, 0, 0}, {0x89dc, 0xe4, 0, 0}, {0x89dd, 0x33, 0, 0}, + {0x89de, 0xfc, 0, 0}, {0x89df, 0xe5, 0, 0}, {0x89e0, 0x44, 0, 0}, + {0x89e1, 0x12, 0, 0}, {0x89e2, 0x0f, 0, 0}, {0x89e3, 0x90, 0, 0}, + {0x89e4, 0x40, 0, 0}, {0x89e5, 0x05, 0, 0}, {0x89e6, 0xe5, 0, 0}, + {0x89e7, 0x44, 0, 0}, {0x89e8, 0x9f, 0, 0}, {0x89e9, 0xf5, 0, 0}, + {0x89ea, 0x45, 0, 0}, {0x89eb, 0xe5, 0, 0}, {0x89ec, 0x48, 0, 0}, + {0x89ed, 0xc3, 0, 0}, {0x89ee, 0x13, 0, 0}, {0x89ef, 0xff, 0, 0}, + {0x89f0, 0xfd, 0, 0}, {0x89f1, 0xe5, 0, 0}, {0x89f2, 0x46, 0, 0}, + {0x89f3, 0x2d, 0, 0}, {0x89f4, 0xfd, 0, 0}, {0x89f5, 0xe4, 0, 0}, + {0x89f6, 0x33, 0, 0}, {0x89f7, 0xfc, 0, 0}, {0x89f8, 0xe5, 0, 0}, + {0x89f9, 0x43, 0, 0}, {0x89fa, 0x12, 0, 0}, {0x89fb, 0x0f, 0, 0}, + {0x89fc, 0x90, 0, 0}, {0x89fd, 0x40, 0, 0}, {0x89fe, 0x05, 0, 0}, + {0x89ff, 0xe5, 0, 0}, {0x8a00, 0x43, 0, 0}, {0x8a01, 0x9f, 0, 0}, + {0x8a02, 0xf5, 0, 0}, {0x8a03, 0x46, 0, 0}, {0x8a04, 0x12, 0, 0}, + {0x8a05, 0x06, 0, 0}, {0x8a06, 0xd7, 0, 0}, {0x8a07, 0x80, 0, 0}, + {0x8a08, 0x14, 0, 0}, {0x8a09, 0x85, 0, 0}, {0x8a0a, 0x40, 0, 0}, + {0x8a0b, 0x48, 0, 0}, {0x8a0c, 0x85, 0, 0}, {0x8a0d, 0x3f, 0, 0}, + {0x8a0e, 0x47, 0, 0}, {0x8a0f, 0x85, 0, 0}, {0x8a10, 0x3e, 0, 0}, + {0x8a11, 0x46, 0, 0}, {0x8a12, 0x85, 0, 0}, {0x8a13, 0x3d, 0, 0}, + {0x8a14, 0x45, 0, 0}, {0x8a15, 0x80, 0, 0}, {0x8a16, 0x06, 0, 0}, + {0x8a17, 0x02, 0, 0}, {0x8a18, 0x06, 0, 0}, {0x8a19, 0xd7, 0, 0}, + {0x8a1a, 0x12, 0, 0}, {0x8a1b, 0x0d, 0, 0}, {0x8a1c, 0x7e, 0, 0}, + {0x8a1d, 0x90, 0, 0}, {0x8a1e, 0x30, 0, 0}, {0x8a1f, 0x24, 0, 0}, + {0x8a20, 0xe5, 0, 0}, {0x8a21, 0x3d, 0, 0}, {0x8a22, 0xf0, 0, 0}, + {0x8a23, 0xa3, 0, 0}, {0x8a24, 0xe5, 0, 0}, {0x8a25, 0x3e, 0, 0}, + {0x8a26, 0xf0, 0, 0}, {0x8a27, 0xa3, 0, 0}, {0x8a28, 0xe5, 0, 0}, + {0x8a29, 0x3f, 0, 0}, {0x8a2a, 0xf0, 0, 0}, {0x8a2b, 0xa3, 0, 0}, + {0x8a2c, 0xe5, 0, 0}, {0x8a2d, 0x40, 0, 0}, {0x8a2e, 0xf0, 0, 0}, + {0x8a2f, 0xa3, 0, 0}, {0x8a30, 0xe5, 0, 0}, {0x8a31, 0x3c, 0, 0}, + {0x8a32, 0xf0, 0, 0}, {0x8a33, 0x90, 0, 0}, {0x8a34, 0x30, 0, 0}, + {0x8a35, 0x23, 0, 0}, {0x8a36, 0xe4, 0, 0}, {0x8a37, 0xf0, 0, 0}, + {0x8a38, 0x22, 0, 0}, {0x8a39, 0xc0, 0, 0}, {0x8a3a, 0xe0, 0, 0}, + {0x8a3b, 0xc0, 0, 0}, {0x8a3c, 0x83, 0, 0}, {0x8a3d, 0xc0, 0, 0}, + {0x8a3e, 0x82, 0, 0}, {0x8a3f, 0xc0, 0, 0}, {0x8a40, 0xd0, 0, 0}, + {0x8a41, 0x90, 0, 0}, {0x8a42, 0x3f, 0, 0}, {0x8a43, 0x0c, 0, 0}, + {0x8a44, 0xe0, 0, 0}, {0x8a45, 0xf5, 0, 0}, {0x8a46, 0x32, 0, 0}, + {0x8a47, 0xe5, 0, 0}, {0x8a48, 0x32, 0, 0}, {0x8a49, 0x30, 0, 0}, + {0x8a4a, 0xe3, 0, 0}, {0x8a4b, 0x74, 0, 0}, {0x8a4c, 0x30, 0, 0}, + {0x8a4d, 0x36, 0, 0}, {0x8a4e, 0x66, 0, 0}, {0x8a4f, 0x90, 0, 0}, + {0x8a50, 0x60, 0, 0}, {0x8a51, 0x19, 0, 0}, {0x8a52, 0xe0, 0, 0}, + {0x8a53, 0xf5, 0, 0}, {0x8a54, 0x0a, 0, 0}, {0x8a55, 0xa3, 0, 0}, + {0x8a56, 0xe0, 0, 0}, {0x8a57, 0xf5, 0, 0}, {0x8a58, 0x0b, 0, 0}, + {0x8a59, 0x90, 0, 0}, {0x8a5a, 0x60, 0, 0}, {0x8a5b, 0x1d, 0, 0}, + {0x8a5c, 0xe0, 0, 0}, {0x8a5d, 0xf5, 0, 0}, {0x8a5e, 0x14, 0, 0}, + {0x8a5f, 0xa3, 0, 0}, {0x8a60, 0xe0, 0, 0}, {0x8a61, 0xf5, 0, 0}, + {0x8a62, 0x15, 0, 0}, {0x8a63, 0x90, 0, 0}, {0x8a64, 0x60, 0, 0}, + {0x8a65, 0x21, 0, 0}, {0x8a66, 0xe0, 0, 0}, {0x8a67, 0xf5, 0, 0}, + {0x8a68, 0x0c, 0, 0}, {0x8a69, 0xa3, 0, 0}, {0x8a6a, 0xe0, 0, 0}, + {0x8a6b, 0xf5, 0, 0}, {0x8a6c, 0x0d, 0, 0}, {0x8a6d, 0x90, 0, 0}, + {0x8a6e, 0x60, 0, 0}, {0x8a6f, 0x29, 0, 0}, {0x8a70, 0xe0, 0, 0}, + {0x8a71, 0xf5, 0, 0}, {0x8a72, 0x0e, 0, 0}, {0x8a73, 0xa3, 0, 0}, + {0x8a74, 0xe0, 0, 0}, {0x8a75, 0xf5, 0, 0}, {0x8a76, 0x0f, 0, 0}, + {0x8a77, 0x90, 0, 0}, {0x8a78, 0x60, 0, 0}, {0x8a79, 0x31, 0, 0}, + {0x8a7a, 0xe0, 0, 0}, {0x8a7b, 0xf5, 0, 0}, {0x8a7c, 0x10, 0, 0}, + {0x8a7d, 0xa3, 0, 0}, {0x8a7e, 0xe0, 0, 0}, {0x8a7f, 0xf5, 0, 0}, + {0x8a80, 0x11, 0, 0}, {0x8a81, 0x90, 0, 0}, {0x8a82, 0x60, 0, 0}, + {0x8a83, 0x39, 0, 0}, {0x8a84, 0xe0, 0, 0}, {0x8a85, 0xf5, 0, 0}, + {0x8a86, 0x12, 0, 0}, {0x8a87, 0xa3, 0, 0}, {0x8a88, 0xe0, 0, 0}, + {0x8a89, 0xf5, 0, 0}, {0x8a8a, 0x13, 0, 0}, {0x8a8b, 0x30, 0, 0}, + {0x8a8c, 0x01, 0, 0}, {0x8a8d, 0x06, 0, 0}, {0x8a8e, 0x30, 0, 0}, + {0x8a8f, 0x33, 0, 0}, {0x8a90, 0x03, 0, 0}, {0x8a91, 0xd3, 0, 0}, + {0x8a92, 0x80, 0, 0}, {0x8a93, 0x01, 0, 0}, {0x8a94, 0xc3, 0, 0}, + {0x8a95, 0x92, 0, 0}, {0x8a96, 0x09, 0, 0}, {0x8a97, 0x30, 0, 0}, + {0x8a98, 0x02, 0, 0}, {0x8a99, 0x06, 0, 0}, {0x8a9a, 0x30, 0, 0}, + {0x8a9b, 0x33, 0, 0}, {0x8a9c, 0x03, 0, 0}, {0x8a9d, 0xd3, 0, 0}, + {0x8a9e, 0x80, 0, 0}, {0x8a9f, 0x01, 0, 0}, {0x8aa0, 0xc3, 0, 0}, + {0x8aa1, 0x92, 0, 0}, {0x8aa2, 0x0a, 0, 0}, {0x8aa3, 0x30, 0, 0}, + {0x8aa4, 0x33, 0, 0}, {0x8aa5, 0x0c, 0, 0}, {0x8aa6, 0x30, 0, 0}, + {0x8aa7, 0x03, 0, 0}, {0x8aa8, 0x09, 0, 0}, {0x8aa9, 0x20, 0, 0}, + {0x8aaa, 0x02, 0, 0}, {0x8aab, 0x06, 0, 0}, {0x8aac, 0x20, 0, 0}, + {0x8aad, 0x01, 0, 0}, {0x8aae, 0x03, 0, 0}, {0x8aaf, 0xd3, 0, 0}, + {0x8ab0, 0x80, 0, 0}, {0x8ab1, 0x01, 0, 0}, {0x8ab2, 0xc3, 0, 0}, + {0x8ab3, 0x92, 0, 0}, {0x8ab4, 0x0b, 0, 0}, {0x8ab5, 0x90, 0, 0}, + {0x8ab6, 0x30, 0, 0}, {0x8ab7, 0x01, 0, 0}, {0x8ab8, 0xe0, 0, 0}, + {0x8ab9, 0x44, 0, 0}, {0x8aba, 0x40, 0, 0}, {0x8abb, 0xf0, 0, 0}, + {0x8abc, 0xe0, 0, 0}, {0x8abd, 0x54, 0, 0}, {0x8abe, 0xbf, 0, 0}, + {0x8abf, 0xf0, 0, 0}, {0x8ac0, 0xe5, 0, 0}, {0x8ac1, 0x32, 0, 0}, + {0x8ac2, 0x30, 0, 0}, {0x8ac3, 0xe1, 0, 0}, {0x8ac4, 0x14, 0, 0}, + {0x8ac5, 0x30, 0, 0}, {0x8ac6, 0x34, 0, 0}, {0x8ac7, 0x11, 0, 0}, + {0x8ac8, 0x90, 0, 0}, {0x8ac9, 0x30, 0, 0}, {0x8aca, 0x22, 0, 0}, + {0x8acb, 0xe0, 0, 0}, {0x8acc, 0xf5, 0, 0}, {0x8acd, 0x08, 0, 0}, + {0x8ace, 0xe4, 0, 0}, {0x8acf, 0xf0, 0, 0}, {0x8ad0, 0x30, 0, 0}, + {0x8ad1, 0x00, 0, 0}, {0x8ad2, 0x03, 0, 0}, {0x8ad3, 0xd3, 0, 0}, + {0x8ad4, 0x80, 0, 0}, {0x8ad5, 0x01, 0, 0}, {0x8ad6, 0xc3, 0, 0}, + {0x8ad7, 0x92, 0, 0}, {0x8ad8, 0x08, 0, 0}, {0x8ad9, 0xe5, 0, 0}, + {0x8ada, 0x32, 0, 0}, {0x8adb, 0x30, 0, 0}, {0x8adc, 0xe5, 0, 0}, + {0x8add, 0x12, 0, 0}, {0x8ade, 0x90, 0, 0}, {0x8adf, 0x56, 0, 0}, + {0x8ae0, 0xa1, 0, 0}, {0x8ae1, 0xe0, 0, 0}, {0x8ae2, 0xf5, 0, 0}, + {0x8ae3, 0x09, 0, 0}, {0x8ae4, 0x30, 0, 0}, {0x8ae5, 0x31, 0, 0}, + {0x8ae6, 0x09, 0, 0}, {0x8ae7, 0x30, 0, 0}, {0x8ae8, 0x05, 0, 0}, + {0x8ae9, 0x03, 0, 0}, {0x8aea, 0xd3, 0, 0}, {0x8aeb, 0x80, 0, 0}, + {0x8aec, 0x01, 0, 0}, {0x8aed, 0xc3, 0, 0}, {0x8aee, 0x92, 0, 0}, + {0x8aef, 0x0d, 0, 0}, {0x8af0, 0x90, 0, 0}, {0x8af1, 0x3f, 0, 0}, + {0x8af2, 0x0c, 0, 0}, {0x8af3, 0xe5, 0, 0}, {0x8af4, 0x32, 0, 0}, + {0x8af5, 0xf0, 0, 0}, {0x8af6, 0xd0, 0, 0}, {0x8af7, 0xd0, 0, 0}, + {0x8af8, 0xd0, 0, 0}, {0x8af9, 0x82, 0, 0}, {0x8afa, 0xd0, 0, 0}, + {0x8afb, 0x83, 0, 0}, {0x8afc, 0xd0, 0, 0}, {0x8afd, 0xe0, 0, 0}, + {0x8afe, 0x32, 0, 0}, {0x8aff, 0x90, 0, 0}, {0x8b00, 0x0e, 0, 0}, + {0x8b01, 0x7e, 0, 0}, {0x8b02, 0xe4, 0, 0}, {0x8b03, 0x93, 0, 0}, + {0x8b04, 0xfe, 0, 0}, {0x8b05, 0x74, 0, 0}, {0x8b06, 0x01, 0, 0}, + {0x8b07, 0x93, 0, 0}, {0x8b08, 0xff, 0, 0}, {0x8b09, 0xc3, 0, 0}, + {0x8b0a, 0x90, 0, 0}, {0x8b0b, 0x0e, 0, 0}, {0x8b0c, 0x7c, 0, 0}, + {0x8b0d, 0x74, 0, 0}, {0x8b0e, 0x01, 0, 0}, {0x8b0f, 0x93, 0, 0}, + {0x8b10, 0x9f, 0, 0}, {0x8b11, 0xff, 0, 0}, {0x8b12, 0xe4, 0, 0}, + {0x8b13, 0x93, 0, 0}, {0x8b14, 0x9e, 0, 0}, {0x8b15, 0xfe, 0, 0}, + {0x8b16, 0xe4, 0, 0}, {0x8b17, 0x8f, 0, 0}, {0x8b18, 0x3b, 0, 0}, + {0x8b19, 0x8e, 0, 0}, {0x8b1a, 0x3a, 0, 0}, {0x8b1b, 0xf5, 0, 0}, + {0x8b1c, 0x39, 0, 0}, {0x8b1d, 0xf5, 0, 0}, {0x8b1e, 0x38, 0, 0}, + {0x8b1f, 0xab, 0, 0}, {0x8b20, 0x3b, 0, 0}, {0x8b21, 0xaa, 0, 0}, + {0x8b22, 0x3a, 0, 0}, {0x8b23, 0xa9, 0, 0}, {0x8b24, 0x39, 0, 0}, + {0x8b25, 0xa8, 0, 0}, {0x8b26, 0x38, 0, 0}, {0x8b27, 0xaf, 0, 0}, + {0x8b28, 0x4b, 0, 0}, {0x8b29, 0xfc, 0, 0}, {0x8b2a, 0xfd, 0, 0}, + {0x8b2b, 0xfe, 0, 0}, {0x8b2c, 0x12, 0, 0}, {0x8b2d, 0x05, 0, 0}, + {0x8b2e, 0x28, 0, 0}, {0x8b2f, 0x12, 0, 0}, {0x8b30, 0x0d, 0, 0}, + {0x8b31, 0xe1, 0, 0}, {0x8b32, 0xe4, 0, 0}, {0x8b33, 0x7b, 0, 0}, + {0x8b34, 0xff, 0, 0}, {0x8b35, 0xfa, 0, 0}, {0x8b36, 0xf9, 0, 0}, + {0x8b37, 0xf8, 0, 0}, {0x8b38, 0x12, 0, 0}, {0x8b39, 0x05, 0, 0}, + {0x8b3a, 0xb3, 0, 0}, {0x8b3b, 0x12, 0, 0}, {0x8b3c, 0x0d, 0, 0}, + {0x8b3d, 0xe1, 0, 0}, {0x8b3e, 0x90, 0, 0}, {0x8b3f, 0x0e, 0, 0}, + {0x8b40, 0x69, 0, 0}, {0x8b41, 0xe4, 0, 0}, {0x8b42, 0x12, 0, 0}, + {0x8b43, 0x0d, 0, 0}, {0x8b44, 0xf6, 0, 0}, {0x8b45, 0x12, 0, 0}, + {0x8b46, 0x0d, 0, 0}, {0x8b47, 0xe1, 0, 0}, {0x8b48, 0xe4, 0, 0}, + {0x8b49, 0x85, 0, 0}, {0x8b4a, 0x4a, 0, 0}, {0x8b4b, 0x37, 0, 0}, + {0x8b4c, 0xf5, 0, 0}, {0x8b4d, 0x36, 0, 0}, {0x8b4e, 0xf5, 0, 0}, + {0x8b4f, 0x35, 0, 0}, {0x8b50, 0xf5, 0, 0}, {0x8b51, 0x34, 0, 0}, + {0x8b52, 0xaf, 0, 0}, {0x8b53, 0x37, 0, 0}, {0x8b54, 0xae, 0, 0}, + {0x8b55, 0x36, 0, 0}, {0x8b56, 0xad, 0, 0}, {0x8b57, 0x35, 0, 0}, + {0x8b58, 0xac, 0, 0}, {0x8b59, 0x34, 0, 0}, {0x8b5a, 0xa3, 0, 0}, + {0x8b5b, 0x12, 0, 0}, {0x8b5c, 0x0d, 0, 0}, {0x8b5d, 0xf6, 0, 0}, + {0x8b5e, 0x8f, 0, 0}, {0x8b5f, 0x37, 0, 0}, {0x8b60, 0x8e, 0, 0}, + {0x8b61, 0x36, 0, 0}, {0x8b62, 0x8d, 0, 0}, {0x8b63, 0x35, 0, 0}, + {0x8b64, 0x8c, 0, 0}, {0x8b65, 0x34, 0, 0}, {0x8b66, 0xe5, 0, 0}, + {0x8b67, 0x3b, 0, 0}, {0x8b68, 0x45, 0, 0}, {0x8b69, 0x37, 0, 0}, + {0x8b6a, 0xf5, 0, 0}, {0x8b6b, 0x3b, 0, 0}, {0x8b6c, 0xe5, 0, 0}, + {0x8b6d, 0x3a, 0, 0}, {0x8b6e, 0x45, 0, 0}, {0x8b6f, 0x36, 0, 0}, + {0x8b70, 0xf5, 0, 0}, {0x8b71, 0x3a, 0, 0}, {0x8b72, 0xe5, 0, 0}, + {0x8b73, 0x39, 0, 0}, {0x8b74, 0x45, 0, 0}, {0x8b75, 0x35, 0, 0}, + {0x8b76, 0xf5, 0, 0}, {0x8b77, 0x39, 0, 0}, {0x8b78, 0xe5, 0, 0}, + {0x8b79, 0x38, 0, 0}, {0x8b7a, 0x45, 0, 0}, {0x8b7b, 0x34, 0, 0}, + {0x8b7c, 0xf5, 0, 0}, {0x8b7d, 0x38, 0, 0}, {0x8b7e, 0xe4, 0, 0}, + {0x8b7f, 0xf5, 0, 0}, {0x8b80, 0x22, 0, 0}, {0x8b81, 0xf5, 0, 0}, + {0x8b82, 0x23, 0, 0}, {0x8b83, 0x85, 0, 0}, {0x8b84, 0x3b, 0, 0}, + {0x8b85, 0x31, 0, 0}, {0x8b86, 0x85, 0, 0}, {0x8b87, 0x3a, 0, 0}, + {0x8b88, 0x30, 0, 0}, {0x8b89, 0x85, 0, 0}, {0x8b8a, 0x39, 0, 0}, + {0x8b8b, 0x2f, 0, 0}, {0x8b8c, 0x85, 0, 0}, {0x8b8d, 0x38, 0, 0}, + {0x8b8e, 0x2e, 0, 0}, {0x8b8f, 0x02, 0, 0}, {0x8b90, 0x0f, 0, 0}, + {0x8b91, 0x46, 0, 0}, {0x8b92, 0xe0, 0, 0}, {0x8b93, 0xa3, 0, 0}, + {0x8b94, 0xe0, 0, 0}, {0x8b95, 0x75, 0, 0}, {0x8b96, 0xf0, 0, 0}, + {0x8b97, 0x02, 0, 0}, {0x8b98, 0xa4, 0, 0}, {0x8b99, 0xff, 0, 0}, + {0x8b9a, 0xae, 0, 0}, {0x8b9b, 0xf0, 0, 0}, {0x8b9c, 0xc3, 0, 0}, + {0x8b9d, 0x08, 0, 0}, {0x8b9e, 0xe6, 0, 0}, {0x8b9f, 0x9f, 0, 0}, + {0x8ba0, 0xf6, 0, 0}, {0x8ba1, 0x18, 0, 0}, {0x8ba2, 0xe6, 0, 0}, + {0x8ba3, 0x9e, 0, 0}, {0x8ba4, 0xf6, 0, 0}, {0x8ba5, 0x22, 0, 0}, + {0x8ba6, 0xff, 0, 0}, {0x8ba7, 0xe5, 0, 0}, {0x8ba8, 0xf0, 0, 0}, + {0x8ba9, 0x34, 0, 0}, {0x8baa, 0x60, 0, 0}, {0x8bab, 0x8f, 0, 0}, + {0x8bac, 0x82, 0, 0}, {0x8bad, 0xf5, 0, 0}, {0x8bae, 0x83, 0, 0}, + {0x8baf, 0xec, 0, 0}, {0x8bb0, 0xf0, 0, 0}, {0x8bb1, 0x22, 0, 0}, + {0x8bb2, 0x78, 0, 0}, {0x8bb3, 0x52, 0, 0}, {0x8bb4, 0x7e, 0, 0}, + {0x8bb5, 0x00, 0, 0}, {0x8bb6, 0xe6, 0, 0}, {0x8bb7, 0xfc, 0, 0}, + {0x8bb8, 0x08, 0, 0}, {0x8bb9, 0xe6, 0, 0}, {0x8bba, 0xfd, 0, 0}, + {0x8bbb, 0x02, 0, 0}, {0x8bbc, 0x04, 0, 0}, {0x8bbd, 0xc1, 0, 0}, + {0x8bbe, 0xe4, 0, 0}, {0x8bbf, 0xfc, 0, 0}, {0x8bc0, 0xfd, 0, 0}, + {0x8bc1, 0x12, 0, 0}, {0x8bc2, 0x06, 0, 0}, {0x8bc3, 0x99, 0, 0}, + {0x8bc4, 0x78, 0, 0}, {0x8bc5, 0x5c, 0, 0}, {0x8bc6, 0xe6, 0, 0}, + {0x8bc7, 0xc3, 0, 0}, {0x8bc8, 0x13, 0, 0}, {0x8bc9, 0xfe, 0, 0}, + {0x8bca, 0x08, 0, 0}, {0x8bcb, 0xe6, 0, 0}, {0x8bcc, 0x13, 0, 0}, + {0x8bcd, 0x22, 0, 0}, {0x8bce, 0x78, 0, 0}, {0x8bcf, 0x52, 0, 0}, + {0x8bd0, 0xe6, 0, 0}, {0x8bd1, 0xfe, 0, 0}, {0x8bd2, 0x08, 0, 0}, + {0x8bd3, 0xe6, 0, 0}, {0x8bd4, 0xff, 0, 0}, {0x8bd5, 0xe4, 0, 0}, + {0x8bd6, 0xfc, 0, 0}, {0x8bd7, 0xfd, 0, 0}, {0x8bd8, 0x22, 0, 0}, + {0x8bd9, 0xe7, 0, 0}, {0x8bda, 0xc4, 0, 0}, {0x8bdb, 0xf8, 0, 0}, + {0x8bdc, 0x54, 0, 0}, {0x8bdd, 0xf0, 0, 0}, {0x8bde, 0xc8, 0, 0}, + {0x8bdf, 0x68, 0, 0}, {0x8be0, 0xf7, 0, 0}, {0x8be1, 0x09, 0, 0}, + {0x8be2, 0xe7, 0, 0}, {0x8be3, 0xc4, 0, 0}, {0x8be4, 0x54, 0, 0}, + {0x8be5, 0x0f, 0, 0}, {0x8be6, 0x48, 0, 0}, {0x8be7, 0xf7, 0, 0}, + {0x8be8, 0x22, 0, 0}, {0x8be9, 0xe6, 0, 0}, {0x8bea, 0xfc, 0, 0}, + {0x8beb, 0xed, 0, 0}, {0x8bec, 0x75, 0, 0}, {0x8bed, 0xf0, 0, 0}, + {0x8bee, 0x04, 0, 0}, {0x8bef, 0xa4, 0, 0}, {0x8bf0, 0x22, 0, 0}, + {0x8bf1, 0x12, 0, 0}, {0x8bf2, 0x06, 0, 0}, {0x8bf3, 0x7c, 0, 0}, + {0x8bf4, 0x8f, 0, 0}, {0x8bf5, 0x48, 0, 0}, {0x8bf6, 0x8e, 0, 0}, + {0x8bf7, 0x47, 0, 0}, {0x8bf8, 0x8d, 0, 0}, {0x8bf9, 0x46, 0, 0}, + {0x8bfa, 0x8c, 0, 0}, {0x8bfb, 0x45, 0, 0}, {0x8bfc, 0x22, 0, 0}, + {0x8bfd, 0xe0, 0, 0}, {0x8bfe, 0xfe, 0, 0}, {0x8bff, 0xa3, 0, 0}, + {0x8c00, 0xe0, 0, 0}, {0x8c01, 0xfd, 0, 0}, {0x8c02, 0xee, 0, 0}, + {0x8c03, 0xf6, 0, 0}, {0x8c04, 0xed, 0, 0}, {0x8c05, 0x08, 0, 0}, + {0x8c06, 0xf6, 0, 0}, {0x8c07, 0x22, 0, 0}, {0x8c08, 0x13, 0, 0}, + {0x8c09, 0xff, 0, 0}, {0x8c0a, 0xc3, 0, 0}, {0x8c0b, 0xe6, 0, 0}, + {0x8c0c, 0x9f, 0, 0}, {0x8c0d, 0xff, 0, 0}, {0x8c0e, 0x18, 0, 0}, + {0x8c0f, 0xe6, 0, 0}, {0x8c10, 0x9e, 0, 0}, {0x8c11, 0xfe, 0, 0}, + {0x8c12, 0x22, 0, 0}, {0x8c13, 0xe6, 0, 0}, {0x8c14, 0xc3, 0, 0}, + {0x8c15, 0x13, 0, 0}, {0x8c16, 0xf7, 0, 0}, {0x8c17, 0x08, 0, 0}, + {0x8c18, 0xe6, 0, 0}, {0x8c19, 0x13, 0, 0}, {0x8c1a, 0x09, 0, 0}, + {0x8c1b, 0xf7, 0, 0}, {0x8c1c, 0x22, 0, 0}, {0x8c1d, 0xad, 0, 0}, + {0x8c1e, 0x39, 0, 0}, {0x8c1f, 0xac, 0, 0}, {0x8c20, 0x38, 0, 0}, + {0x8c21, 0xfa, 0, 0}, {0x8c22, 0xf9, 0, 0}, {0x8c23, 0xf8, 0, 0}, + {0x8c24, 0x12, 0, 0}, {0x8c25, 0x05, 0, 0}, {0x8c26, 0x28, 0, 0}, + {0x8c27, 0x8f, 0, 0}, {0x8c28, 0x3b, 0, 0}, {0x8c29, 0x8e, 0, 0}, + {0x8c2a, 0x3a, 0, 0}, {0x8c2b, 0x8d, 0, 0}, {0x8c2c, 0x39, 0, 0}, + {0x8c2d, 0x8c, 0, 0}, {0x8c2e, 0x38, 0, 0}, {0x8c2f, 0xab, 0, 0}, + {0x8c30, 0x37, 0, 0}, {0x8c31, 0xaa, 0, 0}, {0x8c32, 0x36, 0, 0}, + {0x8c33, 0xa9, 0, 0}, {0x8c34, 0x35, 0, 0}, {0x8c35, 0xa8, 0, 0}, + {0x8c36, 0x34, 0, 0}, {0x8c37, 0x22, 0, 0}, {0x8c38, 0x93, 0, 0}, + {0x8c39, 0xff, 0, 0}, {0x8c3a, 0xe4, 0, 0}, {0x8c3b, 0xfc, 0, 0}, + {0x8c3c, 0xfd, 0, 0}, {0x8c3d, 0xfe, 0, 0}, {0x8c3e, 0x12, 0, 0}, + {0x8c3f, 0x05, 0, 0}, {0x8c40, 0x28, 0, 0}, {0x8c41, 0x8f, 0, 0}, + {0x8c42, 0x37, 0, 0}, {0x8c43, 0x8e, 0, 0}, {0x8c44, 0x36, 0, 0}, + {0x8c45, 0x8d, 0, 0}, {0x8c46, 0x35, 0, 0}, {0x8c47, 0x8c, 0, 0}, + {0x8c48, 0x34, 0, 0}, {0x8c49, 0x22, 0, 0}, {0x8c4a, 0x78, 0, 0}, + {0x8c4b, 0x84, 0, 0}, {0x8c4c, 0xe6, 0, 0}, {0x8c4d, 0xfe, 0, 0}, + {0x8c4e, 0x08, 0, 0}, {0x8c4f, 0xe6, 0, 0}, {0x8c50, 0xff, 0, 0}, + {0x8c51, 0xe4, 0, 0}, {0x8c52, 0x8f, 0, 0}, {0x8c53, 0x37, 0, 0}, + {0x8c54, 0x8e, 0, 0}, {0x8c55, 0x36, 0, 0}, {0x8c56, 0xf5, 0, 0}, + {0x8c57, 0x35, 0, 0}, {0x8c58, 0xf5, 0, 0}, {0x8c59, 0x34, 0, 0}, + {0x8c5a, 0x22, 0, 0}, {0x8c5b, 0x90, 0, 0}, {0x8c5c, 0x0e, 0, 0}, + {0x8c5d, 0x8c, 0, 0}, {0x8c5e, 0xe4, 0, 0}, {0x8c5f, 0x93, 0, 0}, + {0x8c60, 0x25, 0, 0}, {0x8c61, 0xe0, 0, 0}, {0x8c62, 0x24, 0, 0}, + {0x8c63, 0x0a, 0, 0}, {0x8c64, 0xf8, 0, 0}, {0x8c65, 0xe6, 0, 0}, + {0x8c66, 0xfe, 0, 0}, {0x8c67, 0x08, 0, 0}, {0x8c68, 0xe6, 0, 0}, + {0x8c69, 0xff, 0, 0}, {0x8c6a, 0x22, 0, 0}, {0x8c6b, 0xe6, 0, 0}, + {0x8c6c, 0xfe, 0, 0}, {0x8c6d, 0x08, 0, 0}, {0x8c6e, 0xe6, 0, 0}, + {0x8c6f, 0xff, 0, 0}, {0x8c70, 0xe4, 0, 0}, {0x8c71, 0x8f, 0, 0}, + {0x8c72, 0x3b, 0, 0}, {0x8c73, 0x8e, 0, 0}, {0x8c74, 0x3a, 0, 0}, + {0x8c75, 0xf5, 0, 0}, {0x8c76, 0x39, 0, 0}, {0x8c77, 0xf5, 0, 0}, + {0x8c78, 0x38, 0, 0}, {0x8c79, 0x22, 0, 0}, {0x8c7a, 0x78, 0, 0}, + {0x8c7b, 0x4e, 0, 0}, {0x8c7c, 0xe6, 0, 0}, {0x8c7d, 0xfe, 0, 0}, + {0x8c7e, 0x08, 0, 0}, {0x8c7f, 0xe6, 0, 0}, {0x8c80, 0xff, 0, 0}, + {0x8c81, 0x22, 0, 0}, {0x8c82, 0xef, 0, 0}, {0x8c83, 0x25, 0, 0}, + {0x8c84, 0xe0, 0, 0}, {0x8c85, 0x24, 0, 0}, {0x8c86, 0x4e, 0, 0}, + {0x8c87, 0xf8, 0, 0}, {0x8c88, 0xe6, 0, 0}, {0x8c89, 0xfc, 0, 0}, + {0x8c8a, 0x08, 0, 0}, {0x8c8b, 0xe6, 0, 0}, {0x8c8c, 0xfd, 0, 0}, + {0x8c8d, 0x22, 0, 0}, {0x8c8e, 0x78, 0, 0}, {0x8c8f, 0x89, 0, 0}, + {0x8c90, 0xef, 0, 0}, {0x8c91, 0x26, 0, 0}, {0x8c92, 0xf6, 0, 0}, + {0x8c93, 0x18, 0, 0}, {0x8c94, 0xe4, 0, 0}, {0x8c95, 0x36, 0, 0}, + {0x8c96, 0xf6, 0, 0}, {0x8c97, 0x22, 0, 0}, {0x8c98, 0x75, 0, 0}, + {0x8c99, 0x89, 0, 0}, {0x8c9a, 0x03, 0, 0}, {0x8c9b, 0x75, 0, 0}, + {0x8c9c, 0xa8, 0, 0}, {0x8c9d, 0x01, 0, 0}, {0x8c9e, 0x75, 0, 0}, + {0x8c9f, 0xb8, 0, 0}, {0x8ca0, 0x04, 0, 0}, {0x8ca1, 0x75, 0, 0}, + {0x8ca2, 0x34, 0, 0}, {0x8ca3, 0xff, 0, 0}, {0x8ca4, 0x75, 0, 0}, + {0x8ca5, 0x35, 0, 0}, {0x8ca6, 0x0e, 0, 0}, {0x8ca7, 0x75, 0, 0}, + {0x8ca8, 0x36, 0, 0}, {0x8ca9, 0x15, 0, 0}, {0x8caa, 0x75, 0, 0}, + {0x8cab, 0x37, 0, 0}, {0x8cac, 0x0d, 0, 0}, {0x8cad, 0x12, 0, 0}, + {0x8cae, 0x0e, 0, 0}, {0x8caf, 0x9a, 0, 0}, {0x8cb0, 0x12, 0, 0}, + {0x8cb1, 0x00, 0, 0}, {0x8cb2, 0x09, 0, 0}, {0x8cb3, 0x12, 0, 0}, + {0x8cb4, 0x0f, 0, 0}, {0x8cb5, 0x16, 0, 0}, {0x8cb6, 0x12, 0, 0}, + {0x8cb7, 0x00, 0, 0}, {0x8cb8, 0x06, 0, 0}, {0x8cb9, 0xd2, 0, 0}, + {0x8cba, 0x00, 0, 0}, {0x8cbb, 0xd2, 0, 0}, {0x8cbc, 0x34, 0, 0}, + {0x8cbd, 0xd2, 0, 0}, {0x8cbe, 0xaf, 0, 0}, {0x8cbf, 0x75, 0, 0}, + {0x8cc0, 0x34, 0, 0}, {0x8cc1, 0xff, 0, 0}, {0x8cc2, 0x75, 0, 0}, + {0x8cc3, 0x35, 0, 0}, {0x8cc4, 0x0e, 0, 0}, {0x8cc5, 0x75, 0, 0}, + {0x8cc6, 0x36, 0, 0}, {0x8cc7, 0x49, 0, 0}, {0x8cc8, 0x75, 0, 0}, + {0x8cc9, 0x37, 0, 0}, {0x8cca, 0x03, 0, 0}, {0x8ccb, 0x12, 0, 0}, + {0x8ccc, 0x0e, 0, 0}, {0x8ccd, 0x9a, 0, 0}, {0x8cce, 0x30, 0, 0}, + {0x8ccf, 0x08, 0, 0}, {0x8cd0, 0x09, 0, 0}, {0x8cd1, 0xc2, 0, 0}, + {0x8cd2, 0x34, 0, 0}, {0x8cd3, 0x12, 0, 0}, {0x8cd4, 0x08, 0, 0}, + {0x8cd5, 0xcb, 0, 0}, {0x8cd6, 0xc2, 0, 0}, {0x8cd7, 0x08, 0, 0}, + {0x8cd8, 0xd2, 0, 0}, {0x8cd9, 0x34, 0, 0}, {0x8cda, 0x30, 0, 0}, + {0x8cdb, 0x0b, 0, 0}, {0x8cdc, 0x09, 0, 0}, {0x8cdd, 0xc2, 0, 0}, + {0x8cde, 0x36, 0, 0}, {0x8cdf, 0x12, 0, 0}, {0x8ce0, 0x02, 0, 0}, + {0x8ce1, 0x6c, 0, 0}, {0x8ce2, 0xc2, 0, 0}, {0x8ce3, 0x0b, 0, 0}, + {0x8ce4, 0xd2, 0, 0}, {0x8ce5, 0x36, 0, 0}, {0x8ce6, 0x30, 0, 0}, + {0x8ce7, 0x09, 0, 0}, {0x8ce8, 0x09, 0, 0}, {0x8ce9, 0xc2, 0, 0}, + {0x8cea, 0x36, 0, 0}, {0x8ceb, 0x12, 0, 0}, {0x8cec, 0x00, 0, 0}, + {0x8ced, 0x0e, 0, 0}, {0x8cee, 0xc2, 0, 0}, {0x8cef, 0x09, 0, 0}, + {0x8cf0, 0xd2, 0, 0}, {0x8cf1, 0x36, 0, 0}, {0x8cf2, 0x30, 0, 0}, + {0x8cf3, 0x0e, 0, 0}, {0x8cf4, 0x03, 0, 0}, {0x8cf5, 0x12, 0, 0}, + {0x8cf6, 0x06, 0, 0}, {0x8cf7, 0xd7, 0, 0}, {0x8cf8, 0x30, 0, 0}, + {0x8cf9, 0x35, 0, 0}, {0x8cfa, 0xd3, 0, 0}, {0x8cfb, 0x90, 0, 0}, + {0x8cfc, 0x30, 0, 0}, {0x8cfd, 0x29, 0, 0}, {0x8cfe, 0xe5, 0, 0}, + {0x8cff, 0x1e, 0, 0}, {0x8d00, 0xf0, 0, 0}, {0x8d01, 0xb4, 0, 0}, + {0x8d02, 0x10, 0, 0}, {0x8d03, 0x05, 0, 0}, {0x8d04, 0x90, 0, 0}, + {0x8d05, 0x30, 0, 0}, {0x8d06, 0x23, 0, 0}, {0x8d07, 0xe4, 0, 0}, + {0x8d08, 0xf0, 0, 0}, {0x8d09, 0xc2, 0, 0}, {0x8d0a, 0x35, 0, 0}, + {0x8d0b, 0x80, 0, 0}, {0x8d0c, 0xc1, 0, 0}, {0x8d0d, 0xe4, 0, 0}, + {0x8d0e, 0xf5, 0, 0}, {0x8d0f, 0x4b, 0, 0}, {0x8d10, 0x90, 0, 0}, + {0x8d11, 0x0e, 0, 0}, {0x8d12, 0x7a, 0, 0}, {0x8d13, 0x93, 0, 0}, + {0x8d14, 0xff, 0, 0}, {0x8d15, 0xe4, 0, 0}, {0x8d16, 0x8f, 0, 0}, + {0x8d17, 0x37, 0, 0}, {0x8d18, 0xf5, 0, 0}, {0x8d19, 0x36, 0, 0}, + {0x8d1a, 0xf5, 0, 0}, {0x8d1b, 0x35, 0, 0}, {0x8d1c, 0xf5, 0, 0}, + {0x8d1d, 0x34, 0, 0}, {0x8d1e, 0xaf, 0, 0}, {0x8d1f, 0x37, 0, 0}, + {0x8d20, 0xae, 0, 0}, {0x8d21, 0x36, 0, 0}, {0x8d22, 0xad, 0, 0}, + {0x8d23, 0x35, 0, 0}, {0x8d24, 0xac, 0, 0}, {0x8d25, 0x34, 0, 0}, + {0x8d26, 0x90, 0, 0}, {0x8d27, 0x0e, 0, 0}, {0x8d28, 0x6a, 0, 0}, + {0x8d29, 0x12, 0, 0}, {0x8d2a, 0x0d, 0, 0}, {0x8d2b, 0xf6, 0, 0}, + {0x8d2c, 0x8f, 0, 0}, {0x8d2d, 0x37, 0, 0}, {0x8d2e, 0x8e, 0, 0}, + {0x8d2f, 0x36, 0, 0}, {0x8d30, 0x8d, 0, 0}, {0x8d31, 0x35, 0, 0}, + {0x8d32, 0x8c, 0, 0}, {0x8d33, 0x34, 0, 0}, {0x8d34, 0x90, 0, 0}, + {0x8d35, 0x0e, 0, 0}, {0x8d36, 0x72, 0, 0}, {0x8d37, 0x12, 0, 0}, + {0x8d38, 0x06, 0, 0}, {0x8d39, 0x7c, 0, 0}, {0x8d3a, 0xef, 0, 0}, + {0x8d3b, 0x45, 0, 0}, {0x8d3c, 0x37, 0, 0}, {0x8d3d, 0xf5, 0, 0}, + {0x8d3e, 0x37, 0, 0}, {0x8d3f, 0xee, 0, 0}, {0x8d40, 0x45, 0, 0}, + {0x8d41, 0x36, 0, 0}, {0x8d42, 0xf5, 0, 0}, {0x8d43, 0x36, 0, 0}, + {0x8d44, 0xed, 0, 0}, {0x8d45, 0x45, 0, 0}, {0x8d46, 0x35, 0, 0}, + {0x8d47, 0xf5, 0, 0}, {0x8d48, 0x35, 0, 0}, {0x8d49, 0xec, 0, 0}, + {0x8d4a, 0x45, 0, 0}, {0x8d4b, 0x34, 0, 0}, {0x8d4c, 0xf5, 0, 0}, + {0x8d4d, 0x34, 0, 0}, {0x8d4e, 0xe4, 0, 0}, {0x8d4f, 0xf5, 0, 0}, + {0x8d50, 0x22, 0, 0}, {0x8d51, 0xf5, 0, 0}, {0x8d52, 0x23, 0, 0}, + {0x8d53, 0x85, 0, 0}, {0x8d54, 0x37, 0, 0}, {0x8d55, 0x31, 0, 0}, + {0x8d56, 0x85, 0, 0}, {0x8d57, 0x36, 0, 0}, {0x8d58, 0x30, 0, 0}, + {0x8d59, 0x85, 0, 0}, {0x8d5a, 0x35, 0, 0}, {0x8d5b, 0x2f, 0, 0}, + {0x8d5c, 0x85, 0, 0}, {0x8d5d, 0x34, 0, 0}, {0x8d5e, 0x2e, 0, 0}, + {0x8d5f, 0x12, 0, 0}, {0x8d60, 0x0f, 0, 0}, {0x8d61, 0x46, 0, 0}, + {0x8d62, 0xe4, 0, 0}, {0x8d63, 0xf5, 0, 0}, {0x8d64, 0x22, 0, 0}, + {0x8d65, 0xf5, 0, 0}, {0x8d66, 0x23, 0, 0}, {0x8d67, 0x90, 0, 0}, + {0x8d68, 0x0e, 0, 0}, {0x8d69, 0x72, 0, 0}, {0x8d6a, 0x12, 0, 0}, + {0x8d6b, 0x0d, 0, 0}, {0x8d6c, 0xea, 0, 0}, {0x8d6d, 0x12, 0, 0}, + {0x8d6e, 0x0f, 0, 0}, {0x8d6f, 0x46, 0, 0}, {0x8d70, 0xe4, 0, 0}, + {0x8d71, 0xf5, 0, 0}, {0x8d72, 0x22, 0, 0}, {0x8d73, 0xf5, 0, 0}, + {0x8d74, 0x23, 0, 0}, {0x8d75, 0x90, 0, 0}, {0x8d76, 0x0e, 0, 0}, + {0x8d77, 0x6e, 0, 0}, {0x8d78, 0x12, 0, 0}, {0x8d79, 0x0d, 0, 0}, + {0x8d7a, 0xea, 0, 0}, {0x8d7b, 0x02, 0, 0}, {0x8d7c, 0x0f, 0, 0}, + {0x8d7d, 0x46, 0, 0}, {0x8d7e, 0xe5, 0, 0}, {0x8d7f, 0x40, 0, 0}, + {0x8d80, 0x24, 0, 0}, {0x8d81, 0xf2, 0, 0}, {0x8d82, 0xf5, 0, 0}, + {0x8d83, 0x37, 0, 0}, {0x8d84, 0xe5, 0, 0}, {0x8d85, 0x3f, 0, 0}, + {0x8d86, 0x34, 0, 0}, {0x8d87, 0x43, 0, 0}, {0x8d88, 0xf5, 0, 0}, + {0x8d89, 0x36, 0, 0}, {0x8d8a, 0xe5, 0, 0}, {0x8d8b, 0x3e, 0, 0}, + {0x8d8c, 0x34, 0, 0}, {0x8d8d, 0xa2, 0, 0}, {0x8d8e, 0xf5, 0, 0}, + {0x8d8f, 0x35, 0, 0}, {0x8d90, 0xe5, 0, 0}, {0x8d91, 0x3d, 0, 0}, + {0x8d92, 0x34, 0, 0}, {0x8d93, 0x28, 0, 0}, {0x8d94, 0xf5, 0, 0}, + {0x8d95, 0x34, 0, 0}, {0x8d96, 0xe5, 0, 0}, {0x8d97, 0x37, 0, 0}, + {0x8d98, 0xff, 0, 0}, {0x8d99, 0xe4, 0, 0}, {0x8d9a, 0xfe, 0, 0}, + {0x8d9b, 0xfd, 0, 0}, {0x8d9c, 0xfc, 0, 0}, {0x8d9d, 0x78, 0, 0}, + {0x8d9e, 0x18, 0, 0}, {0x8d9f, 0x12, 0, 0}, {0x8da0, 0x06, 0, 0}, + {0x8da1, 0x69, 0, 0}, {0x8da2, 0x8f, 0, 0}, {0x8da3, 0x40, 0, 0}, + {0x8da4, 0x8e, 0, 0}, {0x8da5, 0x3f, 0, 0}, {0x8da6, 0x8d, 0, 0}, + {0x8da7, 0x3e, 0, 0}, {0x8da8, 0x8c, 0, 0}, {0x8da9, 0x3d, 0, 0}, + {0x8daa, 0xe5, 0, 0}, {0x8dab, 0x37, 0, 0}, {0x8dac, 0x54, 0, 0}, + {0x8dad, 0xa0, 0, 0}, {0x8dae, 0xff, 0, 0}, {0x8daf, 0xe5, 0, 0}, + {0x8db0, 0x36, 0, 0}, {0x8db1, 0xfe, 0, 0}, {0x8db2, 0xe4, 0, 0}, + {0x8db3, 0xfd, 0, 0}, {0x8db4, 0xfc, 0, 0}, {0x8db5, 0x78, 0, 0}, + {0x8db6, 0x07, 0, 0}, {0x8db7, 0x12, 0, 0}, {0x8db8, 0x06, 0, 0}, + {0x8db9, 0x56, 0, 0}, {0x8dba, 0x78, 0, 0}, {0x8dbb, 0x10, 0, 0}, + {0x8dbc, 0x12, 0, 0}, {0x8dbd, 0x0f, 0, 0}, {0x8dbe, 0x9a, 0, 0}, + {0x8dbf, 0xe4, 0, 0}, {0x8dc0, 0xff, 0, 0}, {0x8dc1, 0xfe, 0, 0}, + {0x8dc2, 0xe5, 0, 0}, {0x8dc3, 0x35, 0, 0}, {0x8dc4, 0xfd, 0, 0}, + {0x8dc5, 0xe4, 0, 0}, {0x8dc6, 0xfc, 0, 0}, {0x8dc7, 0x78, 0, 0}, + {0x8dc8, 0x0e, 0, 0}, {0x8dc9, 0x12, 0, 0}, {0x8dca, 0x06, 0, 0}, + {0x8dcb, 0x56, 0, 0}, {0x8dcc, 0x12, 0, 0}, {0x8dcd, 0x0f, 0, 0}, + {0x8dce, 0x9d, 0, 0}, {0x8dcf, 0xe4, 0, 0}, {0x8dd0, 0xff, 0, 0}, + {0x8dd1, 0xfe, 0, 0}, {0x8dd2, 0xfd, 0, 0}, {0x8dd3, 0xe5, 0, 0}, + {0x8dd4, 0x34, 0, 0}, {0x8dd5, 0xfc, 0, 0}, {0x8dd6, 0x78, 0, 0}, + {0x8dd7, 0x18, 0, 0}, {0x8dd8, 0x12, 0, 0}, {0x8dd9, 0x06, 0, 0}, + {0x8dda, 0x56, 0, 0}, {0x8ddb, 0x78, 0, 0}, {0x8ddc, 0x08, 0, 0}, + {0x8ddd, 0x12, 0, 0}, {0x8dde, 0x0f, 0, 0}, {0x8ddf, 0x9a, 0, 0}, + {0x8de0, 0x22, 0, 0}, {0x8de1, 0x8f, 0, 0}, {0x8de2, 0x3b, 0, 0}, + {0x8de3, 0x8e, 0, 0}, {0x8de4, 0x3a, 0, 0}, {0x8de5, 0x8d, 0, 0}, + {0x8de6, 0x39, 0, 0}, {0x8de7, 0x8c, 0, 0}, {0x8de8, 0x38, 0, 0}, + {0x8de9, 0x22, 0, 0}, {0x8dea, 0x12, 0, 0}, {0x8deb, 0x06, 0, 0}, + {0x8dec, 0x7c, 0, 0}, {0x8ded, 0x8f, 0, 0}, {0x8dee, 0x31, 0, 0}, + {0x8def, 0x8e, 0, 0}, {0x8df0, 0x30, 0, 0}, {0x8df1, 0x8d, 0, 0}, + {0x8df2, 0x2f, 0, 0}, {0x8df3, 0x8c, 0, 0}, {0x8df4, 0x2e, 0, 0}, + {0x8df5, 0x22, 0, 0}, {0x8df6, 0x93, 0, 0}, {0x8df7, 0xf9, 0, 0}, + {0x8df8, 0xf8, 0, 0}, {0x8df9, 0x02, 0, 0}, {0x8dfa, 0x06, 0, 0}, + {0x8dfb, 0x69, 0, 0}, {0x8dfc, 0x00, 0, 0}, {0x8dfd, 0x00, 0, 0}, + {0x8dfe, 0x00, 0, 0}, {0x8dff, 0x00, 0, 0}, {0x8e00, 0x12, 0, 0}, + {0x8e01, 0x01, 0, 0}, {0x8e02, 0x17, 0, 0}, {0x8e03, 0x08, 0, 0}, + {0x8e04, 0x31, 0, 0}, {0x8e05, 0x15, 0, 0}, {0x8e06, 0x53, 0, 0}, + {0x8e07, 0x54, 0, 0}, {0x8e08, 0x44, 0, 0}, {0x8e09, 0x20, 0, 0}, + {0x8e0a, 0x20, 0, 0}, {0x8e0b, 0x20, 0, 0}, {0x8e0c, 0x20, 0, 0}, + {0x8e0d, 0x20, 0, 0}, {0x8e0e, 0x13, 0, 0}, {0x8e0f, 0x01, 0, 0}, + {0x8e10, 0x10, 0, 0}, {0x8e11, 0x01, 0, 0}, {0x8e12, 0x56, 0, 0}, + {0x8e13, 0x40, 0, 0}, {0x8e14, 0x1a, 0, 0}, {0x8e15, 0x30, 0, 0}, + {0x8e16, 0x29, 0, 0}, {0x8e17, 0x7e, 0, 0}, {0x8e18, 0x00, 0, 0}, + {0x8e19, 0x30, 0, 0}, {0x8e1a, 0x04, 0, 0}, {0x8e1b, 0x20, 0, 0}, + {0x8e1c, 0xdf, 0, 0}, {0x8e1d, 0x30, 0, 0}, {0x8e1e, 0x05, 0, 0}, + {0x8e1f, 0x40, 0, 0}, {0x8e20, 0xbf, 0, 0}, {0x8e21, 0x50, 0, 0}, + {0x8e22, 0x03, 0, 0}, {0x8e23, 0x00, 0, 0}, {0x8e24, 0xfd, 0, 0}, + {0x8e25, 0x50, 0, 0}, {0x8e26, 0x27, 0, 0}, {0x8e27, 0x01, 0, 0}, + {0x8e28, 0xfe, 0, 0}, {0x8e29, 0x60, 0, 0}, {0x8e2a, 0x00, 0, 0}, + {0x8e2b, 0x11, 0, 0}, {0x8e2c, 0x00, 0, 0}, {0x8e2d, 0x3f, 0, 0}, + {0x8e2e, 0x05, 0, 0}, {0x8e2f, 0x30, 0, 0}, {0x8e30, 0x00, 0, 0}, + {0x8e31, 0x3f, 0, 0}, {0x8e32, 0x06, 0, 0}, {0x8e33, 0x22, 0, 0}, + {0x8e34, 0x00, 0, 0}, {0x8e35, 0x3f, 0, 0}, {0x8e36, 0x01, 0, 0}, + {0x8e37, 0x2a, 0, 0}, {0x8e38, 0x00, 0, 0}, {0x8e39, 0x3f, 0, 0}, + {0x8e3a, 0x02, 0, 0}, {0x8e3b, 0x00, 0, 0}, {0x8e3c, 0x00, 0, 0}, + {0x8e3d, 0x36, 0, 0}, {0x8e3e, 0x06, 0, 0}, {0x8e3f, 0x07, 0, 0}, + {0x8e40, 0x00, 0, 0}, {0x8e41, 0x3f, 0, 0}, {0x8e42, 0x0b, 0, 0}, + {0x8e43, 0x0f, 0, 0}, {0x8e44, 0xf0, 0, 0}, {0x8e45, 0x00, 0, 0}, + {0x8e46, 0x00, 0, 0}, {0x8e47, 0x00, 0, 0}, {0x8e48, 0x00, 0, 0}, + {0x8e49, 0x30, 0, 0}, {0x8e4a, 0x01, 0, 0}, {0x8e4b, 0x40, 0, 0}, + {0x8e4c, 0xbf, 0, 0}, {0x8e4d, 0x30, 0, 0}, {0x8e4e, 0x01, 0, 0}, + {0x8e4f, 0x00, 0, 0}, {0x8e50, 0xbf, 0, 0}, {0x8e51, 0x30, 0, 0}, + {0x8e52, 0x29, 0, 0}, {0x8e53, 0x70, 0, 0}, {0x8e54, 0x00, 0, 0}, + {0x8e55, 0x3a, 0, 0}, {0x8e56, 0x00, 0, 0}, {0x8e57, 0x00, 0, 0}, + {0x8e58, 0xff, 0, 0}, {0x8e59, 0x3a, 0, 0}, {0x8e5a, 0x00, 0, 0}, + {0x8e5b, 0x00, 0, 0}, {0x8e5c, 0xff, 0, 0}, {0x8e5d, 0x36, 0, 0}, + {0x8e5e, 0x03, 0, 0}, {0x8e5f, 0x36, 0, 0}, {0x8e60, 0x02, 0, 0}, + {0x8e61, 0x41, 0, 0}, {0x8e62, 0x44, 0, 0}, {0x8e63, 0x58, 0, 0}, + {0x8e64, 0x20, 0, 0}, {0x8e65, 0x18, 0, 0}, {0x8e66, 0x10, 0, 0}, + {0x8e67, 0x0a, 0, 0}, {0x8e68, 0x04, 0, 0}, {0x8e69, 0x04, 0, 0}, + {0x8e6a, 0x00, 0, 0}, {0x8e6b, 0x03, 0, 0}, {0x8e6c, 0xff, 0, 0}, + {0x8e6d, 0x64, 0, 0}, {0x8e6e, 0x00, 0, 0}, {0x8e6f, 0x00, 0, 0}, + {0x8e70, 0x80, 0, 0}, {0x8e71, 0x00, 0, 0}, {0x8e72, 0x00, 0, 0}, + {0x8e73, 0x00, 0, 0}, {0x8e74, 0x00, 0, 0}, {0x8e75, 0x00, 0, 0}, + {0x8e76, 0x00, 0, 0}, {0x8e77, 0x02, 0, 0}, {0x8e78, 0x04, 0, 0}, + {0x8e79, 0x06, 0, 0}, {0x8e7a, 0x06, 0, 0}, {0x8e7b, 0x00, 0, 0}, + {0x8e7c, 0x02, 0, 0}, {0x8e7d, 0x60, 0, 0}, {0x8e7e, 0x00, 0, 0}, + {0x8e7f, 0x70, 0, 0}, {0x8e80, 0x50, 0, 0}, {0x8e81, 0x3c, 0, 0}, + {0x8e82, 0x28, 0, 0}, {0x8e83, 0x1e, 0, 0}, {0x8e84, 0x10, 0, 0}, + {0x8e85, 0x10, 0, 0}, {0x8e86, 0x50, 0, 0}, {0x8e87, 0x2d, 0, 0}, + {0x8e88, 0x28, 0, 0}, {0x8e89, 0x16, 0, 0}, {0x8e8a, 0x10, 0, 0}, + {0x8e8b, 0x10, 0, 0}, {0x8e8c, 0x02, 0, 0}, {0x8e8d, 0x00, 0, 0}, + {0x8e8e, 0x10, 0, 0}, {0x8e8f, 0x30, 0, 0}, {0x8e90, 0x0a, 0, 0}, + {0x8e91, 0x04, 0, 0}, {0x8e92, 0x05, 0, 0}, {0x8e93, 0x08, 0, 0}, + {0x8e94, 0x06, 0, 0}, {0x8e95, 0x05, 0, 0}, {0x8e96, 0x00, 0, 0}, + {0x8e97, 0xa5, 0, 0}, {0x8e98, 0x5a, 0, 0}, {0x8e99, 0x00, 0, 0}, + {0x8e9a, 0xae, 0, 0}, {0x8e9b, 0x35, 0, 0}, {0x8e9c, 0xaf, 0, 0}, + {0x8e9d, 0x36, 0, 0}, {0x8e9e, 0xe4, 0, 0}, {0x8e9f, 0xfd, 0, 0}, + {0x8ea0, 0xed, 0, 0}, {0x8ea1, 0xc3, 0, 0}, {0x8ea2, 0x95, 0, 0}, + {0x8ea3, 0x37, 0, 0}, {0x8ea4, 0x50, 0, 0}, {0x8ea5, 0x33, 0, 0}, + {0x8ea6, 0x12, 0, 0}, {0x8ea7, 0x0f, 0, 0}, {0x8ea8, 0xe2, 0, 0}, + {0x8ea9, 0xe4, 0, 0}, {0x8eaa, 0x93, 0, 0}, {0x8eab, 0xf5, 0, 0}, + {0x8eac, 0x38, 0, 0}, {0x8ead, 0x74, 0, 0}, {0x8eae, 0x01, 0, 0}, + {0x8eaf, 0x93, 0, 0}, {0x8eb0, 0xf5, 0, 0}, {0x8eb1, 0x39, 0, 0}, + {0x8eb2, 0x45, 0, 0}, {0x8eb3, 0x38, 0, 0}, {0x8eb4, 0x60, 0, 0}, + {0x8eb5, 0x23, 0, 0}, {0x8eb6, 0x85, 0, 0}, {0x8eb7, 0x39, 0, 0}, + {0x8eb8, 0x82, 0, 0}, {0x8eb9, 0x85, 0, 0}, {0x8eba, 0x38, 0, 0}, + {0x8ebb, 0x83, 0, 0}, {0x8ebc, 0xe0, 0, 0}, {0x8ebd, 0xfc, 0, 0}, + {0x8ebe, 0x12, 0, 0}, {0x8ebf, 0x0f, 0, 0}, {0x8ec0, 0xe2, 0, 0}, + {0x8ec1, 0x74, 0, 0}, {0x8ec2, 0x03, 0, 0}, {0x8ec3, 0x93, 0, 0}, + {0x8ec4, 0x52, 0, 0}, {0x8ec5, 0x04, 0, 0}, {0x8ec6, 0x12, 0, 0}, + {0x8ec7, 0x0f, 0, 0}, {0x8ec8, 0xe2, 0, 0}, {0x8ec9, 0x74, 0, 0}, + {0x8eca, 0x02, 0, 0}, {0x8ecb, 0x93, 0, 0}, {0x8ecc, 0x42, 0, 0}, + {0x8ecd, 0x04, 0, 0}, {0x8ece, 0x85, 0, 0}, {0x8ecf, 0x39, 0, 0}, + {0x8ed0, 0x82, 0, 0}, {0x8ed1, 0x85, 0, 0}, {0x8ed2, 0x38, 0, 0}, + {0x8ed3, 0x83, 0, 0}, {0x8ed4, 0xec, 0, 0}, {0x8ed5, 0xf0, 0, 0}, + {0x8ed6, 0x0d, 0, 0}, {0x8ed7, 0x80, 0, 0}, {0x8ed8, 0xc7, 0, 0}, + {0x8ed9, 0x22, 0, 0}, {0x8eda, 0x78, 0, 0}, {0x8edb, 0xbe, 0, 0}, + {0x8edc, 0xe6, 0, 0}, {0x8edd, 0xd3, 0, 0}, {0x8ede, 0x08, 0, 0}, + {0x8edf, 0xff, 0, 0}, {0x8ee0, 0xe6, 0, 0}, {0x8ee1, 0x64, 0, 0}, + {0x8ee2, 0x80, 0, 0}, {0x8ee3, 0xf8, 0, 0}, {0x8ee4, 0xef, 0, 0}, + {0x8ee5, 0x64, 0, 0}, {0x8ee6, 0x80, 0, 0}, {0x8ee7, 0x98, 0, 0}, + {0x8ee8, 0x22, 0, 0}, {0x8ee9, 0x93, 0, 0}, {0x8eea, 0xff, 0, 0}, + {0x8eeb, 0x7e, 0, 0}, {0x8eec, 0x00, 0, 0}, {0x8eed, 0xe6, 0, 0}, + {0x8eee, 0xfc, 0, 0}, {0x8eef, 0x08, 0, 0}, {0x8ef0, 0xe6, 0, 0}, + {0x8ef1, 0xfd, 0, 0}, {0x8ef2, 0x12, 0, 0}, {0x8ef3, 0x04, 0, 0}, + {0x8ef4, 0xc1, 0, 0}, {0x8ef5, 0x78, 0, 0}, {0x8ef6, 0xc1, 0, 0}, + {0x8ef7, 0xe6, 0, 0}, {0x8ef8, 0xfc, 0, 0}, {0x8ef9, 0x08, 0, 0}, + {0x8efa, 0xe6, 0, 0}, {0x8efb, 0xfd, 0, 0}, {0x8efc, 0xd3, 0, 0}, + {0x8efd, 0xef, 0, 0}, {0x8efe, 0x9d, 0, 0}, {0x8eff, 0xee, 0, 0}, + {0x8f00, 0x9c, 0, 0}, {0x8f01, 0x22, 0, 0}, {0x8f02, 0x78, 0, 0}, + {0x8f03, 0xbd, 0, 0}, {0x8f04, 0xd3, 0, 0}, {0x8f05, 0xe6, 0, 0}, + {0x8f06, 0x64, 0, 0}, {0x8f07, 0x80, 0, 0}, {0x8f08, 0x94, 0, 0}, + {0x8f09, 0x80, 0, 0}, {0x8f0a, 0x22, 0, 0}, {0x8f0b, 0x25, 0, 0}, + {0x8f0c, 0xe0, 0, 0}, {0x8f0d, 0x24, 0, 0}, {0x8f0e, 0x0a, 0, 0}, + {0x8f0f, 0xf8, 0, 0}, {0x8f10, 0xe6, 0, 0}, {0x8f11, 0xfe, 0, 0}, + {0x8f12, 0x08, 0, 0}, {0x8f13, 0xe6, 0, 0}, {0x8f14, 0xff, 0, 0}, + {0x8f15, 0x22, 0, 0}, {0x8f16, 0xe5, 0, 0}, {0x8f17, 0x3c, 0, 0}, + {0x8f18, 0xd3, 0, 0}, {0x8f19, 0x94, 0, 0}, {0x8f1a, 0x00, 0, 0}, + {0x8f1b, 0x40, 0, 0}, {0x8f1c, 0x0b, 0, 0}, {0x8f1d, 0x90, 0, 0}, + {0x8f1e, 0x0e, 0, 0}, {0x8f1f, 0x88, 0, 0}, {0x8f20, 0x12, 0, 0}, + {0x8f21, 0x0b, 0, 0}, {0x8f22, 0xf1, 0, 0}, {0x8f23, 0x90, 0, 0}, + {0x8f24, 0x0e, 0, 0}, {0x8f25, 0x86, 0, 0}, {0x8f26, 0x80, 0, 0}, + {0x8f27, 0x09, 0, 0}, {0x8f28, 0x90, 0, 0}, {0x8f29, 0x0e, 0, 0}, + {0x8f2a, 0x82, 0, 0}, {0x8f2b, 0x12, 0, 0}, {0x8f2c, 0x0b, 0, 0}, + {0x8f2d, 0xf1, 0, 0}, {0x8f2e, 0x90, 0, 0}, {0x8f2f, 0x0e, 0, 0}, + {0x8f30, 0x80, 0, 0}, {0x8f31, 0xe4, 0, 0}, {0x8f32, 0x93, 0, 0}, + {0x8f33, 0xf5, 0, 0}, {0x8f34, 0x44, 0, 0}, {0x8f35, 0xa3, 0, 0}, + {0x8f36, 0xe4, 0, 0}, {0x8f37, 0x93, 0, 0}, {0x8f38, 0xf5, 0, 0}, + {0x8f39, 0x43, 0, 0}, {0x8f3a, 0xd2, 0, 0}, {0x8f3b, 0x06, 0, 0}, + {0x8f3c, 0x30, 0, 0}, {0x8f3d, 0x06, 0, 0}, {0x8f3e, 0x03, 0, 0}, + {0x8f3f, 0xd3, 0, 0}, {0x8f40, 0x80, 0, 0}, {0x8f41, 0x01, 0, 0}, + {0x8f42, 0xc3, 0, 0}, {0x8f43, 0x92, 0, 0}, {0x8f44, 0x0e, 0, 0}, + {0x8f45, 0x22, 0, 0}, {0x8f46, 0xa2, 0, 0}, {0x8f47, 0xaf, 0, 0}, + {0x8f48, 0x92, 0, 0}, {0x8f49, 0x32, 0, 0}, {0x8f4a, 0xc2, 0, 0}, + {0x8f4b, 0xaf, 0, 0}, {0x8f4c, 0xe5, 0, 0}, {0x8f4d, 0x23, 0, 0}, + {0x8f4e, 0x45, 0, 0}, {0x8f4f, 0x22, 0, 0}, {0x8f50, 0x90, 0, 0}, + {0x8f51, 0x0e, 0, 0}, {0x8f52, 0x5d, 0, 0}, {0x8f53, 0x60, 0, 0}, + {0x8f54, 0x0e, 0, 0}, {0x8f55, 0x12, 0, 0}, {0x8f56, 0x0f, 0, 0}, + {0x8f57, 0xcb, 0, 0}, {0x8f58, 0xe0, 0, 0}, {0x8f59, 0xf5, 0, 0}, + {0x8f5a, 0x2c, 0, 0}, {0x8f5b, 0x12, 0, 0}, {0x8f5c, 0x0f, 0, 0}, + {0x8f5d, 0xc8, 0, 0}, {0x8f5e, 0xe0, 0, 0}, {0x8f5f, 0xf5, 0, 0}, + {0x8f60, 0x2d, 0, 0}, {0x8f61, 0x80, 0, 0}, {0x8f62, 0x0c, 0, 0}, + {0x8f63, 0x12, 0, 0}, {0x8f64, 0x0f, 0, 0}, {0x8f65, 0xcb, 0, 0}, + {0x8f66, 0xe5, 0, 0}, {0x8f67, 0x30, 0, 0}, {0x8f68, 0xf0, 0, 0}, + {0x8f69, 0x12, 0, 0}, {0x8f6a, 0x0f, 0, 0}, {0x8f6b, 0xc8, 0, 0}, + {0x8f6c, 0xe5, 0, 0}, {0x8f6d, 0x31, 0, 0}, {0x8f6e, 0xf0, 0, 0}, + {0x8f6f, 0xa2, 0, 0}, {0x8f70, 0x32, 0, 0}, {0x8f71, 0x92, 0, 0}, + {0x8f72, 0xaf, 0, 0}, {0x8f73, 0x22, 0, 0}, {0x8f74, 0xd2, 0, 0}, + {0x8f75, 0x01, 0, 0}, {0x8f76, 0xc2, 0, 0}, {0x8f77, 0x02, 0, 0}, + {0x8f78, 0xe4, 0, 0}, {0x8f79, 0xf5, 0, 0}, {0x8f7a, 0x1f, 0, 0}, + {0x8f7b, 0xf5, 0, 0}, {0x8f7c, 0x1e, 0, 0}, {0x8f7d, 0xd2, 0, 0}, + {0x8f7e, 0x35, 0, 0}, {0x8f7f, 0xd2, 0, 0}, {0x8f80, 0x33, 0, 0}, + {0x8f81, 0xd2, 0, 0}, {0x8f82, 0x36, 0, 0}, {0x8f83, 0xd2, 0, 0}, + {0x8f84, 0x01, 0, 0}, {0x8f85, 0xc2, 0, 0}, {0x8f86, 0x02, 0, 0}, + {0x8f87, 0xf5, 0, 0}, {0x8f88, 0x1f, 0, 0}, {0x8f89, 0xf5, 0, 0}, + {0x8f8a, 0x1e, 0, 0}, {0x8f8b, 0xd2, 0, 0}, {0x8f8c, 0x35, 0, 0}, + {0x8f8d, 0xd2, 0, 0}, {0x8f8e, 0x33, 0, 0}, {0x8f8f, 0x22, 0, 0}, + {0x8f90, 0xfb, 0, 0}, {0x8f91, 0xd3, 0, 0}, {0x8f92, 0xed, 0, 0}, + {0x8f93, 0x9b, 0, 0}, {0x8f94, 0x74, 0, 0}, {0x8f95, 0x80, 0, 0}, + {0x8f96, 0xf8, 0, 0}, {0x8f97, 0x6c, 0, 0}, {0x8f98, 0x98, 0, 0}, + {0x8f99, 0x22, 0, 0}, {0x8f9a, 0x12, 0, 0}, {0x8f9b, 0x06, 0, 0}, + {0x8f9c, 0x69, 0, 0}, {0x8f9d, 0xe5, 0, 0}, {0x8f9e, 0x40, 0, 0}, + {0x8f9f, 0x2f, 0, 0}, {0x8fa0, 0xf5, 0, 0}, {0x8fa1, 0x40, 0, 0}, + {0x8fa2, 0xe5, 0, 0}, {0x8fa3, 0x3f, 0, 0}, {0x8fa4, 0x3e, 0, 0}, + {0x8fa5, 0xf5, 0, 0}, {0x8fa6, 0x3f, 0, 0}, {0x8fa7, 0xe5, 0, 0}, + {0x8fa8, 0x3e, 0, 0}, {0x8fa9, 0x3d, 0, 0}, {0x8faa, 0xf5, 0, 0}, + {0x8fab, 0x3e, 0, 0}, {0x8fac, 0xe5, 0, 0}, {0x8fad, 0x3d, 0, 0}, + {0x8fae, 0x3c, 0, 0}, {0x8faf, 0xf5, 0, 0}, {0x8fb0, 0x3d, 0, 0}, + {0x8fb1, 0x22, 0, 0}, {0x8fb2, 0xc0, 0, 0}, {0x8fb3, 0xe0, 0, 0}, + {0x8fb4, 0xc0, 0, 0}, {0x8fb5, 0x83, 0, 0}, {0x8fb6, 0xc0, 0, 0}, + {0x8fb7, 0x82, 0, 0}, {0x8fb8, 0x90, 0, 0}, {0x8fb9, 0x3f, 0, 0}, + {0x8fba, 0x0d, 0, 0}, {0x8fbb, 0xe0, 0, 0}, {0x8fbc, 0xf5, 0, 0}, + {0x8fbd, 0x33, 0, 0}, {0x8fbe, 0xe5, 0, 0}, {0x8fbf, 0x33, 0, 0}, + {0x8fc0, 0xf0, 0, 0}, {0x8fc1, 0xd0, 0, 0}, {0x8fc2, 0x82, 0, 0}, + {0x8fc3, 0xd0, 0, 0}, {0x8fc4, 0x83, 0, 0}, {0x8fc5, 0xd0, 0, 0}, + {0x8fc6, 0xe0, 0, 0}, {0x8fc7, 0x32, 0, 0}, {0x8fc8, 0x90, 0, 0}, + {0x8fc9, 0x0e, 0, 0}, {0x8fca, 0x5f, 0, 0}, {0x8fcb, 0xe4, 0, 0}, + {0x8fcc, 0x93, 0, 0}, {0x8fcd, 0xfe, 0, 0}, {0x8fce, 0x74, 0, 0}, + {0x8fcf, 0x01, 0, 0}, {0x8fd0, 0x93, 0, 0}, {0x8fd1, 0xf5, 0, 0}, + {0x8fd2, 0x82, 0, 0}, {0x8fd3, 0x8e, 0, 0}, {0x8fd4, 0x83, 0, 0}, + {0x8fd5, 0x22, 0, 0}, {0x8fd6, 0x78, 0, 0}, {0x8fd7, 0x7f, 0, 0}, + {0x8fd8, 0xe4, 0, 0}, {0x8fd9, 0xf6, 0, 0}, {0x8fda, 0xd8, 0, 0}, + {0x8fdb, 0xfd, 0, 0}, {0x8fdc, 0x75, 0, 0}, {0x8fdd, 0x81, 0, 0}, + {0x8fde, 0xcd, 0, 0}, {0x8fdf, 0x02, 0, 0}, {0x8fe0, 0x0c, 0, 0}, + {0x8fe1, 0x98, 0, 0}, {0x8fe2, 0x8f, 0, 0}, {0x8fe3, 0x82, 0, 0}, + {0x8fe4, 0x8e, 0, 0}, {0x8fe5, 0x83, 0, 0}, {0x8fe6, 0x75, 0, 0}, + {0x8fe7, 0xf0, 0, 0}, {0x8fe8, 0x04, 0, 0}, {0x8fe9, 0xed, 0, 0}, + {0x8fea, 0x02, 0, 0}, {0x8feb, 0x06, 0, 0}, {0x8fec, 0xa5, 0, 0} +}; diff --git a/drivers/media/platform/mxc/capture/ov5640_mipi.c b/drivers/media/platform/mxc/capture/ov5640_mipi.c index 4b19076..39125c0 100644 --- a/drivers/media/platform/mxc/capture/ov5640_mipi.c +++ b/drivers/media/platform/mxc/capture/ov5640_mipi.c @@ -105,6 +105,10 @@ struct ov5640_mode_info { static struct sensor_data ov5640_data; static int pwn_gpio, rst_gpio; +/* Mutex is needed since register access can happen both from ioctls + * and from workqueue */ +static DEFINE_MUTEX(ov5640_mutex); + static struct reg_value ov5640_init_setting_30fps_VGA[] = { {0x3103, 0x11, 0, 0}, {0x3008, 0x82, 0, 5}, {0x3008, 0x42, 0, 0}, @@ -1309,6 +1313,579 @@ err: return retval; } + +/* AF firmware BLOB */ + +/* FIXME: "no firmware" should become a state, and firmware loading should + * be moved to workqueue. This is the only sane way to handle reloading + * firmware and then restore state after resume. + * Current code just breaks after suspend (because after chip powercycle + * firmware will be no longer running). + * + * FIXME: implement firmware timeout: if command is not ack'ed in time, reset + * microcontroller and/or reload firmware + */ + +#include "ov5640_af_firmware.c" + +/* AF-related registers */ + +#define REG_SYSTEM_RESET00 0x3000 +#define REG_AF_CMD_MAIN 0x3022 +#define REG_AF_CMD_ACK 0x3023 +#define REG_AF_PARAM0 0x3024 +#define REG_AF_PARAM1 0x3025 +#define REG_AF_PARAM2 0x3026 +#define REG_AF_PARAM3 0x3027 +#define REG_AF_RESULT 0x3028 +#define REG_AF_FW_STATUS 0x3029 + +#define REG_SYSTEM_RESET00_RESET_MC BIT(5) + +/* Firmware load timeout (ms) */ +#define AF_FW_INIT_TIMEOUT 1000 + +/* Formware status values */ +#define AF_FW_STATUS_NOT_RUNNING 0x7f +#define AF_FW_STATUS_INITIALIZING 0x7e +#define AF_FW_STATUS_IDLE 0x70 + +/* REG_AF_CMD_MAIN command codes */ +#define AF_CMD_SINGLE 0x03 +#define AF_CMD_CONTINUOUS 0x04 +#define AF_CMD_PAUSE 0x06 +#define AF_CMD_RELEASE 0x08 + +/* REG_AF_CMD_ACK values */ +#define AF_ACK_SET 0x01 +#define AF_ACK_DONE 0x00 + +/* REG_AF_RESULT values */ +#define AF_RESULT_FAILED 0x00 + +/* AF states visible to driver */ + +enum { + AF_STATE_RELEASED, /* focus is released to infinity */ + AF_STATE_FOCUSED, /* single AF done, lens stay */ + AF_STATE_CONTINUOUS, /* continuous AF running */ + AF_STATE_PAUSED, /* continuous AF paused */ + + AF_STATE_FOCUSING, /* single AF started but not completed */ + AF_STATE_STARTING, /* starting continuous AF */ + AF_STATE_PAUSING, /* pausing continuous AF */ + AF_STATE_RELEASING, /* releasing focus */ + + AF_STATE_PENDING_REFOCUS, /* was focused but new focus pending */ + AF_STATE_PENDING_RELEASE, /* could not send release command */ +}; + + +static bool af_fw_ok; /* is firmware operational? */ +static int af_state; /* current firmware state */ +static int af_target_state; /* state needed to reach to complete + request */ +static bool af_error; /* last focusing failed? */ +static DECLARE_WAIT_QUEUE_HEAD(af_state_wait); + +static void af_work_func(struct work_struct *work); +static DECLARE_DELAYED_WORK(af_work, af_work_func); + +static inline void af_schedule_work(void) +{ + mod_delayed_work(system_wq, &af_work, 0); +} +static inline void af_reschedule_work(void) +{ + mod_delayed_work(system_wq, &af_work, 1); +} + +static bool focus_auto = false; +static int focus_range = V4L2_AUTO_FOCUS_RANGE_NORMAL; +static bool focus_locked = false; + +static int af_init(void) +{ + u8 reg; + unsigned long timeout; + int ret = -EIO; + + static struct reg_value init_af_firmware[] = { + {REG_AF_CMD_MAIN, 0x00, 0, 0}, + {REG_AF_CMD_ACK, 0x00, 0, 0}, + {REG_AF_PARAM0, 0x00, 0, 0}, + {REG_AF_PARAM1, 0x00, 0, 0}, + {REG_AF_PARAM2, 0x00, 0, 0}, + {REG_AF_PARAM3, 0x00, 0, 0}, + {REG_AF_RESULT, 0x00, 0, 0}, + {REG_AF_FW_STATUS, AF_FW_STATUS_NOT_RUNNING, 0, 0}, + }; + + mutex_lock(&ov5640_mutex); + + af_fw_ok = false; + + /* Move microcontroller to reset */ + + ret = ov5640_read_reg(REG_SYSTEM_RESET00, ®); + if (ret < 0) { + pr_err("%s: microcontroller status read failed\n", __func__); + goto out; + } + + reg |= REG_SYSTEM_RESET00_RESET_MC; + ret = ov5640_write_reg(REG_SYSTEM_RESET00, reg); + if (ret < 0) { + pr_err("%s: microcontroller reset failed\n", __func__); + goto out; + } + + /* Download firmware */ + /* FIXME: better to download firmware using group writes */ + + ret = ov5640_download_firmware(ov5640_af_firmware, + ARRAY_SIZE(ov5640_af_firmware)); + if (ret < 0) { + pr_err("%s: AF firmware download failed\n", __func__); + goto out; + } + + /* Set firmware's interface registers to initial values */ + + ret = ov5640_download_firmware(init_af_firmware, + ARRAY_SIZE(init_af_firmware)); + if (ret < 0) { + pr_err("%s: AF firmware init failed\n", __func__); + goto out; + } + + /* Start microcontroller */ + + reg &= ~REG_SYSTEM_RESET00_RESET_MC; + ret = ov5640_write_reg(REG_SYSTEM_RESET00, reg); + if (ret < 0) { + pr_err("%s: microcontroller start failed\n", __func__); + goto out; + } + + /* Wait for firmware to become ready */ + + timeout = jiffies + msecs_to_jiffies(AF_FW_INIT_TIMEOUT); + do { + msleep(1); + ret = ov5640_read_reg(REG_AF_FW_STATUS, ®); + if (ret < 0) { + pr_err("%s: firmware status read failed\n", __func__); + goto out; + } + } while (reg != AF_FW_STATUS_IDLE && time_before(jiffies, timeout)); + + if (reg != AF_FW_STATUS_IDLE) { + pr_err("%s: firmware is not respoinding\n", __func__); + goto out; + } + + pr_debug("ov5640_mipi: initialized AF successufully\n"); + + af_fw_ok = true; + af_state = af_target_state = AF_STATE_RELEASED; + af_error = false; + focus_auto = false; + focus_range = V4L2_AUTO_FOCUS_RANGE_NORMAL; + focus_locked = false; + + ret = 0; +out: + mutex_unlock(&ov5640_mutex); + return ret; +} + +static void af_deinit(void) +{ + if (!af_fw_ok) + return; + + mutex_lock(&ov5640_mutex); + af_target_state = AF_STATE_RELEASED; + af_schedule_work(); + mutex_unlock(&ov5640_mutex); + + wait_event_interruptible_timeout(af_state_wait, + af_state == AF_STATE_RELEASED, HZ); + + if (unlikely(af_state != AF_STATE_RELEASED)) + cancel_delayed_work_sync(&af_work); + + af_fw_ok = false; +} + +static void af_set_state(int state) +{ + af_state = state; + + if (state == AF_STATE_FOCUSED || state == AF_STATE_PAUSED || + state == AF_STATE_RELEASED) + wake_up_interruptible_all(&af_state_wait); +} + +static int af_state_while_running_command(u8 command) +{ + switch (command) { + case AF_CMD_SINGLE: + return AF_STATE_FOCUSING; + case AF_CMD_CONTINUOUS: + return AF_STATE_STARTING; + case AF_CMD_PAUSE: + return AF_STATE_PAUSING; + case AF_CMD_RELEASE: + return AF_STATE_RELEASING; + default: + BUG(); + return AF_STATE_RELEASED; /* unreached */ + } +} + +static int af_next_state(int state) +{ + switch (state) { + case AF_STATE_STARTING: + return AF_STATE_CONTINUOUS; + case AF_STATE_PAUSING: + return AF_STATE_PAUSED; + case AF_STATE_RELEASING: + return AF_STATE_RELEASED; + default: + BUG(); + return AF_STATE_RELEASED; /* unreached */ + } +} + +static int af_send_command(u8 command) +{ + if (ov5640_write_reg(REG_AF_CMD_ACK, AF_ACK_SET) < 0) + return -EIO;; + + if (ov5640_write_reg(REG_AF_CMD_MAIN, command) < 0) + return -EIO; + + af_state = af_state_while_running_command(command); + return 0; +} + +static void af_work_func(struct work_struct *work) +{ + u8 reg; + + mutex_lock(&ov5640_mutex); + + /* If in intermediate state, firmware won't accept a new command + * anyway. Thus check hardware's progress and update state if + * needed, otherwise just wait */ + + if (af_state == AF_STATE_FOCUSING || af_state == AF_STATE_STARTING || + af_state == AF_STATE_PAUSING || af_state == AF_STATE_RELEASING) { + + if (ov5640_read_reg(REG_AF_CMD_ACK, ®) < 0) + goto out; /* check later */ + + if (reg != AF_ACK_DONE) + goto out; /* no state update yet */ + + if (af_state == AF_STATE_FOCUSING) { + + /* single AF done - check status */ + + if (ov5640_read_reg(REG_AF_RESULT, ®) < 0) + goto out; /* try later */ + + if (reg == AF_RESULT_FAILED) { + if (af_target_state == AF_STATE_FOCUSED) { + af_error = true; + af_target_state = AF_STATE_RELEASED; + } + if (af_send_command(AF_CMD_RELEASE) < 0) + af_set_state(AF_STATE_PENDING_RELEASE); + goto out; + } + + af_set_state(AF_STATE_FOCUSED); + + } else /* other intermediate state */ + af_set_state(af_next_state(af_state)); + } + + /* Stop if achieved target state */ + + if (likely(af_state == af_target_state)) + goto out_no_check; + + /* Failed attempts to release must be retried */ + + if (unlikely(af_state == AF_STATE_PENDING_RELEASE)) { + af_send_command(AF_CMD_RELEASE); + goto out; + } + + /* Do step to achieve target state */ + + switch (af_target_state) { + + case AF_STATE_FOCUSED: + + switch (af_state) { + case AF_STATE_RELEASED: + case AF_STATE_PENDING_REFOCUS: + case AF_STATE_PAUSED: + af_send_command(AF_CMD_SINGLE); + break; + case AF_STATE_CONTINUOUS: + af_send_command(AF_CMD_PAUSE); + break; + default: + BUG(); + } + break; + + case AF_STATE_CONTINUOUS: + + switch (af_state) { + case AF_STATE_RELEASED: + case AF_STATE_PENDING_REFOCUS: + case AF_STATE_FOCUSED: + case AF_STATE_PAUSED: + af_send_command(AF_CMD_CONTINUOUS); + break; + default: + BUG(); + } + break; + + case AF_STATE_PAUSED: + + switch (af_state) { + case AF_STATE_RELEASED: + af_send_command(AF_CMD_CONTINUOUS); /* enable VCM */ + break; + case AF_STATE_PENDING_REFOCUS: + case AF_STATE_FOCUSED: + af_set_state(AF_STATE_PAUSED); /* already there */ + break; + case AF_STATE_CONTINUOUS: + af_send_command(AF_CMD_PAUSE); + break; + default: + BUG(); + } + break; + + case AF_STATE_RELEASED: + + if (af_send_command(AF_CMD_RELEASE) < 0) + af_set_state(AF_STATE_PENDING_RELEASE); + break; + + default: + BUG(); + } + +out: + if (af_state != af_target_state) + af_reschedule_work(); +out_no_check: + mutex_unlock(&ov5640_mutex); +} + +/* Singe autofocus support: + * - supports V4L2_AUTO_FOCUS_RANGE_NORMAL and V4L2_AUTO_FOCUS_RANGE_INFINITY + * - in V4L2_AUTO_FOCUS_RANGE_NORMAL: + * - V4L2_CID_AUTO_FOCUS_START triggers single auto focus, + * - V4L2_CID_AUTO_FOCUS_STOP releases focus, + * - V4L2_CID_AUTO_FOCUS_STATUS returns focusing state, + * - in V4L2_AUTO_FOCUS_RANGE_INFINITY: + * - V4L2_CID_AUTO_FOCUS_START releases focus + * - V4L2_CID_AUTO_FOCUS_STOP also releases focus + * - V4L2_CID_AUTO_FOCUS_STATUS returns V4L2_AUTO_FOCUS_STATUS_REACHED for + * released focus and V4L2_AUTO_FOCUS_STATUS_BUSY for not yet released + * focus + */ +static void af_start_single(void) +{ + mutex_lock(&ov5640_mutex); + + /* Ignore request is AF firmware is not ok */ + if (!af_fw_ok) + goto out; + + /* Ignore request if V4L2_CID_FOCUS_AUTO is set to TRUE */ + if (focus_auto) + goto out; + + switch (focus_range) { + case V4L2_AUTO_FOCUS_RANGE_NORMAL: + af_target_state = AF_STATE_FOCUSED; + if (af_state == AF_STATE_FOCUSED) + af_state = AF_STATE_PENDING_REFOCUS; + break; + case V4L2_AUTO_FOCUS_RANGE_INFINITY: + af_target_state = AF_STATE_RELEASED; + break; + default: + BUG(); + } + af_error = false; + af_schedule_work(); + +out: + mutex_unlock(&ov5640_mutex); +} + +static void af_stop_single(void) +{ + mutex_lock(&ov5640_mutex); + + /* Ignore request is AF firmware is not ok */ + if (!af_fw_ok) + goto out; + + /* Ignore request if V4L2_CID_FOCUS_AUTO is set to TRUE */ + if (focus_auto) + goto out; + + af_target_state = AF_STATE_RELEASED; + af_error = false; + af_schedule_work(); + +out: + mutex_unlock(&ov5640_mutex); +} + +static int af_get_status(void) +{ + int ret; + + mutex_lock(&ov5640_mutex); + + if (!af_fw_ok || af_error) { + ret = V4L2_AUTO_FOCUS_STATUS_FAILED; + goto out; + } + + switch (focus_range) { + + case V4L2_AUTO_FOCUS_RANGE_NORMAL: + if (af_state == AF_STATE_FOCUSED) + ret = V4L2_AUTO_FOCUS_STATUS_REACHED; + else if (af_state == AF_STATE_RELEASED) + ret = V4L2_AUTO_FOCUS_STATUS_IDLE; + else + ret = V4L2_AUTO_FOCUS_STATUS_BUSY; + break; + + case V4L2_AUTO_FOCUS_RANGE_INFINITY: + if (af_state == AF_STATE_RELEASED) + ret = V4L2_AUTO_FOCUS_STATUS_REACHED; + else + ret = V4L2_AUTO_FOCUS_STATUS_BUSY; + break; + + default: + BUG(); + } + +out: + mutex_unlock(&ov5640_mutex); + + return ret; +} + +/* V4L2_CID_FOCUS_AUTO support: + * + * - mutually exclusive with V4L2_CID_AUTO_FOCUS_(START|STOP) + * - supports V4L2_AUTO_FOCUS_RANGE_NORMAL and V4L2_AUTO_FOCUS_RANGE_INFINITY + * - RANGE_NORMAL corresponds to STATE_CONTINUOUS + * RANGE_INFINITY corresponds to STATE_RELEASED + * - V4L2_CID_3A_LOCK(focus): + * - moves STATE_CONTINUOUS to STATE_PAUSED, + * - delays applying of RANGE change + */ +static void apply_focus_auto_update(void) +{ + int wanted_state; + + if (focus_auto) { + if (focus_locked) { + if (af_target_state == AF_STATE_CONTINUOUS) + wanted_state = AF_STATE_PAUSED; + else + wanted_state = af_target_state; + } else if (focus_range == V4L2_AUTO_FOCUS_RANGE_NORMAL) + wanted_state = AF_STATE_CONTINUOUS; + else + wanted_state = AF_STATE_RELEASED; + } else + wanted_state = AF_STATE_RELEASED; + + if (wanted_state != af_target_state) { + af_target_state = wanted_state; + af_schedule_work(); + } +} + +static void af_set_auto(bool enable) +{ + mutex_lock(&ov5640_mutex); + + if (af_fw_ok && (enable != focus_auto)) { + focus_auto = enable; + af_error = false; + focus_locked = false; + apply_focus_auto_update(); + } + + mutex_unlock(&ov5640_mutex); +} + +static void af_set_focus_range(int range) +{ + mutex_lock(&ov5640_mutex); + + if (af_fw_ok) { + if (range == V4L2_AUTO_FOCUS_RANGE_INFINITY) + focus_range = V4L2_AUTO_FOCUS_RANGE_INFINITY; + else + focus_range = V4L2_AUTO_FOCUS_RANGE_NORMAL; + + if (focus_auto) + apply_focus_auto_update(); + else if (focus_range == V4L2_AUTO_FOCUS_RANGE_INFINITY && + af_target_state != AF_STATE_RELEASED) { + af_target_state = AF_STATE_RELEASED; + af_schedule_work(); + } + } + + mutex_unlock(&ov5640_mutex); +} + +static int af_set_focus_lock(bool locked) +{ + mutex_lock(&ov5640_mutex); + + if (af_fw_ok && focus_auto && (locked != focus_locked)) { + focus_locked = locked; + apply_focus_auto_update(); + if (locked) { + /* wait for lock to apply */ + mutex_unlock(&ov5640_mutex); + return wait_event_interruptible(af_state_wait, + af_state == af_target_state); + } + } + + mutex_unlock(&ov5640_mutex); + return 0; +} + static int ov5640_init_mode(enum ov5640_frame_rate frame_rate, enum ov5640_mode mode, enum ov5640_mode orig_mode) { @@ -1605,8 +2182,10 @@ static int ioctl_s_parm(struct v4l2_int_device *s, struct v4l2_streamparm *a) } orig_mode = sensor->streamcap.capturemode; + mutex_lock(&ov5640_mutex); ret = ov5640_init_mode(frame_rate, (u32)a->parm.capture.capturemode, orig_mode); + mutex_unlock(&ov5640_mutex); if (ret < 0) return ret; @@ -1690,6 +2269,18 @@ static int ioctl_g_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) case V4L2_CID_EXPOSURE: vc->value = ov5640_data.ae_mode; break; + case V4L2_CID_AUTO_FOCUS_STATUS: + vc->value = af_get_status(); + break; + case V4L2_CID_FOCUS_AUTO: + vc->value = focus_auto; + break; + case V4L2_CID_AUTO_FOCUS_RANGE: + vc->value = focus_range; + break; + case V4L2_CID_3A_LOCK: + vc->value = focus_locked ? V4L2_LOCK_FOCUS : 0; + break; default: ret = -EINVAL; } @@ -1742,6 +2333,21 @@ static int ioctl_s_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) break; case V4L2_CID_VFLIP: break; + case V4L2_CID_AUTO_FOCUS_START: + af_start_single(); + break; + case V4L2_CID_AUTO_FOCUS_STOP: + af_stop_single(); + break; + case V4L2_CID_FOCUS_AUTO: + af_set_auto(!!vc->value); + break; + case V4L2_CID_AUTO_FOCUS_RANGE: + af_set_focus_range(vc->value); + break; + case V4L2_CID_3A_LOCK: + af_set_focus_lock(!(vc->value & V4L2_LOCK_FOCUS)); + break; default: retval = -EPERM; break; @@ -1898,7 +2504,14 @@ static int ioctl_dev_init(struct v4l2_int_device *s) return -EPERM; } + mutex_lock(&ov5640_mutex); ret = ov5640_init_mode(frame_rate, ov5640_mode_INIT, ov5640_mode_INIT); + mutex_unlock(&ov5640_mutex); + + if (ret == 0) { + if (af_init()) + pr_warning("OV5640 AF init failed\n"); + } return ret; } @@ -1913,6 +2526,8 @@ static int ioctl_dev_exit(struct v4l2_int_device *s) { void *mipi_csi2_info; + af_deinit(); + mipi_csi2_info = mipi_csi2_get_info(); /* disable mipi csi2 */ -- 2.1.4 --------------050303030200050103040805 Content-Type: application/x-bzip; name="qtmultimedia-recipe-append.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="qtmultimedia-recipe-append.tar.bz2" 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 62f9rJ/1s37Wz/pZP+vn2Z//AgkklHAAyAUA --------------050303030200050103040805 Content-Type: text/x-patch; name="v4l2src-implement-autofocus-control.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="v4l2src-implement-autofocus-control.patch" >From 3e449256ec94772eef6ea4b65ec3cde66890f8b7 Mon Sep 17 00:00:00 2001 From: Nikita Yushchenko Date: Sat, 26 Sep 2015 11:12:23 +0300 Subject: [PATCH] v4l2src: implement autofocus control This patch adds simple GstPhotography integration, and implements autofocus related part of GstPhotography. GstPhotography implementation is fare incomplete - only autofocus related part is implemented. Side effect: had to rename capture-mode property to imx-capture mode, to avoid conflict with "capture-mode" setting from WrapperCameraBinSrc. Signed-off-by: Nikita Yushchenko --- src/v4l2src/v4l2src.c | 558 +++++++++++++++++++++++++++++++++++++++++++++++++- src/v4l2src/v4l2src.h | 4 + src/v4l2src/wscript | 2 +- wscript | 1 + 4 files changed, 556 insertions(+), 9 deletions(-) diff --git a/src/v4l2src/v4l2src.c b/src/v4l2src/v4l2src.c index cbf4190..6bb59d1 100644 --- a/src/v4l2src/v4l2src.c +++ b/src/v4l2src/v4l2src.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -47,6 +48,29 @@ enum IMX_V4L2SRC_INPUT, IMX_V4L2SRC_DEVICE, IMX_V4L2SRC_QUEUE_SIZE, + + /* Properties required to be recongnized by GstPhotography implementor */ + PROP_WB_MODE, + PROP_COLOR_TONE, + PROP_SCENE_MODE, + PROP_FLASH_MODE, + PROP_FLICKER_MODE, + PROP_FOCUS_MODE, + PROP_CAPABILITIES, + PROP_EV_COMP, + PROP_ISO_SPEED, + PROP_APERTURE, + PROP_EXPOSURE_TIME, + PROP_IMAGE_CAPTURE_SUPPORTED_CAPS, + PROP_IMAGE_PREVIEW_SUPPORTED_CAPS, + PROP_ZOOM, + PROP_COLOR_TEMPERATURE, + PROP_WHITE_POINT, + PROP_ANALOG_GAIN, + PROP_LENS_FOCUS, + PROP_MIN_EXPOSURE_TIME, + PROP_MAX_EXPOSURE_TIME, + PROP_NOISE_REDUCTION, }; static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE( @@ -67,11 +91,21 @@ GST_DEBUG_CATEGORY_STATIC(gst_imx_v4l2src_debug_category); static void gst_imx_v4l2src_uri_handler_init(gpointer g_iface, gpointer iface_data); +static void gst_imx_v4l2src_photography_init(gpointer g_iface, + gpointer iface_data); G_DEFINE_TYPE_WITH_CODE(GstImxV4l2VideoSrc, gst_imx_v4l2src, GST_TYPE_PUSH_SRC, G_IMPLEMENT_INTERFACE(GST_TYPE_URI_HANDLER, gst_imx_v4l2src_uri_handler_init); + G_IMPLEMENT_INTERFACE(GST_TYPE_PHOTOGRAPHY, gst_imx_v4l2src_photography_init); DEBUG_INIT) +static void gst_imx_v4l2src_apply_focus_settings(GstImxV4l2VideoSrc *v4l2src, + gboolean activate); +static gboolean gst_imx_v4l2src_set_focus_mode(GstPhotography *photo, + GstPhotographyFocusMode focus_mode); +static gboolean gst_imx_v4l2src_get_focus_mode(GstPhotography *photo, + GstPhotographyFocusMode *focus_mode); + static gint gst_imx_v4l2src_capture_setup(GstImxV4l2VideoSrc *v4l2src) { struct v4l2_format fmt = {0}; @@ -186,6 +220,10 @@ static gboolean gst_imx_v4l2src_start(GstBaseSrc *src) v4l2src->fps_d, v4l2src->fps_n); v4l2src->count = 0; + g_mutex_lock(&v4l2src->af_mutex); + gst_imx_v4l2src_apply_focus_settings(v4l2src, TRUE); + g_mutex_unlock(&v4l2src->af_mutex); + return TRUE; } @@ -195,6 +233,10 @@ static gboolean gst_imx_v4l2src_stop(GstBaseSrc *src) GST_LOG_OBJECT(v4l2src, "stop"); + g_mutex_lock(&v4l2src->af_mutex); + gst_imx_v4l2src_apply_focus_settings(v4l2src, FALSE); + g_mutex_unlock(&v4l2src->af_mutex); + gst_imx_fd_object_unref(v4l2src->fd_obj_v4l); return TRUE; @@ -280,10 +322,8 @@ static GstFlowReturn gst_imx_v4l2src_fill(GstPushSrc *src, GstBuffer *buf) return GST_FLOW_OK; } -static gboolean gst_imx_v4l2src_negotiate(GstBaseSrc *src) +static GstCaps *gst_imx_v4l2src_caps_for_current_setup(GstImxV4l2VideoSrc *v4l2src) { - GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(src); - GstCaps *caps; GstVideoFormat gst_fmt; const gchar *pixel_format = NULL; const gchar *interlace_mode = "progressive"; @@ -292,7 +332,7 @@ static gboolean gst_imx_v4l2src_negotiate(GstBaseSrc *src) fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (ioctl(GST_IMX_FD_OBJECT_GET_FD(v4l2src->fd_obj_v4l), VIDIOC_G_FMT, &fmt) < 0) { GST_ERROR_OBJECT(v4l2src, "VIDIOC_G_FMT failed"); - return FALSE; + return NULL; } switch (fmt.fmt.pix.pixelformat) { @@ -310,9 +350,7 @@ static gboolean gst_imx_v4l2src_negotiate(GstBaseSrc *src) if (fmt.fmt.pix.field == V4L2_FIELD_INTERLACED) interlace_mode = "interleaved"; - /* not much to negotiate; - * we already performed setup, so that is what will be streamed */ - caps = gst_caps_new_simple("video/x-raw", + return gst_caps_new_simple("video/x-raw", "format", G_TYPE_STRING, pixel_format, "width", G_TYPE_INT, v4l2src->capture_width, "height", G_TYPE_INT, v4l2src->capture_height, @@ -320,6 +358,18 @@ static gboolean gst_imx_v4l2src_negotiate(GstBaseSrc *src) "framerate", GST_TYPE_FRACTION, v4l2src->fps_n, v4l2src->fps_d, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL); +} + +static gboolean gst_imx_v4l2src_negotiate(GstBaseSrc *src) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(src); + GstCaps *caps; + + /* not much to negotiate; + * we already performed setup, so that is what will be streamed */ + caps = gst_imx_v4l2src_caps_for_current_setup(v4l2src); + if (!caps) + return FALSE; GST_INFO_OBJECT(src, "negotiated caps %" GST_PTR_FORMAT, (gpointer)caps); @@ -387,6 +437,33 @@ static void gst_imx_v4l2src_set_property(GObject *object, guint prop_id, v4l2src->queue_size = g_value_get_int(value); break; + case PROP_FOCUS_MODE: + gst_imx_v4l2src_set_focus_mode(GST_PHOTOGRAPHY(v4l2src), g_value_get_enum(value)); + break; + + case PROP_WB_MODE: + case PROP_COLOR_TONE: + case PROP_SCENE_MODE: + case PROP_FLASH_MODE: + case PROP_FLICKER_MODE: + case PROP_CAPABILITIES: + case PROP_EV_COMP: + case PROP_ISO_SPEED: + case PROP_APERTURE: + case PROP_EXPOSURE_TIME: + case PROP_IMAGE_CAPTURE_SUPPORTED_CAPS: + case PROP_IMAGE_PREVIEW_SUPPORTED_CAPS: + case PROP_ZOOM: + case PROP_COLOR_TEMPERATURE: + case PROP_WHITE_POINT: + case PROP_ANALOG_GAIN: + case PROP_LENS_FOCUS: + case PROP_MIN_EXPOSURE_TIME: + case PROP_MAX_EXPOSURE_TIME: + case PROP_NOISE_REDUCTION: + GST_WARNING_OBJECT(v4l2src, "setting GstPhotography properties is not supported"); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -420,6 +497,93 @@ static void gst_imx_v4l2src_get_property(GObject *object, guint prop_id, g_value_set_int(value, v4l2src->queue_size); break; + case PROP_FOCUS_MODE: + { + GstPhotographyFocusMode focus_mode; + gst_imx_v4l2src_get_focus_mode(GST_PHOTOGRAPHY(v4l2src), &focus_mode); + g_value_set_enum(value, focus_mode); + } + break; + + case PROP_WB_MODE: + g_value_set_enum(value, GST_PHOTOGRAPHY_WB_MODE_AUTO); + break; + + case PROP_COLOR_TONE: + g_value_set_enum(value, GST_PHOTOGRAPHY_COLOR_TONE_MODE_NORMAL); + break; + + case PROP_SCENE_MODE: + g_value_set_enum(value, GST_TYPE_PHOTOGRAPHY_SCENE_MODE); + break; + + case PROP_FLASH_MODE: + g_value_set_enum(value, GST_PHOTOGRAPHY_FLASH_MODE_AUTO); + break; + + case PROP_FLICKER_MODE: + g_value_set_enum(value, GST_PHOTOGRAPHY_FLICKER_REDUCTION_OFF); + break; + + case PROP_CAPABILITIES: + g_value_set_ulong(value, GST_PHOTOGRAPHY_CAPS_NONE); + break; + + case PROP_EV_COMP: + g_value_set_float(value, 0.0f); + break; + + case PROP_ISO_SPEED: + g_value_set_uint(value, 0); + break; + + case PROP_APERTURE: + g_value_set_uint(value, 0); + break; + + case PROP_EXPOSURE_TIME: + g_value_set_uint(value, 0); + break; + + case PROP_IMAGE_CAPTURE_SUPPORTED_CAPS: + case PROP_IMAGE_PREVIEW_SUPPORTED_CAPS: + if (v4l2src->fd_obj_v4l) + gst_value_set_caps(value, gst_imx_v4l2src_caps_for_current_setup(v4l2src)); + else + GST_DEBUG_OBJECT(v4l2src, "not connected to hardware, don't know supported caps"); + break; + + case PROP_ZOOM: + g_value_set_float(value, 1.0f); + break; + + case PROP_COLOR_TEMPERATURE: + g_value_set_uint(value, 0); + break; + + case PROP_WHITE_POINT: + g_value_set_boxed(value, NULL); + break; + + case PROP_ANALOG_GAIN: + g_value_set_float(value, 1.0f); + break; + + case PROP_LENS_FOCUS: + g_value_set_float(value, 0.0f); + break; + + case PROP_MIN_EXPOSURE_TIME: + g_value_set_uint(value, 0); + break; + + case PROP_MAX_EXPOSURE_TIME: + g_value_set_uint(value, 0); + break; + + case PROP_NOISE_REDUCTION: + g_value_set_flags(value, 0); + default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; @@ -436,10 +600,24 @@ static void gst_imx_v4l2src_init(GstImxV4l2VideoSrc *v4l2src) v4l2src->queue_size = DEFAULT_QUEUE_SIZE; v4l2src->fd_obj_v4l = NULL; + g_mutex_init(&v4l2src->af_mutex); + v4l2src->focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO; + v4l2src->af_clock_id = NULL; + gst_base_src_set_format(GST_BASE_SRC(v4l2src), GST_FORMAT_TIME); gst_base_src_set_live(GST_BASE_SRC(v4l2src), TRUE); } +static void gst_imx_v4l2src_finalize(GObject *object) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(object); + + g_free(v4l2src->devicename); + g_mutex_clear(&v4l2src->af_mutex); + + G_OBJECT_CLASS(gst_imx_v4l2src_parent_class)->finalize(object); +} + static void gst_imx_v4l2src_class_init(GstImxV4l2VideoSrcClass *klass) { GObjectClass *gobject_class; @@ -454,9 +632,10 @@ static void gst_imx_v4l2src_class_init(GstImxV4l2VideoSrcClass *klass) gobject_class->set_property = gst_imx_v4l2src_set_property; gobject_class->get_property = gst_imx_v4l2src_get_property; + gobject_class->finalize = gst_imx_v4l2src_finalize; g_object_class_install_property(gobject_class, IMX_V4L2SRC_CAPTURE_MODE, - g_param_spec_int("capture-mode", "Capture mode", + g_param_spec_int("imx-capture-mode", "Capture mode", "Capture mode of camera, varies with each v4l2 driver,\n" "\t\t\t\tfor example ov5460:\n " "\t\t\t\tov5640_mode_VGA_640_480 = 0,\n" @@ -491,6 +670,51 @@ static void gst_imx_v4l2src_class_init(GstImxV4l2VideoSrcClass *klass) 0, G_MAXINT, DEFAULT_QUEUE_SIZE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /* Being GstPhotography implementation implies overriding all properties + * defined by GstPhotography */ + g_object_class_override_property(gobject_class, + PROP_WB_MODE, GST_PHOTOGRAPHY_PROP_WB_MODE); + g_object_class_override_property(gobject_class, + PROP_COLOR_TONE, GST_PHOTOGRAPHY_PROP_COLOR_TONE); + g_object_class_override_property(gobject_class, + PROP_SCENE_MODE, GST_PHOTOGRAPHY_PROP_SCENE_MODE); + g_object_class_override_property(gobject_class, + PROP_FLASH_MODE, GST_PHOTOGRAPHY_PROP_FLASH_MODE); + g_object_class_override_property(gobject_class, + PROP_FLICKER_MODE, GST_PHOTOGRAPHY_PROP_FLICKER_MODE); + g_object_class_override_property(gobject_class, + PROP_FOCUS_MODE, GST_PHOTOGRAPHY_PROP_FOCUS_MODE); + g_object_class_override_property(gobject_class, + PROP_CAPABILITIES, GST_PHOTOGRAPHY_PROP_CAPABILITIES); + g_object_class_override_property(gobject_class, + PROP_EV_COMP, GST_PHOTOGRAPHY_PROP_EV_COMP); + g_object_class_override_property(gobject_class, + PROP_ISO_SPEED, GST_PHOTOGRAPHY_PROP_ISO_SPEED); + g_object_class_override_property(gobject_class, + PROP_APERTURE, GST_PHOTOGRAPHY_PROP_APERTURE); + g_object_class_override_property(gobject_class, + PROP_EXPOSURE_TIME, GST_PHOTOGRAPHY_PROP_EXPOSURE_TIME); + g_object_class_override_property(gobject_class, + PROP_IMAGE_CAPTURE_SUPPORTED_CAPS, GST_PHOTOGRAPHY_PROP_IMAGE_CAPTURE_SUPPORTED_CAPS); + g_object_class_override_property(gobject_class, + PROP_IMAGE_PREVIEW_SUPPORTED_CAPS, GST_PHOTOGRAPHY_PROP_IMAGE_PREVIEW_SUPPORTED_CAPS); + g_object_class_override_property(gobject_class, + PROP_ZOOM, GST_PHOTOGRAPHY_PROP_ZOOM); + g_object_class_override_property(gobject_class, + PROP_COLOR_TEMPERATURE, GST_PHOTOGRAPHY_PROP_COLOR_TEMPERATURE); + g_object_class_override_property(gobject_class, + PROP_WHITE_POINT, GST_PHOTOGRAPHY_PROP_WHITE_POINT); + g_object_class_override_property(gobject_class, + PROP_ANALOG_GAIN, GST_PHOTOGRAPHY_PROP_ANALOG_GAIN); + g_object_class_override_property(gobject_class, + PROP_LENS_FOCUS, GST_PHOTOGRAPHY_PROP_LENS_FOCUS); + g_object_class_override_property(gobject_class, + PROP_MIN_EXPOSURE_TIME, GST_PHOTOGRAPHY_PROP_MIN_EXPOSURE_TIME); + g_object_class_override_property(gobject_class, + PROP_MAX_EXPOSURE_TIME, GST_PHOTOGRAPHY_PROP_MAX_EXPOSURE_TIME); + g_object_class_override_property(gobject_class, + PROP_NOISE_REDUCTION, GST_PHOTOGRAPHY_PROP_NOISE_REDUCTION); + basesrc_class->negotiate = gst_imx_v4l2src_negotiate; basesrc_class->get_caps = gst_imx_v4l2src_get_caps; basesrc_class->set_caps = gst_imx_v4l2src_set_caps; @@ -559,6 +783,324 @@ static void gst_imx_v4l2src_uri_handler_init(gpointer g_iface, gpointer iface_da iface->set_uri = gst_imx_v4l2src_uri_set_uri; } +/* GstPhotographyFocusMode actually incapsulates two independent parameters: + * - where to focus (infinity/normal/macro) + * - when to focus (single/continuous) + * + * What is implemented: + * - if GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_* is set: + * - V4L2 focus range is set to NORMAL, and continuous autofocus is enabled + * and kept on while element is in PLAYING state, + * - set_autofocus(TRUE) locks focus via V4L2_CID_3A_LOCK + * - set_autofocus(FALSE) unlocks focus via V4L2_CID_3A_LOCK + * - if other supported mode is set: + * - set_autofocus(TRUE) triggers autofocus via V4L2_CID_AUTO_FOCUS_START + * - set_autofocus(FALSE) stops autofocus via V4L2_CID_AUTO_FOCUS_STOP + * - GST_PHOTOGRAPHY_FOCUS_DONE message is generated when focused + * - mode is mapped to V4L2 focus range as follows: + * GST_PHOTOGRAPHY_FOCUS_MODE_AUTO => V4L2_AUTO_FOCUS_RANGE_AUTO + * GST_PHOTOGRAPHY_FOCUS_MODE_MACRO => V4L2_AUTO_FOCUS_RANGE_MACRO + * GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT => V4L2_AUTO_FOCUS_RANGE_NORMAL + * GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY => V4L2_AUTO_FOCUS_RANGE_INFINITY + * - not supported: + * - GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL + * - GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED + * - GST_PHOTOGRAPHY_FOCUS_MODE_MANUAL + */ + +static inline const char *ctrl_name(int id) +{ + switch (id) { + case V4L2_CID_FOCUS_AUTO: + return "V4L2_CID_FOCUS_AUTO"; + case V4L2_CID_AUTO_FOCUS_RANGE: + return "V4L2_CID_FOCUS_RANGE"; + case V4L2_CID_AUTO_FOCUS_START: + return "V4L2_CID_AUTO_FOCUS_START"; + case V4L2_CID_AUTO_FOCUS_STOP: + return "V4L2_CID_AUTO_FOCUS_STOP"; + case V4L2_CID_AUTO_FOCUS_STATUS: + return "V4L2_CID_AUTO_FOCUS_STATUS"; + case V4L2_CID_3A_LOCK: + return "V4L2_CID_3A_LOCK"; + default: + return ""; + } +} + +static int v4l2_g_ctrl(GstImxV4l2VideoSrc *v4l2src, int id, int *value) +{ + struct v4l2_control control; + int ret; + + control.id = id; + ret = ioctl(GST_IMX_FD_OBJECT_GET_FD(v4l2src->fd_obj_v4l), VIDIOC_G_CTRL, &control); + + if (ret < 0) + GST_LOG_OBJECT(v4l2src, "VIDIOC_G_CTRL(%s) failed", ctrl_name(id)); + else { + GST_LOG_OBJECT(v4l2src, "VIDIOC_G_CTRL(%s) returned %d", ctrl_name(id), control.value); + *value = control.value; + } + + return ret; +} + +static inline int v4l2_s_ctrl(GstImxV4l2VideoSrc *v4l2src, int id, int value) +{ + struct v4l2_control control; + int ret; + + GST_LOG_OBJECT(v4l2src, "VIDIOC_S_CTRL(%s, %d)", ctrl_name(id), value); + + control.id = id; + control.value = value; + ret = ioctl(GST_IMX_FD_OBJECT_GET_FD(v4l2src->fd_obj_v4l), VIDIOC_S_CTRL, &control); + + if (ret < 0) + GST_LOG_OBJECT(v4l2src, "VIDIOC_S_CTRL(%s, %d) failed", ctrl_name(id), value); + else + GST_LOG_OBJECT(v4l2src, "VIDIOC_S_CTRL(%s, %d) succeed", ctrl_name(id), value); + + return ret; +} + +static void gst_imx_v4l2src_apply_focus_settings(GstImxV4l2VideoSrc *v4l2src, + gboolean activate) +{ + int locks, range; + + /* even when activating, first ensure that it is not running */ + + /* ensure that continuous autofocus is not running */ + v4l2_s_ctrl(v4l2src, V4L2_CID_FOCUS_AUTO, 0); + /* ensure that single shot AF is not running */ + v4l2_s_ctrl(v4l2src, V4L2_CID_AUTO_FOCUS_STOP, 0); + if (v4l2src->af_clock_id) { + gst_clock_id_unschedule(v4l2src->af_clock_id); + gst_clock_id_unref(v4l2src->af_clock_id); + v4l2src->af_clock_id = NULL; + } + /* ensure that focus is not locked */ + if (v4l2_g_ctrl(v4l2src, V4L2_CID_3A_LOCK, &locks) == 0 && (locks & V4L2_LOCK_FOCUS)) + v4l2_s_ctrl(v4l2src, V4L2_CID_3A_LOCK, locks & ~V4L2_LOCK_FOCUS); + + if (activate) { + + /* set focus range */ + + switch (v4l2src->focus_mode) { + case GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: + range = V4L2_AUTO_FOCUS_RANGE_AUTO; + break; + case GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: + range = V4L2_AUTO_FOCUS_RANGE_MACRO; + break; + case GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: + range = V4L2_AUTO_FOCUS_RANGE_INFINITY; + break; + default: + range = V4L2_AUTO_FOCUS_RANGE_NORMAL; + break; + } + v4l2_s_ctrl(v4l2src, V4L2_CID_AUTO_FOCUS_RANGE, range); + + /* enable continuous autofocus if requested */ + + if (v4l2src->focus_mode == GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL) + v4l2_s_ctrl(v4l2src, V4L2_CID_FOCUS_AUTO, 1); + } +} + +static gboolean gst_imx_v4l2src_set_focus_mode(GstPhotography *photo, + GstPhotographyFocusMode focus_mode) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(photo); + + GST_LOG_OBJECT(v4l2src, "setting focus mode to %d", focus_mode); + + switch (focus_mode) { + case GST_PHOTOGRAPHY_FOCUS_MODE_AUTO: + case GST_PHOTOGRAPHY_FOCUS_MODE_MACRO: + case GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT: + case GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY: + break; + case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL: + case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED: + focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL; + break; + default: + GST_WARNING_OBJECT(v4l2src, "focus mode %d is not supported", focus_mode); + return FALSE; + } + + g_mutex_lock(&v4l2src->af_mutex); + + if (v4l2src->focus_mode != focus_mode) { + v4l2src->focus_mode = focus_mode; + + if (GST_STATE(v4l2src) == GST_STATE_PAUSED || GST_STATE(v4l2src) == GST_STATE_PLAYING) + gst_imx_v4l2src_apply_focus_settings(v4l2src, TRUE); + } + + g_mutex_unlock(&v4l2src->af_mutex); + + return TRUE; +} + +static gboolean gst_imx_v4l2src_get_focus_mode(GstPhotography *photo, + GstPhotographyFocusMode *focus_mode) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(photo); + + g_mutex_lock(&v4l2src->af_mutex); + *focus_mode = v4l2src->focus_mode; + g_mutex_unlock(&v4l2src->af_mutex); + + return TRUE; +} + + +static gboolean gst_imx_v4l2src_af_status_cb(GstClock *clock, GstClockTime time, + GstClockID id, gpointer user_data); + +static void gst_imx_v4l2src_af_check_status(GstImxV4l2VideoSrc *v4l2src) +{ + int status; + gboolean send_message; + GstPhotographyFocusStatus message_status; + gboolean schedule_recheck; + + if (v4l2_g_ctrl(v4l2src, V4L2_CID_AUTO_FOCUS_STATUS, &status) < 0) + goto none; + + switch (status) { + case V4L2_AUTO_FOCUS_STATUS_IDLE: + default: + none: + send_message = TRUE; + message_status = GST_PHOTOGRAPHY_FOCUS_STATUS_NONE; + schedule_recheck = FALSE; + break; + case V4L2_AUTO_FOCUS_STATUS_BUSY: + send_message = FALSE; + schedule_recheck = TRUE; + break; + case V4L2_AUTO_FOCUS_STATUS_REACHED: + send_message = TRUE; + message_status = GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS; + schedule_recheck = FALSE; + break; + case V4L2_AUTO_FOCUS_STATUS_FAILED: + send_message = TRUE; + message_status = GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL; + schedule_recheck = FALSE; + break; + } + + if (send_message) { + GstStructure *s; + GstMessage *m; + + s = gst_structure_new(GST_PHOTOGRAPHY_AUTOFOCUS_DONE, + "status", G_TYPE_INT, message_status, + NULL); + m = gst_message_new_custom(GST_MESSAGE_ELEMENT, + GST_OBJECT(v4l2src), s); + + if (!gst_element_post_message(GST_ELEMENT(v4l2src), m)) + GST_ERROR_OBJECT(v4l2src, "failed to post message"); + } + + if (schedule_recheck) { + GstClock *c; + GstClockTime t; + + c = gst_system_clock_obtain(); + t = gst_clock_get_time(c) + 50 * GST_MSECOND; + v4l2src->af_clock_id = gst_clock_new_single_shot_id(c, t); + gst_object_unref(c); + + if (gst_clock_id_wait_async(v4l2src->af_clock_id, + gst_imx_v4l2src_af_status_cb, + v4l2src, NULL) != GST_CLOCK_OK) + GST_ERROR_OBJECT(v4l2src, "failed to schedule recheck"); + } +} + +static gboolean gst_imx_v4l2src_af_status_cb(GstClock *clock, GstClockTime time, + GstClockID id, gpointer user_data) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(user_data); + + g_mutex_lock(&v4l2src->af_mutex); + + if (v4l2src->af_clock_id == id) { + gst_clock_id_unref(v4l2src->af_clock_id); + v4l2src->af_clock_id = NULL; + + gst_imx_v4l2src_af_check_status(v4l2src); + } + + g_mutex_unlock(&v4l2src->af_mutex); + return TRUE; +} + +void gst_imx_v4l2src_set_autofocus(GstPhotography *photo, gboolean on) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(photo); + int locks; + + g_mutex_lock(&v4l2src->af_mutex); + + if (v4l2src->af_clock_id) { + gst_clock_id_unschedule(v4l2src->af_clock_id); + gst_clock_id_unref(v4l2src->af_clock_id); + v4l2src->af_clock_id = NULL; + } + + if (v4l2src->focus_mode == GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL) { + + if (v4l2_g_ctrl(v4l2src, V4L2_CID_3A_LOCK, &locks) == 0) { + if (on && !(locks & V4L2_LOCK_FOCUS)) + v4l2_s_ctrl(v4l2src, V4L2_CID_3A_LOCK, locks | V4L2_LOCK_FOCUS); + else if (!on && (locks & V4L2_LOCK_FOCUS)) + v4l2_s_ctrl(v4l2src, V4L2_CID_3A_LOCK, locks & ~V4L2_LOCK_FOCUS); + } + + } else { + + if (on) { + if (v4l2_s_ctrl(v4l2src, V4L2_CID_AUTO_FOCUS_START, 0) == 0) + gst_imx_v4l2src_af_check_status(v4l2src); + } else + v4l2_s_ctrl(v4l2src, V4L2_CID_AUTO_FOCUS_STOP, 0); + } + + g_mutex_unlock(&v4l2src->af_mutex); +} + +static gboolean gst_imx_v4lsrc_prepare_for_capture(GstPhotography *photo, + GstPhotographyCapturePrepared func, GstCaps *capture_caps, gpointer user_data) +{ + GstImxV4l2VideoSrc *v4l2src = GST_IMX_V4L2SRC(photo); + + GST_LOG_OBJECT(v4l2src, "capture_caps: %" GST_PTR_FORMAT, capture_caps); + + func(user_data, capture_caps); + return TRUE; +} + +static void gst_imx_v4l2src_photography_init(gpointer g_iface, gpointer iface_data) +{ + GstPhotographyInterface *iface = (GstPhotographyInterface *) g_iface; + + iface->set_focus_mode = gst_imx_v4l2src_set_focus_mode; + iface->get_focus_mode = gst_imx_v4l2src_get_focus_mode; + iface->set_autofocus = gst_imx_v4l2src_set_autofocus; + iface->prepare_for_capture = gst_imx_v4lsrc_prepare_for_capture; +} + static gboolean plugin_init(GstPlugin *plugin) { return gst_element_register(plugin, "imxv4l2videosrc", GST_RANK_PRIMARY, diff --git a/src/v4l2src/v4l2src.h b/src/v4l2src/v4l2src.h index 3c4ab20..e9fbee6 100644 --- a/src/v4l2src/v4l2src.h +++ b/src/v4l2src/v4l2src.h @@ -51,6 +51,10 @@ struct _GstImxV4l2VideoSrc guint32 count; GstClockTime time_per_frame; + GMutex af_mutex; + GstPhotographyFocusMode focus_mode; + GstClockID af_clock_id; + /* properties */ gint capture_mode; gint fps_n; diff --git a/src/v4l2src/wscript b/src/v4l2src/wscript index 9e32ced..81c3406 100644 --- a/src/v4l2src/wscript +++ b/src/v4l2src/wscript @@ -11,7 +11,7 @@ def build(bld): features = ['c', bld.env['CLIBTYPE']], includes = ['.', '../..'], uselib = bld.env['COMMON_USELIB'], - use = 'gstimxcommon', + use = 'gstimxcommon GSTPHOTOGRAPHY', target = 'gstimxv4l2videosrc', source = bld.path.ant_glob('*.c'), install_path = bld.env['PLUGIN_INSTALL_PATH'] diff --git a/wscript b/wscript index 8d1583f..6b9909c 100644 --- a/wscript +++ b/wscript @@ -157,6 +157,7 @@ def configure(conf): conf.check_cfg(package = 'gstreamer-base-1.0 >= 1.2.0', uselib_store = 'GSTREAMER_BASE', args = '--cflags --libs', mandatory = 1) conf.check_cfg(package = 'gstreamer-audio-1.0 >= 1.2.0', uselib_store = 'GSTREAMER_VIDEO', args = '--cflags --libs', mandatory = 0) conf.check_cfg(package = 'gstreamer-video-1.0 >= 1.2.0', uselib_store = 'GSTREAMER_VIDEO', args = '--cflags --libs', mandatory = 1) + conf.check_cc(lib = 'gstphotography-1.0', uselib_store = 'GSTPHOTOGRAPHY', mandatory = 1) # check the kernel header path -- 2.1.4 --------------050303030200050103040805--