grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a BjŒj‰ƒã@s¸ddlmZmZddlZddlZz ddlZWney>Yn0ddlmZm Z ddl m Z ddl m Z mZmZmZe dƒdeeeddƒƒƒZd Zd ZdZd Zd Zd ZedeZedZdZdZedeZedZeZgd¢Z gd¢Z!gd¢Z"gd¢Z#gd¢Z$e$dd„e Dƒdd„e!DƒZ%e$dd„e"Dƒdd„e#DƒZ&dZ'dZ(dZ)dZ*d Z+d!Z,d"Z-d#Z.d Z/d$Z0d%Z1d&Z2d'Z3d(Z4d)Z5d*Z6d+Z7e'e)Be*Be2Be3Be5Be4Be6Be7BZ8e(e,Be-BZ9d,Z:d-Z;d.Zd1Z?d2Z@d3ZAd4ZBd5ZCd6ZDd7ZEd8ZFd9ZGd:ZHd;ZIde?e@eAeBeCeDeEeFeGeHeIeJgZKe4e6e3e5e2e7d=œZLd>d?„ZMeMe dƒZNeMdge!d@gdƒZOeMe"dƒZPeMdge#d@gdƒZQdAd„e DƒZRdBd„e!DƒZSdCd„e"DƒZTdDd„e#DƒZUdEd„eVd ƒDƒZWdFd„eVdGƒDƒZXdHd„eVd ƒDƒZYdId„eVdGƒDƒZZdJdK„Z[dLdM„Z\dNdO„Z]dPdQ„Z^dRdS„Z_dTdU„Z`dVdW„ZadXdY„ZbdZd[„ZcGd\d]„d]edƒZeGd^d_„d_efƒZgGd`da„daefƒZhGdbdc„dcedƒZiGddde„deee jjefƒƒZkdfdg„Zlemdhk�r´elƒdS)ié)ÚdivisionÚprint_functionN)ÚStoppingContextÚ int_scale)Úsignals)ÚBÚbytes3ÚxrangeÚwith_metaclassú?é ézupdate palette entryzinput descriptors changedééééééé)ré_é‡é¯é×éÿ)rééé&é0é:éDéNéXébélévé€é„é”éžé¨é²é¼éÆéÐéÚéäéî)ré‹éÍr)é.é\ésr1é¢é¹r-éç))rrr)r2rr)rr2r)r2r2r)rrr0)r2rr2)rr2r2)éår9r9)ér:r:)rrr)rrr)rrr)r4r4r)rrr)rrr)rrrcCs*g|]"}tD]}tD]}|||f‘qq qS©)Ú_CUBE_STEPS_256©Ú.0ÚrÚgÚbr;r;ú:/usr/lib64/python3.9/site-packages/urwid/display_common.pyÚ GsÿrCcCsg|]}|||f‘qSr;r;©r>Zgrr;r;rBrCIócCs*g|]"}tD]}tD]}|||f‘qq qSr;)Ú_CUBE_STEPS_88r=r;r;rBrCKsÿcCsg|]}|||f‘qSr;r;rDr;r;rBrCMrEiÿÿÿl~ÿlll l@l€llllll l@llÚdefaultZblackzdark redz dark greenZbrownz dark bluez dark magentaz dark cyanz light grayz dark grayz light redz light greenZyellowz light bluez light magentaz light cyanZwhite)ÚboldÚitalicsÚ underlineÚblinkÚstandoutÚ strikethroughcsldg‡fdd„ttˆƒdƒDƒ|g}g}tt|ƒdƒD](}||d||}| |g|¡q>|S)a1 Generate a lookup table for finding the closest item in values. Lookup returns (index into values)+1 values -- list of values in ascending order, all < size size -- size of lookup table and maximum value >>> _value_lookup_table([0, 7, 9], 10) [0, 0, 0, 0, 1, 1, 1, 1, 2, 2] rcs(g|] }ˆ|ˆ|ddd‘qS)rér;)r>Úi©Úvaluesr;rBrC¡sÿz'_value_lookup_table..r)ÚrangeÚlenÚextend)rQÚsizeZ middle_valuesZ lookup_tablerOÚcountr;rPrBÚ_value_lookup_table•s ÿÿrWrcCsg|]}t|ddƒ‘qS©r r©r©r>Únr;r;rBrC°rEcCsg|]}t|ddƒ‘qS©r éerYrZr;r;rBrC±rEcCsg|]}t|ddƒ‘qSrXrYrZr;r;rBrC²rEcCsg|]}t|ddƒ‘qSr\rYrZr;r;rBrC³rEcCsg|]}tt|ddƒ‘qS©rr )Ú_CUBE_256_LOOKUPrrZr;r;rBrC¶sÿcCsg|]}tt|ddƒ‘qS©r]r )Ú_GRAY_256_LOOKUPrrZr;r;rBrC¸sÿr]cCsg|]}tt|ddƒ‘qSr^)Ú_CUBE_88_LOOKUPrrZr;r;rBrCºsÿcCsg|]}tt|ddƒ‘qSr`)Ú_GRAY_88_LOOKUPrrZr;r;rBrC¼sÿcCs(|d8}|dkrtS|tkr tSt|S)z´Return ths color number for gray number gnum. Color cube black and white are returned for 0 and 25 respectively since those values aren't included in the gray scale. rr)Ú _CUBE_BLACKÚ_GRAY_SIZE_256Ú_CUBE_WHITE_256Ú_GRAY_START_256©Zgnumr;r;rBÚ _gray_num_256Ès ricCs(|d8}|dkrtS|tkr tSt|S)z³Return ths color number for gray number gnum. Color cube black and white are returned for 0 and 9 respectively since those values aren't included in the gray scale. rr)rdÚ _GRAY_SIZE_88Ú_CUBE_WHITE_88Ú_GRAY_START_88rhr;r;rBÚ _gray_num_88Ùs rmcCsd|S)Nz#%06xr;)Únumr;r;rBÚ_color_desc_trueêsrocCsv|tkrd|S|tkrf|t8}|t|t}}|t|t}}|t}dt|t|t|fSdt|tS)a® Return a string description of color number num. 0..15 -> 'h0'..'h15' basic colors (as high-colors) 16..231 -> '#000'..'#fff' color cube colors 232..255 -> 'g3'..'g93' grays >>> _color_desc_256(15) 'h15' >>> _color_desc_256(16) '#000' >>> _color_desc_256(17) '#006' >>> _color_desc_256(230) '#ffd' >>> _color_desc_256(233) 'g7' >>> _color_desc_256(234) 'g11' úh%dú#%x%x%xúg%d)Ú _CUBE_STARTrgÚ_CUBE_SIZE_256Ú_CUBE_STEPS_256_16Ú_GRAY_STEPS_256_101©rnrAr@r?r;r;rBÚ_color_desc_256îsÿrxcCsn|tkrd|S|tkr^|t8}|t|t}}|t|t}}dt|t|t|fSdt|tS)a¤ Return a string description of color number num. 0..15 -> 'h0'..'h15' basic colors (as high-colors) 16..79 -> '#000'..'#fff' color cube colors 80..87 -> 'g18'..'g90' grays >>> _color_desc_88(15) 'h15' >>> _color_desc_88(16) '#000' >>> _color_desc_88(17) '#008' >>> _color_desc_88(78) '#ffc' >>> _color_desc_88(81) 'g36' >>> _color_desc_88(82) 'g45' rprqrr)rsrlÚ _CUBE_SIZE_88Ú_CUBE_STEPS_88_16Ú_GRAY_STEPS_88_101rwr;r;rBÚ_color_desc_88sÿr|cCs–t|ƒ}|dur2t|\}}}|d>|d>|S| d¡s@dSt|ƒdkrb|dd…}t|dƒSt|ƒdkr’d|d|d|d f}t|dƒSdS) Nrrú#érrz 0x%s0%s0%srNr)Ú_parse_color_256Ú_COLOR_VALUES_256Ú startswithrSÚint)ÚdescÚcr?r@rAÚhr;r;rBÚ_parse_color_true/s      r†cCs®t|ƒdkrdS�z€| d¡rLt|dd…dƒ}|dks@|dkrFWdS|WS| d¡rØt|ƒdkrØt|dd…d ƒ}|dkr‚WdS|d |d }}|d |d }}t|}t|}t|}t|t|t|WS| d ¡�rt|d d…d ƒ}|dk�s |dk�rWdSt|}nH| d ¡�r\t|dd…dƒ}|dk�sL|d k�rRWdSt|}nWdS|dk�rrtWS|d8}|t k�rŠt WSt |WSt �y¨YdS0dS)aó Return a color number for the description desc. 'h0'..'h255' -> 0..255 actual color number '#000'..'#fff' -> 16..231 color cube colors 'g0'..'g100' -> 16, 232..255, 231 grays and color cube black/white 'g#00'..'g#ff' -> 16, 232...255, 231 gray and color cube black/white Returns None if desc is invalid. >>> _parse_color_256('h142') 142 >>> _parse_color_256('#f00') 196 >>> _parse_color_256('g100') 231 >>> _parse_color_256('g#80') 244 rNr…ré rrr}rúg#rNr@éd) rSr�r‚Ú_CUBE_256_LOOKUP_16rsrtraÚ_GRAY_256_LOOKUP_101rdrerfrgÚ ValueError©rƒrnZrgbrAr@r?Zgrayr;r;rBr@sJ         rc Cs\| d¡rt|ƒdksdStdd dd„|dd…|dd…|dd…fDƒ¡ƒ}t|ƒS) Nr}r~ÚcSs g|]}tt|dƒddƒ‘qS)rÚx)Úformatr‚©r>r�r;r;rBrCŠsÿz _true_to_256..rré)r�rSrÚjoinrx)rƒZc256r;r;rBÚ _true_to_256…s  þ r”cCsÚt|ƒdkr(|dd…|d|d}t|ƒdkr8dS�z„| d¡rtt|d d…d ƒ}|dksh|d krnWdS|WS| d ¡�rt|ƒdk�rt|d d…d ƒ}|dkr®WdS|d |d }}|d |d }}t|}t|}t|}t|t|t|WS| d¡�rFt|dd…d ƒ}|dk�s6|dk�r 0..87 actual color number '#000'..'#fff' -> 16..79 color cube colors 'g0'..'g100' -> 16, 80..87, 79 grays and color cube black/white 'g#00'..'g#ff' -> 16, 80...87, 79 gray and color cube black/white Returns None if desc is invalid. >>> _parse_color_88('h142') >>> _parse_color_88('h42') 42 >>> _parse_color_88('#f00') 64 >>> _parse_color_88('g100') 79 >>> _parse_color_88('g#80') 83 r~rrNrr’rNr…rr‡éWr}rrˆrr@r‰) rSr�r‚Ú_CUBE_88_LOOKUP_16rsryrcÚ_GRAY_88_LOOKUP_101rdrjrkrlrŒr�r;r;rBÚ_parse_color_88’sN          r˜c@s eZdZdS)Ú AttrSpecErrorN©Ú__name__Ú __module__Ú __qualname__r;r;r;rBr™Ùsr™c@s0eZdZd(dd„Zedd„ƒZedd„ƒZedd„ƒZedd„ƒZed d„ƒZ ed d„ƒZ ed d„ƒZ ed d„ƒZ ed d„ƒZ edd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZdd„ZeeƒZdd„Zdd„Zdd„Zdd„ZeeeƒZdd„Zdd „ZeeeƒZd!d"„Zd#d$„Zd%d&„Ze j!Z!d'S))ÚAttrSpecr cCsf|dvrtd|ƒ‚dt|dkBt|dkB|_||_||_|j|krbtdt|ƒt|ƒ|fƒ‚dS)a fg -- a string containing a comma-separated foreground color and settings Color values: 'default' (use the terminal's default foreground), 'black', 'dark red', 'dark green', 'brown', 'dark blue', 'dark magenta', 'dark cyan', 'light gray', 'dark gray', 'light red', 'light green', 'yellow', 'light blue', 'light magenta', 'light cyan', 'white' High-color example values: '#009' (0% red, 0% green, 60% red, like HTML colors) '#23facc' (RRGGBB hex color code) '#fcc' (100% red, 80% green, 80% blue) 'g40' (40% gray, decimal), 'g#cc' (80% gray, hex), '#000', 'g0', 'g#00' (black), '#fff', 'g100', 'g#ff' (white) 'h8' (color number 8), 'h255' (color number 255) Setting: 'bold', 'italics', 'underline', 'blink', 'standout', 'strikethrough' Some terminals use 'bold' for bright colors. Most terminals ignore the 'blink' setting. If the color is not given then 'default' will be assumed. bg -- a string containing the background color Color values: 'default' (use the terminal's default background), 'black', 'dark red', 'dark green', 'brown', 'dark blue', 'dark magenta', 'dark cyan', 'light gray' High-color exaples: see fg examples above An empty string will be treated the same as 'default'. colors -- the maximum colors available for the specification Valid values include: 1, 16, 88, 256, and 2**24. High-color values are only usable with 88, 256, or 2**24 colors. With 1 color only the foreground settings may be used. >>> AttrSpec('dark red', 'light gray', 16) AttrSpec('dark red', 'light gray') >>> AttrSpec('yellow, underline, bold', 'dark blue') AttrSpec('yellow,bold,underline', 'dark blue') >>> AttrSpec('#ddb', '#004', 256) # closest colors will be found AttrSpec('#dda', '#006') >>> AttrSpec('#ddb', '#004', 88) AttrSpec('#ccc', '#000', colors=88) )rrr!r ézinvalid number of colors (%d).rr!rŸzPforeground/background (%s/%s) require more colors than have been specified (%d).N)r™Ú_HIGH_88_COLORÚ_HIGH_TRUE_COLORÚ_valueÚ foregroundÚ backgroundÚcolorsÚrepr)ÚselfZfgÚbgr¥r;r;rBÚ__init__Ýs8  þzAttrSpec.__init__cCs|jt@dkS©Nr)r¢Ú_FG_BASIC_COLOR©Úsr;r;rBÚrEzAttrSpec.cCs|jt@dkSrª)r¢Ú_FG_HIGH_COLORr¬r;r;rBr® rEcCs|jt@dkSrª)r¢Ú_FG_TRUE_COLORr¬r;r;rBr®!rEcCs |jt@S©N)r¢Ú_FG_COLOR_MASKr¬r;r;rBr®"rEcCs|jt@dkSrª)r¢Ú_BG_BASIC_COLORr¬r;r;rBr®#rEcCs|jt@dkSrª)r¢Ú_BG_HIGH_COLORr¬r;r;rBr®$rEcCs|jt@dkSrª)r¢Ú_BG_TRUE_COLORr¬r;r;rBr®%rEcCs|jt@t?Sr±)r¢Ú_BG_COLOR_MASKÚ _BG_SHIFTr¬r;r;rBr®&sÿcCs|jt@dkSrª)r¢Ú_ITALICSr¬r;r;rBr®(rEcCs|jt@dkSrª)r¢Ú_BOLDr¬r;r;rBr®)rEcCs|jt@dkSrª)r¢Ú _UNDERLINEr¬r;r;rBr®*rEcCs|jt@dkSrª)r¢Ú_BLINKr¬r;r;rBr®+rEcCs|jt@dkSrª)r¢Ú _STANDOUTr¬r;r;rBr®,rEcCs|jt@dkSrª)r¢Ú_STRIKETHROUGHr¬r;r;rBr®-rEcCsH|jt@rdS|jttB@r dS|jttB@r2dS|jttB@rDdSdS)zh Return the maximum colors required for this object. Returns 256, 88, 16 or 1. r!r rŸrr)r¢r r´r¯rµr°r³©r§r;r;rBÚ_colors/s zAttrSpec._colorscCs2d|j|jf}|jdkr"|d}d|jj|fS)z\ Return an executable python representation of the AttrSpec object. z%r, %rr!z , colors=88z%s(%s))r£r¤r¥Ú __class__r›)r§Úargsr;r;rBÚ__repr__@s zAttrSpec.__repr__cCsX|js|js|jsdS|jr&t|jS|jdkr:t|jƒS|jdkrNt|jƒSt|jƒS)z2Return only the color component of the foreground.rGr!rŸ) Úforeground_basicÚforeground_highÚforeground_trueÚ _BASIC_COLORSÚforeground_numberr¥r|rorxr¾r;r;rBÚ_foreground_colorKs     zAttrSpec._foreground_colorcCsD| ¡d|jd|jd|jd|jd|jd|jS)Nz,boldz,italicsz ,standoutz,blinkz ,underlinez,strikethrough)rÈrHrIrLrKrJrMr¾r;r;rBÚ _foregroundWsÿÿþþýýzAttrSpec._foregroundcCs>d}d}| d¡D�]}| ¡}|tvrZ|t|@rLtdt|ƒt|ƒfƒ‚|t|O}q|dvrhd}nl|tvr„t |¡}|tO}nP|jt @r t |ƒ}|t O}n4|jt @r¼t |ƒ}|tO}ntt|ƒpÈ|ƒ}|t O}|durôtdt|ƒt|ƒfƒ‚|du�rtdt|ƒfƒ‚|}q|du�r$d}|jt@|B|B|_dS)Nrú,z5Setting %s specified more thanonce in foreground (%s)©rŽrGz6Unrecognised color specification %s in foreground (%s)z-More than one color given for foreground (%s))ÚsplitÚstripÚ _ATTRIBUTESr™r¦rÆÚindexr«r¢r r˜r¯r¡r†r°rr”Ú_FG_MASK)r§r£ÚcolorÚflagsÚpartZscolorr;r;rBÚ_set_foreground]sL ÿÿ       ÿ ÿ zAttrSpec._set_foregroundcCsX|js|js|jsdS|jr&t|jS|jt@r:t|jƒS|jdkrNt |jƒSt |jƒS)zReturn the background color.rGrŸ) Úbackground_basicÚbackground_highÚbackground_truerÆÚbackground_numberr¢r r|r¥rorxr¾r;r;rBÚ _backgroundˆs     zAttrSpec._backgroundcCs¶d}|dvrd}nl|tvr.t |¡}|tO}nP|jt@rJt|ƒ}|tO}n4|jt@rft|ƒ}|t O}nt t |ƒpr|ƒ}|tO}|dur˜t dt |ƒfƒ‚|jt@|t>B|B|_dS)NrrËz3Unrecognised color specification in background (%s))rÆrÏr³r¢r r˜r´r¡r†rµrr”r™r¦Ú_BG_MASKr·)r§r¤rÒrÑr;r;rBÚ_set_background”s&      ÿzAttrSpec._set_backgroundcCs |js|js|jsd}nf|jdkr.t|j}nP|jdkrtd|j}tdd„|dd…|dd …|d d …fDƒƒ}n t|j}|js˜|j s˜|j s˜|dS|jdkr°|t|j S|jdkrød|j }|td d„|dd…|dd …|d d …fDƒƒS|t|j Sd S) a. Return (fg_red, fg_green, fg_blue, bg_red, bg_green, bg_blue) color components. Each component is in the range 0-255. Values are taken from the XTerm defaults and may not exactly match the user's terminal. If the foreground or background is 'default' then all their compenents will be returned as None. >>> AttrSpec('yellow', '#ccf', colors=88).get_rgb_values() (255, 255, 0, 205, 205, 255) >>> AttrSpec('default', 'g92').get_rgb_values() (None, None, None, 238, 238, 238) )NNNr!rŸz%06xcSsg|]}t|dƒ‘qS©r©r‚r‘r;r;rBrCÀrEz+AttrSpec.get_rgb_values..rrNrrcSsg|]}t|dƒ‘qSrÜrÝr‘r;r;rBrCËrEN) rÃrÄrÅr¥Ú_COLOR_VALUES_88rÇÚtupler€rÕrÖr×rØ)r§Zvalsr…r;r;rBÚget_rgb_values«s     2    4zAttrSpec.get_rgb_valuescCst|tƒo|j|jkSr±)Ú isinstanceržr¢©r§Úotherr;r;rBÚ__eq__ÏszAttrSpec.__eq__cCs ||k Sr±r;râr;r;rBÚ__ne__ÒszAttrSpec.__ne__N)r )"r›rœr�r©ÚpropertyrÃrÄrÅrÇrÕrÖr×rØrIrHrJrKrLrMr¿r¥rÂrÈrÉrÔr£rÙrÛr¤ràräråÚobjectÚ__hash__r;r;r;rBržÜs: B                )   $ržcs&eZdZ‡fdd„Zddd„Z‡ZS)Ú RealTerminalcstt|ƒ ¡d|_d|_dS©NF)Úsuperrér©Ú_signal_keys_setZ_old_signal_keysr¾©rÀr;rBr©ÙszRealTerminal.__init__Nc CsV|durtj ¡}t |¡s dSt |¡}|d}|tj|tj|tj |tj |tj f} |dkrjd}|dkrvd}|dkr‚d}|dkrŽd}|dkršd}|dur°||dtj<|durÆ||dtj<|durÜ||dtj <|durò||dtj <|du�r ||dtj <|du�s<|du�s<|du�s<|du�s<|du�rRt  |tj |¡d|_| S)a Read and/or set the tty's signal character settings. This function returns the current settings as a tuple. Use the string 'undefined' to unmap keys from their signals. The value None is used when no change is being made. Setting signal keys is done using the integer ascii code for the key, eg. 3 for CTRL+C. If this function is called after start() has been called then the original settings will be restored when stop() is called. NrZ undefinedrT)ÚsysÚstdinÚfilenoÚosÚisattyÚtermiosZ tcgetattrZVINTRZVQUITZVSTARTZVSTOPZVSUSPZ tcsetattrZ TCSADRAINrì) r§ZintrÚquitÚstartÚstopZsusprðZtattrZsattrZskeysr;r;rBÚtty_signal_keysÞs<   þ     ÿÿþzRealTerminal.tty_signal_keys)NNNNNN)r›rœr�r©r÷Ú __classcell__r;r;rírBréØs ÿréc@s eZdZdS)Ú ScreenErrorNršr;r;r;rBrù srùcsneZdZdZeegZ‡fdd„Zedd„ƒZ dd„Z dd „Z d d „Z d d „Z dd„Zdd„Zddd„Z‡ZS)Ú BaseScreenzD Base class for Screen classes (raw_display.Screen, .. etc) cstt|ƒ ¡i|_d|_dSrê)rërúr©Ú_paletteÚ_startedr¾rír;rBr©szBaseScreen.__init__cCs|jSr±)rür¾r;r;rBr®rEzBaseScreen.cOs$|jsd|_|j|i|¤Žt|ƒS)aySet up the screen. If the screen has already been started, does nothing. May be used as a context manager, in which case :meth:`stop` will automatically be called at the end of the block: with screen.start(): ... You shouldn't override this method in a subclass; instead, override :meth:`_start`. T)rüÚ_startr)r§rÁÚkwargsr;r;rBrõs zBaseScreen.startcCsdSr±r;r¾r;r;rBrý/szBaseScreen._startcCs|jr| ¡d|_dSrê)rüÚ_stopr¾r;r;rBrö2szBaseScreen.stopcCsdSr±r;r¾r;r;rBrÿ7szBaseScreen._stopcOs:|j|i|¤Ž�|ƒWdƒS1s,0YdS)z·Start the screen, call a function, then stop the screen. Extra arguments are passed to `start`. Deprecated in favor of calling `start` as a context manager. N)rõ)r§ÚfnrÁrþr;r;rBÚ run_wrapper:szBaseScreen.run_wrappercCsp|D]f}t|ƒdvr |j|Žqt|ƒdkr.large_hr!) ržÚtyperßr“ÚDEFAULTrZ emit_signalÚUPDATE_PALETTE_ENTRYrû) r§rr£r¤ZmonorÄrÖZbasicZhigh_256Z high_truerZhigh_88r;r;rBras(9        ÿz!BaseScreen.register_palette_entry)NNN)r›rœr�Ú__doc__r ÚINPUT_DESCRIPTORS_CHANGEDrr©ræÚstartedrõrýrörÿrrrrør;r;rírBrús   ÿrúcCsddl}| ¡dSrª)ÚdoctestZtestmod)rr;r;rBÚ_testÀsrÚ__main__)nZ __future__rrrñrîróÚ ImportErrorZ urwid.utilrrZurwidrZ urwid.compatrrr r ÚlistZUNPRINTABLE_TRANS_TABLEr r Z _BASIC_STARTrsrtrergrfryrjrlrkrdr<Z_GRAY_STEPS_256rFZ_GRAY_STEPS_88Z_BASIC_COLOR_VALUESr€rÞr²r¶r«r¯r°r³r´rµr·r r¡r¼rºr¹r»r¸r½rÐrÚr ZBLACKZDARK_REDZ DARK_GREENZBROWNZ DARK_BLUEZ DARK_MAGENTAZ DARK_CYANZ LIGHT_GRAYZ DARK_GRAYZ LIGHT_REDZ LIGHT_GREENZYELLOWZ LIGHT_BLUEZ LIGHT_MAGENTAZ LIGHT_CYANZWHITErÆrÎrWr_rarbrcrurvrzr{rRrŠr‹r–r—rirmrorxr|r†rr”r˜Ú Exceptionr™rçržrérùZ MetaSignalsrúrr›r;r;r;rBÚs,      ÿ ý ÿ ý ÿÿÿÿÿÿ ðú   ÿÿÿÿ ! E G}51