Merge lp:~oif-team/grail/trunk.glue into lp:grail
- trunk.glue
- Merge into trunk
Status: | Rejected |
---|---|
Rejected by: | Daniel d'Andrada |
Proposed branch: | lp:~oif-team/grail/trunk.glue |
Merge into: | lp:grail |
Diff against target: |
47689 lines (+45855/-1254) 35 files modified
include/grail-bits.h (+2/-0) include/grail.h (+22/-25) include/grail.h.orig (+273/-51) src/Makefile.am (+0/-7) src/gestures-drag.c (+0/-135) src/gestures-pinch.c (+0/-129) src/gestures-rotate.c (+0/-128) src/gestures-tapping.c (+0/-100) src/gestures-touch.c (+0/-98) src/grail-api.c (+7/-180) src/grail-bits.c (+10/-0) src/grail-frame.c (+97/-3) src/grail-gestures.c (+0/-210) src/grail-gestures.h (+0/-115) src/grail-impl.h (+30/-0) src/grail-init.c (+16/-3) src/grail-inserter.c (+0/-33) src/grail-inserter.h (+31/-2) src/grail-legacy.c (+105/-0) src/grail-recognizer.c (+344/-15) src/grail-recognizer.h (+89/-5) test/Makefile.am (+1/-0) test/check-gestures.c (+204/-0) test/check-grail.c (+2/-0) test/io/functional/drag-1.evemu (+3988/-0) test/io/functional/drag-2.evemu (+3849/-0) test/io/functional/drag-3.evemu (+16278/-0) test/io/functional/drag-4.evemu (+8032/-0) test/io/functional/hold-1.evemu (+1375/-0) test/io/functional/pinch-2.evemu (+2457/-0) test/io/functional/pinch-3.evemu (+4971/-0) test/io/functional/rotate-2.evemu (+3073/-0) test/io/functional/tap-1.evemu (+94/-0) test/io/functional/tap-4.evemu (+388/-0) tools/grail-gesture.c (+117/-15) |
To merge this branch: | bzr merge lp:~oif-team/grail/trunk.glue |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Open Input Framework Team | Pending | ||
Review via email: mp+60062@code.launchpad.net |
This proposal supersedes a proposal from 2011-05-02.
Commit message
Description of the change
This branch is a rebase of grail2.next, with one important change; it uses EXPECT_DRAG to trigger drag events, but it uses CENTER to report drag events. This presents a simple and accurate solution to the drag problem, where
1. All applications can rely on the drag events not to be lost.
2. All applications treat rotation around a finger as rotation, even if not listened for.
3. Apps not using rotation behaves the same as before, but pure rotation gestures will rightfully not be detected as drag.
4. Apps wanting more accurate/detailed drag/rotation behavior should use gesture frames directly instead.
This branch has been tested with unity on an XT2, which good feel. It seems the solution does not have to be more complicated than this.
Henrik Rydberg (rydberg) wrote : Posted in a previous version of this proposal | # |
Henrik Rydberg (rydberg) wrote : Posted in a previous version of this proposal | # |
Upon request, added some more explanation of the structs used in gru and gin.
Also, this merge is against trunk, but 2.x would be fine too, as discussed (they are equal atm).
Henrik Rydberg (rydberg) wrote : | # |
The branch has been updated with a more logical patch sequence, some bug fixes, and more importantly, with a gesture test suite, framing the critical modifications to the recognizer. The tests are real-time gesture recognition checks, are run using make check, and take about a minute to perform (with serial execution). At the introduction of the suite, several tests fail intentionally, because of the inability of the current grail to separate drag and rotation gestures. After the switch to grail2 and tuning, all tests pass. So, from the point of view of the tests, this branch presents a major improvement over grail1. Manual tests using unity, evince and eog point at the same thing.
I think this is it, guys. Enjoy!
Jussi Pakkanen (jpakkane) wrote : | # |
I created a new branch of this which merges trunk:
https:/
It has some conflicts, mainly due to Chase's removal of center of start frame. I got it to compile but some tests fail. I'll look into it next. Also there probably some latent issues there.
Daniel d'Andrada (dandrader) wrote : | # |
It's been open for almost an year now. Thus closing it to help "keep the desk clean".
Please reopen if this merge is still relevant and wanted.
Unmerged revisions
- 166. By Henrik Rydberg
-
Add XI2 support to grail-gesture
Use the grail2 API to implement the event loop using XI events.
Signed-off-by: Henrik Rydberg <email address hidden>
- 165. By Henrik Rydberg
-
Move grail engine into pump function
Move the grail engine into the pump function, and make init/destroy
equivalent to open/close, if gesture callbacks are defined. This way,
pulling can be replaced by pumping. This concludes the grail2 API.Signed-off-by: Henrik Rydberg <email address hidden>
- 164. By Henrik Rydberg
-
Trim the pinch and rotate bars
Gesture testing reveals a tendency to favor rotate over pinch for
small rotations. This patch lowers the pinch bar and increase the
rotate bar, leading to a more accurate recognition of both pinch
and rotate.With this patch, all gesture tests are passing.
Signed-off-by: Henrik Rydberg <email address hidden>
- 163. By Henrik Rydberg
-
Lower priority of pinch
When performing a rotate gesture, it is very common to also trigger
the pinch primitive. Conversely, during a pinch, rotate or drag are
seldom triggered. This patch lowers the priority of pinch gestures in
favor of rotate and drag, leading to a distinct recognition of all
three basic gestures.Signed-off-by: Henrik Rydberg <email address hidden>
- 162. By Henrik Rydberg
-
Replace recognizer with gesture frames
This patch replaces the internal recognizer with one based on the
gesture frame elements. Fully functional, and equivalent to the
previous implementation.With this patch, the pinch tests are no longer failing, while the drag
tests still have false positives from rotation.Signed-off-by: Henrik Rydberg <email address hidden>
- 161. By Henrik Rydberg
-
Add a gesture test suite
To ensure correctness when replacing of the internal recognizer, add a
test suite of real-time gestures. The tests take about a minute to
perform on any computer (serial mode).Note that some of the tests are designed to fail at this stage; the
failures represent the inability of the current code to separate some
drag and rotate gestures.Signed-off-by: Henrik Rydberg <email address hidden>
- 160. By Henrik Rydberg
-
Always output the global gesture frame
Currently, the global gesture frame is not output for one- and
two-finger gestures, but the per-contact-pair gesture elements
are used in its stead. This leads to undesired behavior when a
finger leaves the surface; it suffices to consider the start time
of a single-finger drag to see that the glue time is not respected
in that case. This patch makes sure the global gesture is always
output, such that any finger combination change leads to a restarted
gesture element.Signed-off-by: Henrik Rydberg <email address hidden>
- 159. By Henrik Rydberg
-
Add missing grail element member documentation
The documentation of moveness in the grail_element struct got lost, fixed
with this patch.Signed-off-by: Henrik Rydberg <email address hidden>
- 158. By Henrik Rydberg
-
Add inner product to grail bits api
Move the implementation of inner product to a more public place.
Signed-off-by: Henrik Rydberg <email address hidden>
- 157. By Henrik Rydberg
-
Deprecate open/close
Move the open/close api functions to the legacy area. No functional
changes.Signed-off-by: Henrik Rydberg <email address hidden>
Preview Diff
1 | === modified file 'include/grail-bits.h' |
2 | --- include/grail-bits.h 2011-04-28 16:53:57 +0000 |
3 | +++ include/grail-bits.h 2011-05-05 13:31:23 +0000 |
4 | @@ -76,6 +76,8 @@ |
5 | void GRAIL_PUBLIC grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b, |
6 | int bytes); |
7 | |
8 | +int GRAIL_PUBLIC grail_mask_inner(const grail_mask_t *a, const grail_mask_t *b, |
9 | + int bytes); |
10 | int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes); |
11 | int GRAIL_PUBLIC grail_mask_get_first(const grail_mask_t *mask, int bytes); |
12 | int GRAIL_PUBLIC grail_mask_get_next(int i, const grail_mask_t *mask, |
13 | |
14 | === modified file 'include/grail.h' |
15 | --- include/grail.h 2011-04-28 16:53:57 +0000 |
16 | +++ include/grail.h 2011-05-05 13:31:23 +0000 |
17 | @@ -174,6 +174,7 @@ |
18 | * @drop_scale_ms: scaling expect timeout (ms) |
19 | * @drop_angle_ms: rotation expect timeout (ms) |
20 | * @pivot_unbound: when true, the pivot is not bound to the contact area |
21 | + * @tap_time_ms: maximum tap time (ms) |
22 | * |
23 | * The parameters are used to tune the behavior of the gesture recognition. |
24 | * |
25 | @@ -197,6 +198,7 @@ |
26 | float drop_scale_ms; |
27 | float drop_angle_ms; |
28 | int pivot_unbound; |
29 | + float tap_time_ms; |
30 | }; |
31 | |
32 | /** |
33 | @@ -238,6 +240,7 @@ |
34 | * @velocity: current center velocity (surface units per second) |
35 | * @radius: gesture radius from center (surface units) |
36 | * @transform: the transformation matrix of the gesture |
37 | + * @moveness: fraction of center movement attributed to drag motion |
38 | * @pivot: current center of rotate and scale (surface units) |
39 | * @drag: accumulated transformation displacement (surface units) |
40 | * @scale: accumulated scale (dimensionless) |
41 | @@ -359,21 +362,6 @@ |
42 | }; |
43 | |
44 | /** |
45 | - * grail_open - open a grail device |
46 | - * @ge: the grail device to open |
47 | - * @fd: file descriptor of the kernel device |
48 | - * |
49 | - * Initialize the internal grail structures and configure it by reading the |
50 | - * protocol capabilities through the file descriptor. |
51 | - * |
52 | - * The callbacks, parameters and priv pointer should be set prior to this |
53 | - * call. |
54 | - * |
55 | - * Returns zero on success, negative error number otherwise. |
56 | - */ |
57 | -int GRAIL_PUBLIC grail_open(struct grail *ge, int fd); |
58 | - |
59 | -/** |
60 | * grail_idle - check state of kernel device |
61 | * @ge: the grail device in use |
62 | * @fd: file descriptor of the kernel device |
63 | @@ -401,16 +389,6 @@ |
64 | int GRAIL_PUBLIC grail_pull(struct grail *ge, int fd); |
65 | |
66 | /** |
67 | - * grail_close - close the grail device |
68 | - * @ge: the grail device to close |
69 | - * @fd: file descriptor of the kernel device |
70 | - * |
71 | - * Deallocates all memory associated with grail, and clears the grail |
72 | - * structure. |
73 | - */ |
74 | -void GRAIL_PUBLIC grail_close(struct grail *ge, int fd); |
75 | - |
76 | -/** |
77 | * grail_set_bbox - set the grail unit bounding box |
78 | * @ge: the grail device in use |
79 | * @min: the minimum (lower-left) corner of the bounding box |
80 | @@ -454,6 +432,23 @@ |
81 | const struct utouch_frame GRAIL_PUBLIC * |
82 | grail_get_contact_frame(const struct grail *ge); |
83 | |
84 | +/** |
85 | + * grail_get_gesture_frame - get current gesture frame |
86 | + * @ge: the grail device in use |
87 | + * |
88 | + * Return the gesture frame currently being processed. If called from |
89 | + * within a gesture callback, it is guaranteed to return the frame |
90 | + * corresponding to the gesture. |
91 | + * |
92 | + * The returned pointer can be NULL if no input has yet been extracted |
93 | + * through the grail instance. |
94 | + * |
95 | + * The frame pointer is ABI agnostic, owned by the grail instance, and |
96 | + * has grail scope. |
97 | + */ |
98 | +const struct grail_frame GRAIL_PUBLIC * |
99 | +grail_get_gesture_frame(const struct grail *ge); |
100 | + |
101 | #ifndef GRAIL_NO_LEGACY_API |
102 | |
103 | struct grail_contact { |
104 | @@ -468,6 +463,8 @@ |
105 | float pressure; |
106 | }; |
107 | |
108 | +int GRAIL_PUBLIC grail_open(struct grail *ge, int fd); |
109 | +void GRAIL_PUBLIC grail_close(struct grail *ge, int fd); |
110 | void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage); |
111 | |
112 | int GRAIL_PUBLIC grail_get_contacts(const struct grail *ge, |
113 | |
114 | === modified file 'include/grail.h.orig' |
115 | --- include/grail.h.orig 2011-04-28 16:53:34 +0000 |
116 | +++ include/grail.h.orig 2011-05-05 13:31:23 +0000 |
117 | @@ -2,8 +2,7 @@ |
118 | * |
119 | * grail - Gesture Recognition And Instantiation Library |
120 | * |
121 | - * Copyright (C) 2010 Canonical Ltd. |
122 | - * Copyright (C) 2010 Henrik Rydberg <rydberg@bitmath.org> |
123 | + * Copyright (C) 2010-2011 Canonical Ltd. |
124 | * |
125 | * This program is free software: you can redistribute it and/or modify it |
126 | * under the terms of the GNU General Public License as published by the |
127 | @@ -26,11 +25,14 @@ |
128 | #include <linux/input.h> |
129 | #include <grail-bits.h> |
130 | #include <grail-types.h> |
131 | +#include <utouch/frame.h> |
132 | |
133 | #ifdef __cplusplus |
134 | extern "C" { |
135 | #endif |
136 | |
137 | +#define GRAIL_VERSION 0x00011000 |
138 | + |
139 | #define DIM_GRAIL_TYPE 64 |
140 | #define DIM_GRAIL_TYPE_BYTES ((DIM_GRAIL_TYPE + 7) >> 3) |
141 | |
142 | @@ -41,8 +43,30 @@ |
143 | #define GRAIL_STATUS_UPDATE 1 |
144 | #define GRAIL_STATUS_END 2 |
145 | |
146 | -typedef float grail_prop_t; /* gesture properties */ |
147 | -typedef __u64 grail_time_t; /* time in milliseconds */ |
148 | +#define GRAIL_EXPECT_CENTER_X 0x0001 |
149 | +#define GRAIL_EXPECT_CENTER_Y 0x0002 |
150 | +#define GRAIL_EXPECT_DRAG_X 0x0004 |
151 | +#define GRAIL_EXPECT_DRAG_Y 0x0008 |
152 | +#define GRAIL_EXPECT_SCALE 0x0010 |
153 | +#define GRAIL_EXPECT_ANGLE 0x0020 |
154 | +#define GRAIL_EXPECT_MASK 0x003f |
155 | + |
156 | +typedef float grail_prop_t; /* gesture properties */ |
157 | +typedef utouch_frame_time_t grail_time_t; /* time in milliseconds */ |
158 | +typedef struct grail *grail_handle; /* the grail instance handle */ |
159 | + |
160 | +/** |
161 | + * struct grail_get_version - get grail library version |
162 | + * |
163 | + * Report the version of the grail library, which can be different from |
164 | + * the value of GRAIL_VERSION in this header file. |
165 | + * |
166 | + * This function allows for fallback options from major interface |
167 | + * extensions within the same ABI version. For the normal cases of ABI |
168 | + * agnostic or backwards incompatible changes, this function is not |
169 | + * needed. |
170 | + */ |
171 | +unsigned int GRAIL_PUBLIC grail_get_version(void); |
172 | |
173 | /** |
174 | * struct grail_coord - coordinate in bounding box units |
175 | @@ -53,32 +77,63 @@ |
176 | float x, y; |
177 | }; |
178 | |
179 | -/** |
180 | - * struct grail_contact - MT event information in bounding box units |
181 | - * @id: Contact tracking id |
182 | - * @tool_type: Tool type (ABS_MT_TOOL_TYPE) |
183 | - * @pos: Position of contact (bbox units) |
184 | - * @touch_major: Major axis of contact shape (bbox units) |
185 | - * @touch_minor: Minor axis of contact shape (bbox units) |
186 | - * @width_major: Major axis of perimeter (bbox units) |
187 | - * @width_minor: Minor axis of perimeter (bbox units) |
188 | - * @angle: Angle of orientation (vertical: 0 horizontal: +-M_PI_2) |
189 | - * @pressure: Pressure of contact (min: 0 max: 1) |
190 | - * |
191 | - * Depending on the native support of the underlying device, some or all of |
192 | - * the listed properties may be computed. |
193 | - */ |
194 | -struct grail_contact { |
195 | - int id; |
196 | - int tool_type; |
197 | - struct grail_coord pos; |
198 | - float touch_major; |
199 | - float touch_minor; |
200 | - float width_major; |
201 | - float width_minor; |
202 | - float angle; |
203 | - float pressure; |
204 | -}; |
205 | +grail_handle GRAIL_PUBLIC grail_new_raw(utouch_frame_handle fh, |
206 | + unsigned int num_frames, |
207 | + void *select, |
208 | + unsigned int version, |
209 | + unsigned int control_size, |
210 | + unsigned int frame_size, |
211 | + unsigned int slot_size); |
212 | + |
213 | +/** |
214 | + * grail_new - allocate and initialize a new grail instance |
215 | + * @fh: utouch frame handle to use |
216 | + * @num_frames: number of frames in cyclic buffer |
217 | + * @select: client selection callback |
218 | + * |
219 | + * Initialize the internal grail structures. |
220 | + * |
221 | + * Returns zero in case of failure. |
222 | + */ |
223 | +#define grail_new(fh, num_frames, select) \ |
224 | + grail_new_raw(fh, num_frames, select, \ |
225 | + GRAIL_VERSION, \ |
226 | + sizeof(struct grail_control), \ |
227 | + sizeof(struct grail_frame), \ |
228 | + sizeof(struct grail_element)) |
229 | + |
230 | +/** |
231 | + * grail_delete - destroy and delete grail instance |
232 | + * @ge: grail instance in use |
233 | + * |
234 | + * Deallocates all internal memory structures. |
235 | + */ |
236 | +void GRAIL_PUBLIC grail_delete(grail_handle ge); |
237 | + |
238 | +/** |
239 | + * grail_get_control - get mutable control structure |
240 | + * @ge: the grail device in use |
241 | + * |
242 | + * Return the control struct of the grail instance. |
243 | + * |
244 | + * The control pointer is ABI agnostic, owned by the grail instance, and |
245 | + * has grail scope. |
246 | + */ |
247 | +struct grail_control GRAIL_PUBLIC *grail_get_control(grail_handle ge); |
248 | + |
249 | +/** |
250 | + * grail_pump_frame - insert touch frames into grail |
251 | + * @ge: the grail device in use |
252 | + * @frame: the touch frame to insert |
253 | + * |
254 | + * Insert a new touch frame into the grail engine. If the frame induces a |
255 | + * new gesture frame, a pointer to the frame is returned. |
256 | + * |
257 | + * The grail frame pointer is ABI agnostic, owned by the grail instance, and |
258 | + * has grail scope. |
259 | + */ |
260 | +const struct grail_frame GRAIL_PUBLIC * |
261 | +grail_pump_frame(grail_handle ge, const struct utouch_frame *frame); |
262 | |
263 | /** |
264 | * struct grail_client_id - Gesture client information |
265 | @@ -106,6 +161,143 @@ |
266 | }; |
267 | |
268 | /** |
269 | + * struct grail_control - control parameters of grail |
270 | + * @glue_ms: minimum time to hold activation (ms) |
271 | + * @bar_center_x: horizontal distance to activate (surface width fraction) |
272 | + * @bar_center_y: vertical distance to activate (surface height fraction) |
273 | + * @bar_drag_x: horizontal distance to activate (surface width fraction) |
274 | + * @bar_drag_y: vertical distance to activate (surface height fraction) |
275 | + * @bar_scale: minimum scaling to activate (fraction) |
276 | + * @bar_angle: minimum angle to activate (radians) |
277 | + * @drop_x_ms: horizontal expect timeout (ms) |
278 | + * @drop_y_ms: vertical expect timeout (ms) |
279 | + * @drop_scale_ms: scaling expect timeout (ms) |
280 | + * @drop_angle_ms: rotation expect timeout (ms) |
281 | + * @pivot_unbound: when true, the pivot is not bound to the contact area |
282 | + * |
283 | + * The parameters are used to tune the behavior of the gesture recognition. |
284 | + * |
285 | + * The moveness is a number between zero and one denoting the |
286 | + * character of the current transform. Zero means pure rotate and |
287 | + * scale, one means pure drag. |
288 | + * |
289 | + * Later versions of this struct may grow in size, but will remain |
290 | + * binary compatible with older versions. |
291 | + */ |
292 | +struct grail_control { |
293 | + float glue_ms; |
294 | + float bar_center_x; |
295 | + float bar_center_y; |
296 | + float bar_drag_x; |
297 | + float bar_drag_y; |
298 | + float bar_scale; |
299 | + float bar_angle; |
300 | + float drop_x_ms; |
301 | + float drop_y_ms; |
302 | + float drop_scale_ms; |
303 | + float drop_angle_ms; |
304 | + int pivot_unbound; |
305 | +}; |
306 | + |
307 | +/** |
308 | + * struct grail_frame - frame of ongoing elementary transformations |
309 | + * @prev: pointer to the previous gesture frame |
310 | + * @touch: pointer to the touch frame triggering this gesture frame |
311 | + * @num_ongoing: number of elements in the ongoing array |
312 | + * @ongoing: array of ongoing transformation elements |
313 | + * @slots: array of all transformation slots |
314 | + * |
315 | + * A gesture frame consists of one or several touch frames glued |
316 | + * together into a stable transition, combined with information on |
317 | + * ongoing elementary gestural transformations. The array of ongoing |
318 | + * elements contains all elements with a nonzero expect mask. |
319 | + * |
320 | + * Later versions of this struct may grow in size, but will remain |
321 | + * binary compatible with older versions. |
322 | + */ |
323 | +struct grail_frame { |
324 | + const struct grail_frame *prev; |
325 | + const struct utouch_frame *touch; |
326 | + unsigned int num_ongoing; |
327 | + struct grail_element **ongoing; |
328 | + struct grail_element **slots; |
329 | +}; |
330 | + |
331 | +/** |
332 | + * struct grail_element - elementary gesture transformation |
333 | + * @prev: respective element of previous frame |
334 | + * @slot: the transformation slot occupied by this element |
335 | + * @id: unique identifier of the ongoing transformation |
336 | + * @num_touches: number of contacts of this element |
337 | + * @touches: array of contacts of this element |
338 | + * @start_time: start time of this element |
339 | + * @start_center: center position at start of transform (surface units) |
340 | + * @expect_mask: bitmask of expected gestures (grail main types) |
341 | + * @active_mask: bitmask of activated gestures (grail main types) |
342 | + * @center: gesture center position (surface units) |
343 | + * @velocity: current center velocity (surface units per second) |
344 | + * @radius: gesture radius from center (surface units) |
345 | + * @transform: the transformation matrix of the gesture |
346 | + * @pivot: current center of rotate and scale (surface units) |
347 | + * @drag: accumulated transformation displacement (surface units) |
348 | + * @scale: accumulated scale (dimensionless) |
349 | + * @angle: accumulated rotation angle (radians) |
350 | + * |
351 | + * The grail element describes the ongoing gestural transformation of |
352 | + * a particular set of contacts. The expect mask describes which |
353 | + * gestural transformations may become active during the course of |
354 | + * events, and the active mask describes which have passed their |
355 | + * respective activation threshold. The set of expected gestures can |
356 | + * change over time, for instance by exclusion or timeout. |
357 | + * |
358 | + * Applications handling rotation, either by transformation matrix or |
359 | + * angle, should use the drag displacement. For other applications, |
360 | + * the center displacement may be used instead, as to not lose |
361 | + * movement accuracy. |
362 | + * |
363 | + * Later versions of this struct may grow in size, but will remain |
364 | + * binary compatible with older versions. |
365 | + */ |
366 | +struct grail_element { |
367 | + const struct grail_element *prev; |
368 | + int slot; |
369 | + int id; |
370 | + int num_touches; |
371 | + const struct utouch_contact **touches; |
372 | + grail_time_t start_time; |
373 | + struct grail_coord start_center; |
374 | + unsigned int expect_mask; |
375 | + unsigned int active_mask; |
376 | + struct grail_coord center; |
377 | + struct grail_coord velocity; |
378 | + float radius2; |
379 | + float transform[6]; |
380 | + float moveness; |
381 | + struct grail_coord pivot; |
382 | + struct grail_coord drag; |
383 | + float scale2; |
384 | + float angle; |
385 | +}; |
386 | + |
387 | +/** |
388 | + * grail_element_transform - transform coordinates using element |
389 | + * @slot: the transformation element to use |
390 | + * @q: the grail coordinate to fill |
391 | + * @x: the grail coordinate to transform |
392 | + * |
393 | + * Performs the 3x3 transform *q = T *p, where T is the element |
394 | + * transform. |
395 | + */ |
396 | +static inline void grail_element_transform(const struct grail_element *slot, |
397 | + struct grail_coord *q, |
398 | + const struct grail_coord *p) |
399 | +{ |
400 | + const float *T = slot->transform; |
401 | + q->x = T[0] * p->x + T[1] * p->y + T[2]; |
402 | + q->y = T[3] * p->x + T[4] * p->y + T[5]; |
403 | +} |
404 | + |
405 | +/** |
406 | * struct grail_event - Gesture event |
407 | * @type: The gesture type |
408 | * @id: Unique identifier foof the gesture instance |
409 | @@ -231,19 +423,6 @@ |
410 | const struct grail_coord *max); |
411 | |
412 | /** |
413 | - * grail_filter_abs_events - filter kernel motion events |
414 | - * @ge: the grail device in use |
415 | - * @usage: When true, filter kernel motion events. |
416 | - * |
417 | - * Single-finger pointer events are treated as pointer gestures in |
418 | - * grail. When filter_motion_events is non-zero, the kernel events |
419 | - * corresponding to pointer movement are removed from the event |
420 | - * stream. |
421 | - * |
422 | - */ |
423 | -void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage); |
424 | - |
425 | -/** |
426 | * grail_get_units - get device coordinate ranges |
427 | * @ge: the grail device in use |
428 | * @min: minimum x and y coordinates |
429 | @@ -259,17 +438,60 @@ |
430 | struct grail_coord *min, struct grail_coord *max); |
431 | |
432 | /** |
433 | - * grail_get_contacts - get current contact state |
434 | - * @ge: the grail device in use |
435 | - * @touch: array of contacts to be filled in |
436 | - * @max_touch: maximum number of contacts supported by the array |
437 | - * |
438 | - * Extract the contact state as currently seen by grail. |
439 | - * |
440 | - */ |
441 | + * grail_get_contact_frame - get current contact frame |
442 | + * @ge: the grail device in use |
443 | + * |
444 | + * Return the contact frame current being processed. If called from |
445 | + * within a gesture callback, it is guaranteed to return the frame |
446 | + * corresponding to the gesture. |
447 | + * |
448 | + * The returned pointer can be NULL if no input has yet been extracted |
449 | + * through the grail instance. |
450 | + * |
451 | + * The frame pointer is ABI agnostic, owned by the grail instance, and |
452 | + * has grail scope. |
453 | + */ |
454 | +const struct utouch_frame GRAIL_PUBLIC * |
455 | +grail_get_contact_frame(const struct grail *ge); |
456 | + |
457 | +/** |
458 | + * grail_get_gesture_frame - get current gesture frame |
459 | + * @ge: the grail device in use |
460 | + * |
461 | + * Return the gesture frame currently being processed. If called from |
462 | + * within a gesture callback, it is guaranteed to return the frame |
463 | + * corresponding to the gesture. |
464 | + * |
465 | + * The returned pointer can be NULL if no input has yet been extracted |
466 | + * through the grail instance. |
467 | + * |
468 | + * The frame pointer is ABI agnostic, owned by the grail instance, and |
469 | + * has grail scope. |
470 | + */ |
471 | +const struct grail_frame GRAIL_PUBLIC * |
472 | +grail_get_gesture_frame(const struct grail *ge); |
473 | + |
474 | +#ifndef GRAIL_NO_LEGACY_API |
475 | + |
476 | +struct grail_contact { |
477 | + int id; |
478 | + int tool_type; |
479 | + struct grail_coord pos; |
480 | + float touch_major; |
481 | + float touch_minor; |
482 | + float width_major; |
483 | + float width_minor; |
484 | + float angle; |
485 | + float pressure; |
486 | +}; |
487 | + |
488 | +void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage); |
489 | + |
490 | int GRAIL_PUBLIC grail_get_contacts(const struct grail *ge, |
491 | struct grail_contact *touch, int max_touch); |
492 | |
493 | +#endif |
494 | + |
495 | #ifdef __cplusplus |
496 | } |
497 | #endif |
498 | |
499 | === modified file 'src/Makefile.am' |
500 | --- src/Makefile.am 2011-04-28 16:53:41 +0000 |
501 | +++ src/Makefile.am 2011-05-05 13:31:23 +0000 |
502 | @@ -14,13 +14,6 @@ |
503 | grail-bits.c \ |
504 | grail-inserter.c \ |
505 | grail-inserter.h \ |
506 | - grail-gestures.c \ |
507 | - grail-gestures.h \ |
508 | - gestures-touch.c \ |
509 | - gestures-drag.c \ |
510 | - gestures-pinch.c \ |
511 | - gestures-rotate.c \ |
512 | - gestures-tapping.c \ |
513 | grail-recognizer.c \ |
514 | grail-recognizer.h \ |
515 | grail-event.c \ |
516 | |
517 | === removed file 'src/gestures-drag.c' |
518 | --- src/gestures-drag.c 2011-04-28 16:53:57 +0000 |
519 | +++ src/gestures-drag.c 1970-01-01 00:00:00 +0000 |
520 | @@ -1,135 +0,0 @@ |
521 | -/***************************************************************************** |
522 | - * |
523 | - * grail - Gesture Recognition And Instantiation Library |
524 | - * |
525 | - * Copyright (C) 2010-2011 Canonical Ltd. |
526 | - * |
527 | - * This program is free software: you can redistribute it and/or modify it |
528 | - * under the terms of the GNU General Public License as published by the |
529 | - * Free Software Foundation, either version 3 of the License, or (at your |
530 | - * option) any later version. |
531 | - * |
532 | - * This program is distributed in the hope that it will be useful, but |
533 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
534 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
535 | - * General Public License for more details. |
536 | - * |
537 | - * You should have received a copy of the GNU General Public License along |
538 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
539 | - * |
540 | - ****************************************************************************/ |
541 | - |
542 | -#include "grail-recognizer.h" |
543 | -#include <math.h> |
544 | -#include <stdio.h> |
545 | - |
546 | -static const int getype[DIM_TOUCH + 1] = { |
547 | - -1, |
548 | - GRAIL_TYPE_DRAG1, |
549 | - GRAIL_TYPE_DRAG2, |
550 | - GRAIL_TYPE_DRAG3, |
551 | - GRAIL_TYPE_DRAG4, |
552 | - GRAIL_TYPE_DRAG5, |
553 | -}; |
554 | - |
555 | -static void set_props(const struct gesture_inserter *gin, |
556 | - struct combo_model *s, const struct move_model *m, |
557 | - const struct utouch_frame *frame) |
558 | -{ |
559 | - if (m->single) { |
560 | - s->prop[GRAIL_PROP_DRAG_DX] = m->fm[FM_X].raw_delta; |
561 | - s->prop[GRAIL_PROP_DRAG_DY] = m->fm[FM_Y].raw_delta; |
562 | - } else { |
563 | - s->prop[GRAIL_PROP_DRAG_DX] = m->fm[FM_X].action_delta; |
564 | - s->prop[GRAIL_PROP_DRAG_DY] = m->fm[FM_Y].action_delta; |
565 | - } |
566 | - s->prop[GRAIL_PROP_DRAG_VX] = m->fm[FM_X].velocity; |
567 | - s->prop[GRAIL_PROP_DRAG_VY] = m->fm[FM_Y].velocity; |
568 | - s->prop[GRAIL_PROP_DRAG_X] = m->fm[FM_X].value; |
569 | - s->prop[GRAIL_PROP_DRAG_Y] = m->fm[FM_Y].value; |
570 | - s->nprop = 6; |
571 | - s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame); |
572 | -} |
573 | - |
574 | -static const int fm_mask = 0x03; |
575 | - |
576 | -int gru_drag(struct grail *ge, |
577 | - const struct utouch_frame *frame) |
578 | -{ |
579 | - struct gesture_recognizer *gru = ge->gru; |
580 | - struct combo_model *state = &gru->drag; |
581 | - struct move_model *move = &gru->move; |
582 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
583 | - if (!move->multi && !move->single) { |
584 | - if (state->active) { |
585 | - gru_end(ge, state->gid, move, |
586 | - state->prop, state->nprop); |
587 | - state->active = 0; |
588 | - } |
589 | - } |
590 | - if ((move->timeout & fm_mask) == fm_mask) { |
591 | - if (state->active) { |
592 | - gin_gid_timeout(ge, state->gid); |
593 | - } |
594 | - } |
595 | - if (!state->active) { |
596 | - int type = getype[move->ntouch]; |
597 | - if (type < 0) |
598 | - return 0; |
599 | - state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); |
600 | - state->active = 1; |
601 | - } |
602 | - if (!(move->tickle & mask)) |
603 | - return 0; |
604 | - if (!(move->active & fm_mask)) |
605 | - return 0; |
606 | - set_props(ge->gin, state, move, frame); |
607 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
608 | - return 1; |
609 | -} |
610 | - |
611 | -int gru_windrag(struct grail *ge, |
612 | - const struct utouch_frame *frame) |
613 | -{ |
614 | - struct gesture_recognizer *gru = ge->gru; |
615 | - struct combo_model *state = &gru->windrag; |
616 | - struct move_model *move = &gru->move; |
617 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
618 | - if (!move->multi && !move->single) { |
619 | - if (state->active && out_of_bounds(state, move)) { |
620 | - gru_end(ge, state->gid, move, |
621 | - state->prop, state->nprop); |
622 | - state->active = 0; |
623 | - } |
624 | - } |
625 | - if ((move->timeout & fm_mask) == fm_mask) { |
626 | - if (state->active) { |
627 | - gin_gid_timeout(ge, state->gid); |
628 | - } |
629 | - } |
630 | - if (!state->active) { |
631 | - if (move->ntouch == 4) { |
632 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_MDRAG, |
633 | - PRIO_META, frame); |
634 | - state->mintouch = 1; |
635 | - state->maxtouch = 4; |
636 | - state->active = 1; |
637 | - } else if (move->ntouch == 3) { |
638 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_EDRAG, |
639 | - PRIO_ENV, frame); |
640 | - state->mintouch = 1; |
641 | - state->maxtouch = 3; |
642 | - state->active = 1; |
643 | - } else { |
644 | - return 0; |
645 | - } |
646 | - } |
647 | - if (!(move->tickle & mask)) |
648 | - return 0; |
649 | - if (!(move->active & fm_mask)) |
650 | - return 0; |
651 | - set_props(ge->gin, state, move, frame); |
652 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
653 | - return 1; |
654 | -} |
655 | - |
656 | |
657 | === removed file 'src/gestures-pinch.c' |
658 | --- src/gestures-pinch.c 2011-04-28 16:53:57 +0000 |
659 | +++ src/gestures-pinch.c 1970-01-01 00:00:00 +0000 |
660 | @@ -1,129 +0,0 @@ |
661 | -/***************************************************************************** |
662 | - * |
663 | - * grail - Gesture Recognition And Instantiation Library |
664 | - * |
665 | - * Copyright (C) 2010-2011 Canonical Ltd. |
666 | - * |
667 | - * This program is free software: you can redistribute it and/or modify it |
668 | - * under the terms of the GNU General Public License as published by the |
669 | - * Free Software Foundation, either version 3 of the License, or (at your |
670 | - * option) any later version. |
671 | - * |
672 | - * This program is distributed in the hope that it will be useful, but |
673 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
674 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
675 | - * General Public License for more details. |
676 | - * |
677 | - * You should have received a copy of the GNU General Public License along |
678 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
679 | - * |
680 | - ****************************************************************************/ |
681 | - |
682 | -#include "grail-recognizer.h" |
683 | -#include <math.h> |
684 | -#include <stdio.h> |
685 | - |
686 | -static const int getype[DIM_TOUCH + 1] = { |
687 | - 0, |
688 | - 0, |
689 | - GRAIL_TYPE_PINCH2, |
690 | - GRAIL_TYPE_PINCH3, |
691 | - GRAIL_TYPE_PINCH4, |
692 | - GRAIL_TYPE_PINCH5, |
693 | -}; |
694 | - |
695 | -static const int fm_mask = 0x04; |
696 | - |
697 | -static void set_props(const struct gesture_inserter *gin, |
698 | - struct combo_model *s, |
699 | - const struct move_model *m, |
700 | - const struct utouch_frame *frame) |
701 | -{ |
702 | - s->prop[GRAIL_PROP_PINCH_DR] = m->fm[FM_R].action_delta; |
703 | - s->prop[GRAIL_PROP_PINCH_VR] = m->fm[FM_R].velocity; |
704 | - s->prop[GRAIL_PROP_PINCH_R] = m->fm[FM_R].value; |
705 | - s->nprop = 3; |
706 | - s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame); |
707 | -} |
708 | - |
709 | -int gru_pinch(struct grail *ge, |
710 | - const struct utouch_frame *frame) |
711 | -{ |
712 | - struct gesture_recognizer *gru = ge->gru; |
713 | - struct combo_model *state = &gru->pinch; |
714 | - struct move_model *move = &gru->move; |
715 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
716 | - if (!move->multi && !move->single) { |
717 | - if (state->active) { |
718 | - gru_end(ge, state->gid, move, |
719 | - state->prop, state->nprop); |
720 | - state->active = 0; |
721 | - } |
722 | - return 0; |
723 | - } |
724 | - if ((move->timeout & fm_mask) == fm_mask) { |
725 | - if (state->active) { |
726 | - gin_gid_timeout(ge, state->gid); |
727 | - } |
728 | - } |
729 | - if (!(move->tickle & mask)) |
730 | - return 0; |
731 | - if (!state->active) { |
732 | - int type = getype[move->ntouch]; |
733 | - if (!type) |
734 | - return 0; |
735 | - state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); |
736 | - state->active = 1; |
737 | - } |
738 | - if (!(move->active & fm_mask)) |
739 | - return 0; |
740 | - set_props(ge->gin, state, move, frame); |
741 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
742 | - return 1; |
743 | -} |
744 | - |
745 | -int gru_winpinch(struct grail *ge, |
746 | - const struct utouch_frame *frame) |
747 | -{ |
748 | - struct gesture_recognizer *gru = ge->gru; |
749 | - struct combo_model *state = &gru->winpinch; |
750 | - struct move_model *move = &gru->move; |
751 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
752 | - if (!move->multi) { |
753 | - if (state->active && out_of_bounds(state, move)) { |
754 | - gru_end(ge, state->gid, move, |
755 | - state->prop, state->nprop); |
756 | - state->active = 0; |
757 | - } |
758 | - return 0; |
759 | - } |
760 | - if ((move->timeout & fm_mask) == fm_mask) { |
761 | - if (state->active) { |
762 | - gin_gid_timeout(ge, state->gid); |
763 | - } |
764 | - } |
765 | - if (!(move->tickle & mask)) |
766 | - return 0; |
767 | - if (!state->active) { |
768 | - if (move->ntouch == 4) { |
769 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_MPINCH, |
770 | - PRIO_META, frame); |
771 | - state->mintouch = 2; |
772 | - state->maxtouch = 4; |
773 | - state->active = 1; |
774 | - } else if (move->ntouch == 3) { |
775 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_EPINCH, |
776 | - PRIO_ENV, frame); |
777 | - state->mintouch = 2; |
778 | - state->maxtouch = 3; |
779 | - state->active = 1; |
780 | - } else { |
781 | - return 0; |
782 | - } |
783 | - } |
784 | - if (!(move->active & fm_mask)) |
785 | - return 0; |
786 | - set_props(ge->gin, state, move, frame); |
787 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
788 | - return 1; |
789 | -} |
790 | |
791 | === removed file 'src/gestures-rotate.c' |
792 | --- src/gestures-rotate.c 2011-04-28 16:53:57 +0000 |
793 | +++ src/gestures-rotate.c 1970-01-01 00:00:00 +0000 |
794 | @@ -1,128 +0,0 @@ |
795 | -/***************************************************************************** |
796 | - * |
797 | - * grail - Gesture Recognition And Instantiation Library |
798 | - * |
799 | - * Copyright (C) 2010-2011 Canonical Ltd. |
800 | - * |
801 | - * This program is free software: you can redistribute it and/or modify it |
802 | - * under the terms of the GNU General Public License as published by the |
803 | - * Free Software Foundation, either version 3 of the License, or (at your |
804 | - * option) any later version. |
805 | - * |
806 | - * This program is distributed in the hope that it will be useful, but |
807 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
808 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
809 | - * General Public License for more details. |
810 | - * |
811 | - * You should have received a copy of the GNU General Public License along |
812 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
813 | - * |
814 | - ****************************************************************************/ |
815 | - |
816 | -#include "grail-recognizer.h" |
817 | -#include <math.h> |
818 | -#include <stdio.h> |
819 | - |
820 | -static const int getype[DIM_TOUCH + 1] = { |
821 | - 0, |
822 | - 0, |
823 | - GRAIL_TYPE_ROTATE2, |
824 | - GRAIL_TYPE_ROTATE3, |
825 | - GRAIL_TYPE_ROTATE4, |
826 | - GRAIL_TYPE_ROTATE5, |
827 | -}; |
828 | - |
829 | -static const int fm_mask = 0x08; |
830 | - |
831 | -static void set_props(const struct gesture_inserter *gin, |
832 | - struct combo_model *s, const struct move_model *m, |
833 | - const struct utouch_frame *frame) |
834 | -{ |
835 | - s->prop[GRAIL_PROP_ROTATE_DA] = m->fm[FM_A].action_delta; |
836 | - s->prop[GRAIL_PROP_ROTATE_VA] = m->fm[FM_A].velocity; |
837 | - s->prop[GRAIL_PROP_ROTATE_A] = m->fm[FM_A].value; |
838 | - s->nprop = 3; |
839 | - s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame); |
840 | -} |
841 | - |
842 | -int gru_rotate(struct grail *ge, |
843 | - const struct utouch_frame *frame) |
844 | -{ |
845 | - struct gesture_recognizer *gru = ge->gru; |
846 | - struct combo_model *state = &gru->rotate; |
847 | - struct move_model *move = &gru->move; |
848 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
849 | - if (!move->multi && !move->single) { |
850 | - if (state->active) { |
851 | - gru_end(ge, state->gid, move, |
852 | - state->prop, state->nprop); |
853 | - state->active = 0; |
854 | - } |
855 | - return 0; |
856 | - } |
857 | - if ((move->timeout & fm_mask) == fm_mask) { |
858 | - if (state->active) { |
859 | - gin_gid_timeout(ge, state->gid); |
860 | - } |
861 | - } |
862 | - if (!(move->tickle & mask)) |
863 | - return 0; |
864 | - if (!state->active) { |
865 | - int type = getype[move->ntouch]; |
866 | - if (!type) |
867 | - return 0; |
868 | - state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame); |
869 | - state->active = 1; |
870 | - } |
871 | - if (!(move->active & fm_mask)) |
872 | - return 0; |
873 | - set_props(ge->gin, state, move, frame); |
874 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
875 | - return 1; |
876 | -} |
877 | - |
878 | -int gru_winrotate(struct grail *ge, |
879 | - const struct utouch_frame *frame) |
880 | -{ |
881 | - struct gesture_recognizer *gru = ge->gru; |
882 | - struct combo_model *state = &gru->winrotate; |
883 | - struct move_model *move = &gru->move; |
884 | - int mask = state->active ? (move->active & fm_mask) : fm_mask; |
885 | - if (!move->multi) { |
886 | - if (state->active && out_of_bounds(state, move)) { |
887 | - gru_end(ge, state->gid, move, |
888 | - state->prop, state->nprop); |
889 | - state->active = 0; |
890 | - } |
891 | - return 0; |
892 | - } |
893 | - if ((move->timeout & fm_mask) == fm_mask) { |
894 | - if (state->active) { |
895 | - gin_gid_timeout(ge, state->gid); |
896 | - } |
897 | - } |
898 | - if (!(move->tickle & mask)) |
899 | - return 0; |
900 | - if (!state->active) { |
901 | - if (move->ntouch == 4) { |
902 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_MROTATE, |
903 | - PRIO_META, frame); |
904 | - state->mintouch = 2; |
905 | - state->maxtouch = 4; |
906 | - state->active = 1; |
907 | - } else if (move->ntouch == 3) { |
908 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_EROTATE, |
909 | - PRIO_ENV, frame); |
910 | - state->mintouch = 2; |
911 | - state->maxtouch = 3; |
912 | - state->active = 1; |
913 | - } else { |
914 | - return 0; |
915 | - } |
916 | - } |
917 | - if (!(move->active & fm_mask)) |
918 | - return 0; |
919 | - set_props(ge->gin, state, move, frame); |
920 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
921 | - return 1; |
922 | -} |
923 | |
924 | === removed file 'src/gestures-tapping.c' |
925 | --- src/gestures-tapping.c 2011-04-28 16:53:57 +0000 |
926 | +++ src/gestures-tapping.c 1970-01-01 00:00:00 +0000 |
927 | @@ -1,100 +0,0 @@ |
928 | -/***************************************************************************** |
929 | - * |
930 | - * grail - Gesture Recognition And Instantiation Library |
931 | - * |
932 | - * Copyright (C) 2010-2011 Canonical Ltd. |
933 | - * |
934 | - * This program is free software: you can redistribute it and/or modify it |
935 | - * under the terms of the GNU General Public License as published by the |
936 | - * Free Software Foundation, either version 3 of the License, or (at your |
937 | - * option) any later version. |
938 | - * |
939 | - * This program is distributed in the hope that it will be useful, but |
940 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
941 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
942 | - * General Public License for more details. |
943 | - * |
944 | - * You should have received a copy of the GNU General Public License along |
945 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
946 | - * |
947 | - ****************************************************************************/ |
948 | - |
949 | -#include "grail-recognizer.h" |
950 | -#include <math.h> |
951 | - |
952 | -static const int fm_mask = 0x07; |
953 | - |
954 | -static void set_props(const struct gesture_inserter *gin, |
955 | - struct tapping_model *s, const struct move_model *m, |
956 | - const struct utouch_frame *frame) |
957 | -{ |
958 | - s->prop[GRAIL_PROP_TAP_DT] = m->time - s->start; |
959 | - s->prop[GRAIL_PROP_TAP_X] = m->fm[FM_X].value; |
960 | - s->prop[GRAIL_PROP_TAP_Y] = m->fm[FM_Y].value; |
961 | - s->nprop = 3; |
962 | - s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame); |
963 | -} |
964 | - |
965 | -int gru_tapping(struct grail *ge, |
966 | - const struct utouch_frame *frame) |
967 | -{ |
968 | - struct gesture_recognizer *gru = ge->gru; |
969 | - struct tapping_model *state = &gru->tapping; |
970 | - struct move_model *move = &gru->move; |
971 | - state->tap = 0; |
972 | - if (frame->num_active && !frame->prev->num_active) { |
973 | - state->mintouch = 0; |
974 | - state->maxtouch = 0; |
975 | - } |
976 | - if (move->ntouch > state->maxtouch) { |
977 | - if (state->active) { |
978 | - gin_gid_discard(ge, state->gid); |
979 | - state->active = 0; |
980 | - } |
981 | - state->start = move->time; |
982 | - state->maxtouch = move->ntouch; |
983 | - set_props(ge->gin, state, move, frame); |
984 | - if (state->maxtouch <= 5) { |
985 | - int type = GRAIL_TYPE_TAP1 + state->maxtouch - 1; |
986 | - state->gid = gin_gid_begin(ge, type, PRIO_TAP, frame); |
987 | - state->active = 1; |
988 | - } |
989 | - return 0; |
990 | - } |
991 | - if (!state->active) { |
992 | - state->mintouch = move->ntouch; |
993 | - state->maxtouch = move->ntouch; |
994 | - return 0; |
995 | - } |
996 | - if (move->ntouch <= state->mintouch) { |
997 | - int x = state->prop[GRAIL_PROP_TAP_X]; |
998 | - int y = state->prop[GRAIL_PROP_TAP_Y]; |
999 | - int t = move->time - state->start; |
1000 | - if (t > move->fm[FM_X].bar_ms) { |
1001 | - gin_gid_discard(ge, state->gid); |
1002 | - state->mintouch = move->ntouch; |
1003 | - state->maxtouch = move->ntouch; |
1004 | - state->active = 0; |
1005 | - return 0; |
1006 | - } |
1007 | - state->tap = state->maxtouch; |
1008 | - state->prop[GRAIL_PROP_TAP_DT] = t; |
1009 | - gin_gid_event(ge, state->gid, x, y, state->maxtouch, |
1010 | - state->prop, state->nprop, 1); |
1011 | - state->mintouch = move->ntouch; |
1012 | - state->maxtouch = move->ntouch; |
1013 | - state->active = 0; |
1014 | - return 1; |
1015 | - } |
1016 | - if (!move->ntouch) |
1017 | - return 0; |
1018 | - state->prop[GRAIL_PROP_TAP_DT] = move->time - state->start; |
1019 | - if ((move->active & fm_mask) || |
1020 | - move->time - state->start > move->fm[FM_X].bar_ms) { |
1021 | - gin_gid_discard(ge, state->gid); |
1022 | - state->mintouch = move->ntouch; |
1023 | - state->maxtouch = move->ntouch; |
1024 | - state->active = 0; |
1025 | - } |
1026 | - return 0; |
1027 | -} |
1028 | |
1029 | === removed file 'src/gestures-touch.c' |
1030 | --- src/gestures-touch.c 2011-04-04 17:27:38 +0000 |
1031 | +++ src/gestures-touch.c 1970-01-01 00:00:00 +0000 |
1032 | @@ -1,98 +0,0 @@ |
1033 | -/***************************************************************************** |
1034 | - * |
1035 | - * grail - Gesture Recognition And Instantiation Library |
1036 | - * |
1037 | - * Copyright (C) 2010 Canonical Ltd. |
1038 | - * Copyright (C) 2010 Henrik Rydberg <rydberg@bitmath.org> |
1039 | - * |
1040 | - * This program is free software: you can redistribute it and/or modify it |
1041 | - * under the terms of the GNU General Public License as published by the |
1042 | - * Free Software Foundation, either version 3 of the License, or (at your |
1043 | - * option) any later version. |
1044 | - * |
1045 | - * This program is distributed in the hope that it will be useful, but |
1046 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
1047 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1048 | - * General Public License for more details. |
1049 | - * |
1050 | - * You should have received a copy of the GNU General Public License along |
1051 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
1052 | - * |
1053 | - ****************************************************************************/ |
1054 | - |
1055 | -#include "grail-recognizer.h" |
1056 | -#include <math.h> |
1057 | -#include <stdio.h> |
1058 | - |
1059 | -static const int getype[DIM_TOUCH + 1] = { |
1060 | - -1, |
1061 | - GRAIL_TYPE_TOUCH1, |
1062 | - GRAIL_TYPE_TOUCH2, |
1063 | - GRAIL_TYPE_TOUCH3, |
1064 | - GRAIL_TYPE_TOUCH4, |
1065 | - GRAIL_TYPE_TOUCH5, |
1066 | -}; |
1067 | - |
1068 | -int gru_touch(struct grail *ge, |
1069 | - const struct utouch_frame *frame) |
1070 | -{ |
1071 | - struct gesture_recognizer *gru = ge->gru; |
1072 | - struct combo_model *state = &gru->touch; |
1073 | - struct move_model *move = &gru->move; |
1074 | - if (frame->slot_revision != frame->prev->slot_revision) { |
1075 | - if (state->active) { |
1076 | - gru_end(ge, state->gid, move, |
1077 | - state->prop, state->nprop); |
1078 | - state->active = 0; |
1079 | - } |
1080 | - } |
1081 | - if (!state->active) { |
1082 | - int type = getype[move->ntouch]; |
1083 | - if (type <= 0) |
1084 | - return 0; |
1085 | - state->gid = gin_gid_begin(ge, type, -PRIO_GESTURE, frame); |
1086 | - state->active = 1; |
1087 | - } |
1088 | - if (move->time - move->fm[FM_X].original_ms <= move->fm[FM_X].hold_ms) |
1089 | - return 0; |
1090 | - state->nprop = gin_add_contact_props(ge->gin, state->prop, frame); |
1091 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
1092 | - return 1; |
1093 | -} |
1094 | - |
1095 | -int gru_wintouch(struct grail *ge, |
1096 | - const struct utouch_frame *frame) |
1097 | -{ |
1098 | - struct gesture_recognizer *gru = ge->gru; |
1099 | - struct combo_model *state = &gru->wintouch; |
1100 | - struct move_model *move = &gru->move; |
1101 | - if (frame->slot_revision != frame->prev->slot_revision) { |
1102 | - if (state->active && out_of_bounds(state, move)) { |
1103 | - gru_end(ge, state->gid, move, |
1104 | - state->prop, state->nprop); |
1105 | - state->active = 0; |
1106 | - } |
1107 | - } |
1108 | - if (!state->active) { |
1109 | - if (move->ntouch == 4) { |
1110 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_MTOUCH, |
1111 | - -PRIO_META, frame); |
1112 | - state->mintouch = 1; |
1113 | - state->maxtouch = 4; |
1114 | - state->active = 1; |
1115 | - } else if (move->ntouch == 3) { |
1116 | - state->gid = gin_gid_begin(ge, GRAIL_TYPE_ETOUCH, |
1117 | - -PRIO_ENV, frame); |
1118 | - state->mintouch = 1; |
1119 | - state->maxtouch = 3; |
1120 | - state->active = 1; |
1121 | - } else { |
1122 | - return 0; |
1123 | - } |
1124 | - } |
1125 | - if (move->time - move->fm[FM_X].original_ms <= move->fm[FM_X].hold_ms) |
1126 | - return 0; |
1127 | - state->nprop = gin_add_contact_props(ge->gin, state->prop, frame); |
1128 | - gru_event(ge, state->gid, move, state->prop, state->nprop); |
1129 | - return 1; |
1130 | -} |
1131 | |
1132 | === modified file 'src/grail-api.c' |
1133 | --- src/grail-api.c 2011-04-28 16:53:57 +0000 |
1134 | +++ src/grail-api.c 2011-05-05 13:31:23 +0000 |
1135 | @@ -31,105 +31,11 @@ |
1136 | #include <stdlib.h> |
1137 | #include <sys/stat.h> |
1138 | |
1139 | -#define DIM_FRAMES 100 |
1140 | -#define FRAME_RATE 100 |
1141 | - |
1142 | unsigned int GRAIL_PUBLIC grail_get_version(void) |
1143 | { |
1144 | return GRAIL_VERSION; |
1145 | } |
1146 | |
1147 | -int GRAIL_PUBLIC grail_open(struct grail *ge, int fd) |
1148 | -{ |
1149 | - struct grail_impl *x; |
1150 | - struct stat fs; |
1151 | - int ret; |
1152 | - |
1153 | - ret = fstat(fd, &fs); |
1154 | - if (ret) |
1155 | - return ret; |
1156 | - |
1157 | - x = calloc(1, sizeof(*x)); |
1158 | - if (!x) |
1159 | - return -ENOMEM; |
1160 | - |
1161 | - if (!fs.st_rdev) |
1162 | - x->fptest = fdopen(fd, "r"); |
1163 | - |
1164 | - x->evemu = evemu_new(x->fptest ? "fptest" : 0); |
1165 | - if (!x->evemu) { |
1166 | - ret = -ENOMEM; |
1167 | - goto freemem; |
1168 | - } |
1169 | - if (x->fptest) |
1170 | - ret = evemu_read(x->evemu, x->fptest) <= 0; |
1171 | - else |
1172 | - ret = evemu_extract(x->evemu, fd); |
1173 | - if (ret) |
1174 | - goto freemem; |
1175 | - if (!utouch_frame_is_supported_mtdev(x->evemu)) { |
1176 | - ret = -ENODEV; |
1177 | - goto freemem; |
1178 | - } |
1179 | - |
1180 | - if (!x->fptest) { |
1181 | - x->mtdev = mtdev_new_open(fd); |
1182 | - if (!x->mtdev) { |
1183 | - ret = -ENOMEM; |
1184 | - goto freemem; |
1185 | - } |
1186 | - } |
1187 | - x->fh = utouch_frame_new_engine(DIM_FRAMES, DIM_TOUCH, FRAME_RATE); |
1188 | - if (!x->fh) { |
1189 | - ret = -ENOMEM; |
1190 | - goto freedev; |
1191 | - } |
1192 | - ret = utouch_frame_init_mtdev(x->fh, x->evemu); |
1193 | - if (ret) |
1194 | - goto freeframe; |
1195 | - |
1196 | - ge->impl = x; |
1197 | - |
1198 | - ret = gin_init(ge); |
1199 | - if (ret) |
1200 | - goto freeframe; |
1201 | - |
1202 | - ret = gru_init(ge); |
1203 | - if (ret) |
1204 | - goto freegin; |
1205 | - |
1206 | - return 0; |
1207 | - freegin: |
1208 | - gin_destroy(ge); |
1209 | - freeframe: |
1210 | - utouch_frame_delete_engine(x->fh); |
1211 | - freedev: |
1212 | - if (x->mtdev) |
1213 | - mtdev_close_delete(x->mtdev); |
1214 | - freemem: |
1215 | - evemu_delete(x->evemu); |
1216 | - if (x->fptest) |
1217 | - fclose(x->fptest); |
1218 | - free(x); |
1219 | - ge->impl = 0; |
1220 | - return ret; |
1221 | -} |
1222 | - |
1223 | -void GRAIL_PUBLIC grail_close(struct grail *ge, int fd) |
1224 | -{ |
1225 | - struct grail_impl *x = ge->impl; |
1226 | - gru_destroy(ge); |
1227 | - gin_destroy(ge); |
1228 | - utouch_frame_delete_engine(x->fh); |
1229 | - if (x->mtdev) |
1230 | - mtdev_close_delete(x->mtdev); |
1231 | - evemu_delete(x->evemu); |
1232 | - if (x->fptest) |
1233 | - fclose(x->fptest); |
1234 | - free(x); |
1235 | - ge->impl = 0; |
1236 | -} |
1237 | - |
1238 | int GRAIL_PUBLIC grail_idle(struct grail *ge, int fd, int ms) |
1239 | { |
1240 | struct grail_impl *x = ge->impl; |
1241 | @@ -156,6 +62,12 @@ |
1242 | return ge->impl->touch; |
1243 | } |
1244 | |
1245 | +const struct grail_frame GRAIL_PUBLIC * |
1246 | +grail_get_gesture_frame(const struct grail *ge) |
1247 | +{ |
1248 | + return ge->impl->frame; |
1249 | +} |
1250 | + |
1251 | static void flush_events(struct grail *ge) |
1252 | { |
1253 | struct grail_impl *impl = ge->impl; |
1254 | @@ -169,89 +81,6 @@ |
1255 | } |
1256 | } |
1257 | |
1258 | -static int skip_event(const struct input_event *ev, int count) |
1259 | -{ |
1260 | - switch (ev->type) { |
1261 | - case EV_ABS: |
1262 | - return 1; |
1263 | - case EV_KEY: |
1264 | - return ev->code >= BTN_DIGI && ev->code < BTN_WHEEL; |
1265 | - case EV_SYN: |
1266 | - switch (ev->code) { |
1267 | - case SYN_MT_REPORT: |
1268 | - return 1; |
1269 | - case SYN_REPORT: |
1270 | - return count == 0; |
1271 | - default: |
1272 | - return 0; |
1273 | - } |
1274 | - default: |
1275 | - return 0; |
1276 | - } |
1277 | -} |
1278 | - |
1279 | -static void flush_gestures(struct grail *ge) |
1280 | -{ |
1281 | - struct grail_impl *impl = ge->impl; |
1282 | - struct input_event iev; |
1283 | - struct grail_event gev; |
1284 | - int count = 0; |
1285 | - |
1286 | - while (!evbuf_empty(&impl->evbuf)) { |
1287 | - evbuf_get(&impl->evbuf, &iev); |
1288 | - if (skip_event(&iev, count)) |
1289 | - continue; |
1290 | - if (ge->event) |
1291 | - ge->event(ge, &iev); |
1292 | - if (iev.type == EV_SYN && iev.code == SYN_REPORT) |
1293 | - count = 0; |
1294 | - else |
1295 | - count++; |
1296 | - } |
1297 | - while (!grailbuf_empty(&impl->gbuf)) { |
1298 | - grailbuf_get(&impl->gbuf, &gev); |
1299 | - if (ge->gesture) |
1300 | - ge->gesture(ge, &gev); |
1301 | - } |
1302 | -} |
1303 | - |
1304 | -static int gesture_timeout(struct grail *ge, const struct utouch_frame *frame) |
1305 | -{ |
1306 | - struct gesture_recognizer *gru = ge->gru; |
1307 | - struct gesture_inserter *gin = ge->gin; |
1308 | - |
1309 | - return grail_mask_count(gin->used, sizeof(gin->used)) == 0 && |
1310 | - frame->time - frame->mod_time > gru->move.fm[FM_X].hold_ms; |
1311 | -} |
1312 | - |
1313 | -static void report_frame(struct grail *ge, |
1314 | - const struct utouch_frame *touch, |
1315 | - const struct input_event *syn) |
1316 | -{ |
1317 | - struct grail_impl *impl = ge->impl; |
1318 | - struct grail_event gev; |
1319 | - |
1320 | - impl->touch = touch; |
1321 | - |
1322 | - if (touch->num_active && !touch->prev->num_active) { |
1323 | - impl->ongoing = 1; |
1324 | - impl->gesture = 0; |
1325 | - } |
1326 | - |
1327 | - if (!impl->ongoing) |
1328 | - return; |
1329 | - |
1330 | - gin_frame_begin(ge, touch); |
1331 | - gru_recognize(ge, touch); |
1332 | - gin_frame_end(ge, touch); |
1333 | - |
1334 | - if (!grailbuf_empty(&impl->gbuf)) |
1335 | - impl->gesture = 1; |
1336 | - |
1337 | - if (touch->num_active == 0 || gesture_timeout(ge, touch)) |
1338 | - impl->ongoing &= impl->gesture; |
1339 | -} |
1340 | - |
1341 | static void grail_pump_mtdev(struct grail *ge, const struct input_event *ev) |
1342 | { |
1343 | struct grail_impl *impl = ge->impl; |
1344 | @@ -262,14 +91,12 @@ |
1345 | if (ev->type == EV_SYN || ev->type == EV_ABS || ev->type == EV_KEY) { |
1346 | frame = utouch_frame_pump_mtdev(impl->fh, ev); |
1347 | if (frame) |
1348 | - report_frame(ge, frame, ev); |
1349 | + grail_pump_frame(ge, frame); |
1350 | } |
1351 | |
1352 | if (ev->type == EV_SYN) { |
1353 | if (!impl->ongoing) |
1354 | flush_events(ge); |
1355 | - if (impl->gesture) |
1356 | - flush_gestures(ge); |
1357 | } |
1358 | } |
1359 | |
1360 | |
1361 | === modified file 'src/grail-bits.c' |
1362 | --- src/grail-bits.c 2011-04-28 16:53:57 +0000 |
1363 | +++ src/grail-bits.c 2011-05-05 13:31:23 +0000 |
1364 | @@ -59,6 +59,16 @@ |
1365 | *a++ &= ~*b++; |
1366 | } |
1367 | |
1368 | +int GRAIL_PUBLIC grail_mask_inner(const grail_mask_t *a, const grail_mask_t *b, |
1369 | + int bytes) |
1370 | +{ |
1371 | + int k; |
1372 | + for (k = 0; k < bytes; k++) |
1373 | + if (a[k] & b[k]) |
1374 | + return 1; |
1375 | + return 0; |
1376 | +} |
1377 | + |
1378 | int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes) |
1379 | { |
1380 | int count = 0; |
1381 | |
1382 | === modified file 'src/grail-frame.c' |
1383 | --- src/grail-frame.c 2011-04-28 16:53:57 +0000 |
1384 | +++ src/grail-frame.c 2011-05-05 13:31:23 +0000 |
1385 | @@ -20,6 +20,8 @@ |
1386 | ****************************************************************************/ |
1387 | |
1388 | #include "grail-impl.h" |
1389 | +#include "grail-inserter.h" |
1390 | +#include "grail-recognizer.h" |
1391 | #include <stdlib.h> |
1392 | #include <string.h> |
1393 | #include <math.h> |
1394 | @@ -261,7 +263,7 @@ |
1395 | int i, j, n = impl->num_touches; |
1396 | struct grail_element *best = 0; |
1397 | |
1398 | - if (touch->num_active < 3) { |
1399 | + if (!touch->num_active) { |
1400 | stop_slot(impl, slot); |
1401 | return; |
1402 | } |
1403 | @@ -291,6 +293,8 @@ |
1404 | best = s; |
1405 | } |
1406 | } |
1407 | + if (!best) |
1408 | + best = slots[0]; |
1409 | |
1410 | update_slot(impl, slot, best->transform[1], best->transform[0]); |
1411 | } |
1412 | @@ -372,14 +376,75 @@ |
1413 | } |
1414 | } |
1415 | |
1416 | +static int skip_event(const struct input_event *ev, int count) |
1417 | +{ |
1418 | + switch (ev->type) { |
1419 | + case EV_ABS: |
1420 | + return 1; |
1421 | + case EV_KEY: |
1422 | + return ev->code >= BTN_DIGI && ev->code < BTN_WHEEL; |
1423 | + case EV_SYN: |
1424 | + switch (ev->code) { |
1425 | + case SYN_MT_REPORT: |
1426 | + return 1; |
1427 | + case SYN_REPORT: |
1428 | + return count == 0; |
1429 | + default: |
1430 | + return 0; |
1431 | + } |
1432 | + default: |
1433 | + return 0; |
1434 | + } |
1435 | +} |
1436 | + |
1437 | +static void flush_gestures(struct grail *ge) |
1438 | +{ |
1439 | + struct grail_impl *impl = ge->impl; |
1440 | + struct input_event iev; |
1441 | + struct grail_event gev; |
1442 | + int count = 0; |
1443 | + |
1444 | + while (!evbuf_empty(&impl->evbuf)) { |
1445 | + evbuf_get(&impl->evbuf, &iev); |
1446 | + if (skip_event(&iev, count)) |
1447 | + continue; |
1448 | + if (ge->event) |
1449 | + ge->event(ge, &iev); |
1450 | + if (iev.type == EV_SYN && iev.code == SYN_REPORT) |
1451 | + count = 0; |
1452 | + else |
1453 | + count++; |
1454 | + } |
1455 | + while (!grailbuf_empty(&impl->gbuf)) { |
1456 | + grailbuf_get(&impl->gbuf, &gev); |
1457 | + if (ge->gesture) |
1458 | + ge->gesture(ge, &gev); |
1459 | + } |
1460 | +} |
1461 | + |
1462 | +static int gesture_timeout(struct grail *ge, const struct utouch_frame *frame) |
1463 | +{ |
1464 | + struct gesture_inserter *gin = ge->gin; |
1465 | + struct grail_impl *impl = ge->impl; |
1466 | + |
1467 | + return grail_mask_count(gin->used, sizeof(gin->used)) == 0 && |
1468 | + frame->time - frame->mod_time > impl->ctl->drop_x_ms; |
1469 | +} |
1470 | + |
1471 | const struct grail_frame GRAIL_PUBLIC * |
1472 | grail_pump_frame(grail_handle ge, const struct utouch_frame *touch) |
1473 | { |
1474 | struct grail_impl *impl = ge->impl; |
1475 | - struct grail_frame *frame = impl->frames[impl->nextframe]; |
1476 | - const struct grail_frame *prev = frame->prev; |
1477 | + struct grail_frame *frame; |
1478 | + const struct grail_frame *prev; |
1479 | int i; |
1480 | |
1481 | + if (!impl->frames) |
1482 | + return 0; |
1483 | + |
1484 | + frame = impl->frames[impl->nextframe]; |
1485 | + prev = frame->prev; |
1486 | + |
1487 | if (touch->slot_revision == touch->prev->slot_revision && |
1488 | !prev->num_ongoing) |
1489 | return 0; |
1490 | @@ -394,5 +459,34 @@ |
1491 | |
1492 | impl->nextframe = (impl->nextframe + 1) % impl->num_frames; |
1493 | |
1494 | + if (!ge->gesture) |
1495 | + return frame; |
1496 | + |
1497 | + impl->touch = touch; |
1498 | + impl->frame = frame; |
1499 | + |
1500 | + if (touch->num_active && !touch->prev->num_active) { |
1501 | + impl->ongoing = 1; |
1502 | + impl->gesture = 0; |
1503 | + } |
1504 | + |
1505 | + if (!impl->ongoing) |
1506 | + return frame; |
1507 | + |
1508 | + gin_frame_begin(ge, touch); |
1509 | + |
1510 | + gru_recognize(ge, frame, touch); |
1511 | + |
1512 | + gin_frame_end(ge, touch); |
1513 | + |
1514 | + if (!grailbuf_empty(&impl->gbuf)) |
1515 | + impl->gesture = 1; |
1516 | + |
1517 | + if (touch->num_active == 0 || gesture_timeout(ge, touch)) |
1518 | + impl->ongoing &= impl->gesture; |
1519 | + |
1520 | + if (impl->gesture) |
1521 | + flush_gestures(ge); |
1522 | + |
1523 | return frame; |
1524 | } |
1525 | |
1526 | === removed file 'src/grail-gestures.c' |
1527 | --- src/grail-gestures.c 2011-04-28 16:53:57 +0000 |
1528 | +++ src/grail-gestures.c 1970-01-01 00:00:00 +0000 |
1529 | @@ -1,210 +0,0 @@ |
1530 | -/***************************************************************************** |
1531 | - * |
1532 | - * grail - Gesture Recognition And Instantiation Library |
1533 | - * |
1534 | - * Copyright (C) 2010-2011 Canonical Ltd. |
1535 | - * |
1536 | - * This program is free software: you can redistribute it and/or modify it |
1537 | - * under the terms of the GNU General Public License as published by the |
1538 | - * Free Software Foundation, either version 3 of the License, or (at your |
1539 | - * option) any later version. |
1540 | - * |
1541 | - * This program is distributed in the hope that it will be useful, but |
1542 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
1543 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1544 | - * General Public License for more details. |
1545 | - * |
1546 | - * You should have received a copy of the GNU General Public License along |
1547 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
1548 | - * |
1549 | - ****************************************************************************/ |
1550 | - |
1551 | -#include "grail-recognizer.h" |
1552 | -#include "grail-impl.h" |
1553 | -#include <math.h> |
1554 | - |
1555 | -static const float FM_SN[DIM_FM] = { 1000, 1000, 1000, 1000 }; |
1556 | -static const float FM_BAR[DIM_FM] = { 50, 50, 50, 50 }; |
1557 | -static const grail_time_t FM_HOLD_MS[DIM_FM] = { 60, 60, 60, 60 }; |
1558 | -static const grail_time_t FM_BAR_MS[DIM_FM] = { 300, 300, 500, 500 }; |
1559 | -static const grail_time_t SAMPLE_MS = 10; |
1560 | -static const float EPS = 1e-3; |
1561 | - |
1562 | -static void compute_position(float *x, float *y, |
1563 | - const struct utouch_frame *frame) |
1564 | -{ |
1565 | - int i, n = frame->num_active; |
1566 | - *x = 0; |
1567 | - *y = 0; |
1568 | - if (n < 1) |
1569 | - return; |
1570 | - for (i = 0; i < n; i++) { |
1571 | - const struct utouch_contact *t = frame->active[i]; |
1572 | - *x += t->x; |
1573 | - *y += t->y; |
1574 | - } |
1575 | - *x /= n; |
1576 | - *y /= n; |
1577 | -} |
1578 | - |
1579 | -static float compute_radius(float x, float y, |
1580 | - const struct utouch_frame *frame) |
1581 | -{ |
1582 | - int i, n = frame->num_active; |
1583 | - float r = 0, r2 = 0; |
1584 | - if (n < 2) |
1585 | - return r; |
1586 | - for (i = 0; i < n; i++) { |
1587 | - const struct utouch_contact *t = frame->active[i]; |
1588 | - float dx = t->x - x; |
1589 | - float dy = t->y - y; |
1590 | - r2 += dx * dx + dy * dy; |
1591 | - } |
1592 | - r2 /= n; |
1593 | - r = sqrt(r2); |
1594 | - return r; |
1595 | -} |
1596 | - |
1597 | -static float compute_rotation(float x, float y, float r, |
1598 | - const struct utouch_frame *frame) |
1599 | -{ |
1600 | - int i, n = frame->num_active; |
1601 | - float da = 0, darc2 = 0; |
1602 | - if (n < 2) |
1603 | - return da; |
1604 | - for (i = 0; i < n; i++) { |
1605 | - const struct utouch_contact *t = frame->active[i]; |
1606 | - const struct utouch_contact *ot = t->prev; |
1607 | - float dx = t->x - x; |
1608 | - float dy = t->y - y; |
1609 | - float mx = t->x - ot->x; |
1610 | - float my = t->y - ot->y; |
1611 | - darc2 += dx * my - dy * mx; |
1612 | - } |
1613 | - darc2 /= n; |
1614 | - da = darc2 / (r * r); |
1615 | - return da; |
1616 | -} |
1617 | - |
1618 | -static void move_reset(struct move_model *m, int i, float x, grail_time_t t) |
1619 | -{ |
1620 | - struct filter_model *fm = &m->fm[i]; |
1621 | - fm->raw_delta = 0; |
1622 | - fm->action_delta = 0; |
1623 | - fm->velocity = 0; |
1624 | - fm->value = x; |
1625 | - fm->original = x; |
1626 | - fm->original_ms = t; |
1627 | - fm->sample = x; |
1628 | - fm->sample_ms = t; |
1629 | - m->tickle &= ~(1 << i); |
1630 | - m->active &= ~(1 << i); |
1631 | - m->timeout &= ~(1 << i); |
1632 | -} |
1633 | - |
1634 | -static void move_update(struct move_model *m, int i, float x, grail_time_t t) |
1635 | -{ |
1636 | - struct filter_model *fm = &m->fm[i]; |
1637 | - float dt = t - fm->sample_ms; |
1638 | - fm->raw_delta = x - fm->value; |
1639 | - fm->action_delta = fm->raw_delta; |
1640 | - fm->value = x; |
1641 | - if (dt > SAMPLE_MS) { |
1642 | - fm->velocity = (x - fm->sample) / dt; |
1643 | - fm->sample = x; |
1644 | - fm->sample_ms = t; |
1645 | - } |
1646 | - if (fabs(fm->raw_delta) > EPS) |
1647 | - m->tickle |= (1 << i); |
1648 | - else |
1649 | - m->tickle &= ~(1 << i); |
1650 | - if (m->active & (1 << i)) |
1651 | - return; |
1652 | - fm->action_delta = 0; |
1653 | - if (fabs(x - fm->original) > fm->bar) { |
1654 | - if (t - fm->original_ms > fm->hold_ms) { |
1655 | - m->active |= (1 << i); |
1656 | - fm->action_delta = x - fm->original; |
1657 | - } |
1658 | - } else if (t - fm->original_ms > fm->bar_ms) { |
1659 | - m->timeout |= (1 << i); |
1660 | - } |
1661 | -} |
1662 | - |
1663 | -void gru_init_motion(struct grail *ge) |
1664 | -{ |
1665 | - struct utouch_surface *s = utouch_frame_get_surface(ge->impl->fh); |
1666 | - struct gesture_recognizer *gru = ge->gru; |
1667 | - struct move_model *m = &gru->move; |
1668 | - float D[DIM_FM]; |
1669 | - int i; |
1670 | - D[FM_X] = s->mapped_max_x - s->mapped_min_x; |
1671 | - D[FM_Y] = s->mapped_max_y - s->mapped_min_y; |
1672 | - D[FM_R] = sqrt(D[FM_X] * D[FM_X] + D[FM_Y] * D[FM_Y]); |
1673 | - D[FM_A] = 2 * M_PI; |
1674 | - for (i = 0; i < DIM_FM; i++) { |
1675 | - m->fm[i].fuzz = D[i] / FM_SN[i]; |
1676 | - m->fm[i].bar = D[i] / FM_BAR[i]; |
1677 | - m->fm[i].hold_ms = FM_HOLD_MS[i]; |
1678 | - m->fm[i].bar_ms = FM_BAR_MS[i]; |
1679 | - } |
1680 | -} |
1681 | - |
1682 | -void gru_motion(struct grail *ge, |
1683 | - const struct utouch_frame *frame) |
1684 | -{ |
1685 | - const struct utouch_surface *s = utouch_frame_get_surface(ge->impl->fh); |
1686 | - struct gesture_recognizer *gru = ge->gru; |
1687 | - struct move_model *m = &gru->move; |
1688 | - grail_time_t t = frame->time; |
1689 | - float x, y, r, a; |
1690 | - |
1691 | - compute_position(&x, &y, frame); |
1692 | - if (frame->prev->revision != frame->revision) { |
1693 | - r = compute_radius(x, y, frame); |
1694 | - a = 0; |
1695 | - move_reset(m, FM_X, x, t); |
1696 | - move_reset(m, FM_Y, y, t); |
1697 | - move_reset(m, FM_R, r, t); |
1698 | - move_reset(m, FM_A, a, t); |
1699 | - m->single = 0; |
1700 | - m->multi = 0; |
1701 | - } else if (frame->num_active < 2) { |
1702 | - r = 0; |
1703 | - a = 0; |
1704 | - move_update(m, FM_X, x, t); |
1705 | - move_update(m, FM_Y, y, t); |
1706 | - move_reset(m, FM_R, r, t); |
1707 | - move_reset(m, FM_A, a, t); |
1708 | - m->single = 1; |
1709 | - m->multi = 0; |
1710 | - } else { |
1711 | - r = compute_radius(x, y, frame); |
1712 | - a = m->fm[FM_A].value; |
1713 | - if (!s->is_semi_mt) |
1714 | - a += compute_rotation(x, y, r, frame); |
1715 | - move_update(m, FM_X, x, t); |
1716 | - move_update(m, FM_Y, y, t); |
1717 | - move_update(m, FM_R, r, t); |
1718 | - move_update(m, FM_A, a, t); |
1719 | - m->single = 0; |
1720 | - m->multi = 1; |
1721 | - } |
1722 | - m->ntouch = frame->num_active; |
1723 | - m->time = t; |
1724 | -} |
1725 | - |
1726 | -void gru_event(struct grail *ge, int gid, |
1727 | - const struct move_model *m, |
1728 | - const grail_prop_t *prop, int nprop) |
1729 | -{ |
1730 | - gin_gid_event(ge, gid, m->fm[FM_X].value, m->fm[FM_Y].value, m->ntouch, |
1731 | - prop, nprop, 0); |
1732 | -} |
1733 | - |
1734 | -void gru_end(struct grail *ge, int gid, const struct move_model *m, |
1735 | - const grail_prop_t *prop, int nprop) |
1736 | -{ |
1737 | - gin_gid_end(ge, gid, m->fm[FM_X].value, m->fm[FM_Y].value, m->ntouch, |
1738 | - prop, nprop); |
1739 | -} |
1740 | |
1741 | === removed file 'src/grail-gestures.h' |
1742 | --- src/grail-gestures.h 2011-04-28 16:53:57 +0000 |
1743 | +++ src/grail-gestures.h 1970-01-01 00:00:00 +0000 |
1744 | @@ -1,115 +0,0 @@ |
1745 | -/***************************************************************************** |
1746 | - * |
1747 | - * grail - Gesture Recognition And Instantiation Library |
1748 | - * |
1749 | - * Copyright (C) 2010-2011 Canonical Ltd. |
1750 | - * |
1751 | - * This program is free software: you can redistribute it and/or modify it |
1752 | - * under the terms of the GNU General Public License as published by the |
1753 | - * Free Software Foundation, either version 3 of the License, or (at your |
1754 | - * option) any later version. |
1755 | - * |
1756 | - * This program is distributed in the hope that it will be useful, but |
1757 | - * WITHOUT ANY WARRANTY; without even the implied warranty of |
1758 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1759 | - * General Public License for more details. |
1760 | - * |
1761 | - * You should have received a copy of the GNU General Public License along |
1762 | - * with this program. If not, see <http://www.gnu.org/licenses/>. |
1763 | - * |
1764 | - ****************************************************************************/ |
1765 | - |
1766 | -#ifndef _GRAIL_GESTURES_H |
1767 | -#define _GRAIL_GESTURES_H |
1768 | - |
1769 | -#include "grail-inserter.h" |
1770 | - |
1771 | -#define PRIO_POINTER 1 |
1772 | -#define PRIO_GESTURE 2 |
1773 | -#define PRIO_ENV 3 |
1774 | -#define PRIO_META 4 |
1775 | -#define PRIO_TAP 5 |
1776 | - |
1777 | -#define DIM_FM 4 |
1778 | - |
1779 | -#define FM_X 0 |
1780 | -#define FM_Y 1 |
1781 | -#define FM_R 2 |
1782 | -#define FM_A 3 |
1783 | - |
1784 | -struct filter_model { |
1785 | - float raw_delta; |
1786 | - float action_delta; |
1787 | - float velocity; |
1788 | - float value; |
1789 | - float original; |
1790 | - float sample; |
1791 | - float fuzz; |
1792 | - float bar; |
1793 | - grail_time_t original_ms; |
1794 | - grail_time_t sample_ms; |
1795 | - grail_time_t hold_ms; |
1796 | - grail_time_t bar_ms; |
1797 | -}; |
1798 | - |
1799 | -struct move_model { |
1800 | - struct filter_model fm[DIM_FM]; |
1801 | - int tickle, active, timeout; |
1802 | - int single, multi, ntouch; |
1803 | - grail_time_t time; |
1804 | -}; |
1805 | - |
1806 | -void gru_init_motion(struct grail *ge); |
1807 | -void gru_motion(struct grail *ge, |
1808 | - const struct utouch_frame *frame); |
1809 | -void gru_event(struct grail *ge, int gid, |
1810 | - const struct move_model *move, |
1811 | - const grail_prop_t *prop, int nprop); |
1812 | -void gru_end(struct grail *ge, int gid, |
1813 | - const struct move_model *move, |
1814 | - const grail_prop_t *prop, int nprop); |
1815 | - |
1816 | -struct combo_model { |
1817 | - int active, gid; |
1818 | - int mintouch, maxtouch; |
1819 | - int nprop; |
1820 | - grail_prop_t prop[DIM_GRAIL_PROP]; |
1821 | -}; |
1822 | - |
1823 | -int gru_touch(struct grail *ge, |
1824 | - const struct utouch_frame *frame); |
1825 | -int gru_drag(struct grail *ge, |
1826 | - const struct utouch_frame *frame); |
1827 | -int gru_pinch(struct grail *ge, |
1828 | - const struct utouch_frame *frame); |
1829 | -int gru_rotate(struct grail *ge, |
1830 | - const struct utouch_frame *frame); |
1831 | - |
1832 | -static inline int out_of_bounds(const struct combo_model *s, |
1833 | - const struct move_model *m) |
1834 | -{ |
1835 | - return m->ntouch < s->mintouch || m->ntouch > s->maxtouch; |
1836 | -} |
1837 | - |
1838 | -int gru_wintouch(struct grail *ge, |
1839 | - const struct utouch_frame *frame); |
1840 | -int gru_windrag(struct grail *ge, |
1841 | - const struct utouch_frame *frame); |
1842 | -int gru_winpinch(struct grail *ge, |
1843 | - const struct utouch_frame *frame); |
1844 | -int gru_winrotate(struct grail *ge, |
1845 | - const struct utouch_frame *frame); |
1846 | - |
1847 | -struct tapping_model { |
1848 | - grail_time_t start; |
1849 | - int mintouch, maxtouch; |
1850 | - int active, gid, tap; |
1851 | - int nprop; |
1852 | - grail_prop_t prop[DIM_GRAIL_PROP]; |
1853 | -}; |
1854 | - |
1855 | -int gru_tapping(struct grail *ge, |
1856 | - const struct utouch_frame *frame); |
1857 | - |
1858 | -#endif |
1859 | - |
1860 | |
1861 | === modified file 'src/grail-impl.h' |
1862 | --- src/grail-impl.h 2011-04-28 16:53:57 +0000 |
1863 | +++ src/grail-impl.h 2011-05-05 13:31:23 +0000 |
1864 | @@ -59,6 +59,35 @@ |
1865 | |
1866 | void destroy_grail2(struct grail_impl *x); |
1867 | |
1868 | +/* |
1869 | + * struct grail_impl - gesture engine state |
1870 | + * @evemu: evemu instance (grail1 only) |
1871 | + * @mtdev: mtdev instance (grail1 only) |
1872 | + * @fh: frame handler instance (grail1: owner, grail2: referenced) |
1873 | + * @touch: current touch frame |
1874 | + * @evbuf: input event buffer (grail1 only) |
1875 | + * @gbuf: gesture event buffer (grail1 only) |
1876 | + * @filter_abs: if true, abs events are filtered (grail1 only) |
1877 | + * @ongoing: if true, a gesture is ongoing (grail1 only) |
1878 | + * @gesture: if true, a gesture is active (events sent) (grail1 only) |
1879 | + * @fptest: file pointer used for data input from file (grail1 only) |
1880 | + * @ctl: mutable grail control structure |
1881 | + * @select: grail event secltion callback |
1882 | + * @num_frames: number of gestures frames in cyclic buffer |
1883 | + * @num_slots: number of allocated gesture element slots |
1884 | + * @num_touches: number of touches supported for frame instance |
1885 | + * @nextframe: index of next frame to be (re)used |
1886 | + * @seqid: next gesture frame sequence number |
1887 | + * @control_size: maximum number of bytes for grail_control struct |
1888 | + * @frame_size: maximum number of bytes for grail_frame struct |
1889 | + * @slot_size: maximum number of bytes for grail_element struct |
1890 | + * @frames: cyclic array of allocated gesture frames |
1891 | + * @frame: current gesture frame (grail1 only) |
1892 | + * |
1893 | + * The grail engine supports both the grail1 interface, with |
1894 | + * open/close and event pulling, and the grail2 interface, with |
1895 | + * new/delete, gesture frames and event pumping. |
1896 | + */ |
1897 | struct grail_impl { |
1898 | struct evemu_device *evemu; |
1899 | struct mtdev *mtdev; |
1900 | @@ -82,6 +111,7 @@ |
1901 | unsigned int frame_size; |
1902 | unsigned int slot_size; |
1903 | struct grail_frame **frames; |
1904 | + const struct grail_frame *frame; |
1905 | }; |
1906 | |
1907 | #endif |
1908 | |
1909 | === modified file 'src/grail-init.c' |
1910 | --- src/grail-init.c 2011-04-28 16:53:57 +0000 |
1911 | +++ src/grail-init.c 2011-05-05 13:31:23 +0000 |
1912 | @@ -36,12 +36,13 @@ |
1913 | c->bar_center_y = 0.03; |
1914 | c->bar_drag_x = 0.03; |
1915 | c->bar_drag_y = 0.03; |
1916 | - c->bar_scale = 0.3; |
1917 | - c->bar_angle = 0.1; |
1918 | + c->bar_scale = 0.2; |
1919 | + c->bar_angle = 0.2; |
1920 | c->drop_x_ms = 300; |
1921 | c->drop_y_ms = 300; |
1922 | c->drop_scale_ms = 300; |
1923 | c->drop_angle_ms = 300; |
1924 | + c->tap_time_ms = 300; |
1925 | |
1926 | return c; |
1927 | } |
1928 | @@ -206,6 +207,7 @@ |
1929 | { |
1930 | struct grail *ge; |
1931 | struct grail_impl *x; |
1932 | + int ret; |
1933 | |
1934 | ge = calloc(1, sizeof(*ge)); |
1935 | if (!ge) |
1936 | @@ -219,8 +221,17 @@ |
1937 | goto out; |
1938 | |
1939 | ge->impl = x; |
1940 | + |
1941 | + ret = gin_init(ge); |
1942 | + if (ret) |
1943 | + goto out; |
1944 | + ret = gru_init(ge); |
1945 | + if (ret) |
1946 | + goto freegin; |
1947 | + |
1948 | return ge; |
1949 | - |
1950 | + freegin: |
1951 | + gin_destroy(ge); |
1952 | out: |
1953 | free(x); |
1954 | free(ge); |
1955 | @@ -229,6 +240,8 @@ |
1956 | |
1957 | void GRAIL_PUBLIC grail_delete(grail_handle ge) |
1958 | { |
1959 | + gru_destroy(ge); |
1960 | + gin_destroy(ge); |
1961 | destroy_grail2(ge->impl); |
1962 | free(ge->impl); |
1963 | free(ge); |
1964 | |
1965 | === modified file 'src/grail-inserter.c' |
1966 | --- src/grail-inserter.c 2011-04-28 16:53:57 +0000 |
1967 | +++ src/grail-inserter.c 2011-05-05 13:31:23 +0000 |
1968 | @@ -19,7 +19,6 @@ |
1969 | * |
1970 | ****************************************************************************/ |
1971 | |
1972 | -#include "grail-gestures.h" |
1973 | #include "grail-inserter.h" |
1974 | #include "grail-impl.h" |
1975 | #include <malloc.h> |
1976 | @@ -38,18 +37,6 @@ |
1977 | return -1; |
1978 | } |
1979 | |
1980 | -static int mask_overlap(const grail_mask_t *a, const grail_mask_t *b, |
1981 | - int bytes) |
1982 | -{ |
1983 | - int i; |
1984 | - |
1985 | - for (i = 0; i < bytes; i++) |
1986 | - if (a[i] & b[i]) |
1987 | - return 1; |
1988 | - |
1989 | - return 0; |
1990 | -} |
1991 | - |
1992 | // todo: spanning tree for multi-user case |
1993 | static void setup_new_gestures(struct grail *ge, |
1994 | const struct utouch_frame *frame) |
1995 | @@ -158,15 +145,6 @@ |
1996 | |
1997 | grail_mask_foreach(i, gin->used, sizeof(gin->used)) { |
1998 | struct slot_state *s = &gin->state[i]; |
1999 | - if (!s->timeout) |
2000 | - continue; |
2001 | - if (mask_overlap(keep, s->span, sizeof(keep))) |
2002 | - continue; |
2003 | - gin_gid_discard(ge, s->id); |
2004 | - } |
2005 | - |
2006 | - grail_mask_foreach(i, gin->used, sizeof(gin->used)) { |
2007 | - struct slot_state *s = &gin->state[i]; |
2008 | struct gesture_event ev; |
2009 | grail_mask_set(gin->types, s->type); |
2010 | if (s->priority < hold[s->slice] && !s->sent) |
2011 | @@ -203,7 +181,6 @@ |
2012 | s->priority = priority; |
2013 | s->slice = 0; |
2014 | } |
2015 | - s->timeout = 0; |
2016 | s->sent = 0; |
2017 | s->id = gin->gestureid++ & MAX_GESTURE_ID; |
2018 | s->status = GRAIL_STATUS_BEGIN; |
2019 | @@ -231,13 +208,6 @@ |
2020 | grail_mask_set(gin->unused, i); |
2021 | } |
2022 | |
2023 | -void gin_gid_timeout(struct grail *ge, int gid) |
2024 | -{ |
2025 | - int i = find_gslot(ge->gin, gid); |
2026 | - if (i >= 0) |
2027 | - ge->gin->state[i].timeout = 1; |
2028 | -} |
2029 | - |
2030 | void gin_gid_event(struct grail *ge, int gid, |
2031 | float x, float y, int ntouch, |
2032 | const grail_prop_t *prop, int nprop, |
2033 | @@ -298,7 +268,4 @@ |
2034 | s->mapped_min_y = tmin->y; |
2035 | s->mapped_max_x = tmax->x; |
2036 | s->mapped_max_y = tmax->y; |
2037 | - |
2038 | - if (ge->gru) |
2039 | - gru_init_motion(ge); |
2040 | } |
2041 | |
2042 | === modified file 'src/grail-inserter.h' |
2043 | --- src/grail-inserter.h 2011-04-28 16:53:57 +0000 |
2044 | +++ src/grail-inserter.h 2011-05-05 13:31:23 +0000 |
2045 | @@ -33,11 +33,27 @@ |
2046 | |
2047 | #define DIM_CLIENT 32 |
2048 | |
2049 | +/* |
2050 | + * struct slot_state - gesture state |
2051 | + * @type: gesture type of this gesture |
2052 | + * @priority: priority of this gesture |
2053 | + * @slice: 0: normal gesture, 1: touch gesture |
2054 | + * @sent: events have been sent for this gesture |
2055 | + * @id: unique identifier of this gesture |
2056 | + * @status: gesture status (begin, update, end) |
2057 | + * @nclient: number of clients listening to this gesture |
2058 | + * @client_id: array of clients listening to this gesture |
2059 | + * @span: bitmask of contact slots used in this gesture |
2060 | + * @buf: gesture event buffer |
2061 | + * |
2062 | + * This structure keeps track of an individual gesture, from the |
2063 | + * tentative state before being qualified as a gesture, through the |
2064 | + * beginning of the gesture to the end of the gesture. |
2065 | + */ |
2066 | struct slot_state { |
2067 | int type; |
2068 | int priority; |
2069 | int slice; |
2070 | - int timeout; |
2071 | int sent; |
2072 | int id; |
2073 | int status; |
2074 | @@ -47,6 +63,20 @@ |
2075 | struct gebuf buf; |
2076 | }; |
2077 | |
2078 | +/* |
2079 | + * struct gesture_inserter - gesture inserter state |
2080 | + * @state: array of simultaneous gesture states |
2081 | + * @types: bitmask of ongoing gesture types |
2082 | + * @unused: bitmask of unused gesture slots |
2083 | + * @fresh: bitmask of slots initiated in this frame |
2084 | + * @used: bitmask of used gesture slots |
2085 | + * @time: time of current gesture frame |
2086 | + * @gestureid: next gesture id to be used |
2087 | + * @grab_active: used to signal an active system gesture grab |
2088 | + * @grab_client: the grabbing client |
2089 | + * |
2090 | + * This is the state of the gesture inserter. |
2091 | + */ |
2092 | struct gesture_inserter { |
2093 | struct slot_state state[DIM_INSTANCE]; |
2094 | grail_mask_t types[DIM_GRAIL_TYPE_BYTES]; |
2095 | @@ -80,7 +110,6 @@ |
2096 | int gin_gid_begin(struct grail *ge, int type, int priority, |
2097 | const struct utouch_frame *frame); |
2098 | void gin_gid_discard(struct grail *ge, int gid); |
2099 | -void gin_gid_timeout(struct grail *ge, int gid); |
2100 | |
2101 | void gin_gid_event(struct grail *ge, int gid, |
2102 | float x, float y, int ntouch, |
2103 | |
2104 | === modified file 'src/grail-legacy.c' |
2105 | --- src/grail-legacy.c 2011-04-28 16:53:57 +0000 |
2106 | +++ src/grail-legacy.c 2011-05-05 13:31:23 +0000 |
2107 | @@ -31,6 +31,111 @@ |
2108 | |
2109 | #ifndef GRAIL_NO_LEGACY_ABI |
2110 | |
2111 | +#define DIM_FRAMES 100 |
2112 | +#define FRAME_RATE 100 |
2113 | + |
2114 | +int GRAIL_PUBLIC grail_open(struct grail *ge, int fd) |
2115 | +{ |
2116 | + struct grail_impl *x; |
2117 | + struct stat fs; |
2118 | + int ret; |
2119 | + |
2120 | + ret = fstat(fd, &fs); |
2121 | + if (ret) |
2122 | + return ret; |
2123 | + |
2124 | + x = calloc(1, sizeof(*x)); |
2125 | + if (!x) |
2126 | + return -ENOMEM; |
2127 | + |
2128 | + if (!fs.st_rdev) |
2129 | + x->fptest = fdopen(fd, "r"); |
2130 | + |
2131 | + x->evemu = evemu_new(x->fptest ? "fptest" : 0); |
2132 | + if (!x->evemu) { |
2133 | + ret = -ENOMEM; |
2134 | + goto freemem; |
2135 | + } |
2136 | + if (x->fptest) |
2137 | + ret = evemu_read(x->evemu, x->fptest) <= 0; |
2138 | + else |
2139 | + ret = evemu_extract(x->evemu, fd); |
2140 | + if (ret) |
2141 | + goto freemem; |
2142 | + if (!utouch_frame_is_supported_mtdev(x->evemu)) { |
2143 | + ret = -ENODEV; |
2144 | + goto freemem; |
2145 | + } |
2146 | + |
2147 | + if (!x->fptest) { |
2148 | + x->mtdev = mtdev_new_open(fd); |
2149 | + if (!x->mtdev) { |
2150 | + ret = -ENOMEM; |
2151 | + goto freemem; |
2152 | + } |
2153 | + } |
2154 | + x->fh = utouch_frame_new_engine(DIM_FRAMES, DIM_TOUCH, FRAME_RATE); |
2155 | + if (!x->fh) { |
2156 | + ret = -ENOMEM; |
2157 | + goto freedev; |
2158 | + } |
2159 | + ret = utouch_frame_init_mtdev(x->fh, x->evemu); |
2160 | + if (ret) |
2161 | + goto freeframe; |
2162 | + |
2163 | + ret = create_grail2(x, x->fh, DIM_FRAMES, NULL, |
2164 | + GRAIL_VERSION, |
2165 | + sizeof(struct grail_control), |
2166 | + sizeof(struct grail_frame), |
2167 | + sizeof(struct grail_element)); |
2168 | + if (ret) |
2169 | + goto freeframe; |
2170 | + |
2171 | + ge->impl = x; |
2172 | + |
2173 | + ret = gin_init(ge); |
2174 | + if (ret) |
2175 | + goto freegrail2; |
2176 | + |
2177 | + ret = gru_init(ge); |
2178 | + if (ret) |
2179 | + goto freegin; |
2180 | + |
2181 | + return 0; |
2182 | + freegin: |
2183 | + gin_destroy(ge); |
2184 | + freegrail2: |
2185 | + destroy_grail2(x); |
2186 | + freeframe: |
2187 | + utouch_frame_delete_engine(x->fh); |
2188 | + freedev: |
2189 | + if (x->mtdev) |
2190 | + mtdev_close_delete(x->mtdev); |
2191 | + freemem: |
2192 | + evemu_delete(x->evemu); |
2193 | + if (x->fptest) |
2194 | + fclose(x->fptest); |
2195 | + free(x); |
2196 | + ge->impl = 0; |
2197 | + return ret; |
2198 | +} |
2199 | + |
2200 | +void GRAIL_PUBLIC grail_close(struct grail *ge, int fd) |
2201 | +{ |
2202 | + struct grail_impl *x = ge->impl; |
2203 | + gru_destroy(ge); |
2204 | + gin_destroy(ge); |
2205 | + destroy_grail2(x); |
2206 | + utouch_frame_delete_engine(x->fh); |
2207 | + if (x->mtdev) |
2208 | + mtdev_close_delete(x->mtdev); |
2209 | + evemu_delete(x->evemu); |
2210 | + if (x->fptest) |
2211 | + fclose(x->fptest); |
2212 | + free(x); |
2213 | + ge->impl = 0; |
2214 | +} |
2215 | + |
2216 | void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage) |
2217 | { |
2218 | struct grail_impl *x = ge->impl; |
2219 | |
2220 | === modified file 'src/grail-recognizer.c' |
2221 | --- src/grail-recognizer.c 2011-04-28 16:53:57 +0000 |
2222 | +++ src/grail-recognizer.c 2011-05-05 13:31:23 +0000 |
2223 | @@ -23,6 +23,177 @@ |
2224 | #include <string.h> |
2225 | #include <malloc.h> |
2226 | #include <errno.h> |
2227 | +#include <math.h> |
2228 | + |
2229 | +static const int MAX_TOUCH_GESTURE = 5; |
2230 | + |
2231 | +static void touch_props(const struct gesture_inserter *gin, |
2232 | + struct combo_model *s, const struct grail_element *m, |
2233 | + const struct utouch_frame *frame) |
2234 | +{ |
2235 | + s->nprop = 0; |
2236 | +} |
2237 | + |
2238 | +static void drag_props(const struct gesture_inserter *gin, |
2239 | + struct combo_model *s, const struct grail_element *m, |
2240 | + const struct utouch_frame *frame) |
2241 | +{ |
2242 | + s->prop[GRAIL_PROP_DRAG_DX] = m->center.x - m->prev->center.x; |
2243 | + s->prop[GRAIL_PROP_DRAG_DY] = m->center.y - m->prev->center.y; |
2244 | + s->prop[GRAIL_PROP_DRAG_VX] = m->velocity.x; |
2245 | + s->prop[GRAIL_PROP_DRAG_VY] = m->velocity.y; |
2246 | + s->prop[GRAIL_PROP_DRAG_X] = m->center.x - m->start_center.x; |
2247 | + s->prop[GRAIL_PROP_DRAG_Y] = m->center.y - m->start_center.x; |
2248 | + s->nprop = 6; |
2249 | +} |
2250 | + |
2251 | +static void pinch_props(const struct gesture_inserter *gin, |
2252 | + struct combo_model *s, const struct grail_element *m, |
2253 | + const struct utouch_frame *frame) |
2254 | +{ |
2255 | + s->prop[GRAIL_PROP_PINCH_DR] = |
2256 | + sqrt(m->radius2) - sqrt(m->prev->radius2); |
2257 | + s->prop[GRAIL_PROP_PINCH_VR] = 0; |
2258 | + s->prop[GRAIL_PROP_PINCH_R] = sqrt(m->radius2); |
2259 | + s->nprop = 3; |
2260 | +} |
2261 | + |
2262 | +static void rotate_props(const struct gesture_inserter *gin, |
2263 | + struct combo_model *s, const struct grail_element *m, |
2264 | + const struct utouch_frame *frame) |
2265 | +{ |
2266 | + s->prop[GRAIL_PROP_ROTATE_DA] = m->angle - m->prev->angle; |
2267 | + s->prop[GRAIL_PROP_ROTATE_VA] = 0; |
2268 | + s->prop[GRAIL_PROP_ROTATE_A] = m->angle; |
2269 | + s->nprop = 3; |
2270 | +} |
2271 | + |
2272 | +static void tap_props(const struct gesture_inserter *gin, |
2273 | + struct combo_model *s, const struct grail_element *m, |
2274 | + const struct utouch_frame *frame) |
2275 | +{ |
2276 | + s->prop[GRAIL_PROP_TAP_DT] = frame->time - s->start; |
2277 | + s->prop[GRAIL_PROP_TAP_X] = m->center.x; |
2278 | + s->prop[GRAIL_PROP_TAP_Y] = m->center.y; |
2279 | + s->nprop = 3; |
2280 | +} |
2281 | + |
2282 | +static const struct gesture_handler touch_handler = { |
2283 | + 0, |
2284 | + { |
2285 | + { -1, 0, 0, 0 }, |
2286 | + { GRAIL_TYPE_TOUCH1, 1, 1, PRIO_DRAG }, |
2287 | + { GRAIL_TYPE_TOUCH2, 2, 2, PRIO_DRAG }, |
2288 | + { GRAIL_TYPE_TOUCH3, 3, 3, PRIO_DRAG }, |
2289 | + { GRAIL_TYPE_TOUCH4, 4, 4, PRIO_DRAG }, |
2290 | + { GRAIL_TYPE_TOUCH5, 5, 5, PRIO_DRAG } |
2291 | + }, |
2292 | + touch_props |
2293 | +}; |
2294 | + |
2295 | +static const struct gesture_handler drag_handler = { |
2296 | + GRAIL_EXPECT_DRAG_X | GRAIL_EXPECT_DRAG_Y, |
2297 | + { |
2298 | + { -1, 0, 0, 0 }, |
2299 | + { GRAIL_TYPE_DRAG1, 1, 1, PRIO_DRAG }, |
2300 | + { GRAIL_TYPE_DRAG2, 2, 2, PRIO_DRAG }, |
2301 | + { GRAIL_TYPE_DRAG3, 3, 3, PRIO_DRAG }, |
2302 | + { GRAIL_TYPE_DRAG4, 4, 4, PRIO_DRAG }, |
2303 | + { GRAIL_TYPE_DRAG5, 5, 5, PRIO_DRAG } |
2304 | + }, |
2305 | + drag_props |
2306 | +}; |
2307 | + |
2308 | +static const struct gesture_handler pinch_handler = { |
2309 | + GRAIL_EXPECT_SCALE, |
2310 | + { |
2311 | + { -1, 0, 0, 0 }, |
2312 | + { -1, 0, 0, 0 }, |
2313 | + { GRAIL_TYPE_PINCH2, 2, 2, PRIO_PINCH }, |
2314 | + { GRAIL_TYPE_PINCH3, 3, 3, PRIO_PINCH }, |
2315 | + { GRAIL_TYPE_PINCH4, 4, 4, PRIO_PINCH }, |
2316 | + { GRAIL_TYPE_PINCH5, 5, 5, PRIO_PINCH } |
2317 | + }, |
2318 | + pinch_props |
2319 | +}; |
2320 | + |
2321 | +static const struct gesture_handler rotate_handler = { |
2322 | + GRAIL_EXPECT_ANGLE, |
2323 | + { |
2324 | + { -1, 0, 0, 0 }, |
2325 | + { -1, 0, 0, 0 }, |
2326 | + { GRAIL_TYPE_ROTATE2, 2, 2, PRIO_ROTATE }, |
2327 | + { GRAIL_TYPE_ROTATE3, 3, 3, PRIO_ROTATE }, |
2328 | + { GRAIL_TYPE_ROTATE4, 4, 4, PRIO_ROTATE }, |
2329 | + { GRAIL_TYPE_ROTATE5, 5, 5, PRIO_ROTATE } |
2330 | + }, |
2331 | + rotate_props |
2332 | +}; |
2333 | + |
2334 | +static const struct gesture_handler tap_handler = { |
2335 | + GRAIL_EXPECT_MASK, |
2336 | + { |
2337 | + { -1, 0, 0, 0 }, |
2338 | + { GRAIL_TYPE_TAP1, 1, 1, PRIO_TAP }, |
2339 | + { GRAIL_TYPE_TAP2, 2, 2, PRIO_TAP }, |
2340 | + { GRAIL_TYPE_TAP3, 3, 3, PRIO_TAP }, |
2341 | + { GRAIL_TYPE_TAP4, 4, 4, PRIO_TAP }, |
2342 | + { GRAIL_TYPE_TAP5, 5, 5, PRIO_TAP } |
2343 | + }, |
2344 | + tap_props |
2345 | +}; |
2346 | + |
2347 | +static const struct gesture_handler wintouch_handler = { |
2348 | + 0, |
2349 | + { |
2350 | + { -1, 0, 0, 0 }, |
2351 | + { -1, 0, 0, 0 }, |
2352 | + { -1, 0, 0, 0 }, |
2353 | + { GRAIL_TYPE_ETOUCH, 1, 3, PRIO_EDRAG }, |
2354 | + { GRAIL_TYPE_MTOUCH, 1, 4, PRIO_MDRAG }, |
2355 | + { -1, 0, 0, 0 }, |
2356 | + }, |
2357 | + touch_props |
2358 | +}; |
2359 | + |
2360 | +static const struct gesture_handler windrag_handler = { |
2361 | + GRAIL_EXPECT_DRAG_X | GRAIL_EXPECT_DRAG_Y, |
2362 | + { |
2363 | + { -1, 0, 0, 0 }, |
2364 | + { -1, 0, 0, 0 }, |
2365 | + { -1, 0, 0, 0 }, |
2366 | + { GRAIL_TYPE_EDRAG, 1, 3, PRIO_EDRAG }, |
2367 | + { GRAIL_TYPE_MDRAG, 1, 4, PRIO_MDRAG }, |
2368 | + { -1, 0, 0, 0 }, |
2369 | + }, |
2370 | + drag_props |
2371 | +}; |
2372 | + |
2373 | +static const struct gesture_handler winpinch_handler = { |
2374 | + GRAIL_EXPECT_SCALE, |
2375 | + { |
2376 | + { -1, 0, 0, 0 }, |
2377 | + { -1, 0, 0, 0 }, |
2378 | + { -1, 0, 0, 0 }, |
2379 | + { GRAIL_TYPE_EPINCH, 2, 3, PRIO_EPINCH }, |
2380 | + { GRAIL_TYPE_MPINCH, 2, 4, PRIO_MPINCH }, |
2381 | + { -1, 0, 0, 0 }, |
2382 | + }, |
2383 | + pinch_props |
2384 | +}; |
2385 | + |
2386 | +static const struct gesture_handler winrotate_handler = { |
2387 | + GRAIL_EXPECT_ANGLE, |
2388 | + { |
2389 | + { -1, 0, 0, 0 }, |
2390 | + { -1, 0, 0, 0 }, |
2391 | + { -1, 0, 0, 0 }, |
2392 | + { GRAIL_TYPE_EROTATE, 2, 3, PRIO_EROTATE }, |
2393 | + { GRAIL_TYPE_MROTATE, 2, 4, PRIO_MROTATE }, |
2394 | + { -1, 0, 0, 0 }, |
2395 | + }, |
2396 | + rotate_props |
2397 | +}; |
2398 | |
2399 | int gru_init(struct grail *ge) |
2400 | { |
2401 | @@ -30,8 +201,18 @@ |
2402 | gru = calloc(1, sizeof(struct gesture_recognizer)); |
2403 | if (!gru) |
2404 | return -ENOMEM; |
2405 | + |
2406 | + gru->touch.handler = &touch_handler; |
2407 | + gru->drag.handler = &drag_handler; |
2408 | + gru->pinch.handler = &pinch_handler; |
2409 | + gru->rotate.handler = &rotate_handler; |
2410 | + gru->tapping.handler = &tap_handler; |
2411 | + gru->wintouch.handler = &wintouch_handler; |
2412 | + gru->windrag.handler = &windrag_handler; |
2413 | + gru->winpinch.handler = &winpinch_handler; |
2414 | + gru->winrotate.handler = &winrotate_handler; |
2415 | + |
2416 | ge->gru = gru; |
2417 | - gru_init_motion(ge); |
2418 | return 0; |
2419 | } |
2420 | |
2421 | @@ -41,18 +222,166 @@ |
2422 | ge->gru = NULL; |
2423 | } |
2424 | |
2425 | -void gru_recognize(struct grail *ge, const struct utouch_frame *frame) |
2426 | -{ |
2427 | - if (!ge->gin || !ge->gru) |
2428 | - return; |
2429 | - gru_motion(ge, frame); |
2430 | - gru_touch(ge, frame); |
2431 | - gru_drag(ge, frame); |
2432 | - gru_pinch(ge, frame); |
2433 | - gru_rotate(ge, frame); |
2434 | - gru_wintouch(ge, frame); |
2435 | - gru_windrag(ge, frame); |
2436 | - gru_winpinch(ge, frame); |
2437 | - gru_winrotate(ge, frame); |
2438 | - gru_tapping(ge, frame); |
2439 | +static void set_props(struct grail *ge, |
2440 | + struct combo_model *s, |
2441 | + const struct utouch_frame *frame) |
2442 | +{ |
2443 | + const struct gesture_handler *gh = s->handler; |
2444 | + gh->set_props(ge->gin, s, ge->gru->move, frame); |
2445 | + s->nprop += gin_add_contact_props(ge->gin, s->prop + s->nprop, frame); |
2446 | +} |
2447 | + |
2448 | +static int gru_touch_handler(struct grail *ge, |
2449 | + struct combo_model *state, |
2450 | + const struct utouch_frame *frame) |
2451 | +{ |
2452 | + struct gesture_recognizer *gru = ge->gru; |
2453 | + struct gesture_inserter *gin = ge->gin; |
2454 | + struct grail_element *move = gru->move; |
2455 | + const struct gesture_handler *gh = state->handler; |
2456 | + int ntouch = move->num_touches; |
2457 | + if (frame->slot_revision != frame->prev->slot_revision) { |
2458 | + if (state->active) { |
2459 | + gin_gid_end(ge, state->gid, move->center.x, |
2460 | + move->center.y, ntouch, |
2461 | + state->prop, state->nprop); |
2462 | + state->active = 0; |
2463 | + } |
2464 | + } |
2465 | + if (ntouch > MAX_TOUCH_GESTURE) |
2466 | + return 0; |
2467 | + if (!state->active) { |
2468 | + struct gesture_head h = gh->getype[ntouch]; |
2469 | + if (h.type < 0) |
2470 | + return 0; |
2471 | + state->gid = gin_gid_begin(ge, h.type, -h.priority, frame); |
2472 | + state->mintouch = h.mintouch; |
2473 | + state->maxtouch = h.maxtouch; |
2474 | + state->active = 1; |
2475 | + } |
2476 | + set_props(ge, state, frame); |
2477 | + gin_gid_event(ge, state->gid, move->center.x, move->center.y, |
2478 | + ntouch, state->prop, state->nprop, 0); |
2479 | + return 1; |
2480 | +} |
2481 | + |
2482 | +static int gru_gesture_handler(struct grail *ge, |
2483 | + struct combo_model *state, |
2484 | + const struct utouch_frame *frame) |
2485 | +{ |
2486 | + struct gesture_recognizer *gru = ge->gru; |
2487 | + struct gesture_inserter *gin = ge->gin; |
2488 | + struct grail_element *move = gru->move; |
2489 | + const struct gesture_handler *gh = state->handler; |
2490 | + int expect = move->expect_mask & gh->fm_mask; |
2491 | + int active = move->active_mask & gh->fm_mask; |
2492 | + int ntouch = move->num_touches; |
2493 | + if (state->active && |
2494 | + (!expect || ntouch < state->mintouch || ntouch > state->maxtouch)) { |
2495 | + gin_gid_end(ge, state->gid, move->center.x, |
2496 | + move->center.y, ntouch, |
2497 | + state->prop, state->nprop); |
2498 | + state->active = 0; |
2499 | + return 0; |
2500 | + } |
2501 | + if (!expect || ntouch > MAX_TOUCH_GESTURE) |
2502 | + return 0; |
2503 | + if (!state->active) { |
2504 | + struct gesture_head h = gh->getype[ntouch]; |
2505 | + if (h.type < 0) |
2506 | + return 0; |
2507 | + state->gid = gin_gid_begin(ge, h.type, h.priority, frame); |
2508 | + state->mintouch = h.mintouch; |
2509 | + state->maxtouch = h.maxtouch; |
2510 | + state->active = 1; |
2511 | + } |
2512 | + if (!active) |
2513 | + return 0; |
2514 | + set_props(ge, state, frame); |
2515 | + gin_gid_event(ge, state->gid, move->center.x, move->center.y, |
2516 | + ntouch, state->prop, state->nprop, 0); |
2517 | + return 1; |
2518 | +} |
2519 | + |
2520 | +static int gru_tap_handler(struct grail *ge, |
2521 | + struct combo_model *state, |
2522 | + const struct utouch_frame *frame) |
2523 | +{ |
2524 | + const struct grail_control *ctl = ge->impl->ctl; |
2525 | + struct gesture_recognizer *gru = ge->gru; |
2526 | + struct grail_element *move = gru->move; |
2527 | + const struct gesture_handler *gh = state->handler; |
2528 | + int active = move->active_mask & gh->fm_mask; |
2529 | + int ntouch = move->num_touches; |
2530 | + if (frame->num_active && !frame->prev->num_active) { |
2531 | + state->mintouch = 0; |
2532 | + state->maxtouch = 0; |
2533 | + } |
2534 | + if (ntouch > state->maxtouch) { |
2535 | + if (state->active) { |
2536 | + gin_gid_discard(ge, state->gid); |
2537 | + state->active = 0; |
2538 | + } |
2539 | + state->start = frame->time; |
2540 | + state->maxtouch = ntouch; |
2541 | + set_props(ge, state, frame); |
2542 | + if (state->maxtouch <= MAX_TOUCH_GESTURE) { |
2543 | + struct gesture_head h = gh->getype[ntouch]; |
2544 | + if (h.type < 0) |
2545 | + return 0; |
2546 | + state->gid = gin_gid_begin(ge, h.type, h.priority, |
2547 | + frame); |
2548 | + state->active = 1; |
2549 | + } |
2550 | + return 0; |
2551 | + } |
2552 | + if (!state->active) { |
2553 | + state->mintouch = ntouch; |
2554 | + return 0; |
2555 | + } |
2556 | + if (active || frame->time - state->start > ctl->tap_time_ms) { |
2557 | + gin_gid_discard(ge, state->gid); |
2558 | + state->mintouch = ntouch; |
2559 | + state->maxtouch = ntouch; |
2560 | + state->active = 0; |
2561 | + return 0; |
2562 | + } |
2563 | + if (ntouch <= state->mintouch) { |
2564 | + float x = state->prop[GRAIL_PROP_TAP_X]; |
2565 | + float y = state->prop[GRAIL_PROP_TAP_Y]; |
2566 | + float t = frame->time - state->start; |
2567 | + state->prop[GRAIL_PROP_TAP_DT] = t; |
2568 | + gin_gid_event(ge, state->gid, x, y, state->maxtouch, |
2569 | + state->prop, state->nprop, 1); |
2570 | + state->mintouch = ntouch; |
2571 | + state->maxtouch = ntouch; |
2572 | + state->active = 0; |
2573 | + return 1; |
2574 | + } |
2575 | + if (!ntouch) |
2576 | + return 0; |
2577 | + state->prop[GRAIL_PROP_TAP_DT] = frame->time - state->start; |
2578 | + return 0; |
2579 | +} |
2580 | + |
2581 | +void gru_recognize(struct grail *ge, |
2582 | + const struct grail_frame *frame, |
2583 | + const struct utouch_frame *touch) |
2584 | +{ |
2585 | + struct gesture_recognizer *gru = ge->gru; |
2586 | + |
2587 | + if (frame && frame->num_ongoing) |
2588 | + gru->slot = frame->ongoing[frame->num_ongoing - 1]->slot; |
2589 | + |
2590 | + gru->move = frame->slots[gru->slot]; |
2591 | + |
2592 | + gru_touch_handler(ge, &gru->touch, touch); |
2593 | + gru_gesture_handler(ge, &gru->drag, touch); |
2594 | + gru_gesture_handler(ge, &gru->pinch, touch); |
2595 | + gru_gesture_handler(ge, &gru->rotate, touch); |
2596 | + gru_touch_handler(ge, &gru->wintouch, touch); |
2597 | + gru_gesture_handler(ge, &gru->windrag, touch); |
2598 | + gru_gesture_handler(ge, &gru->winpinch, touch); |
2599 | + gru_gesture_handler(ge, &gru->winrotate, touch); |
2600 | + gru_tap_handler(ge, &gru->tapping, touch); |
2601 | } |
2602 | |
2603 | === modified file 'src/grail-recognizer.h' |
2604 | --- src/grail-recognizer.h 2011-04-28 16:53:57 +0000 |
2605 | +++ src/grail-recognizer.h 2011-05-05 13:31:23 +0000 |
2606 | @@ -22,10 +22,60 @@ |
2607 | #ifndef _GRAIL_RECOGNIZER_H |
2608 | #define _GRAIL_RECOGNIZER_H |
2609 | |
2610 | -#include "grail-gestures.h" |
2611 | - |
2612 | +#include "grail-inserter.h" |
2613 | + |
2614 | +#define PRIO_POINTER 1 |
2615 | +#define PRIO_PINCH 2 |
2616 | +#define PRIO_ROTATE 3 |
2617 | +#define PRIO_DRAG 3 |
2618 | +#define PRIO_EPINCH 4 |
2619 | +#define PRIO_EROTATE 5 |
2620 | +#define PRIO_EDRAG 5 |
2621 | +#define PRIO_MPINCH 6 |
2622 | +#define PRIO_MROTATE 7 |
2623 | +#define PRIO_MDRAG 7 |
2624 | +#define PRIO_TAP 8 |
2625 | + |
2626 | +/* |
2627 | + * struct combo_model - gesture primitive state |
2628 | + * @start: time this primitive started |
2629 | + * @active: true if this primitive is active |
2630 | + * @gid: gesture slot used for this primitive |
2631 | + * @mintouch: number of touches below this value ends the primitive |
2632 | + * @maxtouch: number of touches above this value ends the primitive |
2633 | + * @nprop: number of properties of this primitive |
2634 | + * @handler: pointer to gesture handler for this primitive |
2635 | + * |
2636 | + * This structure keeps track of an individual gesture primitive. |
2637 | + */ |
2638 | +struct combo_model { |
2639 | + grail_time_t start; |
2640 | + int active, gid; |
2641 | + int mintouch, maxtouch; |
2642 | + int nprop; |
2643 | + grail_prop_t prop[DIM_GRAIL_PROP]; |
2644 | + const struct gesture_handler *handler; |
2645 | +}; |
2646 | + |
2647 | +/* |
2648 | + * struct gesture_recognizer - gesture recognizer state |
2649 | + * @slot: touch slot of current touch frame |
2650 | + * @move: the grail element used for all gestures |
2651 | + * @touch: touch primitive state |
2652 | + * @drag: drag primitive state |
2653 | + * @pinch: pinch primitive state |
2654 | + * @rotate: rotate primitive state |
2655 | + * @wintouch: env/meta touch primitive state |
2656 | + * @windrag: env/meta drag primitive state |
2657 | + * @winpinch: env/meta pinch primitive state |
2658 | + * @winrotate: env/meta rotate primitive state |
2659 | + * @tapping: tapping gesture primitive state |
2660 | + * |
2661 | + * This is the state of the gesture recognizer. |
2662 | + */ |
2663 | struct gesture_recognizer { |
2664 | - struct move_model move; |
2665 | + int slot; |
2666 | + struct grail_element *move; |
2667 | struct combo_model touch; |
2668 | struct combo_model drag; |
2669 | struct combo_model pinch; |
2670 | @@ -34,11 +84,45 @@ |
2671 | struct combo_model windrag; |
2672 | struct combo_model winpinch; |
2673 | struct combo_model winrotate; |
2674 | - struct tapping_model tapping; |
2675 | + struct combo_model tapping; |
2676 | +}; |
2677 | + |
2678 | +/* |
2679 | + * struct gesture_head - gesture type handler data |
2680 | + * @type: gesture type of this primitive |
2681 | + * @mintouch: minimum number of touches for this primitive |
2682 | + * @maxtouch: maximum number of touches for this primitive |
2683 | + * @priority: priority of this primitive |
2684 | + */ |
2685 | +struct gesture_head { |
2686 | + int type; |
2687 | + int mintouch; |
2688 | + int maxtouch; |
2689 | + int priority; |
2690 | +}; |
2691 | + |
2692 | +/* |
2693 | + * struct gesture_handler - gesture handler state |
2694 | + * @fm_mask: gesture frame expectation mask used in this handler |
2695 | + * @getype: array of gesture type data per number of touches |
2696 | + * @set_props: properties method for this handler |
2697 | + * |
2698 | + * This is the state of the gesture handler. |
2699 | + */ |
2700 | +struct gesture_handler { |
2701 | + int fm_mask; |
2702 | + struct gesture_head getype[DIM_TOUCH + 1]; |
2703 | + |
2704 | + void (*set_props)(const struct gesture_inserter *gin, |
2705 | + struct combo_model *state, |
2706 | + const struct grail_element *element, |
2707 | + const struct utouch_frame *frame); |
2708 | }; |
2709 | |
2710 | int gru_init(struct grail *ge); |
2711 | -void gru_recognize(struct grail *ge, const struct utouch_frame *frame); |
2712 | +void gru_recognize(struct grail *ge, |
2713 | + const struct grail_frame *frame, |
2714 | + const struct utouch_frame *touch); |
2715 | void gru_destroy(struct grail *ge); |
2716 | |
2717 | #endif |
2718 | |
2719 | === modified file 'test/Makefile.am' |
2720 | --- test/Makefile.am 2011-04-28 16:53:46 +0000 |
2721 | +++ test/Makefile.am 2011-05-05 13:31:23 +0000 |
2722 | @@ -10,6 +10,7 @@ |
2723 | check_grail_SOURCES = \ |
2724 | check-mapping.c \ |
2725 | check-transform.c \ |
2726 | + check-gestures.c \ |
2727 | check-grail.c |
2728 | |
2729 | check_grail_CFLAGS = \ |
2730 | |
2731 | === added file 'test/check-gestures.c' |
2732 | --- test/check-gestures.c 1970-01-01 00:00:00 +0000 |
2733 | +++ test/check-gestures.c 2011-05-05 13:31:23 +0000 |
2734 | @@ -0,0 +1,204 @@ |
2735 | +#include <check.h> |
2736 | +#include <grail.h> |
2737 | +#include <string.h> |
2738 | +#include <stdio.h> |
2739 | +#include <unistd.h> |
2740 | +#include <fcntl.h> |
2741 | +#include <stdlib.h> |
2742 | +#include <time.h> |
2743 | +#include <math.h> |
2744 | + |
2745 | +#define TEST_TIME_MS 20000 |
2746 | + |
2747 | +struct test_data { |
2748 | + struct grail ge; |
2749 | + int fd; |
2750 | + int begin[DIM_GRAIL_TYPE]; |
2751 | + int update[DIM_GRAIL_TYPE]; |
2752 | + int end[DIM_GRAIL_TYPE]; |
2753 | +}; |
2754 | + |
2755 | +static int tp_get_clients(struct grail *ge, |
2756 | + struct grail_client_info *clients, int max_clients, |
2757 | + const struct grail_coord *coords, int num_coords, |
2758 | + const grail_mask_t *types, int type_bytes) |
2759 | +{ |
2760 | + memset(&clients[0], 0, sizeof(clients[0])); |
2761 | + clients[0].mask[0] = 255; |
2762 | + clients[0].mask[1] = 255; |
2763 | + clients[0].mask[2] = 255; |
2764 | + clients[0].mask[3] = 255; |
2765 | + clients[0].id.client = 345; |
2766 | + clients[0].id.root = 1; |
2767 | + clients[0].id.event = 2; |
2768 | + clients[0].id.child = 3; |
2769 | + ge = 0; |
2770 | + types = 0; |
2771 | + type_bytes = 0; |
2772 | + max_clients = 0; |
2773 | + coords = 0; |
2774 | + num_coords = 0; |
2775 | + return 1; |
2776 | +} |
2777 | + |
2778 | +static void tp_event(struct grail *ge, const struct input_event *ev) |
2779 | +{ |
2780 | + ge = 0; |
2781 | + ev = 0; |
2782 | +} |
2783 | + |
2784 | +static void tp_gesture(struct grail *ge, const struct grail_event *ev) |
2785 | +{ |
2786 | + struct test_data *data = ge->priv; |
2787 | + |
2788 | + switch (ev->status) { |
2789 | + case GRAIL_STATUS_BEGIN: |
2790 | + data->begin[ev->type]++; |
2791 | + break; |
2792 | + case GRAIL_STATUS_UPDATE: |
2793 | + data->update[ev->type]++; |
2794 | + break; |
2795 | + case GRAIL_STATUS_END: |
2796 | + data->end[ev->type]++; |
2797 | + break; |
2798 | + } |
2799 | +} |
2800 | + |
2801 | +static int init_test_data(struct test_data *data, const char *path) |
2802 | +{ |
2803 | + int ret; |
2804 | + |
2805 | + memset(data, 0, sizeof(*data)); |
2806 | + |
2807 | + data->ge.get_clients = tp_get_clients; |
2808 | + data->ge.event = tp_event; |
2809 | + data->ge.gesture = tp_gesture; |
2810 | + |
2811 | + data->fd = open(path, O_RDONLY | O_NONBLOCK); |
2812 | + ret = grail_open(&data->ge, data->fd); |
2813 | + if(ret) |
2814 | + return ret; |
2815 | + return 0; |
2816 | +} |
2817 | + |
2818 | +static void term_test_data(struct test_data *data) |
2819 | +{ |
2820 | + grail_close(&data->ge, data->fd); |
2821 | + close(data->fd); |
2822 | +} |
2823 | + |
2824 | +static void test_gesture_type(const char *name, int type, |
2825 | + int nbegin, int nupdate, int nother) |
2826 | +{ |
2827 | + struct test_data data; |
2828 | + char path[1024]; |
2829 | + int ntype = 0; |
2830 | + int i; |
2831 | + |
2832 | + sprintf(path, "io/functional/%s", name); |
2833 | + fail_if(init_test_data(&data, path)); |
2834 | + |
2835 | + data.ge.priv = &data; |
2836 | + grail_pull(&data.ge, data.fd); |
2837 | + |
2838 | + for (i = 0; i < DIM_GRAIL_TYPE; i++) { |
2839 | + if (data.begin[i] || data.update[i] || data.end[i]) { |
2840 | + //fprintf(stderr, "type %d %d\n", i, data.begin[i]); |
2841 | + ntype++; |
2842 | + } |
2843 | + } |
2844 | + |
2845 | + fail_unless(data.begin[type] == nbegin); |
2846 | + fail_unless(data.update[type] >= nupdate); |
2847 | + fail_unless(data.end[type] == nbegin); |
2848 | + fail_unless(ntype == 1 + nother); |
2849 | + |
2850 | + term_test_data(&data); |
2851 | +} |
2852 | + |
2853 | + |
2854 | +START_TEST(drag_1) |
2855 | +{ |
2856 | + test_gesture_type("drag-1.evemu", GRAIL_TYPE_DRAG1, 4, 4, 0); |
2857 | +} |
2858 | +END_TEST |
2859 | + |
2860 | +START_TEST(drag_2) |
2861 | +{ |
2862 | + test_gesture_type("drag-2.evemu", GRAIL_TYPE_DRAG2, 3, 3, 0); |
2863 | +} |
2864 | +END_TEST |
2865 | + |
2866 | +START_TEST(drag_3) |
2867 | +{ |
2868 | + test_gesture_type("drag-3.evemu", GRAIL_TYPE_EDRAG, 2, 2, 1); |
2869 | +} |
2870 | +END_TEST |
2871 | + |
2872 | +START_TEST(drag_4) |
2873 | +{ |
2874 | + test_gesture_type("drag-4.evemu", GRAIL_TYPE_MDRAG, 4, 4, 0); |
2875 | +} |
2876 | +END_TEST |
2877 | + |
2878 | +START_TEST(hold_1) |
2879 | +{ |
2880 | + test_gesture_type("hold-1.evemu", GRAIL_TYPE_DRAG1, 0, 0, -1); |
2881 | +} |
2882 | +END_TEST |
2883 | + |
2884 | +START_TEST(pinch_2) |
2885 | +{ |
2886 | + test_gesture_type("pinch-2.evemu", GRAIL_TYPE_PINCH2, 2, 2, 0); |
2887 | +} |
2888 | +END_TEST |
2889 | + |
2890 | +START_TEST(pinch_3) |
2891 | +{ |
2892 | + test_gesture_type("pinch-3.evemu", GRAIL_TYPE_EPINCH, 2, 2, 0); |
2893 | +} |
2894 | +END_TEST |
2895 | + |
2896 | +START_TEST(rotate_2) |
2897 | +{ |
2898 | + test_gesture_type("rotate-2.evemu", GRAIL_TYPE_ROTATE2, 4, 4, 0); |
2899 | +} |
2900 | +END_TEST |
2901 | + |
2902 | +START_TEST(tap_1) |
2903 | +{ |
2904 | + test_gesture_type("tap-1.evemu", GRAIL_TYPE_TAP1, 0, 1, 0); |
2905 | +} |
2906 | +END_TEST |
2907 | + |
2908 | +START_TEST(tap_4) |
2909 | +{ |
2910 | + test_gesture_type("tap-4.evemu", GRAIL_TYPE_TAP4, 0, 1, 0); |
2911 | +} |
2912 | +END_TEST |
2913 | + |
2914 | +#define ADD_TEST(suite, name) \ |
2915 | + do { \ |
2916 | + TCase *test = tcase_create(#name); \ |
2917 | + tcase_set_timeout (test, TEST_TIME_MS / 1000); \ |
2918 | + tcase_add_test(test, name); \ |
2919 | + suite_add_tcase(suite, test); \ |
2920 | + } while (0) |
2921 | + |
2922 | +Suite *make_gesture_suite() |
2923 | +{ |
2924 | + Suite *suite = suite_create("grail-gestures"); |
2925 | + |
2926 | + ADD_TEST(suite, drag_1); |
2927 | + ADD_TEST(suite, drag_2); |
2928 | + ADD_TEST(suite, drag_3); |
2929 | + ADD_TEST(suite, drag_4); |
2930 | + ADD_TEST(suite, hold_1); |
2931 | + ADD_TEST(suite, pinch_2); |
2932 | + ADD_TEST(suite, pinch_3); |
2933 | + ADD_TEST(suite, rotate_2); |
2934 | + ADD_TEST(suite, tap_1); |
2935 | + ADD_TEST(suite, tap_4); |
2936 | + |
2937 | + return suite; |
2938 | +} |
2939 | |
2940 | === modified file 'test/check-grail.c' |
2941 | --- test/check-grail.c 2011-04-28 16:53:46 +0000 |
2942 | +++ test/check-grail.c 2011-05-05 13:31:23 +0000 |
2943 | @@ -4,6 +4,7 @@ |
2944 | |
2945 | extern Suite *make_mapping_suite(); |
2946 | extern Suite *make_transform_suite(); |
2947 | +extern Suite *make_gesture_suite(); |
2948 | |
2949 | int main(int argc CK_ATTRIBUTE_UNUSED, char* argv[] CK_ATTRIBUTE_UNUSED) |
2950 | { |
2951 | @@ -13,6 +14,7 @@ |
2952 | |
2953 | srunner_add_suite(sr, make_mapping_suite()); |
2954 | srunner_add_suite(sr, make_transform_suite()); |
2955 | + srunner_add_suite(sr, make_gesture_suite()); |
2956 | |
2957 | srunner_set_log(sr, "check_grail.log"); |
2958 | srunner_set_xml(sr, "check_grail.xml"); |
2959 | |
2960 | === added directory 'test/io/functional' |
2961 | === added file 'test/io/functional/drag-1.evemu' |
2962 | --- test/io/functional/drag-1.evemu 1970-01-01 00:00:00 +0000 |
2963 | +++ test/io/functional/drag-1.evemu 2011-05-05 13:31:23 +0000 |
2964 | @@ -0,0 +1,3988 @@ |
2965 | +N: 3M-Microtouch |
2966 | +I: 0003 0596 0502 0110 |
2967 | +P: 00 00 00 00 00 00 00 00 |
2968 | +B: 00 0b 00 00 00 00 00 00 00 |
2969 | +B: 01 00 00 00 00 00 00 00 00 |
2970 | +B: 01 00 00 00 00 00 00 00 00 |
2971 | +B: 01 00 00 00 00 00 00 00 00 |
2972 | +B: 01 00 00 00 00 00 00 00 00 |
2973 | +B: 01 00 00 00 00 00 00 00 00 |
2974 | +B: 01 00 04 00 00 00 00 00 00 |
2975 | +B: 01 00 00 00 00 00 00 00 00 |
2976 | +B: 01 00 00 00 00 00 00 00 00 |
2977 | +B: 01 00 00 00 00 00 00 00 00 |
2978 | +B: 01 00 00 00 00 00 00 00 00 |
2979 | +B: 01 00 00 00 00 00 00 00 00 |
2980 | +B: 01 00 00 00 00 00 00 00 00 |
2981 | +B: 02 00 00 00 00 00 00 00 00 |
2982 | +B: 03 03 00 00 00 00 80 73 02 |
2983 | +B: 04 00 00 00 00 00 00 00 00 |
2984 | +B: 05 00 00 00 00 00 00 00 00 |
2985 | +B: 11 00 00 00 00 00 00 00 00 |
2986 | +B: 12 00 00 00 00 00 00 00 00 |
2987 | +B: 15 00 00 00 00 00 00 00 00 |
2988 | +B: 15 00 00 00 00 00 00 00 00 |
2989 | +A: 00 0 32767 15 0 |
2990 | +A: 01 0 32767 15 0 |
2991 | +A: 2f 0 59 0 0 |
2992 | +A: 30 0 32767 255 0 |
2993 | +A: 31 0 32767 255 0 |
2994 | +A: 34 0 1 0 0 |
2995 | +A: 35 0 32767 15 0 |
2996 | +A: 36 0 32767 15 0 |
2997 | +A: 39 0 65535 0 0 |
2998 | +E: 1304510649.770760 0003 002f 0 |
2999 | +E: 1304510649.770775 0003 0039 135 |
3000 | +E: 1304510649.770778 0003 0035 16448 |
3001 | +E: 1304510649.770779 0003 0036 6505 |
3002 | +E: 1304510649.770782 0003 0030 1312 |
3003 | +E: 1304510649.770787 0001 014a 1 |
3004 | +E: 1304510649.770791 0003 0000 16448 |
3005 | +E: 1304510649.770792 0003 0001 6505 |
3006 | +E: 1304510649.770794 0000 0000 0 |
3007 | +E: 1304510649.775755 0003 0030 1348 |
3008 | +E: 1304510649.775775 0000 0000 0 |
3009 | +E: 1304510649.801747 0003 0036 6507 |
3010 | +E: 1304510649.801769 0000 0000 0 |
3011 | +E: 1304510649.806750 0003 0036 6509 |
3012 | +E: 1304510649.806771 0000 0000 0 |
3013 | +E: 1304510649.811749 0003 0036 6521 |
3014 | +E: 1304510649.811769 0003 0001 6513 |
3015 | +E: 1304510649.811771 0000 0000 0 |
3016 | +E: 1304510649.816750 0003 0036 6529 |
3017 | +E: 1304510649.816763 0003 0030 1220 |
3018 | +E: 1304510649.816771 0003 0001 6521 |
3019 | +E: 1304510649.816773 0000 0000 0 |
3020 | +E: 1304510649.821749 0003 0036 6559 |
3021 | +E: 1304510649.821762 0003 0030 1188 |
3022 | +E: 1304510649.821770 0003 0001 6559 |
3023 | +E: 1304510649.821772 0000 0000 0 |
3024 | +E: 1304510649.826749 0003 0036 6570 |
3025 | +E: 1304510649.826769 0003 0001 6561 |
3026 | +E: 1304510649.826771 0000 0000 0 |
3027 | +E: 1304510649.831749 0003 0036 6603 |
3028 | +E: 1304510649.831769 0003 0001 6603 |
3029 | +E: 1304510649.831771 0000 0000 0 |
3030 | +E: 1304510649.836750 0003 0036 6617 |
3031 | +E: 1304510649.836770 0003 0001 6606 |
3032 | +E: 1304510649.836772 0000 0000 0 |
3033 | +E: 1304510649.841749 0003 0036 6657 |
3034 | +E: 1304510649.841769 0003 0001 6657 |
3035 | +E: 1304510649.841771 0000 0000 0 |
3036 | +E: 1304510649.847750 0003 0036 6671 |
3037 | +E: 1304510649.847763 0003 0030 1322 |
3038 | +E: 1304510649.847771 0003 0001 6660 |
3039 | +E: 1304510649.847772 0000 0000 0 |
3040 | +E: 1304510649.852748 0003 0036 6715 |
3041 | +E: 1304510649.852761 0003 0030 1355 |
3042 | +E: 1304510649.852769 0003 0001 6715 |
3043 | +E: 1304510649.852771 0000 0000 0 |
3044 | +E: 1304510649.857749 0003 0036 6729 |
3045 | +E: 1304510649.857769 0003 0001 6718 |
3046 | +E: 1304510649.857771 0000 0000 0 |
3047 | +E: 1304510649.862749 0003 0036 6771 |
3048 | +E: 1304510649.862769 0003 0001 6771 |
3049 | +E: 1304510649.862771 0000 0000 0 |
3050 | +E: 1304510649.867749 0003 0036 6805 |
3051 | +E: 1304510649.867770 0003 0001 6805 |
3052 | +E: 1304510649.867772 0000 0000 0 |
3053 | +E: 1304510649.872746 0003 0035 16445 |
3054 | +E: 1304510649.872758 0003 0036 6873 |
3055 | +E: 1304510649.872768 0003 0001 6873 |
3056 | +E: 1304510649.872770 0000 0000 0 |
3057 | +E: 1304510649.877748 0003 0035 16443 |
3058 | +E: 1304510649.877761 0003 0036 6887 |
3059 | +E: 1304510649.877771 0003 0001 6876 |
3060 | +E: 1304510649.877773 0000 0000 0 |
3061 | +E: 1304510649.882747 0003 0035 16441 |
3062 | +E: 1304510649.882759 0003 0036 6969 |
3063 | +E: 1304510649.882768 0003 0000 16446 |
3064 | +E: 1304510649.882770 0003 0001 6969 |
3065 | +E: 1304510649.882771 0000 0000 0 |
3066 | +E: 1304510649.887748 0003 0035 16438 |
3067 | +E: 1304510649.887759 0003 0036 7035 |
3068 | +E: 1304510649.887769 0003 0000 16444 |
3069 | +E: 1304510649.887770 0003 0001 7035 |
3070 | +E: 1304510649.887772 0000 0000 0 |
3071 | +E: 1304510649.892747 0003 0036 7067 |
3072 | +E: 1304510649.892760 0003 0030 1223 |
3073 | +E: 1304510649.892769 0003 0001 7067 |
3074 | +E: 1304510649.892770 0000 0000 0 |
3075 | +E: 1304510649.897747 0003 0035 16436 |
3076 | +E: 1304510649.897759 0003 0036 7143 |
3077 | +E: 1304510649.897762 0003 0030 1190 |
3078 | +E: 1304510649.897769 0003 0000 16442 |
3079 | +E: 1304510649.897771 0003 0001 7143 |
3080 | +E: 1304510649.897773 0000 0000 0 |
3081 | +E: 1304510649.903736 0003 0035 16434 |
3082 | +E: 1304510649.903747 0003 0036 7207 |
3083 | +E: 1304510649.903756 0003 0000 16440 |
3084 | +E: 1304510649.903758 0003 0001 7207 |
3085 | +E: 1304510649.903760 0000 0000 0 |
3086 | +E: 1304510649.908748 0003 0036 7241 |
3087 | +E: 1304510649.908768 0003 0001 7241 |
3088 | +E: 1304510649.908770 0000 0000 0 |
3089 | +E: 1304510649.913735 0003 0035 16431 |
3090 | +E: 1304510649.913746 0003 0036 7311 |
3091 | +E: 1304510649.913756 0003 0000 16437 |
3092 | +E: 1304510649.913757 0003 0001 7311 |
3093 | +E: 1304510649.913759 0000 0000 0 |
3094 | +E: 1304510649.918747 0003 0035 16428 |
3095 | +E: 1304510649.918759 0003 0036 7383 |
3096 | +E: 1304510649.918762 0003 0030 1323 |
3097 | +E: 1304510649.918769 0003 0000 16434 |
3098 | +E: 1304510649.918771 0003 0001 7383 |
3099 | +E: 1304510649.918773 0000 0000 0 |
3100 | +E: 1304510649.923734 0003 0035 16426 |
3101 | +E: 1304510649.923745 0003 0036 7453 |
3102 | +E: 1304510649.923748 0003 0030 1356 |
3103 | +E: 1304510649.923756 0003 0000 16432 |
3104 | +E: 1304510649.923757 0003 0001 7453 |
3105 | +E: 1304510649.923759 0000 0000 0 |
3106 | +E: 1304510649.928747 0003 0035 16424 |
3107 | +E: 1304510649.928759 0003 0036 7485 |
3108 | +E: 1304510649.928768 0003 0000 16430 |
3109 | +E: 1304510649.928770 0003 0001 7485 |
3110 | +E: 1304510649.928771 0000 0000 0 |
3111 | +E: 1304510649.933734 0003 0035 16422 |
3112 | +E: 1304510649.933746 0003 0036 7557 |
3113 | +E: 1304510649.933755 0003 0000 16428 |
3114 | +E: 1304510649.933757 0003 0001 7557 |
3115 | +E: 1304510649.933759 0000 0000 0 |
3116 | +E: 1304510649.938748 0003 0035 16419 |
3117 | +E: 1304510649.938761 0003 0036 7623 |
3118 | +E: 1304510649.938770 0003 0000 16425 |
3119 | +E: 1304510649.938772 0003 0001 7623 |
3120 | +E: 1304510649.938773 0000 0000 0 |
3121 | +E: 1304510649.943735 0003 0035 16417 |
3122 | +E: 1304510649.943747 0003 0036 7655 |
3123 | +E: 1304510649.943756 0003 0000 16423 |
3124 | +E: 1304510649.943758 0003 0001 7655 |
3125 | +E: 1304510649.943759 0000 0000 0 |
3126 | +E: 1304510649.948766 0003 0035 16414 |
3127 | +E: 1304510649.948779 0003 0036 7723 |
3128 | +E: 1304510649.948788 0003 0000 16420 |
3129 | +E: 1304510649.948790 0003 0001 7723 |
3130 | +E: 1304510649.948792 0000 0000 0 |
3131 | +E: 1304510649.953738 0003 0035 16412 |
3132 | +E: 1304510649.953750 0003 0036 7791 |
3133 | +E: 1304510649.953753 0003 0030 1224 |
3134 | +E: 1304510649.953760 0003 0000 16418 |
3135 | +E: 1304510649.953762 0003 0001 7791 |
3136 | +E: 1304510649.953763 0000 0000 0 |
3137 | +E: 1304510649.958757 0003 0036 7823 |
3138 | +E: 1304510649.958771 0003 0030 1191 |
3139 | +E: 1304510649.958779 0003 0001 7823 |
3140 | +E: 1304510649.958780 0000 0000 0 |
3141 | +E: 1304510649.964759 0003 0036 7893 |
3142 | +E: 1304510649.964780 0003 0001 7893 |
3143 | +E: 1304510649.964782 0000 0000 0 |
3144 | +E: 1304510649.969754 0003 0035 16410 |
3145 | +E: 1304510649.969765 0003 0036 7965 |
3146 | +E: 1304510649.969776 0003 0000 16416 |
3147 | +E: 1304510649.969778 0003 0001 7965 |
3148 | +E: 1304510649.969779 0000 0000 0 |
3149 | +E: 1304510649.974758 0003 0035 16408 |
3150 | +E: 1304510649.974770 0003 0036 8037 |
3151 | +E: 1304510649.974779 0003 0000 16414 |
3152 | +E: 1304510649.974781 0003 0001 8037 |
3153 | +E: 1304510649.974783 0000 0000 0 |
3154 | +E: 1304510649.979758 0003 0036 8105 |
3155 | +E: 1304510649.979771 0003 0030 1323 |
3156 | +E: 1304510649.979779 0003 0001 8105 |
3157 | +E: 1304510649.979781 0000 0000 0 |
3158 | +E: 1304510649.984759 0003 0036 8137 |
3159 | +E: 1304510649.984771 0003 0030 1356 |
3160 | +E: 1304510649.984780 0003 0001 8137 |
3161 | +E: 1304510649.984782 0000 0000 0 |
3162 | +E: 1304510649.989751 0003 0036 8211 |
3163 | +E: 1304510649.989765 0003 0001 8211 |
3164 | +E: 1304510649.989767 0000 0000 0 |
3165 | +E: 1304510649.994736 0003 0035 16406 |
3166 | +E: 1304510649.994744 0003 0036 8283 |
3167 | +E: 1304510649.994757 0003 0000 16412 |
3168 | +E: 1304510649.994764 0003 0001 8283 |
3169 | +E: 1304510649.994766 0000 0000 0 |
3170 | +E: 1304510649.999738 0003 0036 8355 |
3171 | +E: 1304510649.999759 0003 0001 8355 |
3172 | +E: 1304510649.999764 0000 0000 0 |
3173 | +E: 1304510650.004602 0003 0036 8425 |
3174 | +E: 1304510650.004613 0003 0001 8425 |
3175 | +E: 1304510650.004613 0000 0000 0 |
3176 | +E: 1304510650.009715 0003 0035 16404 |
3177 | +E: 1304510650.009719 0003 0036 8493 |
3178 | +E: 1304510650.009727 0003 0000 16410 |
3179 | +E: 1304510650.009728 0003 0001 8493 |
3180 | +E: 1304510650.009728 0000 0000 0 |
3181 | +E: 1304510650.014589 0003 0036 8525 |
3182 | +E: 1304510650.014592 0003 0030 1224 |
3183 | +E: 1304510650.014598 0003 0001 8525 |
3184 | +E: 1304510650.014599 0000 0000 0 |
3185 | +E: 1304510650.020610 0003 0035 16402 |
3186 | +E: 1304510650.020619 0003 0036 8597 |
3187 | +E: 1304510650.020620 0003 0030 1191 |
3188 | +E: 1304510650.020622 0003 0000 16408 |
3189 | +E: 1304510650.020623 0003 0001 8597 |
3190 | +E: 1304510650.020623 0000 0000 0 |
3191 | +E: 1304510650.025601 0003 0036 8671 |
3192 | +E: 1304510650.025612 0003 0001 8671 |
3193 | +E: 1304510650.025613 0000 0000 0 |
3194 | +E: 1304510650.030604 0003 0036 8743 |
3195 | +E: 1304510650.030617 0003 0001 8743 |
3196 | +E: 1304510650.030617 0000 0000 0 |
3197 | +E: 1304510650.035594 0003 0036 8815 |
3198 | +E: 1304510650.035601 0003 0030 1323 |
3199 | +E: 1304510650.035603 0003 0001 8815 |
3200 | +E: 1304510650.035604 0000 0000 0 |
3201 | +E: 1304510650.040607 0003 0036 8891 |
3202 | +E: 1304510650.040615 0003 0030 1356 |
3203 | +E: 1304510650.040619 0003 0001 8891 |
3204 | +E: 1304510650.040619 0000 0000 0 |
3205 | +E: 1304510650.045605 0003 0036 8961 |
3206 | +E: 1304510650.045616 0003 0001 8961 |
3207 | +E: 1304510650.045616 0000 0000 0 |
3208 | +E: 1304510650.050606 0003 0036 9031 |
3209 | +E: 1304510650.050614 0003 0001 9031 |
3210 | +E: 1304510650.050618 0000 0000 0 |
3211 | +E: 1304510650.055591 0003 0036 9103 |
3212 | +E: 1304510650.055601 0003 0001 9103 |
3213 | +E: 1304510650.055602 0000 0000 0 |
3214 | +E: 1304510650.060606 0003 0036 9135 |
3215 | +E: 1304510650.060617 0003 0001 9135 |
3216 | +E: 1304510650.060618 0000 0000 0 |
3217 | +E: 1304510650.065595 0003 0036 9209 |
3218 | +E: 1304510650.065602 0003 0001 9209 |
3219 | +E: 1304510650.065605 0000 0000 0 |
3220 | +E: 1304510650.070607 0003 0036 9279 |
3221 | +E: 1304510650.070615 0003 0030 1224 |
3222 | +E: 1304510650.070618 0003 0001 9279 |
3223 | +E: 1304510650.070619 0000 0000 0 |
3224 | +E: 1304510650.076602 0003 0036 9351 |
3225 | +E: 1304510650.076610 0003 0030 1191 |
3226 | +E: 1304510650.076613 0003 0001 9351 |
3227 | +E: 1304510650.076614 0000 0000 0 |
3228 | +E: 1304510650.081604 0003 0036 9419 |
3229 | +E: 1304510650.081615 0003 0001 9419 |
3230 | +E: 1304510650.081615 0000 0000 0 |
3231 | +E: 1304510650.086607 0003 0036 9493 |
3232 | +E: 1304510650.086617 0003 0001 9493 |
3233 | +E: 1304510650.086618 0000 0000 0 |
3234 | +E: 1304510650.091607 0003 0036 9567 |
3235 | +E: 1304510650.091616 0003 0030 1323 |
3236 | +E: 1304510650.091619 0003 0001 9567 |
3237 | +E: 1304510650.091619 0000 0000 0 |
3238 | +E: 1304510650.096607 0003 0036 9635 |
3239 | +E: 1304510650.096616 0003 0030 1356 |
3240 | +E: 1304510650.096619 0003 0001 9635 |
3241 | +E: 1304510650.096619 0000 0000 0 |
3242 | +E: 1304510650.101602 0003 0036 9701 |
3243 | +E: 1304510650.101614 0003 0001 9701 |
3244 | +E: 1304510650.101614 0000 0000 0 |
3245 | +E: 1304510650.106599 0003 0036 9733 |
3246 | +E: 1304510650.106613 0003 0001 9733 |
3247 | +E: 1304510650.106614 0000 0000 0 |
3248 | +E: 1304510650.111603 0003 0035 16400 |
3249 | +E: 1304510650.111607 0003 0036 9801 |
3250 | +E: 1304510650.111614 0003 0000 16406 |
3251 | +E: 1304510650.111615 0003 0001 9801 |
3252 | +E: 1304510650.111615 0000 0000 0 |
3253 | +E: 1304510650.116667 0003 0035 16398 |
3254 | +E: 1304510650.116671 0003 0036 9833 |
3255 | +E: 1304510650.116675 0003 0000 16404 |
3256 | +E: 1304510650.116675 0003 0001 9833 |
3257 | +E: 1304510650.116676 0000 0000 0 |
3258 | +E: 1304510650.121598 0003 0035 16396 |
3259 | +E: 1304510650.121604 0003 0036 9903 |
3260 | +E: 1304510650.121611 0003 0000 16402 |
3261 | +E: 1304510650.121612 0003 0001 9903 |
3262 | +E: 1304510650.121612 0000 0000 0 |
3263 | +E: 1304510650.126602 0003 0036 9935 |
3264 | +E: 1304510650.126613 0003 0001 9935 |
3265 | +E: 1304510650.126614 0000 0000 0 |
3266 | +E: 1304510650.131602 0003 0035 16394 |
3267 | +E: 1304510650.131611 0003 0036 10013 |
3268 | +E: 1304510650.131612 0003 0030 1224 |
3269 | +E: 1304510650.131615 0003 0000 16400 |
3270 | +E: 1304510650.131616 0003 0001 10013 |
3271 | +E: 1304510650.131616 0000 0000 0 |
3272 | +E: 1304510650.137600 0003 0035 16392 |
3273 | +E: 1304510650.137605 0003 0036 10085 |
3274 | +E: 1304510650.137605 0003 0030 1191 |
3275 | +E: 1304510650.137608 0003 0000 16398 |
3276 | +E: 1304510650.137612 0003 0001 10085 |
3277 | +E: 1304510650.137613 0000 0000 0 |
3278 | +E: 1304510650.142604 0003 0035 16390 |
3279 | +E: 1304510650.142607 0003 0036 10161 |
3280 | +E: 1304510650.142614 0003 0000 16396 |
3281 | +E: 1304510650.142615 0003 0001 10161 |
3282 | +E: 1304510650.142616 0000 0000 0 |
3283 | +E: 1304510650.147598 0003 0035 16388 |
3284 | +E: 1304510650.147602 0003 0036 10233 |
3285 | +E: 1304510650.147607 0003 0030 1323 |
3286 | +E: 1304510650.147609 0003 0000 16394 |
3287 | +E: 1304510650.147610 0003 0001 10233 |
3288 | +E: 1304510650.147610 0000 0000 0 |
3289 | +E: 1304510650.152604 0003 0036 10301 |
3290 | +E: 1304510650.152612 0003 0030 1356 |
3291 | +E: 1304510650.152615 0003 0001 10301 |
3292 | +E: 1304510650.152616 0000 0000 0 |
3293 | +E: 1304510650.157605 0003 0035 16386 |
3294 | +E: 1304510650.157616 0003 0036 10333 |
3295 | +E: 1304510650.157620 0003 0000 16392 |
3296 | +E: 1304510650.157620 0003 0001 10333 |
3297 | +E: 1304510650.157621 0000 0000 0 |
3298 | +E: 1304510650.162597 0003 0036 10401 |
3299 | +E: 1304510650.162610 0003 0001 10401 |
3300 | +E: 1304510650.162610 0000 0000 0 |
3301 | +E: 1304510650.167601 0003 0035 16383 |
3302 | +E: 1304510650.167609 0003 0036 10471 |
3303 | +E: 1304510650.167612 0003 0000 16389 |
3304 | +E: 1304510650.167613 0003 0001 10471 |
3305 | +E: 1304510650.167614 0000 0000 0 |
3306 | +E: 1304510650.172601 0003 0035 16380 |
3307 | +E: 1304510650.172604 0003 0036 10545 |
3308 | +E: 1304510650.172612 0003 0000 16386 |
3309 | +E: 1304510650.172612 0003 0001 10545 |
3310 | +E: 1304510650.172613 0000 0000 0 |
3311 | +E: 1304510650.177599 0003 0035 16377 |
3312 | +E: 1304510650.177608 0003 0036 10611 |
3313 | +E: 1304510650.177611 0003 0000 16383 |
3314 | +E: 1304510650.177612 0003 0001 10611 |
3315 | +E: 1304510650.177612 0000 0000 0 |
3316 | +E: 1304510650.182604 0003 0035 16375 |
3317 | +E: 1304510650.182607 0003 0036 10645 |
3318 | +E: 1304510650.182610 0003 0000 16381 |
3319 | +E: 1304510650.182611 0003 0001 10645 |
3320 | +E: 1304510650.182612 0000 0000 0 |
3321 | +E: 1304510650.187606 0003 0035 16373 |
3322 | +E: 1304510650.187610 0003 0036 10677 |
3323 | +E: 1304510650.187617 0003 0000 16379 |
3324 | +E: 1304510650.187618 0003 0001 10677 |
3325 | +E: 1304510650.187618 0000 0000 0 |
3326 | +E: 1304510650.193603 0003 0035 16370 |
3327 | +E: 1304510650.193607 0003 0036 10747 |
3328 | +E: 1304510650.193608 0003 0030 1224 |
3329 | +E: 1304510650.193610 0003 0000 16376 |
3330 | +E: 1304510650.193611 0003 0001 10747 |
3331 | +E: 1304510650.193612 0000 0000 0 |
3332 | +E: 1304510650.198595 0003 0035 16367 |
3333 | +E: 1304510650.198598 0003 0036 10813 |
3334 | +E: 1304510650.198603 0003 0030 1191 |
3335 | +E: 1304510650.198606 0003 0000 16373 |
3336 | +E: 1304510650.198606 0003 0001 10813 |
3337 | +E: 1304510650.198607 0000 0000 0 |
3338 | +E: 1304510650.203604 0003 0035 16364 |
3339 | +E: 1304510650.203607 0003 0036 10883 |
3340 | +E: 1304510650.203611 0003 0000 16370 |
3341 | +E: 1304510650.203611 0003 0001 10883 |
3342 | +E: 1304510650.203612 0000 0000 0 |
3343 | +E: 1304510650.208600 0003 0035 16362 |
3344 | +E: 1304510650.208604 0003 0036 10955 |
3345 | +E: 1304510650.208605 0003 0030 1323 |
3346 | +E: 1304510650.208607 0003 0000 16368 |
3347 | +E: 1304510650.208608 0003 0001 10955 |
3348 | +E: 1304510650.208608 0000 0000 0 |
3349 | +E: 1304510650.213594 0003 0035 16359 |
3350 | +E: 1304510650.213598 0003 0036 11029 |
3351 | +E: 1304510650.213599 0003 0030 1356 |
3352 | +E: 1304510650.213601 0003 0000 16365 |
3353 | +E: 1304510650.213605 0003 0001 11029 |
3354 | +E: 1304510650.213606 0000 0000 0 |
3355 | +E: 1304510650.218600 0003 0035 16357 |
3356 | +E: 1304510650.218604 0003 0036 11059 |
3357 | +E: 1304510650.218609 0003 0000 16363 |
3358 | +E: 1304510650.218613 0003 0001 11059 |
3359 | +E: 1304510650.218613 0000 0000 0 |
3360 | +E: 1304510650.223597 0003 0035 16355 |
3361 | +E: 1304510650.223601 0003 0036 11129 |
3362 | +E: 1304510650.223604 0003 0000 16361 |
3363 | +E: 1304510650.223605 0003 0001 11129 |
3364 | +E: 1304510650.223605 0000 0000 0 |
3365 | +E: 1304510650.228597 0003 0035 16352 |
3366 | +E: 1304510650.228605 0003 0036 11201 |
3367 | +E: 1304510650.228606 0003 0031 968 |
3368 | +E: 1304510650.228609 0003 0000 16358 |
3369 | +E: 1304510650.228609 0003 0001 11201 |
3370 | +E: 1304510650.228610 0000 0000 0 |
3371 | +E: 1304510650.233596 0003 0035 16349 |
3372 | +E: 1304510650.233601 0003 0036 11269 |
3373 | +E: 1304510650.233602 0003 0031 1008 |
3374 | +E: 1304510650.233604 0003 0000 16355 |
3375 | +E: 1304510650.233605 0003 0001 11269 |
3376 | +E: 1304510650.233606 0000 0000 0 |
3377 | +E: 1304510650.238604 0003 0035 16346 |
3378 | +E: 1304510650.238608 0003 0036 11299 |
3379 | +E: 1304510650.238615 0003 0000 16352 |
3380 | +E: 1304510650.238616 0003 0001 11299 |
3381 | +E: 1304510650.238616 0000 0000 0 |
3382 | +E: 1304510650.243601 0003 0035 16343 |
3383 | +E: 1304510650.243605 0003 0036 11369 |
3384 | +E: 1304510650.243608 0003 0000 16349 |
3385 | +E: 1304510650.243609 0003 0001 11369 |
3386 | +E: 1304510650.243609 0000 0000 0 |
3387 | +E: 1304510650.248597 0003 0035 16340 |
3388 | +E: 1304510650.248600 0003 0036 11447 |
3389 | +E: 1304510650.248605 0003 0034 1 |
3390 | +E: 1304510650.248605 0003 0030 1299 |
3391 | +E: 1304510650.248608 0003 0000 16346 |
3392 | +E: 1304510650.248608 0003 0001 11447 |
3393 | +E: 1304510650.248609 0000 0000 0 |
3394 | +E: 1304510650.254598 0003 0035 16337 |
3395 | +E: 1304510650.254601 0003 0036 11517 |
3396 | +E: 1304510650.254606 0003 0030 1256 |
3397 | +E: 1304510650.254609 0003 0000 16343 |
3398 | +E: 1304510650.254610 0003 0001 11517 |
3399 | +E: 1304510650.254610 0000 0000 0 |
3400 | +E: 1304510650.259599 0003 0035 16333 |
3401 | +E: 1304510650.259608 0003 0036 11595 |
3402 | +E: 1304510650.259612 0003 0000 16340 |
3403 | +E: 1304510650.259612 0003 0001 11595 |
3404 | +E: 1304510650.259613 0000 0000 0 |
3405 | +E: 1304510650.264599 0003 0035 16330 |
3406 | +E: 1304510650.264608 0003 0036 11663 |
3407 | +E: 1304510650.264608 0003 0034 0 |
3408 | +E: 1304510650.264609 0003 0030 1306 |
3409 | +E: 1304510650.264612 0003 0000 16337 |
3410 | +E: 1304510650.264612 0003 0001 11663 |
3411 | +E: 1304510650.264613 0000 0000 0 |
3412 | +E: 1304510650.269601 0003 0035 16327 |
3413 | +E: 1304510650.269604 0003 0036 11731 |
3414 | +E: 1304510650.269610 0003 0030 1343 |
3415 | +E: 1304510650.269612 0003 0000 16334 |
3416 | +E: 1304510650.269613 0003 0001 11731 |
3417 | +E: 1304510650.269613 0000 0000 0 |
3418 | +E: 1304510650.274602 0003 0035 16324 |
3419 | +E: 1304510650.274605 0003 0036 11803 |
3420 | +E: 1304510650.274613 0003 0000 16331 |
3421 | +E: 1304510650.274613 0003 0001 11803 |
3422 | +E: 1304510650.274614 0000 0000 0 |
3423 | +E: 1304510650.279591 0003 0036 11877 |
3424 | +E: 1304510650.279597 0003 0000 16329 |
3425 | +E: 1304510650.279597 0003 0001 11877 |
3426 | +E: 1304510650.279598 0000 0000 0 |
3427 | +E: 1304510650.284598 0003 0035 16322 |
3428 | +E: 1304510650.284602 0003 0036 11947 |
3429 | +E: 1304510650.284605 0003 0000 16327 |
3430 | +E: 1304510650.284605 0003 0001 11947 |
3431 | +E: 1304510650.284606 0000 0000 0 |
3432 | +E: 1304510650.289602 0003 0035 16320 |
3433 | +E: 1304510650.289607 0003 0036 12025 |
3434 | +E: 1304510650.289614 0003 0000 16325 |
3435 | +E: 1304510650.289615 0003 0001 12025 |
3436 | +E: 1304510650.289615 0000 0000 0 |
3437 | +E: 1304510650.294599 0003 0035 16318 |
3438 | +E: 1304510650.294602 0003 0036 12097 |
3439 | +E: 1304510650.294610 0003 0000 16323 |
3440 | +E: 1304510650.294610 0003 0001 12097 |
3441 | +E: 1304510650.294611 0000 0000 0 |
3442 | +E: 1304510650.299597 0003 0035 16316 |
3443 | +E: 1304510650.299601 0003 0036 12169 |
3444 | +E: 1304510650.299606 0003 0034 1 |
3445 | +E: 1304510650.299606 0003 0030 1289 |
3446 | +E: 1304510650.299609 0003 0000 16321 |
3447 | +E: 1304510650.299609 0003 0001 12169 |
3448 | +E: 1304510650.299610 0000 0000 0 |
3449 | +E: 1304510650.304599 0003 0036 12243 |
3450 | +E: 1304510650.304604 0003 0030 1249 |
3451 | +E: 1304510650.304607 0003 0001 12243 |
3452 | +E: 1304510650.304611 0000 0000 0 |
3453 | +E: 1304510650.310596 0003 0035 16314 |
3454 | +E: 1304510650.310602 0003 0036 12311 |
3455 | +E: 1304510650.310610 0003 0000 16319 |
3456 | +E: 1304510650.310610 0003 0001 12311 |
3457 | +E: 1304510650.310611 0000 0000 0 |
3458 | +E: 1304510650.315595 0003 0035 16312 |
3459 | +E: 1304510650.315599 0003 0036 12387 |
3460 | +E: 1304510650.315604 0003 0034 0 |
3461 | +E: 1304510650.315605 0003 0030 1300 |
3462 | +E: 1304510650.315607 0003 0000 16317 |
3463 | +E: 1304510650.315608 0003 0001 12387 |
3464 | +E: 1304510650.315608 0000 0000 0 |
3465 | +E: 1304510650.320596 0003 0036 12461 |
3466 | +E: 1304510650.320605 0003 0030 1339 |
3467 | +E: 1304510650.320608 0003 0001 12461 |
3468 | +E: 1304510650.320608 0000 0000 0 |
3469 | +E: 1304510650.325597 0003 0036 12535 |
3470 | +E: 1304510650.325608 0003 0001 12535 |
3471 | +E: 1304510650.325609 0000 0000 0 |
3472 | +E: 1304510650.330598 0003 0036 12607 |
3473 | +E: 1304510650.330609 0003 0001 12607 |
3474 | +E: 1304510650.330610 0000 0000 0 |
3475 | +E: 1304510650.335605 0003 0036 12683 |
3476 | +E: 1304510650.335616 0003 0001 12683 |
3477 | +E: 1304510650.335617 0000 0000 0 |
3478 | +E: 1304510650.340583 0003 0036 12761 |
3479 | +E: 1304510650.340588 0003 0001 12761 |
3480 | +E: 1304510650.340588 0000 0000 0 |
3481 | +E: 1304510650.345597 0003 0036 12837 |
3482 | +E: 1304510650.345608 0003 0001 12837 |
3483 | +E: 1304510650.345609 0000 0000 0 |
3484 | +E: 1304510650.350595 0003 0036 12907 |
3485 | +E: 1304510650.350603 0003 0034 1 |
3486 | +E: 1304510650.350604 0003 0030 1286 |
3487 | +E: 1304510650.350607 0003 0001 12907 |
3488 | +E: 1304510650.350607 0000 0000 0 |
3489 | +E: 1304510650.355599 0003 0036 12977 |
3490 | +E: 1304510650.355607 0003 0030 1247 |
3491 | +E: 1304510650.355611 0003 0001 12977 |
3492 | +E: 1304510650.355611 0000 0000 0 |
3493 | +E: 1304510650.360596 0003 0036 13055 |
3494 | +E: 1304510650.360605 0003 0034 0 |
3495 | +E: 1304510650.360605 0003 0030 1208 |
3496 | +E: 1304510650.360609 0003 0001 13055 |
3497 | +E: 1304510650.360610 0000 0000 0 |
3498 | +E: 1304510650.366588 0003 0036 13133 |
3499 | +E: 1304510650.366592 0003 0030 1270 |
3500 | +E: 1304510650.366598 0003 0001 13133 |
3501 | +E: 1304510650.366598 0000 0000 0 |
3502 | +E: 1304510650.371595 0003 0036 13207 |
3503 | +E: 1304510650.371603 0003 0030 1316 |
3504 | +E: 1304510650.371606 0003 0001 13207 |
3505 | +E: 1304510650.371606 0000 0000 0 |
3506 | +E: 1304510650.376604 0003 0035 16314 |
3507 | +E: 1304510650.376612 0003 0036 13281 |
3508 | +E: 1304510650.376614 0003 0030 1351 |
3509 | +E: 1304510650.376617 0003 0001 13281 |
3510 | +E: 1304510650.376617 0000 0000 0 |
3511 | +E: 1304510650.381583 0003 0035 16316 |
3512 | +E: 1304510650.381586 0003 0036 13359 |
3513 | +E: 1304510650.381592 0003 0001 13359 |
3514 | +E: 1304510650.381592 0000 0000 0 |
3515 | +E: 1304510650.386599 0003 0035 16318 |
3516 | +E: 1304510650.386604 0003 0036 13433 |
3517 | +E: 1304510650.386611 0003 0001 13433 |
3518 | +E: 1304510650.386612 0000 0000 0 |
3519 | +E: 1304510650.391587 0003 0035 16320 |
3520 | +E: 1304510650.391589 0003 0036 13511 |
3521 | +E: 1304510650.391597 0003 0001 13511 |
3522 | +E: 1304510650.391597 0000 0000 0 |
3523 | +E: 1304510650.396603 0003 0035 16323 |
3524 | +E: 1304510650.396606 0003 0036 13593 |
3525 | +E: 1304510650.396611 0003 0030 1221 |
3526 | +E: 1304510650.396614 0003 0001 13593 |
3527 | +E: 1304510650.396615 0000 0000 0 |
3528 | +E: 1304510650.401591 0003 0035 16325 |
3529 | +E: 1304510650.401595 0003 0036 13669 |
3530 | +E: 1304510650.401600 0003 0030 1188 |
3531 | +E: 1304510650.401602 0003 0000 16319 |
3532 | +E: 1304510650.401603 0003 0001 13669 |
3533 | +E: 1304510650.401604 0000 0000 0 |
3534 | +E: 1304510650.406597 0003 0035 16328 |
3535 | +E: 1304510650.406601 0003 0036 13751 |
3536 | +E: 1304510650.406608 0003 0000 16321 |
3537 | +E: 1304510650.406609 0003 0001 13751 |
3538 | +E: 1304510650.406609 0000 0000 0 |
3539 | +E: 1304510650.411595 0003 0035 16336 |
3540 | +E: 1304510650.411603 0003 0036 13831 |
3541 | +E: 1304510650.411604 0003 0030 1322 |
3542 | +E: 1304510650.411607 0003 0000 16328 |
3543 | +E: 1304510650.411607 0003 0001 13831 |
3544 | +E: 1304510650.411608 0000 0000 0 |
3545 | +E: 1304510650.416593 0003 0035 16339 |
3546 | +E: 1304510650.416596 0003 0036 13911 |
3547 | +E: 1304510650.416601 0003 0030 1355 |
3548 | +E: 1304510650.416603 0003 0000 16330 |
3549 | +E: 1304510650.416604 0003 0001 13911 |
3550 | +E: 1304510650.416605 0000 0000 0 |
3551 | +E: 1304510650.421595 0003 0035 16346 |
3552 | +E: 1304510650.421598 0003 0036 13995 |
3553 | +E: 1304510650.421605 0003 0000 16338 |
3554 | +E: 1304510650.421606 0003 0001 13995 |
3555 | +E: 1304510650.421607 0000 0000 0 |
3556 | +E: 1304510650.427596 0003 0035 16349 |
3557 | +E: 1304510650.427600 0003 0036 14073 |
3558 | +E: 1304510650.427608 0003 0000 16340 |
3559 | +E: 1304510650.427608 0003 0001 14073 |
3560 | +E: 1304510650.427609 0000 0000 0 |
3561 | +E: 1304510650.432589 0003 0035 16352 |
3562 | +E: 1304510650.432592 0003 0036 14151 |
3563 | +E: 1304510650.432599 0003 0000 16343 |
3564 | +E: 1304510650.432599 0003 0001 14151 |
3565 | +E: 1304510650.432600 0000 0000 0 |
3566 | +E: 1304510650.437603 0003 0035 16355 |
3567 | +E: 1304510650.437607 0003 0036 14233 |
3568 | +E: 1304510650.437614 0003 0000 16346 |
3569 | +E: 1304510650.437615 0003 0001 14233 |
3570 | +E: 1304510650.437615 0000 0000 0 |
3571 | +E: 1304510650.442592 0003 0035 16358 |
3572 | +E: 1304510650.442595 0003 0036 14315 |
3573 | +E: 1304510650.442600 0003 0030 1223 |
3574 | +E: 1304510650.442602 0003 0000 16349 |
3575 | +E: 1304510650.442603 0003 0001 14315 |
3576 | +E: 1304510650.442604 0000 0000 0 |
3577 | +E: 1304510650.447600 0003 0035 16366 |
3578 | +E: 1304510650.447604 0003 0036 14395 |
3579 | +E: 1304510650.447608 0003 0030 1190 |
3580 | +E: 1304510650.447611 0003 0000 16357 |
3581 | +E: 1304510650.447612 0003 0001 14395 |
3582 | +E: 1304510650.447612 0000 0000 0 |
3583 | +E: 1304510650.452590 0003 0035 16369 |
3584 | +E: 1304510650.452599 0003 0036 14481 |
3585 | +E: 1304510650.452602 0003 0000 16360 |
3586 | +E: 1304510650.452603 0003 0001 14481 |
3587 | +E: 1304510650.452603 0000 0000 0 |
3588 | +E: 1304510650.457599 0003 0035 16372 |
3589 | +E: 1304510650.457603 0003 0036 14565 |
3590 | +E: 1304510650.457608 0003 0030 1323 |
3591 | +E: 1304510650.457611 0003 0000 16363 |
3592 | +E: 1304510650.457611 0003 0001 14565 |
3593 | +E: 1304510650.457612 0000 0000 0 |
3594 | +E: 1304510650.462602 0003 0035 16375 |
3595 | +E: 1304510650.462605 0003 0036 14651 |
3596 | +E: 1304510650.462611 0003 0030 1356 |
3597 | +E: 1304510650.462613 0003 0000 16366 |
3598 | +E: 1304510650.462614 0003 0001 14651 |
3599 | +E: 1304510650.462615 0000 0000 0 |
3600 | +E: 1304510650.467593 0003 0035 16378 |
3601 | +E: 1304510650.467597 0003 0036 14741 |
3602 | +E: 1304510650.467605 0003 0000 16369 |
3603 | +E: 1304510650.467605 0003 0001 14741 |
3604 | +E: 1304510650.467606 0000 0000 0 |
3605 | +E: 1304510650.472596 0003 0035 16381 |
3606 | +E: 1304510650.472604 0003 0036 14823 |
3607 | +E: 1304510650.472607 0003 0000 16372 |
3608 | +E: 1304510650.472608 0003 0001 14823 |
3609 | +E: 1304510650.472608 0000 0000 0 |
3610 | +E: 1304510650.477595 0003 0035 16384 |
3611 | +E: 1304510650.477599 0003 0036 14909 |
3612 | +E: 1304510650.477606 0003 0000 16375 |
3613 | +E: 1304510650.477607 0003 0001 14909 |
3614 | +E: 1304510650.477607 0000 0000 0 |
3615 | +E: 1304510650.482600 0003 0035 16387 |
3616 | +E: 1304510650.482603 0003 0036 14993 |
3617 | +E: 1304510650.482609 0003 0030 1224 |
3618 | +E: 1304510650.482612 0003 0000 16378 |
3619 | +E: 1304510650.482612 0003 0001 14993 |
3620 | +E: 1304510650.482613 0000 0000 0 |
3621 | +E: 1304510650.488595 0003 0035 16389 |
3622 | +E: 1304510650.488599 0003 0036 15075 |
3623 | +E: 1304510650.488605 0003 0030 1191 |
3624 | +E: 1304510650.488607 0003 0000 16380 |
3625 | +E: 1304510650.488608 0003 0001 15075 |
3626 | +E: 1304510650.488608 0000 0000 0 |
3627 | +E: 1304510650.493594 0003 0035 16391 |
3628 | +E: 1304510650.493597 0003 0036 15157 |
3629 | +E: 1304510650.493601 0003 0000 16382 |
3630 | +E: 1304510650.493601 0003 0001 15157 |
3631 | +E: 1304510650.493602 0000 0000 0 |
3632 | +E: 1304510650.498600 0003 0035 16398 |
3633 | +E: 1304510650.498604 0003 0036 15243 |
3634 | +E: 1304510650.498609 0003 0030 1323 |
3635 | +E: 1304510650.498612 0003 0000 16390 |
3636 | +E: 1304510650.498613 0003 0001 15243 |
3637 | +E: 1304510650.498614 0000 0000 0 |
3638 | +E: 1304510650.503583 0003 0035 16400 |
3639 | +E: 1304510650.503586 0003 0036 15329 |
3640 | +E: 1304510650.503586 0003 0030 1356 |
3641 | +E: 1304510650.503589 0003 0000 16392 |
3642 | +E: 1304510650.503589 0003 0001 15329 |
3643 | +E: 1304510650.503590 0000 0000 0 |
3644 | +E: 1304510650.508595 0003 0035 16402 |
3645 | +E: 1304510650.508604 0003 0036 15413 |
3646 | +E: 1304510650.508607 0003 0000 16394 |
3647 | +E: 1304510650.508608 0003 0001 15413 |
3648 | +E: 1304510650.508608 0000 0000 0 |
3649 | +E: 1304510650.513590 0003 0035 16404 |
3650 | +E: 1304510650.513594 0003 0036 15497 |
3651 | +E: 1304510650.513597 0003 0000 16396 |
3652 | +E: 1304510650.513604 0003 0001 15497 |
3653 | +E: 1304510650.513604 0000 0000 0 |
3654 | +E: 1304510650.518591 0003 0035 16406 |
3655 | +E: 1304510650.518597 0003 0036 15583 |
3656 | +E: 1304510650.518604 0003 0000 16398 |
3657 | +E: 1304510650.518604 0003 0001 15583 |
3658 | +E: 1304510650.518605 0000 0000 0 |
3659 | +E: 1304510650.523595 0003 0035 16408 |
3660 | +E: 1304510650.523598 0003 0036 15663 |
3661 | +E: 1304510650.523602 0003 0000 16400 |
3662 | +E: 1304510650.523602 0003 0001 15663 |
3663 | +E: 1304510650.523603 0000 0000 0 |
3664 | +E: 1304510650.528592 0003 0035 16410 |
3665 | +E: 1304510650.528596 0003 0036 15739 |
3666 | +E: 1304510650.528601 0003 0030 1224 |
3667 | +E: 1304510650.528603 0003 0000 16402 |
3668 | +E: 1304510650.528604 0003 0001 15739 |
3669 | +E: 1304510650.528604 0000 0000 0 |
3670 | +E: 1304510650.533597 0003 0035 16412 |
3671 | +E: 1304510650.533601 0003 0036 15823 |
3672 | +E: 1304510650.533602 0003 0030 1191 |
3673 | +E: 1304510650.533605 0003 0000 16404 |
3674 | +E: 1304510650.533606 0003 0001 15823 |
3675 | +E: 1304510650.533606 0000 0000 0 |
3676 | +E: 1304510650.538595 0003 0036 15913 |
3677 | +E: 1304510650.538606 0003 0000 16406 |
3678 | +E: 1304510650.538606 0003 0001 15913 |
3679 | +E: 1304510650.538607 0000 0000 0 |
3680 | +E: 1304510650.544594 0003 0035 16414 |
3681 | +E: 1304510650.544602 0003 0036 15991 |
3682 | +E: 1304510650.544603 0003 0030 1323 |
3683 | +E: 1304510650.544606 0003 0000 16408 |
3684 | +E: 1304510650.544606 0003 0001 15991 |
3685 | +E: 1304510650.544607 0000 0000 0 |
3686 | +E: 1304510650.549590 0003 0035 16416 |
3687 | +E: 1304510650.549596 0003 0036 16069 |
3688 | +E: 1304510650.549601 0003 0030 1356 |
3689 | +E: 1304510650.549604 0003 0000 16410 |
3690 | +E: 1304510650.549604 0003 0001 16069 |
3691 | +E: 1304510650.549605 0000 0000 0 |
3692 | +E: 1304510650.554589 0003 0036 16143 |
3693 | +E: 1304510650.554600 0003 0001 16143 |
3694 | +E: 1304510650.554601 0000 0000 0 |
3695 | +E: 1304510650.559595 0003 0036 16219 |
3696 | +E: 1304510650.559606 0003 0001 16219 |
3697 | +E: 1304510650.559607 0000 0000 0 |
3698 | +E: 1304510650.564589 0003 0035 16418 |
3699 | +E: 1304510650.564592 0003 0036 16299 |
3700 | +E: 1304510650.564599 0003 0000 16412 |
3701 | +E: 1304510650.564600 0003 0001 16299 |
3702 | +E: 1304510650.564600 0000 0000 0 |
3703 | +E: 1304510650.569595 0003 0036 16373 |
3704 | +E: 1304510650.569607 0003 0001 16373 |
3705 | +E: 1304510650.569607 0000 0000 0 |
3706 | +E: 1304510650.574584 0003 0036 16445 |
3707 | +E: 1304510650.574595 0003 0001 16445 |
3708 | +E: 1304510650.574596 0000 0000 0 |
3709 | +E: 1304510650.579603 0003 0036 16515 |
3710 | +E: 1304510650.579612 0003 0030 1224 |
3711 | +E: 1304510650.579616 0003 0001 16515 |
3712 | +E: 1304510650.579616 0000 0000 0 |
3713 | +E: 1304510650.584585 0003 0036 16585 |
3714 | +E: 1304510650.584592 0003 0030 1191 |
3715 | +E: 1304510650.584595 0003 0001 16585 |
3716 | +E: 1304510650.584595 0000 0000 0 |
3717 | +E: 1304510650.589596 0003 0036 16651 |
3718 | +E: 1304510650.589607 0003 0001 16651 |
3719 | +E: 1304510650.589607 0000 0000 0 |
3720 | +E: 1304510650.594594 0003 0035 16420 |
3721 | +E: 1304510650.594598 0003 0036 16717 |
3722 | +E: 1304510650.594605 0003 0000 16414 |
3723 | +E: 1304510650.594606 0003 0001 16717 |
3724 | +E: 1304510650.594606 0000 0000 0 |
3725 | +E: 1304510650.599594 0003 0035 16422 |
3726 | +E: 1304510650.599598 0003 0036 16785 |
3727 | +E: 1304510650.599606 0003 0000 16416 |
3728 | +E: 1304510650.599606 0003 0001 16785 |
3729 | +E: 1304510650.599607 0000 0000 0 |
3730 | +E: 1304510650.605591 0003 0036 16799 |
3731 | +E: 1304510650.605603 0003 0001 16788 |
3732 | +E: 1304510650.605604 0000 0000 0 |
3733 | +E: 1304510650.610593 0003 0036 16847 |
3734 | +E: 1304510650.610602 0003 0030 1323 |
3735 | +E: 1304510650.610605 0003 0001 16847 |
3736 | +E: 1304510650.610605 0000 0000 0 |
3737 | +E: 1304510650.615590 0003 0035 16424 |
3738 | +E: 1304510650.615593 0003 0036 16877 |
3739 | +E: 1304510650.615598 0003 0030 1356 |
3740 | +E: 1304510650.615600 0003 0000 16418 |
3741 | +E: 1304510650.615601 0003 0001 16877 |
3742 | +E: 1304510650.615601 0000 0000 0 |
3743 | +E: 1304510650.620599 0003 0036 16907 |
3744 | +E: 1304510650.620610 0003 0001 16907 |
3745 | +E: 1304510650.620611 0000 0000 0 |
3746 | +E: 1304510650.625583 0003 0035 16426 |
3747 | +E: 1304510650.625587 0003 0036 16939 |
3748 | +E: 1304510650.625595 0003 0000 16420 |
3749 | +E: 1304510650.625595 0003 0001 16939 |
3750 | +E: 1304510650.625596 0000 0000 0 |
3751 | +E: 1304510650.630596 0003 0036 16971 |
3752 | +E: 1304510650.630609 0003 0001 16971 |
3753 | +E: 1304510650.630610 0000 0000 0 |
3754 | +E: 1304510650.635591 0003 0036 16985 |
3755 | +E: 1304510650.635602 0003 0001 16974 |
3756 | +E: 1304510650.635602 0000 0000 0 |
3757 | +E: 1304510650.640593 0003 0036 17031 |
3758 | +E: 1304510650.640606 0003 0001 17031 |
3759 | +E: 1304510650.640606 0000 0000 0 |
3760 | +E: 1304510650.645582 0003 0036 17061 |
3761 | +E: 1304510650.645592 0003 0001 17061 |
3762 | +E: 1304510650.645593 0000 0000 0 |
3763 | +E: 1304510650.650594 0003 0036 17131 |
3764 | +E: 1304510650.650606 0003 0001 17131 |
3765 | +E: 1304510650.650607 0000 0000 0 |
3766 | +E: 1304510650.655591 0003 0036 17144 |
3767 | +E: 1304510650.655601 0003 0001 17134 |
3768 | +E: 1304510650.655602 0000 0000 0 |
3769 | +E: 1304510650.661592 0003 0036 17179 |
3770 | +E: 1304510650.661604 0003 0001 17179 |
3771 | +E: 1304510650.661604 0000 0000 0 |
3772 | +E: 1304510650.666588 0003 0036 17190 |
3773 | +E: 1304510650.666598 0003 0001 17181 |
3774 | +E: 1304510650.666599 0000 0000 0 |
3775 | +E: 1304510650.671593 0003 0036 17227 |
3776 | +E: 1304510650.671604 0003 0001 17227 |
3777 | +E: 1304510650.671605 0000 0000 0 |
3778 | +E: 1304510650.676593 0003 0036 17238 |
3779 | +E: 1304510650.676606 0003 0001 17229 |
3780 | +E: 1304510650.676607 0000 0000 0 |
3781 | +E: 1304510650.681593 0003 0036 17269 |
3782 | +E: 1304510650.681604 0003 0001 17269 |
3783 | +E: 1304510650.681605 0000 0000 0 |
3784 | +E: 1304510650.686589 0003 0036 17279 |
3785 | +E: 1304510650.686601 0003 0001 17271 |
3786 | +E: 1304510650.686601 0000 0000 0 |
3787 | +E: 1304510650.691597 0003 0036 17309 |
3788 | +E: 1304510650.691610 0003 0001 17309 |
3789 | +E: 1304510650.691610 0000 0000 0 |
3790 | +E: 1304510650.696585 0003 0036 17319 |
3791 | +E: 1304510650.696595 0003 0001 17311 |
3792 | +E: 1304510650.696595 0000 0000 0 |
3793 | +E: 1304510650.701592 0003 0036 17333 |
3794 | +E: 1304510650.701603 0003 0001 17322 |
3795 | +E: 1304510650.701604 0000 0000 0 |
3796 | +E: 1304510650.706578 0003 0036 17363 |
3797 | +E: 1304510650.706587 0003 0001 17363 |
3798 | +E: 1304510650.706588 0000 0000 0 |
3799 | +E: 1304510650.711595 0003 0036 17372 |
3800 | +E: 1304510650.711607 0003 0001 17365 |
3801 | +E: 1304510650.711607 0000 0000 0 |
3802 | +E: 1304510650.717594 0003 0036 17375 |
3803 | +E: 1304510650.717601 0003 0001 17367 |
3804 | +E: 1304510650.717602 0000 0000 0 |
3805 | +E: 1304510650.722591 0003 0036 17378 |
3806 | +E: 1304510650.722598 0003 0001 17369 |
3807 | +E: 1304510650.722599 0000 0000 0 |
3808 | +E: 1304510650.727591 0003 0036 17386 |
3809 | +E: 1304510650.727602 0003 0001 17377 |
3810 | +E: 1304510650.727603 0000 0000 0 |
3811 | +E: 1304510650.732591 0003 0036 17389 |
3812 | +E: 1304510650.732602 0003 0001 17380 |
3813 | +E: 1304510650.732603 0000 0000 0 |
3814 | +E: 1304510650.737590 0003 0036 17392 |
3815 | +E: 1304510650.737601 0003 0001 17383 |
3816 | +E: 1304510650.737601 0000 0000 0 |
3817 | +E: 1304510650.742591 0003 0036 17395 |
3818 | +E: 1304510650.742603 0003 0001 17386 |
3819 | +E: 1304510650.742603 0000 0000 0 |
3820 | +E: 1304510650.747575 0003 0036 17398 |
3821 | +E: 1304510650.747583 0003 0001 17389 |
3822 | +E: 1304510650.747583 0000 0000 0 |
3823 | +E: 1304510650.752592 0003 0036 17401 |
3824 | +E: 1304510650.752603 0003 0001 17392 |
3825 | +E: 1304510650.752604 0000 0000 0 |
3826 | +E: 1304510650.757587 0003 0036 17404 |
3827 | +E: 1304510650.757598 0003 0001 17395 |
3828 | +E: 1304510650.757599 0000 0000 0 |
3829 | +E: 1304510650.762594 0003 0036 17406 |
3830 | +E: 1304510650.762601 0003 0001 17397 |
3831 | +E: 1304510650.762602 0000 0000 0 |
3832 | +E: 1304510650.767584 0003 0036 17408 |
3833 | +E: 1304510650.767591 0003 0001 17399 |
3834 | +E: 1304510650.767595 0000 0000 0 |
3835 | +E: 1304510650.772601 0003 0036 17410 |
3836 | +E: 1304510650.772611 0003 0001 17401 |
3837 | +E: 1304510650.772611 0000 0000 0 |
3838 | +E: 1304510650.778599 0003 0036 17413 |
3839 | +E: 1304510650.778607 0003 0001 17404 |
3840 | +E: 1304510650.778608 0000 0000 0 |
3841 | +E: 1304510650.783591 0003 0036 17415 |
3842 | +E: 1304510650.783600 0003 0001 17406 |
3843 | +E: 1304510650.783600 0000 0000 0 |
3844 | +E: 1304510650.788598 0003 0036 17417 |
3845 | +E: 1304510650.788607 0003 0001 17408 |
3846 | +E: 1304510650.788608 0000 0000 0 |
3847 | +E: 1304510650.793591 0003 0036 17419 |
3848 | +E: 1304510650.793600 0003 0001 17410 |
3849 | +E: 1304510650.793601 0000 0000 0 |
3850 | +E: 1304510650.798597 0003 0036 17421 |
3851 | +E: 1304510650.798606 0003 0001 17412 |
3852 | +E: 1304510650.798606 0000 0000 0 |
3853 | +E: 1304510650.803590 0003 0036 17423 |
3854 | +E: 1304510650.803599 0003 0001 17414 |
3855 | +E: 1304510650.803600 0000 0000 0 |
3856 | +E: 1304510650.808602 0003 0001 17416 |
3857 | +E: 1304510650.808609 0000 0000 0 |
3858 | +E: 1304510650.813591 0003 0036 17425 |
3859 | +E: 1304510650.813600 0003 0001 17418 |
3860 | +E: 1304510650.813600 0000 0000 0 |
3861 | +E: 1304510650.818601 0003 0001 17419 |
3862 | +E: 1304510650.818607 0000 0000 0 |
3863 | +E: 1304510650.854591 0003 0030 1224 |
3864 | +E: 1304510650.854596 0000 0000 0 |
3865 | +E: 1304510650.859598 0003 0030 1191 |
3866 | +E: 1304510650.859607 0000 0000 0 |
3867 | +E: 1304510650.864596 0003 0036 17412 |
3868 | +E: 1304510650.864604 0003 0001 17417 |
3869 | +E: 1304510650.864605 0000 0000 0 |
3870 | +E: 1304510650.869597 0003 0036 17377 |
3871 | +E: 1304510650.869606 0003 0001 17377 |
3872 | +E: 1304510650.869606 0000 0000 0 |
3873 | +E: 1304510650.874596 0003 0036 17364 |
3874 | +E: 1304510650.874604 0003 0001 17373 |
3875 | +E: 1304510650.874605 0000 0000 0 |
3876 | +E: 1304510650.879591 0003 0036 17323 |
3877 | +E: 1304510650.879600 0003 0030 1323 |
3878 | +E: 1304510650.879603 0003 0001 17323 |
3879 | +E: 1304510650.879604 0000 0000 0 |
3880 | +E: 1304510650.884710 0003 0036 17291 |
3881 | +E: 1304510650.884718 0003 0030 1356 |
3882 | +E: 1304510650.884729 0003 0001 17291 |
3883 | +E: 1304510650.884731 0000 0000 0 |
3884 | +E: 1304510650.889723 0003 0036 17277 |
3885 | +E: 1304510650.889743 0003 0001 17287 |
3886 | +E: 1304510650.889745 0000 0000 0 |
3887 | +E: 1304510650.895587 0003 0036 17195 |
3888 | +E: 1304510650.895599 0003 0001 17195 |
3889 | +E: 1304510650.895600 0000 0000 0 |
3890 | +E: 1304510650.900591 0003 0036 17129 |
3891 | +E: 1304510650.900602 0003 0001 17129 |
3892 | +E: 1304510650.900603 0000 0000 0 |
3893 | +E: 1304510650.905585 0003 0036 17059 |
3894 | +E: 1304510650.905599 0003 0001 17059 |
3895 | +E: 1304510650.905600 0000 0000 0 |
3896 | +E: 1304510650.910589 0003 0036 17029 |
3897 | +E: 1304510650.910600 0003 0030 1224 |
3898 | +E: 1304510650.910603 0003 0001 17029 |
3899 | +E: 1304510650.910603 0000 0000 0 |
3900 | +E: 1304510650.915584 0003 0036 16961 |
3901 | +E: 1304510650.915592 0003 0030 1191 |
3902 | +E: 1304510650.915595 0003 0001 16961 |
3903 | +E: 1304510650.915596 0000 0000 0 |
3904 | +E: 1304510650.920587 0003 0036 16891 |
3905 | +E: 1304510650.920597 0003 0001 16891 |
3906 | +E: 1304510650.920598 0000 0000 0 |
3907 | +E: 1304510650.925587 0003 0036 16821 |
3908 | +E: 1304510650.925598 0003 0001 16821 |
3909 | +E: 1304510650.925599 0000 0000 0 |
3910 | +E: 1304510650.930586 0003 0036 16755 |
3911 | +E: 1304510650.930597 0003 0001 16755 |
3912 | +E: 1304510650.930598 0000 0000 0 |
3913 | +E: 1304510650.935586 0003 0036 16689 |
3914 | +E: 1304510650.935599 0003 0001 16689 |
3915 | +E: 1304510650.935600 0000 0000 0 |
3916 | +E: 1304510650.940588 0003 0036 16621 |
3917 | +E: 1304510650.940596 0003 0030 1323 |
3918 | +E: 1304510650.940599 0003 0001 16621 |
3919 | +E: 1304510650.940600 0000 0000 0 |
3920 | +E: 1304510650.945592 0003 0036 16589 |
3921 | +E: 1304510650.945598 0003 0030 1356 |
3922 | +E: 1304510650.945601 0003 0001 16589 |
3923 | +E: 1304510650.945607 0000 0000 0 |
3924 | +E: 1304510650.951584 0003 0036 16515 |
3925 | +E: 1304510650.951594 0003 0001 16515 |
3926 | +E: 1304510650.951595 0000 0000 0 |
3927 | +E: 1304510650.956584 0003 0036 16445 |
3928 | +E: 1304510650.956595 0003 0001 16445 |
3929 | +E: 1304510650.956595 0000 0000 0 |
3930 | +E: 1304510650.961588 0003 0036 16373 |
3931 | +E: 1304510650.961599 0003 0001 16373 |
3932 | +E: 1304510650.961599 0000 0000 0 |
3933 | +E: 1304510650.966573 0003 0036 16303 |
3934 | +E: 1304510650.966577 0003 0030 1224 |
3935 | +E: 1304510650.966583 0003 0001 16303 |
3936 | +E: 1304510650.966584 0000 0000 0 |
3937 | +E: 1304510650.971589 0003 0036 16233 |
3938 | +E: 1304510650.971598 0003 0030 1191 |
3939 | +E: 1304510650.971602 0003 0001 16233 |
3940 | +E: 1304510650.971602 0000 0000 0 |
3941 | +E: 1304510650.976582 0003 0036 16151 |
3942 | +E: 1304510650.976593 0003 0001 16151 |
3943 | +E: 1304510650.976594 0000 0000 0 |
3944 | +E: 1304510650.981590 0003 0036 16071 |
3945 | +E: 1304510650.981602 0003 0001 16071 |
3946 | +E: 1304510650.981602 0000 0000 0 |
3947 | +E: 1304510650.986585 0003 0036 15985 |
3948 | +E: 1304510650.986594 0003 0030 1323 |
3949 | +E: 1304510650.986597 0003 0001 15985 |
3950 | +E: 1304510650.986597 0000 0000 0 |
3951 | +E: 1304510650.991582 0003 0036 15903 |
3952 | +E: 1304510650.991593 0003 0030 1356 |
3953 | +E: 1304510650.991596 0003 0001 15903 |
3954 | +E: 1304510650.991597 0000 0000 0 |
3955 | +E: 1304510650.996583 0003 0036 15819 |
3956 | +E: 1304510650.996594 0003 0001 15819 |
3957 | +E: 1304510650.996594 0000 0000 0 |
3958 | +E: 1304510651.001590 0003 0036 15733 |
3959 | +E: 1304510651.001601 0003 0001 15733 |
3960 | +E: 1304510651.001601 0000 0000 0 |
3961 | +E: 1304510651.006580 0003 0036 15647 |
3962 | +E: 1304510651.006589 0003 0030 1224 |
3963 | +E: 1304510651.006592 0003 0001 15647 |
3964 | +E: 1304510651.006593 0000 0000 0 |
3965 | +E: 1304510651.012590 0003 0036 15567 |
3966 | +E: 1304510651.012599 0003 0030 1191 |
3967 | +E: 1304510651.012602 0003 0001 15567 |
3968 | +E: 1304510651.012603 0000 0000 0 |
3969 | +E: 1304510651.017592 0003 0036 15481 |
3970 | +E: 1304510651.017604 0003 0001 15481 |
3971 | +E: 1304510651.017605 0000 0000 0 |
3972 | +E: 1304510651.022587 0003 0036 15397 |
3973 | +E: 1304510651.022598 0003 0001 15397 |
3974 | +E: 1304510651.022599 0000 0000 0 |
3975 | +E: 1304510651.027589 0003 0036 15317 |
3976 | +E: 1304510651.027597 0003 0030 1323 |
3977 | +E: 1304510651.027600 0003 0001 15317 |
3978 | +E: 1304510651.027600 0000 0000 0 |
3979 | +E: 1304510651.032586 0003 0036 15233 |
3980 | +E: 1304510651.032594 0003 0030 1356 |
3981 | +E: 1304510651.032597 0003 0001 15233 |
3982 | +E: 1304510651.032597 0000 0000 0 |
3983 | +E: 1304510651.037583 0003 0035 16424 |
3984 | +E: 1304510651.037589 0003 0036 15155 |
3985 | +E: 1304510651.037592 0003 0001 15155 |
3986 | +E: 1304510651.037597 0000 0000 0 |
3987 | +E: 1304510651.042583 0003 0035 16422 |
3988 | +E: 1304510651.042592 0003 0036 15081 |
3989 | +E: 1304510651.042596 0003 0001 15081 |
3990 | +E: 1304510651.042596 0000 0000 0 |
3991 | +E: 1304510651.047582 0003 0035 16420 |
3992 | +E: 1304510651.047586 0003 0036 15005 |
3993 | +E: 1304510651.047594 0003 0001 15005 |
3994 | +E: 1304510651.047594 0000 0000 0 |
3995 | +E: 1304510651.052592 0003 0035 16418 |
3996 | +E: 1304510651.052600 0003 0036 14933 |
3997 | +E: 1304510651.052607 0003 0001 14933 |
3998 | +E: 1304510651.052608 0000 0000 0 |
3999 | +E: 1304510651.057587 0003 0035 16416 |
4000 | +E: 1304510651.057595 0003 0036 14857 |
4001 | +E: 1304510651.057596 0003 0030 1224 |
4002 | +E: 1304510651.057599 0003 0001 14857 |
4003 | +E: 1304510651.057599 0000 0000 0 |
4004 | +E: 1304510651.062586 0003 0036 14785 |
4005 | +E: 1304510651.062590 0003 0030 1191 |
4006 | +E: 1304510651.062593 0003 0001 14785 |
4007 | +E: 1304510651.062594 0000 0000 0 |
4008 | +E: 1304510651.068589 0003 0036 14703 |
4009 | +E: 1304510651.068601 0003 0001 14703 |
4010 | +E: 1304510651.068602 0000 0000 0 |
4011 | +E: 1304510651.073586 0003 0035 16414 |
4012 | +E: 1304510651.073590 0003 0036 14625 |
4013 | +E: 1304510651.073594 0003 0001 14625 |
4014 | +E: 1304510651.073598 0000 0000 0 |
4015 | +E: 1304510651.078582 0003 0036 14543 |
4016 | +E: 1304510651.078592 0003 0030 1323 |
4017 | +E: 1304510651.078594 0003 0001 14543 |
4018 | +E: 1304510651.078595 0000 0000 0 |
4019 | +E: 1304510651.083580 0003 0035 16412 |
4020 | +E: 1304510651.083584 0003 0036 14455 |
4021 | +E: 1304510651.083585 0003 0030 1356 |
4022 | +E: 1304510651.083588 0003 0000 16418 |
4023 | +E: 1304510651.083588 0003 0001 14455 |
4024 | +E: 1304510651.083589 0000 0000 0 |
4025 | +E: 1304510651.088582 0003 0035 16410 |
4026 | +E: 1304510651.088586 0003 0036 14369 |
4027 | +E: 1304510651.088593 0003 0000 16416 |
4028 | +E: 1304510651.088594 0003 0001 14369 |
4029 | +E: 1304510651.088594 0000 0000 0 |
4030 | +E: 1304510651.093585 0003 0035 16407 |
4031 | +E: 1304510651.093589 0003 0036 14287 |
4032 | +E: 1304510651.093592 0003 0000 16413 |
4033 | +E: 1304510651.093592 0003 0001 14287 |
4034 | +E: 1304510651.093593 0000 0000 0 |
4035 | +E: 1304510651.098568 0003 0035 16404 |
4036 | +E: 1304510651.098571 0003 0036 14201 |
4037 | +E: 1304510651.098572 0003 0030 1224 |
4038 | +E: 1304510651.098577 0003 0000 16410 |
4039 | +E: 1304510651.098578 0003 0001 14201 |
4040 | +E: 1304510651.098578 0000 0000 0 |
4041 | +E: 1304510651.103585 0003 0035 16401 |
4042 | +E: 1304510651.103589 0003 0036 14107 |
4043 | +E: 1304510651.103590 0003 0030 1191 |
4044 | +E: 1304510651.103593 0003 0000 16407 |
4045 | +E: 1304510651.103593 0003 0001 14107 |
4046 | +E: 1304510651.103594 0000 0000 0 |
4047 | +E: 1304510651.108575 0003 0035 16398 |
4048 | +E: 1304510651.108578 0003 0036 14011 |
4049 | +E: 1304510651.108585 0003 0000 16404 |
4050 | +E: 1304510651.108586 0003 0001 14011 |
4051 | +E: 1304510651.108586 0000 0000 0 |
4052 | +E: 1304510651.113586 0003 0035 16395 |
4053 | +E: 1304510651.113591 0003 0036 13921 |
4054 | +E: 1304510651.113592 0003 0030 1323 |
4055 | +E: 1304510651.113595 0003 0000 16401 |
4056 | +E: 1304510651.113595 0003 0001 13921 |
4057 | +E: 1304510651.113596 0000 0000 0 |
4058 | +E: 1304510651.118584 0003 0035 16391 |
4059 | +E: 1304510651.118589 0003 0036 13831 |
4060 | +E: 1304510651.118590 0003 0030 1356 |
4061 | +E: 1304510651.118592 0003 0000 16398 |
4062 | +E: 1304510651.118595 0003 0001 13831 |
4063 | +E: 1304510651.118596 0000 0000 0 |
4064 | +E: 1304510651.124590 0003 0035 16383 |
4065 | +E: 1304510651.124594 0003 0036 13745 |
4066 | +E: 1304510651.124597 0003 0000 16390 |
4067 | +E: 1304510651.124600 0003 0001 13745 |
4068 | +E: 1304510651.124601 0000 0000 0 |
4069 | +E: 1304510651.129568 0003 0035 16380 |
4070 | +E: 1304510651.129571 0003 0036 13655 |
4071 | +E: 1304510651.129578 0003 0000 16387 |
4072 | +E: 1304510651.129578 0003 0001 13655 |
4073 | +E: 1304510651.129578 0000 0000 0 |
4074 | +E: 1304510651.134582 0003 0035 16376 |
4075 | +E: 1304510651.134586 0003 0036 13563 |
4076 | +E: 1304510651.134593 0003 0000 16384 |
4077 | +E: 1304510651.134594 0003 0001 13563 |
4078 | +E: 1304510651.134594 0000 0000 0 |
4079 | +E: 1304510651.139578 0003 0035 16368 |
4080 | +E: 1304510651.139583 0003 0036 13473 |
4081 | +E: 1304510651.139588 0003 0034 1 |
4082 | +E: 1304510651.139588 0003 0030 1299 |
4083 | +E: 1304510651.139591 0003 0000 16376 |
4084 | +E: 1304510651.139592 0003 0001 13473 |
4085 | +E: 1304510651.139593 0000 0000 0 |
4086 | +E: 1304510651.144581 0003 0035 16365 |
4087 | +E: 1304510651.144585 0003 0036 13383 |
4088 | +E: 1304510651.144590 0003 0030 1256 |
4089 | +E: 1304510651.144592 0003 0000 16373 |
4090 | +E: 1304510651.144593 0003 0001 13383 |
4091 | +E: 1304510651.144594 0000 0000 0 |
4092 | +E: 1304510651.149583 0003 0035 16357 |
4093 | +E: 1304510651.149587 0003 0036 13291 |
4094 | +E: 1304510651.149594 0003 0000 16365 |
4095 | +E: 1304510651.149595 0003 0001 13291 |
4096 | +E: 1304510651.149596 0000 0000 0 |
4097 | +E: 1304510651.154588 0003 0035 16354 |
4098 | +E: 1304510651.154598 0003 0036 13195 |
4099 | +E: 1304510651.154599 0003 0034 0 |
4100 | +E: 1304510651.154600 0003 0030 1306 |
4101 | +E: 1304510651.154603 0003 0000 16362 |
4102 | +E: 1304510651.154604 0003 0001 13195 |
4103 | +E: 1304510651.154604 0000 0000 0 |
4104 | +E: 1304510651.159587 0003 0035 16351 |
4105 | +E: 1304510651.159591 0003 0036 13107 |
4106 | +E: 1304510651.159596 0003 0030 1343 |
4107 | +E: 1304510651.159599 0003 0000 16359 |
4108 | +E: 1304510651.159599 0003 0001 13107 |
4109 | +E: 1304510651.159600 0000 0000 0 |
4110 | +E: 1304510651.164588 0003 0035 16348 |
4111 | +E: 1304510651.164593 0003 0036 13017 |
4112 | +E: 1304510651.164600 0003 0000 16356 |
4113 | +E: 1304510651.164601 0003 0001 13017 |
4114 | +E: 1304510651.164601 0000 0000 0 |
4115 | +E: 1304510651.169570 0003 0035 16344 |
4116 | +E: 1304510651.169577 0003 0036 12931 |
4117 | +E: 1304510651.169580 0003 0000 16353 |
4118 | +E: 1304510651.169580 0003 0001 12931 |
4119 | +E: 1304510651.169581 0000 0000 0 |
4120 | +E: 1304510651.174584 0003 0035 16340 |
4121 | +E: 1304510651.174592 0003 0036 12851 |
4122 | +E: 1304510651.174596 0003 0000 16349 |
4123 | +E: 1304510651.174596 0003 0001 12851 |
4124 | +E: 1304510651.174597 0000 0000 0 |
4125 | +E: 1304510651.179581 0003 0035 16336 |
4126 | +E: 1304510651.179585 0003 0036 12775 |
4127 | +E: 1304510651.179592 0003 0000 16345 |
4128 | +E: 1304510651.179593 0003 0001 12775 |
4129 | +E: 1304510651.179594 0000 0000 0 |
4130 | +E: 1304510651.185588 0003 0035 16328 |
4131 | +E: 1304510651.185592 0003 0036 12697 |
4132 | +E: 1304510651.185597 0003 0034 1 |
4133 | +E: 1304510651.185598 0003 0030 1289 |
4134 | +E: 1304510651.185601 0003 0000 16336 |
4135 | +E: 1304510651.185601 0003 0001 12697 |
4136 | +E: 1304510651.185602 0000 0000 0 |
4137 | +E: 1304510651.190567 0003 0035 16325 |
4138 | +E: 1304510651.190574 0003 0036 12617 |
4139 | +E: 1304510651.190575 0003 0030 1249 |
4140 | +E: 1304510651.190577 0003 0000 16333 |
4141 | +E: 1304510651.190577 0003 0001 12617 |
4142 | +E: 1304510651.190578 0000 0000 0 |
4143 | +E: 1304510651.195586 0003 0035 16322 |
4144 | +E: 1304510651.195590 0003 0036 12533 |
4145 | +E: 1304510651.195597 0003 0000 16330 |
4146 | +E: 1304510651.195598 0003 0001 12533 |
4147 | +E: 1304510651.195598 0000 0000 0 |
4148 | +E: 1304510651.200572 0003 0035 16319 |
4149 | +E: 1304510651.200580 0003 0036 12451 |
4150 | +E: 1304510651.200583 0003 0000 16327 |
4151 | +E: 1304510651.200583 0003 0001 12451 |
4152 | +E: 1304510651.200584 0000 0000 0 |
4153 | +E: 1304510651.205583 0003 0035 16316 |
4154 | +E: 1304510651.205587 0003 0036 12365 |
4155 | +E: 1304510651.205587 0003 0034 0 |
4156 | +E: 1304510651.205588 0003 0030 1300 |
4157 | +E: 1304510651.205591 0003 0000 16324 |
4158 | +E: 1304510651.205591 0003 0001 12365 |
4159 | +E: 1304510651.205592 0000 0000 0 |
4160 | +E: 1304510651.210583 0003 0035 16313 |
4161 | +E: 1304510651.210587 0003 0036 12283 |
4162 | +E: 1304510651.210593 0003 0030 1339 |
4163 | +E: 1304510651.210596 0003 0000 16321 |
4164 | +E: 1304510651.210596 0003 0001 12283 |
4165 | +E: 1304510651.210597 0000 0000 0 |
4166 | +E: 1304510651.215582 0003 0035 16310 |
4167 | +E: 1304510651.215586 0003 0036 12199 |
4168 | +E: 1304510651.215593 0003 0000 16318 |
4169 | +E: 1304510651.215594 0003 0001 12199 |
4170 | +E: 1304510651.215595 0000 0000 0 |
4171 | +E: 1304510651.220578 0003 0035 16302 |
4172 | +E: 1304510651.220581 0003 0036 12109 |
4173 | +E: 1304510651.220589 0003 0000 16310 |
4174 | +E: 1304510651.220589 0003 0001 12109 |
4175 | +E: 1304510651.220590 0000 0000 0 |
4176 | +E: 1304510651.225581 0003 0035 16293 |
4177 | +E: 1304510651.225585 0003 0036 12015 |
4178 | +E: 1304510651.225589 0003 0034 1 |
4179 | +E: 1304510651.225590 0003 0030 1286 |
4180 | +E: 1304510651.225593 0003 0000 16301 |
4181 | +E: 1304510651.225593 0003 0001 12015 |
4182 | +E: 1304510651.225594 0000 0000 0 |
4183 | +E: 1304510651.230574 0003 0035 16285 |
4184 | +E: 1304510651.230582 0003 0036 11921 |
4185 | +E: 1304510651.230583 0003 0030 1247 |
4186 | +E: 1304510651.230586 0003 0000 16293 |
4187 | +E: 1304510651.230587 0003 0001 11921 |
4188 | +E: 1304510651.230587 0000 0000 0 |
4189 | +E: 1304510651.235581 0003 0035 16282 |
4190 | +E: 1304510651.235585 0003 0036 11825 |
4191 | +E: 1304510651.235590 0003 0034 0 |
4192 | +E: 1304510651.235590 0003 0030 1299 |
4193 | +E: 1304510651.235593 0003 0000 16290 |
4194 | +E: 1304510651.235593 0003 0001 11825 |
4195 | +E: 1304510651.235594 0000 0000 0 |
4196 | +E: 1304510651.241581 0003 0035 16280 |
4197 | +E: 1304510651.241589 0003 0036 11723 |
4198 | +E: 1304510651.241590 0003 0030 1338 |
4199 | +E: 1304510651.241593 0003 0000 16287 |
4200 | +E: 1304510651.241593 0003 0001 11723 |
4201 | +E: 1304510651.241594 0000 0000 0 |
4202 | +E: 1304510651.246582 0003 0035 16278 |
4203 | +E: 1304510651.246586 0003 0036 11631 |
4204 | +E: 1304510651.246590 0003 0000 16284 |
4205 | +E: 1304510651.246594 0003 0001 11631 |
4206 | +E: 1304510651.246594 0000 0000 0 |
4207 | +E: 1304510651.251571 0003 0035 16238 |
4208 | +E: 1304510651.251574 0003 0036 11531 |
4209 | +E: 1304510651.251576 0003 0000 16238 |
4210 | +E: 1304510651.251577 0003 0001 11531 |
4211 | +E: 1304510651.251577 0000 0000 0 |
4212 | +E: 1304510651.256580 0003 0035 16204 |
4213 | +E: 1304510651.256584 0003 0036 11431 |
4214 | +E: 1304510651.256589 0003 0034 1 |
4215 | +E: 1304510651.256589 0003 0030 1286 |
4216 | +E: 1304510651.256592 0003 0000 16204 |
4217 | +E: 1304510651.256593 0003 0001 11431 |
4218 | +E: 1304510651.256593 0000 0000 0 |
4219 | +E: 1304510651.261582 0003 0035 16190 |
4220 | +E: 1304510651.261586 0003 0036 11325 |
4221 | +E: 1304510651.261587 0003 0030 1247 |
4222 | +E: 1304510651.261589 0003 0000 16200 |
4223 | +E: 1304510651.261590 0003 0001 11325 |
4224 | +E: 1304510651.261597 0000 0000 0 |
4225 | +E: 1304510651.266581 0003 0035 16187 |
4226 | +E: 1304510651.266584 0003 0036 11223 |
4227 | +E: 1304510651.266592 0003 0000 16196 |
4228 | +E: 1304510651.266592 0003 0001 11223 |
4229 | +E: 1304510651.266593 0000 0000 0 |
4230 | +E: 1304510651.271578 0003 0035 16185 |
4231 | +E: 1304510651.271585 0003 0036 11121 |
4232 | +E: 1304510651.271589 0003 0000 16193 |
4233 | +E: 1304510651.271589 0003 0001 11121 |
4234 | +E: 1304510651.271590 0000 0000 0 |
4235 | +E: 1304510651.276583 0003 0035 16170 |
4236 | +E: 1304510651.276587 0003 0036 11029 |
4237 | +E: 1304510651.276587 0003 0034 0 |
4238 | +E: 1304510651.276588 0003 0030 1299 |
4239 | +E: 1304510651.276591 0003 0000 16181 |
4240 | +E: 1304510651.276596 0003 0001 11029 |
4241 | +E: 1304510651.276597 0000 0000 0 |
4242 | +E: 1304510651.281565 0003 0036 10933 |
4243 | +E: 1304510651.281573 0003 0030 1338 |
4244 | +E: 1304510651.281574 0003 0000 16178 |
4245 | +E: 1304510651.281575 0003 0001 10933 |
4246 | +E: 1304510651.281575 0000 0000 0 |
4247 | +E: 1304510651.286579 0003 0035 16140 |
4248 | +E: 1304510651.286582 0003 0036 10831 |
4249 | +E: 1304510651.286590 0003 0000 16140 |
4250 | +E: 1304510651.286590 0003 0001 10831 |
4251 | +E: 1304510651.286591 0000 0000 0 |
4252 | +E: 1304510651.291572 0003 0035 16130 |
4253 | +E: 1304510651.291580 0003 0036 10735 |
4254 | +E: 1304510651.291583 0003 0000 16137 |
4255 | +E: 1304510651.291583 0003 0001 10735 |
4256 | +E: 1304510651.291584 0000 0000 0 |
4257 | +E: 1304510651.296583 0003 0035 16098 |
4258 | +E: 1304510651.296587 0003 0036 10639 |
4259 | +E: 1304510651.296591 0003 0034 1 |
4260 | +E: 1304510651.296592 0003 0030 1286 |
4261 | +E: 1304510651.296595 0003 0000 16098 |
4262 | +E: 1304510651.296595 0003 0001 10639 |
4263 | +E: 1304510651.296596 0000 0000 0 |
4264 | +E: 1304510651.302588 0003 0036 10535 |
4265 | +E: 1304510651.302593 0003 0030 1247 |
4266 | +E: 1304510651.302596 0003 0001 10535 |
4267 | +E: 1304510651.302601 0000 0000 0 |
4268 | +E: 1304510651.307584 0003 0035 16095 |
4269 | +E: 1304510651.307588 0003 0036 10431 |
4270 | +E: 1304510651.307596 0003 0001 10431 |
4271 | +E: 1304510651.307596 0000 0000 0 |
4272 | +E: 1304510651.312577 0003 0036 10327 |
4273 | +E: 1304510651.312584 0003 0034 0 |
4274 | +E: 1304510651.312585 0003 0030 1299 |
4275 | +E: 1304510651.312588 0003 0001 10327 |
4276 | +E: 1304510651.312588 0000 0000 0 |
4277 | +E: 1304510651.317584 0003 0035 16087 |
4278 | +E: 1304510651.317588 0003 0036 10225 |
4279 | +E: 1304510651.317593 0003 0030 1338 |
4280 | +E: 1304510651.317596 0003 0000 16095 |
4281 | +E: 1304510651.317596 0003 0001 10225 |
4282 | +E: 1304510651.317597 0000 0000 0 |
4283 | +E: 1304510651.322579 0003 0035 16074 |
4284 | +E: 1304510651.322587 0003 0036 10123 |
4285 | +E: 1304510651.322590 0003 0000 16084 |
4286 | +E: 1304510651.322591 0003 0001 10123 |
4287 | +E: 1304510651.322591 0000 0000 0 |
4288 | +E: 1304510651.327574 0003 0035 16060 |
4289 | +E: 1304510651.327578 0003 0036 10017 |
4290 | +E: 1304510651.327583 0003 0030 1276 |
4291 | +E: 1304510651.327583 0003 0031 843 |
4292 | +E: 1304510651.327586 0003 0000 16072 |
4293 | +E: 1304510651.327586 0003 0001 10017 |
4294 | +E: 1304510651.327587 0000 0000 0 |
4295 | +E: 1304510651.332577 0003 0036 9909 |
4296 | +E: 1304510651.332585 0003 0030 1230 |
4297 | +E: 1304510651.332586 0003 0031 801 |
4298 | +E: 1304510651.332588 0003 0000 16069 |
4299 | +E: 1304510651.332589 0003 0001 9909 |
4300 | +E: 1304510651.332589 0000 0000 0 |
4301 | +E: 1304510651.337579 0003 0035 16049 |
4302 | +E: 1304510651.337582 0003 0036 9803 |
4303 | +E: 1304510651.337588 0003 0030 1195 |
4304 | +E: 1304510651.337590 0003 0000 16059 |
4305 | +E: 1304510651.337591 0003 0001 9803 |
4306 | +E: 1304510651.337591 0000 0000 0 |
4307 | +E: 1304510651.342574 0003 0035 16036 |
4308 | +E: 1304510651.342578 0003 0036 9695 |
4309 | +E: 1304510651.342583 0003 0030 1325 |
4310 | +E: 1304510651.342585 0003 0000 16047 |
4311 | +E: 1304510651.342586 0003 0001 9695 |
4312 | +E: 1304510651.342586 0000 0000 0 |
4313 | +E: 1304510651.347579 0003 0035 16025 |
4314 | +E: 1304510651.347583 0003 0036 9585 |
4315 | +E: 1304510651.347584 0003 0030 1357 |
4316 | +E: 1304510651.347585 0003 0031 965 |
4317 | +E: 1304510651.347587 0003 0000 16036 |
4318 | +E: 1304510651.347588 0003 0001 9585 |
4319 | +E: 1304510651.347593 0000 0000 0 |
4320 | +E: 1304510651.352581 0003 0036 9477 |
4321 | +E: 1304510651.352589 0003 0031 821 |
4322 | +E: 1304510651.352592 0003 0000 16033 |
4323 | +E: 1304510651.352593 0003 0001 9477 |
4324 | +E: 1304510651.352593 0000 0000 0 |
4325 | +E: 1304510651.358582 0003 0035 16021 |
4326 | +E: 1304510651.358586 0003 0036 9369 |
4327 | +E: 1304510651.358591 0003 0031 785 |
4328 | +E: 1304510651.358593 0003 0000 16030 |
4329 | +E: 1304510651.358594 0003 0001 9369 |
4330 | +E: 1304510651.358594 0000 0000 0 |
4331 | +E: 1304510651.363574 0003 0035 16010 |
4332 | +E: 1304510651.363579 0003 0036 9267 |
4333 | +E: 1304510651.363580 0003 0030 1224 |
4334 | +E: 1304510651.363582 0003 0000 16020 |
4335 | +E: 1304510651.363583 0003 0001 9267 |
4336 | +E: 1304510651.363583 0000 0000 0 |
4337 | +E: 1304510651.368576 0003 0035 16000 |
4338 | +E: 1304510651.368580 0003 0036 9167 |
4339 | +E: 1304510651.368584 0003 0030 1191 |
4340 | +E: 1304510651.368587 0003 0000 16010 |
4341 | +E: 1304510651.368588 0003 0001 9167 |
4342 | +E: 1304510651.368588 0000 0000 0 |
4343 | +E: 1304510651.373572 0003 0035 15990 |
4344 | +E: 1304510651.373576 0003 0036 9067 |
4345 | +E: 1304510651.373579 0003 0000 16000 |
4346 | +E: 1304510651.373580 0003 0001 9067 |
4347 | +E: 1304510651.373580 0000 0000 0 |
4348 | +E: 1304510651.378586 0003 0035 15981 |
4349 | +E: 1304510651.378591 0003 0036 8957 |
4350 | +E: 1304510651.378596 0003 0030 1323 |
4351 | +E: 1304510651.378599 0003 0000 15990 |
4352 | +E: 1304510651.378599 0003 0001 8957 |
4353 | +E: 1304510651.378600 0000 0000 0 |
4354 | +E: 1304510651.383563 0003 0036 8855 |
4355 | +E: 1304510651.383566 0003 0030 1356 |
4356 | +E: 1304510651.383568 0003 0000 15987 |
4357 | +E: 1304510651.383568 0003 0001 8855 |
4358 | +E: 1304510651.383569 0000 0000 0 |
4359 | +E: 1304510651.388579 0003 0035 15990 |
4360 | +E: 1304510651.388583 0003 0036 8751 |
4361 | +E: 1304510651.388591 0003 0001 8751 |
4362 | +E: 1304510651.388591 0000 0000 0 |
4363 | +E: 1304510651.393568 0003 0035 15999 |
4364 | +E: 1304510651.393571 0003 0036 8647 |
4365 | +E: 1304510651.393574 0003 0000 15990 |
4366 | +E: 1304510651.393575 0003 0001 8647 |
4367 | +E: 1304510651.393575 0000 0000 0 |
4368 | +E: 1304510651.398583 0003 0035 16006 |
4369 | +E: 1304510651.398586 0003 0036 8547 |
4370 | +E: 1304510651.398591 0003 0030 1224 |
4371 | +E: 1304510651.398594 0003 0000 15998 |
4372 | +E: 1304510651.398595 0003 0001 8547 |
4373 | +E: 1304510651.398595 0000 0000 0 |
4374 | +E: 1304510651.403573 0003 0035 16004 |
4375 | +E: 1304510651.403577 0003 0036 8443 |
4376 | +E: 1304510651.403578 0003 0030 1191 |
4377 | +E: 1304510651.403580 0003 0001 8443 |
4378 | +E: 1304510651.403581 0000 0000 0 |
4379 | +E: 1304510651.408581 0003 0036 8337 |
4380 | +E: 1304510651.408593 0003 0001 8337 |
4381 | +E: 1304510651.408593 0000 0000 0 |
4382 | +E: 1304510651.414567 0003 0036 8229 |
4383 | +E: 1304510651.414574 0003 0030 1323 |
4384 | +E: 1304510651.414577 0003 0001 8229 |
4385 | +E: 1304510651.414577 0000 0000 0 |
4386 | +E: 1304510651.419580 0003 0035 16002 |
4387 | +E: 1304510651.419584 0003 0036 8117 |
4388 | +E: 1304510651.419589 0003 0030 1356 |
4389 | +E: 1304510651.419592 0003 0001 8117 |
4390 | +E: 1304510651.419593 0000 0000 0 |
4391 | +E: 1304510651.424575 0003 0036 8013 |
4392 | +E: 1304510651.424586 0003 0001 8013 |
4393 | +E: 1304510651.424587 0000 0000 0 |
4394 | +E: 1304510651.429580 0003 0035 15994 |
4395 | +E: 1304510651.429583 0003 0036 7909 |
4396 | +E: 1304510651.429591 0003 0001 7909 |
4397 | +E: 1304510651.429591 0000 0000 0 |
4398 | +E: 1304510651.434574 0003 0036 7805 |
4399 | +E: 1304510651.434582 0003 0030 1224 |
4400 | +E: 1304510651.434585 0003 0001 7805 |
4401 | +E: 1304510651.434586 0000 0000 0 |
4402 | +E: 1304510651.439578 0003 0036 7703 |
4403 | +E: 1304510651.439586 0003 0030 1191 |
4404 | +E: 1304510651.439590 0003 0001 7703 |
4405 | +E: 1304510651.439590 0000 0000 0 |
4406 | +E: 1304510651.444593 0003 0035 15991 |
4407 | +E: 1304510651.444600 0003 0036 7599 |
4408 | +E: 1304510651.444607 0003 0000 15996 |
4409 | +E: 1304510651.444608 0003 0001 7599 |
4410 | +E: 1304510651.444608 0000 0000 0 |
4411 | +E: 1304510651.449581 0003 0035 15980 |
4412 | +E: 1304510651.449585 0003 0036 7485 |
4413 | +E: 1304510651.449590 0003 0030 1323 |
4414 | +E: 1304510651.449593 0003 0000 15988 |
4415 | +E: 1304510651.449593 0003 0001 7485 |
4416 | +E: 1304510651.449594 0000 0000 0 |
4417 | +E: 1304510651.454564 0003 0035 15970 |
4418 | +E: 1304510651.454567 0003 0036 7379 |
4419 | +E: 1304510651.454568 0003 0030 1356 |
4420 | +E: 1304510651.454573 0003 0000 15979 |
4421 | +E: 1304510651.454574 0003 0001 7379 |
4422 | +E: 1304510651.454574 0000 0000 0 |
4423 | +E: 1304510651.459579 0003 0035 15959 |
4424 | +E: 1304510651.459583 0003 0036 7275 |
4425 | +E: 1304510651.459590 0003 0000 15969 |
4426 | +E: 1304510651.459591 0003 0001 7275 |
4427 | +E: 1304510651.459591 0000 0000 0 |
4428 | +E: 1304510651.464572 0003 0036 7171 |
4429 | +E: 1304510651.464583 0003 0000 15966 |
4430 | +E: 1304510651.464583 0003 0001 7171 |
4431 | +E: 1304510651.464584 0000 0000 0 |
4432 | +E: 1304510651.469578 0003 0036 7069 |
4433 | +E: 1304510651.469589 0003 0000 15964 |
4434 | +E: 1304510651.469589 0003 0001 7069 |
4435 | +E: 1304510651.469590 0000 0000 0 |
4436 | +E: 1304510651.475577 0003 0036 6965 |
4437 | +E: 1304510651.475586 0003 0030 1224 |
4438 | +E: 1304510651.475589 0003 0001 6965 |
4439 | +E: 1304510651.475589 0000 0000 0 |
4440 | +E: 1304510651.480588 0003 0036 6855 |
4441 | +E: 1304510651.480597 0003 0030 1191 |
4442 | +E: 1304510651.480600 0003 0001 6855 |
4443 | +E: 1304510651.480601 0000 0000 0 |
4444 | +E: 1304510651.485562 0003 0036 6745 |
4445 | +E: 1304510651.485565 0003 0030 1323 |
4446 | +E: 1304510651.485571 0003 0001 6745 |
4447 | +E: 1304510651.485571 0000 0000 0 |
4448 | +E: 1304510651.490575 0003 0036 6641 |
4449 | +E: 1304510651.490580 0003 0030 1356 |
4450 | +E: 1304510651.490582 0003 0001 6641 |
4451 | +E: 1304510651.490583 0000 0000 0 |
4452 | +E: 1304510651.495575 0003 0035 15949 |
4453 | +E: 1304510651.495581 0003 0036 6539 |
4454 | +E: 1304510651.495584 0003 0000 15956 |
4455 | +E: 1304510651.495585 0003 0001 6539 |
4456 | +E: 1304510651.495585 0000 0000 0 |
4457 | +E: 1304510651.500579 0003 0035 15941 |
4458 | +E: 1304510651.500582 0003 0036 6439 |
4459 | +E: 1304510651.500589 0003 0000 15948 |
4460 | +E: 1304510651.500590 0003 0001 6439 |
4461 | +E: 1304510651.500590 0000 0000 0 |
4462 | +E: 1304510651.505572 0003 0035 15937 |
4463 | +E: 1304510651.505580 0003 0036 6341 |
4464 | +E: 1304510651.505583 0003 0000 15945 |
4465 | +E: 1304510651.505583 0003 0001 6341 |
4466 | +E: 1304510651.505584 0000 0000 0 |
4467 | +E: 1304510651.510574 0003 0035 15926 |
4468 | +E: 1304510651.510579 0003 0036 6235 |
4469 | +E: 1304510651.510584 0003 0030 1224 |
4470 | +E: 1304510651.510586 0003 0000 15935 |
4471 | +E: 1304510651.510587 0003 0001 6235 |
4472 | +E: 1304510651.510587 0000 0000 0 |
4473 | +E: 1304510651.515574 0003 0035 15917 |
4474 | +E: 1304510651.515577 0003 0036 6125 |
4475 | +E: 1304510651.515582 0003 0030 1191 |
4476 | +E: 1304510651.515584 0003 0000 15926 |
4477 | +E: 1304510651.515585 0003 0001 6125 |
4478 | +E: 1304510651.515585 0000 0000 0 |
4479 | +E: 1304510651.520577 0003 0035 15907 |
4480 | +E: 1304510651.520583 0003 0036 6015 |
4481 | +E: 1304510651.520588 0003 0030 1323 |
4482 | +E: 1304510651.520591 0003 0000 15916 |
4483 | +E: 1304510651.520591 0003 0001 6015 |
4484 | +E: 1304510651.520592 0000 0000 0 |
4485 | +E: 1304510651.525567 0003 0035 15897 |
4486 | +E: 1304510651.525570 0003 0036 5909 |
4487 | +E: 1304510651.525575 0003 0030 1356 |
4488 | +E: 1304510651.525578 0003 0000 15906 |
4489 | +E: 1304510651.525578 0003 0001 5909 |
4490 | +E: 1304510651.525579 0000 0000 0 |
4491 | +E: 1304510651.531583 0003 0035 15885 |
4492 | +E: 1304510651.531588 0003 0036 5809 |
4493 | +E: 1304510651.531591 0003 0000 15895 |
4494 | +E: 1304510651.531592 0003 0001 5809 |
4495 | +E: 1304510651.531593 0000 0000 0 |
4496 | +E: 1304510651.536562 0003 0035 15870 |
4497 | +E: 1304510651.536564 0003 0036 5711 |
4498 | +E: 1304510651.536571 0003 0000 15882 |
4499 | +E: 1304510651.536572 0003 0001 5711 |
4500 | +E: 1304510651.536572 0000 0000 0 |
4501 | +E: 1304510651.541580 0003 0035 15840 |
4502 | +E: 1304510651.541584 0003 0036 5613 |
4503 | +E: 1304510651.541591 0003 0000 15840 |
4504 | +E: 1304510651.541592 0003 0001 5613 |
4505 | +E: 1304510651.541592 0000 0000 0 |
4506 | +E: 1304510651.546575 0003 0035 15831 |
4507 | +E: 1304510651.546579 0003 0036 5509 |
4508 | +E: 1304510651.546584 0003 0030 1224 |
4509 | +E: 1304510651.546586 0003 0000 15837 |
4510 | +E: 1304510651.546587 0003 0001 5509 |
4511 | +E: 1304510651.546587 0000 0000 0 |
4512 | +E: 1304510651.551575 0003 0035 15819 |
4513 | +E: 1304510651.551585 0003 0036 5405 |
4514 | +E: 1304510651.551586 0003 0030 1191 |
4515 | +E: 1304510651.551588 0003 0000 15828 |
4516 | +E: 1304510651.551589 0003 0001 5405 |
4517 | +E: 1304510651.551589 0000 0000 0 |
4518 | +E: 1304510651.556571 0003 0035 15805 |
4519 | +E: 1304510651.556574 0003 0036 5299 |
4520 | +E: 1304510651.556579 0003 0030 1323 |
4521 | +E: 1304510651.556582 0003 0000 15816 |
4522 | +E: 1304510651.556582 0003 0001 5299 |
4523 | +E: 1304510651.556583 0000 0000 0 |
4524 | +E: 1304510651.561580 0003 0035 15790 |
4525 | +E: 1304510651.561584 0003 0036 5197 |
4526 | +E: 1304510651.561585 0003 0030 1356 |
4527 | +E: 1304510651.561588 0003 0000 15803 |
4528 | +E: 1304510651.561589 0003 0001 5197 |
4529 | +E: 1304510651.561589 0000 0000 0 |
4530 | +E: 1304510651.566574 0003 0035 15777 |
4531 | +E: 1304510651.566577 0003 0036 5097 |
4532 | +E: 1304510651.566585 0003 0000 15790 |
4533 | +E: 1304510651.566585 0003 0001 5097 |
4534 | +E: 1304510651.566586 0000 0000 0 |
4535 | +E: 1304510651.571578 0003 0035 15740 |
4536 | +E: 1304510651.571586 0003 0036 5003 |
4537 | +E: 1304510651.571589 0003 0000 15740 |
4538 | +E: 1304510651.571590 0003 0001 5003 |
4539 | +E: 1304510651.571590 0000 0000 0 |
4540 | +E: 1304510651.576562 0003 0035 15730 |
4541 | +E: 1304510651.576565 0003 0036 4909 |
4542 | +E: 1304510651.576570 0003 0000 15737 |
4543 | +E: 1304510651.576571 0003 0001 4909 |
4544 | +E: 1304510651.576571 0000 0000 0 |
4545 | +E: 1304510651.581575 0003 0035 15716 |
4546 | +E: 1304510651.581584 0003 0036 4813 |
4547 | +E: 1304510651.581585 0003 0030 1224 |
4548 | +E: 1304510651.581588 0003 0000 15726 |
4549 | +E: 1304510651.581589 0003 0001 4813 |
4550 | +E: 1304510651.581589 0000 0000 0 |
4551 | +E: 1304510651.586564 0003 0035 15684 |
4552 | +E: 1304510651.586567 0003 0036 4705 |
4553 | +E: 1304510651.586568 0003 0030 1191 |
4554 | +E: 1304510651.586570 0003 0000 15684 |
4555 | +E: 1304510651.586571 0003 0001 4705 |
4556 | +E: 1304510651.586571 0000 0000 0 |
4557 | +E: 1304510651.592579 0003 0035 15676 |
4558 | +E: 1304510651.592585 0003 0036 4599 |
4559 | +E: 1304510651.592590 0003 0030 1323 |
4560 | +E: 1304510651.592593 0003 0000 15682 |
4561 | +E: 1304510651.592593 0003 0001 4599 |
4562 | +E: 1304510651.592594 0000 0000 0 |
4563 | +E: 1304510651.597572 0003 0035 15664 |
4564 | +E: 1304510651.597576 0003 0036 4493 |
4565 | +E: 1304510651.597580 0003 0030 1356 |
4566 | +E: 1304510651.597583 0003 0000 15673 |
4567 | +E: 1304510651.597583 0003 0001 4493 |
4568 | +E: 1304510651.597584 0000 0000 0 |
4569 | +E: 1304510651.602577 0003 0035 15626 |
4570 | +E: 1304510651.602585 0003 0036 4387 |
4571 | +E: 1304510651.602588 0003 0000 15626 |
4572 | +E: 1304510651.602589 0003 0001 4387 |
4573 | +E: 1304510651.602590 0000 0000 0 |
4574 | +E: 1304510651.607614 0003 0035 15616 |
4575 | +E: 1304510651.607617 0003 0036 4285 |
4576 | +E: 1304510651.607624 0003 0000 15623 |
4577 | +E: 1304510651.607625 0003 0001 4285 |
4578 | +E: 1304510651.607625 0000 0000 0 |
4579 | +E: 1304510651.612575 0003 0035 15584 |
4580 | +E: 1304510651.612579 0003 0036 4183 |
4581 | +E: 1304510651.612586 0003 0000 15584 |
4582 | +E: 1304510651.612587 0003 0001 4183 |
4583 | +E: 1304510651.612587 0000 0000 0 |
4584 | +E: 1304510651.617565 0003 0035 15573 |
4585 | +E: 1304510651.617569 0003 0036 4075 |
4586 | +E: 1304510651.617574 0003 0030 1224 |
4587 | +E: 1304510651.617576 0003 0000 15581 |
4588 | +E: 1304510651.617576 0003 0001 4075 |
4589 | +E: 1304510651.617577 0000 0000 0 |
4590 | +E: 1304510651.622577 0003 0035 15536 |
4591 | +E: 1304510651.622581 0003 0036 3965 |
4592 | +E: 1304510651.622585 0003 0030 1191 |
4593 | +E: 1304510651.622588 0003 0000 15536 |
4594 | +E: 1304510651.622589 0003 0001 3965 |
4595 | +E: 1304510651.622589 0000 0000 0 |
4596 | +E: 1304510651.627579 0003 0035 15506 |
4597 | +E: 1304510651.627583 0003 0036 3853 |
4598 | +E: 1304510651.627584 0003 0030 1323 |
4599 | +E: 1304510651.627586 0003 0000 15506 |
4600 | +E: 1304510651.627586 0003 0001 3853 |
4601 | +E: 1304510651.627587 0000 0000 0 |
4602 | +E: 1304510651.632578 0003 0035 15472 |
4603 | +E: 1304510651.632582 0003 0036 3739 |
4604 | +E: 1304510651.632583 0003 0030 1356 |
4605 | +E: 1304510651.632586 0003 0000 15472 |
4606 | +E: 1304510651.632586 0003 0001 3739 |
4607 | +E: 1304510651.632587 0000 0000 0 |
4608 | +E: 1304510651.637580 0003 0035 15438 |
4609 | +E: 1304510651.637584 0003 0036 3633 |
4610 | +E: 1304510651.637592 0003 0000 15438 |
4611 | +E: 1304510651.637592 0003 0001 3633 |
4612 | +E: 1304510651.637593 0000 0000 0 |
4613 | +E: 1304510651.642573 0003 0035 15404 |
4614 | +E: 1304510651.642581 0003 0036 3521 |
4615 | +E: 1304510651.642585 0003 0000 15404 |
4616 | +E: 1304510651.642585 0003 0001 3521 |
4617 | +E: 1304510651.642586 0000 0000 0 |
4618 | +E: 1304510651.648572 0003 0035 15370 |
4619 | +E: 1304510651.648576 0003 0036 3405 |
4620 | +E: 1304510651.648581 0003 0030 1224 |
4621 | +E: 1304510651.648583 0003 0000 15370 |
4622 | +E: 1304510651.648584 0003 0001 3405 |
4623 | +E: 1304510651.648585 0000 0000 0 |
4624 | +E: 1304510651.653572 0003 0035 15340 |
4625 | +E: 1304510651.653577 0003 0036 3287 |
4626 | +E: 1304510651.653578 0003 0030 1191 |
4627 | +E: 1304510651.653580 0003 0000 15340 |
4628 | +E: 1304510651.653581 0003 0001 3287 |
4629 | +E: 1304510651.653581 0000 0000 0 |
4630 | +E: 1304510651.658578 0003 0035 15326 |
4631 | +E: 1304510651.658583 0003 0036 3171 |
4632 | +E: 1304510651.658588 0003 0030 1323 |
4633 | +E: 1304510651.658591 0003 0000 15336 |
4634 | +E: 1304510651.658592 0003 0001 3171 |
4635 | +E: 1304510651.658592 0000 0000 0 |
4636 | +E: 1304510651.663568 0003 0035 15280 |
4637 | +E: 1304510651.663573 0003 0036 3049 |
4638 | +E: 1304510651.663574 0003 0030 1356 |
4639 | +E: 1304510651.663577 0003 0000 15280 |
4640 | +E: 1304510651.663577 0003 0001 3049 |
4641 | +E: 1304510651.663578 0000 0000 0 |
4642 | +E: 1304510651.668574 0003 0035 15248 |
4643 | +E: 1304510651.668583 0003 0036 2927 |
4644 | +E: 1304510651.668586 0003 0000 15248 |
4645 | +E: 1304510651.668587 0003 0001 2927 |
4646 | +E: 1304510651.668587 0000 0000 0 |
4647 | +E: 1304510651.673576 0003 0035 15216 |
4648 | +E: 1304510651.673580 0003 0036 2805 |
4649 | +E: 1304510651.673581 0003 0030 1224 |
4650 | +E: 1304510651.673584 0003 0000 15216 |
4651 | +E: 1304510651.673585 0003 0001 2805 |
4652 | +E: 1304510651.673585 0000 0000 0 |
4653 | +E: 1304510651.678565 0003 0035 15172 |
4654 | +E: 1304510651.678568 0003 0036 2679 |
4655 | +E: 1304510651.678573 0003 0030 1191 |
4656 | +E: 1304510651.678575 0003 0000 15172 |
4657 | +E: 1304510651.678576 0003 0001 2679 |
4658 | +E: 1304510651.678576 0000 0000 0 |
4659 | +E: 1304510651.683580 0003 0035 15124 |
4660 | +E: 1304510651.683585 0003 0036 2551 |
4661 | +E: 1304510651.683588 0003 0000 15124 |
4662 | +E: 1304510651.683589 0003 0001 2551 |
4663 | +E: 1304510651.683590 0000 0000 0 |
4664 | +E: 1304510651.688579 0003 0035 15076 |
4665 | +E: 1304510651.688584 0003 0036 2427 |
4666 | +E: 1304510651.688585 0003 0030 1323 |
4667 | +E: 1304510651.688588 0003 0000 15076 |
4668 | +E: 1304510651.688588 0003 0001 2427 |
4669 | +E: 1304510651.688589 0000 0000 0 |
4670 | +E: 1304510651.693582 0003 0035 15024 |
4671 | +E: 1304510651.693615 0003 0036 2309 |
4672 | +E: 1304510651.693616 0003 0030 1356 |
4673 | +E: 1304510651.693619 0003 0000 15024 |
4674 | +E: 1304510651.693623 0003 0001 2309 |
4675 | +E: 1304510651.693623 0000 0000 0 |
4676 | +E: 1304510651.698609 0003 0035 14968 |
4677 | +E: 1304510651.698615 0003 0036 2185 |
4678 | +E: 1304510651.698617 0003 0030 1224 |
4679 | +E: 1304510651.698625 0003 0000 14968 |
4680 | +E: 1304510651.698626 0003 0001 2185 |
4681 | +E: 1304510651.698627 0000 0000 0 |
4682 | +E: 1304510651.703613 0003 0039 -1 |
4683 | +E: 1304510651.703621 0001 014a 0 |
4684 | +E: 1304510651.703627 0000 0000 0 |
4685 | +E: 1304510652.695704 0003 0039 136 |
4686 | +E: 1304510652.695720 0003 0035 16944 |
4687 | +E: 1304510652.695722 0003 0036 16837 |
4688 | +E: 1304510652.695725 0003 0030 1282 |
4689 | +E: 1304510652.695727 0003 0031 957 |
4690 | +E: 1304510652.695730 0001 014a 1 |
4691 | +E: 1304510652.695734 0003 0000 16944 |
4692 | +E: 1304510652.695736 0003 0001 16837 |
4693 | +E: 1304510652.695737 0000 0000 0 |
4694 | +E: 1304510652.700700 0003 0030 1325 |
4695 | +E: 1304510652.700711 0003 0031 1000 |
4696 | +E: 1304510652.700720 0000 0000 0 |
4697 | +E: 1304510652.706696 0003 0030 1357 |
4698 | +E: 1304510652.706708 0003 0031 1032 |
4699 | +E: 1304510652.706716 0000 0000 0 |
4700 | +E: 1304510652.736695 0003 0036 16835 |
4701 | +E: 1304510652.736716 0000 0000 0 |
4702 | +E: 1304510652.741695 0003 0036 16833 |
4703 | +E: 1304510652.741716 0000 0000 0 |
4704 | +E: 1304510652.746694 0003 0036 16830 |
4705 | +E: 1304510652.746714 0003 0001 16835 |
4706 | +E: 1304510652.746716 0000 0000 0 |
4707 | +E: 1304510652.751695 0003 0036 16827 |
4708 | +E: 1304510652.751707 0003 0034 1 |
4709 | +E: 1304510652.751708 0003 0030 1300 |
4710 | +E: 1304510652.751716 0003 0001 16833 |
4711 | +E: 1304510652.751718 0000 0000 0 |
4712 | +E: 1304510652.756694 0003 0036 16814 |
4713 | +E: 1304510652.756707 0003 0030 1257 |
4714 | +E: 1304510652.756715 0003 0001 16823 |
4715 | +E: 1304510652.756717 0000 0000 0 |
4716 | +E: 1304510652.762696 0003 0036 16779 |
4717 | +E: 1304510652.762709 0003 0030 1225 |
4718 | +E: 1304510652.762717 0003 0001 16779 |
4719 | +E: 1304510652.762719 0000 0000 0 |
4720 | +E: 1304510652.767696 0003 0036 16769 |
4721 | +E: 1304510652.767719 0003 0001 16776 |
4722 | +E: 1304510652.767721 0000 0000 0 |
4723 | +E: 1304510652.772695 0003 0036 16731 |
4724 | +E: 1304510652.772715 0003 0001 16731 |
4725 | +E: 1304510652.772717 0000 0000 0 |
4726 | +E: 1304510652.777693 0003 0035 16946 |
4727 | +E: 1304510652.777705 0003 0036 16718 |
4728 | +E: 1304510652.777715 0003 0001 16727 |
4729 | +E: 1304510652.777717 0000 0000 0 |
4730 | +E: 1304510652.782694 0003 0036 16675 |
4731 | +E: 1304510652.782715 0003 0001 16675 |
4732 | +E: 1304510652.782717 0000 0000 0 |
4733 | +E: 1304510652.787694 0003 0036 16605 |
4734 | +E: 1304510652.787706 0003 0034 0 |
4735 | +E: 1304510652.787708 0003 0030 1282 |
4736 | +E: 1304510652.787716 0003 0001 16605 |
4737 | +E: 1304510652.787718 0000 0000 0 |
4738 | +E: 1304510652.792702 0003 0036 16575 |
4739 | +E: 1304510652.792714 0003 0030 1325 |
4740 | +E: 1304510652.792723 0003 0001 16575 |
4741 | +E: 1304510652.792724 0000 0000 0 |
4742 | +E: 1304510652.797694 0003 0035 16912 |
4743 | +E: 1304510652.797706 0003 0036 16495 |
4744 | +E: 1304510652.797709 0003 0030 1357 |
4745 | +E: 1304510652.797716 0003 0000 16912 |
4746 | +E: 1304510652.797718 0003 0001 16495 |
4747 | +E: 1304510652.797719 0000 0000 0 |
4748 | +E: 1304510652.802692 0003 0035 16878 |
4749 | +E: 1304510652.802704 0003 0036 16429 |
4750 | +E: 1304510652.802713 0003 0000 16878 |
4751 | +E: 1304510652.802714 0003 0001 16429 |
4752 | +E: 1304510652.802716 0000 0000 0 |
4753 | +E: 1304510652.807684 0003 0035 16874 |
4754 | +E: 1304510652.807691 0003 0036 16397 |
4755 | +E: 1304510652.807701 0003 0001 16397 |
4756 | +E: 1304510652.807703 0000 0000 0 |
4757 | +E: 1304510652.812694 0003 0035 16834 |
4758 | +E: 1304510652.812706 0003 0036 16327 |
4759 | +E: 1304510652.812715 0003 0000 16834 |
4760 | +E: 1304510652.812717 0003 0001 16327 |
4761 | +E: 1304510652.812719 0000 0000 0 |
4762 | +E: 1304510652.817692 0003 0035 16820 |
4763 | +E: 1304510652.817703 0003 0036 16243 |
4764 | +E: 1304510652.817705 0003 0034 1 |
4765 | +E: 1304510652.817707 0003 0030 1300 |
4766 | +E: 1304510652.817714 0003 0000 16830 |
4767 | +E: 1304510652.817716 0003 0001 16243 |
4768 | +E: 1304510652.817718 0000 0000 0 |
4769 | +E: 1304510652.823703 0003 0035 16786 |
4770 | +E: 1304510652.823715 0003 0036 16167 |
4771 | +E: 1304510652.823718 0003 0030 1257 |
4772 | +E: 1304510652.823725 0003 0000 16786 |
4773 | +E: 1304510652.823726 0003 0001 16167 |
4774 | +E: 1304510652.823728 0000 0000 0 |
4775 | +E: 1304510652.828691 0003 0035 16776 |
4776 | +E: 1304510652.828703 0003 0036 16089 |
4777 | +E: 1304510652.828705 0003 0034 0 |
4778 | +E: 1304510652.828707 0003 0030 1306 |
4779 | +E: 1304510652.828714 0003 0000 16783 |
4780 | +E: 1304510652.828715 0003 0001 16089 |
4781 | +E: 1304510652.828717 0000 0000 0 |
4782 | +E: 1304510652.833696 0003 0035 16762 |
4783 | +E: 1304510652.833708 0003 0036 16011 |
4784 | +E: 1304510652.833711 0003 0030 1343 |
4785 | +E: 1304510652.833718 0003 0000 16772 |
4786 | +E: 1304510652.833720 0003 0001 16011 |
4787 | +E: 1304510652.833721 0000 0000 0 |
4788 | +E: 1304510652.838691 0003 0035 16730 |
4789 | +E: 1304510652.838703 0003 0036 15923 |
4790 | +E: 1304510652.838712 0003 0000 16730 |
4791 | +E: 1304510652.838714 0003 0001 15923 |
4792 | +E: 1304510652.838715 0000 0000 0 |
4793 | +E: 1304510652.843697 0003 0035 16720 |
4794 | +E: 1304510652.843709 0003 0036 15839 |
4795 | +E: 1304510652.843713 0003 0031 1000 |
4796 | +E: 1304510652.843719 0003 0000 16727 |
4797 | +E: 1304510652.843721 0003 0001 15839 |
4798 | +E: 1304510652.843723 0000 0000 0 |
4799 | +E: 1304510652.848691 0003 0035 16706 |
4800 | +E: 1304510652.848703 0003 0036 15761 |
4801 | +E: 1304510652.848712 0003 0000 16716 |
4802 | +E: 1304510652.848714 0003 0001 15761 |
4803 | +E: 1304510652.848716 0000 0000 0 |
4804 | +E: 1304510652.853704 0003 0035 16692 |
4805 | +E: 1304510652.853716 0003 0036 15679 |
4806 | +E: 1304510652.853725 0003 0000 16704 |
4807 | +E: 1304510652.853727 0003 0001 15679 |
4808 | +E: 1304510652.853729 0000 0000 0 |
4809 | +E: 1304510652.858693 0003 0035 16678 |
4810 | +E: 1304510652.858705 0003 0036 15603 |
4811 | +E: 1304510652.858707 0003 0030 1280 |
4812 | +E: 1304510652.858714 0003 0000 16691 |
4813 | +E: 1304510652.858716 0003 0001 15603 |
4814 | +E: 1304510652.858718 0000 0000 0 |
4815 | +E: 1304510652.863708 0003 0035 16648 |
4816 | +E: 1304510652.863718 0003 0036 15513 |
4817 | +E: 1304510652.863721 0003 0030 1233 |
4818 | +E: 1304510652.863729 0003 0000 16648 |
4819 | +E: 1304510652.863733 0003 0001 15513 |
4820 | +E: 1304510652.863735 0000 0000 0 |
4821 | +E: 1304510652.868678 0003 0035 16645 |
4822 | +E: 1304510652.868686 0003 0036 15425 |
4823 | +E: 1304510652.868692 0003 0030 1288 |
4824 | +E: 1304510652.868700 0003 0001 15425 |
4825 | +E: 1304510652.868702 0000 0000 0 |
4826 | +E: 1304510652.873703 0003 0035 16634 |
4827 | +E: 1304510652.873711 0003 0036 15335 |
4828 | +E: 1304510652.873714 0003 0030 1330 |
4829 | +E: 1304510652.873721 0003 0000 16644 |
4830 | +E: 1304510652.873724 0003 0001 15335 |
4831 | +E: 1304510652.873726 0000 0000 0 |
4832 | +E: 1304510652.879551 0003 0035 16625 |
4833 | +E: 1304510652.879554 0003 0036 15251 |
4834 | +E: 1304510652.879562 0003 0000 16634 |
4835 | +E: 1304510652.879563 0003 0001 15251 |
4836 | +E: 1304510652.879563 0000 0000 0 |
4837 | +E: 1304510652.884553 0003 0035 16613 |
4838 | +E: 1304510652.884557 0003 0036 15161 |
4839 | +E: 1304510652.884561 0003 0000 16623 |
4840 | +E: 1304510652.884565 0003 0001 15161 |
4841 | +E: 1304510652.884565 0000 0000 0 |
4842 | +E: 1304510652.889544 0003 0035 16602 |
4843 | +E: 1304510652.889548 0003 0036 15071 |
4844 | +E: 1304510652.889556 0003 0000 16612 |
4845 | +E: 1304510652.889556 0003 0001 15071 |
4846 | +E: 1304510652.889557 0000 0000 0 |
4847 | +E: 1304510652.894555 0003 0035 16592 |
4848 | +E: 1304510652.894560 0003 0036 14989 |
4849 | +E: 1304510652.894563 0003 0000 16602 |
4850 | +E: 1304510652.894564 0003 0001 14989 |
4851 | +E: 1304510652.894564 0000 0000 0 |
4852 | +E: 1304510652.899545 0003 0035 16588 |
4853 | +E: 1304510652.899548 0003 0036 14901 |
4854 | +E: 1304510652.899552 0003 0030 1270 |
4855 | +E: 1304510652.899555 0003 0000 16598 |
4856 | +E: 1304510652.899555 0003 0001 14901 |
4857 | +E: 1304510652.899556 0000 0000 0 |
4858 | +E: 1304510652.904552 0003 0035 16580 |
4859 | +E: 1304510652.904557 0003 0036 14813 |
4860 | +E: 1304510652.904558 0003 0030 1225 |
4861 | +E: 1304510652.904561 0003 0000 16589 |
4862 | +E: 1304510652.904566 0003 0001 14813 |
4863 | +E: 1304510652.904567 0000 0000 0 |
4864 | +E: 1304510652.909555 0003 0035 16576 |
4865 | +E: 1304510652.909560 0003 0036 14721 |
4866 | +E: 1304510652.909565 0003 0030 1282 |
4867 | +E: 1304510652.909568 0003 0000 16585 |
4868 | +E: 1304510652.909568 0003 0001 14721 |
4869 | +E: 1304510652.909569 0000 0000 0 |
4870 | +E: 1304510652.914550 0003 0035 16568 |
4871 | +E: 1304510652.914554 0003 0036 14627 |
4872 | +E: 1304510652.914559 0003 0030 1325 |
4873 | +E: 1304510652.914561 0003 0000 16576 |
4874 | +E: 1304510652.914562 0003 0001 14627 |
4875 | +E: 1304510652.914563 0000 0000 0 |
4876 | +E: 1304510652.919544 0003 0035 16565 |
4877 | +E: 1304510652.919547 0003 0036 14531 |
4878 | +E: 1304510652.919552 0003 0030 1357 |
4879 | +E: 1304510652.919555 0003 0000 16573 |
4880 | +E: 1304510652.919555 0003 0001 14531 |
4881 | +E: 1304510652.919556 0000 0000 0 |
4882 | +E: 1304510652.924546 0003 0035 16557 |
4883 | +E: 1304510652.924550 0003 0036 14441 |
4884 | +E: 1304510652.924558 0003 0000 16565 |
4885 | +E: 1304510652.924558 0003 0001 14441 |
4886 | +E: 1304510652.924559 0000 0000 0 |
4887 | +E: 1304510652.929549 0003 0035 16553 |
4888 | +E: 1304510652.929555 0003 0036 14355 |
4889 | +E: 1304510652.929562 0003 0000 16562 |
4890 | +E: 1304510652.929563 0003 0001 14355 |
4891 | +E: 1304510652.929563 0000 0000 0 |
4892 | +E: 1304510652.935550 0003 0035 16550 |
4893 | +E: 1304510652.935554 0003 0036 14271 |
4894 | +E: 1304510652.935561 0003 0000 16559 |
4895 | +E: 1304510652.935562 0003 0001 14271 |
4896 | +E: 1304510652.935563 0000 0000 0 |
4897 | +E: 1304510652.940543 0003 0035 16547 |
4898 | +E: 1304510652.940551 0003 0036 14181 |
4899 | +E: 1304510652.940552 0003 0030 1224 |
4900 | +E: 1304510652.940555 0003 0000 16556 |
4901 | +E: 1304510652.940555 0003 0001 14181 |
4902 | +E: 1304510652.940556 0000 0000 0 |
4903 | +E: 1304510652.945554 0003 0035 16544 |
4904 | +E: 1304510652.945562 0003 0036 14093 |
4905 | +E: 1304510652.945563 0003 0030 1191 |
4906 | +E: 1304510652.945566 0003 0000 16553 |
4907 | +E: 1304510652.945567 0003 0001 14093 |
4908 | +E: 1304510652.945567 0000 0000 0 |
4909 | +E: 1304510652.950541 0003 0036 14003 |
4910 | +E: 1304510652.950551 0003 0000 16550 |
4911 | +E: 1304510652.950551 0003 0001 14003 |
4912 | +E: 1304510652.950552 0000 0000 0 |
4913 | +E: 1304510652.955555 0003 0036 13911 |
4914 | +E: 1304510652.955564 0003 0030 1323 |
4915 | +E: 1304510652.955567 0003 0001 13911 |
4916 | +E: 1304510652.955567 0000 0000 0 |
4917 | +E: 1304510652.960546 0003 0036 13823 |
4918 | +E: 1304510652.960554 0003 0030 1356 |
4919 | +E: 1304510652.960557 0003 0001 13823 |
4920 | +E: 1304510652.960558 0000 0000 0 |
4921 | +E: 1304510652.965555 0003 0035 16541 |
4922 | +E: 1304510652.965558 0003 0036 13733 |
4923 | +E: 1304510652.965565 0003 0000 16547 |
4924 | +E: 1304510652.965566 0003 0001 13733 |
4925 | +E: 1304510652.965566 0000 0000 0 |
4926 | +E: 1304510652.970549 0003 0035 16537 |
4927 | +E: 1304510652.970553 0003 0036 13635 |
4928 | +E: 1304510652.970560 0003 0000 16544 |
4929 | +E: 1304510652.970561 0003 0001 13635 |
4930 | +E: 1304510652.970561 0000 0000 0 |
4931 | +E: 1304510652.975555 0003 0035 16533 |
4932 | +E: 1304510652.975559 0003 0036 13543 |
4933 | +E: 1304510652.975566 0003 0000 16541 |
4934 | +E: 1304510652.975567 0003 0001 13543 |
4935 | +E: 1304510652.975567 0000 0000 0 |
4936 | +E: 1304510652.980543 0003 0035 16529 |
4937 | +E: 1304510652.980546 0003 0036 13447 |
4938 | +E: 1304510652.980551 0003 0030 1224 |
4939 | +E: 1304510652.980554 0003 0000 16538 |
4940 | +E: 1304510652.980554 0003 0001 13447 |
4941 | +E: 1304510652.980555 0000 0000 0 |
4942 | +E: 1304510652.985546 0003 0035 16526 |
4943 | +E: 1304510652.985555 0003 0036 13353 |
4944 | +E: 1304510652.985556 0003 0030 1191 |
4945 | +E: 1304510652.985558 0003 0000 16535 |
4946 | +E: 1304510652.985559 0003 0001 13353 |
4947 | +E: 1304510652.985560 0000 0000 0 |
4948 | +E: 1304510652.990544 0003 0035 16523 |
4949 | +E: 1304510652.990552 0003 0036 13251 |
4950 | +E: 1304510652.990553 0003 0030 1323 |
4951 | +E: 1304510652.990555 0003 0000 16532 |
4952 | +E: 1304510652.990556 0003 0001 13251 |
4953 | +E: 1304510652.990556 0000 0000 0 |
4954 | +E: 1304510652.996550 0003 0035 16519 |
4955 | +E: 1304510652.996558 0003 0036 13149 |
4956 | +E: 1304510652.996559 0003 0030 1356 |
4957 | +E: 1304510652.996561 0003 0000 16528 |
4958 | +E: 1304510652.996562 0003 0001 13149 |
4959 | +E: 1304510652.996563 0000 0000 0 |
4960 | +E: 1304510653.001538 0003 0035 16515 |
4961 | +E: 1304510653.001542 0003 0036 13049 |
4962 | +E: 1304510653.001545 0003 0000 16524 |
4963 | +E: 1304510653.001545 0003 0001 13049 |
4964 | +E: 1304510653.001546 0000 0000 0 |
4965 | +E: 1304510653.006552 0003 0035 16511 |
4966 | +E: 1304510653.006556 0003 0036 12953 |
4967 | +E: 1304510653.006563 0003 0000 16520 |
4968 | +E: 1304510653.006564 0003 0001 12953 |
4969 | +E: 1304510653.006565 0000 0000 0 |
4970 | +E: 1304510653.011541 0003 0035 16507 |
4971 | +E: 1304510653.011545 0003 0036 12855 |
4972 | +E: 1304510653.011550 0003 0030 1224 |
4973 | +E: 1304510653.011553 0003 0000 16516 |
4974 | +E: 1304510653.011553 0003 0001 12855 |
4975 | +E: 1304510653.011554 0000 0000 0 |
4976 | +E: 1304510653.016548 0003 0035 16504 |
4977 | +E: 1304510653.016551 0003 0036 12757 |
4978 | +E: 1304510653.016556 0003 0030 1191 |
4979 | +E: 1304510653.016559 0003 0000 16513 |
4980 | +E: 1304510653.016560 0003 0001 12757 |
4981 | +E: 1304510653.016560 0000 0000 0 |
4982 | +E: 1304510653.021544 0003 0035 16501 |
4983 | +E: 1304510653.021549 0003 0036 12659 |
4984 | +E: 1304510653.021556 0003 0000 16510 |
4985 | +E: 1304510653.021556 0003 0001 12659 |
4986 | +E: 1304510653.021557 0000 0000 0 |
4987 | +E: 1304510653.026552 0003 0035 16498 |
4988 | +E: 1304510653.026556 0003 0036 12555 |
4989 | +E: 1304510653.026560 0003 0030 1323 |
4990 | +E: 1304510653.026563 0003 0000 16507 |
4991 | +E: 1304510653.026564 0003 0001 12555 |
4992 | +E: 1304510653.026564 0000 0000 0 |
4993 | +E: 1304510653.031542 0003 0035 16496 |
4994 | +E: 1304510653.031545 0003 0036 12453 |
4995 | +E: 1304510653.031550 0003 0030 1356 |
4996 | +E: 1304510653.031553 0003 0000 16504 |
4997 | +E: 1304510653.031553 0003 0001 12453 |
4998 | +E: 1304510653.031554 0000 0000 0 |
4999 | +E: 1304510653.036544 0003 0035 16494 |
5000 | +E: 1304510653.036552 0003 0036 12345 |
Two more patches, further enhancing the unity gesture experience. The first one fixes a problem with the rewritten recognizer, and the second finally gives very clear and distinct recognition of all of drag, pinch and rotate.
Tested in unity and eog. Rotating the picture is effortless, with no side effects. Pinching to zoom is effortless (although eog seems to have some problems there). Dragging with one or two fingers (touchscreen) works just fine, no side effects.
IMHO, this is the best linux gesture experience I have had so far.
Enjoy,
Henrik