π
<-
Chat plein-écran
[^]

Mise à jour img2calc Python: miroir + optimisations palette

Mise à jour img2calc Python: miroir + optimisations palette

Unread postby critor » 26 Jan 2022, 17:45

13917Dans une série d'articles précédents nous te présentions img2calc, notre service en ligne gratuit sur TI-Planet te permettant de convertir facilement tes images pour tes projets sur calculatrices.

Un large choix de formats cible t'était proposé :
  • fichiers à appeler depuis tes programmes en langage Basic :
    • .g3p pour Casio Graph 90+E et fx-CG50/20/10
    • .c2p pour Casio fx-CP400 et fx-CG500
    • .8ca ou .8ci pour TI-83 Premium CE, TI-84 Plus CE et TI-84 Plus C Silver Edition
    • .8xi pour les TI-83 Plus (compatible TI-82 Advanced, TI-82 Plus et TI-84 Plus monochromes),
    • .83i pour les TI-83 (compatible TI-82 Stats et TI-76.fr)
    • .82i pour les autres TI-82
    • .86i pour les TI-86
    • .85i pour les TI-85
    • .73i pour les TI-73
  • fichiers à appeler depuis tes scripts en langage Python :
    • IM8C.8xv pour les éditions Python des TI-83 Premium CE et TI-84 Plus CE
  • scripts Python pour les différentes bibliothèques graphiques des calculatrices :
    • ti_draw (TI-Nspire CX II)
    • graphic (TI-Nspire CX II avec KhiCAS, TI-Nspire CX avec KhiCAS et NumWorks avec KhiCAS)
    • nsp (TI-Nspire avec Micropython)
    • ti_graphics (TI-83 Premium CE et TI-84 Plus CE éditions Python)
    • casioplot (Casio Graph 90/35+E II, fx-9750/9860GIII et fx-CG50)
    • hpprime (HP Prime)
    • kandinsky (NumWorks)
Après plusieurs semaines de bêta-test privé par Afyu, cent20 et redgl0w, aujourd'hui img2calc bénéficie d'une mise à jour apportant plusieurs améliorations à ce dernier point, soit les images converties en scripts Python pour ta calculatrice. Découvrons-les ensemble








1) Retournement horizontal/vertical

Go to top

Prenons comme exemple le sprite ci-contre à convertir en un script Python pour affichage sur nos calculatrices.

Le script obtenu te fournissait une fonction d'affichage d'image draw_image(rle, x0, y0, w, pal, zoomx, zoomy, itransp), avec :
  • rle : les données de l'image selon une compression RLE, incluses dans le script obtenu
  • x0, y0 : les coordonnées où positionner le coin supérieur gauche de l'image lors de l'affichage
  • w : la largeur de l'image originale
  • pal : la palette de couleurs à utiliser, également incluse dans le script obtenu
  • zoomx, zoomy : les coefficients de zoom horizontaux et verticaux éventuels pour l'affichage, ou 1 par défaut pour une absence de zoom
  • itransp : l'index d'une éventuelle couleur transparente dans la palette, ou -1 par défaut pour aucune transparence

Et bien nouveauté, la fonction draw_image() accepte maintenant des paramètres de zoom négatifs pour indiquer un retournement horizontal et/ou vertical.

Il t'est donc maintenant possible de retourner l'image horizontalement et/ou verticalement lors de l'affichage, y compris avec un zoom comme illustré ci-contre.
Code: Select all
#palette for your image
#18 RGB-888 colors
palette = (
(0,0,0),(32,32,32),(80,144,0),(120,180,24),(248,120,0),(240,160,104),(232,96,176),(184,104,24),(248,252,248),(48,52,48),(64,216,112),(48,144,104),(136,88,32),(32,32,200),(224,144,80),(128,128,240),(240,216,64),(192,16,24),
)

#your image data
#16x22 RLE-5 pixels
image = (
b"\xa0\1\xe1\0\xc0\2\1\"\3\2!\xe0\1\1\"\xe3\0\2\1\xe0\0\1\0!\4\"\3\2\4\1\2!\0\1\5\1\6!\xe4\0!\2\1\5!\5\1F\xe1\0&!\5!\a\5\1\xe6\1\1\5\a!\a\1\6\xe1\1\6\1\a\1\0\1\a\1\a('(\a\1\a\1@\1'\b\1%\1\b'\1\xe0\0!\a\5\1%\1\5\a!@\t\n\v\1\a\tE\a\1\v\n\1\0\t\b\xe9\0\b\t\a"
b"!+\1\f\1\t\xa8\1\t\1\v\n\v\1,\1\t\b\xed\0\b\tJ\v!\16\1\t\b\r/\r\b\t\nK\1.\1\t\b\r/\r\b\t\20\x010\v\1\16\1\t\b\r/\r\b\t0+A \t\b-\b\tK!\21\1\xe0\0\t(\t\xe1\0\21\4!\x80\1)\xe1\1\xe0\1\xa1\1\x80\1"
)

l = (
  (0,0,4,4),
  (64,0,3,3),
  (64,66,3,1),
  (112,0,2,3),
  (112,66,2,1),
  (144,0,1,3),
  (144,66,1,1),
)
for v in l:
  for ky in (-1, 1):
    for kx in (-1, 1):
      draw_image(image, 160 + v[0]*kx, 96 + v[1]*ky, 16, palette, zoomx=v[2]*kx, zoomy=v[3]*ky, itransp=0)

La fonction draw_image() affiche l'image en coloriant un rectangle pour chaque élément RLE. Cela a l'avantage d'être particulièrement rapide lorsque la bibliothèque graphique de la plateforme fournit une méthode optimisée en ce sens.
À ce jour le retournement est fonctionnel sur 4 des plateformes gérées par img2calc :
  • NumWorks où la méthode kandinsky.fill_rect(x, y, largeur, hauteur, couleur) a l'excellente idée d'accepter directement des paramètres de largeur et hauteur négatifs et d'effectuer directement le retournement adéquat
  • KhiCAS (éditions NumWorks et TI-Nspire CX), même avantage avec la méthode graphic.fill_rect()
  • Casio Graph 90+E et Graph 35+E II, la bibliothèque graphique casioplot ne fournit pas de méthode optimisée pour colorier un rectangle, mais la boucle d'allumage de pixels alors générée pour le script converti gère directement les retournements
  • Micropython pour TI-Nspire, pour la même raison avec la bibliothèque graphique nsp


La HP Prime avec la bibliothèque hpprime ne trace hélas rien si on lui demande de colorier un rectangle avec une largeur ou hauteur négative.

La TI-Nspire CX II pour sa part génère dans ce cas une exception, suggérant donc qu'il n'est hélas pas dans les projets de Texas Instruments de supporter ce cas.

1513315134Les TI-83 Premium CE Edition Python, TI-84 Plus CE-T Python et TI-84 Plus CE Python quant à elles génèrent une exception si tu fais appel à la méthode .fill_rect() de la bibliothèque interface ti_draw. Pire, si tu fais directement appel à la méthode .fillRect() de la bibliothèque graphique ti_graphics, là tu obtiens un affichage incorrect avec un blocage (boucle infinie).

Nous verrons pour une prochaine mise à jour d'img2calc si nous injectons de quoi contourner les limitations de ces plateformes.




2) Optimisation palette : couleurs hexadécimales

Go to top

Rappelons que les interpréteurs Python sur nos calculatrices font appel à 3 types de mémoires :
  • La mémoire de stockage qui comme son nom l'indique stocke physiquement tes fichiers de scripts Python.
  • La pile (stack) qui référence, à l'exécution, les objets Python créés par tes scripts. Sa capacité limite donc le nombre d'objets Python pouvant coexister simultanément en mémoire.
  • Le tas (heap) qui reçoit, à l'exécution, le contenu des objets Python créés. Il limite donc la taille globale utilisée pour les données de ces différents objets.

Voici quelques indications de consommations heap valides pour les plateformes 32 bits que sont à ce jour nos calculatrices :
  • pour un entier : 24 octets de base + 4 octets si non nul + 4 octets pour chaque groupe de 30 bits utilisés au-delà des premiers 31 bits dans sa représentation binaire
  • pour une liste : 56 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour un tuple : 40 octets de base + 8 octets par élément + les tailles de chaque élément
  • pour une chaîne : 49 octets de base + 1 octet par caractère
  • pour un tableau d'octets (bytes) : 33 octets de base + 1 octet par octet
Comme tu peux le constater le langage Python a le très gros défaut d'être un énorme consommateur de heap, mémoire qui sera bien souvent le facteur le plus limitant pour tes projets sur calculatrices. Rappelons les plus mauvais modèles sur ce critère :
  • NumWorks avec seulement 32,5 Ko de heap si ta machine est verrouillée sur le firmware officiel
  • éditions Python des TI-83 Premium CE et TI-84 Plus CE avec encore pire 19,7 Ko de heap
La NumWorks cumule les inconvénients avec de plus une mémoire de stockage de seulement 32 Kio si ta machine est verrouillée sur le firmware officiel.

Comme déjà expliqué, img2calc a justement été conçu pour minimiser la consommation de heap. Pour cela img2calc mutualise deux approches :
  • La compression de ton image au format RLE.
  • Le compactage des données, avec l'utilisation des types d'objets Python les moins gourmands en mémoire :
    • des tuples pour la palette de couleurs
    • des bytes pour les données de la compression RLE (type d'objet Python s'utilisant comme une chaîne de caractères mais optimisé pour le stockage d'octets)
Lors de la dernière mise à jour, nous optimisions l'écriture des données RLE afin d'économiser la mémoire de stockage.

Aujourd'hui, intéressons-nous à la palette de couleurs avec l'image ci-contre.

Jusqu'à présent, img2calc te générait ce genre de script :
Code: Select all
#palette for your image
#12 RGB-888 colors
palette = (
(0,0,0),(104,40,120),(136,112,80),(80,192,0),(248,132,24),(160,168,160),(248,252,0),(0,252,248),(248,0,0),(248,252,248),(248,172,176),(0,0,248),
)

#your image data
#160x154 RLE-4 pixels
image = (
b'P\x81\1P\x81\6\xf0\0\1\0\1\20\1\x90\3QP\2\23\1\0\21\xa0\1\xf1\0\0\1\xf0\0\x110\xb2\1\4\2\0\2\1\x92\6`\2\0\5\20\2\1\2\20\5\1 \1\xf0\1b \2\0\4\26\4\0\27\0\xf8\0\20\xf1\0\0\27`\22P\2\4\x92\1\4\2\20\1\xf2\5\x80\1\22\0\1\22\20\25\2@\2\20\2\0\xf2\0\0b \2\0\6'
b'\31\6\0\27\xb0\2\27\0\5\27\5\20\22\xf0\0\2\4\x92\1\4\2\20\xe2\5\xb0\1\2\20\5\2\25\0\x020\2\20\2\0\xf2\0\0b \2\0\6\31\6\0\27\0\x85\1\0\xf8\0\0\27\0\a\31\a\20\22\xa0\1\4\x82\1\24\2\0\1\xc2\5P\22\20\22\5\2\0\1\5\22\0\x020\2\0\22\0\xf2\0\0b \2\0\n\26\n\0\27'
b'\0\25G\25\0\bJ\4\b\0\27\0\a\31\a\20\22\xb0\1\2\4\x82\1\24\2\0\1\xa2\5@\2%\x025B\1\0\22\20\1"\0\xf2\0\0b \2P\27\0\25\27\31\a\25\0\bZ\b\0\27\0\5\27\5\20\22\xe0\1\1\x92\1\0\1\0\x92\5@\2%\x025"\5\1\5\21\5 "\1\xf2\0\0b \2\x001\0\27\0\25\a\t\'\25\0\bZ\b\0\27'
b'\x001\20\22\xf0\1\x92\1\4\2\20\21\xe2\4@\1\2\25\2\5\22\1\5"\0\5\21\2\5 \xa2\1\0b \2\0\'\5\0\27\0\25\a\t\'\25\0\bZ\b\0\27`\22\24\xf0\1\2\4\xf2\0\24 \1\xc2\4`\1" \25\2\20\5\0\22\25\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\27\31\a\25\0\bZ\b\0\27\0\n\26\n\20B\24\2'
b'\xe0\1\4\x82\1\4\2\20\xb2\4\xf0\0\5\2 \2\25\22\25\0\2%\20\xa2\1\0b \2\0\a\31\a\0\27\0\25\a\t\'\25\0\bZ\b\0\27\0\6\31\6\20\xf2\0\24\xe0\1\4\xf2\0\24\2\0\1\x92\4P5\2\25\2\5\0R% \x1252\0b \2\0\5\27\x050\25G\25\0\bZ\20\27\0\6\31\6\20\xa2\1\24\xe0\1\xf2\0\24'
b'\2\0\1\xf2\3P\5\2\25\2\25\2\0\2\1\2\0"\5\2\5\2\xc0\1b \2P\27\1\0\1\x057\25\0\b:\30@\n\26\n\20\xe2\1\xd0\1\1\x82\1\0\1\0\xe2\3P\2\1"\5\22\x010"\5\2\25\x010Q\20b \2\0\2\23\1\0\'\1\0\x017\25\0\b*\b \21\20\2\23\1\20\xf2\1\4\xc0\1\22\1R\4\2\20\21\xb2\3\x80\1'
b'\1\22\1\x020b\x150b\0b \2\0\4\26\4\0G\0\5\'\25\0\b\32\b\20\x017`\x82\2\24\xd0\1\4b\4\2 \1\x92\3`\2\0\2\5\0\2@b\5" R\0b \2\0\6\31\6\0W\0\1\5\a\25\0\b\n\b\0\1W\0\5\27\5\20\22\0\24\xc2\1\4\xf0\1\24R\24\2\20\x82\3`\5 \1P25\2\5\2\5 B\0b \2\0\6\31\6\0W\1\0\1%'
b'\0\30\20g\0\a\31\a\20\22\4 \24\x92\1\4\xa0\2b\24\2\0\1\xe2\2\xf0\0"PB\25\0\22\5\x1202\0b \2\0\n\26\n\0\xf7\0\0\1\25\0\b\20\xf7\0\0\a\31\a\x102$ \24R\4\0\xf2\0\4\xa0\1\4R\24\2\0\1\xc2\2P\2\x90\1\22\5\2\0\25\0\22\25\2\1 \1"\0b \2P\x87\1\1P\xf7\0\0\5\27\5'
b'\20b\20\2\4\0R\4\0\xf1\0\4\22\x90\1\x82\1\0\1\0\xb2\2P\5\x90\1\22\25\0\5\0"\25\x120"\0b \2\x001\0W!@\2\0\1g\x001\20\x92\1\4\20\4B\x80\1\4"\4\x80\1\22\1B\4\2\20\1\x92\2P\5\x90\1\2%\0\1\0\x125\22\x102\0b \2\0\'\5\0\'\21P(\4\b\0a`\xb2\1\24 \4\x90\1\4B\24'
b'\x80\1\24B\4\2\20\1\xf2\1@\22\1\x80\1\2%\2\20\22%"\x102\0b \2\0\a\31\a\0\27\1\20\2D \30\x80\1\n\26\n\20\xe2\1\24\2\x90\1\4\x82\1\x80\1\2\4B\4\2 \xd2\1@\5\2@\22\1\20\2% \x025"\x102\0b \2\0\a\31\a\0\a\1\0\2\24\26\t\26\4\6\2P\5\27\5\0\6\31\6\20\xf2\1\4\xa0'
b'\1\4\x82\1\24\x90\1\x042$\2\0\1\xb2\1@\22 B\20\2\25\2 \2%\2\0\22`b \2\0\5\27\5 \x146\t6\4\0\n\26\4\0\a\31\a\0\6\31\6\20\xf2\1\4\xa0\1\24\xa2\1\24\xf0\0\2\4B\24\2\0\1\x92\x010\25\2\20b\0\2\25\2 \2\25\2\0\22\1\x102\0b \2P\24\6\t\6\31\6\24@\6\31\6\0\a\31\a'
b'\0\n\26\n\20\xf2\1\4\xd0\1\1\xc2\1\x80\1\1R\0\1\0\x82\x010\25\2\20b\0\2\25\22\x102\0\22 2\0b \2\0\2\23\1\0\4\5\6\t\6\t\n\4\2\x001\0\6\31\6\x007\0\2\23\1\20\xf2\1\4\xe0\1\4\xa2\1\24\x80\1\2\x012\4\2\20\1b0\25\2\0\xf2\0\0\2\25\22\20\1\22\20\22\20B\0b \2\0'
b'\4\26\4\0\4\t&\22 \'\5\0\6\t\n\6\0\1\27\1`\22\20Db\4\0\xa2\x014\x104R\4\xa0\1\x142\4\2\20\1B0"\0b\20\2\25\2@\2\0\5\22\20B\0b \2\0\6\31\6\0\4\31$0\a\31\a\0\n\26\2@\1\xa2\x0104"\4\xb0\1\x042$\20$"\4\xd0\1\4"\24\2\x102 \25\22\0R\1\x102P\2\25\2 2\0b \2\0\6'
b'\31\6\0$\2\0\n\26\n\0\a\31\1@\xd2\2 \22\24\xb0\1\4b$ $\0R\24`\24\22\24\2\20\22\0\5\0\25\22\0R\20%\22@B 2\0b \2\0\n\26\n\0\4\2 \6\31\6\0\5\27\20\xc2\3\xf0\1\4\x92\x014\x80\1\4\22\24`\x042\0B\25\22\0B\0\1\0B0R\1\20\1"\0b \2\xa0\1\6\31\6@\xe2\3\1\xd0\1\4'
b'\xd2\1\x80\1\4RP\1\2\24\0"\1\2\0\5\1\2\x001\20\2\21\2\1\x120!20\1\2\0b \2\x001\x001\0\4\n\6\4\20\21\xb2\1\xf1\0\xc2\1\4\xc0\1\4\xe2\1\xf0\0\4R\4P"\0\22\20\1\0\2\0\2`\2\20\2\0\22`\2\21\x120\2\0b \2\0\'\5\0\'\5\0$\5\1\xa2\1!\x80\1\xc2\1\4\0\xb2\x014\xa2\1'
b'\4\xf0\x0042\24\xf0\0\x120\2\0b\0\2\20\2\0\22\0\1"% \x020\2\0b \2\0\a\31\a\0\a\31\a\0\2\20\xa2\1\xd0\1\xc2\1\4\x80\x024b\4\0b\24\20$\22\4P2\0\x82\x035\2\xf0\0b \2\0\a\31\a\0\a\31 \x82\1\1\x80\1\t\x050\25\xc2\1\4\xd0\x01204\22\4\xf0\0\4\22$\20\4\2P2\0R@'
b'\22\0\2@BU\x010\2\0b \2\0\5\27\5\0\5\a\20\x92\1`\x82\3\4\0\xa2\1\20\x82\x010\4\2\xf0\0\4R\24`2\0\x120\1\0\2\20R \2\20\1\2\5\0E0\2\0b \2\xf0\0\1\xf2\0P\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\xa2\1\20\x82\x011\4\x80\1\4b\4`2\0B\0!\2\1b\1\20\22\0\21\20E '
b'\2\0b \2\0\2\23\1\20\xf2\0\1`\5\0\5\0\5\20\25\0\5\0\5\0\5\0\xc2\1\4\0\x91\1\2\20\xc2\1\4\x80\1\4b\4`2\0\2E \x92\1\1\0%\1\25\20\2% \2\0b \2\0\4\26\2\1\xf2\0P\25\1\5\1\5\1\5\0\1\25\1\5\1\5\1\5\0\xc2\1\4\xa0\1\2\20\xc2\1\4\0\xf2\0D"\4`2\0\2\25"\5\20\x82\1'
b'\x112%0\25 \2\0b \2\0\6\t\2\1b\1@\xc5\2\xc2\1\4\xa0\1\2\20\xc2\1\4\xd0\1\2$`2\0\2\5\2%\2\5\20b\1\0\22\25\2%\0\2\1\20\2 \2\0b \2\0\6\5\0b\x010\xb2\4\4\xf0\0\2\20\2\20\xc2\1\4\0\xf2\0\0" \22`2\0\2\5"\5\2\5\2\20R\20\2e\0\22P\2\0b \2\0\n\0b@\4@\4\0\4\0\4@\4'
b'\0\4\0\4 \xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\2\25\22\25\2\0\2\0\x012\20\22e\0\22\1 "\0b \2\20b@\2\0\22\5\x020\2\0\22\5\x020\2\0\22\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\0\1E\2\1\0\5\x102\0\1\2\1"%\0"0"\0b'
b' \2\0\1R \1\5\1\5\0\1\2\x050\1\5\0\1\2\x050\1\5\0\1\2\5\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002\20\1%@\5\20\22\0\1\22\x102\21\22@!\0b \2\1R \2\25\2\5\20\1 \2\0\2\5\20\1 \2\0\2\5\20\1\0\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2@\2\0R\4'
b'\xf0\x002`\22 \5\0\22\x002\1\0\1\2\21\2\1\x90\1b R\1 \2\5"\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0\24\2\0\2\0R\4\xf0\x002@\2\0\22\x010\22\0"\1\0\1 \2\1\20\xf2\0\0b B\x010\5\22\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20'
b'\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0R\20\x012\0"\5\22 2\5"\0b B \x052\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\1\0\4\20\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002@\2\0\2\xd0\1%\22 2\5"\0b 2 \5\22\24\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040\1\0\x010'
b'\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002\x80\1!\x92\x015\22\x102\5"\0b "02\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\xa0\1\2\20\xc2\1\4\20\2\0$\0\2\0R\4\xf0\x002`\1\22\21\xe5\1\2 "\5"\0b "\20\1\22\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\0\xa2\1\20\xc2\1'
b'\4\20\2\0\24\2\0\2\0R\4\xf0\x00202\xc0\1"E\20"\5"\0b "\20"\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\0\xa2\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x0020\2\x010\x82\1\1\0\x050\2\25\2\20R\0b \x020\2\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\4\xa0\1\2\20\xc2\1'
b'\4\0\xf2\0\0R\4\xf0\x0020\2\20\2\0\xb2\1\5"\20\22 \22\5"\0b \2 \22\4\2\24\2\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\0\xf2\0\0R\4\xf0\x0020\1\20\2\0\xb2\1\5\22\25\x020b\0b \2\20\22\24\2\4\2\5\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1'
b'\x040(\0\30\0\2\20\xc2\1\4\0a\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\x020Q\20b \2\20\22\24\2\4\25\4\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4\xf0\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20"\4\2\4\5"\4\2\5P\2\0\2\5P\2\0\2'
b'\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\1\22\5\4\2\4\22\5\2\4\2\5P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4P\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\22%2\4\2\5'
b'P\2\0\2\5P\2\0\2\x050\xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\2\5\a \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2'
b'\0\2\0\2\5B\5\2\4\2\5P\2\0\2\5P\2\0\2\27 \xc2\1\x040(\0\30\0\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\21\2\20\xc2\1\x040\30\20\b\20\2\20\xc2\1\4 \30\0\4\0\2\0R\4\xf0\x002@\2\0\2\0\xb2'
b'\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0B\0\2\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\xa0\1\2\20\xc2\1\4 \30\0\2\0\2\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\x82\1\4\2\5P\2\0\2\5P\2\0\a\5\0\a\20\xc2\1\4\0\xa2\1\20\xc2\1\4\xf0\0\2\0R\4\xf0\x00'
b'2@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\5\22\1\0"\4\2\5P\2\0\2\5P\2\0\a\5\0\t\20\xc2\1\4\0\xa2\1\20\xc2\1\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\0\2\0\2\0\2\20\2\0\2\0\4\2\5P\2\0\2\5P\2\27\5\0\a\20\xc2\1\4\xa0\1\2\20\xc2\1'
b'\4\0\xf2\0\0R\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\0\2\x002\0\4\20\24\2\5P\2\0\2\5P\2\27\5\0\a\20\xc2\1\4\xf0\0\1\20\2\20\xc2\1\4\0a\2\0\22\1"\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x012\21\20b \2\0\2\0\22\1\4\0\4\20\24\2\5P\2\0\2\5P\2\a\2\5\0\a'
b'\20\xc2\1\4P\33\22\0\2\20B\1b\4\xf0\0\2\0\2\0\2\24\2\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \x025"\0b \2\0"\20\4\0\4\2\0\24\2\5P\2\0\2\5P\2\a\2\5\0\a\20\xc2\1\4P\33\22\0\2\x102\1\0*2\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b '
b'\2\20\22\20\4\2\4\22\24\2\5P\2\0\2\5P\2\0\2\5\0\a\20\xc2\1\4 \33\0\33\22\0\2\20"\1\0\2$\5"\4\20\24\0\21\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20"\0\4\2\4\22\24\2\5P\2\0\2\5P\2\a9\a\t"\20*B\4 \33\0\33\22\0\2\20"\0T"\4\20\24\0\21\0'
b'\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\0\4\2\4\22\24\2\5P\2\0\2\5P\t\a\t\a\31\a\t\22\1\0\x0242\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\22'
b'\24\2\5P\2\0\2\5P\a\20\t\20\a\0\22\0\2D\n"\4 \33\0\33\22\0\2\20"\0T\n\22\4\20\24\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\1"\5P\2\0\2\5P\a\2\5\t\22\a\22\20d\5\22\4 \33\0\33\22\0\2\20"\0$\22\4\n\22\4\20\24\0'
b'\21\0\2\0\2\0\24\2\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\5\1\0\5P\2\0\2\5P\a*\31\a\n\2\0\2d\n\22\4 \33\0\33\22\0\2\20"\0\24 \4\n\22\4\20\4\2\0\21\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4'
b'\2\4\x020\5P\2\0\2\5P\a2\t\a\22\0\xf4\0\n\22\4 \33\0\33\22\0\2\20"\0\4\20\2\0\4\n\22\4\xf0\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 2\5"\0b \2\20\22\4\2\4\2\4\2\0\2\20\5\1@\2\0\2\5\1@\t2\5\2\5\2\0\4\2\0\2\0\2\0\4\n\22\4 \33\0\33\22\0\2\20"'
b'\0\24\2\0\2\0\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2\xb0\1b \2\20\22\4\2\4\2\4\2\0\22\0\xc2\1\1 \a\5\2\31\2\5\t\2\0\4P\4\n\22\4\xa0\1\2\20"\0\4\0\4\0\4\0\n\22\4\0\xf2\0\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2'
b'\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\a\t\5\2\5\2\t\5\2\0\4\2\4 \2\4\n\22\4\0\x91\1\2\20"\0\4\2\4\2\4\0\n\22\4\0a\2\0\2\0\4\20\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\x85\2\t\5\t\2\5\n\t\5\2\0\24\2\4\22\4\2\n\22\4\0\xa2\1'
b'\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf2\1\a\t\5\t\25\31\5\2\0\4\20\4\20\4\0\n\22\4\0\xa2\1\20"\0T\n\22\4\20\4 \2\0\2\0\2\0$\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4'
b'\2\4\2\4\2\0\2\4\0\xf5\1\aI\25\t\2\0\4\20\4\20\4\0\n\22\4\xf0\0\21\0\2\20"\x004\2\0\n\22\4\20\4 \2\0\2\0\2\0\4\2\0\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\2\4\0\xf5\1\a\x197\25\2\0\xf4\0\n\22\4 \30 \21\0\2\20"\0\4\0\4 \n'
b'\22\4\20\4\0\2\0\2\0\2\0\2\0\4\0\4\n\4\xf0\x002@\2\0\2\0\xb2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\22\1\xf5\1\a\5i\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0$\0\24\n\22\4\20\4\0\4\0\2\0\2\0\2\0\4\20\n\4\xf0\x002@\2\0\1\xc2\1\5\22\25\2 \xf2\0\0b \2'
b'\20\22\4\2\4\2\4\2 \x85\2\t\2e\2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\2\4\0\2\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0\24\0\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2 \x85\2\t\5\2U\2\0\4\22\4\2\4\2\4\n\22\4 \30\0\v\0\21\0\2\20"\0\4\0\4'
b'\20\4\n\22\4\20\4\0\4\0\2\0\2\0\2\0$\n\4\xf0\x002@\2\20\xc2\1\5\22\25\2 \xf2\0\0b \2\20\22\4\2\4\2\4\2\0\1\0\x85\2\t%R\0\4\20\4\0\4\0\4\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\20\2\0\2\0\2\0\2\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%\1\b\2\b\0\xf2\0\0b \2\20'
b'\22\4\2\4\2\4\2\4\0\4\x85\2\aE2\0\4\2\0D\n\22\4 \30\0\v\0\21\0\2\20"\0T\n\22\4\xf0\0\2\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\x035\b\5\30\x90\1b \2\20\22\4\2\4\2\4\2$\x85\2\aE2\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\x004\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2'
b'\20\xb2\1\23%8\0\x025\22\5\0b \2\20\22\4\2\4\2\4\2$\xf9\1\27I\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20"\0\4\20\4\0\4\n\22\4\0\xf2\0\0\2\0$\n\4\xf0\x002@\2\20\xb2\1\23%8\0\xf2\0\0b \2\20\22\4\2\4\2\4\2$\x85\2\aI\2\5\22\0\xf4\0\n\22\4 \30\0\v\0\21\0\2\20'
b'"\0\4\0\2\4\2\4\n\22\4\0a\2\0\2\0\2\24\2\4\xf0\0"\5\2\1 \2\x102E"\23%8\0%B\0b \2\20\22\4\2\4\2\4\2$\xb5\19\aU\2\25\2\0D\22\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\2\4\n\22\4\xf0\0\2\0\22\0"\4\xf0\0"% \2\20"g\25\23%8\0%B\0b \2\x102\4\2\4\22\24\xb5\1:\a\5B%\2'
b'\0D\20\4\n\22\4 \30\0\v\0\21\0\2\20"\x004\0\4\n\22\4\20\x110\2\0R\4\xf0\0"\20\5 \2\20\22\x97\1\23%8\0%B\0b \2\0\1\2%\4\2\4\2\5\24\xb5\x012\a\t\27%)\2\0\4 \4\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0\30\0\2\0R\4P\2%\2\20\5 \2\20\22\x97\1\23%8\0\22\5B\0b '
b'\2\0\2\0\2\25\4\2\4\5\2\24\xb5\1)\'\xf5\0\2\0D\20\4\n\22\4\0\xa2\1\20"\0T\n\22\4\20\21\0\30\0\2\0R\4P\2%\xba\1\x97\1\23%(EB\0b \2\0\2\0\22\25\24\5\2\5\4\xc5\1\xc9\1\2\0\4 \4\20\4\n\22\4\xa0\1\2\20"\0T\n\22\4\20\25\0\30\0\2\0R\4P\2%\b\4\xba\1\5g\23%(%\0'
b'\5B\0b \2\0\2\0\2\5\2%"\4\xb5\1\2\xc5\1\2\0\4\20\2\4\20\4\n\22\4\xa0\1\2\20"\0T\n\22\x045\4\30\0\2\0R\4P\2%(\24\x8a\1\2\1W\23\25\1(%\0\5B\0b \2\0\2\0"\25\22\5\2\4\xb9\1\1\2\xb5\1\2\0\4"\4\20\4\n\22\4 \x040\30\0\2\20"\0T"\x045\n\1\b\0\2\0R\4P\2%H\x85\1 !'
b'\27\23\1\20(%\0\5A\0b \2\0\2\0\2\0B\5\2\4\xb9\1\0Q\5\1\5\21\5\1\2\0\4 \24\0\4\n\22\4 \4\0\2\0\v\30\0\2\20"\0D\n"5*\b\0\2\0R\4P\2%\0\xd8\1@\27 \25 %\0\5Pb \2\0\2\0b\0\2\4\xc5\1\xc0\1\2\0$\2\0$\n\22\4 \4\0\2\0\v\30\0\2\20"\0D25\n\t\n\20\2\0R\4P\2\xb5\4\0'
b'\5B\0b \2\0\2\0\x82\1\4\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20"\1\20\32\x0525\b\0\b"\0R\4P\2%\xd0\3%\0\5B\0b \2\0\2\0\2\5"\0\22\0\4\x95\3\2\0\24\0$\0\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\25Z\22\0R\4P\2%@\xfa\0\5\xf2\1%\0\5B\0b \2\0\2\0\2\0\2\20\2\1'
b'\2\24\x95\3\2\0\4\20\4\20\2\4\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\5\n\4:\1\2\0R\4P\2% \1\2\x8a\1\5\xf2\0c%\0\5B\0b \2\0\2\0\2\1\2\20\4\0\1\24\x95\3\2\0\4\20\4\0\2\24\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\5\4\b*\5\0\2\0R\4P\2% \2\xaa\1R\x83\1%\1\5B\0b \2\0'
b'\2\0\22 \4\0\2\24\x95\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\48\32\2\0\2\0R\4P\2% \5Y\5:U\xf3\0UB\0b \2\0\2\0\2\1\0\4\0\4\0$\x99\3\2\0\xf4\0\n\22\4 \4\0\2\0\v\30\0\2\20\xc2\1\27\2\30\n\31\0\2\0R\4P\2%\0\1\5\x8a\1\4( \x93\x015\0\5B\0b \2\0\2\0\2\0'
b'\24\0\4\2$\x99\3\2\0\xf4\0"\4 \4\0\2\0\v\30\0\2\20\xc2\1\4\0\1\a\0\v\0\v\0\2\0R\4P\x025\1\0\xc8\1\3\5\xb3\1%\0\5B\0b \2\0\1\22\4\2\4\2\4\2$\x97\3\2\0d\n"\4\xa0\1\2\20\xc2\1\4\1\20\a\v\0\v\0\2\0R\4P\2eY\5(\x023\xd5\1\0\5B\0b \2\20\22\4\2\4\2\4\2$\x99\3\2'
b'\0d\n"\4\0\x91\1\2\20\xc2\1!\20\v\0\v\0\2\0"\1\22\4P\2%2U\2\30\5\27#\xa2\1%\0\x051\20b \2\20\22\4\2\4\2\x042\x97\3\2\0d\n"\4\0\xa2\1\20\xb2\1P\1\0\v\0\2\0\2\1\20\22\4P\2%\0\23\x82\x017#\xa0\1%\0\5Pb \2\20\22\4\2\4R\x97\3\2\0d2\4\0\xa2\1\20\xa2\1\x80\1\v'
b'\0\2\1\20:\4\2@\2\25#\xd7\1#\x92\1\v%\0\5;\20b \2\20\x82\1\25\x97\3\2\1\0\x024\x052\4\xa0\1\2\20\xa2\1\xe0\1*$@\2UYW\5#\x92\1\v%\0E\2\0bPR\5\xd7\3\22\1\20\32R\4\xf0\0\4\2\0\2\20\xa2\1P\1\xf0\0\32\1\2\1\n@\2\5CYG\25#\xd5\1\0\25\2\25\2\xb0\1\x0252\x175\a'
b'\25\'\5\ae\a\xf5\0\xc2\1\4\xf0\0\24\0\2\20\xa2\1`\2`"\32\1@Z\xf7\x005\1\b#\xa0\1%\0\5\x82\2\xf8\0\xea\3\xc2\1\4 \x010\24\0\2\20\xa2\1\xf0\0\1P2\1\4@Z\xf7\0\25\21\30#\xa0\1%\0\2\5\2\5\2\5"\5R\5(R\xea\3\xc2\1\4 \x010\24\0\2\20B\1"\25 \1@\x020B\v\2\1\33\21'
b'\xd5\1\1H#\x90\1\1%\20\21\v\1\v!\vQ\v\30B\x85\4\xc2\1\4 \1\0"\24\0\2\20B\0E \21@R$0$Zi\58\x023$\n\x95\1 \xeb\1\b\228\x8a\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\x000\1\xf0\0\1\22\0Q\n\2e\xa8\1C\2$\n\xc0\1\xc5\1(\2\30\4\xaa\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5'
b'\0@\2\x80\1\2\32Q9\1%\xc3\1\1\x134\n\xc0\x015\2E\22(\2\b\4\xca\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0P\2\xf0\0\2:A\t\n\x015\xf9\0\5#\33$\n\24\0+\20\v \5\0B%\22\25\2(\2\b\xea\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0\x80\1\22@\32\25\xf1\x002\xf5\0\23\1\33\a\24'
b'\n\24\2@+\20\5\0\2\25\22%\22\5\2(\2\b\4\xea\4\xc2\1\4 \1\0"\24\0\2\20\22\0\xf5\0\20\x110\b\31\b0\24\x81\x014\x93\1\33\27\5\4\n\4\22\0\x010;\0\2\0\2\25\2\5\1\2\5\22\1\2\30\22\b\xfa\4\xc2\1\4 \1\0"\4\2\0\2\20\22\0%\30\0\23\0\a\31\a\20\b\t\n\30\xa4\2\xc7\1'
b'\4\n$\20\n\5\33\0[\2\x002\5"\5\22\30\22\30\xfa\4\xc2\1\4\xa0\1\2\20\22\0\25\2\30#\a\5\t\27\0\1H\4\3\4\5\2\5\1\t\1\xa4\1i\5\'\2$\2\20\2\nU"E\22\1%\22(R\xd5\4\xc2\1\4\0\xa2\1\20\22\20\30\27\23\5G\2\58\4\x035\1\n\5\1\x94\1\x97\1\2\32\24\2 \4\n\xa5\2\22\xf8'
b'\5\xc2\1\4\0\xa2\1\20"\0\30\27\23\x027\5\22%\32\23%1\xf4\2\20\4\20\4\n\xa0\1\x9b\a\xc2\1\4\0\x91\1 "\0\30\27\3\2\4\a\5\27\5B\32\23%1\xb2\2\n\24\2\0\24\20\4\n\xb1\1k\1K!K\21\xbb\1!K\xd1\1\xc2\1\4\xd0\1"\0\30\27\3\24\a\2\a\25\22 \32\23%\1\2\21\xb2\2\n\22'
b'\0$\20\4\n\5\2\xe5\1"E\a\25\a\x95\1\a\xd5\1\a5\a\x85\1\xc2\1\4\0\xc2\1\4\2\25\30\27\3\24\a\2\a\25\22(\32\23%\1\2\21\2%\xf2\1\n\x104\20\4\n\25BU\2\5B\25\22\x87\1\5\a%\a\25\a%\27\xf5\0\a%\27%\27\5\a\5\xc2\1\4\xd0\1\4\2\20\30\27\3\24\'\25\22(\32\23%1\0%'
b'\x80\2\2D\20\4\n5\2%\22\x85\1B\5\2\5\a\x1575\a\x85\1\a%\'\5\a5\a%\'\5\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22(\32\23%1\0%\xd0\1\2\4\nT\20\4\n\22%B\5\22G\x052\25\x175\27\x95\1\27\25\x175\xf7\0\25\'\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25\22 \32\23%!E\x90'
b'\1"\0\24\nT\20\4\n\22\25\22\5"\5\x127%\2\5\2\5\22\27%\27\xa5\1\a\25\27\25g\25\'\25\a\25\a\xc2\1\4\xb0\1%\2\20\30\27\3\24\'\25B\32\23%!%\2\5\xf1\0\20"\0\24\nT\20\4\n\22\25\22\5\22\5\2\5G%\2\5B\a\xf5\1\a\5\27%g\x157E\xc2\1\4\xb0\1%\1\20\30\27\3\22\'\25\22'
b'%\32\23%!%\0\5\xf2\0\20"\0\24\nT\20\4\n\2%B\5\2\5\x1757B\xb5\1W\5\x175W\x157E\xc2\1\4\xb0\1% \30\20\3\20\'\25\22(\32\20% %\0\5\xf2\0\20"\0\24\nT\20\4\nE2U\a\5G\xb5\x017\5\aE\a\x85\1\x87\x015\a\xc2\1\4\0\xa2\1%\xd0\3%\0\5\xf2\0\20"\0\24\nT\20\4\n\2e\2e'
b'\x87\x012%\'5W%\xe7\1U\xb2\1$\33\x80\1\xb5\4\0\5\xf2\0\20"\0\24\nT\20\4\n\v\20[\xa5\3\x87\4\xa2\1\4\22\4\0\v\xf0\0\v%\v( \27 \24 \27\20\30 \22\20%\0\5\xf2\0\20"\0\24\nT\20\4\n\2\5\2%\2\27%G\25\a\5\a\x057\x152EW\x85\1\a%WE\a\xd2\1\4\x80\1\v\0%\v(\21\0\27'
b' \24 \25\21\30\21\0\22\20%\0\5\xf2\0\20"\0\24\nD\2\20\4\n\xd5\1\'%\27\x85\1"5\22\25\27\x85\1\a%\27\25\'5\a\xd2\1\4\v0;\20%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n4\2 \4\2%\22U\a\25\'%\27\x85\1\2\5\2\5B\25\'\5\a\25\27%G%\27%\27R\4b'
b'\4+ +\20%\v\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n$\x020\2\0\5\2\5\2%\'\5\x87\1\5\'%2\25\2\25\22%\aB\a\5\a5G\5\aE\a\5\a\xd2\1\4\v\20[\0\v%\v\b\2\b\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\24`\xb5\1'
b'\27U\a\25\27%\2%\x025\22%\a5\2eB\25\xd2\2\4\0[\20\33%\v(\21\3\27\24\0\24\0\30\27\25\30\22\0\22\3\0%\0\5\xf2\0\20"\0\24\n\4`5\2%\'%\a\xf5\0\27U\2\5b\5\2\27\x92\1\5\1\5B%2\25\24\xb2\1\4\33@\33\0\v%\v(\21\3\27\24\0\24\0\x185\30\22\0\22\3\0E\xf2\0\20"\0\24'
b'\n \33\5\v\1%\x025\a\25gE\27E\a\x85\x017\5\2e\2\xa5\1\x025\xf2\1\33@\33\20%\0(\21\3\27 \24\0\30\25\21\30\22\20\1\3\0%\2\5\xf2\0\20"\0\24\n\20\33\25\1\5\22\5\2e\a\5\a\25\x175\'5\27%\a5\'\xa5\1\2\xa5\1\x015\xe2\1\1+\20\33\0\v\20%\1"\20\3\27 \22\0\22\27'
b'\x102 \3\0%\0\5\xf2\0\20"\0\24\n\33\1E\2\1\xf5\0\a\25\aU\a\5\'\25W\5\'\25\'U"\25\22\25B\xf5\0\xc2\1\4\1\33\20\33\0+\20\xb5\4\0\5\xf2\0\20"\0\24\n\0\5\x125\22\xa5\1\a\25\a57\x057\25G\5G5\27\25\27\5\2\25B\x85\1\xa2\1\4\33 \x8b\1% T\30\25\2\b`\23P%\0\5\xf2'
b'\0\20"\0\24\n\25\22\x052U\a\x85\1\27E\x97\x015\'\5\27\5\a\5\a\xb5\1\x125\2\5\2\25\x82\1\4\xf0\0K\x105\20\xf4\0\30\25\30@3K%\0\5\x90\1"\0\24\n\x025\2\x85\1\a%\27E\a5\x87\1U\xf7\0\x95\x0175\a%\22\5b\4;\0K\0\v\0\v\25\x005\x94\1\5\4\b\25\30\0Ck%\0\5\x90\1"'
b'\0\24\n5\2\25\a\xa5\1\'\25\xf7\0\25\27\5\'\25G\5W\x157\5\a\5\27\xc5\1\xf2\0\xe0\1\21\0\1%\4\x82\1\5\2\0\2\25\x183\25A\v%\0\5\x90\1"\0\24\2\x91\1e\x87\6\v\1\33\x81\1b\xa0\2%\4\xf5\0\22 \b\5\30#\0e\v%\0\2+\0;\20"\0\4\2\xa0\1e\x87\6\33\21\x80\1"\4\1+\0\x8b'
b'\1\25\0\25\2E\x94\x010(#\20k\0%\20\33\0\5+\5\v\0"\0\2\0\5"\25\x87\1\5\27EGE\x175\'%g\5\27U\a\x057\25\'E\22\5\2\24;\0\33\20;5\0\2\25\22\xb5\4 5\22\25P\a\2\5\22\5\27\5\x97\x015W\25\a\25\27\25\a\x157\5\x97\x015\a\25G\x057\25\a\25\22\5'
)

draw_image(image, 0, 0, 160, palette, zoomx=1, zoomy=1, itransp=-1)
draw_image(image, 320, 0, 160, palette, zoomx=-1, zoomy=1, itransp=-1)

Une image utilisant 12 couleurs. Les données de la palette occupaient donc :
  • 158 octets en mémoire de stockage
  • $mathjax$40+12\times\left(8+40+3\times\left(8+24+4\right)\right)$mathjax$
    soit déjà 1,912 Ko à l'exécution en mémoire heap

Mais gros avantage sur NumWorks, il est possible d'écrire les paramètres de couleur différemment. Les chaînes hexadécimales sont en effet acceptées, et désormais utilisées par img2calc lorsque tu choisis de convertir pour cette plateforme, une amélioration suggérée par redgl0w :
Code: Select all
#palette for your image
#12 RGB-888 colors
palette = (
"#000000","#682878","#88705C","#50c000","#f88418","#a0a8a0","#f8fc00","#00fcf8","#f80000","#f8fcf8","#f8acb0","#0000f8",
)

Les données de la palette n'occupent maintenant plus que :
  • 133 octets en mémoire de stockage (-15,82%)
  • $mathjax$40+12\times\left(8+49+7\right)$mathjax$
    soit 808 octets à l'exécution en mémoire heap (-57,74%)




3) Optimisation palette : noms de couleurs

Go to top

Il existe encore une façon d'écrire différemment certaines valeurs de couleurs, en fournissant simplement leur nom. Cette écriture est gérée uniquement sur NumWorks et KhiCAS (éditions NumWorks et TI-Nspire CX). Par contre les deux plateformes ne reconnaissent pas les mêmes noms.

Sur KhiCAS, nous avons 8 couleurs nommées :
  • "black" : (0, 0, 0)
  • "red" : (255, 0, 0)
  • "green" : (80, 193, 2)
  • "blue" : (0, 0, 255)
  • "yellow" : (255, 255, 0)
  • "cyan" : (0, 255, 255)
  • "magenta" : (255, 5, 136)
  • "white", "w" ou toute autre valeur : (255, 255, 255)

Sur NumWorks, nous avons 13 couleurs nommées :
  • "w" ou "white" : (255, 255, 255)
  • "k" ou "black" : (0, 0, 0)
  • "gray" ou "grey" : (167, 167, 167)
  • "r" ou "red" : (255, 0, 0)
  • "g" ou "green" : (80, 193, 2)
  • "b" ou "blue" : (0, 0, 255)
  • "y" ou "yellow" : (255, 255, 0)
  • "brown" : (141, 115, 80)
  • "pink" : (255, 171, 182)
  • "orange" : (254, 135, 31)
  • "purple" : (110, 45, 121)
  • "cyan" : (0, 255, 255)
  • "magenta" : (255, 5, 136)

Lorsque ton image utilise une de ces couleurs, img2calc utilisera désormais le nom le plus court associé si plus intéressant que l'écriture hexadécimale lorsque disponible, autre amélioration suggérée par redgl0w.

Sur NumWorks, "magenta" est la couleur au nom le plus long, et est ici sans intérêt par rapport à l'écriture hexadécimale.
Sur KhiCAS, pour le blanc on peut donc utiliser "".

Les 12 couleurs de l'image ci-contre appartiennent justement à cette liste, la seule n'y figurant pas étant le magenta.

Voyons ce qu'elle donne maintenant, commençons par KhiCAS :
Code: Select all
#palette for your image
#12 RGB-888 colors
palette = (
"black",(104,40,120),(136,112,80),"green",(248,132,24),(160,168,160),"yellow","cyan","red","",(248,172,176),"blue",
)

Les données de la palette n'occupent maintenant plus que :
  • 129 octets en mémoire de stockage (-18,35%)
  • $mathjax$40+12\times 8 + 5\times\left(40+3\times\left(8+24+4\right)\right)+7\times 49+5+5+6+4+3+0+4$mathjax$
    soit 1,246 Ko à l'exécution en mémoire heap (-34,83%)

Et convertissons maintenant pour NumWorks :
Code: Select all
#palette for your image
#12 RGB-888 colors
palette = (
"k","#682878","brown","g","orange","#a0a8a0","y","cyan","r","w","#f8acb0","b",
)

Les données de la palette occupent donc maintenant :
  • 92 octets en mémoire de stockage (soit -30,83% par rapport à l'écriture hexadécimale, et -41,77% par rapport à l'écriture tuple initiale)
  • $mathjax$40+12\times\left(8+49\right)+1+7+5+1+6+7+1+4+1+1+7+1$mathjax$
    soit 766 octets à l'exécution en mémoire heap (soit -5,20% par rapport à l'écriture hexadécimale, et -59,94% par rapport à l'écriture tuple initiale)

On peut remarquer toutefois que plusieurs couleurs n'ont pas été remplacées par leur nom associé et sont restées sous l'écriture hexadécimale, celles pour lesquelles les valeurs des composantes ne sont ni maximales ni minimales. En effet l'image lors de la conversion subit un prétraitement (passage en RGB-565 avec fusion des couleurs proches dont l'affichage est identique sur calculatrice), opération lors de laquelle les valeurs de couleurs peuvent légèrement varier. Et il suffit de quelques unités en plus ou en moins sur une seule des composantes pour que cela ne corresponde plus.




4) Contrôle du nombre de couleurs

Go to top

Une bizarrerie avait été signalée par cent20 et Afyu.

cent20 avait tenté de convertir l'image Bomber ci-contre, à première vue une image monochrome très simple, et donnant pourtant jusqu'à présent un énorme script de 18,9 Ko, particulièrement douloureux à faire passer sur NumWorks, sa calculatrice préférée :
Code: Select all
#palette for your image
#87 RGB-888 colors
palette = (
(255,255,255),(255,251,255),(231,228,231),(182,183,182),(157,163,157),(190,191,190),(239,240,240),(107,101,107),(7,7,7),(2,2,2),(2,0,2),(2,4,2),(174,172,175),(247,247,247),(116,118,116),(0,0,0),(36,41,36),(223,228,223),(247,251,247),(223,224,223),(116,114,116),(99,101,99),(99,93,99),(99,97,99),(215,211,215),(239,243,240),(231,232,231),(149,151,149),(133,131,133),(207,207,207),(166,163,167),(7,4,7),(7,12,7),(73,76,73),(18,17,18),(27,31,27),(157,159,157),(174,176,175),(55,58,55),(149,147,149),(45,45,45),(223,220,223),(36,35,36),(133,135,133),(90,88,90),(107,105,107),(166,168,167),(149,155,149),(55,54,55),(90,84,90),(239,236,240),(27,26,27),(124,122,124),(18,21,18),(247,243,247),(81,84,81),(81,80,81),(198,199,198),(207,203,207),(182,179,182),(215,216,215),(166,172,167),(73,71,73),(64,67,64),(124,126,124),(107,109,107),(64,63,64),(215,220,215),(207,211,207),(27,21,27),(182,187,182),(55,50,55),(45,41,45),(141,143,141),(36,31,36),(73,67,73),(231,236,231),(190,187,190),(157,155,157),(141,139,141),(18,12,18),(198,195,198),(45,50,45),(198,203,198),(190,195,190),(90,93,90),(64,58,64),
)

#your image data
#240x74 RLE-7 pixels
image = (
b"\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\x96\x81\0\x82\0\x83\0\x84\0\x85\0\x86\0\x80\xe8\x86\0\x87\0\x88\0\x89\0\x8a\0\x89\0\x8b\0\x8c\0\x81\0\x80\3\x8d\2\x80\xde\x8d\0\x8e\0\x8f\5\x90\0\x91\0\x92\0\x93\0\x8c\0\x94\0\x95\0\x96\0\x97\0\x94\0\x84\0\x98\0\x99\0\x80a\x9a\0\x9b\0\x94\0\x9c\0\x9d\0\x81\0\x80r\x9e\0\x9f\0\x8f\5\xa0\0\x9c\0\xa1\0\xa2\0\xa0\0\x8f\4\x8a\0\xa0\0\xa3\0\xa4\0\x91\0\x80^\xa5\0\xa6\0\x9f\0\x8f\1\xa0\0\xa7\0\x92\0\x80q\x95\0\x8f\24\xa8\0\x8c\0\x92\0\x80[\xa9\0\xaa\0\x8f\4\x88\0\xa5\0\x80p\x9a\0\x9f\0\x8f\26\xab\0\x81\0\x80Y\x8d\0\xac\0\x8f\6\xad\0\x92\0\x80o\xae\0\x8f\27\x8b\0\xaf\0\x81\0\x80X\x93\0\xb0\0\x8f\6\xb1\0\x8d\0\x80n\xb2\0\xa1\0\x8f\30\xb3\0\xa9\0\x80X\x9b\0\x89\0\x8f\6\xb4\0\x81\0\x80n\x9d\0\xaa\0\x8f\31\x8e\0\x80W\x81\0\xad\0\x8f\6\x89\0\xae\0\x80n\x81\0\xab\0\x89\0\x8f\31\xb5\0\xb6\0\x80V\x93\0\xa2\0\x8f\6\xb0\0\x98\0\x80n\x92\0\xa8\0\x8f\v\xb3\0\xb7\0\xac\0\xb8\0\xa2\0\x8f\t\x8b\0\xb9\0\x80V\xae\0\x8f\a\x97\0\x92\0\x80n\xba\0\x8f\t\x88\0\xb7\0\xbb\0\xbc\0\x86\0\x99\1\x9d\0\xa1\0\x8f\b\x89\0\xbd\0\x80U\xb6\0\xbe\0\x8f\a\xbb\0\x80n\x81\0\x94\0\x8f\b\xaa\0\x8c\0\x8d\0\x80\5\x93\0\xa8\0\x8f\b\x97\0\x80U\xbc\0\xa3\0\x8f\6\xb3\0\x86\0\x80n\x9a\0\xbf\0\x8f\a\x90\0\x83\0\x81\0\x80\6\x81\0\x94\0\x8f\b\x87\0\x80U\xa7\0\x8a\0\x8f\6\x8e\0\x81\0\x80n\xbb\0\xb3\0\x8f\a\xa4\0\x81\0\x80\b\xc0\0\x8f\a\x89\0\xbb\0\x80T\x92\0\xb7\0\x8f\6\x88\0\xbd\0\x80n\x81\0\xb4\0\x8f\a\xbf\0\x86\0\x80\b\x8d\0\xc1\0\x8f\a\x8b\0\xba\0\x80T\xbc\0\x9f\0\x8f\6\xc2\0\x91\0\x80.\x86\0\xc3\0\x85\0\x83\0\xc4\0\x8d\0\x809\x86\0\xaa\0\x8f\a\xab\0\x81\0\x80\b\x82\0\xbf\0\x8f\a\x9f\0\x99\0\x80T\xa7\0\x8f\a\xb4\0\x81\0\x80-\xbc\0\x94\0\xc5\0\x8f\1\x89\0\x95\0\xbc\0\x808\xc6\0\x8f\a\xaa\0\x85\0\x80\t\xbb\0\x89\0\x8f\a\x97\0\x80T\x86\0\xbe\0\x8f\a\x9d\0\x80-\x9a\0\xac\0\x8a\0\x8f\4\xaa\0\x99\0\x806\x92\0\xb7\0\x8f\a\xbf\0\x99\0\x80\1\xb2\0\x93\0\x9a\0\xb6\0\x80\1\x81\0\xb9\0\xb3\0\x8f\a\x9f\0\x83\0\x80T\x8c\0\xc5\0\x8f\6\xb0\0\x92\0\x80,\x92\0\x94\0\x8f\6\x8a\0\xc1\0\x8d\0\x805\xbc\0\x90\0\x8f\a\xa7\0\x80\0\xa9\0\xc1\0\xc7\0\xc8\0\xa8\0\xb0\0\xc9\0\xa9\0\xbb\0\xca\0\x8a\0\x8f\a\xcb\0\xcc\0\x80\n\x81\0\x86\0\x91\0\xcd\0\xa4\0\x9b\1\xce\0\xc6\0\x98\0\x92\0\x80\20\xb2\0\x98\0\xae\0\x9b\0\x9e\0\xbc\0\x80\0\x92\0\xcc\0\xb9\0\xa4\0\x9b\1\x9e\0\xb9\0\x86\0\x80\4\x81\0\x8d\0\xbc\0\x85\0\x9b\2\x9e\0\x85\0\x9a\0\x80\r\x8d\0\xc0\0\x8f\a\x87\0\xa5\0\x9b\2\xcd\0\x82\0\x80\22\x81\0\x8d\0\x93\0\x85\0\xa4\0\x9b\2\xcd\0\xa9\0\x92\0\x80\t\xa9\0\xa3\0\x8f\a\xca\0\xa9\0\x805\x9b\0\x8f\a\xa0\0\x93\0\xbb\0\xa6\0\x8f\20\x89\0\x85\0\x80\t\x81\0\xba\0\xcf\0\xbe\0\x8f\a\xa8\0\xcf\0\x93\0\x80\r\x86\0\x87\0\x8f\4\x95\0\x9c\0\xd0\0\x8f\5\xa3\0\xc0\0\xcc\0\x80\0\x81\0\x9a\0\xc9\0\xb7\0\x8f\a\x97\0\xbb\0\x92\0\x80\n\x9a\0\xb0\0\x8f\16\x97\0\xc6\0\x81\0\x80\16\x9a\0\x9b\0\x97\0\x8f\a\xbf\0\xcf\0\xb2\0\x80\a\xae\0\x88\0\x8f\b\xa5\0\x804\x92\0\xad\0\x8f\a\x97\0\x9d\0\xa6\0\x8f\20\x8a\0\xad\0\x92\0\x80\b\x9a\0\x94\0\x90\0\x8f\v\xa3\0\xa4\0\x80\v\x99\0\xc1\0\x8f\20\xa1\0\x9d\0\xa4\0\xa8\0\x8f\n\x88\0\x97\0\x86\0\x80\t\xd1\0\x8f\20\xd0\0\xc9\0\xb6\0\x80\v\x8d\0\xbb\0\xc2\0\x8f\v\xc2\0\x83\0\x80\6\xc0\0\x8f\b\x8a\0\xa5\0\x804\x93\0\x8f\a\x9f\0\xae\0\x9c\0\x8f\21\xbe\0\x91\0\x80\b\x98\0\xb8\0\x8f\16\x8a\0\x8e\0\x86\0\x80\t\xb9\0\xa3\0\x8f\21\xc5\0\x8f\16\xa1\0\x86\0\x80\a\x81\0\x94\0\x8f\22\x97\0\x8d\0\x80\t\xb2\0\x9c\0\x8f\17\xcf\0\x92\0\x80\3\x81\0\x94\0\x8f\b\x9f\0\x95\0\xbb\0\x86\0\x802\x9e\0\x8f\a\xd2\0\x98\0\xaa\0\x8f\20\x9f\0\xd1\0\x80\b\x98\0\xa1\0\x8f\20\x9f\0\xb4\0\x80\t\x9b\0\x8f#\xb7\0\x92\0\x80\6\x9a\0\xd2\0\x8f\22\x9f\0\xae\0\x80\b\x81\0\xc0\0\x89\0\x8f\17\x9f\0\xa4\0\x80\4\xce\0\x89\0\x8f\t\xd0\0\xc2\0\xc9\0\x91\0\x80/\x99\0\xb0\0\x8f\a\xc1\0\xa9\0\x9f\0\x8f\16\x8a\0\xc2\0\xd1\0\x80\b\x82\0\x90\0\x8f\22\x8b\0\xa5\0\x80\a\x81\0\xbf\0\x8f#\x8b\0\xcd\0\x80\6\xae\0\xa0\0\x8f\23\xc5\0\xa9\0\x80\6\x8d\0\xab\0\x8f\22\xc8\0\x9a\0\x80\3\xbc\0\xb3\0\x8f\r\xc0\0\x93\0\x80-\x9d\0\xa3\0\x8f\a\x9d\0\xc4\0\x8b\0\x8f\16\xd0\0\xa9\0\x80\b\x8d\0\x8e\0\x8f\24\xbe\0\x86\0\x80\6\x93\0\x8b\0\x8f$\xc0\0\x81\0\x80\4\x92\0\x94\0\x8f\24\x89\0\xab\0\x80\6\xd1\0\xb5\0\x8f\23\x9b\0\x80\3\x8d\0\xad\0\x8f\r\x89\0\xa8\0\xd3\0\x80+\x92\0\xb4\0\x8f\a\xa8\0\x8d\0\x9a\0\x9f\0\x8f\16\x89\0\x9b\0\x92\0\x80\a\xa5\0\xa0\0\x8f\a\xd2\0\xb7\0\x9b\0\xab\0\xc2\0\x9f\0\x8f\6\x9f\0\xd1\0\x80\5\x81\0\xab\0\x8a\0\x8f\b\xbe\0\x8e\0\xa4\0\xbe\0\x89\0\x8f\t\xc5\0\xb8\0\x8e\0\xb4\0\xca\0\x8f\a\x97\0\x8d\0\x80\4\x93\0\xaa\0\x8f\b\xd0\0\xb7\0\xae\0\xb4\0\xaa\0\x8f\a\xb8\0\x8d\0\x80\4\x9a\0\xbf\0\x8f\b\xb8\0\xc9\0\xc0\0\xd2\0\x8f\a\xca\0\xb2\0\x80\3\x9d\0\x8f\17\x9f\0\xc9\0\x92\0\x80)\x99\0\xbe\0\x8f\a\xab\0\x80\0\x92\0\xa8\0\x8f\17\xd0\0\x85\0\x80\a\x97\0\x8f\a\xbf\0\xba\0\x8d\0\x80\1\xb2\0\xc0\0\x89\0\x8f\6\xa7\0\x80\5\x86\0\xa1\0\x8f\b\xcb\0\x93\0\x81\0\x80\0\xcc\0\xb8\0\x8f\t\xa5\0\x86\0\x80\0\x81\0\xa4\0\x8f\a\xa1\0\x86\0\x80\4\xa5\0\x8f\b\xd2\0\x85\0\xb6\0\x80\0\x81\0\xc6\0\xa3\0\x8f\6\xa2\0\x9a\0\x80\4\xcd\0\x8f\b\x94\0\xb6\0\x80\0\x92\0\xbc\0\x88\0\x8f\6\xc5\0\xba\0\x80\3\xa5\0\x8f\20\xa0\0\x85\0\x80)\xd4\0\x8f\a\xa3\0\x9d\0\x80\1\xa5\0\x89\0\x8f\17\xcb\0\x81\0\x80\5\x9a\0\x8f\a\xb8\0\xcc\0\x80\4\x9a\0\xca\0\x8f\6\xb4\0\x80\5\x85\0\xb3\0\x8f\a\xac\0\xb6\0\x80\3\xc0\0\x8f\a\xaa\0\xa5\0\x80\3\x98\0\x90\0\x8f\6\xb7\0\x99\0\x80\3\x92\0\xb7\0\x8f\a\xbe\0\x98\0\x80\3\x92\0\xb7\0\x8f\a\x93\0\x80\3\x92\0\xb7\0\x8f\a\xad\0\x8d\0\x80\3\xa7\0\x8f\6\x89\0\xa5\0\x80\2\x8d\0\xb7\0\x8f\21\x90\0\x82\0\x80(\xab\0\x8f\a\xc2\0\x86\0\x80\1\x99\0\xc9\0\x89\0\x8f\16\x9f\0\xbc\0\x80\5\x8c\0\x8f\a\x83\0\x80\5\xb2\0\xaa\0\x8f\6\x95\0\x80\5\x9c\0\x8f\a\xb0\0\x82\0\x80\3\x8d\0\xc2\0\x8f\a\xa7\0\x92\0\x80\3\x83\0\x9f\0\x8f\6\xc1\0\x8d\0\x80\3\xa9\0\xb3\0\x8f\6\x8a\0\xd1\0\x80\4\x81\0\xd5\0\x8f\a\x93\0\x80\3\x93\0\xa3\0\x8f\a\x9d\0\x80\4\xae\0\x8f\a\xc0\0\x80\2\xbc\0\xb3\0\x8f\21\x89\0\xaf\0\x80'\x9a\0\xd2\0\x8f\a\xce\0\x80\4\x9d\0\xd5\0\xa8\0\xaa\1\xa8\0\xc7\0\x88\0\x8f\b\x87\0\x81\0\x80\3\xcc\0\xbf\0\x8f\6\xa6\0\xb6\0\x80\5\x91\0\xa3\0\x8f\6\x94\0\x80\4\x8d\0\xca\0\x8f\6\xd0\0\xa4\0\x80\4\xd1\0\xa2\0\x8f\6\xd2\0\xb6\0\x80\4\x94\0\x8f\6\x9f\0\x9b\0\x81\0\x80\2\x81\0\xb4\0\x8f\a\xb4\0\x80\5\x9a\0\xbe\0\x8f\6\x9f\0\x93\0\x80\3\xa4\0\x89\0\x8f\6\xca\0\x80\5\x84\0\x8f\6\xa0\0\x8c\0\x80\1\x81\0\x94\0\x8f\6\xb0\0\xc5\0\x8f\n\xc1\0\x8d\0\x80&\x9e\0\x89\0\x8f\a\x9a\0\x80\5\xb6\0\xa9\0\x9d\1\xa9\0\x9a\0\x9b\0\x89\0\x8f\a\xa1\0\xb2\0\x80\3\xb9\0\xa3\0\x8f\6\x94\0\x80\6\xb9\0\xb5\0\x8f\6\x9b\0\x80\4\xc4\0\x8f\a\xd2\0\xb2\0\x80\3\x92\0\x9c\0\x8a\0\x8f\6\xce\0\x80\4\x8d\0\xa2\0\x8f\6\xc5\0\xbc\0\x80\3\x8d\0\xb1\0\x8f\a\xae\0\x80\5\xcd\0\x88\0\x8f\6\xb0\0\x86\0\x80\2\x8d\0\xad\0\x8f\a\x9c\0\x80\5\xad\0\x8f\6\xc5\0\xba\0\x80\1\x99\0\xcb\0\x8f\5\xc8\0\x9a\0\xd1\0\x94\0\xa2\0\x8f\b\x95\0\x8d\0\x80%\x8d\0\x94\0\x8f\a\xad\0\x80\r\x97\0\x8f\a\x90\0\x93\0\x80\3\x9c\0\x8a\0\x8f\5\xb3\0\xc6\0\x80\5\x8d\0\x8e\0\x89\0\x8f\5\x9f\0\xcd\0\x80\3\x81\0\xc1\0\x8f\a\x9c\0\x80\4\xc3\0\xd6\0\x8f\6\xc8\0\x98\0\x80\4\xbb\0\x8f\a\xcb\0\x8d\0\x80\3\xbc\0\x89\0\x8f\6\xbf\0\xc3\0\x80\5\xab\0\x8f\a\x97\0\xb6\0\x80\2\xbc\0\x89\0\x8f\6\xa2\0\xbb\0\x80\3\x99\0\x9e\0\x88\0\x8f\6\xaa\0\x9a\0\x80\1\xb9\0\x8a\0\x8f\5\xaf\0\x80\2\xb9\0\x8f\b\x94\0\x8d\0\x80%\x91\0\xca\0\x8f\a\xce\0\x80\r\xa5\0\x8f\a\x89\0\xd1\0\x80\3\xca\0\x8f\6\xb0\0\x86\0\x80\5\x86\0\xb8\0\x8f\6\xa8\0\x91\0\x80\3\x9a\0\xb0\0\x8f\a\x85\0\x80\4\xcd\0\x8f\a\xa1\0\xb6\0\x80\3\x8d\0\xad\0\x8f\a\xae\0\x80\4\xa4\0\x8f\a\xac\0\x92\0\x80\4\x8d\0\xa8\0\x8f\6\x89\0\xa7\0\x80\3\xae\0\x8f\a\x88\0\xa1\0\xb9\0\xa9\0\x91\0\xd3\0\xb8\0\xd0\0\x8f\a\xd5\0\x81\0\x80\1\xc0\0\x8f\5\xb3\0\xc4\0\x80\2\x81\0\xc7\0\x8f\a\x9c\0\x81\0\x80%\xbb\0\x8f\a\xa6\0\xd1\0\xb9\0\xbd\0\xc9\0\xcf\2\xce\0\x83\0\x91\0\x8d\0\x80\3\x83\0\x8f\b\x85\0\x80\2\xbc\0\x8f\a\xa7\0\x80\3\x99\0\xcd\0\x9b\0\x8e\0\x89\0\x8f\6\xb7\0\xb6\0\x80\3\xae\0\x89\0\x8f\6\xbf\0\x9a\0\x80\4\x8e\0\x8f\6\x8a\0\xae\0\x80\4\x98\0\xd2\0\x8f\6\xa0\0\xbc\0\x80\3\x99\0\x90\0\x8f\6\x89\0\x85\0\x80\2\x91\0\xce\0\xcb\0\x88\0\x8f\a\xa3\0\xbc\0\x80\2\x92\0\x90\0\x8f\t\x89\0\x8b\0\x9f\0\x8b\0\x8f\b\x89\0\xd1\0\x80\1\x82\0\xaa\0\x8f\5\xb8\0\x86\0\x80\2\x81\0\xaa\0\x8f\6\xb3\0\xd4\0\x80\5\x99\0\x93\1\xcc\0\x92\0\x80\32\x92\0\xb8\0\x8f\a\xd0\0\xa6\0\xa0\0\x8f\6\xd2\0\xb7\0\xd1\0\x8d\0\x80\1\x83\0\x8f\b\x85\0\x80\1\x81\0\x94\0\x8f\a\x98\0\x80\2\xc4\0\xbe\0\x89\0\x8f\t\xce\0\x80\4\x94\0\x8f\a\xb4\0\x92\0\x80\3\xb2\0\xaa\0\x8f\6\x8b\0\x9a\0\x80\4\xa7\0\x8f\a\x87\0\x8d\0\x80\3\xc4\0\xc5\0\x8f\6\xa8\0\xb6\0\x80\1\x91\0\xa8\0\x8f\n\xd5\0\x81\0\x80\2\xc4\0\xc5\0\x8f\26\xb7\0\x99\0\x80\1\xaf\0\x89\0\x8f\5\x9b\0\x80\3\xbc\0\x8f\a\xb0\0\x86\0\x80\4\xba\0\xb1\0\xa8\0\xaa\0\xa6\0\x95\0\xb6\0\x80\31\xbc\0\xb3\0\x8f\24\xac\0\x9d\0\x81\0\xce\0\x8f\a\x88\0\xb9\0\x80\1\x82\0\xa6\0\x8f\6\xb1\0\x8d\0\x80\1\x93\0\xc5\0\x8f\n\xb5\0\x9a\0\x80\3\x8d\0\x89\0\x8f\6\xb3\0\xd4\0\x80\4\xae\0\xa0\0\x8f\6\xad\0\x80\4\x81\0\xbe\0\x8f\6\xa2\0\x83\0\x81\0\x80\2\x8d\0\x94\0\x89\0\x8f\6\xc9\0\x80\1\x93\0\xa6\0\x8f\v\x85\0\x80\2\x92\0\x94\0\x89\0\x8f\25\xa8\0\x9d\0\x81\0\x80\0\x86\0\xd5\0\x8f\5\xa2\0\x9a\0\x80\2\x81\0\x8e\0\x8f\a\xa7\0\x80\4\xc3\0\xc7\0\x8a\0\x8f\3\x87\0\x8d\0\x80\30\xc9\0\x8a\0\x8f\25\xca\0\xae\0\xbe\0\x8f\a\xa6\0\x93\0\x80\1\x8c\0\xa2\0\x8f\6\xb4\0\x81\0\x80\0\xb6\0\xc0\0\x8a\0\x8f\n\xb4\0\x80\4\xa5\0\x8f\a\xb0\0\x86\0\x80\3\xb6\0\x87\0\x8f\a\x8c\0\x80\4\x93\0\x8f\a\xd2\0\x9a\0\x80\3\x9a\0\xbe\0\x8f\a\x83\0\x80\1\xce\0\x9f\0\x8f\n\x90\0\x82\0\x80\2\x82\0\xc2\0\x8f\26\xce\0\x81\0\x80\1\xc4\0\xb3\0\x8f\5\xc2\0\x80\3\x9a\0\xc2\0\x8f\a\xbc\0\x80\4\x84\0\x8f\5\xd2\0\x93\0\x80\27\x99\0\xb1\0\x8f\30\x8b\0\x8f\a\xb1\0\x86\0\x80\0\x81\0\xc1\0\x8f\6\x8a\0\xa4\0\x80\1\x9d\0\xca\0\x8f\n\xd2\0\xbc\0\x80\3\x82\0\xc2\0\x8f\a\x9e\0\x80\4\x98\0\xa3\0\x8f\6\xbf\0\x93\0\x80\3\x81\0\x8e\0\x8f\a\xa7\0\x80\4\xcd\0\x8a\0\x8f\6\xc5\0\x9d\0\x80\0\x92\0\x95\0\x8f\v\xb4\0\x8d\0\x80\1\x92\0\xcf\0\x8a\0\x8f\24\xb3\0\xa4\0\x86\0\x80\2\xa4\0\x8f\6\xc1\0\x80\3\xce\0\x89\0\x8f\6\x95\0\x8d\0\x80\3\x99\0\xb3\0\x8f\5\xd6\0\x91\0\x80\27\xa9\0\xa2\0\x8f!\xc1\0\x81\0\x80\0\xb2\0\xb3\0\x8f\6\xca\0\x9d\0\x80\1\xa5\0\x8f\n\x8b\0\xa4\0\x92\0\x80\3\xc9\0\x88\0\x8f\a\xbc\0\x80\4\xae\0\x8f\a\x95\0\x8d\0\x80\3\x9a\0\xc2\0\x8f\a\x9d\0\x80\4\xcf\0\x8f\a\xbe\0\x86\0\x80\0\x8d\0\xa1\0\x8f\n\xb3\0\xc6\0\x80\1\x8d\0\xaf\0\x9f\0\x8f\24\xb0\0\x85\0\x81\0\x80\3\xad\0\x8f\6\xae\0\x80\2\x81\0\x94\0\x8f\a\x9b\0\x80\4\xcd\0\x88\0\x8f\5\x97\0\x8d\0\x80\27\xce\0\x8f!\x89\0\x83\0\x80\1\xa5\0\x8f\a\xa1\0\x8d\0\x80\1\xae\0\x8f\n\xb7\0\x8d\0\x80\2\x86\0\xce\0\xa0\0\x8f\a\xac\0\x8d\0\x80\3\x92\0\xaa\0\x8f\6\x89\0\x83\0\x80\4\xa4\0\x89\0\x8f\6\xa1\0\x8d\0\x80\3\x86\0\xd2\0\x8f\a\x9c\0\x80\1\x8d\0\xac\0\x8f\n\xb0\0\xcc\0\x86\0\x9d\0\x8e\0\x8b\0\x8f\a\x89\0\x8c\0\xa4\0\xaa\0\xa0\0\x8f\5\xb5\0\x90\0\xa4\0\x82\0\x80\4\x9d\0\x90\0\x8f\5\xbf\0\xbc\0\x80\2\x93\0\xa0\0\x8f\6\xaa\0\x9d\0\x80\3\x86\0\x95\0\x8a\0\x8f\4\xd0\0\xbb\0\x80\27\x8d\0\xbf\0\x8f\17\xd6\1\x8a\0\x8f\16\xbf\0\x8d\0\x80\0\xb2\0\xbe\0\x8f\a\x83\0\x80\2\xbb\0\x8f\n\xb3\0\x80\1\x8d\0\x9d\0\xac\0\xa2\0\x8f\b\xc9\0\x80\4\xbc\0\xa2\0\x8f\6\x9f\0\x86\0\x80\4\x94\0\x8f\a\xc0\0\x80\4\x9d\0\xc5\0\x8f\6\x8b\0\x93\0\x80\1\x92\0\xc0\0\x8f\n\x9f\0\x96\0\xb8\0\xa2\0\x8f\t\x9f\0\x8d\0\x80\0\x99\0\x9d\0\xab\0\x8e\0\x95\1\x8e\0\xcf\0\xba\0\x86\0\x80\5\x86\0\x96\0\x8f\5\x8a\0\xc0\0\x8d\0\x80\2\xbb\0\x8f\a\xb7\0\x8d\0\x80\3\x85\0\xa0\0\x8f\5\xb0\0\x86\0\x80\27\x85\0\xb3\0\x8f\f\xaa\0\x83\0\xbc\0\x86\1\x9d\0\xcf\0\xb5\0\x8f\f\xaf\0\x91\0\x83\0\xb7\0\x8b\0\x8f\6\xc2\0\x99\0\x80\2\xb2\0\xbe\0\x8f\t\x89\0\x8e\0\xc1\0\xb3\0\xa2\0\x8f\t\xaa\0\x9d\0\x80\3\x92\0\x9c\0\x89\0\x8f\6\x9c\0\x80\4\x86\0\xa0\0\x8f\6\xaa\0\xba\0\x80\4\xcf\0\x89\0\x8f\6\xc1\0\x80\3\xc4\0\xa2\0\x8f\27\xd5\0\x80\4\x92\0\x8d\1\x92\0\x80\a\x8d\0\x9c\0\x89\0\x8f\5\xca\0\x98\0\x80\2\x99\0\xb7\0\x8f\a\xa5\0\x80\3\x86\0\xb8\0\x8f\6\xae\0\x80\27\x92\0\x8e\0\x8f\f\xb5\0\xd4\0\x80\5\xd1\0\xb0\0\x8f\v\xc2\1\x89\0\x8f\b\xc0\0\x80\4\x85\0\xa0\0\x8f\27\xb0\0\x8d\0\x80\3\x86\0\xb7\0\x8f\6\xa0\0\x85\0\x80\4\x9d\0\x8f\a\xb8\0\x8d\0\x80\3\x92\0\x94\0\x8f\6\xa0\0\x85\0\x80\3\x8d\0\xc0\0\x8f\27\xb0\0\x80\17\x8d\0\xa4\0\x8b\0\x8f\6\xb4\0\x80\3\x93\0\xb0\0\x8f\6\xb3\0\x86\0\x80\2\x81\0\x84\0\x8b\0\x8f\5\x90\0\x93\0\x80\27\x91\0\xbe\0\x8f\f\xa7\0\x80\a\x91\0\xb3\0\x8f\26\xa4\0\x80\5\xae\0\x8f\27\xa4\0\x80\4\xcd\0\x89\0\x8f\6\xb8\0\x82\0\x80\4\xa7\0\x8f\a\xa5\0\x80\4\xbc\0\xd6\0\x8f\6\xbe\0\x91\0\x80\4\x86\0\x8f\27\x8b\0\xc3\0\x80\r\x9a\0\xc0\0\x8b\0\x8f\6\xbf\0\x98\0\x80\3\xbb\0\xb5\0\x8f\6\xb4\0\x81\0\x80\2\xb9\0\xa8\0\x8f\5\x88\0\x9b\0\x8d\0\x80\27\xcd\0\x8f\r\xb9\0\x80\a\xa9\0\xbf\0\x8f\26\xa7\0\x80\4\x81\0\xad\0\x8f\26\xa2\0\x91\0\x80\4\xab\0\x8f\6\x8a\0\xab\0\x81\0\x80\4\xb8\0\x8f\a\x82\0\x80\3\x99\0\x97\0\x8f\a\xbf\0\x9a\0\x80\4\x9d\0\x8f\27\x8a\0\xac\0\x9a\0\x80\n\x92\0\xcd\0\xa1\0\x8a\0\x8f\6\x8b\0\xa4\0\x81\0\x80\3\xa4\0\x8f\a\xaf\0\x80\2\x99\0\xa1\0\x8f\6\xa6\0\x86\0\x80\30\xc0\0\x8f\r\x9c\0\x92\0\x80\3\x81\0\x9a\0\xa4\0\xb0\0\x89\0\x8f\26\xc2\0\xcc\0\x80\2\x9a\0\xa7\0\xd0\0\x8f\26\xc1\0\x92\0\x80\3\xcc\0\x90\0\x8f\6\xa2\0\x9d\0\x80\5\xb8\0\x8f\a\x93\0\x80\1\x8d\0\xb9\0\xb7\0\x8b\0\x8f\b\x9e\0\x80\2\x8d\0\xd1\0\xbe\0\x8f\17\x88\0\x8f\b\xb8\0\x9d\0\xb6\0\x80\4\x81\0\xb6\0\x93\0\xbb\0\xb7\0\xc5\0\x8f\a\x9f\0\x9c\0\xb6\0\x80\4\xa4\0\x8f\a\xa7\0\x80\0\x81\0\x98\0\xd5\0\x8b\0\x8f\5\xd0\0\xa5\0\x80\30\xb2\0\xaa\0\x8f\r\xa2\0\x95\0\x9d\0\x91\0\x93\0\x9d\0\x9c\0\xa1\0\x8f\32\xac\0\x9e\0\x85\0\xce\0\xa1\0\x8f\27\x89\0\xae\0\x80\4\x83\0\x88\0\x8f\6\xbf\0\x8d\0\x80\5\xc0\0\x8f\a\x97\0\xbb\0\xa5\0\xc1\0\xaa\0\x8f\n\xc8\0\x9c\0\x83\0\xae\0\xc1\0\x90\0\x8f\16\xbe\0\xc1\0\x9b\0\xa0\0\x8f\b\xa0\0\xb8\0\x8e\0\xa5\0\x85\1\xa5\0\xb4\0\x97\0\xb0\0\x8f\t\x8a\0\x94\0\xb6\0\x80\5\xa5\0\x89\0\x8f\6\xa6\0\xbb\0\xc9\0\xd2\0\x8f\6\x9f\0\x9c\0\x92\0\x80\30\xbb\0\xa2\0\x8f\17\xc5\0\xa3\1\xb3\0\x8f\35\x89\0\xa2\0\x88\0\x8f\b\x89\0\xd0\0\x88\0\x8f\2\x9f\1\x8f\a\xb0\0\x98\0\x80\3\x99\0\x95\0\x8a\0\x8f\6\x9e\0\x80\6\x85\0\x8f\b\x88\0\xa2\0\x8f\16\xa0\0\xa2\0\x8f\b\x8a\0\xc1\0\xa4\0\xce\1\xa4\0\x83\0\xb9\0\x91\0\x8d\0\x92\0\x87\0\x8f\v\x89\0\xa2\2\x8f\v\x8a\0\x97\0\x9a\0\x80\6\xa9\0\xca\0\x8f\a\xa2\0\x9f\0\x8f\a\xb0\0\x82\0\x80\30\x8d\0\xad\0\x8f'\x9f\0\xa1\0\xd2\0\x8f\23\xd5\0\xbc\0\xb9\0\xc9\0\xc0\0\xab\0\xa5\0\xc1\0\x8f\a\xc1\0\x81\0\x80\3\x98\0\xc5\0\x8f\6\xa3\0\xa9\0\x80\6\x86\0\xa2\0\x8f#\xaa\0\x93\0\x80\b\x91\0\xbe\0\x8f\31\xa0\0\xc0\0\x86\0\x80\a\xb6\0\xbf\0\x8f\20\xa8\0\xbc\0\x80\31\x9a\0\xcb\0\x8f\6\x8b\0\x9f\0\x8f\25\xa3\0\x9b\0\xae\0\x9c\0\x8e\0\xc1\0\x8e\0\xab\0\xae\0\xd1\0\xcc\0\x85\0\xc5\0\x8f\21\xaa\0\x9d\0\x80\4\xb6\0\xbf\0\x8f\a\xc6\0\x80\4\xa5\0\x8f\a\xac\0\x99\0\x80\a\x94\0\x8f\"\xa2\0\xae\0\x81\0\x80\t\xc3\0\xb0\0\x8f\26\x8a\0\xd0\0\xa7\0\x99\0\x80\t\xd1\0\x8a\0\x8f\16\xd2\0\xd1\0\x81\0\x80\31\x9a\0\xd6\0\x8f\6\x97\0\xa5\0\xa2\0\x8f\23\x90\0\xa5\0\x92\0\x80\b\x81\0\xcd\0\xa2\0\x8f\17\xa8\0\xb9\0\x80\5\x99\0\xc7\0\x8f\6\x90\0\x9a\0\x80\4\xae\0\x8f\6\x8b\0\xa7\0\x80\b\x9a\0\xac\0\x8f\16\xa8\0\x90\0\x8f\17\xa2\0\xae\0\x81\0\x80\v\x91\0\xb1\0\x8f\25\x95\0\xb9\0\x81\0\x80\n\x8d\0\x97\0\x8f\r\xa8\0\xba\0\x80\33\x86\0\xbe\0\x8f\5\xa2\0\xa5\0\x81\0\xc6\0\xd2\0\x8f\20\x8b\0\x97\0\x9d\0\x92\0\x80\v\xc6\0\xd2\0\x8a\0\x8f\v\x8b\0\xd5\0\x9d\0\x81\0\x80\5\x92\0\xb8\0\x8f\5\x8b\0\xc9\0\x80\5\xb9\0\x8b\0\x8f\5\xb7\0\xb2\0\x80\t\xb2\0\xbe\0\x8f\v\x8b\0\xad\0\xc4\0\xa9\0\xb8\0\x8a\0\x8f\v\x8b\0\xa1\0\xcd\0\x8d\0\x80\r\xb6\0\x9b\0\xa8\0\x89\0\x8f\16\x89\0\xa0\0\xc7\0\x83\0\x9a\0\x80\r\xb6\0\xc0\0\x89\0\x8f\t\x8b\0\x94\0\x98\0\x81\0\x80\33\x81\0\xcf\0\x8a\0\x8f\4\x95\0\x92\0\x80\1\x93\0\xd5\0\x8b\0\x8f\f\xa0\0\xb7\0\xce\0\x8d\0\x80\16\x86\0\xab\0\xc2\0\x8f\b\xa0\0\xac\0\xce\0\x86\0\x80\b\xbc\0\xca\0\x8f\4\xab\0\x99\0\x80\5\x8d\0\x9c\0\x8f\3\x9f\0\xa1\0\x98\0\x80\v\x99\0\x9b\0\xa8\0\x8f\a\xa2\0\xd5\0\xa4\0\x8d\0\x80\1\x8d\0\xae\0\xbe\0\x89\0\x8f\a\x88\0\xb8\0\x9b\0\x99\0\x80\21\xb2\0\xa4\0\xb7\0\xb3\0\x8f\n\x88\0\xbe\0\xb4\0\x9d\0\x8d\0\x80\20\x92\0\xa4\0\xa6\0\x8f\6\xa0\0\xb7\0\xae\0\x8d\0\x80\36\x9a\0\xd5\0\x89\0\x8a\0\x89\0\xd0\0\x94\0\x91\0\x80\3\x8d\0\x98\0\xcf\0\xaa\0\x8b\0\x89\0\x8f\3\x89\1\x9f\0\x88\0\xb4\0\xcd\0\x9a\0\x80\21\x81\0\x9a\0\xa5\0\xcf\0\x96\0\xa3\0\x88\1\xbe\0\x8e\0\xce\0\xd1\0\x9a\0\x80\v\x98\0\xb4\0\xa8\0\x88\0\x94\0\x8c\0\x8d\0\x80\a\x99\0\xae\0\xbf\0\x88\0\xa6\0\xaf\0\x9a\0\x80\r\x81\0\xa9\0\x8c\0\x9c\0\xb8\0\xd0\0\x88\0\xaa\0\x94\0\x9b\0\xb9\0\xb2\0\x80\5\x86\0\x85\0\xc9\0\xad\0\xa8\0\x88\1\xbf\0\x94\0\xce\0\x85\0\x9a\0\x80\25\x99\0\xbc\0\x8c\0\xab\0\xad\0\xa6\0\x88\2\xaa\0\x95\0\xcf\0\xae\0\x85\0\x9a\0\x92\0\x80\24\xcc\0\xbd\0\xc0\0\xcb\0\x88\0\xc5\0\xac\0\xc9\0\x85\0\x9a\0\x80!\x81\0\xc4\0\xa5\0\xbb\0\xa9\0\x80\t\x91\0\xba\0\xa4\0\x94\2\xae\0\xd1\0\x93\0\x8d\0\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80\xfe\x80A"
)


Le problème venait en fait de l'image qui est loin d'être aussi simple qu'il n'y paraît. L'image en réalité n'est absolument pas monochrome ; l'inscription bénéficie en effet d'un lissage en niveaux de gris avec pas moins de 252 tons différents, qu'img2calc réduisait malgré tout à 87.

Afyu pour sa part avait signalé la miniature de Super Dupont ci-contre, donnant quant à elle un script de 34,4 Ko ne rentrant même pas sur une NumWorks :
Code: Select all
#palette for your image
#252 RGB-888 colors
palette = (
(0,67,116),(2,63,107),(2,54,99),(7,71,116),(7,71,107),(2,50,107),(0,63,99),(7,63,99),(0,63,90),(0,54,107),(7,80,124),(27,80,107),(7,84,133),(45,97,124),(7,76,116),(7,63,90),(0,54,99),(0,45,90),(0,35,81),(0,50,81),(2,80,116),(0,12,45),(7,54,81),(0,2,7),(0,31,64),(0,45,99),(0,54,116),(7,31,45),(0,12,27),(7,50,73),(7,12,27),(0,31,45),(0,45,73),(7,35,64),(0,7,7),(0,84,133),(2,4,45),(2,2,2),(27,50,73),(0,0,2),(7,12,7),(2,109,175),(2,7,2),(0,101,157),(0,0,18),(7,31,36),(7,2,7),(0,80,182),(0,0,0),(0,114,207),(0,2,27),(7,135,190),(0,50,149),(0,67,167),(0,80,149),(0,35,90),(27,118,175),(116,118,141),(107,151,175),(27,0,0),(149,155,167),(27,31,27),(116,76,73),(182,88,99),(157,84,107),(215,109,107),(0,21,73),(0,35,99),(0,84,207),(81,114,141),(141,122,133),(231,59,64),(239,80,73),(141,84,73),(255,54,45),(255,35,27),(239,105,99),(141,45,36),(255,84,64),(81,54,73),(107,45,36),(81,84,90),(215,76,73),(255,31,8),(223,63,45),(0,12,64),(247,67,45),(239,101,90),(239,41,36),(45,67,73),(255,67,55),(215,50,45),(174,80,73),(81,71,81),(174,50,45),(0,35,157),(7,101,149),(255,50,27),(45,50,45),(255,71,64),(207,114,81),(36,45,45),(0,0,7),(0,17,81),(157,105,81),(81,101,107),(73,41,45),(36,88,141),(141,76,45),(73,101,167),(124,84,81),(0,58,207),(90,88,99),(81,58,99),(64,54,64),(223,35,27),(247,8,2),(73,84,107),(116,67,45),(174,80,55),(45,54,64),(81,67,64),(141,105,81),(73,67,81),(107,88,107),(182,114,107),(64,63,64),(0,26,81),(90,21,18),(99,58,64),(81,63,55),(174,26,27),(45,31,27),(7,35,99),(207,7,2),(207,31,27),(190,12,7),(157,17,7),(215,26,18),(247,31,7),(174,26,18),(107,4,2),(157,22,18),(190,31,27),(133,17,18),(198,12,27),(207,35,27),(45,17,27),(99,101,107),(141,114,107),(174,4,2),(124,97,90),(149,4,2),(174,155,149),(116,12,7),(73,80,81),(223,0,0),(73,4,2),(174,114,81),(215,151,141),(215,183,175),(207,203,207),(215,211,207),(231,232,231),(255,247,240),(149,168,157),(190,172,149),(239,155,141),(124,12,7),(215,172,149),(223,232,240),(215,240,247),(207,216,223),(223,220,223),(239,236,240),(223,228,231),(141,131,116),(157,172,175),(239,220,223),(215,143,107),(207,199,190),(182,179,175),(190,187,190),(190,199,190),(174,172,175),(207,191,198),(124,135,141),(190,199,207),(255,255,255),(239,251,255),(0,26,73),(182,224,231),(157,155,149),(141,139,141),(141,143,149),(255,251,255),(36,4,7),(190,207,215),(166,168,157),(45,35,45),(223,224,231),(247,232,215),(27,31,45),(27,17,27),(107,109,116),(133,12,7),(116,118,124),(36,31,18),(0,17,64),(133,0,0),(174,183,190),(239,240,240),(247,247,247),(174,139,116),(149,151,141),(255,236,223),(239,240,247),(247,243,247),(239,187,175),(166,159,167),(239,151,116),(247,203,175),(73,151,182),(239,183,157),(255,216,190),(255,203,190),(239,203,190),(36,101,141),(255,172,133),(239,216,207),(190,135,99),(255,240,240),(124,139,149),(255,187,157),(182,187,198),(247,179,149),(223,155,116),(141,176,198),(27,151,207),(36,168,215),(7,0,0),(36,139,182),(7,109,149),(255,220,207),(239,172,141),(247,168,124),(215,155,107),(255,199,175),(255,199,149),(207,220,231),(182,135,90),(107,172,207),
)

#your image data
#75x100 RLE-8 pixels
image = (
b"\0\0\1\0\2\0\1\2\0\0\3\1\1\1\3\0\4\2\5\0\1\0\6\0\2\0\a\0\b\0\6\0\a\1\6\1\b\0\6\0\4\1\t\0\4\1\2\0\n\0\v\0\f\0\r\0\3\0\n\1\4\0\16\0\n\3\r\0\n\2\4\1\n\0\v\0\n\0\r\0\n\1\v\0\n\0\4\2\v\0\4\0\v\0\17\0\4\1\v\0\4\1\v\0\4\0\t\0\20\0\t\1\20\0\t\2\1\3\t\0\0\0\1\1\6\3\21\0\22\0\23\0\21\0\23\0\21\0\2\1\1\0\2\0\6\0\3\1\1\0\6\0\n\0\2\0\4\0\3\0\4\0\3\0\1\0\4\0\16\0\n\0\16\0\3\1\n\0\4\0\n\0\a\0\4\0\20\0\a\0\24\0\3\0\4\0\6\0\4\0\v\0\4\3\a\0\b\0\6\0\4\0\b\1\a\0\17\0\b\0\17\0\1\0\20\1\t\5\1\1\24\1\25\0\2\0\3\0\t\0\1\0\t\0\26\0\23\0\21\0\2\1\6\0\t\0\6\0\24\0\1\2\3\2\0\0\n\0\27\0\t\0\16\0\30\0\3\0\n\0\4\1\3\1\n\0\3\0\n\0\3\0\n\0\4\0\n\0\4\3\1\0\4\1\v\0\4\0\b\0\24\0\v\0\4\0\a\1\24\0\17\0\a\0\4\0\17\0\b\0\24\0\1\0\31\1\1\1\32\0\6\0\t\1\1\0\20\0\0\0\33\0\34\0\35\0\26\0\36\0\24\0\20\0\37\0 \0\23\0\0\0\20\0 \0\37\0\23\0\2\0\1\0\t\0\3\0\16\0\n\1\f\0!\0\"\0\n\1\26\0\a\0\4\1\6\0\3\0\n\0\3\1\16\0\24\0\4\0\16\0\3\2\n\0\v\0\4\0\a\0\4\0\24\0\17\0\b\1\a\0\4\2\17\0\4\0\17\0\4\0\17\1\4\0\t\0\31\0\t\2\1\0\6\0\1\1\24\0\0\0\22\0\37\0\0\0\25\0\36\0\37\0\24\0#\0\a\0\"\0$\0\21\0\0\0\30\0\27\0 \0\23\0\t\0\2\0\30\0\4\0\26\1\f\0\34\0\35\0!\0\26\0\33\1\n\1\4\0\3\0\16\0\n\1\4\0\n\1\4\0\n\0\4\1\n\2\3\0\n\0\4\1\n\0\4\3\v\0\4\0\16\0\a\0\17\0\4\0\17\0\24\0\t\0\31\0\t\1\1\1\t\0\0\1\1\0#\0\37\0\30\0\24\0\"\0\36\0\23\0\0\0\23\0\25\0\33\0\23\0\34\0\23\0\34\0\30\0\f\0 \0\33\0\30\0\27\0\33\0\36\0\16\0\26\0%\0!\0\34\1\36\0\26\0\f\2\n\0\f\0\r\0\n\0\f\0\n\0\v\0\24\0\3\0\24\0\n\0\26\0\35\0\n\1\26\0\35\0\17\1\35\1\26\0\35\1&\0\35\0\4\1\17\1\4\0\3\0\t\0\31\2\20\0\6\0\1\0\4\0\t\1\30\0\"\0\37\0'\0$\0#\0\6\0\27\0\34\0\30\0\37\0\33\1\34\0 \0\0\0\25\0\34\0\"\0$\0\27\0!\0\f\0\2\0\"\0\33\0\35\0(\1\4\0\f\0\2\0\26\2\5\0\35\0\33\0\4\0\23\0\35\0\17\0\v\0\23\0\0\0\4\0\26\0\"\0\37\0)\0\34\0*\0)\0\22\0\37\0+\0#\0\0\1!\0\b\0\4\0\17\1\1\0\t\1\20\0\31\0\21\0\1\0\0\0\6\0\20\1\t\1\34\0\27\0\23\0\3\0\30\0\25\0\26\0,\0\"\1\27\0\"\0\35\0\3\0\36\0\34\0-\0\26\0\34\0\36\0\4\0\36\0!\1\t\0\0\0\t\0\26\0\4\0.\0\0\0/\x000\0\23\x001\0\34\0\21\x001\0/\0\0\0\27\0\20\x001\0)\0/\x002\x000\0\f\x001\0\25\x011\0\32\0\0\x003\x001\x003\0+\0\30\0\17\1\v\0\5\0\21\0\20\0\31\0\20\1\t\0\23\1\30\0\21\0\t\0\0\0\25\0\34\0\37\0\0\0\23\0\34\0\37\0\"\0\34\0 \0\0\0\30\0 \0\23\0\35\x004\0\23\0\36\x005\x006\0\0\0\34\0\4\0\36\x007\x001\0/\0+\0 \x000\0\"\x001\0/\x000\0\32\x001\0\25\0\32\0)\x001\0\0\0\34\0\0\0)\08\09\0\33\0'\0\r\0:\0;\0\34\0<\0=\0>\0?\0@\0A\0?\0\37\0\4\1\2\0\21\0\20\0\31\0\t\0\6\0\30\0B\0\22\0C\0\22\0-\0\27\0 \0\23\0\33\0\23\0\30\0!\0\5\0\31\0\5\0\26\0\4\0\34\x004\x005\2/\0\25\0\31\0D\0/\0D\0\5\x000\x014\0/\1D\0\34\x000\0\34\08\0E\x000\0E\0F\0(\0@\0G\0H\0I\0\25\0E\0J\0K\0L\0\33\0M\0N\0O\0P\0N\0Q\0R\0K\0S\0T\0P\0\6\0\17\1\2\x007\0\t\2\30\0C\x005\x024\x002\0\25\0\22\0\23\0\30\x004\0\32\0\27\x005\0/\x005\1C\x000\0\30\0/\x005\x006\x005\x012\0\32\x005\1/\0U\x000\1E\0@\0?\0F\0-\0*\0V\0W\0\17\0V\0X\0Y\0Z\0[\0X\0V\0Q\0K\0H\0\\\0J\0]\0^\0S\0>\0\\\0H\0(\0\33\0W\0R\0 \0\23\0\4\0\17\1\1\0\31\0\t\0\0\0\34\x002\x004\x025\1_\x005\x004\0\34\0\27\x005\0D\0\25\1/\x004\x005\0D\0\25\x000\0C\x005\2`\0\v\0(\09\0@\0?\09\0\"\x000\0H\0K\0J\0a\0\\\0\17\0J\0^\0\37\0N\0M\0b\0Z\0\26\0>\0c\0d\0J\0e\0\34\0T\0\\\0H\0S\0A\0L\0M\x000\0=\0N\0P\0\31\0\4\0 \0\17\0\v\0\t\0\31\0\t\x010\0'\0\32\0_\x004\0_\x005\x014\0/\0C\x000\x002\0D\0/\0f\0g\0/\x005\0/\1'\x000\09\0?\0[\0a\0A\0Y\0a\0K\0a\1h\0\33\0Z\0R\0i\0X\0J\0Q\0c\0P\0e\0H\0j\0P\0N\0k\0J\0\\\0T\0R\x000\0%\0H\0\\\0R\0A\0S\0N\0b\0'\0l\0N\0\35\0\23\0\35\0\17\2\1\0\20\0\t\0\22\x000\1$\0C\0_\0m\0n\0?\0n\0_\0o\0$\x000\x007\0D\0\n\0,\0p\0@\0R\0?\0q\0\34\0N\0K\0Z\0V\0>\0b\0J\0>\0Q\0K\0c\0\r\0c\0l\x000\0R\0Z\0I\0Z\0b\0P\0W\0r\0\\\0K\0Z\0V\0e\0s\0R\x004\0M\0H\0R\0^\0O\0S\0T\0\27\1N\0T\0\b\1\17\1\26\0\17\0\t\0\31\0\t\0\23\0%\x000\1\4\0d\0a\0S\0a\0\\\0\25\0m\x010\0(\0A\0R\0Y\0c\0S\0a\0t\0c\0u\0a\0G\0D\0B\x000\0v\0N\0\5\0\35\0Z\0w\0r\0N\0q\0\23\0Z\0\\\1c\0#\0M\0Z\0\17\0[\0S\0\\\0\4\0\"\0R\0a\0R\0N\0n\0H\0M\0\36\0L\0n\0\30\0&\0h\0x\0\6\0\a\0\17\1\23\0\4\0\2\0\20\0\21\0\0\0\25\x000\0=\0W\0S\1N\0A\0y\0e\0N\1\"\0&\0J\0s\0Y\0c\0R\0Q\0[\0a\0z\0X\0R\0k\0u\x000\0M\0N\09\0c\1\37\0P\0Z\0`\0@\0Z\0&\0M\0J\0E\0J\0^\0b\0N\0I\0\1\0#\0\6\0{\0R\0a\0|\0 \0n\0&\0\17\0\4\0\26\0\4\0\33\0\27\0\21\0\4\0\17\3\4\0\2\0\20\0\31\0\0\0\t\0'\0I\0J\0K\0}\0\v\0\27\x000\0~\0J\0R\0%\0Y\0c\0^\0Y\0N\0I\0\0V\0[\0Q\0J\0S\0a\0d\0\27\0I\0J\0S\0H\0e\x000\0\\\0c\0}\0K\0@\0\x80\0\x81\0R\0a\0R\0 \0y\0A\0 \0#\0\4\0\f\0\0\0 \0\37\2\"\0\23\0\"\0,\0\"\1\27\0\34\0\a\2\17\0\a\0\26\0\4\0\2\0\31\x007\0\31\0\32\0 \0T\0S\0N\0/\0_\x000\1\x82\0Z\0R\0%\0y\0c\0^\0r\0N\09\0@\0Z\0y\0r\0a\0R\09\0!\0\27\0[\0c\0N\0R\0\30\0'\0H\0K\0J\0I\0j\0t\0\x83\0v\0I\0P\0\x84\0\30\0\21\0+\0k\0\4\0\f\0\33\0'\0\"\0,\0(\0\34\0\26\0\33\0\35\0\26\0\a\0\16\0\4\0\a\3\26\0\b\0\4\0\1\0\t\1\22\1\30\0\\\0K\0S\0?\0D\0\x85\x000\0y\0Z\0\\\x000\0y\0Z\0I\0j\0c\0K\1}\0\"\0M\0J\0m\0o\0C\0=\0J\0\\\0u\0V\0W\0\v\0@\0I\0n\0P\0\x86\0\x87\1\x88\0\x89\0\x8a\0\x8b\0\x8c\0\x80\0\26\0#\0+\0\f\0\2\0\a\1\n\3\f\0\n\0\3\0\16\1\4\1\2\0\4\0\a\0\4\0\17\0\4\0\t\1\0\0\37\0U\x004\0\35\0W\0S\1W\0m\0\27\0j\0N\0R\0%\0>\0c\0P\0O\0J\0K\0?\0\34\x000\0\\\0J\0@\0^\0R\0Y\0L\0l\0\x8d\0I\0l\0P\0M\0\x8e\0\x86\0\x8a\0\x8f\2\x87\1\x8f\1s\0\x8a\0\x88\0\x80\0\23\x006\0`\0\f\2\n\0\3\0\4\0\3\3\4\4\26\0\2\0\17\0\4\0\2\0\21\0\0\0 \x000\0/\x004\0=\0d\0c\0t\0Z\0n\0x\0J\0A\0\25\0M\0N\0\x82\0j\0J\0@\0\x90\0\x8d\0,\0R\0J\0Z\1I\0j\0n\0M\0\x86\0\x88\0\x89\0\x8a\1s\0\x91\0\x87\4\x8f\4\x92\0\x8b\0\x88\0\x93\0\0\0+\0\f\0\16\0\f\0\3\0\16\2\3\2\4\3\26\0\a\0\26\0\4\0\2\0\31\0\32\0\21\x000\x007\0D\0$\0\"\0\x94\0H\0t\0Z\0\x95\0K\0?\x005\0I\0J\0~\0P\0c\0>\0\x96\0\x8a\0j\0\x97\0I\0>\0\x81\0\x90\0\x8a\0\x86\0\x91\0\x87\1\x92\0\x8f\0\x87\0\x92\0\x87\0\x92\1\x87\a\x8f\1[\0\x8b\0\x98\0\22\0+\0\f\0\16\0\n\0\16\1\n\0\3\1\16\0\3\0\4\1\a\0\5\0\a\0\17\1\2\0\20\0\t\0\0\0\27\x000\0/\0_\x000\1i\0J\0S\0\x99\0J\0t\0}\0X\0Z\0Y\0I\0A\0j\0\x88\1\x8f\0\x9a\0\x8e\0\x86\0\x8a\0\x86\0\x8a\0\x92\0\x91\0\x86\0\x91\0\x86\2\x91\0\x8a\1\x92\0\x87\0\x92\1\x87\2\x92\0\x87\2\x8f\0\x87\0\x8b\0\x86\0\36\0#\0`\0\16\2\3\4\4\0\5\0\4\1\a\1\4\0\2\0\31\1\0\0\22\0%\0?\0m\0\26\0-\0@\0K\0J\0\x9b\0Q\0Z\0S\0J\0@\0\x80\0\x81\0P\0\x89\0\x87\0\x83\0\x87\0s\0\x8a\0\x87\0\x88\0\x96\2\x88\0\x87\0[\0^\0[\1J\0\x86\1\x9c\0\x86\0\x8a\0s\1\x87\1\x92\1\x8a\0\x92\0\x87\1\x8f\0s\0t\0\x9d\0#\0`\0\16\1\3\0\16\1\3\1\4\4\a\0\16\0\2\0\31\0\20\0\t\0\21\0\37\0Z\0S\0H\0W\0S\1d\0-\0\x80\0>\0@\0n\0P\0\x86\0\x96\0\x88\0\x8f\0\x83\0\x8f\1\x88\0\x9c\0\x96\0\x92\0\x9e\0\x9f\0\xa0\1\xa1\0\xa2\1\xa3\0\xa4\0\xa5\0\xa6\0\x9f\0\xa7\0R\0\x86\0\x9c\0\x86\0\x92\0s\0\x92\0\x87\0s\0\x87\0\x92\0\x87\0\x91\0\x8f\0\x92\0\x8b\0\x9d\0\24\0`\0\n\0\16\3\5\0\3\1\4\1\a\0\4\0\v\0C\0\21\0\20\1\32\0\21\0d\0a\0K\0S\0a\0A\0Y\0\xa8\0\x88\0\xa8\0\x9a\0\x98\0\x96\0\x83\0\x8c\0\x83\0\x88\0\x8f\0\x88\0\x96\0\x91\0\x9e\0\xa9\0\xa2\0\xaa\0\xab\0\xac\0\xad\0\xae\1\xaf\0\xa2\0\xb0\0Y\0\xab\1\xb1\0\xaa\0\xb2\0\x9f\0[\0\x9c\1[\0s\3\x92\0\x87\0\x92\1s\0\x8b\0\x8d\0#\0+\0\16\0\f\0\16\1\3\0\5\0\3\0\4\2\a\0\4\0\23\x007\0\21\1\20\0\31\0\23\0u\0n\0I\0u\0\37\0\x8d\0\x8a\0\x89\0\x8c\0\x88\0\x83\0\x8c\1\x83\0\x8f\0\x88\0\x96\1\xb3\0\xa2\0\xab\0\xad\0\xa2\0\xb4\0\xa1\0\xa3\0\xa2\0\xb4\0\xb5\0\xb6\0\xb7\0\xb8\0\xa3\0\xb6\0\xb5\0\xb9\0\xba\0\xbb\0\xbc\0\xbd\0\xa0\0R\0\x9c\0\x86\0X\0\x87\0s\2\x92\3S\0\x9d\x006\0\f\0\16\1\3\0\16\0\n\0\3\0\4\2\2\0\16\0\26\0\21\1\31\0\21\0\20\0\31\x007\0\xbe\x004\0$\0\x8d\0\x8f\0\x89\1\x83\1\x8e\0\x8c\0\x83\1\x96\0\x9c\0\x9e\0\xa1\0\xbf\0\xa1\0\xb4\0\xa1\1\xa2\0\xaf\0\xb5\0\xc0\0\xc1\0\xc0\0\xb5\0\xc2\0\x94\0e\x000\1~\0\xa2\0\xc1\0F\0\xaf\0\xc3\0\xbd\0\xa9\0\x8a\0\x9c\0s\4\x92\1\x87\0s\0\x8b\0\xc4\0+\0\f\0\16\0\3\0\0\0\16\2\4\3\23\0C\0\21\0\20\0\31\0\20\1\t\0#\x007\0\x8d\0\x88\0\x89\2\x83\0\x8e\0\x8c\1\x83\0\x96\1\xa9\0\xc5\1\xb6\0\xb4\0\xa1\0\xb4\0\xad\0\xa3\0\xc6\0~\0b\0\xc7\0(\x000\6=\0\xa1\0\xb6\0F\0\xc1\0\xc8\0\xbd\0\xb2\0R\0\x9c\0s\0X\0s\3\x92\0\x87\0X\0t\0\33\0+\0\16\0\f\0\16\0\n\0\3\0\16\1\4\1\16\0\23\0\22\0\0\21\0\31\0\20\0\31\0\t\0\32\0\xc4\0\x88\0\x89\0M\0\x89\2\x8e\0\x83\0\x8c\0\x96\0\x8f\0\xb7\0\xbf\0\xb5\0\xb6\0\xb4\0\xa1\0\xb7\0\xc9\0\xaf\0\xb0\0\xca\1\xcb\0\36\0\xcb\1\xca\1=\0\"\x000\2'\0\xcc\0\xb8\0\xc0\0F\0\xad\0\xbd\1\xa7\0\x9c\0\x8a\0s\2\x92\0s\0\x92\0\x87\0X\0\x96\x007\0+\0\f\0\16\1\3\1\5\0\3\0\5\0\16\0\22\1\1\22\1\31\0\0\0$\0\x96\0\x8e\0\xcd\0\x89\1\x83\0\x8c\1\x88\0\x96\0\\\0\xc5\0\xbb\0\xb5\0\xb7\0\xb4\0\xb7\0\xb4\0\xc9\0\xad\0y\0(\0\xca\0{\0\xca\0'\x000\0.\0\xca\1\27\x000\6\xb5\0\xc1\0\xc6\0\xc3\0\xaf\0\xbd\0\xa0\0\x9c\0\x8b\0X\0s\2\x92\0s\0\x87\0S\0\xa8\0#\x006\0\16\0#\0\16\0#\0\3\1\4\0\v\0\22\0\30\0\22\0\0\22\1\32\0\21\0\x8d\0\x88\0\x90\0\x89\3\x8c\0\x83\0\x98\0l\0\xbb\0\xb7\0\xa6\0\xb7\2\xb4\0\xad\0\xaf\0~\0(\0b\0=\0'\x000\1\xcb\0r\0x\0(\0'\x000\3%\0<\0\xb6\0\xaf\0\xce\0\xa1\0\xa4\0\xa3\1\xbd\0\xb9\0\x9c\0\x8b\0s\0X\0s\2\x92\0[\0\x8b\0\xca\0+\0\16\1\f\0\n\1\16\0\3\0\16\x007\0\0\22\1\0\21\1\xcf\0\x8c\0\x90\1\x89\3\x8e\0\x98\0l\0\xb7\0\xb5\0\xc6\0\xb4\1\xb5\0\xb4\0\xa1\0\xa2\0\x94\0e\0\xc7\0.\x000\0'\0\xca\0]\0u\0r\0.\0'\x010\4\x94\0\xbc\1\xc2\0\xaa\0\xae\0\xa3\1\xaf\0\xbd\0\xa0\0\x9c\0S\0X\0s\3\x87\0K\0\x96\0\32\0`\0#\0\16\0\n\0\0\0\f\0\0\0\3\0\22\0\21\0 \0\22\1\32\0\xd0\0\xd1\0\x89\0\x90\0\x89\3\x8c\0\x98\0\x96\0\xb5\0\xd2\0\xc6\0\xa6\0\xb5\1\xb4\2\xc0\0{\0r\0.\1\xc7\0p\0\xcc\0]\0(\x000\6=\0\xc2\0\xb5\0\xd3\0\xbc\0\xa0\0\xa2\0\xd4\0\xa3\2\xae\0\xbd\0A\0\x9c\0X\0s\1X\0s\2S\0\x93\0)\0\f\0#\0\3\1\n\0\0\0\16\0\t\0\21\0\x007\0\21\0\31\0\xc4\0\x96\0\xcd\1\xa8\0\x90\0\x89\2\x98\0\xd5\0\xb1\0\xd6\0\xc6\0\xb5\0\xb7\0\xb6\1\xb4\0\xb6\0p\0u\0\xca\0\xc7\0]\0|\0\xcc\0r\0\27\x000\6=\0\xce\0\x94\0(\0*\09\0\xa0\0\xad\0\xd4\0\xae\0\xd7\0\xae\2\xbc\0R\0t\0X\1s\1X\0s\0X\0\x96\0\t\0`\0\f\2\n\0\16\0\n\0\2\0\t\0\22\1\31\0\30\0\xa8\0\x89\0\xcd\2\x8e\0\x90\0\x89\0\xd1\0I\0\xb7\0\xb0\0\xc6\0\xb5\2\xb7\0\xb4\0\xc6\0\x94\0u\0{\0x\0]\0p\1q\0%\x000\a%\x000\1(\0'\0%\0\xbb\0\xbc\0\xc3\1\xd3\0\xae\1\xa3\0\xbd\0\xa3\0\x9c\0\x8b\0X\1s\1X\0s\0S\0\xc7\0/\0\f\0#\0\f\0\n\0\16\0\f\0\2\0\31\x007\0\22\x007\0\xcb\0\x98\0\xcd\0\x90\0\xcd\0\x89\0\x90\0\xcd\0\x98\0\x89\0\xa5\1\xd5\0\xa5\0\xc6\1\xb7\0\xa2\0\xc6\0{\0Y\0q\0x\0{\1]\0r\0.\x000\6'\1.\0\xc1\0\xb6\0\xb5\0\xc1\0p\0\xa1\0\xd8\0\xa3\0\xc8\0\xa3\0\xd9\0\xbc\0\xd9\0\xa3\0\xbd\0\xa7\0\x9c\0X\2s\1\x8a\0K\0\x89\x004\0`\0\f\1#\0\3\0\16\0\23\x007\0\22\0\21\0\30\0\x9d\0\x98\0\xcd\1\x90\1\x89\1\xd1\0\x95\0\xd2\0\xb0\0\xa5\0\xc6\1\xa6\0\xa2\0\xb0\0e\0=\0.\1\36\0.\0(\0\36\x000\6\xca\0]\0r\0%\0Q\0\xbc\09\x000\0\xa1\0\xd6\0\xc0\0\xa2\0\xa1\0\xac\0\xad\0\xb5\0\xb6\0\xd3\0\xc3\0\xd8\1s\0t\0G\0X\4t\0!\0)\0\f\2#\0\f\0\23\0\0\22\0\20\0\37\0\x8d\0\xcd\2\x90\2\xd1\0\xcd\0\xa5\1\xc6\0\xd6\0\xc6\1\xb4\0\xb0\0'\x000\2'\x000\6,\0b\0\x95\0\x99\1\xda\0\xa9\0%\0(\0\xd4\0\xd3\0(\0\xc4\0|\0p\0\xca\0=\0r\0\xce\0\xa2\0\xb5\0\xc2\0\xae\0\xd9\0\xbd\0\xa7\0\x9c\0X\5K\0\x80\0+\0\f\x006\0\n\0\f\1\22\1\21\0\t\0\xcf\0\x98\0\xcd\1\x90\1\x89\0\x90\0\x8d\0z\0\xa5\0\xc1\0\xd5\0\xc6\2\xb5\0y\x000\v\x84\0\x9f\0\x99\0\x95\0\xa6\0z\0\xcf\x000\1\xcc\0\xbc\0\xdb\0\xcf\0Y\0\xb8\0\27\0f\0.\x000\0\x94\0\xbc\0\xad\0\xc1\0\xbc\0\xd8\0\xd3\0\x8b\0S\0X\1s\0X\0s\0K\0\x96\0#\0+\0\f\1#\0\f\0\23\0\xbe\0\22\1\x9d\0\x98\0\xa8\2\xcd\2\x98\0\xc1\0\xa5\0\xb0\0\xa5\0\xc6\0\xd6\0\xb0\2\33\0-\1\"\2%\0(\2b\0\xca\0\"\0(\0I\0j\x000\0(\0\"\0~\0\x84\0\x95\0\xbc\1\x95\0j\0\xb9\0%\0\36\0\27\x000\0\xa2\0\xd4\0Q\0\xc2\0\xbc\0\xd4\0\xbc\0L\0t\0K\0X\2s\0X\0t\0\2\0)\x006\0\f\0#\0\f\0\22\0\xbe\1\25\0\x8d\0\x89\0\xa8\1\x9a\0\xcd\0\xa8\0\xd1\0M\0\xa5\0\xd6\0\xa5\1\xd6\0\xb0\0\xcc\1i\0\4\0\v\1\n\0\6\0\v\0\x9b\0)\0=\0l\0\xd5\0\xb4\0\x95\0P\0\xdc\0\x9e\0\x93\0}\0\xc6\0\xd6\0\xdd\0\x95\0\xc0\0\xbc\0\x95\0\xa0\0r\0\27\x000\0*\0\xa2\0\xa1\0!\0{\0\xbc\0\xc8\0\xac\0\xd8\0\xa0\0\x9c\0t\1S\0K\0X\1S\0j\0)\x006\0`\0#\0\f\0\23\0\xbe\x007\0\25\0\xa8\0\xcd\0\x90\0\xcd\0\xa8\0\xcd\0\x90\0\xd1\0I\0\xa5\0\xb0\3\xce\0\xcc\0\xce\0Y\0\b\0\17\1 \0\x97\0\xa9\0\xde\0)\0\xcb\0R\0\xdf\0\xda\0}\0\\\0\xe0\0\x9e\0\x93\0}\0\xa7\0\xe1\0\xbc\0\x9e\0~\0\xaf\0\xe2\0\xb5\x000\0%\0\36\0\xa3\0\xc0\0$\x000\0\xc2\0\xaf\0\xa1\1\xa3\0\xd3\0\xa0\0A\0R\0s\0\x9c\1\x8b\0a\0\x80\x006\0`\x006\0\f\0#\0\35\0\x007\0\36\0\xd1\0\xa8\0\xcd\0\x90\0\xcd\0\x90\0\xcd\0\xd1\0\xce\0\xa5\0\xd6\1\xc6\0\xd6\2\xba\0\b\0\v\0\b\0\34\0\xb0\0\xe0\0\xa7\0\xe3\x003\0\4\0M\0\xe4\0\xe5\0\xa9\0\x9e\0W\0\x80\0b\0\xe6\0\xdf\0\xe7\0\xe4\0\x9d\0\xd2\0\xae\0\x94\0~\x000\0e\0\xad\0p\0'\0Y\0\xa0\0\xad\0\xb2\0\xe5\0\xa2\0\xe2\0\xe5\0\xc3\0\xbc\0\xc3\0\xd4\0\xe2\0A\0\x8a\0t\0\xd1\x006\0+\0#\x006\0`\0\22\2\xc4\0\xcd\0\x9a\0\xa8\0\x90\2\xd1\0\xcd\0\xd6\0\xa5\0\xd6\2\xc6\1\xb4\0\xe8\0\24\x003\0\17\0\x99\0\xe9\0\xa9\0\xe1\0\xde\0+\1O\0L\0\xa9\0\xc4\0R\0\xe2\0\x9f\0\xdc\0v\0j\0\xda\0d\x000\0\x99\0\xbc\0\xcb\x000\0x\0\xea\0j\0\27\0\xc0\0\xa0\0\x95\0~\0\35\0\4\0\v\0\4\1\v\0u\0i\0\xc1\0\xd2\0\xd9\0\xd4\0\xa7\0\x89\0U\0/\0+\0\f\1\23\0\22\x007\0\xc4\0\x98\0\xa8\3\x9a\0\xcd\0\x90\0\xa5\0\xd6\2\xa5\0\xc6\0\xa6\0\xb4\0\xba\0#\0\37\0\xa6\0\xd4\0\xe2\0\xc8\0\xd4\0\xb5\x006\0#\0i\0\xdc\0}\0(\0I\0\xe1\0\xdc\0\xa8\0\xcb\0\xc7\0\xeb\0\xec\0\xcb\0n\0\xad\0=\0-\0\xed\0\x84\0\"\0\xba\0\x94\0 \0\22\0+\0)\x003\0\xee\0\xef\0\xee\x003\0)\0`\0\0\0\a\0x\0\xba\0\xa2\0\xd4\0\xb1\0\16\0C\x006\0`\0\22\1\30\0\xc4\0\xcd\0\xa8\0\x9a\0\xa8\1\xcd\0\x98\0M\0\xe8\0\xb0\0\xd6\0\xa5\0\xd6\0\xc6\0\xa6\0\xb4\0\xe3\0\b\0\x9b\0\xe0\0\xe5\2\xd4\0\xa0\0C\0\t\0\4\0\xa7\0v\0-\0\36\0\xf0\0;\0'\0\34\x000\0>\0z\0\x94\0\xbc\0\xd6\0\27\0m\0\"\0\37\0\v\0\37\0\6\0\xee\0\xef\x003\0\xee\0\xf1\0\xf2\0#\0\xf2\0\xf1\0\xee\0\xef\0\xee\x003\08\0\0\0\33\0Q\0\xe5\0\xbc\0<\0C\0\32\0\30\0\22\0\30\0\x9d\0\xcd\0\x9a\0\xa8\0\x90\0\xcd\0\xa8\0\xd1\0v\0\xa5\0\xd6\3\xb5\1\xc6\0\r\0\37\0z\0\xe4\0\xa7\0\xda\0\xf3\0\xad\0\xce\0\xc1\0U\1}\0\xd5\0%\0\x80\0I\0j\0h\0\\\0I\0\x84\0\xcf\0\xae\0\xbc\0(\0\f\0-\0\37\0\26\1\xee\0\xef\x003\0#\0\23\0\34\0'\0\36\0\x9b\0b\x000\0\37\0\r\0\xf1\0\xee\08\0\xf1\0\xee\0\a\0,\0\x95\0\xbc\0\xc3\0E\0\22\1\30\0\x9d\0\xcd\1\xa8\0\xcd\1\xa8\0\xd1\0I\0\xa5\0\xc1\0\xd6\0\xc0\0\xc6\1\xc0\0\xce\0\17\0\37\0P\0\xb3\0\xf4\0\xe9\0\xe1\0\xb0\0\xb1\0\xbb\0p\0\34\0,\0\xb4\0\xe2\0\x9d\0M\0l\0w\0I\0j\1\xad\0\xbc\0\xcf\0\35\0\v\0\36\0&\0k\0\xef\0\xf2\0\30\0\33\x000\0\xc4\0\x81\0j\0y\0\xc0\0\xb9\0\xb6\0\xcf\x000\1\v\0\xee\x003\1\xf1\1 \0(\0\xa0\0\xbc\0\22\0\xbe\0$\0\xc4\0\xcd\0\xa8\0\x8d\0\xa8\0\xcd\0\x90\0\xd1\0l\0\xa5\0\xc1\0\xd6\1\xc6\0\xd6\0\xb0\0\xce\0\17\0\30\0v\0\x9e\0A\0\xe4\0\x99\0\xb1\0\xaa\09\0z\0\xa0\0\x95\0Q\0\xdd\0\x9e\0\xc2\0\xa0\0\xa6\0h\0%\0\xb2\0\xbc\0=\0'\0\26\0\30\0\5\0)\1\37\0.\0|\0\xcc\0\xb3\0\xa9\0\xda\0\xdd\0\xa9\0\xd5\0j\0\xea\0\xbc\0\xc2\0%\x000\0\34\0\xe3\0\xf1\2\xee\0\n\0\34\0F\0\30\0\xbe\0\xd0\0\x9d\0\x98\0\x9a\0\xa8\1\xcd\0\x90\0\x98\0v\0\xa5\0\xc2\0\xd6\0\xa5\1\xc2\0\xb0\0\xcc\0\17\0 \0n\0\x9e\0l\0h\0\xdb\0\xc8\0\xc3\0\xe8\0\xf0\0\xdc\0\xeb\0\xb4\0\x95\0\xe4\0\xf3\0\xbc\1\xe9\0n\0\xa3\0b\x000\0!\0Y\0x\0\v\0\r\0{\0j\0\xb1\0<\0\xec\0\xf3\0\xd7\0\xb2\0\xe2\0\xd7\0\xbc\0\xa0\0\xf0\0\xc2\0\xbc\0\xa3\0=\x000\1\35\08\0\xf1\08\0\xee\x003\0\37\0\30\0B\0\xbe\0\x9d\0\x98\0\xa8\0\x90\0\xcd\1\xa8\0\xd1\0M\0\xa5\0\xc0\0\xd6\0\xc6\0\xc0\0\xc2\0\x95\0\xcc\0\17\0\37\0Y\0\x9e\0l\0v\0\xac\0\xd8\0\xbc\0Q\0\x9d\0\xdc\0d\0\xf5\0\xa6\0z\0h\0\x80\0d\0v\0\x95\0y\0'\0\34\0}\0\xe1\1\xdd\0\xf4\0F\0\xea\0\xbf\0I\0\xe4\0\xf3\0\xe7\0\xb2\0\xf3\0\xe2\0\xb2\0\xa4\0\xdf\0\x80\0|\0\xbc\0\xae\0%\x000\1(\0\r\08\0\xf1\0\xde\0\xf1\0\30\0B\0\0\xc4\0\x98\0\xcd\0\x90\0\xa8\0\xcd\1\x8d\0M\0\xd6\0\xc1\0\xd6\0\xa5\0\xc0\0\xb0\1\xce\0\v\0 \0\xc7\0I\0h\0>\0\xd8\1\xc3\0{\0l\0\xdc\2\xf5\0}\0z\0\x95\x000\0(\1%\0'\0\xcf\0\xf6\0\xdc\0\xe4\0\xe0\0\xdb\0\xc2\0\xbc\0\xce\0\\\0\xe4\0\xe1\0\xb2\0\xe7\1\xd7\0\xf3\0\xa4\0\xd7\0\xf7\0\x80\0\xcc\0\xc3\0\xc0\x000\2\xf0\0\xe3\0\xf1\1\xde\0\22\0\xbe\0C\0\xc4\0\xcd\2\xa8\0\xcd\1\x98\0\xcd\0\xd6\0\xa5\0\xd6\1\xc0\0\xc1\0\xce\0\x95\0Y\0\33\0?\0P\0v\0F\0\xd8\0\xbc\1\x94\0w\0\xdc\1\xda\0\xdc\1\xe9\0\xbc\0\xd6\x000\2(\0d\0\xdc\0\xec\0\xeb\0\x9f\0<\0\xaa\0\xae\0\x82\0d\0\xf4\0\xdf\0\xf3\0\xd7\0\xae\0\xd7\0\xe7\0\xa4\0\xe7\0\xf3\0\xf5\0;\0\xb9\0\xbc\0.\x000\3\r\0\xf1\0\xde\0\5\0\30\0\31\0(\0\xd1\0\xcd\1\xa8\0\xcd\2\x98\0\xb0\0\xa5\0\xd6\0\xc0\0\xa5\0\xc1\0\xc2\0\xcc\0x\0h\0I\0P\0j\0\xc2\0\xbd\0\xe7\0\xbc\0\xce\0l\0\xb3\0\xec\0\xdd\0\xf7\0\xa7\0\xda\1\xf7\0\xa9\0\x95\0\xd5\0\xf3\1\xa1\0\xe5\0\xdd\0\xdb\0\xac\0\xbd\0\xea\0l\0\xdc\0\xb3\0\xeb\0\xdd\0\xf3\0\xd7\1\xe7\0\xa4\1\xc9\0\xf8\0l\0O\0\xbc\0\xc2\x000\4\r\0\xde\0\22\1\31\0\25\0\x8d\0\x89\0\x90\0\xa8\0\xcd\0\x90\1\xd1\0I\0\xa5\0\xc1\0\xc6\1\xb1\0i\0y\0}\0P\0O\0P\0\xcb\0\xc0\0\xd8\0\xe7\0\xbc\0\xc1\0l\0\xe6\0\xb3\0\xf4\0\xda\0\xe5\0\xf3\0\xdc\0\xb3\0\xf8\0\xe0\0\xf3\0\xe1\0\xb4\0\xad\0\xe5\0\xa9\0\xbb\0\xc3\0\xd8\09\0\x9e\0\xf6\0d\0\xdc\0\xf4\0\xe1\0\xd7\0\xf3\0\xd7\2\xc9\0\xe4\0\x9e\0\x84\0\xd3\0\xc3\0\"\x000\4\r\0\22\0\0\31\0\xd0\0\x8d\0\x89\0\xcd\0\x90\0\xa8\1\x90\0\xd1\0M\0\xa5\0\xc1\0\xc0\0\xa5\0x\0\xcf\0\xf4\0\xa4\0=\0.\0j\0\xc7\0\xdb\0\xaa\0\xd4\0\xc3\0<\0P\0\xb3\1\xa9\0\x9f\0\xe5\0\xdd\0\xb3\1\xa7\0\xf4\0\xdf\0\xa9\0\xda\0\xb4\0\xda\0\xb5\0\xaa\0\xbc\0\xc8\0I\0d\0\xb3\0d\0\xb3\0\xe4\0\xe1\0\xf3\2\xc9\0\xd7\0\xf3\0\xeb\0A\0\xc4\0\xc0\0\xbc\0p\x000\5\22\0\x007\1\x9d\0\x89\0\x90\2\xa8\1\xcd\0\xd1\0\xb0\0\xb1\0\xb8\0e\0\x80\0\xe9\0\xd7\0\xf3\0\xd5\x000\0.\0r\0\xad\0\xd9\0\xd3\0\xa4\0\xab\0\x97\0\x9e\0\xd5\0\x9f\0\xec\0\xdd\0\xec\0h\0\xb3\0\xec\0\xa9\1\xda\0\xe5\0\xdd\0\x9f\0\xc5\0\xc3\0\xd4\0\xc5\0\x95\0\xb3\0A\0\xb3\0d\0\xa7\0\xda\0\xe0\0\xc9\0\xf3\1\xd7\0\xf3\0\xda\0\xec\0\x80\0]\0\xbc\0\xc2\x000\5\30\0\22\1\31\0\xcb\0\x98\0\x90\0\xa8\1\xcd\0\xa8\0\xcd\0\xd1\0h\0\xd2\0Y\0(\0\xf4\0\xe5\0\xb2\0\xf5\0\xe4\0y\x000\0(\0\xa3\0\xbc\0\xd3\0\xd9\0\xbc\0<\0v\0}\0\xb3\0\xec\0\xdd\0h\0I\0\xe6\0\xb3\0\xa9\1\xb4\0\xda\0\xe9\0\xb5\0\xd9\0\xc3\0\xd4\0\xea\0\xd5\0\xdc\1\xf6\0\xec\0\xa7\0\xdf\0\xf3\1\xe5\0\xd7\1\xf3\0\xf7\0\xdc\0>\0\36\0\xc3\0\xb5\x000\4%\0\22\x007\1\31\0\37\0\x8d\0\x98\0\xa8\2\x90\1\x98\0\x9a\0u\0\"\0\x9e\0\xe1\0\xb2\0\xdf\0\xf5\0\xf4\0\xb3\0\xc4\x000\0\xa1\0\xbc\0\xd8\0\xd3\0\xc3\0\xd8\0|\0I\0\xe6\0\xb3\0\xdf\0n\0P\0z\0\xd5\0\xa9\0\xb3\1\x9f\0\xa6\0\xaa\0\xbc\0\xd4\0\xd8\0\xea\0\xd5\0\xe4\0\xa7\0\xdc\0\xa7\0\xf4\0\xe9\0\xdd\0\xe1\1\xe5\0\xf3\1\xf7\0\xdc\0I\0.\0\xb9\0\xa2\x000\4%\0\22\x017\1\xbe\0\x9d\0\x89\0\xa8\0\xcd\0\xa8\0\xcd\0\xa8\0\x8d\0\x9d\0;\0y\0\xda\0\xb2\0\xd7\0\xf5\0\xeb\0\xec\0A\0j\x000\0\xc0\0\xbc\0\xd4\0\xe7\0\xd3\0\xbc\0\xac\0>\0w\0\xec\1\x82\0j\0z\0\xe6\0\xd5\0\xb3\0\x99\0\xa9\0\xac\0\xc3\0\xd3\0\xe7\0\xd4\0\xd2\0\x9f\0\xdd\0\xe9\0\xeb\0\xa7\0\xeb\0\xa7\0\xe9\0\xda\2\xe9\0\xda\0\xe9\0\xdc\0>\0.\0\xa0\0\xd4\x000\4%\0\22\0\xbe\0\22\1C\0\xcb\0\x98\0\xa8\1\xcd\0\xa8\0\x8d\0\x9d\0;\x000\0z\0\xf3\0\xe7\0\xf7\0\xec\1\xdc\0h\0j\x000\0\xce\0\xc3\0\xd4\0\xe7\0\xd3\0\xd4\0\xbc\0\xbb\0z\0\x9e\0h\0\x93\0j\0l\0h\0}\1\xb4\0\xaa\0\xc3\0\xd4\0\xd3\0\xae\0\xd4\0\xd2\0\xa0\0\xe0\0\xda\2\xf4\0\xeb\0\xe9\0\xda\1\xe9\0\xeb\0\xe9\0\xeb\0d\0>\0.\0\xa2\0\xbc\0\xce\x000\3%\0\22\0\0\22\0\xbe\0\31\0\xbe\0\x8d\0\xcd\0\xa8\1\x8d\0\x9d\1\xf0\0\xc4\0\x9f\0\xe7\0\xf3\0\xf4\0\xda\1\xb3\0O\1\xf0\0Y\0\xab\0\xd8\0\xbc\0\xd8\0\xd3\0\xd4\0\xbd\0\xc5\0\xd6\0\x95\0b\0\x81\0>\0\x97\0\xb5\0\xaa\0\xbd\0\xbc\0\xe7\0\xd8\0\xd3\0\xae\0\xd9\0\xb8\0\xa0\0\xc9\0\xf3\0\xe5\0\xf3\0\xda\1\xdf\0\xeb\0\xe9\1\xeb\0\xe9\0\xe4\0h\0.\0|\0\xbc\1\xc3\0(\x000\2%\0\22\0\x027\0\30\0.\0\x98\0\x9a\0\x8d\1\x9d\0;\x000\0\x95\0\xa4\0\xf3\0\xf5\0\xb3\0\xf3\0\xf8\0>\0j\0\x81\0\x84\0(\0\xd2\0\xf9\0\xa3\0\xd4\0\xd3\0\xa3\0\xae\0\xc3\0\xab\0\xbb\0\xb6\0\xbf\0\xf9\0\xae\0\xc3\0\xbc\0\xd4\0\xd8\0\xd4\0\xd3\0\xae\0\xa3\0\xd3\0<\0\xa0\0\xc9\0\xf3\0\xda\1\xdf\0\xe9\0\xdf\0\xeb\0\xe9\0\xeb\0\xe9\0\xeb\0\xf5\0w\0\xc4\0\xae\0\xbc\2\xb6\x000\2%\0\23\0\1\22\0\x007\0U\0\x8d\0\x89\0\x8d\0\x9d\0%\x000\0x\0\x94\0\xb8\0\xe1\0\x9e\0\xda\0\xeb\0}\0\x84\0j\0O\0\xc7\0.\0p\0\xc5\0\xac\0\xf9\0\xd8\0\xe7\0\xd4\0\xd3\0\xeb\0H\0\xd1\0?\0\xda\0\xd4\0\xc3\0\xe7\0\xd3\2\xae\0\xa3\0\xe7\0\xd3\0<\0\xa6\0\xf7\0\xe4\0\xeb\0l\0(\0\xb3\0\xe0\0\xe1\3\xe0\0\xf3\0\xe0\0z\0\xb8\0\xc3\1\xbc\1b\x000\1%\0\22\0\30\0\x007\2C\0\xc4\0\x98\0\x9d\0\x84\0\xb0\0b\0\xca\0\x94\0\x9b\0\x94\0\x99\0\xf6\0\xe6\0\x81\0r\0j\1\xcb\0{\0=\0Q\0\xb7\0\xbb\0\xac\0\xaa\0\xd3\0W\0^\0\x80\0P\0\x9d\0\x86\0A\0\xc3\0\xae\0\xd3\1\xa3\0\xd7\0\xae\0\xe7\0\xbc\0\xed\0\x95\0\xdc\0\xb3\0v\0(\x000\0\xb3\0\xe1\0\xf3\1\xc9\0\xd7\0\xa4\0\xbc\0\xc3\0\xe9\0P\0\xa2\0\xbc\2\xc0\x000\1%\0\22\0\xbe\0\22\x007\0\0\22\0\31\0B\0;\0\xf0\0\xa6\0\xa4\0\xdf\0Q\0\xc3\0\xc1\0'\0\xcc\0h\0n\0j\1(\0e\0Y\0{\0x\0\xc7\0x\0<\0\xb1\0\xc5\0\x99\0\x96\0\xcf\0:\0\xab\0Y\0\xc4\0\x96\0\xe2\0\xc3\0\xd7\0\xd3\0\xae\0\xa3\0\xae\0\xe7\0\xae\0\xc8\0<\0n\0\x93\1\27\0\xcf\0\xf5\0\xeb\0\xe2\0\xd7\0\xc9\0\xd7\0\xa4\0\xbc\1\xe0\0d\0\x84\0\xa3\0\xbc\1\xad\0'\x000\1\30\0\xd0\0\x017\0\0g\0\25\0\"\0v\0\x97\0\xa9\0\xb3\0\xdd\0Q\0(\0\xcb\0(\0Y\0j\0~\0e\0b\0x\2!\0\xcc\0\x94\0\36\0p\0\xa5\0y\0\x9d\0j\0\v\0)\0i\0Y\0\x9d\0@\0\xc3\0\xa3\1\xae\0\xe7\0\xae\2\xb9\0\xbb\0\xe8\0r\1.\0\36\0\xdc\0\xe9\0\xda\0\xe2\0\xf3\0\xd7\0\xa4\1\xbc\0\xe1\0\xf5\0\x9d\0\x94\0\xbc\2=\x000\0%\0\30\0B\0\1\xbe\0B\0,\0j\0\xd5\0y\x000\0>\0\xec\0\xd5\0b\0.\0\36\x000\0\34\0\xc4\0\x9d\0\x94\0\xce\0Y\0e\0x\0\33\0p\0\xbb\0\xc0\0p\0\x9b\0\xca\0\xf0\0O\0-\x000\0&\0\xb1\x000\0\xc7\0\xa3\0\xf9\0\xac\0\xaf\0\xa3\0\xaa\0\xac\0\xc8\0\xac\0\xd2\1\xc1\0]\0\36\0\27\0\xe6\0\xe9\0\xdf\0\xda\0\xf3\0\xc9\0\xd7\0\xa4\0\xd7\0\xe1\0\xe4\0v\0\x84\0\xd4\0\xbc\1=\x000\0*\0\30\0\x007\0\0\25\0,\0\xcf\0\xdf\0\xda\0\x97\0\x95\0\xe6\0\xd5\0\xf4\0\x95\0\x84\0(\x000\0(\0\xa8\0\xd1\0\xa8\0y\0Q\0Y\0&\0\36\0\xa1\0\xac\0\xb1\0\xc8\1\x99\0\x8d\0\x95\09\0 \0i\0\xc2\0\x80\0\xc4\0\xcc\0\xd2\0\xac\0\xc8\0\xac\0\xaf\0\xa2\0\xbb\0\xb7\0\xb1\0p\0\x93\0%\x000\1y\0\xe4\0\xe9\0\xdd\1\xe0\0\xf3\0\xd7\0\xf3\0\xf7\0\xf5\0j\1\xa3\0\xbc\0\xc3\0\36\x000\0%\0\22\0\1U\0\25\0%\0\xd5\0\xc3\0\xe0\2\xf6\0\x84\0\xd5\0n\0.\0\"\1\x8d\0\x89\0\x90\0\xa8\0\x9d\1x\0\33\0=\0\xa2\0\xbc\0\xa1\0\xb8\0\xab\0\xf9\0G\0M\0Y\0\xc2\0{\0M\0[\0@\0\xe8\0Q\0p\0\xcc\09\0\xba\1\x94\0x\0\xcb\2\xc7\0.\0'\0\27\0h\0\xe4\0\xe9\0\xda\0\xf7\1\xe2\0\xe1\0\xf5\0I\0\x80\0>\0\xe7\0\xbc\1b\x000\x017\0U\0\25\0\"\x000\0\xcf\0\xdd\0\xf4\0\xfa\0l\0\xb3\0h\0z\0\x84\x000\0j\0\"\0\x8d\0\x8c\0\xcd\0\x90\0\x9a\0\x8d\0;\1(\0x\0\xf9\0\xae\0\xd4\0\xd8\0\xa2\0\xab\0}\0\x98\0[\0T\0\x83\0\x87\0?\0\xd8\0\xbc\0\xac\0<\09\0\xcc\1F\0\xba\09\0i\0\xce\0\xc1\0]\0(\0x\x000\0%\0\x95\0\xdc\0\xf5\1\xe4\0\xf5\0\xdc\0\x9e\0O\1\x80\0\xa1\0\xbc\0\xd8\0F\x000\1\22\0\25\0$\0'\0f\0\27\0\x84\0P\0v\0\x97\0y\0\x97\0\xe4\0z\0\xcf\0\x82\0x\0\x8d\0\xcd\0\x90\0\x8d\1\x9d\0;\x010\0~\0\xab\0\xc8\0\xd3\0\xd4\0\xd9\0\xbc\0\xab\0\x95\0R\0^\0?\0\xa6\0\xbd\0\xd4\0\xa3\0\xc3\0\xbc\2\xc3\0\xa3\0\xac\0\xbb\29\0{\0\xea\0~\x000\0\36\1I\0h\0\x9e\1h\0v\0P\0>\0I\0P\0\x97\0\xbc\0\xea\0\xc2\0(\x000\0\22\0U\0\25\x002\0,\0'\x000\0\xec\0\xe0\1\xf8\0\xf5\0\x95\0\xb3\0h\0\xcf\0r\0\x8d\0\xcd\0\x90\0\x8d\1\x9d\0;\x010\0b\0\xf9\1\xae\0\xd8\0\xc3\0\xd4\0\xbc\1\xac\1\xbd\0\xbc\0\xd4\0\xd3\0\xe7\0\xd3\1\xd8\0\xc3\0\xae\0\xaa\0\xad\0\xa3\0\xaa\0\xe8\0\xcc\0\xaa\0i\x000\0\xc7\0]\0\36\0'\0j\0>\0v\0>\2I\2v\0\x95\0\xae\0\xa0\0\xce\x000\0\xbe\x002\1f\0,\0f\0\"\0\xd5\0\xb0\0v\0\x82\0j\0\xd5\0\xa9\0v\0\x82\0\x9d\0\xcd\0\xa8\1\x8d\0\x9d\1;\1.\0\v\0\xbb\0\xea\0\xc5\0\xac\0\xbc\0\xd4\0\xae\0\xd3\0\xbc\1\xd4\0\xae\0\xd3\0\xd8\0\xd3\0\xe7\0\xd4\2\xbc\0\xc3\0\xd4\0\xbc\0\xbb\0\xea\0\xbc\0\x94\x000\0<\09\0\xc7\0%\0\27\0'\0\xc7\0P\0j\0P\0v\0h\0\xfa\0h\1l\0\x95\0\xbc\0\xd3\0(\0\30\0\25\0$\x002\0f\x020\0(\0\xfa\2I\0Q\0\xf6\0y\0;\0\x89\1\x9a\0\x8d\0\x9d\0\xc4\0\xf0\2 \0\xcc\0\xd2\0\xb8\0\xbb\0\xc8\0\xbc\0\xe7\0\xd4\1\xd3\0\xd4\1\xd3\0\xe7\0\xd8\0\xd4\2\xd9\0\xd4\0\xa3\0\xbc\0\xea\0\xbb\0\xbc\0\xce\x000\0<\0\xf9\0\xcc\0'\0\xcb\x010\1y\0P\0h\0\xa9\0\xdd\0\xf3\0\xc9\0\xf8\0\xf6\0v\0F\0\xbc\0\x94\0\22\0g\0\25\0$\0,\0f\0,\0f\0(\0h\0\xfa\0z\0\xcf\0P\0z\0\30\0\0(\0\xd1\0\x89\0\x8d\0\x9d\0;\0\xf0\2\36\0\2\0\xc1\0\xc0\0<\0\xc5\0\xae\0\xd4\0\xd8\0\xd9\0\xd4\5\xd9\0\xe7\0\xd8\1\xd3\0\xbc\0\xad\09\0\xbd\0\xe8\x000\0\xc2\0\xbb\0\x94\0\36\0\x9b\0r\x000\1,\0}\0\xf8\0\xf7\0\xc9\0\xe7\0\xa4\1\xd7\0\xe0\0\xf5\0\x80\0\xa1\0\xd2\0\22\0U\0$\0,\0f\0,\2\27\0%\0'\0j\0I\0j\0$\0g\0C\1\34\0\x9d\0\x8d\0\x9d\0;\0\xf0\2\30\0#\0\26\0\xe8\0\x95\0\xea\0\xc5\0\xaa\0\xc3\0\xd4\0\xd9\0\xd4\5\xd8\0\xd4\0\xd8\0\xd3\0\xd4\0\xba\0\xac\0\xb1\x000\0\xc2\0\xea\0y\0\x84\0\xce\1%\x002\0$\0\x95\0\xf8\0\xf7\0\xe0\0\xe7\0\xa4\0\xc3\0\xa4\0\xd7\0\xe0\0\xf5\0\x84\0|\0\xb6\0\22\0\0U\0\25\0,\0'\0\27\0f\0,\x002\0$\0\33\0B\0g\0\1\xbe\0\22\0\31\0\xd0\0.\0;\1\xf0\2(\08\0C\0\16\0Y\0\x95\0\xaa\0\xbb\0\xf9\0\xd4\1\xe7\0\xd3\0\xd8\0\xd4\0\xd3\0\xd4\1\xe7\0\xa4\0\xbc\0\xac\0\xbb\0\xb6\0j\0\xce\0\xcc\0\x97\0\5\0k\0r\0\"\0\30\0$\0\x95\0\xf8\0\xe9\0\xf3\0\xd7\0\xa4\1\xc9\1\xe2\0\xf6\1j\0|\0\xc2\0\22\0\0\xbe\0\25\x002\0,\1f\0'\0\34\0\25\0U\0\xbe\0\0\xbe\0\1\22\0\0\30\0B\0\34\0\27\0\xf0\x020\0\xde\0)\0\0#\0\32\0\xc2\0\xc8\0\xd3\0\xc3\0\xbc\4\xc3\2\xbc\0\xd4\0\xd8\0\xc5\0\xa5\0\v\2&\18\0\22\0B\0\t\0B\0]\0\xf8\0\xe9\0\xe0\0\xe7\0\xa4\1\xc9\0\xd7\0\xf3\0\xf5\0\xfa\0\x9e\0\xc4\0F\09\0B\0U\0\0B\1\25\x002\0,\0\25\0\xd0\0\2\xbe\0\x027\1\xbe\0\xd0\0\25\1,\0\27\x000\1\xb0\0\xfb\0C\0\0\32\0\20\0E\0\xfb\0\xde\0:\0\xfb\0\xed\0\xbf\0\xc5\0\xed\0:\0E\1\xe3\0\4\0\0\0\31\0\1\0\t\0\22\0r\0\xde\0\xf2\0\30\0`\0\0\0\37\0\xec\0\xf8\0\xdd\0\xae\0\xa4\1\xd7\0\xc9\0\xdd\0\xf5\0\xb3\0d\0\x81\0f\0\x99\0\xce\0\22\0\25\0B\x007\1\xbe\0\xd0\0B\0\xbe\0\0\xbe\1\5\22\0\0B\0\25\x002\1,\x002\0'\0\xcf\0\xbc\0\xfb\0\31\0\22\0\32\0\31\0\32\0\t\0C\x007\0C\0\31\0\32\x004\0#\0\0\1\24\0#\0\xf2\1`\1\xc1\0\xe8\x003\0\n\0\0\x012\0y\0\xf8\0\xe1\0\xd7\0\xc9\0\xe2\0\xc9\0\xe5\0\xdf\0\xec\0\xfa\0}\0h\0x\0r\0b\0%\0\22\0$\0\25\0\xbe\x007\0B\0\xd0\0\xbe\0B\0\xbe\1B\0\xbe\0\2\xbe\1\1\xd0\0\25\0\34\x002\1,\x002\x000\0\xc0\0\xbc\0\xea\0k\0\32\x006\0)\0`\0+\0#\0\24\x006\0#\x006\08\0)\x013\0\xee\x003\0\xf1\0\xee\0\xf1\08\0\xf1\x003\0\a\0\xbe\0\36\0f\0\x9e\0\xf7\0\xd7\0\xc9\0\xe5\0\xdd\0\xdf\0\xa9\0\xec\0\xd5\0\xfa\0\x95\0\x81\0\x93\0r\x000\1\22\0B\1\25\0U\0B\2\xbe\0B\0\xbe\0B\1\x057\0\xbe\0\25\x002\1,\2'\0(\0\xb9\0\xbd\0\xab\0<\0\xf1\0\xf2\0+\0)\x013\0\xf2\0`\1)\08\0E\0\r\0\24\1\xe3\0\f\x003\1)\0\xe8\0\xc7\1-\0O\0\xf8\0\xe0\0\xe5\0\xe0\1\xb4\0\xa9\0\xf6\1z\0\xfa\0z\0\xc7\x010\1%\0\22\0\0g\0\0g\0\1U\0B\1\xbe\2\0\22\0\3\22\0\xbe\0\25\0$\x002\1,\0f\x002\x000\0\x9d\0\x9f\0\xab\1\xa2\0\xea\0\xde\08\0)\0+\2)\0+\0y\0\xeb\0\xdd\0\xb4\0\xa9\0\xf4\0\xa9\0u\0E\0\xcc\0\xce\0Y\0-\0\xca\0\xeb\0\xe1\0\xe2\0\xdd\2\xc6\0\xd5\0\xf6\0z\0h\1j\0]\0(\x000\1%\0\22\0B\0U\0C\x007\0\0B\1\xd0\0\xbe\0\0B\0\xbe\0\0\22\0\1\22\2\0\xbe\0\25\x012\0,\x012\0,\0\xf0\0\xd1\0\\\0\xb6\0\xbf\1\xae\0\xad\0\xed\0:\0\xde\3\xa9\0d\0\xdc\0\xf7\1\xf5\0\xf8\0\xb3\0b\09\0i\0\x9b\0>\0\xd5\0\xf3\1\xe2\0\xdd\0\xa9\0\xf6\1\xe6\0\x97\0z\0h\0O\1\xc7\0'\x000\1%\0\30\0B\0\0B\0U\0\xbe\2B\1\xbe\0B\0\xbe\0\2\xbe\1\x017\0\xbe\0\xd0\0\25\x002\0f\0,\x002\0,\0\x9d\0\x80\0\x9d\0\xd1\0}\0\xa2\0\xf9\1\xd3\0\xc3\0\xbc\1\xb2\0\xec\0\xf5\0P\0j\0l\0\x9e\0\xdc\1\xc9\0\x99\0-\0Y\0\x97\0\xfa\0\xf6\0\xa6\0\xa0\0\xf7\0\xdd\0\xe6\1\xb3\0z\0h\0z\0\x84\0O\0\xc7\x000\3%\0\22\0\0B\0\25\0\xd0\0\xbe\0\3U\0B\0\xbe\1B\3\xbe\0\x007\0\0\xd0\0\25\x002\2,\0\36\0\x94\0\x80\0\x9d\0\xc4\0\x8d\0\x83\0\x9f\0\xa1\0\xab\2\xbc\0}\0\x80\0h\0z\0\xf0\x000\0(\0l\0\xf5\0\xe0\1z\1\xfa\0v\0\x97\0\xec\0\xfa\0\xf4\0\xf5\0\xe6\0\xfa\0n\0z\0h\0j\0]\0\xc7\x000\4%\0\22\0g\0B\0U\0B\1\xbe\0\22\0\0B\1\1U\0\xbe\0B\1\xbe\2\1\xbe\0\25\x012\x010\0~\0\xbc\0\xe8\0\x9d\0P\0\x80\0\x9a\0\x89\0\x8f\0A\0\xa0\0\xb9\0\xbc\0\xab\0\x95\0\xf5\0\x9e\0j\x000\0\xf0\0I\0\xeb\0\xf3\0\xdd\0\xe0\0\xf8\0\xf7\0\xd7\0\x97\0z\0\xf8\0\xfa\1z\0>\0n\0>\0j\0O\0\xcb\0'\x000\4%\0C\0U\1\2\22\0B\0\xbe\2\0B\2\1\xbe\0B\0\xbe\0\2B\0$\x002\0'\19\0\xc2\0\xbd\0Q\0\x9d\0\x80\0\x9a\0^\0\x8e\0\x96\0\x91\0G\0W\0\xb3\0z\0\xf6\0\xdf\0\xe2\0\xe6\0\xb3\0\xec\0\xe5\0\xf3\1\xf7\0\xe1\0\xf3\0\xf7\0\xf5\0>\0\xd5\0\x97\0>\0P\1n\0O\0b\0.\x000\6%\0\22\0g\0B\0\xbe\0B\0\xbe\0B\0\xbe\1B\0\xd0\2\xbe\0B\0\xbe\0\1B\0\xbe\0B\0\0B\0\25\x002\0f\x000\0\xc0\0\xbd\0\xba\0\xc2\0\xac\0e\0\xc1\0\x82\0\x8d\0\x8e\0^\0M\0\x8e\0\x91\0\x8e\0\xf6\0v\0\xdf\0\xa4\0\xd7\0\xc9\0\xb4\0\xf3\0\xe0\0\xf8\1\xf4\0\xf8\0\xf5\0\x9e\1\xb0\0\xce\0\x82\0j\0y\0\x84\0*\x000\b%\0\22\x007\0\0B\0\xd0\0B\0\xd0\1B\1\xd0\0B\0\xbe\3\2\xbe\0B\1\25\1'\x000\0\xb1\0\xbd\0\xbf\0\xbd\0\xcc\0\xb7\0\xba\0p\0\xba\09\0\x81\0\x8d\0\x98\0\x8e\0^\0\x80\0n\0\xf6\0\x82\0\xf6\0\xf8\0\xeb\0\xf7\1\xf8\0\xe9\0\xa9\0\xdc\0\xfa\0\xf6\0z\0\x95\0\x94\0<\0~\0*\x000\2'\x010\6%\0C\0B\0\xd0\0B\2\xd0\2\xbe\1\1B\0\1\xbe\0\3\xd0\0U\0,\x000\0\xb1\0\xbd\0\xac\0\xaa\0\xbd\0\xae\0p\0\xbb\0\x94\0p\0\xb1\0\xc5\0\xbb\0\xc2\0I\0\x8e\0P\0j\0I\0\xf6\0v\0\xdc\0\xf5\0\xf4\0\xf6\0\xec\1\xdc\0\xf6\0\xfa\0}\0n\0\x97\0\xb8\0\xba\x000\1'\x020\0%\x000\6%\0\22\0B\0\xd0\1B\1\25\0\30\0\xd0\1\xbe\1\x057\1\xd0\0$\0f\x000\0<\0\xd8\0\xac\0\xad\0\xd3\0\xad\0\xd3\0<\0\xcc\0\xac\0\xc2\0\xcc\0\xa2\0\xbc\1\xab\0\xc8\0F\0\x80\0v\0\x9e\0\xf6\0P\0\xb0\0\x9e\0\xb3\1\xf6\1\xe6\0h\0I\0P\0\xcb\0e\0'\x000\1%\x000\0'\1\27\x000\6%\0\30\0U\0\xd0\1B\2\xd0\0B\0\xbe\0B\1g\0\3C\x007\0\25\0$\0,\x000\0\xc2\0\xbd\0\xac\1\xc8\0\xaa\0\xae\0\xc2\0\xc8\0Q\0\xb1\0\xbc\0\xe8\0\xd2\0\xad\0Q\0\xc2\0\xac\0\xaf\0\x82\0P\0v\0\x9e\0\xe6\0h\0\xe6\1\x9e\0n\0v\0P\0\x84\0\xc4\x000\0'\x000\0'\0.\0(\0.\1(\0.\x010\6%\0B\0U\0\xbe\0B\0\xd0\0\25\1B\0\xbe\0B\1\4C\0\0$\0!\0\33\x000\0\xcc\0\xbd\0\xac\0\xc8\0\xb2\0\xa3\0\xaf\0\xad\0\xb1\09\0\xd2\0\xc7\0\xae\0\xa3\0\xb9\0\xb8\0\xba\0\xc2\0\xcc\0\xbb\1j\0v\0z\0h\1j\0\x84\0\xc4\x000\0'\0%\0\27\0%\0.\0(\0.\0(\0.\4(\0.\x000\6%\0!\0\25\0\xbe\0B\1U\0\37\0B\0\xd0\0B\0\1\xbe\0\30\0\1\xbe\0$\0'\0\xcc\0\33\0x\0\xbc\0\xc8\0\xad\0\xb2\0\xa3\0\xad\0\xd9\0\xa1\1F\0\xe8\0{\0\x94\0\xc3\0\xad\0\xd2\1\xdb\0Y\0\xdb\0\xd2\0\xbb\0\x93\0v\0\x80\0\xc4\0\x93\0\xcb\0r\09\1\xcc\0\x94\0Q\0]\1r\0x\1.\1\36\0(\0\36\0(\x000\6%\0U\1B\2\xd0\0B\2\xbe\3\x007\0\xbe\0$\1u\0x\0'\0\xaa\1\xad\0\xa3\0\xc8\1\xf9\0\xa1\0\xa3\0\xdb\0\xd2\0\xce\0\xba\0e\0\xb1\0\xac\1<\0\xc1\0\xb9\0\xb8\0\x9b\0\xcc\0\xc0\0O\0b\0\x9b\0\xc1\0\xb5\0\xc0\0\xc1\0\xcc\0Q\3]\0{\0r\0\xc7\0\xca\0\xcb\0\36\0.\0\xc7\0(\x000\6%\0U\0\25\0B\1U\2g\0\1\xbe\1B\0\0B\0\25\0,\0\xcb\0p\x000\0\xea\0\xbc\0\xa2\0\xc8\0\xac\0\xc8\0\xac\0\xa1\0\xc5\0\xb9\0\xb6\0\xc2\0\xb8\0\x94\0r\0b\0\xb1\0\xbb\0\xd8\1\xbd\0<\x000\0~\0\xbd\0\xce\0\xe8\0\xaa\0\xdb\0\x9b\0~\0{\0Q\0p\0\xcc\0p\0\x94\0p\0]\0{\0r\0\xcb\0\36\0.\0\xcb\0b\0%\0'\x000\6!\0\25\0\30\3\22\0\30\0\22\0\30\0\22\2\30\1$\x002\x010\0\xba\0\xbc\0\xc8\0\xa3\0\xc8\2\xf9\0\xa1\0\xac\0\xb9\0\xd2\0<\0\xc1\0\xba\0Q\0=\0{\0\xbb\0\xb8\0\xc1\0\xb8\0\xc1\0(\0\xd2\0\x94\0\xba\0\xa2\0p\0\xc7\0\x94\0\xc0\0\xb1\0\xd2\0\xbb\0\xb6\0<\0\xc2\09\0\xce\0p\0{\0r\0x\1]\1%\x000\0%\2\27\0%\x000\0%\0"
)


Ici encore, le problème venait de l'image. Bien qu'ayant l'air d'une miniature de rien du tout, l'image comportait pas moins de 253 couleurs différentes, qu'img2calc ici ne réduisait automatiquement qu'à 252 couleurs.

Bref, img2calc s'en sortait très bien niveau compression RLE lorsque tu lui fournissais des images propres ou simples, soit avec un jeu de couleurs réduit ou de larges formes de couleur unie. Facile lorsque c'est toi qui conçois l'image.
Mais si tu convertis une image récupérée en ligne, ce ne sera pas forcément le cas :
  • photo
  • image au format JPEG
  • miniature obtenue par réduction d'une image originale plus grande avec interpolation de couleurs (cas de Super Dupont)
  • ...
Comment faire pour gérer ce cas et obtenir malgré tout des tailles de script acceptables ?

Et bien dès aujourd'hui nous te proposons une solution. img2calc te permet dès maintenant de préciser le nombre maximal de couleurs à retenir pour la conversion, par défaut à 256 dans le cas de la compression RLE.

Pour Bomber par exemple, on peut tenter de limiter à 8 couleurs au maximum, pour un script qui ne fait maintenant plus que 5,9 Ko (-68,78%):
Code: Select all
#palette for your image
#7 RGB-888 colors
palette = (
"w","#d0d4d0","#b8c0b8","#a0a0a0","#585c58","k","#282828",
)

#your image data
#240x74 RLE-3 pixels
image = (
b"\xf8\x88\1\2\3\2\xd0\16\4%\3\xb8\16\4-\6\1\0\1\3$\3\1\x90\6\1\3\4\3\1\x98\a\3=\3\4\6=\6\3\1\xf0\5\3\6\35\3\x90\a\4\xa5\1\6\3\xe0\5\1\6-\3\x80\a\1\xbd\1\3\xd8\5\x045\4\x80\a\3\xc5\1\3\xc8\5\1\x065\4\x80\a\4\xc5\1\6\1\xc0\5\3=\4\xf8\6\1\6\xcd\1\4\xc0\5\4=\3\xf8\6\3\xd5\1\6\xb8\5\1\x065\6\1\xf8\6\6]\6\24\6U\2\xb0\5\3=\4\xf8\6\1U\4\2\1\20\1\4M\3\xb0\5\4=\2\xf8\6\4E\6\x030\1\6E\4\xa8\5\1\x065\6\xf8\6\1\6=\6\2@\4E\4\xa8\5\3=\4\xf8\6\2\6=\3H\4E\2\xa8\5\4=\3\xf8\6\4=\6P\4E\1\xa0\5\1=\6\1\xf8\2\1\n\1\xd8\3\6=\3H\1\6E\xa8\5\3=\4\xf0\2\1\4\6\25\4\1\xc0\3\2=\6\2H\2E\4\xa8\5\4=\1\xe8\2\1\4-\6\xc0\3\4=\6\30\t\30\2\6E\2\xa0\5\3\x065\6\xf0\2\4=\4\xb0\3\1\6=\3\0\1\4\36\3\1\2\6E\4\1`\1\2\33\2\1\x90\1\1\23\1\b\1\2\33\28\1\2\33\2\1p\4=\4\33\2\1\xa0\1\1\2\33\2\1P\1\6=\6\1\xa8\3\3E\1\2\6\x8d\1\2P\1\3\4=\6\3\1p\4%\4\3\6-\6\4\1\b\1\3\4=\4\2X\1\6u\4\2\xf8\0\1\3\4=\6\3@\3M\3\xa8\3\4=\4\1\6\x8d\1\4H\1\4\6]\6\3`\4\x85\1\4\1\3\6]\4P\2\x85\1\6\3h\2\6]\6\x020\4M\3\xa0\3\1E\v\x8d\1\4\1@\1\4\xfd\0\4P\2\6\x8d\1\6u\4H\4\x95\1\4X\3\xfd\0\3(\4M\4\2\x98\3\3=\6\1\6\x8d\1\2@\1\4\x8d\1\4H\3\x9d\2\48\1\6\x9d\1\3H\4\x8d\1\3 \3U\16\3\1\x80\3\6=\4\1\x85\1\6\2@\1\6\x9d\1\3@\6\xa5\2\x020\3\xa5\1\6\18\3\x95\1\6\1\30\1\6m\4\1\xe8\2\1\6=\t\xfd\0\6\1H\4\xa5\1\48\1\xad\2\x040\4\xad\1\x030\2\6\x9d\1\3 \4u\6\2\xe0\2\4=\6\0\1\x85\1\3@\3E\6\4\v\6E\x020\3M\f\3\4U\6\24\6=\4(\1\6E\6\4\3\4\6=\4(\1\6E\4\3\4\6=\6 \1\x85\1\3\xd8\2\4=\3\b\6\xfd\0\6\28\4=\6\1\30\4=\x030\4E\4\1\b\1\4M\3\20\3=\4(\3E\6\2\20\2\x065\6\1 \2E\4\20\1=\6\1\30\3\x8d\1\2\xc8\2\2=\6\1\b\3\x85\1\x040\1=\4\1 \1\x065\4(\2\6=\4 \4=\6\3\30\1\x065\4(\4=\4\1 \4=\1 \4=\4 \3=\3\30\4\x8d\1\6\1\xc0\2\3=\6\30\3\x85\1\1(\3=\x020\x065\4(\3=\6\1 \6=\3 \2=\4 \1\6=\2(\4=\1\30\1\6=\1 \3=\4\20\1\6\x95\1\3\xb8\2\1\6=\3 \1\4&M\4 \1\x065\x060\1\x065\4(\x065\6\3 \2\x065\6(\4=\3 \4=\4(\1\4=\1\30\3=\6(\3=\3\20\x045\16U\4\xb8\2\3E\x010!\3E\4 \2\x065\x040\2\x065\3 \1=\6(\3=\3(\x065\6\1 \4=\3(\2=\6 \4=\3(\x045\6\1\20\4-\6\1\2\4\6E\4\xb8\2\4=\4h\4=\6\1\30\x035\6\x020\4=\2 \4=\3 \1\x065\6\1 \2=\4 \1=\6\1(\3=\4\30\1=\6\2 \3=\6\1\b\x025\3\20\2E\4\xb0\2\1\6=\3h\3E\2\30\x065\68\x045\6\1\30\1\6=\2 \2=\4(\4=\3 \3=\x040\6=\3\30\3E\4\2\t\2\4\6=\4\20\4-\6\1\30\6=\3\xb0\2\2=\6\n+\2\1 \2E\2\20\1=\3 \2\3\4=\4 \3=\6\1 \4=\3 \1\6=\1 \6=\2\20\1\3\4E\6\1\30\6\xbd\1\2\b\1\6-\4 \x065\6\x020\21\xe0\1\4=\16=\6\4\2\20\2E\2\20\4=\1\20\1\4U\3 \4=\4(\6=\1 \3=\4 \1\x065\6\20\1\6U\4\30\1\6\xb5\1\4\20\x035\3\30\1=\6(\1\4\26\4\xd0\1\1\6\xa5\1\4\1\0\3E\2\b\1\x065\4\20\1\6U\6\1 =\6\2 \3=\4(\x045\6\2 \4=\3\b\1\6]\2\30\4\xb5\1\6\1\20\4-\6\1\30\4=\3 \1\6%\4\xc8\1\3\xb5\1\6\3\4=\6\1\b\3\x065\4\20\4]\4 \3=\6(\4=\3 \1=\6\1\30\1\4=\2\b\3]\6\1\20\1\6\xb5\1\3\20\1\6-\6\30\1\6=\1 \3-\6\1\xc0\1\4\x8d\2\4\20\4=\3\b\1\6U\6\1\30\1\6=\3 \1\x065\6\1 \4=\3 \2=\6\1\b\4]\4\30\3\xad\1\6\3\30\x035\4\30\3=\4(\6-\6\1\xb8\1\1\6\x8d\2\4\20\x065\6\1\b\3]\3 \3E\1 \3=\4 \1\6=\1 \3=\4\20\4U\6\2\20\3\xad\1\6\2 \x045\3\30\4=\3 \x025\4\xc0\1\3\x95\2\2\b\3=\4\20\3U\4 \3E\4(\6=\2 \3=\4(\6=\3\20\4U\6\1\0\1\4M\v\x065\16\3\1 \1\6-\6\1\20\1=\6\1 \4-\6\2\xc0\1\6\xfd\0\16\xfd\0\6\20\4=\2\20\2U\6\20\1\4\6E\3 \1\6=(\4=\4 \1\6=\1\20\4]\f\6U\20\1\3\34\3\18\x045\4\30\2=\4 \x025\6\xc0\1\2\6e\6\2\1\b\1\3\6e\3\1\2\4=\6 \4U\f\16M\6\1 \3=\3(=\6\1 \3=\4\30\1\6\xbd\1\4\x88\1\x035\6\1\30\4=\3 \x045\3\xc0\1\4e\6\2(\2\6]\16M\4 \2\xc5\1\6(\4=\2 \1=\4(\4=\2 \4\xbd\1\6\x80\1\3=\4\30\1\x065\6 \x035\6\1\xb8\1\1\4e\38\1\6\xb5\1\3(\3\xbd\1\3 \2=\4\1 \3=\3 \1\x065\4\1(\xc5\1\1h\1\4=\6\1\30\2\x065\4\30\2\x065\3\xc0\1\2m\28\1\6\xb5\1\3(\4\xb5\1\6\1 \3=\3(\4=\1 \4=\6\1 \1\xc5\1\4\1X\2\4E\3 \3=\3\30\x045\6\xc8\1\4m\3(\1\3\6\xbd\1\6\1\20\1\3\6\xb5\1\4 \1\x065\6\1(\4=\1\20\2\4M\3\30\2\4\xcd\1\4\18\1\2\4\6E\3(\3=\3\b\1\x045\6\3\xc8\1\6m\6\4\31\3\4\xd5\1\4\3\2\3\4\xc5\1\3 \2=\x060\4=\4\2\3\4\6U\6\3\2\3\4\6u\f\3U\f\3\n\3\f\6U\x040\3=\6\2\3\6=\3\xc8\1\2\6\xfd\0\36\xf5\1\6U\6m\6\1 \4=\x030\2M\6\xfd\0\6M\4\33\n\1\b\4e\26e\4\x010\1\6=\6E\6\1\xc8\1\4\xc5\2\4\6\x9d\1\4\1\2\3\4\v\4=\4 \1\x065\6\18\6\x9d\2\6\1@\1\4\xd5\1\4H\6\x85\1\6\1\xc8\1\1\4\xf5\1\6\23\24\v\2\1\2\6\x8d\1\6\1(\6=\2 \3=\4@\4\x95\2\6\3P\1\6\xbd\1\6\3P\2\xfd\0\6\2\xd0\1\1\x065\4\3\6\x9d\1\6\3P\2\6\xfd\0\6\x020\x065\6\1 \3=\3@\1\4u\16\xfd\0\6\3`\1\4\xad\1\4\2`\4m\6\1\xe0\1\4-\6\3\0\2\6\x8d\1\4\1`\2\6m\4\18\x045\3(\x025\4X\4e\4\t\4m\4\2\xf8\0\3\6\x8d\1\6\2\1p\4]\4\1\xe8\1\3-\4\20\1\4u\4\3\x80\1\3\6M\4\3H\1\6%\38\3%\4\1`\3\6=\6\4\3\30\3\4M\4\3\x98\1\3\4\6]\f\1\x90\1\3\6=\4\3\xf8\1\1\4\25\6\4\1 \1\3\6M\4\2\1\x90\1\1\v\4\6\r\f\3\2\1X\1\4\6\5\4\3H\3\6\5\6\3\1p\1\v\4\6\5\6\4\3\28\2\3\4\6\r\6\4\3\2\1\xb0\1\1\v\4\6\25\6\4\v\2\1\xa8\1\1\3\f\5\6\4\3\2\1\x90\2\1\3\2\1H\t\3\24\3\2\1\xc8\x93"
)

Un choix judicieux, la dégradation du lissage de l'inscription sur seulement 4 niveau de gris n'est pas flagrante.

Pour Super Dupont qui est une image certes miniature mais en couleur, soyons moins extrêmes. Mettons la taille maximale de la palette à par exemple 16 couleurs, pour un script de seulement 9,8 Ko (-71,51%) :
Code: Select all
#palette for your image
#16 RGB-888 colors
palette = (
"#004468","#002450","#085898","#002048","#081020","k","#488ca8","#a0a098","#605458","#b85c50","#c89068","#e02018","#981008","#602018","#e0bca8","#e8ece8",
)

#your image data
#75x100 RLE-4 pixels
image = (
b'\20\1\xe0\1\1\0\1@\1P\1\20\2\xe0\4\1\20\1\xe0\1\1\3Q\0\1P\1\xf0\1\1\xb0\1\1\20\21\20\1\20\21\x90\1\4\x010A\xb0\1\5\20\3\xd0\2\1\x90\1\1\20\21`\1\0\24\3\1\4\0\1\4\3\1\0\1\3\4\21P\2\3\5\20\1\xd0\2\21\xb0\1\1\x80\1\3\4\0$\0\2\0\5\4\1\0\3\5\3\1\0\1\3\0\21\2\4\23\1\24\xa0\4\1\xf0\0\2\4\3\0\5\4\1\0\1\24\1\4\1\4\3\2\3\4\3\5\24\0\1\5\3$\1"\0\2\20\2P\1\3\20\1\3\20\23\1\23\1\3`1@\3\5\4\5\4\2\0\5\4\x034\3\0\24\5\4\5\3\2\1\5\4\3\25\0\x021\0\3\4\0\1\3\20\1\20\1\5\4\2\4\5\2\3\4\22\20\3\1P! \21\20\4\5\1\0\3\4\1E\3\0$\1\24\0\4\23 \1\0\5\0\2\5\1\2\4\1\22\0\5\1"\25\22\24\2\x102\x030A\0\21\3\1\20$\0\1\24\5\4\3\0\23\1\3\2\1\4\22\0\4\0\4\1"\3\25\22\5\0\2\4\0\22\0\4\0\22\6\4\5\0\6\5\4\a\4\b\31\n\t\4\x101\20#\1\3\4\5\3\1\4\1\23\0\1\0\1\0\4B\4\1"\0\x152\4\5\4\2\6\5\6\a\5\t\v\31\4\6\33\n\4\f\v\b\r\v\b\t+\r \21 \3\x012\5\4\3\1\3\2\0\x052\1\5\3B\5\0"\3\25\6\31\a\4\5\v\t\0\33\0;\b\v\31\v\b\f\v\b\31\5\4\31\3\x010\1\20\4\5\xf2\0\4\5\22\x142\4\5\x012\0\5\6\31\6\25\t+\t\0\v\f\4\v\f\4\v\1\b\v\t\v\24\v\31\v\32\f\5\4\v\r\1\0\3 \1\20\25\0b\1\25\22\5\x032\25\6\t\33\n\0;\t\4\v\t\b\33\b\v\r\4\t\35\v\2\v\t\v\t\25)\n\33\4\5\t\v\3\1\x030\1\0\3\25\4\1\2\6\b\t\b\22\4\5\1\2\0\5\b)\b\4;\b\4\v\30\33\0\v\t\5\t\v\t\v\4\r\t\r\t+\4\v\t\2\f\31\f\b\33\25\33\21\20\1\20\1\0\1%\0\t+\t\4\26\25\n\t\0K\b\33\2\3\5\r\v\0\3\v\t\r\v\b\1\v\31\v\2\f\v\0\33\t\0\5\t\v\t\v\b\t\f\4\n\b\3\1\t\x040\1\0!\0\4\5\4\t+\n\b\4\33\5\1\33\0\v\t\b\33\t\v\t\2\b\5\f\v\6\33\4\r\v\2\t\v\1\f\v\6\v\f\4\v\t\0\2\0\b\t\v\b\3\b\1\20\1\0\4\5\1P!\20\5\t\33\t\0\25\b\v\t\5\0\v\f\0\v\t\3\33\b+\t\5\t\33\t\4\5\t\v\t\v\t\r\b\t\v\t\3\b\n\3\2\0\2\0\3$\5\1E\4@\1\x001\0\3+\22\25\r\v\t\5\b\v\f\r\v\6\t\v\b\r\v\t\6\3\5+\t\3\5\t\33\t\r\v\f\r\t\r\4\3\1\22\0\2\x045\4\1\4\3\1`\x110#\t\33\t\2\1\5\b\v\t\5\b\v\t\r+\t\5\f\v\6\2\1\4\v\t\b\v\t\0\31\b\r+\34\33\f\r\1"\1P\2P\1\xf0\0\4\3\2\3\t\33\t\6\5\r\v\t\5\b\v\r\b\33\t\4\5\t\v\t\f\t\0\n\t\r\31\r\34\xab\1\f\r\1B\xb0\1\21\20\21\0\3\5\22\4\t+\b\4\v\n\4\f\v\35\v\t\f\r\5\t+\t\r\b\f\v\34\xfb\1\f\4\0\22\0\2\xa0\1\1\0\1\0\21\0\1\5\1\2\4\5\b\t\33\b\v\t\2\t\v\b\r\v\b\f\v\r\b\t\30\f\xfb\2\f\3\22\xf0\1\21\20\25\22\25\b\33\a\33\t\33\0\t\n\r\34\v\r\f\xcb\3\4\22\xe0\1!\0\3\5\t\6\1\4\t\33\30+\t\r\b\r\f\v\f;L\33\f\xcb\2\r\22\xd0\1!\0\1\4\33\31\33\t\4\r\b\t\b\r\v\34\v\f\33\f\v\f\v\t\nN\37\27\32\t\xeb\1\r\0\2\xc0\x011\0\1\t;\n\0,\r\\\v\34\v\t\36o\16\a\0\37\a\37\n\xdb\1\r\22\0\2\x90\1a\30\t\b\4\r\vl\v,\n\16\37.\17\36\a\36\a\17\16\a\16\a\16\37\16\t\xbb\1\r\22\x80\1\1\0\xf1\0\3\2\4\r\v\x8c\1\v\t\16\17N\17W\b\4\25\b\16\27/\16\xbb\1\4\22\x90\1a\0\2\1\r\xac\1n\37\a\b\24\xf5\0\4\36\27/\t\xab\1\4\2\0\2\xf0\0\1\x131\20\4\x9c\1\v\16\17\a>\37\a\x84\1E\b\'/\n\x9b\1\f\1\22\xf0\0S\1\0\4\x9c\1\t\36\a>\37\b\5\4\b\4%\24\xf5\0\'/\16\x9b\1\f\22\0\2\0\x020S\0\1\r\x8c\1\t\36\a>\37\b\5\24%\4\r\4e\a\16\17\b\16?\16\x9b\1\4\2\20\2@\x013\21\4\x8c\1\t\16\27\36\a.\b\24%\4\30\r\xf5\0\b\37\a_\16\x8b\1\f\0\22 \2\20\3\1#\0\3\x9c\1W.\a\b\r\25\4(\xf5\0\4\27\37\36_\n\x8b\1\4"P\1\3!\4\x8c\1\n7N\30\24(\r\xf5\0\4\30\25\6\16\xff\0\t\xfb\0\f\x002 \1\0\23\1\3\x8c\1\t\16G\36\a(\48\xe5\1\16\x8f\1\x8b\1\x042\20\2!\3\1\4\x8c\1\27\n\'\36\a\b\0\b\4(\r\xa5\1\a\16\27\b\16\x8f\1\n\xfb\0\fB\20\21\3\1\3\r\xfc\0\bW\16\a\24\25\4\25\4e\4\b\r\5\b\17\6\5\16\27\36\37\a\16?\x8b\1\3R\1\23\1\4\r\xfc\0W\16\a\xc5\1\4\b\27\36\25\37\5\4\30\24\r\b\16\27/\n\xfb\0\r"\0\22\23\1\0\4l\r\t\27\n7\b\xb5\1\4\n\a\b\a\t\4\25\b\17\a\4\0\a5\b\37\a/\xfb\0\fR\1#\r\xfc\0\x87\1$e\24\25\t\r%\b\4\b\37\b\r\16\5\4\25\16\17\b\a/\n\xfb\0\1B#\4\r,\r<W(P\b\2\4\t\n\16\b\r\n\t\4\t\27\16\b\a\17\b\16\r%\36\3\b?\16\xfb\0\rB\1\3\1\4\xfc\0\tG(\0\1\20\3\b\16\6\2\4\t\36\31\16\t\4\t\n\16\17\t\b\17\16\a\25\4\17\a\4\5\a\17\36\37\16\n\tK\rB\23\1\4\xfc\0\b\xf7\0\1\0\1\4\a\16\n\22\0\f\16\17\16\31\r\4\n\16\17\16\r\a\17\30\5\4\17\b\5\0\16/\36O\16\n\33\fB#\4\f\r\\g\16\a\0\2\0\a.\6\22\b\n\16\4\t\16\32\35\16\t\5\a\17\4\5\4\a\r\5\a\16\30\3@\30\27\37\n\f\x032\1\3\1\4L\r\34g\16\a\2\4\a\17\16\37\a\22\b\n\t\5\t\16\n\f\24\16\n\4\b\17\24\a\4\5\a\b\23"&"\20\4\a\16\17\a\0\1\22#\4\34\rLg\16\2\1\b\16?\16\1\20\n\r\24%\4\5\b\t\b\17\a\5\6\5\4\0\4\0\26\2\26"6\22\0\4\b\37\a\1\0#\r\f\rL\r\xf7\0\0\4\t\16\n\16\37\b\a\23\t\n\5\r\t\r)\24\37\5\2\24\21\26\22\1\4\5\4\b\4\5\4\0\26\2\26\0\5\b\37\6#\rl\tg\b\0\4\r\n.\27\16\b\4\5\36\r\f)\35\37\4\3\0\4\1\2\6\2\3\4\5\4\b\r\b\a\36\4\25\0\6\22\26\3\5\16\17\23\24\34\r<\tg\b\0\3\r\t\n\16\27\17\6\t\16\30\16\t\a\16\a\t\5\37\4\5\1\3\0\22\4\5\30\n>\n\r\a\17\a\25\4\x026\0\4\a#\r\f\rL\rg\b\0\3\b)\a\37\a\5\n\36\b\16/\16\b\17\4\5\3\0\4\20\b\r\27\n/\16\37\16\5\a\37\4\25\3\2\6\2\6\2\4#\r\xfc\0W\30\0\4\0\31\r/\b\r\n\t\n\a\31\r\t\r\30\5\4\t>\27\17\t\16?\16\37\16\r\b\x1f5\0\2&#\4\\\r\fg\b\0\3\4\31\b/\b\t:\31\bE\4\32\36\27\17\b\t\36o\16\r\b\17\a5\2&\23\1\4\xfc\0W\30\0\4\t\35\a/\b\t\32\16\32\16\17\a5\t\32\16\n\a\37\r\t\36\xff\0\n\5\16\17E\0\26\0\3\1\5\xfc\0g\b\4\31\35\a/\b\t\32\36\n>\b\n\37\16\17\16\a\37\a\t\32\36o\16\t\b\17\aE\0\6\23\1\4\rl\tG\30\t\r\b\r\4\a/\a\t\32\36\37\32\36\17\36\37\36\37\6\t\n\t\n\36_\16\t\4\37U\0\23\1\3\r\xfc\x007\24\16\17\4\5\r\4\a/\a\r\32\16\n\17\16*^\a/\31\n\t\n\36_\16\n\4\a\17\bU\23\21\r\xfc\0\'\4\r\16\37\n\25\rO\b\t*\16\n\t\32.\17\16\n\16\37\16\b*\t\n\36O\16\n\r\b\17\aU#\1\4\xfc\0\t\a\0\5\16\37\n\16\b\25O\a\r\t\32\16\31\32N\a/\aZ\16_\16\n\b\4\17\aU\3!\4\rl\r\b\5\t\16\17\16\n\16\n\4\5\16O\b\t\32\16\b\r\t\n\16*\a?\a\n\16*N/\16\n\t\5\36U\23\21\3\r\\\35\5\b\16\37\n\16\32\r\5\a_\b\t\32\35\t*\a\16O\a\n.\n\16\nn\n\b\5\16\17U3\1\4L\35\25\t\37\16*\t\r\5\b_\16)\4\r9\16_\a\xde\1\t\b\5\16\17\bE3\1\3\r,-\5\4\n\37.\n\30\5\0o\16\a\b\4(\a\xff\0\a\16?\x8e\1\t\5\b/E3\1\3\5\f=\25\b\37\32\17\16\b\r\b\4\5\a\xff\0\36\xbf\1\a\16\37\x9e\1\n\t\4?\x0e5\x013\1\3\r\f\35\25\4\b\a\16\t\36\t\4\r\b\4\5\b\16_\16\t\f\t\16\x9f\1\27.\t\5\n^\17\16\t\a?\4%#1\4\f\r\4\a\24(\a\32\b-\4\b\4\b\36/\t\f-\v\n\x8f\1\a\b\32\r\25\n\16o\16\r\16/\a%#\1\23\1\3\25\a\17\16\b\17\a\5\b\t\b\35\5\4\0\b$\27\16\a\f\4\6\17\0\4\f\16\x8f\1\a\b\24\5\4\n\36_\16\t\4?%3\1\23\4\5\r\b\16\n\16\b\5\4\5\0\r\bD\3\30\4\b\a\b\35\0\2\b\0\r\t\xff\0\36\a\35\5\4\n.O\16\n\r\b/\4\25S\5\r\n\b\5\b\32\4\5\4\5\24\r\30\0$\b\16\a\30\4\5\b\4\5\1\a\5\4\x8f\1\'\b\4\5\n.O\36\r\4/\4\25\23\1\3\4\5\4\36\30\32\16\b\4%,\30\0\1\4\16\17\a\37\a\r\b\6\3\b\a\r\4\b\a?.\a\b\4%\bN/\16\n\35/\4\x153\4\5\n\17.\n\4\n\b%\r,\35$\16\17\16\a\37\v\f\0\a\b\f\v\t\a(\6\27\bD%\tn\n\t\r\b/\4\25\1\3\4\25\4\36\n\t\n\31\4\5\r\5\r,\35%\4?\16\17\t\f\33\f\v\t/\a\6\30\27\6\30\a\b\5\4\25\b*\16\32\t\30\r\16\37\a\25\3\24%\4\35(\16\t\4\r\4\r\34-%\bo\b\t\f\t\a\x9f\1.\6\b\a\b\5\24I\35\b\t\r\b\17\27\25\23\x045\n.\n\b\n\t\4\35\34-%\4\xff\2\a\b\17\b\5\4\b\4\5\r\b\r()\r\b\17\16\b\5\3U\n\a-\n\16-,-%\0\16\a\16\xbf\2\16\a\17\b\5\a\6\4%\4=\t\n)\b\37\5\3\24U*\t\b\n\b\5\34-\4%\3\b\27\16\x9f\2\a\16\17\b\5\a\17\b\5\24\25\b\r\t\36\37\16\n\r\a\17\b\23\24E\t\n\t\4\r\t\23\5\34\x1d5\4\1\'\16\x8f\2\6\17\a\5\a\16\b\4\b\r%\t\36O\16\n\r\16\a\23\4\xf5\0\r\t\r\4\3\21\4-5\3\2\1\a\b\a\16\xef\1\a\17\a\5\27\b\4\30\25\4\b.O\16\n\4\b\16#\4U\24S\1\3e\2\1\20\b\17\16\xdf\1\36\r(\0\2\r\5\3\4\b\36_\16\32\r\b\a#\4E\24\x93\1\4E\6\2\3\2\0\a\xdf\1\16\a \21\2\23\0\3\b._\32\t\4\a\6C\4\25\4\xf3\0\21\23\x145\a\6\1\3\0\1F\a\17\16\a&\2\20\1\20\3\r\6\2\3\2\0\4\n\36O\16\32\t\b\5\a\b\3\4\3\21\xf3\1\4E\4\17\6\1\3\0\1\x101\0\22 B\27\2 \5\b\36\37\16\37\16\32\31\4\r\4\5\3\24\3\1\xf3\1\24E\a\17\a\2\0B\0b\6\2&\2\6\2\0\3\4\5\t\16/.*\30\4\r\25#\4\xe3\1\1\3\4e\16\37\a\6\x92\1\6 B\a$\b\36\17>\32\t\n\t\24%\xc3\2\24U\r\n\37\16\a\6b\b^\b\6\30\0\24^\a\32)\r\b5#\21\x83\2\24U\f\t\16?\aF\16\t\n\36\n\16\n\4\6(\n\37.*\b\31\30\x045\xb3\2\1\23\4E-\f\t\16o\32\35\31\32\17\a\4\0\b\32\a.*)\4\b\4E#\4\xf3\1\1\23\x045\4\b\35\4\r\f\n\16?\t\r\31%\t\n\36\31\n\r\b\32\16*\b\31\r\b\4U\xe3\2\24%\b\17\a=\f\v\n\36\37\b\n\t\r\25\t\16\17>\17\b\t\16\32\t(\r\b\4e\1\xe3\2\4%\6\a\17\b-,\33\t\n\t\n\36*/\36\17\16\n\b\n\30\35\30\4\x85\1\xe3\2\4%\a\17\27\17\4\a\35<\v\f\n\r\16/\16\17N\n\31\a\b\35\b\4\xa5\1\3\1\xb3\2\24\25\a/\b\16\a\b\a\6\b\r,\r\b\n\r\nn*\t\30\a\b\xd5\1\1\xd3\2\25\aO\b\16\30\a\36\a\t\f\35\t\n\r\32\16Z\t\30\27\xe5\1S\4\xa3\1\21\3\4\25\a_\a\b\17\a\b\16?\a\35\t\n\r\a\tJ\31\r\24\xf5\1\x83\2\21\24\25\a_\a\17\b\a\17\27\17\b\a\37-\t\n\t\32\t\b\35\24\xa5\2C\24\x83\1\1\3\4\3\4\5\bo\a\6\a\4\37\16\'\b\36\35)\r\24\xf5\2\3\x043\4\x93\1\4\5\b\24o\36\27\30\37\'\0\27\16\4\35$\r\26H\r\24\25\4\5\4\x85\1\xd3\1\1\3\24\b\4\5o\16\17\27\b\a\4\a\37\27\16\a\30\a\b\4\b7h\r4\5\4\x85\1\3\4\xc3\1\4\5\4\b\5\a\17\16?>\27\b\r\4\a\16/\a\5\b\17\b\a\17\a\xa8\1\r\24\5\24\x85\1\3\4\xc3\1\4%\ao\16\17\x0e7\b\4\b\x0e7\5\a\b\a\16\b\4\b\'\36\27\6(\r\24\30\x85\1'
)

Choix ici aussi bien dosé, l'affichage de Super Dupont semble toujours correct en 16 couleurs.

Voilà, si tu es sur une des plateformes aux mémoires de stockage et heap limitées, et si tu juges le script converti par défaut trop gros relativement à la complexité de l'image que tu as fournie, c'est très probablement qu'il y a surabondance de couleurs et il te suffira tout simplement d'en réduire le nombre maximal.

Un gros merci à Afyu, cent20 et redgl0w qui ont rendu cette mise à jour possible ! :favorite:


Liens :
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 44.8%
 
Posts: 41624
Images: 15184
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Mise à jour img2calc Python: miroir + optimisations pale

Unread postby SlyVTT » 26 Jan 2022, 18:57

Super boulot 👍️

Du coup c'est quoi l'algo de réduction de palette ? C'est basé sur du dithering avec Floyd-Steinberg ?
avec ensuite du RLE pour la compression ?
Some works in progress :
The GUI Toolkit NF for nSpireMyShmup for fxCG-50Magic Light for Casio Graph 90+E
and
Magic Light for nSpire CX/CX-II
Simple Text Editor for nSpireOutRun for Casio Graph 90+E
95%
50%
100%
75%
100%
And more to come ... stay tuned
User avatar
SlyVTTPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 44.4%
 
Posts: 504
Images: 31
Joined: 19 Jan 2021, 09:41
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
GitHub: SlyVTT

Re: Mise à jour img2calc Python: miroir + optimisations pale

Unread postby critor » 26 Jan 2022, 19:24

Merci.

Le dithering est désactivé lors du traitement initial des images, parce que gênant la compression RLE.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 44.8%
 
Posts: 41624
Images: 15184
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor

Re: Mise à jour img2calc Python: miroir + optimisations pale

Unread postby SlyVTT » 26 Jan 2022, 19:38

oui effectivement, la distribution de l'erreur sur les pixels environnant casse le concept de RLE.
Some works in progress :
The GUI Toolkit NF for nSpireMyShmup for fxCG-50Magic Light for Casio Graph 90+E
and
Magic Light for nSpire CX/CX-II
Simple Text Editor for nSpireOutRun for Casio Graph 90+E
95%
50%
100%
75%
100%
And more to come ... stay tuned
User avatar
SlyVTTPremium
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 44.4%
 
Posts: 504
Images: 31
Joined: 19 Jan 2021, 09:41
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
GitHub: SlyVTT

Re: Mise à jour img2calc Python: miroir + optimisations pale

Unread postby critor » 26 Jan 2022, 21:08

Par contre le dithering reste actif pour tout ce qui n'utilise pas de compression RLE. Entre autres :
  • les variables TI-Basic :
    • PicX : palette système 16 couleurs fixes (dont 1 transparente)
    • ImageX : couleurs RGB-565 brutes
  • les variables Casio Basic : au choix couleurs RGB-565 brutes ou palette système 8 couleurs fixes, avec double compression deflate + Adler-32
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 44.8%
 
Posts: 41624
Images: 15184
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
MyCalcs profile
YouTube: critor3000
Twitter: critor2000
GitHub: critor


Return to News Divers

Who is online

Users browsing this forum: No registered users and 126 guests

-
Search
-
Social TI-Planet
-
Featured topics
"1 calculatrice pour tous", le programme solidaire de Texas Instruments. Reçois gratuitement et sans aucune obligation d'achat, 5 calculatrices couleur programmables en Python à donner aux élèves les plus nécessiteux de ton lycée. Tu peux recevoir au choix 5 TI-82 Advanced Edition Python ou bien 5 TI-83 Premium CE Edition Python.
Enseignant(e), reçois gratuitement 1 exemplaire de test de la TI-82 Advanced Edition Python. À demander d'ici le 31 décembre 2024.
Offre de test des nouveautés de rentrée 2024 par Casio. Enseignant(e), reçois gratuitement 1 exemplaire, à ton choix, de la Graph Light ou bien de la Graph Math+
14€ remboursés par Casio sur l'achat de ta calculatrice Graph 35 d'ici le 31 Octobre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 90+E d'ici le 31 Décembre 2024
10€ remboursés par Casio sur l'achat de ta calculatrice Graph 25 d'ici le 31 Décembre 2024
8€ remboursés par Casio sur l'achat de ta calculatrice Graph Math+ d'ici le 31 Octobre 2024
Reprise de ton ancienne fx-92 Collège ou Graph 25/35/90 à 3€ peu importe son état. Même non fonctionnelle et donc invendable, même ancienne Graph 35 non conforme aux programmes (pas de Python), même ancienne Graph 25/35 inutilisable aux examens (pas de mode examen) et donc invendable. Etiquette de retour fournie, pas de frais de port à payer.
3€ remboursés par Casio sur l'achat de ta calculatrice fx-92 Collège d'ici le 30 Septembre 2024
5€ de remise immédiate sur l'achat de ta calculatrice TI-83 Premium CE Edition Python chez les revendeurs partenaires
4€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced Edition Python chez les revendeurs partenaires
3€ de remise immédiate sur l'achat de ta calculatrice TI-82 Advanced chez les revendeurs partenaires
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
1234567891011121314
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
2295 utilisateurs:
>2233 invités
>58 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)