HAPO WS22 / Mbed 2 deprecated HAPO_WS22_Labor2_reicht_jetzt

Dependencies:   mbed

Committer:
alexander0707
Date:
Sun Nov 20 13:39:20 2022 +0000
Revision:
2:aa141c404210
Parent:
1:ff198413587f
Child:
3:d6379f763d9b
Funktioniert_v02

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexander0707 0:94f9242d336c 1 /***************************************************************************
alexander0707 0:94f9242d336c 2 * Titel : main.c
alexander0707 0:94f9242d336c 3 *
alexander0707 0:94f9242d336c 4 * Description : Labormodul "DIBI"
alexander0707 0:94f9242d336c 5 *
alexander0707 0:94f9242d336c 6 * Revision List:
alexander0707 0:94f9242d336c 7 --------------------------------------------------------------------------
alexander0707 0:94f9242d336c 8 Date | Author | Change
alexander0707 0:94f9242d336c 9 --------------------------------------------------------------------------
alexander0707 0:94f9242d336c 10 24.10.22 | J. Altenburg | Ersterstellung
alexander0707 0:94f9242d336c 11 --------------------------------------------------------------------------
alexander0707 0:94f9242d336c 12 | |
alexander0707 0:94f9242d336c 13 ----------------------------------------------------------------------------
alexander0707 0:94f9242d336c 14 ****************************************************************************/
alexander0707 0:94f9242d336c 15 #include "mbed.h"
alexander0707 0:94f9242d336c 16 #include "cdef.h"
alexander0707 0:94f9242d336c 17
alexander0707 0:94f9242d336c 18 /* Vereinbarungen zu den Tasteneingängen */
alexander0707 0:94f9242d336c 19 DigitalIn pinS1(A1);
alexander0707 0:94f9242d336c 20 DigitalIn pinS2(A2);
alexander0707 0:94f9242d336c 21 DigitalIn pinS3(A3);
alexander0707 0:94f9242d336c 22
alexander0707 0:94f9242d336c 23 BusOut bLedShield(D10, D11, D12, D13);
alexander0707 0:94f9242d336c 24
alexander0707 0:94f9242d336c 25 /* Anschlüsse der Schieberegister */
alexander0707 0:94f9242d336c 26 DigitalOut pinSdo(PA_9);
alexander0707 0:94f9242d336c 27 DigitalOut pinSck(PA_8);
alexander0707 0:94f9242d336c 28 DigitalOut pinLoad(PB_5);
alexander0707 1:ff198413587f 29 DigitalOut pinBeep(PB_3);
alexander0707 0:94f9242d336c 30
alexander0707 0:94f9242d336c 31 /* ISR */
alexander0707 0:94f9242d336c 32 Ticker stTimer;
alexander0707 0:94f9242d336c 33
alexander0707 0:94f9242d336c 34 /***************************************************************************
alexander0707 0:94f9242d336c 35 * Defines und Makros *
alexander0707 0:94f9242d336c 36 ***************************************************************************/
alexander0707 0:94f9242d336c 37 #define nTastShort 4 /* Taste 50 Millisekunden gedrückt */
alexander0707 0:94f9242d336c 38 #define nTastLong 150 /* Taste 1.5 Sekunden gedrückt */
alexander0707 0:94f9242d336c 39
alexander0707 0:94f9242d336c 40 #define nSegA 0x01
alexander0707 0:94f9242d336c 41 #define nSegB 0x02
alexander0707 0:94f9242d336c 42 #define nSegC 0x04
alexander0707 0:94f9242d336c 43 #define nSegD 0x08
alexander0707 0:94f9242d336c 44 #define nSegE 0x10
alexander0707 0:94f9242d336c 45 #define nSegF 0x20
alexander0707 0:94f9242d336c 46 #define nSegG 0x40
alexander0707 0:94f9242d336c 47 #define nSegH 0x80
alexander0707 0:94f9242d336c 48
alexander0707 0:94f9242d336c 49 #define nZiffer0 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF)
alexander0707 0:94f9242d336c 50 #define nZiffer1 ~(nSegB | nSegC)
alexander0707 0:94f9242d336c 51 #define nZiffer2 ~(nSegA | nSegB | nSegD | nSegE | nSegG)
alexander0707 0:94f9242d336c 52 #define nZiffer3 ~(nSegA | nSegB | nSegC | nSegD | nSegG)
alexander0707 0:94f9242d336c 53 #define nZiffer4 ~(nSegB | nSegC | nSegF | nSegG)
alexander0707 0:94f9242d336c 54 #define nZiffer5 ~(nSegA | nSegC | nSegD | nSegF | nSegG)
alexander0707 0:94f9242d336c 55 #define nZiffer6 ~(nSegA | nSegC | nSegD | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 56 #define nZiffer7 ~(nSegA | nSegB | nSegC)
alexander0707 0:94f9242d336c 57 #define nZiffer8 ~(nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 58 #define nZiffer9 ~(nSegA | nSegB | nSegC | nSegD | nSegF | nSegG)
alexander0707 0:94f9242d336c 59 #define nZifferA ~(nSegA | nSegB | nSegC | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 60 #define nZifferB ~(nSegC | nSegD | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 61 #define nZifferC ~(nSegA | nSegD | nSegE | nSegF)
alexander0707 0:94f9242d336c 62 #define nZifferD ~(nSegB | nSegC | nSegD | nSegE | nSegG)
alexander0707 0:94f9242d336c 63 #define nZifferE ~(nSegA | nSegD | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 64 #define nZifferF ~(nSegA | nSegE | nSegF | nSegG)
alexander0707 0:94f9242d336c 65 #define nZifferOff (nSegA | nSegB | nSegC | nSegD | nSegE | nSegF | nSegG | nSegH)
alexander0707 0:94f9242d336c 66
alexander0707 0:94f9242d336c 67 byte bIdx; /*
alexander0707 0:94f9242d336c 68 * Description : Index auf Ausgabe
alexander0707 0:94f9242d336c 69 */
alexander0707 0:94f9242d336c 70
alexander0707 0:94f9242d336c 71 byte bDigit; /*
alexander0707 0:94f9242d336c 72 * Description : aktives Digit
alexander0707 0:94f9242d336c 73 */
alexander0707 0:94f9242d336c 74
alexander0707 0:94f9242d336c 75 byte bBargraph; /*
alexander0707 0:94f9242d336c 76 * Description : Bargraph durchschalten
alexander0707 0:94f9242d336c 77 */
alexander0707 0:94f9242d336c 78
alexander0707 0:94f9242d336c 79 byte bS1Timer; /*
alexander0707 0:94f9242d336c 80 * Description : Timer für Taste S1
alexander0707 0:94f9242d336c 81 */
alexander0707 0:94f9242d336c 82
alexander0707 0:94f9242d336c 83 byte bS2Timer; /*
alexander0707 0:94f9242d336c 84 * Description : Timer für Taste S2
alexander0707 0:94f9242d336c 85 */
alexander0707 0:94f9242d336c 86
alexander0707 0:94f9242d336c 87 byte bS3Timer; /*
alexander0707 0:94f9242d336c 88 * Description : Timer für Taste S3
alexander0707 0:94f9242d336c 89 */
alexander0707 0:94f9242d336c 90
alexander0707 1:ff198413587f 91 byte bDisplayState; /*
alexander0707 1:ff198413587f 92 * Description :
alexander0707 1:ff198413587f 93 */
alexander0707 1:ff198413587f 94 const byte enWaitForStart=0x00;
alexander0707 1:ff198413587f 95 const byte enRunClock = 0x01;
alexander0707 1:ff198413587f 96 const byte enShowResult = 0x02;
alexander0707 1:ff198413587f 97 const byte enShowError = 0x03;
alexander0707 1:ff198413587f 98 const byte enWaitForRun = 0x04;
alexander0707 1:ff198413587f 99
alexander0707 1:ff198413587f 100
alexander0707 1:ff198413587f 101 byte bState; /*
alexander0707 1:ff198413587f 102 * Description :
alexander0707 1:ff198413587f 103 */
alexander0707 1:ff198413587f 104
alexander0707 1:ff198413587f 105 byte bTimerDot; /*
alexander0707 1:ff198413587f 106 * Description : Zähler für Dots
alexander0707 1:ff198413587f 107 */
alexander0707 1:ff198413587f 108
alexander0707 1:ff198413587f 109 byte bHotKey; /*
alexander0707 1:ff198413587f 110 * Description : Auswahl der Taste
alexander0707 1:ff198413587f 111 */
alexander0707 1:ff198413587f 112
alexander0707 1:ff198413587f 113 byte bDisplayDot; /*
alexander0707 1:ff198413587f 114 * Description :
alexander0707 1:ff198413587f 115 */
alexander0707 1:ff198413587f 116
alexander0707 1:ff198413587f 117 byte bMainState; /*
alexander0707 1:ff198413587f 118 * Description : Hauptzustand
alexander0707 1:ff198413587f 119 */
alexander0707 1:ff198413587f 120
alexander0707 1:ff198413587f 121 byte bBeepTime; /*
alexander0707 1:ff198413587f 122 * Description : Tondauer
alexander0707 1:ff198413587f 123 */
alexander0707 1:ff198413587f 124
alexander0707 1:ff198413587f 125
alexander0707 0:94f9242d336c 126 word wSerial; /*
alexander0707 0:94f9242d336c 127 * Description : serielles Ausgaberegister
alexander0707 0:94f9242d336c 128 */
alexander0707 0:94f9242d336c 129
alexander0707 1:ff198413587f 130 word wClockTime; /*
alexander0707 1:ff198413587f 131 *Description : Timer für verstrichene Zeit
alexander0707 1:ff198413587f 132 */
alexander0707 1:ff198413587f 133
alexander0707 1:ff198413587f 134 word wClockShow; /*
alexander0707 1:ff198413587f 135 *Description : Timer für verstrichene Zeit
alexander0707 1:ff198413587f 136 */
alexander0707 1:ff198413587f 137
alexander0707 1:ff198413587f 138 word wDelayGame; /*
alexander0707 1:ff198413587f 139 * Description : Verzögerungstimer
alexander0707 1:ff198413587f 140 */
alexander0707 1:ff198413587f 141
alexander0707 0:94f9242d336c 142 /* Bitmuster */
alexander0707 0:94f9242d336c 143 const byte abZiffer[] = {nZiffer0, nZiffer1, nZiffer2, nZiffer3, nZiffer4, nZiffer5, nZiffer6, nZiffer7, nZiffer8, nZiffer9, nZifferA, nZifferB, nZifferC, nZifferD, nZifferE, nZifferF, nZifferOff};
alexander0707 0:94f9242d336c 144 const byte abBargraph[] = {~Bit0, ~(Bit0|Bit1), ~(Bit0|Bit1|Bit2), ~(Bit0|Bit1|Bit2|Bit3), 0x0f};
alexander0707 0:94f9242d336c 145
alexander0707 0:94f9242d336c 146
alexander0707 0:94f9242d336c 147 void vShiftLoad(word wLoad){
alexander0707 0:94f9242d336c 148 word wMask = Bit15;
alexander0707 0:94f9242d336c 149 pinLoad = 0;
alexander0707 0:94f9242d336c 150 while(wMask){
alexander0707 0:94f9242d336c 151 if(wMask & wLoad) pinSdo = 1;
alexander0707 0:94f9242d336c 152 else pinSdo = 0;
alexander0707 0:94f9242d336c 153 pinSck = 1;
alexander0707 0:94f9242d336c 154 wMask >>= 1;
alexander0707 0:94f9242d336c 155 pinSck = 0;
alexander0707 0:94f9242d336c 156 }
alexander0707 0:94f9242d336c 157 pinLoad = 1;
alexander0707 0:94f9242d336c 158 }
alexander0707 0:94f9242d336c 159
alexander0707 1:ff198413587f 160
alexander0707 1:ff198413587f 161 byte abDisplayMemory[] = {16,16,16,16}; /* alle Segmente aus */
alexander0707 1:ff198413587f 162
alexander0707 1:ff198413587f 163 void vDisplayClock( word w )
alexander0707 1:ff198413587f 164 {
alexander0707 1:ff198413587f 165 int16 v;
alexander0707 1:ff198413587f 166 abDisplayMemory[0] = 16; /* Aus */
alexander0707 1:ff198413587f 167 v = (byte)(w / 100);
alexander0707 1:ff198413587f 168 abDisplayMemory[1] = v; /* Hunderter */
alexander0707 1:ff198413587f 169 w = w - (v * 100);
alexander0707 1:ff198413587f 170 v = (byte)(w / 10);
alexander0707 1:ff198413587f 171 abDisplayMemory[2] = v; /* Zehner */
alexander0707 1:ff198413587f 172 w = w - (v * 10);
alexander0707 1:ff198413587f 173 abDisplayMemory[3] = (byte)w; /* Einer */
alexander0707 1:ff198413587f 174 }
alexander0707 1:ff198413587f 175
alexander0707 1:ff198413587f 176 void vSetWaitForStart( void )
alexander0707 1:ff198413587f 177 {
alexander0707 1:ff198413587f 178 abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */
alexander0707 1:ff198413587f 179 abDisplayMemory[1] = 16;
alexander0707 1:ff198413587f 180 abDisplayMemory[2] = 16;
alexander0707 1:ff198413587f 181 abDisplayMemory[3] = 16;
alexander0707 1:ff198413587f 182 bDisplayState = enWaitForStart;
alexander0707 1:ff198413587f 183 bTimerDot = 0;
alexander0707 1:ff198413587f 184 bDigit = 0;
alexander0707 1:ff198413587f 185 }
alexander0707 1:ff198413587f 186
alexander0707 1:ff198413587f 187 void vSetRunClock( void )
alexander0707 1:ff198413587f 188 {
alexander0707 1:ff198413587f 189 wClockTime = 0;
alexander0707 1:ff198413587f 190 bDigit = 0;
alexander0707 1:ff198413587f 191 abDisplayMemory[0] = 16; /* 7-Segment-Display ausschalten */
alexander0707 1:ff198413587f 192 abDisplayMemory[1] = 0;
alexander0707 1:ff198413587f 193 abDisplayMemory[2] = 0;
alexander0707 1:ff198413587f 194 abDisplayMemory[3] = 0;
alexander0707 1:ff198413587f 195 bDisplayState = enRunClock;
alexander0707 1:ff198413587f 196 }
alexander0707 1:ff198413587f 197
alexander0707 1:ff198413587f 198 byte bCheckTasten( byte bState )
alexander0707 1:ff198413587f 199 {
alexander0707 1:ff198413587f 200 if((pinS1 == 0) || (pinS2 == 0) || (pinS3 == 0)) { /* Tastendruck erkannt */
alexander0707 1:ff198413587f 201 wClockShow = 1200;
alexander0707 1:ff198413587f 202 if((pinS1 == 0) && (bHotKey == 0)) {
alexander0707 1:ff198413587f 203 wDelayGame = 0;
alexander0707 1:ff198413587f 204 bState = enShowResult;
alexander0707 1:ff198413587f 205 bDisplayState = enShowResult;
alexander0707 1:ff198413587f 206 } else if((pinS2 == 0) && (bHotKey == 1)) {
alexander0707 1:ff198413587f 207 wDelayGame = 0;
alexander0707 1:ff198413587f 208 bState = enShowResult;
alexander0707 1:ff198413587f 209 bDisplayState = enShowResult;
alexander0707 1:ff198413587f 210 } else if((pinS3 == 0) && (bHotKey == 2)) {
alexander0707 1:ff198413587f 211 wDelayGame = 0;
alexander0707 1:ff198413587f 212 bState = enShowResult;
alexander0707 1:ff198413587f 213 bDisplayState = enShowResult;
alexander0707 1:ff198413587f 214 } else {
alexander0707 1:ff198413587f 215 wDelayGame = 200;
alexander0707 1:ff198413587f 216 abDisplayMemory[1] = 15;
alexander0707 1:ff198413587f 217 abDisplayMemory[2] = 15;
alexander0707 1:ff198413587f 218 abDisplayMemory[3] = 15;
alexander0707 1:ff198413587f 219 bState = enShowError;
alexander0707 1:ff198413587f 220 bDisplayState = enShowResult;
alexander0707 1:ff198413587f 221 pinBeep = 0;
alexander0707 1:ff198413587f 222 }
alexander0707 1:ff198413587f 223 }
alexander0707 1:ff198413587f 224 return bState;
alexander0707 1:ff198413587f 225 }
alexander0707 1:ff198413587f 226
alexander0707 1:ff198413587f 227 void vSegmentDigit( void )
alexander0707 1:ff198413587f 228 {
alexander0707 1:ff198413587f 229 bDigit++;
alexander0707 1:ff198413587f 230 wSerial = abZiffer[abDisplayMemory[bDigit&0x03]];
alexander0707 1:ff198413587f 231 switch(bDisplayState) {
alexander0707 1:ff198413587f 232 case enWaitForStart:
alexander0707 1:ff198413587f 233 bTimerDot++; /* Zähler für Punktwechsel */
alexander0707 1:ff198413587f 234 if(bTimerDot == 50) {
alexander0707 1:ff198413587f 235 bTimerDot = 0;
alexander0707 1:ff198413587f 236 bDisplayDot = (bDisplayDot + 1) & 0x03;
alexander0707 1:ff198413587f 237 }
alexander0707 1:ff198413587f 238 if(bDisplayDot == (bDigit&0x03)) {
alexander0707 1:ff198413587f 239 wSerial = wSerial & ~nSegH; /* Punktanzeigen */
alexander0707 1:ff198413587f 240 }
alexander0707 1:ff198413587f 241 break;
alexander0707 1:ff198413587f 242 case enRunClock:
alexander0707 1:ff198413587f 243 if((bDigit&0x03) == 0x03){ /* Ablauf von 10 ms */
alexander0707 1:ff198413587f 244 wClockTime++;
alexander0707 1:ff198413587f 245 if(wClockTime > 999) {
alexander0707 1:ff198413587f 246 wClockTime = 0;
alexander0707 1:ff198413587f 247 }
alexander0707 1:ff198413587f 248 vDisplayClock(wClockTime);
alexander0707 1:ff198413587f 249 }
alexander0707 1:ff198413587f 250 if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
alexander0707 1:ff198413587f 251 wSerial = wSerial & ~nSegH;
alexander0707 1:ff198413587f 252 }
alexander0707 1:ff198413587f 253 break;
alexander0707 1:ff198413587f 254 case enShowResult:
alexander0707 1:ff198413587f 255 if((bDigit&0x03) == 0x01) { /* Dezimalpunkt setzen */
alexander0707 1:ff198413587f 256 wSerial = wSerial & ~nSegH;
alexander0707 1:ff198413587f 257 }
alexander0707 1:ff198413587f 258 break;
alexander0707 1:ff198413587f 259 }
alexander0707 1:ff198413587f 260 vShiftLoad(((wSerial << 8) & 0xfff0)| (1 << (bDigit&0x03)));
alexander0707 1:ff198413587f 261 }
alexander0707 1:ff198413587f 262
alexander0707 1:ff198413587f 263 void vBargraph(byte bTaste){
alexander0707 1:ff198413587f 264 switch(bTaste){
alexander0707 1:ff198413587f 265 case 0 :
alexander0707 1:ff198413587f 266 bLedShield =0b1110;
alexander0707 1:ff198413587f 267 break;
alexander0707 1:ff198413587f 268 case 1 :
alexander0707 1:ff198413587f 269 bLedShield =0b1101;
alexander0707 1:ff198413587f 270 break;
alexander0707 1:ff198413587f 271 case 2 :
alexander0707 1:ff198413587f 272 bLedShield =0b1011;
alexander0707 1:ff198413587f 273 break;
alexander0707 1:ff198413587f 274 }
alexander0707 1:ff198413587f 275 }
alexander0707 1:ff198413587f 276
alexander0707 0:94f9242d336c 277 /***************************************************************************
alexander0707 0:94f9242d336c 278 * main()
alexander0707 0:94f9242d336c 279 ***************************************************************************/
alexander0707 0:94f9242d336c 280 int main() {
alexander0707 0:94f9242d336c 281 /* Variablen initialisieren */
alexander0707 1:ff198413587f 282 byte bRandomTaste = 0;
alexander0707 1:ff198413587f 283 word wRandomClock = 0;
alexander0707 1:ff198413587f 284 bMainState = enWaitForStart;
alexander0707 1:ff198413587f 285 bDisplayState = enWaitForStart;
alexander0707 1:ff198413587f 286 pinBeep = 1;
alexander0707 1:ff198413587f 287 vSetWaitForStart();
alexander0707 1:ff198413587f 288
alexander0707 1:ff198413587f 289 while(1) {
alexander0707 0:94f9242d336c 290 bRandomTaste++;
alexander0707 0:94f9242d336c 291 if(bRandomTaste > 2) bRandomTaste = 0; /* zufällige LED/Taste bestimmen */
alexander0707 0:94f9242d336c 292 wRandomClock++;
alexander0707 0:94f9242d336c 293 if(wRandomClock > 800) wRandomClock = 0; /* Zufallszeit erzeugen */
alexander0707 0:94f9242d336c 294 switch(bMainState) {
alexander0707 0:94f9242d336c 295 case enWaitForStart:
alexander0707 0:94f9242d336c 296 wDelayGame++;
alexander0707 1:ff198413587f 297 bLedShield =0b1111;
alexander0707 0:94f9242d336c 298 if(wDelayGame > 1200) { /* 3 Sekundenminimum */
alexander0707 0:94f9242d336c 299 wDelayGame = wRandomClock;
alexander0707 0:94f9242d336c 300 bMainState = enWaitForRun;
alexander0707 0:94f9242d336c 301 }
alexander0707 0:94f9242d336c 302 break;
alexander0707 0:94f9242d336c 303 case enRunClock:
alexander0707 0:94f9242d336c 304 bBeepTime--;
alexander0707 0:94f9242d336c 305 if(bBeepTime == 0)pinBeep = 1;
alexander0707 0:94f9242d336c 306 bMainState = bCheckTasten(enRunClock);
alexander0707 0:94f9242d336c 307 break;
alexander0707 0:94f9242d336c 308 case enWaitForRun:
alexander0707 1:ff198413587f 309 wDelayGame--;
alexander0707 1:ff198413587f 310 if(wDelayGame == 0){
alexander0707 1:ff198413587f 311 bMainState = enRunClock;
alexander0707 1:ff198413587f 312 bDisplayState = enRunClock;
alexander0707 1:ff198413587f 313 bBeepTime = 20;
alexander0707 1:ff198413587f 314 bHotKey = bRandomTaste;
alexander0707 1:ff198413587f 315 vBargraph(bRandomTaste);
alexander0707 1:ff198413587f 316 vSetRunClock();
alexander0707 1:ff198413587f 317 pinBeep = 0;
alexander0707 1:ff198413587f 318 }
alexander0707 0:94f9242d336c 319 break;
alexander0707 0:94f9242d336c 320 case enShowResult:
alexander0707 1:ff198413587f 321 wClockShow--;
alexander0707 1:ff198413587f 322 if(wClockShow==0){
alexander0707 1:ff198413587f 323 bMainState = enWaitForStart;
alexander0707 1:ff198413587f 324 bDisplayState = enWaitForStart;
alexander0707 1:ff198413587f 325 vSetWaitForStart();
alexander0707 1:ff198413587f 326 }
alexander0707 0:94f9242d336c 327 break;
alexander0707 0:94f9242d336c 328 case enShowError:
alexander0707 1:ff198413587f 329 wDelayGame--;
alexander0707 1:ff198413587f 330 if(wDelayGame == 0)pinBeep = 1;
alexander0707 1:ff198413587f 331 wClockShow--;
alexander0707 1:ff198413587f 332 if(wClockShow==0){
alexander0707 1:ff198413587f 333 bMainState = enWaitForStart;
alexander0707 1:ff198413587f 334 bDisplayState = enWaitForStart;
alexander0707 1:ff198413587f 335 vSetWaitForStart();
alexander0707 1:ff198413587f 336 }
alexander0707 0:94f9242d336c 337 break;
alexander0707 0:94f9242d336c 338 }
alexander0707 1:ff198413587f 339 vSegmentDigit();
alexander0707 1:ff198413587f 340 wait_us(2500);
alexander0707 0:94f9242d336c 341 }
alexander0707 1:ff198413587f 342 }