ngc 1.5.0
 
Loading...
Searching...
No Matches
ngcdcsAO.hpp
Go to the documentation of this file.
1
8#ifndef ngcdcsAO_H
9#define ngcdcsAO_H
10
11
12#ifndef __cplusplus
13#error This is a C++ include file and cannot be used from plain C
14#endif
15
16#include <ngc/core/ngcbAddr.h>
17#include <ngc/core/ngcbMOD.hpp>
21
25#define ngcdcsAO_ALICE 0x00010000
26#define ngcdcsAO_ALICE_REV0 0x00100000
27
31#define ngcdcsAO_UNITY_GAIN 1
32
36#define ngcdcsAO_MAX_GAIN 2000
37
41#define ngcdcsAO_MAX_INITFILES 8
42
46#define ngcdcsAO_OVRILLUM_MAXCNT 1
47
51#define ngcdcsAO_SENS_TEMP 1 //< temperature sensor
52#define ngcdcsAO_SENS_RHUM 2 //< humidity sensor
53#define ngcdcsAO_SENS_PRESSURE 4 //< pressure sensor
54#define ngcdcsAO_SENS_OVRILLUM 8 //< over-illumination
55
59#define ngcdcsAO_SENS_ALL (ngcdcsAO_SENS_TEMP|ngcdcsAO_SENS_RHUM|ngcdcsAO_SENS_PRESSURE|ngcdcsAO_SENS_OVRILLUM)
60
65 double gain; //< Amplifier gain (in dB)
66 int clamp; //< Clamp level
67 int input; //< Input selection
68
71 gain = 0.0;
72 clamp = 512;
73 input = 0;
74 }
75};
76
81 int delay; //< Serial i/o delay (ticks of 5 milliseconds)
82 int clampL; //< Clamp enabled flag (left side)
83 int clampR; //< Clamp enabled flag (right side)
84 int enabled; //< AFE enabled
85 ngcdcs_afe_chan_t chan[8]; //< AFE channels
86
89 clampL = 1;
90 clampR = 1;
91 delay = 1;
92 enabled = 1;
93 }
94};
95
100 double hv1; //< High voltage calibration point for unity gain
101 double hv2; //< High voltage 1st calibration point
102 double hv3; //< High voltage 2nd calibration point
103 double hvsty1; //< Sensitivity for unity gain calibration point (V/gain)
104 double hvsty2; //< Sensitivity for 1st gain calibration point (V/gain)
105 double hvsty3; //< Sensitivity for 2nd gain calibration point (V/gain)
106 double hvprc1; //< Precision of unity gain calibration point (%)
107 double hvprc2; //< Precision for 1st gain calibration point (%)
108 double hvprc3; //< Precision for 2nd gain calibration point (%)
109 double eqOffset; //< High voltage calibration equation offset
110 double eqSlope; //< High voltage calibration equation slope
111
114 hv1 = 0.0;
115 hv2 = 0.0;
116 hv3 = 0.0;
117 hvsty1 = 1.0;
118 hvsty2 = 0.1;
119 hvsty3 = 0.0003;
120 hvprc1 = 1.0;
121 hvprc2 = 5.0;
122 hvprc3 = 5.0;
123 eqOffset = 20.0;
124 eqSlope = 3.0;
125 }
126};
127
132public:
133 int pol; //< Polarity
134 int yEnd; //< End line
135 int xStart; //< Toggle start
136 int xEnd; //< Toggle end
137 int tc; //< Time constant
138
140 ngcdcsAO_REGION() {pol = 1; yEnd = 0; xStart = 0; xEnd = 0; tc = 0x9;}
141
143 virtual ~ngcdcsAO_REGION() {}
144
145protected:
146private:
147};
148
153public:
154 int pol; //< Polarity
155 int yStart; //< Mask start
156 int yEnd; //< Mask end
157
159 ngcdcsAO_MASK() {pol = 1; yStart = 0; yEnd = 0;}
160
162 virtual ~ngcdcsAO_MASK() {}
163
164protected:
165private:
166};
167
172public:
173 int pol; //< Polarity
174 int xStart; //< Toggle start
175 int xEnd; //< Toggle end
176
178 ngcdcsAO_PAT() {pol = 1; xStart = 0; xEnd = 0;}
179
181 virtual ~ngcdcsAO_PAT() {}
182
183protected:
184private:
185};
186
191public:
192 ngcdcsAO_REGION region[7]; //< Regions
193 ngcdcsAO_MASK mask[3]; //< Masks
194 ngcdcsAO_PAT pat; //< Pattrn
195
198 region[0].yEnd = 0x1fff;
199 region[0].xEnd = 0xffff;
200 }
201
203 virtual ~ngcdcsAO_RMP() {}
204
206 int MsbMask() {
207 int i;
208 int msb = 0x0;
209 for (i=0;i<3;i++)
210 {
211 msb |= ((mask[i].yStart >> 12) & 0x1) << (i * 2);
212 msb |= ((mask[i].yEnd >> 12) & 0x1) << ((i * 2) + 1);
213 }
214 return (msb);
215 }
216
218 int MsbPat() {
219 int msb = 0x0;
220 msb |= ((pat.xStart >> 12) & 0xf);
221 msb |= ((pat.xEnd >> 12) & 0xf) << 4;
222 return (msb);
223 }
224
226 int MsbY() {
227 int i;
228 int msb = 0x0;
229 for (i=0;i<7;i++) msb |= ((region[i].yEnd >> 12) & 0x1) << i;
230 return (msb);
231 }
232
234 int RegMsbX1(int idx) {
235 if ((idx == 0) || (idx == 1)) return (0);
236 else if (idx == 2) return (1);
237 else if ((idx == 3) || (idx == 4)) return (2);
238 else if (idx == 5) return (3);
239 else if (idx == 6) return (4);
240 else return (5);
241 }
242
244 int MsbX1(int idx) {return MsbX(RegMsbX1(idx));}
245
247 int RegMsbX2(int idx) {
248 if (idx == 0) return (0);
249 else if ((idx == 1) || (idx == 2)) return (1);
250 else if (idx == 3) return (2);
251 else if ((idx == 4) || (idx == 5)) return (3);
252 else if (idx == 6) return (4);
253 else return (5);
254 }
255
257 int MsbX2(int idx) {return MsbX(RegMsbX2(idx));}
258
260 int MsbX(int idx) {
261 int msb = 0x0;
262 if (idx == 0)
263 {
264 msb |= (region[0].xStart >> 12) & 0xf;
265 msb |= ((region[0].xEnd >> 12) & 0xf) << 4;
266 msb |= ((region[1].xStart >> 12) & 0xf) << 8;
267 }
268 else if (idx == 1)
269 {
270 msb |= (region[1].xEnd >> 12) & 0xf;
271 msb |= ((region[2].xStart >> 12) & 0xf) << 4;
272 msb |= ((region[2].xEnd >> 12) & 0xf) << 8;
273 }
274 else if (idx == 2)
275 {
276 msb |= (region[3].xStart >> 12) & 0xf;
277 msb |= ((region[3].xEnd >> 12) & 0xf) << 4;
278 msb |= ((region[4].xStart >> 12) & 0xf) << 8;
279 }
280 else if (idx == 3)
281 {
282 msb |= (region[4].xEnd >> 12) & 0xf;
283 msb |= ((region[5].xStart >> 12) & 0xf) << 4;
284 msb |= ((region[5].xEnd >> 12) & 0xf) << 8;
285 }
286 else if (idx == 4)
287 {
288 msb |= (region[6].xStart >> 12) & 0xf;
289 msb |= ((region[6].xEnd >> 12) & 0xf) << 4;
290 }
291 return (msb);
292 }
293
295 int Pol() {
296 int i;
297 int pol = 1 << 7;
298 for (i=0;i<7;i++) pol |= (region[i].pol & 0x1) << i;
299 pol |= (pat.pol & 0x1) << 8;
300 for (i=0;i<3;i++) pol |= (mask[i].pol & 0x1) << (i + 9);
301 return (pol);
302 }
303
304protected:
305private:
306};
307
311class ngcdcsAO: public ngcbMOD
312{
313public:
315 explicit ngcdcsAO(const ngcb_route_t &r);
316
318 ngcdcsAO(ngcbIFC *ifc, const ngcb_route_t &r);
319
321 virtual ~ngcdcsAO();
322
325
328
330 int hwRev;
331
334
337
340
343
346
349
352
354 int gain;
355
358
361
364
367
370
373
376
379
381 int delay[42];
382
384 double reDelay[8];
385
387 double feDelay[8];
388
390 double vsph[4];
391
393 double viph[4];
394
396 int nx;
397
399 int ny;
400
403
405 int hvChan[4];
406
409
411 char pixMask[256];
412
415
418
421
423 void Reset();
424
426 int Enable(int check = 1);
427
429 int Disable();
430
432 int Selftest();
433
435 virtual int AtStop();
436
438 virtual int AfterStop();
439
441 virtual int AtStart();
442
444 virtual int AutoStart();
445
447 int CkAddrCB(int addr, const int *buffer, int size);
448
450 void WrAddrCB(int addr, const int *buffer, int size);
451
453 virtual int Update(int sensor, int force = 0);
454
456 int CheckOvrIllum();
457
459 int ResetHead();
460
462 int ResetSensors(int errFlag = 0);
463
465 int ResetRHum();
466
468 int ResetTemp();
469
471 int ResetPressure();
472
474 int ResetOvrIllum();
475
477 int SensorError(int sensor);
478
480 int ResetAfe(int update = 1);
481
483 int Master(int flag);
484
486 int DataLink(int flag);
487
489 int SerialLink(int flag);
490
492 int Gain(int value);
493
495 int Gain(int quadrant, int value);
496
498 int Delay(int idx, int ticks);
499
501 int VoltageIPhase(int idx, double volt);
502
504 int VoltageSPhase(int idx, double volt);
505
507 int Dim(int x, int y);
508
510 int DimX(int x);
511
513 int DimY(int y);
514
516 unsigned int FrameCnt();
517
519 double FrameRate();
520
522 int Shift(int clkNum, int shift, int edge, int force = 0);
523
525 int GetClk(int clkNum, int patNum, char *clkString);
526
528 int AmpGain(int channel, double value);
529
531 int Clamp(int channel, int level);
532
534 int ClampOn(int side, int flag);
535
537 int Input(int channel, int input);
538
540 int CtrlReg() {return (ctrlReg_);}
541
543 int SetupKey(const char *key, const int *idx, const char *value,
544 int *status = NULL);
545
547 int StatusKey(const char *key, const int *idx, char *value,
548 int *status = NULL);
549
550protected:
551
552private:
554 struct timeval timeReset_;
555
557 int aliceCtrl_;
558
560 int ctrlReg_;
561
563 int delayReg1_;
564
566 int delayReg2_;
567
569 int delayReg3_;
570
572 int delayReg4_;
573
575 int delayReg5_;
576
578 int phCtrlReg_;
579
581 int levelIPhaseReg_;
582
584 int levelSPhaseReg_;
585
587 int overIlluminationCnt_;
588
590 unsigned int aliceAdc_[4];
591
593 ngcbALARM *overIlluminationAlarm_;
594
596 void Init_();
597
599 void Log_(const char *msg);
600
602 int LvlIPhase2Reg_(double volt);
603
605 int LvlSPhase2Reg_(double volt);
606
608 double Reg2LvlIPhase_(int value);
609
611 double Reg2LvlSPhase_(int value);
612
614 int UpdateSensors_(int sensor, int force);
615
617 int WrAdc_(int adc, int chan, int addr, int value);
618
620 int WrAdc_(int addr, int value);
621
623 int AlInitRMP_();
624
626 int RcpEndY_(int idx, int value);
627
629 int RcpStartX_(int idx, int value);
630
632 int RcpEndX_(int idx, int value);
633
635 int RcpTC_(int idx, int value);
636
638 int RcpPol_(int idx, int value);\
639
641 int MaskStartY_(int idx, int value);
642
644 int MaskEndY_(int idx, int value);
645
647 int MaskPol_(int idx, int value);
648
650 int PatStartX_(int value);
651
653 int PatEndX_(int value);
654
656 int PatPol_(int value);
657
659 int CalibDelays_();
660};
661
662#endif
Definition ngcbALARM.hpp:100
Definition ngcbIFC.hpp:760
ngcbMOD(const ngcbMOD &other)
Copy constructor.
Definition ngcbMOD.cpp:43
Definition ngcdcsAO.hpp:152
int pol
Definition ngcdcsAO.hpp:154
int yStart
Definition ngcdcsAO.hpp:155
int yEnd
Definition ngcdcsAO.hpp:156
virtual ~ngcdcsAO_MASK()
Destructor.
Definition ngcdcsAO.hpp:162
ngcdcsAO_MASK()
Constructor.
Definition ngcdcsAO.hpp:159
Definition ngcdcsAO.hpp:171
ngcdcsAO_PAT()
Constructor.
Definition ngcdcsAO.hpp:178
int xStart
Definition ngcdcsAO.hpp:174
int xEnd
Definition ngcdcsAO.hpp:175
virtual ~ngcdcsAO_PAT()
Destructor.
Definition ngcdcsAO.hpp:181
int pol
Definition ngcdcsAO.hpp:173
Definition ngcdcsAO.hpp:131
int tc
Definition ngcdcsAO.hpp:137
ngcdcsAO_REGION()
Constructor.
Definition ngcdcsAO.hpp:140
int xEnd
Definition ngcdcsAO.hpp:136
int pol
Definition ngcdcsAO.hpp:133
virtual ~ngcdcsAO_REGION()
Destructor.
Definition ngcdcsAO.hpp:143
int xStart
Definition ngcdcsAO.hpp:135
int yEnd
Definition ngcdcsAO.hpp:134
Definition ngcdcsAO.hpp:190
int MsbX2(int idx)
Get region xEnd MSB register value.
Definition ngcdcsAO.hpp:257
virtual ~ngcdcsAO_RMP()
Destructor.
Definition ngcdcsAO.hpp:203
int Pol()
Get polarity register value.
Definition ngcdcsAO.hpp:295
int RegMsbX1(int idx)
Get region xStart MSB register index.
Definition ngcdcsAO.hpp:234
int MsbY()
Get region line-end MSB register value.
Definition ngcdcsAO.hpp:226
int MsbX(int idx)
Get region xStart,xEnd MSB register value.
Definition ngcdcsAO.hpp:260
ngcdcsAO_MASK mask[3]
Definition ngcdcsAO.hpp:193
ngcdcsAO_PAT pat
Definition ngcdcsAO.hpp:194
ngcdcsAO_RMP()
Constructor.
Definition ngcdcsAO.hpp:197
int MsbMask()
Get mask MSB register value.
Definition ngcdcsAO.hpp:206
ngcdcsAO_REGION region[7]
Definition ngcdcsAO.hpp:192
int RegMsbX2(int idx)
Get region xEnd MSB register index.
Definition ngcdcsAO.hpp:247
int MsbPat()
Get pattern MSB register value.
Definition ngcdcsAO.hpp:218
int MsbX1(int idx)
Get region xStart MSB register value.
Definition ngcdcsAO.hpp:244
int DimY(int y)
Set image y-dimension.
Definition ngcdcsAO.cpp:2432
virtual int AfterStop()
Function to be executed after read-out stop.
Definition ngcdcsAO.cpp:879
int hvChan[4]
High-voltage channel.
Definition ngcdcsAO.hpp:405
int Enable(int check=1)
Call-back at transition to operational state.
Definition ngcdcsAO.cpp:202
int ny
Image transfer y-dimension.
Definition ngcdcsAO.hpp:399
char initFile[ngcdcsAO_MAX_INITFILES][256]
Register initialization files.
Definition ngcdcsAO.hpp:324
int Dim(int x, int y)
Set image dimension.
Definition ngcdcsAO.cpp:2386
void Reset()
Align software state after reset.
Definition ngcdcsAO.cpp:167
ngcdcsCLDC * cldc
Assocoated clock- and bias-generator.
Definition ngcdcsAO.hpp:417
int ResetHead()
Reset AO camera.
Definition ngcdcsAO.cpp:1024
virtual ~ngcdcsAO()
Destructor.
Definition ngcdcsAO.cpp:51
double reDelay[8]
Rising edge calibration delays (in ticks)
Definition ngcdcsAO.hpp:384
int serialLink
Serial link to AO-system disabled/enabled flag.
Definition ngcdcsAO.hpp:351
virtual int AutoStart()
Function to be executed after read-out start.
Definition ngcdcsAO.cpp:904
double viph[4]
Multi-level-clock voltage levels I-phase.
Definition ngcdcsAO.hpp:393
int autoStart
Automatic immediate start.
Definition ngcdcsAO.hpp:333
int SerialLink(int flag)
Enable/disable serial link to AO-system.
Definition ngcdcsAO.cpp:1386
int dataLink
Data-link to NGC-LLCU disabled/enabled flag.
Definition ngcdcsAO.hpp:348
int SetupKey(const char *key, const int *idx, const char *value, int *status=NULL)
Setup.
Definition ngcdcsAoSetup.cpp:26
double sensSettleTime
Sensor settling time.
Definition ngcdcsAO.hpp:375
int Gain(int value)
Set gain.
Definition ngcdcsAO.cpp:1397
int nx
Image transfer x-dimension.
Definition ngcdcsAO.hpp:396
ngcdcsAO_RMP rmp
ALICE rgions, masks, patterns.
Definition ngcdcsAO.hpp:402
int maxGain
Maximum gain.
Definition ngcdcsAO.hpp:357
int ResetRHum()
Reset humidity sensor.
Definition ngcdcsAO.cpp:1082
void WrAddrCB(int addr, const int *buffer, int size)
Write-to-address call-back for alignment.
Definition ngcdcsAO.cpp:621
int sensEnabled
Sensor interface disabled/enabled flag.
Definition ngcdcsAO.hpp:369
int master
Synchronisation master flag.
Definition ngcdcsAO.hpp:345
int DimX(int x)
Set image x-dimension.
Definition ngcdcsAO.cpp:2427
int ResetPressure()
Reset pressure sensor.
Definition ngcdcsAO.cpp:1149
int VoltageSPhase(int idx, double volt)
Set multi-level-clock voltage levels (S-phase)
Definition ngcdcsAO.cpp:2326
int gain
Gain step.
Definition ngcdcsAO.hpp:354
int VoltageIPhase(int idx, double volt)
Set multi-level-clock voltage levels (I-phase)
Definition ngcdcsAO.cpp:2266
ngcdcsSEQ * seq
Associated sequencer.
Definition ngcdcsAO.hpp:420
int StatusKey(const char *key, const int *idx, char *value, int *status=NULL)
Status.
Definition ngcdcsAoStatus.cpp:26
ngcdcs_aocal_t calib[4]
High voltage calibration.
Definition ngcdcsAO.hpp:408
int ResetTemp()
Reset temperature sensor.
Definition ngcdcsAO.cpp:1108
int DataLink(int flag)
Enable/disable data-link to NGC-LLCU.
Definition ngcdcsAO.cpp:1347
int CtrlReg()
Return actual control register mirror.
Definition ngcdcsAO.hpp:540
int Clamp(int channel, int level)
Set clamp level (0 - 1020)
Definition ngcdcsAO.cpp:2851
int shpWidth
SHP-widht (ALICE)
Definition ngcdcsAO.hpp:378
int Delay(int idx, int ticks)
Set delay (in ticks)
Definition ngcdcsAO.cpp:2027
int CheckOvrIllum()
Check over-illumination sensor.
Definition ngcdcsAO.cpp:913
char pixMask[256]
Calibration pixel mask.
Definition ngcdcsAO.hpp:411
int GetClk(int clkNum, int patNum, char *clkString)
Get clock state values.
Definition ngcdcsAO.cpp:2679
int ClampOn(int side, int flag)
Enable Clamp.
Definition ngcdcsAO.cpp:2947
ngcdcsSHTx_TEMP temp
Temperature sensor (degC)
Definition ngcdcsAO.hpp:336
unsigned int FrameCnt()
Return current frame counter.
Definition ngcdcsAO.cpp:3100
virtual int AtStop()
Function to be executed before read-out stop.
Definition ngcdcsAO.cpp:870
int rstStart
Reset at start.
Definition ngcdcsAO.hpp:363
int Disable()
Call-back at transition to not operational state.
Definition ngcdcsAO.cpp:518
int sensPrefill
Prefill sensor filter windows.
Definition ngcdcsAO.hpp:372
int ResetOvrIllum()
Reset over-illumination detection.
Definition ngcdcsAO.cpp:1216
int AmpGain(int channel, double value)
Set amplifier gain (in dB - from 0.0 to 36.0 dB)
Definition ngcdcsAO.cpp:2765
int Selftest()
Execute selftest.
Definition ngcdcsAO.cpp:587
int ResetAfe(int update=1)
Reset AFE interface.
Definition ngcdcsAO.cpp:3048
double vsph[4]
Multi-level-clock voltage levels S-phase.
Definition ngcdcsAO.hpp:390
int SensorError(int sensor)
Return sensor error state.
Definition ngcdcsAO.cpp:1193
virtual int AtStart()
Function to be executed before read-out start.
Definition ngcdcsAO.cpp:888
ngcdcs_afe_t afe
Analog Front End control (AFE)
Definition ngcdcsAO.hpp:414
ngcdcsSHTx_RHUM rhum
Relative humidity sensor (%)
Definition ngcdcsAO.hpp:339
int hwRev
Hardware revision (0=protoype, 1=reshaped)
Definition ngcdcsAO.hpp:330
int Shift(int clkNum, int shift, int edge, int force=0)
Clock-shifter.
Definition ngcdcsAO.cpp:2473
ngcdcsAO(const ngcb_route_t &r)
Constructor with route.
Definition ngcdcsAO.cpp:30
int Master(int flag)
Enable/disable synchronisation master flag.
Definition ngcdcsAO.cpp:1308
int expAbort
Abort exposure on over-illumination.
Definition ngcdcsAO.hpp:366
double FrameRate()
Return actual frame rate (Hz)
Definition ngcdcsAO.cpp:3119
virtual int Update(int sensor, int force=0)
Run next sensor update cycle.
Definition ngcdcsAO.cpp:691
int delay[42]
42 delays (in ticks)
Definition ngcdcsAO.hpp:381
char resetFile[ngcdcsAO_MAX_INITFILES][256]
Register reset files.
Definition ngcdcsAO.hpp:327
ngcdcsMPL115A pressure
Pressure sensor (kPa)
Definition ngcdcsAO.hpp:342
int ResetSensors(int errFlag=0)
Reset all sensors.
Definition ngcdcsAO.cpp:972
int overIllumination
Over-illumination flag.
Definition ngcdcsAO.hpp:360
double feDelay[8]
Falling edge calibration delays (in ticks)
Definition ngcdcsAO.hpp:387
int CkAddrCB(int addr, const int *buffer, int size)
Check-address call-back for alignment.
Definition ngcdcsAO.cpp:595
int Input(int channel, int input)
Select AFE input (0=CCD, 1=AUX1, 2=AUX2)
Definition ngcdcsAO.cpp:2987
Definition ngcdcsCLDC.hpp:595
Definition ngcdcsSENS.hpp:234
Definition ngcdcsSEQ.hpp:582
Definition ngcdcsSENS.hpp:177
Definition ngcdcsSENS.hpp:158
#define ngcdcsAO_MAX_INITFILES
Definition ngcdcsAO.hpp:41
Definition ngcbIFC.hpp:78
Definition ngcdcsAO.hpp:64
ngcdcs_afe_chan_t()
Constructor.
Definition ngcdcsAO.hpp:70
int input
Definition ngcdcsAO.hpp:67
int clamp
Definition ngcdcsAO.hpp:66
double gain
Definition ngcdcsAO.hpp:65
Definition ngcdcsAO.hpp:80
int delay
Definition ngcdcsAO.hpp:81
int clampL
Definition ngcdcsAO.hpp:82
ngcdcs_afe_chan_t chan[8]
Definition ngcdcsAO.hpp:85
int enabled
Definition ngcdcsAO.hpp:84
ngcdcs_afe_t()
Constructor.
Definition ngcdcsAO.hpp:88
int clampR
Definition ngcdcsAO.hpp:83
Definition ngcdcsAO.hpp:99
double hvprc1
Definition ngcdcsAO.hpp:106
double hvsty2
Definition ngcdcsAO.hpp:104
double hv1
Definition ngcdcsAO.hpp:100
double eqSlope
Definition ngcdcsAO.hpp:110
double hvprc3
Definition ngcdcsAO.hpp:108
double hv2
Definition ngcdcsAO.hpp:101
double hvsty1
Definition ngcdcsAO.hpp:103
double hvsty3
Definition ngcdcsAO.hpp:105
ngcdcs_aocal_t()
Constructor.
Definition ngcdcsAO.hpp:113
double hv3
Definition ngcdcsAO.hpp:102
double eqOffset
Definition ngcdcsAO.hpp:109
double hvprc2
Definition ngcdcsAO.hpp:107