encryptiontextcryptographyzipphp-ziparchive

Approaching a Capture the Flag Question involving a text file and a sha256 hash?


I have to complete a capture the flag challenge. I am given a text file named notazipfile.txt containing mostly random characters, as seen at the bottom of the post. I am also given a sha256 hash as shown at the bottom of the post. I have to find a flag in the format flag{thisistheflag}. What I have worked out so far is that there is somehow a zip archive/directory due to both the name of the text file and the first few characters of the text file being PK. which usually indicates a zip file I believe.

Text file contents as a hexdump in hexadecimal:

0000000   P   K 003 004 024  \0  \0  \0  \b  \0 207 203   -   M 005 223
0000010 213 376  \f  \v  \0  \0   $ 036  \0  \0 023  \0  \0  \0   n   o
0000020   t   -   a   -   t   e   x   t   -   f   i   l   e   .   z   i
0000030   p   e 231 271 316 325   0 020 205 373   <   E 244 024   .   b
0000040   E     250 354   & 364   < 004   ;   H 254   B   P     304 273
0000050 363 235   3   c 233 305 377 275   7   ^ 217   g 037   ; 377 233
0000060 017 317 337 376   | 372 371 363 373 375 371 267 375 307 203 357
0000070   u 177 367 370 345 373   G   _ 257 375 311 376 345 371 267   w
0000080 257 277   =   | 271 277 374 372 350 371 267 357   _   _ 357 237
0000090 337 354 037   _   ? 376 266   ? 377 364   j 177 361 340 323 353
00000a0 353 327 266 335 375   > 316 363   < 216 373   > 312   q 336 347
00000b0   } 364 263   P   ? 357   v 037 255 035   g 277 313   q 037   |
00000c0   ( 275 234  \a 323   o   Z   T 374 275 356 233   f 275   )  \f
00000d0 334 232 266 335   n   i 301   }   2 244   _ 317   d 023 255   j
00000e0 347   Q 217 346 031 364 364   . 374   R 030   j 247   ' 326   r
00000f0 337   | 264 320  \v 004  \0   (   - 021   j   b   (   " 026 212
0000100 331 031   B   ! 265   @ 247   {   o   h 357 354   a   & 274 006
0000110 330 322 016   O 024 277  \f  \v 204 031   [ 320   x   R 025   j
0000120   k 364 226   *  \b   m       Q 250 306 246 355 340  \t   }   ,
0000130 022 320 031   S 032 373 263 224   a 276   ^ 300 303 354   [   8
0000140 332 235 207   ~   D  \n 265 242 265 305   x 235 276 273 027 232
0000150   E 202 205   0 226 210   V   @   M 246   d   z 030   V 234   l
0000160 310 220 272 026 321   4   ~ 327 346   * 225 271 332 355   : 273
0000170   &   W   @   ) 035   P 353 225 217   x   * 232   w   _   =   0
0000180 205   v   n   ~ 230 334   f 245   Z   ^ 315   3   , 177 364 004
0000190 321 327 263 243 365 235   ^ 206 201 265 336   <   Q 032   0 374
00001a0 035 252 362 357 026   [ 206 326 316   +   V   U 343 027 375 210
00001b0  \0 211 321   B   9   < 251   4 332 324   $ 241   B 315 234 016
00001c0   F 303 244 264 250 230   T 223 031 223 273 350   e   :  \f   K
00001d0 271 241 305 356  \r   )  \b   2 344   # 213   > 202 321 304  \f
00001e0   Q   n   6 343 232 264 262   a 260   e   T 233   z   k   T 354
00001f0 034 250   J   s 001   = 033 025 021   [ 003   P 024 263   0 004
0000200 335 001  \r   }   u 323   "   Q 206 262   d   T 207 276 262 235
0000210  \n 024 237   g   R   & 226 017 250 266 244 243   4 364   n 246
0000220 264   ) 337   ` 313 224 252   7 034   F 020 036   / 352 250 035
0000230 337   a   ? 223   j   #   8   O 366 357 260   _ 250 301 273 364
0000240 356 255   % 353 020 300   5   d   J 247 351 302  \b 365 221   0
0000250 020   V 210 262 341 017   U   f 206 342 302 337 005   J 301 212
0000260 252   e 026 342   9 003 305   O   Q 032   b 317 301   X     247
0000270   .   f 253 325   #  \b 261 344   @   / 317 020   8 244 366 253
0000280 321 247   !   C 247   ] 372 211   L 243 341   1 263   M 003   :
0000290 257 263   u 372 204   { 331 260 212 376   h 365   J   ? 265 022
00002a0   8 226 273 325 233 217 004 345   c 300   p 211 214   . 320   l
00002b0   u 211 254 363 222 313   Q   z 207   R 204  \t 235 266   b 351
00002c0   A   V   B   e 004   ) 251   v   s   } 354   H 247 311 026   f
00002d0   Z 230 242   ] 177 206 370   { 353   4 360 017 364 225   ! 265
00002e0 016 037 022 231 006   z 306 257 355   4   6 361 350 245 001 313
00002f0   8 205   x 026   @ 367 262   ? 273 241 255 243 264   ^ 370 301
0000300   f   '   u 226   *   S 275   * 234 032 320   3 314 327 273 005
0000310 252 326 004   1   @   R 004 312 003 264   Z 335 301   ^   Z   |
0000320 006 235 341 250 031   8 316 214 247 336 251   % 275 262 222 036
0000330   z   + 016 357 347   U 366 266 357 320 330   T 020   g 273 232
0000340   m 250  \a 235   V   X 362   w   G   ^ 332   F   O  \b 025   t
0000350 247 020   G   M 326 243   p 021 332   w 310   + 265   _   u 357
0000360 327   u   ! 024      \f 032   L 333 362 207 216   a 237 347 324
0000370 225  \a 231 037   * 302   h 370   C 256   ` 326   ]   d  \n 363
0000380 331 376   L   r 225 261  \r 235 353   ;   V   g 224 312   L 022
0000390   m   =   E   E   1 377   R 024 265   " 234 253 202   H   u 177
00003a0   V  \0 225   k 364   t   L 276   #   } 244   5   l   v 244 220
00003b0 205 304 030 332 254 312 004 300 351 323   1 367 275 302   5 324
00003c0 236 302   D   Y 265 265 242 030 025  \n   Q 031   A   *   r   T
00003d0  \r   _   ( 261 333 034   R   x   G 214   | 332   !   = 235 275
00003e0 326   g 030 302 216 347 027 224   v 310 200 235  \0 274   >   S
00003f0   l  \b 244   m 361   L 303   2  \a 226   v   Q 372 001 212 345
0000400 327 263 006 245  \r 005 201 333 236 365  \v   8   y   @ 037 216
0000410 357 310   / 275 375 021 371   c 207 351   i   9   V 332   3 246
0000420   V 210 305   < 257   V 371 273 250   = 273   .   (   = 025 374
0000430   " 224 271     266   ! 005 203   f   } 376 036 232   . 345 241
0000440   b   4 365 254 301 367 271   W 200   ! 263   a  \b 352   o   "
0000450 214 350   =   4 224 202   u   f  \n   ;   5 335   I 253 245   `
0000460   w   R 232 224   g   ^ 235 277   g   W 203   N 370   G 024 350
0000470 351 222   U   ( 375 017 231   e 355   T 227 342 351 220 364 214
0000480   V 303 033   d 374   R 364 305   w 277 240 024   T 314 240   "
0000490 227 206 266 222   :   e 211 245 377 221 242 251   ;   n   f   )
00004a0 016   ^ 201 212   =   5 020 237 325 326  \r  \n   l 251   U 277
00004b0 227 316   h 221   * 027 346 262 365   m 304 202 351   T   C 302
00004c0   r   : 311 024 325 213   y 241 241 371 353 334   i 240 251 310
00004d0 364   S 033   k   = 222 331 006 335 263   ;   '   ) 025 313 362
00004e0 237 211 312   Z   !   Y 017   t 177 235 265   b   O   > 346 255
00004f0   3   C   2  \v   $ 323 266   P   O 016 305   H 362 257 231   x
0000500 351   u   A 037   x 372 261   k   ) 237   ` 305 262 366 324   z
0000510   I 237 201 210 312 002 345   }   I   . 016 003 271 345 234 202
0000520 300   (   U 314   S   x 002 332 344   g   g   s 370 017   o 321
0000530 303 322 002 321   ; 335   [ 017 003   g   ^ 300 006 262   i   E
0000540  \a 262 034 030   G 250 002 025 245 247   y 227 300   e 313   |
0000550 203 006 020 273   [   r 370 215   q 237 270 211 277   S 244   `
0000560   F 274   E 035 212   I   l   j 366 233 214 024   D   Q  \0 037
0000570  \f  \a   w 266 240 214   {   a   R   M 365 220   G 233 346   !
0000580   B   D   & 210 372 342 243   !   S   $ 345 264 245   S 232   p
0000590   F 212   R 336   r   a 266 264   o 375   e   n   F   T 336   O
00005a0   - 033 207  \0   n 005   }   [ 226 324   ~ 364 213   I   `   .
00005b0 177 327   9 246 247 335   W 346 024 237   P   b       N   z   5
00005c0   O   F   * 322   U 271   @ 220 241   <   C 242   r 245 242 301
00005d0 262   d 245 275 257   >   r   ~   U 224 337 272   p 362 322 240
00005e0 001   E 350 274   Z 370   J   u 002   t   !   X 364   D 261 323
00005f0 037 222 315  \0 264 274 213   -       2   4   1   l  \v 262 223
0000600   g   3 301 303 360 022 201 314   G   ' 034 246 002   * 223 361
0000610 271   h   2   G 222 325 037 375 356   %   k   J 213 276 361   A
0000620 210  \n 275  \n   @ 247   [ 367   , 212 361   V   c 177 346 003
0000630 334 032   9 275 254   i 370 220 250   " 263   w   E 251   K 244
0000640 205   J 355 357 324   C 234 372 025   Q 261 004 005   \     226
0000650   8 301 213   8   [ 253 235 261 217   ;   T 350   b   c 341 364
0000660   " 365   e 234 246   % 371   ? 323   q 321   4 300 245   A   5
0000670 320   t 206 266   @ 265 024   ^   )   z 016   s 260 366   - 317
0000680 314 264 314   0 345   G 321 243   J 236   > 362   ) 244 370 250
0000690 247 004   k   w 034 326   ? 017 376 367  \b 314 233 033 347
00006a0 335   ^     377 272   t 244 226   Q 016   %   W 031 223 375   }
00006b0 036 275   } 326 270 257 300 264 260 021 245 312 026 201   o 304
00006c0 361   l 311 207 230 217  \n   t 324 227 320 312   3   ] 370 224
00006d0 276 366   b   \   B 206 025   t 373   < 023 242   ? 367   8   Q
00006e0 370   v 242   > 251 315 247 207 260   - 354   ] 247 006 321 375
00006f0  \f 324 212 235 002 300 360 263   b 023   k   b 213   J 372 273
0000700   F   t 357   L 231 016 303 367   f   G 336 330 345 357   R   /
0000710 350 312   {   :   S   c 370  \f 310 360 020 264 254   E 346 020
0000720 207   o   f 032   " 305   2   @   S   { 262 202 344 337   G 022
0000730 210   } 366   l 357 002 023 250 005   i 355   ] 034 177 252 244
0000740 354 270 353 262 022 177 260 357 355 326   M   0   . 351   J   y
0000750   | 257 035   h  \t  \r 213   2   U   J   + 234 374 236   =   #
0000760 274 304 355 304   v 263   J 202 346 335 321 277 343   F 205 344
0000770 224 347 265   V 332   " 004  \f   P 342 325   3 237 004 272 364
0000780   S 035 023 330 335 033  \f   ;   m   y 213   *   w 336 276 314
0000790 211   \ 025 006 235 225 232   |   K 224 212   ,  \t   ; 322  \0
00007a0 252 327 354   q   Z  \n   b 242 261  \t   r 334 002 302   + 347
00007b0   i 277 211 330   F 340 363 234   &   _   < 305 001 272 333 035
00007c0 254 207   b 274   v 374 006 373 223 361 250 314   w  \n 021 356
00007d0 272 302 237 275 214   _ 031 254 224 206 264   Q 345   X   3 016
00007e0 322 276   , 230 375   s   ! 346 340   H 004 016   j   p   m 213
00007f0 221 346 030 212   3   k 327   @ 231 213 362   g 352 313 267 350
0000800 241 361   5   K       N   C 027 240 254   g  \f 263 264   3 322
0000810 253 236 346 003 312 237 227   0 177   " 325   o 203 335 261 245
0000820   m   O  \r   % 375 240   5 203   L 034   8 320 223   i 035   Q
0000830   `   ` 217 226 331 257   D 204 311 302  \n 301 326 027 212 342
0000840 203 312 224   &   2   e   T 033 220   l   f 035   =   c 371 324
0000850 231 331 377   3 226   $ 236   g 370  \f 316 305 301   / 272 244
0000860   }   i 354 242 242   [ 357   L 346 236 230 270 343   " 221 233
0000870 234 201 031 335 177   d 177   . 017 366 331 003 257 365 033 031
0000880 222 034   = 313   + 003   5   I   R  \v   a 217 253 371 230 265
0000890   , 301   b   U 360 223 336   e 247 266   W   v 341 241 233 304
00008a0 360 357 244 372 210 222 212   *   N   "   S 217 177 026   E   M
00008b0 371  \0 273 303 276   \ 035 270   p   0   J 263 017 331  \a 003
00008c0   n   ^ 227   $ 323   ?   9   ^ 366 037 367 315 242   $ 215 306
00008d0 223 211   & 310 271 236 255   , 324 277  \n   =   [   :   f 213
00008e0   c 243 367   T   u 274 247   T   d   Q   N 032   . 241 034 257
00008f0 025 353 255 203 257 035 261 332 327   v   x 331 342 314   < 212
0000900   {   ;   O 025 207 265 342   3   H 334 304   *   5   ; 355   4
0000910 352   @ 215   t 036 300   T 315   ~ 251 342 311   e 032   ~ 324
0000920 265   & 246   + 223 362   M 313   9 247   I 235 343 272 257 256
0000930 222 206 264 361 323 246   =   e 311   J 002   f 373 217   Q   ]
0000940 202   g 222 017 217 231 207 211   0 376 263 256 230   5   F 215
0000950 347 220   " 022 322 336 326   X 367 001   G   &   6   . 035  \t
0000960 272 356 373   3 235   L 337 322   +   "  \t   / 003   ) 276 251
0000970 227   [   w 347   7 256  \r 371   n 207 240 032   K 203 373 351
0000980 260   [ 320 230 220 236   S   4   7 206 347   ~ 276 353 325 035
0000990 345 215   ` 244 242   K 266   $ 344   z   R   g 320   %   -   z
00009a0   u 202 213  \v 342   b 227   6 025   2 240   2 213 316   K 363
00009b0 212 343 027 267 362 333 341 367   % 211 335 376 310   w   q 322
00009c0 370 367   Z 315 233 366   <   )   e   "   r 254 036 246 032 016
00009d0   2   .   # 330   p 202 016 314   ? 256 250   Y 261   0 342 346
00009e0 021 231 314 267 353   n 247 266   x 247 033   (   r   W 307 036
00009f0 251   b 313 220 030 027 327 245 261 231   z 022   J 004 214 267
0000a00   u   C 242   C 347   ^ 216 377 272   " 031 022   P  \f 242 200
0000a10   6 255   b   !   3 332 214 326 343 264 345   ~ 353   <   }   #
0000a20   v 377   s 211   |   _   d 214 243 374 237   C 343   E 233 257
0000a30 177   :   $   b   g   5 017 242   u   f 245   3   1 227 210 375
0000a40 242 333 316 256   - 263 177   ! 307 215 263 213 225 274 252 373
0000a50 231 222 035   n 232   V 377   W 276 336   |   V 370 333   M 327
0000a60 213 037 277 031 232 363   ]  \v 227 232 323 377   }   U   `   $
0000a70 330 237 215 277 242   ~   < 326   { 374   U   |   )   Z 211   l
0000a80   -   [   g 251 271   ~ 236   T 262 342 277 226   | 256   U 177
0000a90   m 226   j 370 357 324 027   g 250 177 336   Z  \f 027   = 377
0000aa0   l 257 334 356 177 264 374 263 317   ( 351 373   +   j 215   @
0000ab0 232 032 261 361 374 313 372   x 031 221   7 343     330 375  \v
0000ac0 177 373   +   +   / 207  \n 335 377   e 017   + 354 244 261   .
0000ad0   9   Q 246   , 234 367 243 222 003   k   l 316 360   g 301 216
0000ae0 026 207 201 245 206   e 250   %   d 032 355   x 350 306 373   g
0000af0   |   2 342 030   ] 357 237 376 212 240   ^   1  \t 032 332   _
0000b00 022 377   C   , 340 375 365   n 355 217   C   < 317 261 347   "
0000b10   q 355   9   A 377 322 361 221 245  \t 362   _ 335   .  \t 313
0000b20 336 326 232 370 313 313 344   6   R 303 037   > 345 252 231 217
0000b30   y 377 036 266 377   ~   q 270   V 315 315 267 337   P   K 001
0000b40 002   ?  \0 024  \0  \0  \0  \b  \0 207 203   -   M 005 223 213
0000b50 376  \f  \v  \0  \0   $ 036  \0  \0 023  \0   $  \0  \0  \0  \0
0000b60  \0  \0  \0      \0  \0  \0  \0  \0  \0  \0   n   o   t   -   a
0000b70   -   t   e   x   t   -   f   i   l   e   .   z   i   p  \n  \0
0000b80      \0  \0  \0  \0  \0 001  \0 030  \0   w   1   a   K 240   K
0000b90 324 001   {   K 317 026 237   K 324 001   {   K 317 026 237   K
0000ba0 324 001   P   K 005 006  \0  \0  \0  \0 001  \0 001  \0   e  \0
0000bb0  \0  \0   =  \v  \0  \0  \0  \0
0000bb8

Sha256 hash that is given: e62391166a9c9fe0eefbc999958f87f2b454f36cadeb2c026b9000bdc9abddf6

I have tried to view the metadata of the text file which did not reveal any useful information. I have also tried to change the extension of the text file to .zip, which results in an invalid file error on windows. I have also tried to extract a zip file from within the text file using the ZipFile library within Python, which results in errors or unmeaningful results.


Solution

  • The file you provided is a perfectly valid zip file that contains a single file, called not-a-text-file.zip.

    I saved it as the file data.zip

    The standard Linux unzip thinks the file is fine

    $ unzip -t data.zip 
    Archive:  data.zip
        testing: not-a-text-file.zip      OK
    No errors detected in compressed data of data.zip.
    

    It also extracts fine

    $ unzip  ../data.zip 
    Archive:  ../data.zip
      inflating: not-a-text-file.zip     
    

    Below are the contents of not-a-text-file.zip. All characters are 7-bit printable ascii charactes.

    flag{Look at y0u, h4ck3r. A pathet1c cr3ature of me4t and b0ne.}
    
    @;@#+++##@@#'#+@+@#;+'@#'+@:@#::#+;@'#@##@####;'+##++@#@#+###+###.@@@#@,@@@@++@@@###
    @@@@@+####@+@,@#@+@###.@#@@###+:+#,#:@@+###@@;;'#@#''@##:++@###,'@@'@@,@#@@@###@#@+#
    @#@@++###@##@@@@#+@+'#+,@@:@#@#:'@'#@@#+@@'+@;:+#@#'+@@@++#++@':#@@:@#@;@#+@;#@##+#@
    ####@+++#@@##@::##+',+@@'@@@#@#;+@'@@+##:#'@@#:+#+#:#@@++@@'@@:'#++#@##:@##@@#@###@#
    @@@###+#+@@@#+#@@#+#'+@+#@'#@@+'+##:#;+#'@;'@+''###;#@;##+++#+:'#@#@;@@,@@###@@##@#'
    @+@#@@+#'@#@#@###+;#++#####,@@,+#+@.+;@##@,'@++++;#;#+##@@#@@',+@'#,@@@.;###@@#+@#@+
    #+@#@@@@##:+@#@#+@@@+:###@@@@,@##,##@'.`#:; ###+@@+;#@+###@@@+:+@+'@#@@'@@#@@@#@#@@@
    #@@#@@#@#@+#+.##+@@+,:+@#@'+@#@;####+#:#+#'+##@+#+':+#:#@++#@''#:#@#@@+'@#@#@##@@###
    ####'@@@@##@#+@#@++#@;+@@@:#@'@+@@:@+#@@##;#+@@++++:'#+######;+'#@#@@@@@#@#@##@#@@+#
    #@#+#,@@#@#@++'@##@@@+;+@@@#;'+#::@@#++##@'@;@#+#++:+:@#+:#@+,#@@@@@@''#@####@@#@;+#
    @##@#';#@@##:####@###+,+@@#+@@#@++@,#+##+#`#'@##''+:++@@@+#`':;@@+@@@:+##@+##@@:@+##
    #@#@@@:###@@;@++@+##@+':###,;''@';#@@#+++@.+;++#';;:'#'++#;+',@@@+@@#@@+#+#@#@##.###
    #####@@@#+@@'##'##',@@#+'#@+#@@#:::#,+;#+@'+#+###+;:'####@.;,#@#@+@@#++#+##@@@##+##@
    #@##+####+@@#++#'####@##,''@@:+#:,##@@+#+@@''#+;#'`;+@#'+;.:+@@@@+##@#@+#@@@@##+#@@@
    @#@@@##++##@#+':####++'#.+:;+##@:+#.@;###'#'#':+#;,;+##':'+#@@@@@@#@+@##@@@+@##@@@@@
    @#@@#@#@#+'##@@#+++###@#+#'+,+@@;+@#+.@+#'''';;;#'#;+'+;'+@#@#@@;@@#;@#@@@@###@##@++
    @@###@@@@@#@+#@#@@##+@#+##@++'@#;;'#;`.##;:;#;;+.#+;+#++@#@#,@@@#@#@@@@@+@@###`@@#+#
    #@@@@@##@#@#@.@#####+##+#+@@''+';;' ' `@+;';:::;':::#@'#;@#@@@@#@@@+#@@'##+####,##@#
    #+@@@@@'@@@@+@.@####@'#+#++@#';;;;; ' `;;;:::,,;;;;;'+',##@+@@#@#@:#@#@@+@#@#+@+#+#@
    ##@+#@@:@@@@##@,#@#;##++##'##:+++.' :  ::;:::::+'+:.:#++#+;@@#@@@'+#@@####+##@++##@@
    #@@####+@@@#@+@@:#+:+####;#'+:'#'; ' ; ;;'',;., ;...+';#+#;@@#@#+#####+#@##+++###@@#
    +##@@###@@@@##+#@;#+@++'@#:'+'+'''+ ; , ::::., ;` `;'::##@:@#@@@@##@@##@@@##+#@@@###
    #++#@@###@@@#####@;#+#'++##'''+''++' `;'.,, ;+'  `';':,''@;+#@#@###@#@@@###+#@@@#@#@
    +@@#+@++##@##'##@@@+#,+#'@'++'++';#;, ,;.., :+  `',;;,::'@+,###@+#@@@@@@####@@####@#
    ,#@@@+@'#@@@######@@###+;#@;'';'':#:  :+;,,`;;  ;:'':;:##;;'@+####@@@+@#'+@@@@#@@@@:
    @#@@@@#+@@@@@#+#@@+###@'',+@:+;;:#.`: ,;:...,,`:`;.;;'#+;+;@@@+##@##@@+'#;@@@##@@###
    ##@@@@#@@#@@@@###@@@##@@':`@+','';::,.:,:,:.::,`..'':+'#'+@#+'#@@@@@@'###@@@@@@#@###
    @@@@@@#@@@@@#@@@##'+@++#@'::'''`:;,,+ ,:,.,`:: ; '::':'#;@+@,#@@@###++#@@@@@###'@#@@
    #@;@@@#@#@@#@@+@@@@#+#+++@+';';:.;.;.`.::.:..,.`:,;;.'+''#;#@@@@@@#+##@@@@@@+;#@@##@
    ###@@@+@@#@@#@#@##@@####+;#'+,;;,.;;, .:,..:., ,,':`:;:'++#@@@@#@+'#@@@@@@###@#@#@@@
    @##;+##@@@@@@@@'@##@+####+;++':;;,`,:;.:,....:',,..:'.''@##@#@+++'#@@@@@@####@@@####
    #@@+@#@####@@@@##@@@#@@@@+++#''`:: ,.::.,,..`;..+ ::.:+'+'@#@#@@#@@@@@#####@@@@##+''
    @@@###@######@@@@@@@@@###++:+';#`;.:,,,:;;:,,,..'.+,,;+;;@#+@###'@@@@##+##@@@@#+':,,
    @#@@+@'@@@@####@@@@#@+######+#''+..;..,,,..,,, ,;.;,;+',+'+@@+#@@@@@'####@@#+';,'+.#
    @#+':;'#@###@@##+######@@#+'++'''',::.,,,,,::, ,:;'';+:+;+#+@@#+#@+@@#@@+++;,''+@@+@
    ;','';:;+:@###@@#@@##+@+###+'#''#;;;:.::,,,:,, ,+,;+;;+++#+#@'+#@#####@+;,;'+#@#@'#@
    ;++#@#''::+#@@@@@@@@+@+#@++##'+'';':';:,,..,::,;;;;+;+:@+'+#'+##@@##@##;++#@@@###@@@
    @:@@@#@#+';,:'#@@@@@@#++#+#''#;':#;'::,:,..,,,':;+';;'++:';++##@@@+#@@::#@@@@@@#;'''
    @#'@@@@@#+++#:+;#@@@#@#++##+''';;'@;'',:: ,.,,;+#;.+;#+:''###@@@@@@@@#:;@#@#@@@,,,;'
    #@##@@@@@#;+@@@#,@#@@+#+++++#+'+'.#+:+':,`,, :;:''+#++'+#@@@@@@@@#+''.;###@##@+,##@;
    ;@#,@@@@#@#;##@#+#,+##@+++#+@#;++:;:.';',,::::'+''##+#+#@@@@@#+'';:,,'+@@#@###,##':+
    @#@#@@@@@#@#+;@#@##+;;##@##++#'';+':'+#':,::,''+:######@@@@@#;::;:;:;''+#####:#++;+:
    @;@#';'''''###;.'++;''''@@@@@@@@@@#;;'+';,:;`++#'#@@@@@@@@@@+''''':;'+'##+'+#++##';@
    ##.#+;;';;'+++++#';';++#+'+++#+###@+'##+',;'.'#@'@#@++#;''+;+++#@'@@@;#@@#@####+++++
    +#+#+######@##++@@@##'+##@''.;`:+@@+'+#+:;:'.'#@##@':`':;@#+''#+##@;@@@@##@;##@@@@@@
    #@##@#@#+#@#@@@#;@@#+;;'#'#+;;,:'+#@+#'',:;;;'+@#++';''+@@'+#'+##@,#@@@@@@'@@@@+@@#@
    @@'@@+@####+++#@#+'#'':.'##'+#;.@@@@#+'',:''++#+@@####@@@#++'+''@.#@@@@@#'#@@#.#####
    @###@#++#@@@@#@###@#+'::,''@:;'+@.+@@@;'`,'@+'+@+ '@@###',';'+'#@+@++'###@+'+ ##+#@@
    @##@'#####';++'++@#@#+;:+'',;;#+'#`+@@,',,'#@'++`'':'+#:+++#:'+@@@###@@'++##,@@@@@@@
    @@@@#@#;'###@####@#@+#;':''+;#+;;.;.'+,+::'#@+'''#;,:;;';',;''##@@#''+@#@#;###@@@#@@
    @@@@#@@@##@;+######@#+':+;,,'',`` ;#@+'+::'@@@#++;;,:.  `,,:''#@@#++++++##@@@@@@#@@@
    @####@@#@@@#@#@##@+@@@#+:;;,:;;. ,''++'#;:'#@@#';;:,` ```.,,+@@@@++#@#@@@@@@@@@@@@@@
    @##'@##@@@@##@@@@@#+@@'''::..,``.,;'+@++::'#@@#';:: `;.`.:;+'##,,,::::;;+@@@@#@@@@@@
    :#+####+'@@'+#+##++##@+;''`,,,,, ,:'+++#;:'@@@+;':'::,,,:'+'+##+#@@@@###@@#+@@@@@@##
    +###'##+#####+###@#++@#';;;:::..:+:++###':;#@@+''::;.; :;+';##@@@#@@#####@#####@#@@@
    @#@@@##@@@@@@@##@@#@@@@##:;',,::;#;++@@#+;+@@@@;'+'+:,:;':+@@@@@@@#@##@@@###;##+@@@@
    +@##@@@@@@@@##@@@#@@@@@#++;:;:;;:'''+@##+:;@#@@;'';';;:;;'@@@@@@@##@@@##@@#@#@@@@@@#
    #@###@+@@@#@@@@@@@##@@##+++:';.;:';;'@#@',;@@@#'+:'';;':'@#@##@@@@@##@#@##@##@'#@###
    @@#@@@@#@@##@@@#''#@@@@##++'':;:;;:#;@@#+;'@@@@#:':';';;#+@@####@#@##@@@@@####@#@@@@
    ,@.#@##@@@##@#'#@@@@@@@#@#++::.::.;;;#,##'+@@#@#,:::;;:#+#@#@@+@@@@###@@@#@@#@@#####
    #@##@@@@#@###@#@@@#@#+#@@#@#+;+;`',#:#'@':;#++@@.':;;#'##@@@@@@#+@#@#+###@@@#@####@#
    #@@@#@@+@###@##@#####@@@@@@#++#`;;+':+;#;,,+:'#+,'+;+'+##@@@@@@##+@#@##@###@###+@'@#
    @#@@#@#+##@@@@@#@@@@@@@@#@##++:;'++:;@##'::++###`;++#;'#+@####@@##'##@@@########@###
    @'##++@#@@@@@##@@@@@@@@@@@@@##',;;::@'@@':,+@@#;':'+++####:@#+@@+##++#####@###@@###+
    #@######@@@@@@#@@##@@#@@@#+#@##''';+:':@@@#@@@::'++##@###@@#@@'@#+@##############@#+
    ###@#++:++''''+####++''+++#@@##''':';''#@@@@@#+:;''##@#@@@@#@+#@##+#++++'''';;;;';':
    ###++:::::::::;;;';;::;;;;;@@++#''';:,+;@@@+,;:,;++@@@@##@@@#'+#@##++'+++#++'''''+++
    #@#','++#######@@@@##++####@@+#@#++#++';;'+;;'##@@@#@+'##@@@@@@+'+#@@###+'##'@@#@@+@
    @@+:+@###@##@@@@@@@@#@@@@@@@#++#++@@#@@@@#@@@@@@@@#@';#;;##@@@@@@@#'#@@@@#@####+####
    #+,#####@#@@@#@@@@#@#@@#++++;:;##+'#+##@@@@@@@#@#@@#;+#++#:++#@@@@###+@@@#@###@@@###
    #+###@@#@@@@##@@@@#@+'+;,;++++###':@#,#'+;@;#'+@@@'##@+@@###:;+#@@#@@##+'##@@###@@@#
    ##@#@@@@@@##@+#@@#':;+####@@@###@@#@@@., ,,, ;;@#@##@'#@@@@@+;;:++#+@@@@+#+###@@@@@#
    @@@#@@@@@@#+#':;''++#@@@@@@@@@#@#'++@@@;. , ,:@;##@@'####@@@#@'++,'+#@@@#@##'#@@###@
    @@##@@@@@#+++'###@@@@@@#@@@@@#@@@+@;@@@@'@@##@@#+@@#@@;#@#@@@@##@##''++#@#'':''####@
    @@#@@@@@#+;+##@@@@@@@##@@@@@#@@#'##;++####'###+++@;+@#@@'+@@@##@#@@@@#:'';,;;+':;+++
    @+@@@@#++'#@@#@@#@@@@##@@#@##@@@'###+++###@+@#+##@+'#@@@@@++@@@#@##@@#++:'+#@@#++#':
    @'@@@##'+;+@#@###@@@@#@@@@##@@@'@:#@+@#;####';@@@@#;+#@@##@@+#@#@@#@#@@@#@@@@##@@@#+
    #+++''+:####@@#@@@@##@@@@@+@#@#+##+@+@@#.+'+,@@@@@@',##@#@##@#+@@#@#@@#@#@@@@##@@@+#
    ;;';;+#@##@#@@@@#@@#@@@@##@#@@++;@'@@@@@@+++@@@@@###+++@#@@@@@@+@@#@###+@@@@@@@#@##@
    +:++#@###@##@@@@@@@@@@@@#+#@@@#'+@+@@@@@@@#@+@@@@#@@#;##@##@@@@@#@####@@@@##@@@@###@
    #+##@@@@####@@@@@@@@#@##@@@#@#+'#@#@@@@@@@@@@@@@@@@##+;#@#+#@@#@###@@@@@@@@@@#@@@@@@
    @##@@@#@##@@@##@@@#@@@##@#@#@#:+@#@@@@@@@@@@@@#@@@@#@#+'#@#@@##@@#@@@#@@@@@@@@@@@@@@
    #####+@#@@@@@#####@@@#@@@###@+####@@@#@@@#@@@@####@#@##:+@@@@@@@@#@@@@#@@@@@@@@@@@@#
    ##@@#@####+###++####+@@@@@#@#;+#@@@@@@@@@@@@@@@#+#@@@@@';#@@@#@#@#@@#@@#+#@@#@@@@#@@
    ##@#####@@@@@@@@@@@@##@#@#@@+#@@@@#@@#@@@@@@@@@@##@+@@@#;+##@@@##@#@####@@##@@#@@#@#
    #@#@@#@@####@@#@@##@@#@@#@@#@@#@##@##@@#@@@@@@@@@##@@#@@':+##@@@##@@@@@#@#@@@@#'@@@@
    #@#@#@@#@#@#@+;@#@@@@@@@#@#'+##@###@@#@#@##@@@@@@####@@##+'##@@##@#@@@##@@#@@##@@@@@
    @#@@@@@@@@#@#@@#@@@@#@@+#####@@@+@@#@@###'@##@@@@#@##@@#@#'+#@@@#@#@@@@@##@@@@@@#@@@
    @#@@@###@@@#@@@#@@########:@@@+#@@@@#@@@@@@@@@@@#@@#@@@@@@#:+@@#@@@#@@#@#@#@#@@@'@@@
    #@+@@######@##@@@@@###@##'+###@#@@@@#@@@##@@@@@@@###@@@@@@#+##@@@@##@@@@@##@#@@@@@@@