From a8c81a1ddf9e0ae485f0d00b25cbb0868e60a1b9 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Fri, 12 Mar 2021 18:25:17 -0600 Subject: [PATCH 01/11] allow 360 degree rotation, update a lot of edge cases, add resize function --- adafruit_displayio_layout/widgets/dial.py | 917 ++++++++++++++++++++++ 1 file changed, 917 insertions(+) create mode 100755 adafruit_displayio_layout/widgets/dial.py diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py new file mode 100755 index 0000000..1961f5e --- /dev/null +++ b/adafruit_displayio_layout/widgets/dial.py @@ -0,0 +1,917 @@ +# SPDX-FileCopyrightText: 2021 Kevin Matocha +# +# SPDX-License-Identifier: MIT +""" + +`dial` +================================================================================ +A dial gauge widget for displaying graphical information. + +* Author(s): Kevin Matocha + +Implementation Notes +-------------------- + +**Hardware:** + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +import gc +import math +import displayio +import vectorio +import bitmaptools + +from adafruit_displayio_layout.widgets.widget import Widget +from adafruit_display_shapes.triangle import Triangle +from adafruit_display_text import bitmap_label +#from bitmap_scale_rotate import blit_rotate_scale + +class Dial(Widget): + """A dial widget. The origin is set using ``x`` and ``y``. + + :param int x: pixel position + :param int y: pixel position + :param int width: width in pixels + :param int height: height in pixels - is ignored + :param int angle: dial rotation, in degrees, maximum value is 180 degrees. + :param float value: the value to display + :param Boolean display_value: show the value on the dial + :param float min_value: the minimum value on the dial + :param float max_value: the maximum value on the dial + :param float anchor_point: (X,Y) values from 0.0 to 1.0 to define the anchor + point relative to the bounding box + :param int anchored_position: (x,y) pixel value for the location + of the anchor_point + + :param tick_color: tick line color (RGB tuple or 24-bit hex value) + + :param int major_ticks: number of major ticks + :param int major_tick_stroke: major tick line width, in pixels + :param int major_tick_length: major tick length, in pixels + :param str major_tick_labels: array of strings for major tick labels + :param tick_label_font: font to be used for tick label + :param tick_label_color: color for the tick labels + :param Boolean angle_tick_labels: Set True if the tick_labels should be angled + + :param int minor_ticks: number of minor ticks (per major tick) + :param int minor_tick_stroke: minor tick line width, in pixels + :param int minor_tick_length: minor tick length, in pixels + + + :param background_color: background color (RGB tuple + or 24-bit hex value), set None for transparent + + ..figure:: gui_layout_coordinates.png + :scale: 50 % + :alt: Diagram of layout coordinates + + Diagram showing the global and local coordinates and the associated + class variables. + """ + + # The dial is a subclass of Group->Widget. + + def __init__( + self, + width=100, + height=100, + padding=0, # keepout amount around border, in pixels + sweep_angle=90, # maximum value is 180 degrees + start_angle=None, + clip_needle=False, # trims off the needle outside of the dial region, used for sweep_angles < 180 + needle_width=1, # triangle with this base width at the radius center, best if this is odd + needle_color=0x880000, + value=0, + value_font=None, + display_value=True, + value_color=0xFF0000, + value_format_string=':0.0f', + min_value=0.0, + max_value=100.0, + anchor_point=None, + anchored_position=None, + tick_color=0xFFFFFF, + major_ticks=5, # if int, the total number of major ticks + major_tick_stroke=3, + major_tick_length=10, + major_tick_labels=["0", "25", "50", "75", "100"], + minor_ticks=5, # if int, the number of minor ticks per major tick + minor_tick_stroke=1, + minor_tick_length=5, + tick_label_font=None, + tick_label_color=0x880000, + rotate_tick_labels=True, + tick_label_scale=1.0, + background_color=None, + label_anchor_point=(0.5, -1.0), # default label position uses (x-center point, y-text baseline) + label_anchor_on_widget=(0.5, 0.5), # default label position on widget + **kwargs, + ): + + # initialize the Widget superclass (x, y, scale) + super().__init__(**kwargs, max_size=3) + # Define how many graphical elements will be in this group + # using "max_size=XX" + # + # Group elements for SwitchRoundHorizontal: + # 0. TileGrid holding bitmap with ticks and tick label text + # 1. Value label (optional) + # 2. Needle bitmap + + self._value = value + self._value_font = value_font + self._value_color = value_color + self._display_value = display_value + self._value_format_string = value_format_string + + self._anchor_point = anchor_point + self._anchored_position = anchored_position + + # validate sweep_angle and start_angle + if sweep_angle > 360: + raise ValueError("sweep_angle must be <= 360 degrees") + + sweep_angle = max(1, sweep_angle) # constrain to >= 1 to avoid divide by zero errors + self._sweep_angle = sweep_angle + + if start_angle is None: + start_angle = -sweep_angle / 2 + elif not (-360 <= start_angle <= 360): + raise ValueError("start_angle must be between -360 and +360 degrees") + self._start_angle = start_angle + + self._clip_needle = clip_needle + self._needle_width_requested = needle_width + self._needle_color = needle_color + self._background_color = background_color + + self._min_value = min_value + self._max_value = max_value + + self._major_tick_labels = major_tick_labels + + self._tick_color = tick_color + self._tick_label_color = tick_label_color + self._tick_label_font = tick_label_font + self._tick_label_scale = tick_label_scale + self._rotate_tick_labels = rotate_tick_labels + + self._major_ticks = major_ticks + self._major_tick_stroke = major_tick_stroke + self._major_tick_length = major_tick_length + self._minor_ticks = minor_ticks + self._minor_tick_stroke = minor_tick_stroke + self._minor_tick_length = minor_tick_length + + self._label_anchor_point = label_anchor_point + self._label_anchor_on_widget = label_anchor_on_widget + + self._padding = padding + + self._initialize_dial(width, height) + + def _initialize_dial(self, width, height): + + for i in range(len(self)): + self.pop() + + # get the tick label font height + self._font_height = self._get_font_height(font=self._tick_label_font, scale=self._tick_label_scale) + + self._adjust_dimensions(width, height) + self._bounding_box = [0, 0, self._width, self._height] + self._update_position() + + self._dial_palette = displayio.Palette(4) + + if (self._background_color is None): + self._dial_palette.make_transparent(0) + self._dial_palette[0] = 0x000000 + else: + self._dial_palette[0] = self._background_color + self._dial_palette[1] = self._tick_color + self._dial_palette[2] = self._tick_label_color + self._dial_bitmap = displayio.Bitmap( + self._width, self._height, 3 + ) # 3 colors: background, ticks, tick label text + self._dial_tilegrid = displayio.TileGrid( + self._dial_bitmap, pixel_shader=self._dial_palette + ) + + self.append(self._dial_tilegrid) + + if self._display_value: + self._value_label = ( + bitmap_label.Label( + self._value_font, + text=str(self._value), + color=self._value_color, + baseline_alignment=True, + ) + ) + self._value_label.anchor_point = self._label_anchor_point + self._value_label.anchored_position = [ + round(self._width * self._label_anchor_on_widget[0]), + round(self._height * self._label_anchor_on_widget[1]), + ] + self.append(self._value_label) + + self._update_value() + + self._create_needle() + + self.append(self._needle_vector_shape) + self._update_needle(self._value, initial_draw=True) + + _draw_ticks( + target_bitmap=self._dial_bitmap, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + tick_count=self._major_ticks, + tick_stroke=self._major_tick_stroke, + tick_length=self._major_tick_length, + start_angle=self._start_angle, + sweep_angle=self._sweep_angle, + tick_color_index=1, + ) + + _draw_ticks( + target_bitmap=self._dial_bitmap, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + tick_count=self._minor_ticks * (self._major_ticks - 1) + 1, + tick_stroke=self._minor_tick_stroke, + tick_length=self._minor_tick_length, + start_angle=self._start_angle, + sweep_angle=self._sweep_angle, + tick_color_index=1, + ) + + _draw_labels( + target_bitmap=self._dial_bitmap, + font=self._tick_label_font, + tick_labels=self._major_tick_labels, + dial_center=self._dial_center, + dial_radius=self._dial_radius, + start_angle=self._start_angle, + sweep_angle=self._sweep_angle, + rotate_labels=self._rotate_tick_labels, + font_height=self._font_height, + font_color_index=2, + tick_label_scale=self._tick_label_scale, + ) + + + + def _adjust_dimensions(self, width, height): + # get normalized dimensions of the dial based on start_angle and sweep_angle + # in units of diameter + + # if the sweep angle is < 180, then adjust size if needle should clipped: + if (self._sweep_angle < 180) and (self._clip_needle): + [left, top, right, bottom, xCenter_calc, yCenter_calc] = _getCoords([self._start_angle, self._start_angle+self._sweep_angle], ignore_center=True) + else: + [left, top, right, bottom, xCenter_calc, yCenter_calc] = _getCoords([self._start_angle, self._start_angle+self._sweep_angle]) + + # calculate the pixel dimension to fit within width/height (including padding) + if (width-2*self._padding < 0) or (height-2*self._padding < 0): + raise ValueError('Width, height, or padding size makes zero sized box') + requested_aspect_ratio=(width-2*self._padding)/(height-2*self._padding) + box_aspect_ratio = (right-left)/(bottom-top) + + if (box_aspect_ratio >= requested_aspect_ratio): + # keep width and adjust the width + self._width = width + self._height = math.ceil( (width - 2 * self._padding) / box_aspect_ratio ) + (2 * self._padding) + radius = round( (width - 2 * self._padding) / (2 * (right - left)) ) + + else: + # keep height and adjust the width + self._height = height + self._width = math.ceil( ((height - 2 * self._padding) * box_aspect_ratio) ) + (2 * self._padding) + radius = round( (height - 2 * self._padding) / (2 * (bottom-top)) ) + + centerX = round(xCenter_calc*radius*2) + self._padding + centerY = round(yCenter_calc*radius*2) + self._padding + self._dial_center = (centerX, centerY) + self._dial_radius = radius + + if self._clip_needle: # define the line endpoints that will trim off the needle + trim_x1 = round(centerX + math.sin(self._start_angle *2*math.pi/360) * (self._dial_radius - self._padding)) + trim_y1 = round(centerY - math.cos(self._start_angle *2*math.pi/360) * (self._dial_radius - self._padding)) + trim_x2 = round(centerX + math.sin( (self._start_angle+self._sweep_angle) *2*math.pi/360) * (self._dial_radius - self._padding)) + trim_y2 = round(centerY - math.cos( (self._start_angle+self._sweep_angle) *2*math.pi/360) * (self._dial_radius - self._padding)) + self._trim_line = [ (trim_x1, trim_y1), (trim_x2, trim_y2) ] + else: + self._trim_line = None + + def _get_font_height(self, font, scale): + if (self._major_tick_labels == []) or (font is None): + font_height = 0 + else: + if hasattr(font, "get_bounding_box"): + font_height = int( + scale * font.get_bounding_box()[1] + ) + elif hasattr(font, "ascent"): + font_height = int( + scale * font.ascent + font.ascent + ) + return font_height + + def _create_needle(self): + # Create the needle + self._needle_palette = displayio.Palette(2) + self._needle_palette.make_transparent(0) + self._needle_palette[1] = self._needle_color + + self._needle=vectorio.Polygon(points=[ (100,100), (100,50), (50,50), (50,100) ]) + self._needle_vector_shape = vectorio.VectorShape(shape=self._needle, + pixel_shader=self._needle_palette, + x=0, y=0, + ) + + # if clipped, adjust the needle width up according to the clip amount + if (self._sweep_angle < 180) and (self._clip_needle) and (self._trim_line is not None): + # calculate the line where the needle is most visible + max_visible_angle = (2*math.pi/360) * (self._start_angle + self._sweep_angle/2) + while True: + if max_visible_angle > math.pi: + max_visible_angle -= 2*math.pi + elif max_visible_angle < -math.pi: + max_visible_angle += 2*math.pi + else: + break + + print("max_visible_angle: {}".format(max_visible_angle * 360 / (2*math.pi))) + + temp_x = self._dial_center[0] + self._dial_radius * math.sin(max_visible_angle) + temp_y = self._dial_center[1] - self._dial_radius * math.cos(max_visible_angle) + + temp_line = [self._dial_center, (temp_x, temp_y)] + + x,y = _line_intersection(temp_line, self._trim_line) + + needle_length_showing = math.sqrt( (x-temp_x)**2 + (y-temp_y)**2 ) + self._needle_width = round(self._needle_width_requested * self._dial_radius/needle_length_showing) + + def _update_value(self): + + if self._display_value: + format_string = ('{'+self._value_format_string+'}').format(self._value) + self._value_label.text = format_string + + def _update_position(self): + if self._anchor_point is None or self._anchored_position is None: + pass + else: + self.x = ( + -self._bounding_box[0] + + self._anchored_position[0] + - int(self._anchor_point[0] * self._bounding_box[2]) + ) + self.y = ( + -self._bounding_box[1] + + self._anchored_position[1] + - int(self._anchor_point[1] * self._bounding_box[3]) + ) + + def _get_offset_position(self, position): + # Function to calculate the offset position (x, y, angle) of the moving + # elements of an animated widget + # input parameter `position` is a value from 0.0 to 1.0 indicating start + # and end position + # + # Designed to be flexible depending upon the widget's response + # + # values should be set in the __init__ function: + # self._x_motion: x-direction movement in pixels + # self._y_motion: y-direction movement in pixels + # self._angle_motion: angle movement + # + # A linear movement function (but can be modified for other motion acceleration) + if position < 0: + position = 0 + if position > 1: + position = 1 + + # if multiple elements are present, they could each have their own movement functions. + angle_offset = (2*math.pi/360) * (self._start_angle + self._sweep_angle * position) + + return angle_offset + + def _update_needle(self, value, initial_draw=False): + self._draw_position( + value / (self._max_value - self._min_value), initial_draw=initial_draw + ) # convert to position (0.0 to 1.0) + + def _draw_position(self, position, initial_draw=False): + # Draw the position of the slider. + # The position parameter is a float between 0 and 1 (0= off, 1= on). + + # Get the position offset from the motion function + angle_offset = self._get_offset_position(position) + + dx= self._needle_width/2 * math.cos(angle_offset) + dy= self._needle_width/2 * math.sin(angle_offset) + + x0=round( self._dial_center[0] - dx ) + y0=round( self._dial_center[1] - dy ) + + x1=round( self._dial_center[0] + dx ) + y1=round( self._dial_center[1] + dy ) + + x2=round( self._dial_center[0] + self._dial_radius * math.sin(angle_offset) ) + y2=round( self._dial_center[1] - self._dial_radius * math.cos(angle_offset) ) + + if ( (((2*math.pi/360) * self._sweep_angle ) < math.pi) and self._clip_needle ): + # clip the needle points by adjusting (x0,y0) and (x1,y1) + x0, y0 = _line_intersection( self._trim_line, [(x0, y0), (x2, y2)] ) + x1, y1 = _line_intersection( self._trim_line, [(x1, y1), (x2, y2)] ) + + if (x0==x1) and (y0==y1): + x1+=1 + y1+=1 + + self._needle.points=[ (x0,y0), (x1,y1), (x2,y2) ] + + def resize(self, new_width, new_height): + self._initialize_dial(new_width, new_height) + + @property + def value(self): + """The current switch value (Boolean).""" + return self._value + + @value.setter + def value(self, new_value): + + if new_value != self._value: + self._value = new_value + self._update_value() + self._update_needle(self._value) + + @property + def value_font(self): + return self._value_font + + @value_font.setter + def value_font(self, new_font): + if self._display_value: + self._value_label.font=new_font + self._value_font=new_font + + @property + def value_color(self): + return self._value_color + + @value_font.setter + def value_color(self, new_color): + if self._display_value: + self._value_label.color=new_color + self._value_color=new_color + +def _draw_ticks( + target_bitmap, + *, + dial_center, + dial_radius, + tick_count, + tick_stroke, + tick_length, + start_angle, + sweep_angle, + tick_color_index, +): + # angle is in degrees + + if tick_count <= 1: + pass + else: + tick_bitmap = displayio.Bitmap( + tick_stroke, tick_length, 2 + ) # make a tick line bitmap for blitting + tick_bitmap.fill( + tick_color_index + ) # initialize the tick bitmap with the tick_color_index + + # print("dial_radius: {}".format(dial_radius)) + # print("bitmap width: {} height: {}".format(target_bitmap.width, target_bitmap.height)) + for i in range(tick_count): + this_angle = round((start_angle + ( (i * sweep_angle / (tick_count - 1)) )) * (2 * math.pi / 360), 4) # in radians + target_position_x = dial_center[0] + dial_radius * math.sin(this_angle) + target_position_y = dial_center[1] - dial_radius * math.cos(this_angle) + #print('this_angle: {}, i: {}, tick_count: {}'.format(this_angle*180/math.pi, i, tick_count)) + + # print("target position x,y: {},{}".format(target_position_x, target_position_y)) + + if "rotozoom" in dir(bitmaptools): # if core function is available + bitmaptools.rotozoom(target_bitmap, + ox=round(target_position_x), + oy=round(target_position_y), + source_bitmap=tick_bitmap, + px=round(tick_bitmap.width / 2), + py=0, + angle=this_angle, # in radians + ) + + else: + blit_rotate_scale( # translate and rotate the tick into the target_bitmap + destination=target_bitmap, + ox=target_position_x, + oy=target_position_y, + source=tick_bitmap, + px=int(tick_bitmap.width / 2), + py=0, + angle=this_angle, # in radians + ) + + +def _draw_labels( + target_bitmap, + *, + font, + tick_labels, + dial_center, + dial_radius, + start_angle, + sweep_angle, + font_height, + font_color_index=2, + rotate_labels=True, + tick_label_scale, +): + # input angles are in degrees + + label_count = len(tick_labels) + + for i, this_label_text in enumerate(tick_labels): + + temp_label = bitmap_label.Label( + font, text=this_label_text + ) # make a tick line bitmap for blitting + # may need to convert color + + this_angle = (2*math.pi/360) * (start_angle + i * sweep_angle / ( + label_count - 1 + ) ) # in radians + + target_position_x = dial_center[0] + ( + dial_radius + font_height // 2 + ) * math.sin(this_angle) + target_position_y = dial_center[1] - ( + dial_radius + font_height // 2 + ) * math.cos(this_angle) + + # print("target position x,y: {},{}".format(target_position_x, target_position_y)) + + if rotate_labels: + pass + else: + this_angle = 0 + + + if "rotozoom" in dir(bitmaptools): # if core function is available + bitmaptools.rotozoom(target_bitmap, + ox=round(target_position_x), + oy=round(target_position_y), + source_bitmap=temp_label.bitmap, + px=round(temp_label.bitmap.width // 2), + py=round(temp_label.bitmap.height // 2), + angle=this_angle, + scale=tick_label_scale, + ) + + else: + blit_rotate_scale( # translate and rotate the tick into the target_bitmap + destination=target_bitmap, + ox=round(target_position_x), + oy=round(target_position_y), + source=temp_label.bitmap, + px=round(temp_label.bitmap.width // 2), + py=round(temp_label.bitmap.height // 2), + angle=this_angle, + scale=tick_label_scale, + ) + + +# * Copyright (c) 2017 Werner Stoop +# * +# * Permission is hereby granted, free of charge, to any person obtaining a copy +# * of this software and associated documentation files (the "Software"), to deal +# * in the Software without restriction, including without limitation the rights +# * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# * copies of the Software, and to permit persons to whom the Software is +# * furnished to do so, subject to the following conditions: +# * +# * The above copyright notice and this permission notice shall be included in all +# * copies or substantial portions of the Software. +# * +# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# * SOFTWARE. + + +# Credit from https://github.com/wernsey/bitmap +# MIT License from +# * Copyright (c) 2017 Werner Stoop +# +# /** +# * #### `void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale);` +# * +# * Rotates a source bitmap `src` around a pivot point `px,py` and blits it onto a destination bitmap `dst`. +# * +# * The bitmap is positioned such that the point `px,py` on the source is at the offset `ox,oy` on the destination. +# * +# * The `angle` is clockwise, in radians. The bitmap is also scaled by the factor `scale`. +# */ +# void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale); + + +# /* +# Reference: +# "Fast Bitmap Rotation and Scaling" By Steven Mortimer, Dr Dobbs' Journal, July 01, 2001 +# http://www.drdobbs.com/architecture-and-design/fast-bitmap-rotation-and-scaling/184416337 +# See also http://www.efg2.com/Lab/ImageProcessing/RotateScanline.htm +# */ + +import math + +def blit_rotate_scale( + destination, # destination bitmap + ox=None, + oy=None, # (ox, oy) is the destination point where the source (px,py) is placed + dest_clip0=None, + dest_clip1=None, # clip0,1 is (x,y) corners of clip window on the destination bitmap + source=None, # source bitmap + px=None, + py=None, # (px, py) is the rotation point of the source bitmap + source_clip0=None, + source_clip1=None, # clip0,1 is (x,y) corners of clip window on the source bitmap + angle=0, # in radians, clockwise + scale=1.0, # scale factor (float) + skip_index=None, # color index to ignore +): + if source is None: + pass + + # Check the input limits + + if ox is None: + ox = destination.width / 2 + if oy is None: + oy = destination.height / 2 + if px is None: + px = source.width / 2 + if py is None: + py = source.height / 2 + + if dest_clip0 is None: + dest_clip0 = (0, 0) + if dest_clip1 is None: + dest_clip1 = (destination.width, destination.height) + + if source_clip0 is None: + source_clip0 = (0, 0) + if source_clip1 is None: + source_clip1 = (source.width, source.height) + + minx = dest_clip1[0] + miny = dest_clip1[1] + maxx = dest_clip0[0] + maxy = dest_clip0[1] + + sinAngle = math.sin(angle) + cosAngle = math.cos(angle) + + dx = -cosAngle * px * scale + sinAngle * py * scale + ox + dy = -sinAngle * px * scale - cosAngle * py * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(dy) + dx = cosAngle * (source.width - px) * scale + sinAngle * py * scale + ox + dy = sinAngle * (source.width - px) * scale - cosAngle * py * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + dx = ( + cosAngle * (source.width - px) * scale + - sinAngle * (source.height - py) * scale + + ox + ) + dy = ( + sinAngle * (source.width - px) * scale + + cosAngle * (source.height - py) * scale + + oy + ) + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + dx = -cosAngle * px * scale - sinAngle * (source.height - py) * scale + ox + dy = -sinAngle * px * scale + cosAngle * (source.height - py) * scale + oy + if dx < minx: + minx = int(round(dx)) + if dx > maxx: + maxx = int(round(dx)) + if dy < miny: + miny = int(round(dy)) + if dy > maxy: + maxy = int(round(dy)) + + # /* Clipping */ + if minx < dest_clip0[0]: + minx = dest_clip0[0] + if maxx > dest_clip1[0] - 1: + maxx = dest_clip1[0] - 1 + if miny < dest_clip0[1]: + miny = dest_clip0[1] + if maxy > dest_clip1[1] - 1: + maxy = dest_clip1[1] - 1 + + dvCol = math.cos(angle) / scale + duCol = math.sin(angle) / scale + + duRow = dvCol + dvRow = -duCol + + startu = px - (ox * dvCol + oy * duCol) + startv = py - (ox * dvRow + oy * duRow) + + rowu = startu + miny * duCol + rowv = startv + miny * dvCol + + for y in range(miny, maxy + 1): # (y = miny, y <= maxy, y++) + u = rowu + minx * duRow + v = rowv + minx * dvRow + for x in range(minx, maxx + 1): # (x = minx, x <= maxx, x++) + if (source_clip0[0] <= u < source_clip1[0]) and ( + source_clip0[1] <= v < source_clip1[1] + ): + # get the pixel color (c) from the source bitmap at (u,v) + c = source[ + int(u) + source.width * int(v) + ] # direct index into bitmap is faster than tuple + # c = source[int(u), int(v)] + + if c != skip_index: # ignore any pixels with skip_index + # place the pixel color (c) into the destination bitmap at (x,y) + destination[ + x + y * destination.width + ] = c # direct index into bitmap is faster than tuple + # destination[x,y] = c + u += duRow + v += dvRow + + rowu += duCol + rowv += dvCol + + +# Circle size calculations based on the angle intervals requested +# Algorithm source +# https://math.stackexchange.com/questions/45303/how-to-get-rectangular-size-of-arbitrary-circular-sector + +def _isInInterval(theta, interval): + theta = theta % 360 + i = interval[0] % 360 + f = interval[1] % 360 + if (i < f): + return ( (theta >= i) and (theta <= f) ) + else: + return (not ( (theta < i) and (theta > f) ) ) + +def _getXcoord(theta): + return ( (1+math.cos(theta * 2 * math.pi / 360))/2 ) + +def _getYcoord(theta): + return ( (1+math.sin(theta * 2 * math.pi / 360))/2 ) + +def _getCoords(interval, ignore_center=False): + # This functions gets the maximum dimensions of + # a rectangle required to contain a partial circle with + # the interval of (start_angle, end_angle) + # + # Parameter: + # interval = [start_angle, end_angle] + # + # Coordinates for calculations + # 0 degrees is up + # Circle diameter = 1.0 + # circle center is always at (0.5, 0.5) + # upper left direction is (0.0, 0.0) + # + # Returns: + # (left, top, right, bottom, xCenter_offet, yCenter_offset) + # coordinates of the minimum bounding box + # and the xCenter_offset, yCenter_offset distance between + # the upper left corner and the circle center + + + i = interval[0] + f = interval[1] + + xi = _getXcoord(i) + yi = _getYcoord(i) + xf = _getXcoord(f) + yf = _getYcoord(f) + + is0 = _isInInterval(0, interval) + is90 = _isInInterval(90, interval) + is180 = _isInInterval(180, interval) + is270 = _isInInterval(270, interval) + + if is0: + top = 1.0 + top_raw = top + else: + if ignore_center: + top = max(xi, xf) + else: + top = max(xi, xf, 0.5) + top_raw = max(xi, xf, 0.5) + + if is90: + right = 1.0 + else: + if ignore_center: + right = max(yi, yf) + else: + right = max(yi, yf, 0.5) + + if is180: + bottom = 0 + else: + if ignore_center: + bottom = min(xi, xf) + else: + bottom = min(xi, xf, 0.5) + + if is270: + left = 0 + left_raw = left + else: + if ignore_center: + left = min(yi, yf) + else: + left = min(yi, yf, 0.5) + left_raw = min(yi, yf, 0.5) + + xCenter_offset = 0.5 - left + yCenter_offset = 0.5 - top + + # Correct coordinates so that upper left corner is (0,0) + # Center is always at coordinate (0.5, 0.5) + # All coordinates are in units of the circle's diameter + # x,y Center_offset is the center point's offset relative to the upper left corner + + # (left, top, right, bottom, xCenter_offet, yCenter_offset) + return [left, 1-top, right, 1-bottom, xCenter_offset, -yCenter_offset] + + +# Calculate the intersection point between two lines +# Source: +# https://stackoverflow.com/questions/20677795/how-do-i-compute-the-intersection-point-of-two-lines + +def _line_intersection(line1, line2): + xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0]) + ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1]) + + def _det(a, b): + return a[0] * b[1] - a[1] * b[0] + + div = _det(xdiff, ydiff) + if div == 0: + raise Exception('lines do not intersect') + + d = (_det(*line1), _det(*line2)) + x = _det(d, xdiff) / div + y = _det(d, ydiff) / div + return round(x), round(y) + + From a477a03602ba560063dd711dba0e377a9bb369bf Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 14:16:19 -0600 Subject: [PATCH 02/11] update doc strings, black and pylint fixes --- adafruit_displayio_layout/widgets/dial.py | 587 +++++++++++++--------- docs/api.rst | 7 + docs/conf.py | 10 +- 3 files changed, 374 insertions(+), 230 deletions(-) diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index 1961f5e..5139319 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -21,58 +21,76 @@ """ -import gc +# pylint: disable=too-many-lines, too-many-instance-attributes, too-many-arguments +# pylint: disable=too-many-locals + + import math import displayio import vectorio -import bitmaptools -from adafruit_displayio_layout.widgets.widget import Widget -from adafruit_display_shapes.triangle import Triangle +try: + import bitmaptools +except NameError: + pass # utilize the blit_rotate_scale function defined herein + from adafruit_display_text import bitmap_label -#from bitmap_scale_rotate import blit_rotate_scale +from adafruit_displayio_layout.widgets.widget import Widget + class Dial(Widget): """A dial widget. The origin is set using ``x`` and ``y``. :param int x: pixel position :param int y: pixel position - :param int width: width in pixels - :param int height: height in pixels - is ignored - :param int angle: dial rotation, in degrees, maximum value is 180 degrees. - :param float value: the value to display - :param Boolean display_value: show the value on the dial - :param float min_value: the minimum value on the dial - :param float max_value: the maximum value on the dial - :param float anchor_point: (X,Y) values from 0.0 to 1.0 to define the anchor - point relative to the bounding box - :param int anchored_position: (x,y) pixel value for the location - of the anchor_point - - :param tick_color: tick line color (RGB tuple or 24-bit hex value) + :param int width: requested width in pixels + :param int height: requested height in pixels + :param int padding: keepout padding amount around the border, in pixels + + :param float sweep_angle: dial rotation, in degrees, maximum value is 360 degrees + :param float start_angle: starting angle, in degrees. Defaults + to `None` for symmetry along vertical axis + + :param float min_value: the minimum value displayed on the dial + :param float max_value: the maximum value displayed the dial + :param float value: the value to display (if None, defaults to ``min_value``) + + :param Boolean display_value: set `True` to display a value label on the dial + :param Font value_font: the font for the value label + :param int value_color: the color for the value label + :param str value_format_string: the format string for displaying the value label + (defaults to ':0.0f' to show the value rounded to the nearest whole number) + :param (float,float) value_label_anchor_point: anchor point on the label + :param (float,float) value_label_anchor_point_on_widget: anchor point on the widget where the + label will be placed + + :param int needle_width: requested pixel width of the triangular needle + :param int needle_color: color value for the needle, defaults to red (0xFF0000) + + :param int tick_color: tick line color (24-bit hex value) :param int major_ticks: number of major ticks - :param int major_tick_stroke: major tick line width, in pixels + :param int major_tick_stroke: major tick line stroke width, in pixels :param int major_tick_length: major tick length, in pixels - :param str major_tick_labels: array of strings for major tick labels - :param tick_label_font: font to be used for tick label - :param tick_label_color: color for the tick labels - :param Boolean angle_tick_labels: Set True if the tick_labels should be angled + :param str major_tick_labels: array of strings for the major tick labels + :param float tick_label_scale: the scaling of the tick labels, default = 1.0 + :param Font tick_label_font: font to be used for major tick labels + :param int tick_label_color: color for the major tick labels + :param Boolean angle_tick_labels: set True to rotate the major tick labels to + match the tick angle :param int minor_ticks: number of minor ticks (per major tick) - :param int minor_tick_stroke: minor tick line width, in pixels + :param int minor_tick_stroke: minor tick line stroke width, in pixels :param int minor_tick_length: minor tick length, in pixels - - :param background_color: background color (RGB tuple + :param int background_color: background color (RGB tuple or 24-bit hex value), set None for transparent - ..figure:: gui_layout_coordinates.png - :scale: 50 % - :alt: Diagram of layout coordinates - Diagram showing the global and local coordinates and the associated - class variables. + :param (float,float) anchor_point: (X,Y) values from 0.0 to 1.0 to define the dial's + anchor point relative to the dial's bounding box + :param (int,int) anchored_position: (x,y) pixel value for the location + of the `anchor_point` """ # The dial is a subclass of Group->Widget. @@ -82,26 +100,28 @@ def __init__( width=100, height=100, padding=0, # keepout amount around border, in pixels - sweep_angle=90, # maximum value is 180 degrees + sweep_angle=90, # maximum value is 180 degrees start_angle=None, - clip_needle=False, # trims off the needle outside of the dial region, used for sweep_angles < 180 - needle_width=1, # triangle with this base width at the radius center, best if this is odd + clip_needle=False, + # trims off the needle outside of the dial region, used for sweep_angles < 180 + needle_width=3, + # triangle with this base width, best if this is odd needle_color=0x880000, - value=0, + value=None, value_font=None, display_value=True, value_color=0xFF0000, - value_format_string=':0.0f', + value_format_string=":0.0f", min_value=0.0, max_value=100.0, anchor_point=None, anchored_position=None, tick_color=0xFFFFFF, - major_ticks=5, # if int, the total number of major ticks + major_ticks=5, # if int, the total number of major ticks major_tick_stroke=3, major_tick_length=10, - major_tick_labels=["0", "25", "50", "75", "100"], - minor_ticks=5, # if int, the number of minor ticks per major tick + major_tick_labels=("0", "25", "50", "75", "100"), + minor_ticks=5, # if int, the number of minor ticks per major tick minor_tick_stroke=1, minor_tick_length=5, tick_label_font=None, @@ -109,8 +129,11 @@ def __init__( rotate_tick_labels=True, tick_label_scale=1.0, background_color=None, - label_anchor_point=(0.5, -1.0), # default label position uses (x-center point, y-text baseline) - label_anchor_on_widget=(0.5, 0.5), # default label position on widget + value_label_anchor_point=( + 0.5, + -1.0, + ), # default label position uses (x-center point, y-text baseline) + value_label_anchor_on_widget=(0.5, 0.5), # default label position on widget **kwargs, ): @@ -124,7 +147,13 @@ def __init__( # 1. Value label (optional) # 2. Needle bitmap - self._value = value + self._min_value = min_value + self._max_value = max_value + if value is None: # if none, set to the minimum value + self._value = self._min_value + else: + self._value = value + self._value_font = value_font self._value_color = value_color self._display_value = display_value @@ -137,12 +166,14 @@ def __init__( if sweep_angle > 360: raise ValueError("sweep_angle must be <= 360 degrees") - sweep_angle = max(1, sweep_angle) # constrain to >= 1 to avoid divide by zero errors + sweep_angle = max( + 1, sweep_angle + ) # constrain to >= 1 to avoid divide by zero errors self._sweep_angle = sweep_angle if start_angle is None: start_angle = -sweep_angle / 2 - elif not (-360 <= start_angle <= 360): + elif not -360 <= start_angle <= 360: raise ValueError("start_angle must be between -360 and +360 degrees") self._start_angle = start_angle @@ -151,9 +182,6 @@ def __init__( self._needle_color = needle_color self._background_color = background_color - self._min_value = min_value - self._max_value = max_value - self._major_tick_labels = major_tick_labels self._tick_color = tick_color @@ -169,68 +197,45 @@ def __init__( self._minor_tick_stroke = minor_tick_stroke self._minor_tick_length = minor_tick_length - self._label_anchor_point = label_anchor_point - self._label_anchor_on_widget = label_anchor_on_widget + self._label_anchor_point = value_label_anchor_point + self._label_anchor_on_widget = value_label_anchor_on_widget self._padding = padding + # initialize variables before creating the dial + self._dial_center = None + self._dial_radius = None + self._trim_line = None + self._needle_palette = None + self._needle = None + self._needle_vector_shape = None + self._needle_width = None + self._initialize_dial(width, height) def _initialize_dial(self, width, height): - for i in range(len(self)): + for _ in range(len(self)): self.pop() # get the tick label font height - self._font_height = self._get_font_height(font=self._tick_label_font, scale=self._tick_label_scale) + self._font_height = self._get_font_height( + font=self._tick_label_font, scale=self._tick_label_scale + ) + # update the dial dimensions to fit inside the requested width and height self._adjust_dimensions(width, height) self._bounding_box = [0, 0, self._width, self._height] self._update_position() - self._dial_palette = displayio.Palette(4) - - if (self._background_color is None): - self._dial_palette.make_transparent(0) - self._dial_palette[0] = 0x000000 - else: - self._dial_palette[0] = self._background_color - self._dial_palette[1] = self._tick_color - self._dial_palette[2] = self._tick_label_color - self._dial_bitmap = displayio.Bitmap( + # create the dial palette and bitmaps + self.dial_bitmap = displayio.Bitmap( self._width, self._height, 3 ) # 3 colors: background, ticks, tick label text - self._dial_tilegrid = displayio.TileGrid( - self._dial_bitmap, pixel_shader=self._dial_palette - ) - self.append(self._dial_tilegrid) - - if self._display_value: - self._value_label = ( - bitmap_label.Label( - self._value_font, - text=str(self._value), - color=self._value_color, - baseline_alignment=True, - ) - ) - self._value_label.anchor_point = self._label_anchor_point - self._value_label.anchored_position = [ - round(self._width * self._label_anchor_on_widget[0]), - round(self._height * self._label_anchor_on_widget[1]), - ] - self.append(self._value_label) - - self._update_value() - - self._create_needle() - - self.append(self._needle_vector_shape) - self._update_needle(self._value, initial_draw=True) - - _draw_ticks( - target_bitmap=self._dial_bitmap, + # paint the dial major and minor ticks and labels + draw_ticks( # major ticks + target_bitmap=self.dial_bitmap, dial_center=self._dial_center, dial_radius=self._dial_radius, tick_count=self._major_ticks, @@ -241,8 +246,8 @@ def _initialize_dial(self, width, height): tick_color_index=1, ) - _draw_ticks( - target_bitmap=self._dial_bitmap, + draw_ticks( # minor ticks + target_bitmap=self.dial_bitmap, dial_center=self._dial_center, dial_radius=self._dial_radius, tick_count=self._minor_ticks * (self._major_ticks - 1) + 1, @@ -253,8 +258,8 @@ def _initialize_dial(self, width, height): tick_color_index=1, ) - _draw_labels( - target_bitmap=self._dial_bitmap, + draw_labels( + target_bitmap=self.dial_bitmap, font=self._tick_label_font, tick_labels=self._major_tick_labels, dial_center=self._dial_center, @@ -263,11 +268,45 @@ def _initialize_dial(self, width, height): sweep_angle=self._sweep_angle, rotate_labels=self._rotate_tick_labels, font_height=self._font_height, - font_color_index=2, tick_label_scale=self._tick_label_scale, ) + # create the dial palette + self.dial_palette = displayio.Palette(4) + if self._background_color is None: + self.dial_palette.make_transparent(0) + self.dial_palette[0] = 0x000000 + else: + self.dial_palette[0] = self._background_color + self.dial_palette[1] = self._tick_color + self.dial_palette[2] = self._tick_label_color + + # create the dial tilegrid and append to the self Widget->Group + self.dial_tilegrid = displayio.TileGrid( + self.dial_bitmap, pixel_shader=self.dial_palette + ) + self.append(self.dial_tilegrid) + # create the label for the display_value + if self._display_value: + self._value_label = bitmap_label.Label( + self._value_font, + text="", + color=self._value_color, + baseline_alignment=True, + ) + self._value_label.anchor_point = self._label_anchor_point + self._value_label.anchored_position = [ + round(self._width * self._label_anchor_on_widget[0]), + round(self._height * self._label_anchor_on_widget[1]), + ] + self._update_value() + self.append(self._value_label) + + # create the needle + self._create_needle() + self.append(self._needle_vector_shape) + self._update_needle(self._value) def _adjust_dimensions(self, width, height): # get normalized dimensions of the dial based on start_angle and sweep_angle @@ -275,39 +314,66 @@ def _adjust_dimensions(self, width, height): # if the sweep angle is < 180, then adjust size if needle should clipped: if (self._sweep_angle < 180) and (self._clip_needle): - [left, top, right, bottom, xCenter_calc, yCenter_calc] = _getCoords([self._start_angle, self._start_angle+self._sweep_angle], ignore_center=True) + [left, top, right, bottom, x_center_calc, y_center_calc] = _getCoords( + [self._start_angle, self._start_angle + self._sweep_angle], + ignore_center=True, + ) else: - [left, top, right, bottom, xCenter_calc, yCenter_calc] = _getCoords([self._start_angle, self._start_angle+self._sweep_angle]) + [left, top, right, bottom, x_center_calc, y_center_calc] = _getCoords( + [self._start_angle, self._start_angle + self._sweep_angle] + ) # calculate the pixel dimension to fit within width/height (including padding) - if (width-2*self._padding < 0) or (height-2*self._padding < 0): - raise ValueError('Width, height, or padding size makes zero sized box') - requested_aspect_ratio=(width-2*self._padding)/(height-2*self._padding) - box_aspect_ratio = (right-left)/(bottom-top) + if (width - 2 * self._padding < 0) or (height - 2 * self._padding < 0): + raise ValueError("Width, height, or padding size makes zero sized box") + requested_aspect_ratio = (width - 2 * self._padding) / ( + height - 2 * self._padding + ) + box_aspect_ratio = (right - left) / (bottom - top) - if (box_aspect_ratio >= requested_aspect_ratio): + if box_aspect_ratio >= requested_aspect_ratio: # keep width and adjust the width self._width = width - self._height = math.ceil( (width - 2 * self._padding) / box_aspect_ratio ) + (2 * self._padding) - radius = round( (width - 2 * self._padding) / (2 * (right - left)) ) + self._height = math.ceil((width - 2 * self._padding) / box_aspect_ratio) + ( + 2 * self._padding + ) + radius = round((width - 2 * self._padding) / (2 * (right - left))) else: # keep height and adjust the width self._height = height - self._width = math.ceil( ((height - 2 * self._padding) * box_aspect_ratio) ) + (2 * self._padding) - radius = round( (height - 2 * self._padding) / (2 * (bottom-top)) ) - - centerX = round(xCenter_calc*radius*2) + self._padding - centerY = round(yCenter_calc*radius*2) + self._padding - self._dial_center = (centerX, centerY) + self._width = math.ceil( + ((height - 2 * self._padding) * box_aspect_ratio) + ) + (2 * self._padding) + radius = round((height - 2 * self._padding) / (2 * (bottom - top))) + + center_x = round(x_center_calc * radius * 2) + self._padding + center_y = round(y_center_calc * radius * 2) + self._padding + self._dial_center = (center_x, center_y) self._dial_radius = radius - if self._clip_needle: # define the line endpoints that will trim off the needle - trim_x1 = round(centerX + math.sin(self._start_angle *2*math.pi/360) * (self._dial_radius - self._padding)) - trim_y1 = round(centerY - math.cos(self._start_angle *2*math.pi/360) * (self._dial_radius - self._padding)) - trim_x2 = round(centerX + math.sin( (self._start_angle+self._sweep_angle) *2*math.pi/360) * (self._dial_radius - self._padding)) - trim_y2 = round(centerY - math.cos( (self._start_angle+self._sweep_angle) *2*math.pi/360) * (self._dial_radius - self._padding)) - self._trim_line = [ (trim_x1, trim_y1), (trim_x2, trim_y2) ] + if self._clip_needle: # define the line endpoints that will trim off the needle + trim_x1 = round( + center_x + + math.sin(self._start_angle * 2 * math.pi / 360) + * (self._dial_radius - self._padding) + ) + trim_y1 = round( + center_y + - math.cos(self._start_angle * 2 * math.pi / 360) + * (self._dial_radius - self._padding) + ) + trim_x2 = round( + center_x + + math.sin((self._start_angle + self._sweep_angle) * 2 * math.pi / 360) + * (self._dial_radius - self._padding) + ) + trim_y2 = round( + center_y + - math.cos((self._start_angle + self._sweep_angle) * 2 * math.pi / 360) + * (self._dial_radius - self._padding) + ) + self._trim_line = [(trim_x1, trim_y1), (trim_x2, trim_y2)] else: self._trim_line = None @@ -316,13 +382,9 @@ def _get_font_height(self, font, scale): font_height = 0 else: if hasattr(font, "get_bounding_box"): - font_height = int( - scale * font.get_bounding_box()[1] - ) + font_height = int(scale * font.get_bounding_box()[1]) elif hasattr(font, "ascent"): - font_height = int( - scale * font.ascent + font.ascent - ) + font_height = int(scale * font.ascent + font.ascent) return font_height def _create_needle(self): @@ -331,40 +393,54 @@ def _create_needle(self): self._needle_palette.make_transparent(0) self._needle_palette[1] = self._needle_color - self._needle=vectorio.Polygon(points=[ (100,100), (100,50), (50,50), (50,100) ]) - self._needle_vector_shape = vectorio.VectorShape(shape=self._needle, - pixel_shader=self._needle_palette, - x=0, y=0, - ) + self._needle = vectorio.Polygon( + points=[(100, 100), (100, 50), (50, 50), (50, 100)] + ) + self._needle_vector_shape = vectorio.VectorShape( + shape=self._needle, + pixel_shader=self._needle_palette, + x=0, + y=0, + ) # if clipped, adjust the needle width up according to the clip amount - if (self._sweep_angle < 180) and (self._clip_needle) and (self._trim_line is not None): + if ( + (self._sweep_angle < 180) + and (self._clip_needle) + and (self._trim_line is not None) + ): # calculate the line where the needle is most visible - max_visible_angle = (2*math.pi/360) * (self._start_angle + self._sweep_angle/2) + max_visible_angle = (2 * math.pi / 360) * ( + self._start_angle + self._sweep_angle / 2 + ) while True: if max_visible_angle > math.pi: - max_visible_angle -= 2*math.pi + max_visible_angle -= 2 * math.pi elif max_visible_angle < -math.pi: - max_visible_angle += 2*math.pi + max_visible_angle += 2 * math.pi else: break - print("max_visible_angle: {}".format(max_visible_angle * 360 / (2*math.pi))) - - temp_x = self._dial_center[0] + self._dial_radius * math.sin(max_visible_angle) - temp_y = self._dial_center[1] - self._dial_radius * math.cos(max_visible_angle) + temp_x = self._dial_center[0] + self._dial_radius * math.sin( + max_visible_angle + ) + temp_y = self._dial_center[1] - self._dial_radius * math.cos( + max_visible_angle + ) temp_line = [self._dial_center, (temp_x, temp_y)] - x,y = _line_intersection(temp_line, self._trim_line) + x, y = _line_intersection(temp_line, self._trim_line) - needle_length_showing = math.sqrt( (x-temp_x)**2 + (y-temp_y)**2 ) - self._needle_width = round(self._needle_width_requested * self._dial_radius/needle_length_showing) + needle_length_showing = math.sqrt((x - temp_x) ** 2 + (y - temp_y) ** 2) + self._needle_width = round( + self._needle_width_requested * self._dial_radius / needle_length_showing + ) def _update_value(self): if self._display_value: - format_string = ('{'+self._value_format_string+'}').format(self._value) + format_string = ("{" + self._value_format_string + "}").format(self._value) self._value_label.text = format_string def _update_position(self): @@ -395,58 +471,63 @@ def _get_offset_position(self, position): # self._y_motion: y-direction movement in pixels # self._angle_motion: angle movement # - # A linear movement function (but can be modified for other motion acceleration) - if position < 0: - position = 0 - if position > 1: - position = 1 + # A linear movement function (but can be modified with "easing functions" + # for motion acceleration). # if multiple elements are present, they could each have their own movement functions. - angle_offset = (2*math.pi/360) * (self._start_angle + self._sweep_angle * position) + angle_offset = (2 * math.pi / 360) * ( + self._start_angle + self._sweep_angle * position + ) return angle_offset - def _update_needle(self, value, initial_draw=False): + def _update_needle(self, value): self._draw_position( - value / (self._max_value - self._min_value), initial_draw=initial_draw + value / (self._max_value - self._min_value) ) # convert to position (0.0 to 1.0) - def _draw_position(self, position, initial_draw=False): - # Draw the position of the slider. + def _draw_position(self, position): + # Draw the position of the needle. # The position parameter is a float between 0 and 1 (0= off, 1= on). # Get the position offset from the motion function angle_offset = self._get_offset_position(position) - dx= self._needle_width/2 * math.cos(angle_offset) - dy= self._needle_width/2 * math.sin(angle_offset) + d_x = self._needle_width / 2 * math.cos(angle_offset) + d_y = self._needle_width / 2 * math.sin(angle_offset) - x0=round( self._dial_center[0] - dx ) - y0=round( self._dial_center[1] - dy ) + x_0 = round(self._dial_center[0] - d_x) + y_0 = round(self._dial_center[1] - d_y) - x1=round( self._dial_center[0] + dx ) - y1=round( self._dial_center[1] + dy ) + x_1 = round(self._dial_center[0] + d_x) + y_1 = round(self._dial_center[1] + d_y) - x2=round( self._dial_center[0] + self._dial_radius * math.sin(angle_offset) ) - y2=round( self._dial_center[1] - self._dial_radius * math.cos(angle_offset) ) + x_2 = round(self._dial_center[0] + self._dial_radius * math.sin(angle_offset)) + y_2 = round(self._dial_center[1] - self._dial_radius * math.cos(angle_offset)) - if ( (((2*math.pi/360) * self._sweep_angle ) < math.pi) and self._clip_needle ): + if (((2 * math.pi / 360) * self._sweep_angle) < math.pi) and self._clip_needle: # clip the needle points by adjusting (x0,y0) and (x1,y1) - x0, y0 = _line_intersection( self._trim_line, [(x0, y0), (x2, y2)] ) - x1, y1 = _line_intersection( self._trim_line, [(x1, y1), (x2, y2)] ) + x_0, y_0 = _line_intersection(self._trim_line, [(x_0, y_0), (x_2, y_2)]) + x_1, y_1 = _line_intersection(self._trim_line, [(x_1, y_1), (x_2, y_2)]) - if (x0==x1) and (y0==y1): - x1+=1 - y1+=1 + if (x_0 == x_1) and (y_0 == y_1): + x_1 += 1 + y_1 += 1 - self._needle.points=[ (x0,y0), (x1,y1), (x2,y2) ] + self._needle.points = [(x_0, y_0), (x_1, y_1), (x_2, y_2)] def resize(self, new_width, new_height): + """Resizes the dial dimensions to the maximum size that will + fit within the requested bounding box size (``new_width``, ``new_height``) + + :param int new_width: requested width, in pixels + :param int new_height: requested height, in pixels + """ self._initialize_dial(new_width, new_height) @property def value(self): - """The current switch value (Boolean).""" + """The dial's value.""" return self._value @value.setter @@ -459,25 +540,48 @@ def value(self, new_value): @property def value_font(self): + """The font used for the value's label.""" return self._value_font @value_font.setter def value_font(self, new_font): if self._display_value: - self._value_label.font=new_font - self._value_font=new_font + self._value_label.font = new_font + self._value_font = new_font @property def value_color(self): + """The font color used for the value's label.""" return self._value_color - @value_font.setter + @value_color.setter def value_color(self, new_color): if self._display_value: - self._value_label.color=new_color - self._value_color=new_color + self._value_label.color = new_color + self._value_color = new_color + + @property + def dial_center(self): + """The (x,y) pixel location of the dial's center of rotation.""" + return self._dial_center -def _draw_ticks( + @property + def dial_radius(self): + """The length of the dial's radius, in pixels.""" + return self._dial_radius + + @property + def start_angle(self): + """The starting angle of the dial, in degrees.""" + return self._start_angle + + @property + def sweep_angle(self): + """The sweep angle of the dial, in degrees.""" + return self._sweep_angle + + +def draw_ticks( target_bitmap, *, dial_center, @@ -487,67 +591,94 @@ def _draw_ticks( tick_length, start_angle, sweep_angle, - tick_color_index, + tick_color_index=1, ): - # angle is in degrees + """Helper function for drawing ticks on the dial widget. + + :param displayio.Bitmap target_bitmap: Bitmap where ticks will be drawn into + :param (int,int) dial_center: the (x,y) pixel location in the bitmap of + the dial's center of rotation + :param int dial_radius: the radius of the dial (not including padding), in pixels + :param int tick_count: number of ticks to be drawn + :param int tick_stroke: the pixel width of the line used to draw the tick + :param float start_angle: starting angle of the dial, in degrees + :param float sweep_angle: total sweep angle of the dial, in degrees + :param int tick_color_index: the bitmap's color index that should be used for + drawing the tick marks + """ if tick_count <= 1: pass else: tick_bitmap = displayio.Bitmap( - tick_stroke, tick_length, 2 + tick_stroke, tick_length, tick_color_index + 1 ) # make a tick line bitmap for blitting tick_bitmap.fill( tick_color_index ) # initialize the tick bitmap with the tick_color_index - # print("dial_radius: {}".format(dial_radius)) - # print("bitmap width: {} height: {}".format(target_bitmap.width, target_bitmap.height)) for i in range(tick_count): - this_angle = round((start_angle + ( (i * sweep_angle / (tick_count - 1)) )) * (2 * math.pi / 360), 4) # in radians + this_angle = round( + (start_angle + ((i * sweep_angle / (tick_count - 1)))) + * (2 * math.pi / 360), + 4, + ) # in radians target_position_x = dial_center[0] + dial_radius * math.sin(this_angle) target_position_y = dial_center[1] - dial_radius * math.cos(this_angle) - #print('this_angle: {}, i: {}, tick_count: {}'.format(this_angle*180/math.pi, i, tick_count)) - - # print("target position x,y: {},{}".format(target_position_x, target_position_y)) if "rotozoom" in dir(bitmaptools): # if core function is available - bitmaptools.rotozoom(target_bitmap, + bitmaptools.rotozoom( + target_bitmap, ox=round(target_position_x), oy=round(target_position_y), source_bitmap=tick_bitmap, px=round(tick_bitmap.width / 2), py=0, - angle=this_angle, # in radians + angle=this_angle, # in radians ) else: - blit_rotate_scale( # translate and rotate the tick into the target_bitmap + _blit_rotate_scale( # translate and rotate the tick into the target_bitmap destination=target_bitmap, ox=target_position_x, oy=target_position_y, source=tick_bitmap, px=int(tick_bitmap.width / 2), py=0, - angle=this_angle, # in radians + angle=this_angle, # in radians ) -def _draw_labels( +def draw_labels( target_bitmap, *, font, + font_height, tick_labels, dial_center, dial_radius, start_angle, sweep_angle, - font_height, - font_color_index=2, rotate_labels=True, - tick_label_scale, + tick_label_scale=1.0, ): - # input angles are in degrees + """Helper function for drawing text labels on the dial widget. + + :param displayio.Bitmap target_bitmap: Bitmap where ticks will be drawn into + :param Font font: the font to be used to draw the tick mark text labels + :param int font_height: the height of the font, used for text placement + :param List[str] tick_labels: a list of strings for the tick text labels + :param (int,int) dial_center: the (x,y) pixel location in the bitmap of + the dial's center of rotation + :param int dial_radius: the radius of the dial (not including padding), in pixels + :param int tick_count: number of ticks to be drawn + :param int tick_stroke: the pixel width of the line used to draw the tick + :param float start_angle: starting angle of the dial, in degrees + :param float sweep_angle: total sweep angle of the dial, in degrees + :param bool rotate_labels: set to True if you want the label text to be rotated + to align with the tick marks + :param float tick_label_scale: scale factor for the tick text labels, default is 1.0 + """ label_count = len(tick_labels) @@ -556,11 +687,10 @@ def _draw_labels( temp_label = bitmap_label.Label( font, text=this_label_text ) # make a tick line bitmap for blitting - # may need to convert color - this_angle = (2*math.pi/360) * (start_angle + i * sweep_angle / ( - label_count - 1 - ) ) # in radians + this_angle = (2 * math.pi / 360) * ( + start_angle + i * sweep_angle / (label_count - 1) + ) # in radians target_position_x = dial_center[0] + ( dial_radius + font_height // 2 @@ -569,32 +699,30 @@ def _draw_labels( dial_radius + font_height // 2 ) * math.cos(this_angle) - # print("target position x,y: {},{}".format(target_position_x, target_position_y)) - if rotate_labels: pass else: this_angle = 0 - if "rotozoom" in dir(bitmaptools): # if core function is available - bitmaptools.rotozoom(target_bitmap, + bitmaptools.rotozoom( + target_bitmap, ox=round(target_position_x), oy=round(target_position_y), source_bitmap=temp_label.bitmap, - px=round(temp_label.bitmap.width // 2), + px=round(temp_label.bitmap.width // 2), py=round(temp_label.bitmap.height // 2), angle=this_angle, scale=tick_label_scale, ) else: - blit_rotate_scale( # translate and rotate the tick into the target_bitmap + _blit_rotate_scale( # translate and rotate the tick into the target_bitmap destination=target_bitmap, ox=round(target_position_x), oy=round(target_position_y), source=temp_label.bitmap, - px=round(temp_label.bitmap.width // 2), + px=round(temp_label.bitmap.width // 2), py=round(temp_label.bitmap.height // 2), angle=this_angle, scale=tick_label_scale, @@ -627,15 +755,20 @@ def _draw_labels( # * Copyright (c) 2017 Werner Stoop # # /** -# * #### `void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale);` +# * #### `void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, +# * int py, double angle, double scale);` # * -# * Rotates a source bitmap `src` around a pivot point `px,py` and blits it onto a destination bitmap `dst`. +# * Rotates a source bitmap `src` around a pivot point `px,py` and blits it +# * onto a destination bitmap `dst`. # * -# * The bitmap is positioned such that the point `px,py` on the source is at the offset `ox,oy` on the destination. +# * The bitmap is positioned such that the point `px,py` on the source is at +# * the offset `ox,oy` on the destination. # * -# * The `angle` is clockwise, in radians. The bitmap is also scaled by the factor `scale`. +# * The `angle` is clockwise, in radians. The bitmap is also scaled by the +# * factor `scale`. # */ -# void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, int py, double angle, double scale); +# void bm_rotate_blit(Bitmap *dst, int ox, int oy, Bitmap *src, int px, +# int py, double angle, double scale); # /* @@ -645,9 +778,10 @@ def _draw_labels( # See also http://www.efg2.com/Lab/ImageProcessing/RotateScanline.htm # */ -import math +# pylint: disable=invalid-name, too-many-branches, too-many-statements -def blit_rotate_scale( +# This function is provided in case the bitmaptools.rotozoom function is not available +def _blit_rotate_scale( destination, # destination bitmap ox=None, oy=None, # (ox, oy) is the destination point where the source (px,py) is placed @@ -662,6 +796,7 @@ def blit_rotate_scale( scale=1.0, # scale factor (float) skip_index=None, # color index to ignore ): + if source is None: pass @@ -796,35 +931,38 @@ def blit_rotate_scale( # Circle size calculations based on the angle intervals requested # Algorithm source # https://math.stackexchange.com/questions/45303/how-to-get-rectangular-size-of-arbitrary-circular-sector - def _isInInterval(theta, interval): theta = theta % 360 i = interval[0] % 360 f = interval[1] % 360 - if (i < f): - return ( (theta >= i) and (theta <= f) ) - else: - return (not ( (theta < i) and (theta > f) ) ) + if i < f: + return (i <= theta <= f) and (theta <= f) + return not f < theta < i + def _getXcoord(theta): - return ( (1+math.cos(theta * 2 * math.pi / 360))/2 ) + return (1 + math.cos(theta * 2 * math.pi / 360)) / 2 + def _getYcoord(theta): - return ( (1+math.sin(theta * 2 * math.pi / 360))/2 ) + return (1 + math.sin(theta * 2 * math.pi / 360)) / 2 + def _getCoords(interval, ignore_center=False): - # This functions gets the maximum dimensions of + # This functions gets the maximum bounary dimensions of # a rectangle required to contain a partial circle with # the interval of (start_angle, end_angle) # # Parameter: # interval = [start_angle, end_angle] + # ignore_center = Set True to exclude the centerpoint from the boundary # # Coordinates for calculations # 0 degrees is up # Circle diameter = 1.0 # circle center is always at (0.5, 0.5) # upper left direction is (0.0, 0.0) + # dimensions are in units of the circle's diameter (1.0 = diameter) # # Returns: # (left, top, right, bottom, xCenter_offet, yCenter_offset) @@ -832,7 +970,6 @@ def _getCoords(interval, ignore_center=False): # and the xCenter_offset, yCenter_offset distance between # the upper left corner and the circle center - i = interval[0] f = interval[1] @@ -841,20 +978,18 @@ def _getCoords(interval, ignore_center=False): xf = _getXcoord(f) yf = _getYcoord(f) - is0 = _isInInterval(0, interval) - is90 = _isInInterval(90, interval) + is0 = _isInInterval(0, interval) + is90 = _isInInterval(90, interval) is180 = _isInInterval(180, interval) is270 = _isInInterval(270, interval) if is0: top = 1.0 - top_raw = top else: if ignore_center: top = max(xi, xf) else: top = max(xi, xf, 0.5) - top_raw = max(xi, xf, 0.5) if is90: right = 1.0 @@ -874,13 +1009,11 @@ def _getCoords(interval, ignore_center=False): if is270: left = 0 - left_raw = left else: if ignore_center: left = min(yi, yf) else: left = min(yi, yf, 0.5) - left_raw = min(yi, yf, 0.5) xCenter_offset = 0.5 - left yCenter_offset = 0.5 - top @@ -889,15 +1022,15 @@ def _getCoords(interval, ignore_center=False): # Center is always at coordinate (0.5, 0.5) # All coordinates are in units of the circle's diameter # x,y Center_offset is the center point's offset relative to the upper left corner - # (left, top, right, bottom, xCenter_offet, yCenter_offset) - return [left, 1-top, right, 1-bottom, xCenter_offset, -yCenter_offset] + return [left, 1 - top, right, 1 - bottom, xCenter_offset, -yCenter_offset] # Calculate the intersection point between two lines # Source: # https://stackoverflow.com/questions/20677795/how-do-i-compute-the-intersection-point-of-two-lines + def _line_intersection(line1, line2): xdiff = (line1[0][0] - line1[1][0], line2[0][0] - line2[1][0]) ydiff = (line1[0][1] - line1[1][1], line2[0][1] - line2[1][1]) @@ -907,11 +1040,9 @@ def _det(a, b): div = _det(xdiff, ydiff) if div == 0: - raise Exception('lines do not intersect') + raise Exception("lines do not intersect") d = (_det(*line1), _det(*line2)) x = _det(d, xdiff) / div y = _det(d, ydiff) / div return round(x), round(y) - - diff --git a/docs/api.rst b/docs/api.rst index b1270f3..755c652 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -22,3 +22,10 @@ :inherited-members: .. inheritance-diagram:: adafruit_displayio_layout.widgets.switch_round + +.. automodule:: adafruit_displayio_layout.widgets.dial + :members: + :member-order: bysource + :inherited-members: + +.. inheritance-diagram:: adafruit_displayio_layout.widgets.dial diff --git a/docs/conf.py b/docs/conf.py index d67cec5..ccff5b5 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -28,7 +28,13 @@ # Uncomment the below if you use native CircuitPython modules such as # digitalio, micropython and busio. List the modules you use. Without it, the # autodoc module docs will fail to generate with a warning. -autodoc_mock_imports = ["displayio", "adafruit_display_shapes"] +autodoc_mock_imports = [ + "displayio", + "adafruit_display_shapes", + "vectorio", + "bitmaptools", + "adafruit_display_text", +] intersphinx_mapping = { @@ -37,7 +43,7 @@ } # Show the docstring from both the class and its __init__() method. -autoclass_content = "both" +autoclass_content = "init" # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] From 0bf2830ed3d86b2d2761ea67c3c19db664ea3ed5 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 16:16:11 -0600 Subject: [PATCH 03/11] add dial simpletest example --- adafruit_displayio_layout/widgets/dial.py | 16 +++-- examples/displayio_layout_dial_simpletest.py | 64 ++++++++++++++++++++ 2 files changed, 74 insertions(+), 6 deletions(-) create mode 100644 examples/displayio_layout_dial_simpletest.py diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index 5139319..1a7441a 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -104,12 +104,12 @@ def __init__( start_angle=None, clip_needle=False, # trims off the needle outside of the dial region, used for sweep_angles < 180 - needle_width=3, + needle_width=7, # triangle with this base width, best if this is odd needle_color=0x880000, value=None, value_font=None, - display_value=True, + display_value=False, value_color=0xFF0000, value_format_string=":0.0f", min_value=0.0, @@ -436,6 +436,8 @@ def _create_needle(self): self._needle_width = round( self._needle_width_requested * self._dial_radius / needle_length_showing ) + else: + self._needle_width = self._needle_width_requested def _update_value(self): @@ -493,8 +495,8 @@ def _draw_position(self, position): # Get the position offset from the motion function angle_offset = self._get_offset_position(position) - d_x = self._needle_width / 2 * math.cos(angle_offset) - d_y = self._needle_width / 2 * math.sin(angle_offset) + d_x = (self._needle_width / 2) * math.cos(angle_offset) + d_y = (self._needle_width / 2) * math.sin(angle_offset) x_0 = round(self._dial_center[0] - d_x) y_0 = round(self._dial_center[1] - d_y) @@ -593,7 +595,8 @@ def draw_ticks( sweep_angle, tick_color_index=1, ): - """Helper function for drawing ticks on the dial widget. + """Helper function for drawing ticks on the dial widget. Can be used to + customize the dial face. :param displayio.Bitmap target_bitmap: Bitmap where ticks will be drawn into :param (int,int) dial_center: the (x,y) pixel location in the bitmap of @@ -662,7 +665,8 @@ def draw_labels( rotate_labels=True, tick_label_scale=1.0, ): - """Helper function for drawing text labels on the dial widget. + """Helper function for drawing text labels on the dial widget. Can be used + to customize the dial face. :param displayio.Bitmap target_bitmap: Bitmap where ticks will be drawn into :param Font font: the font to be used to draw the tick mark text labels diff --git a/examples/displayio_layout_dial_simpletest.py b/examples/displayio_layout_dial_simpletest.py new file mode 100644 index 0000000..5b26c3e --- /dev/null +++ b/examples/displayio_layout_dial_simpletest.py @@ -0,0 +1,64 @@ +# SPDX-FileCopyrightText: 2021 Kevin Matocha +# +# SPDX-License-Identifier: MIT +############################# +# This is a trial of the Dial using Adafruit_DisplayIO_Layout +# + +import time +import board +import displayio +from adafruit_displayio_layout.widgets.dial import Dial + +from adafruit_bitmap_font import bitmap_font + +glyphs = "0123456789" + +# Fonts used for the Dial tick labels +tick_font_file = "fonts/BitstreamVeraSans-Bold-16.pcf" +tick_font = bitmap_font.load_font(tick_font_file) +tick_font.load_glyphs(glyphs) + +display = board.DISPLAY # create the display on the PyPortal or Clue (for example) +# otherwise change this to setup the display +# for display chip driver and pinout you have (e.g. ILI9341) + + +# Define the minimum and maximum values for the dial +minimum_value = 0 +maximum_value = 100 + +# Create a Dial widget +my_dial = Dial( + x=20, # set x-position of the dial inside of my_group + y=20, # set y-position of the dial inside of my_group + width=180, # requested width of the di + height=180, + padding=25, # add 25 pixels around the dial to make room for labels + start_angle=-120, # left angle position at -120 degrees + sweep_angle=240, # total sweep angle of 240 degrees + min_value=minimum_value, # set the minimum value shown on the dial + max_value=maximum_value, # set the maximum value shown on the dial + tick_label_font=tick_font, # +) + +my_group = displayio.Group(max_size=1) +my_group.append(my_dial) + +display.show(my_group) # add high level Group to the display + +step_size = 1 + +while True: + + # run the dial from minimum to maximum + for this_value in range(minimum_value, maximum_value + 1, step_size): + my_dial.value = this_value + display.refresh() # force the display to refresh + time.sleep(0.5) + + # run the dial from maximum to minimum + for this_value in range(maximum_value, minimum_value - 1, -step_size): + my_dial.value = this_value + display.refresh() # force the display to refresh + time.sleep(0.5) From c16af0f225653cf5dbde91f279b02c312cc5880e Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 20:16:48 -0600 Subject: [PATCH 04/11] Updated docs and included figures and licesne files, add simpletest example --- adafruit_displayio_layout/widgets/dial.py | 54 ++++++++++++++++-- docs/dial.gif | Bin 0 -> 193259 bytes docs/dial.gif.license | 3 + docs/dial_variables_angles.png | Bin 0 -> 71718 bytes docs/dial_variables_angles.png.license | 3 + docs/dial_variables_min_max_values.png | Bin 0 -> 25030 bytes .../dial_variables_min_max_values.png.license | 3 + docs/dial_variables_ticks.png | Bin 0 -> 60800 bytes docs/dial_variables_ticks.png.license | 3 + examples/displayio_layout_dial_simpletest.py | 10 ++-- 10 files changed, 65 insertions(+), 11 deletions(-) create mode 100644 docs/dial.gif create mode 100644 docs/dial.gif.license create mode 100755 docs/dial_variables_angles.png create mode 100644 docs/dial_variables_angles.png.license create mode 100755 docs/dial_variables_min_max_values.png create mode 100644 docs/dial_variables_min_max_values.png.license create mode 100755 docs/dial_variables_ticks.png create mode 100644 docs/dial_variables_ticks.png.license diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index 1a7441a..57301ec 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -91,6 +91,50 @@ class Dial(Widget): anchor point relative to the dial's bounding box :param (int,int) anchored_position: (x,y) pixel value for the location of the `anchor_point` + + + **Simple example of dial and moving needle** + + See file: ``examples/displayio_layout_dial_simpletest.py`` + + + + .. figure:: dial.gif + :scale: 100 % + :figwidth: 50% + :align: center + :alt: Diagram of the dial widget with needle in motion. + + This is a diagram of a dial widget with the needle moving from its + minimum to maximum positions. + + .. figure:: dial_variables_angles.png + :scale: 50 % + :figwidth: 70% + :align: center + :alt: Diagram showing the definition of ``start_angle`` and ``sweep_angle``, + both are in units of degrees. + + Diagram showing the definition of ``start_angle`` and ``sweep_angle``, + both are in units of degrees. + + .. figure:: dial_variables_min_max_values.png + :scale: 50 % + :figwidth: 70% + :align: center + :alt: Diagram showing the defintion of ``min_value`` and ``max_value``. + + Diagram showing the defintion of ``min_value`` and ``max_value``. + + .. figure:: dial_variables_ticks.png + :scale: 50 % + :figwidth: 70% + :align: center + :alt: Diagram showing the various parameters for setting the dial labels + and major and minor tick marks. + + Diagram showing the various parameters for setting the dial labels + and major and minor tick marks. """ # The dial is a subclass of Group->Widget. @@ -243,7 +287,7 @@ def _initialize_dial(self, width, height): tick_length=self._major_tick_length, start_angle=self._start_angle, sweep_angle=self._sweep_angle, - tick_color_index=1, + tick_color_index=2, ) draw_ticks( # minor ticks @@ -255,7 +299,7 @@ def _initialize_dial(self, width, height): tick_length=self._minor_tick_length, start_angle=self._start_angle, sweep_angle=self._sweep_angle, - tick_color_index=1, + tick_color_index=2, ) draw_labels( @@ -278,8 +322,8 @@ def _initialize_dial(self, width, height): self.dial_palette[0] = 0x000000 else: self.dial_palette[0] = self._background_color - self.dial_palette[1] = self._tick_color - self.dial_palette[2] = self._tick_label_color + self.dial_palette[1] = self._tick_label_color + self.dial_palette[2] = self._tick_color # create the dial tilegrid and append to the self Widget->Group self.dial_tilegrid = displayio.TileGrid( @@ -593,7 +637,7 @@ def draw_ticks( tick_length, start_angle, sweep_angle, - tick_color_index=1, + tick_color_index=2, ): """Helper function for drawing ticks on the dial widget. Can be used to customize the dial face. diff --git a/docs/dial.gif b/docs/dial.gif new file mode 100644 index 0000000000000000000000000000000000000000..778c4ea1733d2ebd56110c53e911b40eefabef63 GIT binary patch literal 193259 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%0AeDUc!ORx*7ro) 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 literal 0 HcmV?d00001 diff --git a/docs/dial_variables_angles.png.license b/docs/dial_variables_angles.png.license new file mode 100644 index 0000000..74baa7b --- /dev/null +++ b/docs/dial_variables_angles.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Kevin Matocha + +SPDX-License-Identifier: MIT diff --git a/docs/dial_variables_min_max_values.png b/docs/dial_variables_min_max_values.png new file mode 100755 index 0000000000000000000000000000000000000000..f110b6acdc9417ee5775ec7ed77d35dcffdbc53e GIT binary patch literal 25030 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

ejUx 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 literal 0 HcmV?d00001 diff --git a/docs/dial_variables_min_max_values.png.license b/docs/dial_variables_min_max_values.png.license new file mode 100644 index 0000000..74baa7b --- /dev/null +++ b/docs/dial_variables_min_max_values.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Kevin Matocha + +SPDX-License-Identifier: MIT diff --git a/docs/dial_variables_ticks.png b/docs/dial_variables_ticks.png new file mode 100755 index 0000000000000000000000000000000000000000..35aec45f1b387ca5e1fc491b8f651327c2a26187 GIT binary patch literal 60800 zcmaI;Wn7fa`#%oTEWLEYE?v^y-AD<7bc=L%cXx{*4IS~Fn2Ju(2$el5D?&pfni88Gd9+cXJHsJ!7(--8fRuib@tGR zjEvPV4jAbg>l%fO8TaLX$kf+gCjzhc!XU7d;QO`>bb$)k4ui*fQU}qRH8f&Uf__s% zCSI~KFqs$|kHOTYjVhsvA5lQ`Xc$Sy3}H+OVaY+}4zM-T&?8)99`F@;b#@}e3UUvh zIG%xE$rW_8sT5I-C~jN!6$1I0nVgqe0dxK}{9|!(7+sV<1f;0JtSDaZ;xA#LZs{!> z6->=uq=7Gdk$mZj7mFT?PD~`efvNr|04DnoYib2H1qFh0sJpw?J5z&#cCaMJiZX&s zf-vFX|GWy#B>CnF>xUHX=aQ@xGm<~R&PmM04&H=^F<4Y|#oC5<0%nfiLPx<;MFoZl zcn*Srjj)D60G`1DeK#GJXjg=|2=>tjF%JrT9y9y`rmh}K@8S2xDx-T6+#WCNWvvqg!13-t0AOv9|+`w z7~rAcb0F#wsqsYPjm*a|4$dn91%EG$_f?D!t!92g#TaH z)DSks#TCrR7~WC*_lI8b1KnV54{7lFZ);yrVDbRJ+KljjI|ux7Dz~;LvdzVRTO;9t z?m6X`dHuJ~Y8$|aD^D@!b{YRO5->7wtu1l&i~mkqeh;?Vl+Ffu<+$d5#sR?ut~C%; zu>0{pb0Ho^onKVbBczj4`rlSE;99ZpGUHPJncpB(Ibg719@V_6|83<5t4$FhM`uU; zGr8h#5E|F~ed?C&+lp6>aNQq%mx}QS9aT%Iysc=g3C3Qi3SKTz`L|zXmI&@YysWt1 zeuF4w+P59^*7-l)y{l3`i~05KW61tuUFq$52-et(rWG7LME|S0ysX{voE*ER)j8YM z*4g%_yTjeXFP-r(0{9B;8W#uZ?N^tM>Ze~0kN|&E*Gv`vbS4!Wd3sLb+Mbp)^XEQZ?`-r z9*AmPRGw#@TjMt5hk|aW+62t`=_ebe>VOo5NZMT-so9r`15gtmW$c zoZj>83*rD3?IkK2BAl(-)+?QSKA@qYPwm3<3LqkT4yjU_||_(?QZ z@X3J&a3W*%PklG@gMI6PIyLYj-C4jAn4u&`tkL;3Ibvio$G{DlV1A7% z#tEr|5v3lFHNQPd4eUc8G!&3FVE+vbuVezd2_q=H-_DXpy=dn4N|Yk10fsdfOC~T? zsoyeHby3~1ovft1H4t~)dY^#2S(qUDj(|mH-M+C?Rp^-8P!1?y@uy;*f>*cRCF6NTD7cl{5AatXUubF#7I z(ke&+>w;fTd(bq`7i%qIvbe1^rV!bLpbf8${2D5kXt#H+mK{_VcdNwtCxkDQr}HJ? zJzPc{Qk&`Xd^s(0I-RE!=(B)3T5L+M0d>pVTEUD122+7wv1`c;)lQ9S$9AEh6>M=-0Cez&kdH$$01 zFR?j3IFs*a$TCtE7S*Ks$Q_nEM=5a%&{(d}eCsWyz&1Dstq8FP30pF#Z?4L~hA6CU z?}N`9Dn=}!AsQ^%8QiISM~Q4lr2+y8`3x3ajUDJ%FEL-CDo(ucxx5~sQIND&`$5Gg z77nvMmcc@B0gHs~^$#BhB}2JbqNG=hP*}|p<(m7l$*Q)Kcf$nIad!n35@c$Jp{I)j zmbVE>?c2ZJ#1On#(Yn76BQ&gbbN9$+s3o7p@>O?zY;4SODvqNsAs()j(U;ux=|+dcSC zGi@FY%X#%dF7Or!7dy41tX!ffbd*tH(wBPeo;6zL`@O9w*CGgbM+33MxH{T1alj(1 zn@6lEnl4e{`t|kt!&eGm!ufqLlCb6#inEgk6pwZ7GJs$`MY0A;9*?)4GAMocuJLkuHhoZa8ELsk0pC3_-?f#4=u4Et9E|Sh%^s zs6}kKz%YfW*@BLx3O76UGaODSu{CTLsOE`U{`~e)fspy0U7q${Jf2+wW9vYj?zNnygjye=hzu-H806(3~JbeEv;7=Rv zZRbrt8%t2?@l&$PW)L!ke7K7E-QCr(4GR5nXlODLpC~FdlI}JUN9rOFjDF;c7q)gj zoR6j_jy~CDgkl=^Nsb5%q2W)H8#s0&Y9F)C)XOc-HGucixC!92#x?&&Q5>m2ety$s z_8IIU0;j;t*b@wm9Y;N-2Z$mumbLnr+P8C#8RbnZj#Q}(_F4?daMFjn!!J#JFv*Im zA+gAOq1YZZIwd!J3K{kahN<)^&Qb`|X?d&(Wy{d;1+Gcq6iK2*S$#T$)1$gc%s8u~ z`7e2HS5nTS_s@RMb7$g6?)`b5^HMA2D8_mu9|rB zLa;;^l1=fPQ0fA?Ygc)iCe=jMom_ZcDeIpw?7hc&U-!OLpD>m+qN^ZQyMocWa^}OV z``;8J5eb&Kp9M85Q2`o4Hqd(+&0HlPg|+?hxFX5^j$0qjqe0ocIztpB5Ze;K$HYp$A~9h#oCQl~yT z&Xb#1tDm6i@gB^06|n)9B@#$qkYV2$eewHyuE!7J<-X{^^7y2TDXp zXB`X$X>WlrU-P;_qXl2Ih(e-w%=^VFv>_1e+xm&?53;w=o;h9c;Z2bC2t1)?s_q_$5&H| zUQI=iY5l2BO&J<oY5UR@P0_-uIve|4bm}8W@l%2T$zd+rDv|g>$9)MyqL$7!GP3P<)}ml1ZBmxA9d@x7ZV zGhbmm;MhhDkx$ZI+MEk=f0-w`+L+-bnq@h}6JN}Nf+c>7h|KqtQcI+(B53GM6e~$7 zao(4!@&TP8`GP8gm*cvGA$NU*Tbm(gCW}aEWRQoPJEDBKMC0*Ty@zS`)wL_Wylcqc zL_aMEMp}kqO4t#q)6CkRJLo?|OfBYQQUKYc+A$gJ&5K|UK@TP4fXflM^n6KbYK)p?0yEhYhBp3idy!HsPSD*?%Y0PSF{2mjCXa;m?kO_{2fxZ@zKX!5o1Akj zl~vh@ntF9O#92*f7`YN+WSS_*aTg_een@>^$Wr{}v0g*2(FIeU0rqevOGoT3y|x=; z4C0d@_SAd}3!{m8}MMeN}Om|qb9{&d=2_Qt~N*Qcp^?p@;SkzP%vAD4{ans4+ zwX=PA!)sC441k5wqt!V39DHO#jK^Fw0HV4`s3fTW14cp8fez>A<2I(>)JUQpM|i_u zux|S z+)YeY{luT@OQ_|8$koryWL7djq{hYH5#~!`ue;bvg`?N3 zNl}P+*FVNP=&RWMXm5E`hTfiKHRCgD_ocZt?Dk$Klk&Vv)rbH9=CbWVHPk|{rRtlg zY*8nWf!6pHe9^BdQ@GTg(n;~wTdn}Q%tI1%cX_zX*3f=2A*8!e{dl!ZPe1s>=F8Vw zL0%S)TSL!{uq)E;BD3fmMQ9xT2hRd)01YW#todH3Z~@UF)o!OzqsiXD1;{Ix*&fxd zzjQt=2?H5}<2wMa&io$d=&2e1b>0GrWO z^z4NI%;g2Zd~bM;Dgec8Ttx5K*KYwiBM%S;3vVATCNcUj`p=$E4Fvn|1u|YdPR~dU zNbKqs-IvFbT>e7)t|0hvLL*<33H~kgix{H^DviZDt4ZE~+fk!vcV$+)&AObHbudbx zFfOC@7_PX8{@-NHSv(LKyYH-2?9qB|R_0^Neo0QHV2U+GlPy=o+taLWMe4X_yW3vJ z?$>bE!T=tBVG@eI<}^rtg_{I!Y_wY@>EKOavzBhq|LWba=rSpCOxfoMKr^kEj81WX zw&}%cim-QlJ0Gv=0up}%m|g2O8B3ZlO@HE#DS3)gPFVme|0~!E7}8X30+?6h8h^W_ zC=Qdc28&FV=z4z!-ZL5COd)suCSeI=%1vj{Wg2}K8~)+qNfFH`(>t1N?slY7jQ3)< z+qm}%lDd;tC{FqQ3|2%nsiPTeP10e!Yk+0po9nfkRU#3Bbh4Ye#$`Fit}1$K4!nc7xhuN9h-^(J=vtP;a=4aAh^MlN;jv&6 zk-Bv&%4-g8J83_JSuna?eziR zG~>cFg=4a}%UHEZ?=vP>xjtFdTxoY`KMOYjYXW#nB?6PY^57_A;|rT^ZQuGtzb9gBdW*0e`iAwzzsq;!obxs<`*jVNvHF~hA$Qb<+2|Cc&skU~(4 z@ZFp*kcnY>;k6M)SV^^WvJR`lLcNW!86`Iyv6Mp+PefJ%`Z9=hg#|Je(en{j}z zu|G2*wd(;m4`V^M19OF+04ZT%=(UrE$7ze}^+#TnRDd3cKNg4SvJL25hQ=>}8}IW& z1;~4Fd?$+8nddlWpc%Y7&dNGIb*rUC9D04+U;hSti_k9W1YuJk6BPKAETIU&ZTjJD zqlgBvEEDh8IM~Lb&NtfZesHbzKPWF<;s%HN{Q5fI`q6??IxJ~QlFXv5vya^Wy9}Z3 zC3?o$&Dquqr^{)JHq08S7kvb*`ft0!yiFP0z?_i@HVjshL{M@tH!!zM_MQHZl}hyh zdzhX&1c1!1KG%(X@j>KGtL}Qy%RY0Jy6!NjtgE7acRKxA`m;y9khDZu5Vifq{jbh7 zOm9=lKHT$!$76>8uGr0ZQ?NA0zK{F|hq8psqNGQ3Bslt&f!~Mfa^x0= zq&lE@xBqi0iZ?*JLKewWVHXqKbdj(J^qE*t=l;Q^!!Z#LeNnh}jr*I#Ui^}_P=PW9 zuqsrjWoA$Wi3ht!ago)824iHy?|RiLO~ha6$S8$Q#g?F~xH;d?=kanr1+}c`a#~t9 zVg+OpmU-utJhS&*j`s)1nWs6iR-PH&p7`_7g`wb^mB<+&cE~B0w~e1lmtoiZmSZTC zA=X~h_I``<&)ZqX#RS1{>|T0!u@$o$4252mxT%a!5^ys3xbt;+goTk%uXRaXPR?c3 zYk)M37TyLX>#p(bBw@^(l=}F$d!VAg_kf`zKVW8refQq{PvnttMsv z08v)LFP-(PEmn+QD)&?EzuVz#Ib+h>#8BX(Jc;7dKWqb72(FJaIvU9d*DMfpqF7=t zu$yUS?($Lzs)vqhl1=h@JeYsQu@~d&5PF2hB~Lxwt7dhO>hP5zM!l|CRUL_~c^!`W zfasn`yyq1kJQ8~KnR`JbhcQAJPR~&3#Yzyxc5mO@SV-j8yMs^eS%+fk-!r2Jjw#PW zQaRL+Lf%VO#n^#&`(p@~O|xp{(fh%h^0~qKhkY%<@#At&*PLNu}o49X9I_jwRw$Pt>8eO#0od(LX!tZu%1fM>LthT-8h^ zAV(ddqm~3g<|IcOlp>MN+NyI!4-87&5TvaFOSw@~sBG@2>8J%#_#APxiDd+!Ynzz! z94q|6YJg8)3B$t+$O(M72vfi5z&|9KNU~i{9p&)9cQ&|YFiEqW z5ivl-SmD%A%w;xKjAWzq#d0&$80Ye0*^#6z^xe?ZvlL?d9t zN%CXVvt%Msg~3K&^mCYf$%c?4@rOQ$gtF0=X_u%x4b#$oX`a2od~-!Vq%V;?0F_i8 z=h(SsgJ_X;5N+R_e4Y*0rI5RzPtx2XmHWO7*`lRzSY3z_xqxQiF+?o(DQT@%ERQzy zwi}s}doS1HL#|{*JAZ(u)2UP8FGz$WkpQ3css&}AS}gYr?zzGk4GpQ8!Gy%Mj7)qA zEq`lGx^w)Lztg_b8(o6KO#LNbj;5+4*|e-#xO=h#`XOCXuIF0`S@F4oyEAln;U7vb zIqR&(F@-;n(ks$AX@wwRalg88p~tR)mPqQ%oe`PnRbtt=KetJN%#Jf_L3uHknfF|zt@ z`{xnLymoWk#Me@-$_QKrS*-@o3IDUo7#R(K%rbdvL76To7##l7T?xyR_bop@{QhJw zta0~B>_{O)EP5}qrtmXW79-Z`7tkvbI6Hv(#$nDZk1M11ov2c?zfs;f^q0xk0K``v zMv?O4G6Doh(8=2&eWr~8PDzlAiFrJK@Wtc9V&~~)7_U58KXzKujT}X!x~$cnhMb5j zHUmCFyx7yt_Ijl4K_6d&7q%v#$p)=p1BiR2W}4cD2+m*GtR(1#`o@_Vu~&8O{I%~V zV@bu38En}i&Muh#r0**v%S8BgDz8sK>~I;djEh8y)YG?Rz%+^T!;wrA#V4F-Avnvz zgt1S9tT-o&VD4&S$x;-$&Bb<7n#jJ?#6e26_d%})`{vT(%NtdnXQj3DpL7-r7U?s) z1GV{!F;~%kc30QDf0L0G2%uH#dn+F5I)fs6GRjREfCD6Mw#ojZ^T%DZ9qH<3UsAUQ2LYR z9jGWr?E9A%vAhC?_&Y>GN=Ab(<_I^Kr}+{gM|^<}|Ek)G_V&ihg04S}y|0d}ZyK+j zHSJ8gjJOrEY(58jvAsbh#+%(GJntu= zinoVo|El})c*P6bdA8=8xBK43R9&M}m_kR!IZgA1K4~wkD~&ok9tX~aezm8#y>>b_ zs~3BDxKLBLztmvEsf4up;#sjaL={_Vw6n?7OIfgAgEV{m@G5=m07S)kC0xLJP`t?Y z<`a&zIG(J%zp_`#FwNJo(jmU$S-ha^aG3d#XGJ{c5y;lkEG}Ah**YJb?}@)brNYfu z!=I&UGtb4?X+WsA>bTiNgXdTVaOmckU}Jk(hA+wNr0XEL2e;61eM+({WhRc{>nWX{ z+(Ip85rl$7nWniD-{=!}fZQ*VGM*H<=0>LQ%okV>gg;tqcG?=bQ=-e^bKreGIO~wj zv-$bS>1Mx@Pr~$Zklzl!5)(B6b>BbT|Kg$@fALkCnQ&hA0 zet1f0ALA6On+a<|7;o`u<7n4p-bes@vP>GG5lF&&=T-EBha6@I=NB4H`%yhKx7U0H zBDbMY_@R;K?&1y~q6yy@w7ViFOaMFq(@P z>r!8VI)n{V22q2+K4 zQp>|703y-onhG7v{rp~do7F(>zF^{>k0Om%*vZ;{+LP+rXuD`ir;?rO+CBPG{ut1} zUwm?Jv0oK@b_A5#y1a(iSbgv+vHq4H)F!ZV9ZSrGUSW`#>pG=SV$e3@NQ7r&h{rxe zb8=Pfd~;Or9t~K(Jm|X{!V~67=`0)or&N_3E4mDTzZViaqL;(;d9M@-Nfjxd_sE*u zn_e6Vaal1bviqxjtKIQj!Z%zBsw~tFPy1sDe%pFezSeZB3^rm$0{%dJPcnTmJuB5T z7y`2<6V4v#L)?$tL$nj5gaNXKT*bi>vdmW*g5aKaMGRr=- z&#V(f$fK$UDoZk{eUK07L9~9iSX)f~4Hg;(xjB(psjlz-Bl7tIlR2^P!4TkK zw3DdW;^m;yGDV_bjG@CwZ0cktTKf}5&5{Mb8LN2%j|OwJm2$QUlIRzG`k*{J+w?zg z8s1qfA5zQ}$e?-5KKTPIf^F_9IYYGV-V(AAoH0Fx@3{?CDJ~b$BNUHFeLY05fV+5p%2+FmUfLg;5PlDR1WY;7RaZ zsgG>zlD>-1W7~0g*vkv}P{q{xRU9NP522F;LroLOoX{+p(veG*z+PQe&LWm0)2n~x z^c-|GkgcT`TMnz*DnFeMkUG>~>bJUWeUUaaPHYXLmngL6eSKmVMUD{8=;gQ(tv*+rVfYT3^0ugGdr1&XufL-Wv zM)UY9T#pAJ*VCbJ4vH_R@pFCkbo`O)f43j5J_|mL!lg&5=x*+;0qBoeP<%TcyTv3T zp}sM`p2xw5PJj{E1!&v)LG!yk=1813U5~Z^JJlEf?f#9y2LC?A1d5h5GX2;u15B{f z+1wNp46OPcB*+Bm)ZAzzPFe zsFV>Cz;as|>6BfcZuGv0!mPlmiHRfO;VkQ{M_K94?jRTQZ|~2((2TtZzo5spru|BZ ztN?=FyL}di-1hnjdxkEhbtK=ryjIM0(jT5Wal${dd2O=MdnRXI z#iwLS4M_^hurmZiDhj$>j9+hLR>fwwk_T^BLR&9x9(S&Z57?Y4=Jj3TFjm(sXe$kpGgv=8$Di3XnwtEJtTb%u5 zimhe0N_Wb)=_u{9+A8vis^A^i59Jz(FE)RLLTa~R8EIIi&x%{~JR4mm1O{CzvL-v4?#hr_On(8=ikrSn{+RG%1B0 z%wTWnf3LYx)Qeo4h)nJ`Oo@PvAIsmQ$b~14G~iez29VW^dxHGZS_WJj!BZ%@fsvdV zw*c||*%^c&yVC3bV4l{8xCCK?P1HWXX?ll_WZaFmg)K*h&3}pAm!-aM+~q|G$mwsM zoixPVah__jHuv@coAgorv>&u&U!_nMfom5!{O(gTg2T`VNuD;jB`MfZRwKC_#y>d% zIT{ODW422e6$I6Yw?dA$`(|-FPo)EYi9Be$z=6o^0H?1^b0rb_4r3%*39N3__nB1Z zEutMB9~%waY_umg9)qmr#iHO}ZM^|tR_9chF60z{G!GFogm4&9-+$`$l#s^g+d*?O zdnGtPmLB^fJfEXs^7sCOvC2*Y2rcPh#SC>y*mV) zLUnyfo-!OryX-{aMDpjGA3~feSLO>k@RUACC`Gcu2ma)Htt-8l>c2x0lM{+OE7Q~; z(#0E&FLz%cf}_n-*v@_(f!rd zlX*UT?Mob4i84m;>T_crVfEyyC4q~R(7CPRx)2K90t_;l4_DkZ(TQrYTV2SrM7~*K z$$}%IC8mtWmIMH@?S@Jo?BSR5AqDvh7gkl-k2 zD>WFkNIr=dkUo1JUtxE}MVT^egK4odTxN8*hCo;hPmt(`et~|K@(m<)>>gNIFpGR+ zGv6YXfK*s8L!tQwRTvlubR)lym**=QB;&gdZujz#fOcr?6 z&(0H4D~}~njOCY{Ww+>5ii~>@A+f&cxP>%}y>g2y$>x+MVO_U6FiL2il!yju2J3^U z-`TI&1<#yQb)iul8*jSY@g4~eHL7HbQXp_%MkNn;I?m|>Hv)o%070z^&OFBB6Mm2u z!7KRL%5+hdO_5Cx2gZ{%#l1#W2lIJ;SUlJONJ}*s1kR*^SI6xz_}^ImN>Ps3kSEkx zwI@iVx0a{VH@UBi3RyE@d$fCe0a6a-u*25FVBHsduT~ zI_2E0guzYR=~?OupxO~O#sfX5GlOWK&Tam2_~>$mn6`&OiQgLc4O=VUnaT* z)Z4WxNAXB=;5kPo>!g%4D?}&>*zfra_+DgpQ!&K-HhX{O*<#!SGV_2@oDnAK>n<~U zmiBL8VdJc4xFoO{To63@ak&OwkvSn(BTGoF3!g=>O3)0EZxZ!`jy!<7S(VCYUr=u} zjYkP9NyYC_$B`=QVc%^VKU*Iy-a?hn5x2AC^2R|10tbgo>06ykfEZQ<4#g%cOq5Dz zh!hS~=Pe|n<}g64nJR6L3XUpa6ord@(0(Qz9EAmB(>gM1 zR}QsdDtAK>u$_k-vfj{W?zZQi8_V*fih&AVI;Efp0L;j<8T9s<74W@Nw0W}&TJNy? zQQ+llYHW>(x{=(kL^T-{ap!T;vR9%!)aHBZJj^Rghgz=)M%5VVME7p@|VZsyP%&`gP9cj^MHp4 zCS(u6m?Azgk9XOV7;}#%CC=|j=Kpd)v5;8x`G0&*{{MGQWKlt)Ax1RAvan+_`W-Z| zx@a1|%_-Wdg`bi5OR>k_+wVP+we_bt`{SC^)p4NFi^@(?4<8vKz|x|ZTJMau6WtGM zeZj_fB6}V8t2^iAe!@IET;6486+?p|rMns;&!hpxO2Z6}tT>*8{;)cJmn3fl@(Hok zdy{zn&B!iON1hAoMq40~I}hOm%PX6fB)J6Pe~XJ22f_JXdw$E8uml|I?0_1Tquc54 zCx0-qGW$^qdAiO@^&ZE4^hHzOoV=kp0Kx6IvRmA5MH>dN_uG6Sz#w7kO6iId&5`0SR<6E?j6Av!XzQ@`PNbiAsVE7zo-{_5j#aoUTO zb9=FuAq^DZ+mP%1XD6zurLfr6gTVT^ED*y|P$<-wLYi7EhJ<7kDfqMy+A za-~C9*~{8g;fSzGZE5_h9&Pgtx%)Q>WZKSdm0SJkW&(iE<%o>)+yQpnN;}|qai4?R zBu;ekM{*u3rM}?kSdqGi?k@ml z_2l>DaLPCNu=hV59M9rhI$q`qrb|m*S$MNoCzz_&YzZTyRbfpCfPMfz0IExeRPRKj z>$+dTNDfOsfC-YHj3~2^Q2{h$CXMWu*bF#uE8EYKh8_vl0ZHCd8M%o| zKn2GefCtlX`j;eW{xJzS`+YvQEwBF1K2g+GKJqK&rQmSA%{;5cJwU%5#Ym0}uxNMT z5sF-YbRBTjcYYG@cqx1)t;7n=B0A9qeIy#;+5`L1ghzxW5JX}l4?luEDi4Dr%AWRB z0~GxalJ1;ro9tIBR_GOkJWlkv+zwtHW+k?bP}8tLRF z`}ug$ySMk+t)6G59(7Mu-JsKa=`;a=PGLb6Ht)DQU{(rM+hk8gmrX8sCq=XK5i2Vc za@s|Ufl62urK5-BD*jw0knGF9G=}rX^DWNc&w#^Qz^Y#Fw()Uq3Ao)RRjmh1pXN^U zcRcYVUr8VI!sDC^n)XE&DGv8~jifTVQ(kr-qbvrOsT;lGq4=p!EqSxTS@>i>Tajk> zC8q<3SSJ;ak3DE?3xaJzp0{Q~+bI956{rGg1x9FE#K*(frOH}PWW1<5m3J|DCE`Ln zE$(4qI?;!S_TV{Eo27|$2E80toCay}*(R_!?!Ex(RPDQr-^E~x#URv!WZ9LP-^2*m zJQ)3W=NS8vZpHei`2hw~bA@tP(*hiC5eomDwI}jba6N*)Q>#uCvX6$6_x;Z3d?+3d z_TjqLOEnrP%K_mAR!+;A4aC-1cOmfA-c#Xfi!LBB4l|U!KlDuN%C)ft3KUFq@y+v+ z2ZFmQvY6n`r~_k8J~#cS4G?B;iISw)Nr=F7s0U0HpWOEQjNr#>R>14NL6H(9P8X|g z^9ENE-dk~eOA&lnxqv@ulF1iL;Ni+vfjr&2z7+O08i*;Q=oG>WqC`#}|I#p6wokqx zwut@pmnW;s$p}Lr>k^>5*2zEAzRn=Kqu%fc{^(!Cpvc^Qq(bEQQxL_Qi_Jr0xzX zz{Bj^Ib-++>tE`BdGE( zTmz~`$TT@+qXAyeUlQi3U7mgXFA4KY>cmy7EWY#4IU zM{LLosRg$m9q|RF)VMTCk0-V>3iUF?yty0YVJ`^dFMAUd^q0Ny;B-1K5GEdi#a4dZ zk(zag6C5gXF~-Fhnq=2!AqkVEA`ywR>=&XV?*A`)b2Yu)irHc_Q-Ucn@Plkv0ZQ1KG@=d&}kg+8Gpr#jZXSs*FlpL_^{I zTHi?~S`UMESc`h~cgqYW4g;2nyiuavO7nNa7-0rz>q*F>N&>*`$a)x+{|Wb<7FCXH zH?orbw&@&JR?OuT-7!$perOb zV(MtI?lUQgWFX129Z&Dtq=Tphp*Jq#;vx;%p6>l4WyZUTeI^5kwt36V)uk zP8%LC+6r88x>cyo4xVZLm;bfUp`{fbUzMwVUn2W~@(rw0mDymtN{-vd)07K_SccIK z*F817qoO=d0h5YCS4*RBf4GJPJ5lCAsN<&za@Nu<7+e#uRdVf$WxtInOVq-5(ndwK z{@Q}ewGq_#An_~p+a@?3VN6jhtqXXy24UKPtL{I4^-u-E4RsOWDQq^XCHF<9;o{3Q z?zBqpZ$m-Yv?oW;R8KO#x%B^|dK6jq_}ySb_%YDCf+Zw;SyQdUeYXq;%Us#T{V+I@ zus3+aAVH*O`LT0Xt4|VxmP@i@wD2*JK^Cn*hCi4ngY*>~L1Z4BS5_`zeZEL{z;$9e z;%MeLoFO>E0w=MMOo!^udXhMxO!L9FCH$o0-rj$}QqoX>5>2LWTFZUeRmipNuUfeX zfuNpBZ4G2vj`xN<)eXO%CZL3Mx;U?vY3Nbojzl(FN@KW)kp0YK{~A4`R7?wt)fs8T zSor8s0@qy*`$-~uN8)%c>3ef5h2a_$Fs-c1(*9ih_gQe=LovnW)pYGEQRw*Jz6=8Tty_E zB2`yDLy2k60iA57q%Z))KA5YCPR}eXtoO|b5Gl?BM}gI9cC4w4Q=iJXRCGl9FTowp zA)F9aXSXEm7!a{U|E2`Gm$@+}mP!`Qd*n+gED`g=Au-tyP5M^^S?i=8mG>|f2RKmE zVfc%i8pjPuArJ!2=x?q>glb&eh8Q-n_?|ah9DL^3VHl>}lmntAu^Ssd!?nL59WWM!)YpfJ z#d2;pt%7?yfuhU>eIjLOWa~Ki9`%L_FIf|Dp!~Rxgo{33zd_OZadiRpVABKLY6FQY%>%Tmr}6g&i(z` zpAYWdl)IJY(L|BlH0gq7U?|e{v+;Go4^uVaQ{YojZ^)8ayKU-g&r zFVSTK_h7MXDYk_Z!}t+OUv}cdg)zZrJr@kU0L&uU&jiBW-|OQffe5nV z4VmMu@izxIRr(JI?{*?!s+fLIc}+8C5DBKj?FRggYdUt$!kYRbbl7fD_%wx8hS^e~ zF5z|9crF#F{;j!+m_K-wq$#^uCW`T|A?5s8v%0;?oogQh2a=6EB>2y+dcFwAt73-R z358*EY32m{`i0ojS2LQbTBA+Q1X~IALtk>+SQ-j~ODwN^`s=g5hcS>Q)+lNqjC>BMryTh__)gm|t0$}*8*svG z0fybYaVTw`wiClGYsD3+^N)zEY z3Ilef*GBsbhf)ShgNs($XxZ)p%(qz7Xc$HJQSBEhfT=0@ox23u%-COAQw`zSIg|+( zQMDZs7>jx0apINEznhW)7#(jw?4Kvsp&_yU%S&>y^Z%52VE+Gjd&{t@y0C3mLRge6 zdVzF60fDJBEm&MY^EaR=avL|xZgN%m>RbOLlD%#`O^x|;h*AZMsmaCa ziu!J&c6i~>feOQ#4{W)%fhVcQUPT7H0+gINL}I9$J`}=~>GoR4N+bZM@^p0JX-l#N z4{L5j)4Ns3Sdk50v>nT0WyM*Bas^9Z1>4tEr{n&Cs!i+5R|mb%QQ@&Vw5A7Y0;j0a`D$+m{ zJwX%X)!-n3%G~%Do2S>3NG7j|v~^#IWpUTC^G ziH=QFM03diI)Wyt-bW*=*z(1^mTx~@cwBWkCO10^IQHRK0bu_qzhECyc=yEa3;`dA zx9k3wD5w7iT$FR_+NbAObZbCC>Lk$ z^uGptUKNyj&lM{ZA+5s}W!X_|M1YHeRnra}slQ<#b+NXrj3F_(Gz&aufbIh2+>U7b0AQrVND{Dc?^@m~p0 z?HJ;_(PD#TW>n{r-u_Li zkJE9~M3cmyr5}kJ)jHC%7hKT~KLn(T_f&~H<)s7z1sqrY*RXut#_23UXH4W+b>?oH z1_gLCOd}axm86W{^cv?iknG6Db=zK@!3h*#@>#${XtR2p39kfo(5QTYt*E+N(hXXu>TttY*@Cv%sUG3OpZJ*y3XGJw#G)$VDGhB_BCgi=>=F55+mxa+z+0emq}g z1OQy1ondu3o^DUvt*;98NwQnB?YpxSNk*}EZL`}ye{ysUa?j>;`KuDyGP`$L(2 z<3Z;qlW(4c*g=?wQQzC@6%*;tj0(w4egKiqa_{WAWGfsXamH^KVIJ27?(|HN*MYH# z_J#Lqy!@6P8GEzZ~pPNwZjIu* zMtL5)$#JpGv{c-Vr1H>$m%};hKc%s;g0NEQkyZBe{{hG#Sk?z9 z4!f|vM~eOMg8 zQ_3jP?5He-Oj!gJRApSjnD+XW&i97HrKIynUJnz_;L@bC->SO=J%x|*skJD~t0}8! zeB<_DNm|A6~uu63`RL1QaLK}tlBT}^Ne|F3OwyPzU~ zA_y-4`7Wz!l`06QIQ1B#m@BuX`1w`BYsm7zr5te(`{8H@qnoy7ln}?ZQP`&i*pUO6 z<$1)*p*iH67%^1(qZMh6He46n=@x_ju|W}r7VP_@)Ds{1^+JxIWIeL$BoixkI^U?{w8R!+kCf5c10o^EJjl27w~hISU3 zjZ=WG86dWNpd*8}fNhdrF-|bV#zaFPSfFG8)!gZ7>-`)~3-pb4IVG>a!XHNm;9N{( zHACh%-36@f#YUNuJqlzUqsU|%_D@GQ3vk99gn|J>8$h@di1v|RZWp5@F_`TU&1CW(6DZM4T{m``WIQ%wCXzWTo*~~Ee%eCtr z58ivHK|NY4RSL3gpkXHj!;gU4X}Id=P7rGE64w04-8iTHDh;wfxgdZsByD4t_R0GoJ!aYtR6K|cQ-xun5oM?`^%I4KT;B}?xKrQ;^mpC30R2-mqg-b`&db!Q@UKx`jNI9MNJLJW+4My$`$7$zVP*n(%^}1e zNYZenUFl}`y2~I=76;$lILaWB!(#&BbJ-qo z-ARmz`Xz}5ISuQOB=GiP5&!71Y|DeX@w1~4m?d;C5S`Y;jR3L=Jy@zq(x$vJIVmwt zW53V-5Gamvd1~RK)LS=tG|ipVgZrXQh&YebpuS`bwGdq#8BfqFp+l#{CL`a(7CDqq z5`8mpd0ww_Sv-fW=?9UNAub#2eYzMHjDP-#LVW8z>v&Uh!x-xLL(FBK@W@r!-(fT{ z9FqO8b04|lK!okrah$zK0U`a6{~?MzKIh}0sf=aH)Cdi{;;ZDcp|B*Ti%wHBx-38p zumMw?Q9_-~mSS>n#Cbb=wDPOHQ8M$*Z*BpF5~2VVWtP&%h8cF3;wsBYdzu+yPy|gB z3KITqp4T~In}Wtdny{4}H{S`gp*8byQ3F-Ofh8c~I9OOcn%xynl zMdqu|u;(jb)roi7q9Us>#z4s;%QyZD8lApzZ#9t?grvgYXd~f&$s^H#Jo0qyuu*8L ztIzsvN%-$ba<~htKaJDE)`&Ks(<;@NP;m`?fP2bY?a*6KdZYo=klB|YO%=MBaz&e!x`u!&9wPp z&RE454;ASjUFIuUKm=y?m#H_p*%%mY7o)8Pi#U$>7VxI2`rcF zj}(ULOy8gi_eiI}Tz-E=E-X-Ip$;?)+gqROj*~YZ(}>nkvgXI`05CDebh^U!GCVd} zVi!N*Nu3A86U;I!9?!|e;l@-3`H;>6BS&#mVNU+Zgptosk#^-Ity%6jOA>;ep1Cj` z%n=KXhe+~i>yQql5%W&rRiz~3ah`fr71YiL*p9+V-B~o4{gmuRpSk$yKU9nJ#*rr4 zpcw?OqNNv`z}Ru5N*(3731XhNdj-eIUY)^7E>_20G~Myes+e8r7JZpFFuRzMo~-&P z7kbiwsticU;DffH2`QCy6ZEXM=%b78y{R~T?x&*$<1JRRjJ-rCmE-`bwoJ-X8~s?KssNX`@3K3B?Oz z_Jv)iafQTBH0*X+13lKtPiqWcm{qTXApPQ65E`B>;ot#7np2frt-s4)uDG}XGPe7h zKYgO0AjI8)(m@{h4$7ka_PdZ!2u_j;Nx#O%rKee7iu#vhl5Q@wt^YoElcrTHfv;cd zYF7P;tEKRUAJlTP9rawGldxm!jP=^F_Si=1P62~(i6+p!SNRitP&-{ul5)0@#j2pG zkW~Jqw3K6vwi*3WGG!L^!GXgXF`J56deQE z=?3-q$V_8FY0rcU^36`z&f>R9OJnkY^uuLOmji}`U#(T0t`u=M3&kRx9uJl$`)gSs z_|8X?>lYCr=hKdnU$6~Fr8TG|#rjkfjj*0Pm%8PEkYcY$!8-jwn@x<9Q6@cja7;AS z8gDvW%AnV&FSDrqIFmPHy@3tl?2C_MC$$t>rugKzX(k0g~+^kv37kPqEjWLKR`tt5CA&d-JnrEXD9 z?QBs#1SUy0LwdTb5~`AV=2Dnr9P`UBlSmM=HW>Y!Se@>A99yoZfJWI-yVPZ{o_R;B zG8RJ#HwU%SZl7Xac;0m%p<-a(HK?}JgW_-}aYv{y&(XN>)ly~A!m?HQBQ4?v zol%V|-k*0yj~f~tZ3@3|N*SXV6V%)&4I3_uah`JUyO7Jlupjah;*2Uh;Kn8}=U7ES zH`w)f#?Jk2a<}anZ4x@S+l_Re2dRfb*3|jUs#okPQL3gdx&7N%QnL&myMklM?uQlY zPn{sWu5_l)JFrNmZr<;^x{R~OD0L@1G`<((n8$8tq51^Mr#i`f)lG7=85RpLi-f7rXMi9AYz;)m>hJkwb87j94 z`oatz?Zpz={Phz1qM)$NcX;MI#s#cywgUe#NndmcU8aQ zH7Q8{P@JIRSX%UpMa2;O63j|sXM(jyU78B{okBG-eSyd*U0RJ15bV6te#>qpSp~{d z-7Zc<{fr_O=$k4Ad^sr@%Sptf=7wb9O1-!A$ePg4OrbkJdEXk(e*f0ayU#6oj>oU6 zdK*1k^rB+BM1T>|gDUQMGE+*giab$Qn4}cvr@}%!{)^tiJiG{ne(PPv!itrB{%vnC zI=A<}s(PAG*t)_deLVL1BWy#$)kuBcb+|T{(zAL&uUPaBVw-&{QT5*3Nd1|dRqjis zAdcs<79@Cj5-s!&cMVB5{N8$068>+Jk*QcYO{8^II#GESAy3U)?=!C1vQ(8|MlTP+!g_vK8|~RW4}d`fJHam}5GJvsT2oU7iy+w)Wmi?qe8ba#66Ht~R86d^QVv zwYZ{5w)c|@w0-jsaSjbE3&JM~tdpf1!OyS4>?bm`e22dl?-q$m9pTS1phL_Q+A=OQ zS+Ucch3|YXhPUdmq^xyR%-Cq!d&{uxEnnrI;fiJL``TAt5Y_L2rccstc|6cUvZ^!Fhsdwv*@drR$U{5OXq;B04Q9@Kf0SR+`L$ z|2-wtc}1L3!^%-OrU{gl3g!``-oO3py~23|1mrx9^_*b&G(6$d8j_G+@8C39ew2}O zk%n`;*2{T*-2FoQuJ{v@xlNkl9r%nB1F@x5D88(l#}lRy72iqNSRK+ybLHz(fwNWq z`sDN3`NP+!zwor)<$kqyyFrSJog#q z-_kBJlE zDHyirmj+6jdPQh)-?!lE;6xSBI^8SGuOhWNQWV=~$o+LOXdrtLrYmIWN|uLT&-0%f z5g?cd_KJm7!V{Ycu^>x>4%tdhq1#mWm~|v?o61I{aqK zTehn3)3MU|)+N=3-!R&(s}2dCLU8)^`W>iDxwTjdt022zFrjN8gRq3bS;1hx&eXO3 z;W?kfNVAejBQqrv!6<=jUI@+7lSnk`7h#faRmR#KMo~N2H;uYhUp~)MjCS!Qw)g~I zg}`2KQ%6|Eg$CSA{QZ!_$PjX6>CrWcIUgW-ILBUft9hpLtC~NS)r^BF&XDW0pImqA zi7jhL+;F)VSA}MHKDwCFGn)Fi6pp^xEjDmVl^wuz8t?h$TY0EdmAYWAOWB4L>EFNM zblxNpkGI?=WiRt0EQ^j(}KY=}!4uqX@?-Rh zIq5OI=p>V54c5!?iw49K&GWr0HX3q}wuTW*M-q1?OuHSkgFR?v998skjYRQh&$q5k zsx@t2UH$jIbP{XXIumq*%9HyXz^d6Mz9>1Fy`Yt>NRaS(V?^ zt|(-V4G3dBW^)IY(1O zVUhZKks9Mx4_3ylno*p%9m?z)#=W;yQv%7deT(2E*V9mJ{GHWg)3af1%K>R)K{Z%9_@1abI;RwM^NMQ5JE2A)y@YV`pPh=#}Qox{6y*Ij1L(J!`0L- z&nhT(821Reg0B>_3U|kfsWr+Vy{DU|L3wRfNrS5v`_yr||DVC81w}*h0U$q#bje@xEs!7Z`s{0pu zs3Cw14q>EqblIPoS?Cr-p9%iGAK*9TZ9*)yNC3F_oAMWl|Go&nS4!CaDn*WSqvbV| z3h*@&zMTL42kgSYa`H;F;PhW?<3C?Th8s}=vI}&;zV!dc_x^NHPkk0kyM0_paoY>G zto!T_eWBw--Jk#oQT>t%7@Up!Q-rQTJk?J2c`fGE`X7A*&L zp0+#2xA%+P6koC1{mq8B>Y~`~U~}WKR^3j--`iIlApy{BD#JOVKY)4VxqahWiq^*$ zij(CU(*RB;&ix~kpC2R|d^F?Q0G;0jFTk&&3-{Ok&;YT_m^V!BUOtmA8r8s`sxYyD z2M81uEdr8y8JG{xyvVfEc2tp+)5G^4m88smFY!u$Oauk6_A~9S0H%u$I$pXqBz#~? z!e?up!ftBc0yORwvnGtYz(i@?J z({QL=2FIG}26uVpJus8vLUJJ2UNe{UZ~k|fu0u*gRThr#zf99M@C%%nKDeV7(ewVW z_+&FiKX(EaQ9a61%>gjLP2XSmni)#rGY#)dl-CiVfBi3MKw=OOfpROhwJSQuBVU@t z?Ezff3t;8f8igUN`PVbquyC|BzPJZL2D*YLruSE=2DMJfl4X!t)3pbHh{K2ooZa}{ zz!kl?3&;_ZPd@>+z;Uea4NdW*X8g&bowq|-f+z_`;2YjAX*|^h4u90SapSiOygT&Z zD!^QJd@xIJY#fa5Efov>PX9N^As%K>y9`gTxJcVDDkztjEDBW{^4s!{kifx#23H$j zyP>2O8C5xN41Uy#bZYRS!v7MOsvYJ4nC*k$3M@Wb_Te6bc}FJDm5nD@Kp^ND2cDvv zd4Uxqw9yO;;NxH{XHr(+tJGgEgX87V-U4Iw54a9o?C!#1M`!_v4Ej0u``Nzkn!~-| zXg}TN>|PE?&J?LE7O~VxTj~MALn@qQOa29VO50M69Bj}`p;QR=+_QEF_DuzOQ6;ef?QPh#>s^#3l6!peZS9m zU5SQV56mU&AW47=WE4m^-NOf+7K4^Zox9uRRVg}Ojq2^Q8^Kffw5}R)3&!zWBB4}5 z!T0VscWy7?A_z~7<9jGJf3DY2xNVIxijzjJ{X!G5<_RrA(3}1F#uwmI2yuTC<$ic~ zd;K`9cpA79Fp&v}xGuxpXq*nCiMaC8rU%*$cho#W>ns!rGXp;JjD1=YCZFu z!DEDN8J}sa2Vt3E?;DtPNf9*t>q1bgsU2`!=}rfF3f9Kx)KFl{oh1remD>oN8y?>Q z^G?N`7jBQZ0rnz0UBJqvnwnAvzD3TK&^22 zYxNsjR`WFg_yKN%=~lZ9e)8sbM{o%kal4UG2Sq{y+UkG~!_XBY8BJQ#3r<$l>Qh(% zTuXxv`i2JOUc}BvS`P*NcqA|2oHs?ILb>P)bdP?f_i37ia*d%GfB~B}lr21G$7qhZ z?nj#st9v!k&v6Aq6fy6FWTF)CS@q)^ssaDZ$1At>^q2GlwAjmQ5Kak?!3ho3xq63O zCjq;aVczZSuO^?{)sBSr8&)toNdomh>Q{Fxvra1t_1dNxPU%DfsEA#;R)Kbe;|+LS z?a*j8kSr5Y={^1EH&LB&#p%v~NF{QK~1IrCT`D3I02`hMb&-Xtg-~R3_ zAR~d6?+`pipY@?T=U|ZNxXoY8z4EF=oLkogkGCgQ8)G zAaO>?o9S^rMt6?KC~j516S2?u~(t}B#t zm|{n}tfkH< zqU(Wp$lDGgDMX!BiMfzN0Y2R0@9MGtYTimwkUOzRle4 zCEpaKNQlggmUZ9ikoN9y8EDJ`GmP}AGZ#Uq4UsZBT!kPV_5ijrv=KY9|1#S(h3-=) zP|r(dSto6UxO4g?z2K@hiTb5Gnub>Ge*VNJib(y(ztK{85J(uh>>%|R*>8GRES&@! z|4*koQ*&0XH+XcD_Z@mht~jJ&=Ye1H&w#UD(U$4h3Wa!%h~2~%jk2&1c+IthM~yph zS7FP#;bz_d4>}0;JiQs))Ff|UX?doD!-Zxe6Ak9_U!RVyeU-vwmiy&%d-TIFb~vid zcY~-mOZVyjK~&TEw*d>Z%|d@1=km^cRcM|MTx-O47TpiLO63!}FEwQx*U%j;pOLN$ ziX1c_+culw)3F&Ng@r4|3}E?9?Ycsc-g*QkbDw^|^E5u-&@#Fxl&&$)cT-+CEM=NiX^ zlE{Hw+)&{JG`vD}U>LgGwZMr8Z^r7%14S>7bNOI_LTPFL5RLAhFXR79um zfi{r7Rn&X8x`$-_b?4^OLl4j-+zr~mZ1Pu$aD0@*;1wlioOCa>y$aP6L@FCWxhPi|baE}*P!99eA3WkPXF4g{&eBj}rN`8r zUwEN<^Hp$a-%FM6NC*Ulm}T|0g+m1oq*PYxcZc7im5~756I~#qYn%cmOS)dd$nvt* z&_m%PYWhEbaZ}4oT4{Dkjd@L}tHQnNbDrT;it6omZ6qg~_)CYTJ;PbzN=uH@`H{pt zEQ%H>K_KO#3uviW*gF)&yoy5wDXHp9Bf%zU^|=;X?4k`|h$YbqA84%>Ge^s!7)AaY z*cC>B0HKnBBm|Dq+yA~$?iZD(e-xS|*>VFLoOf0g#U-V@fl8U*6=1R{{-E-Tj^AAE zdw@TS7#}JzTH>`{hsm7G_mi+cXkMy~sv&*+Q(m)+ArCT_S$PpBNlb>)|0+QIBjhOY zY{vaL2o`Q<1^z2a;I+xJq=W^@O1q}>zja9|2Xff^!4tI3JbJv1Mvz04XWRtl4zJC<+l=P=sR!hV*b_<|Nd7nJQj{h zV?yNLU;ejL0v8Ih-t&j=Jeg5*-N^`~8UUIR+XN`+JDc()m$Pv+gkAj%^mcx%4(BQIRo4HE6 zqEX`Tsd{yBZioG5g)QFrzgM>w^I%bw9Jo|(2~Pp|`^99Hsp-CIf72b1&vJ;qJLBjr{`Mlb{#_nKq02^3Q0A2;ETA~%-h}R5tqGL-gIO$ zb3laeJJq_3$94;Tg|vMRLYJ)TW?not>;!^q(}W^NfVJXfHLT+S!p6D{ibc^}0mp)L zes=LcilE6eR1xPzJ9EM@9aow(O}++HWxD?TNi9uh8-d38 z+c#j#O9w|k18S5@HXY%WC~g%{ZfJc-#oAC1{Ar*$y6LAmn5%>s8D5tHN_YxHO;L<( zO@+NeP-JEzAff2XG9(VLoc4}B!>h$#V=&C*ei@?^(sF-yZHtYidJo{98GsFu0Zhs% zJT`-a&4)8z16Fp17JW3FehxN@n3+#zfi{aR-UNv0Pk_?eSynCf?>h`E<}>bu zN?TUAQvUCtqXQE7+L0h@uIEKx0v$@~e10hTE1+i-2T>K0csd%CGdAzDRX~0o=AuLQ zxBffuv1Sx2r)E&%hEW@Sb=xbNQ$I56t1j28a^o+)`2`dfDj-pX1z{G1`RyW+xyCeI z%4K)$VGtYEzDhPz^me4706B1cA#Z>P7X?_oyEib(VqtrJMV4I4Yl4LHoaWPSA`gJ< z6lGK?vm@%R1Uts+Bcv{D$Pf%|FScwflPf{G_S`H3F=TVA`_aSj-BgkgGWBgj=?h-Dp* zg;!3@lE;4o{lKdA1X-iBL^bmT5II`BN3m#11$d+k0C$*n4f_c?BzAq6bK6r@4il{S zcu}qpnz5iiP|J5fgS-2OF#!4v7?i{w;w|q|PKk|(9QD%dNk2s)Z$LfW9Qh6;F*Ej3 zI_-84MJY~@=9lcfB;^Of*v!Tx#!GH|&xVliwwdnlLvd!3iK$1mgP<8y)XEVxvDx^6 zv?vzW?>H>F?+#(u0~f^HXNr^EK|c#ZilpeiXwYQf7%;!X{eCZoeXuh>e7=9~Jaw?M zuyQstw82v4ynlY&RCVl=J8Ti#h{ZSEhKhEW2OqMEY6e;+pduiFcU)ETs)OrzM!wHd ziG!zq6_3Ojz5g7toEAIc6W{F>r$s_Vi5%ny z4I@B+;G>hRqAhcQ5|ba)m!Sm$K;dIL38DjOAl5*t$B9ef9@5b#b?Vg)$m zowBR{bepjvQm0HL@|i|^Ki2WORD0_NVUD5XB8mg9_D_`jift-UzC&ne`+I_0Ti&)K z2+aq>pT;yvlzbG9v3C+x2vcU-<`_HIGw~>9kOuc0E|PX$&)vjOzv+=CcOvJ7O!UUn z+}c3+ia0a>R&xq7fD)hT0;)Mu5%*6Axwam8b#T(7$;TjVT&qZQl2A?YFq*w@U=2(x zBH%)=HW&GW)LDVQi@rB!-V--5QFjw21fm6-3zWYCMf#-W4JlY=ayX6_n!ua(tu=pP z7&~2=t+8{(1%zq2FZb4t6v|&8#1{|L$(B_FDcV#Z_cKdFAP7_%J&-hqym*Nu{H$Hh z$irY*nj{oF<12lb$e6yeyHWHg04;&b_A`}$W4(HsK>0uU;ZN?f`$ zL|(Cvej;AET5#|tXk{b)yBYxw7K2bpHh6*?VzI{i@9t1q*x}G7SGT9DSzv#bMms1HCL| zM$B;Uli(^`igaix12SbG4Ex<&tk|Juy#@tZFUMya^-RwYiKJKSPr}4Ww^fA#c_c^* z$2!cOX@8632$|Y8qu_;o*BgKHXy->GSTnoJpKnzrPI?JaF-*#vkr(fN{(?PLa$zJj z8dYkL6SoESL4sz|_=Q}%%yNen66p|P@t9F!Hf+W}u(1(Pu6s6F-jRCyAwFVjAYJl| zi^X}~jUD8asbJBFqkH#*9HH6u(EjR9{T($fPjxKY(MqTBvIIRc2{OXuWFSWY%hAsl zv*|Xk71lx9Z9`3Ht4ROZtEU-fZEC4y#sl(Yif?_hHlotH(iuF6e`DPu7FtPs;Kq>~ zvWs}UV&Xjs@vftj@tmlAMZh*WIxR!=1&p-(;)Z8Pmvaw`G=g* zgXUWeT1zwoJYLo}p9-+8djL9|n|a7fUW1S-3g+$Clsg>DVkFCKMjf3jVPM7c1i7G} z`cENC$8#l`sX1CP+hPHFi8x+-#Eai%rOJS7p<-hw5S;ClABL34{4xVOIFxDlr~A(u z7O3uz`o1*WOvPaI9izdP-x7H^$b%61G@@6uw+UNzlv$yJ66=&=aF%N9Bwu|HN0rpM z=Cno*1?c3QgD0qHUd>n5c_+HTK20{<`!OF43Q{-8kR?| z33EW6$gf2X<2>~i0=hJ0*9gAC<$zk^OI-bS>a8WS1LeA%--O9KAgJbShc18)xirbs z;Mav#Mn+h<#JGwq%>%|)Yu#)^oX9qo;q?|L@Cnz9yT0V{b ze*K}kRm(ij>!9dJdTY{uqBN=>AMrHGk14A8+&_6pi)hMvmdlHTLecA&y{F>KAPF5D z2^&EDoeavE%^!gH7c&_z|N+78y+u~e>LPadER^`+hOnnw1OP& zGE&BQD5@)sq7;-W*iPgL-@c>4); z!ruMRf5oVm&0;5JI9_}V%>0Q$hj|N7;Y=s1*@W5~4M_Ur%MX(ZNUOL7iWwXNp~X>Q zZM8l8K}nm&R}owgS~F#igpVT%i&$hr<9g{2@zF@f~Rfk-6l`v4o)KNP=^;FM@`Wn@Ba{&b;VIPMNZ+&qw|#t1NB%*FS&Luu z8X_<9GGhC(|8U@=!~G~5ar$qf+AOf$y>LP3@Uzx8JY&sJ9Bu^?<&mI+ZzZJL zl44LuS^=8-F~4wTo#KgP;GiLzi-UoAvXp z4r7kO%w>h1&e>3i*HG@1MtHSer2Pp*mCaHYVqr0EG3*cgr~4S#+Zc#7~a~QK89HS83e9|z2 zl(cXBEV(*VPC^5Ft~as_N%25; zlDol;{1X`U*<6MjgoWfkeA#!E6fHv%EZr`hXXXI4v7N5e`MxaGmef{yU~Y8zgn~)~ z6R}jBC1a4szNIL(_c@`%i*F)^F)N^O9=^Ua-!|wKmB9~H9>8~U5FEwzu#0?2l+Y@R zN#vx?`kvrX?YwaEN3i8t{n52?4FaoG@fF*PS6uze37w%fHoH5WJ!iLQw+zT!ln=~g z%)Xpr8@SOY;*|B1xIw$Xnl92PmRGz%`oV%#?y(_Rd977?nz@2S?Y3d1Q?PVn+{acg zS(2TqVeJ)ks^{nyjg!Vfv|_0jESR(3xkR|A;;;}>*d@()IuxFjI7wSz3DQJ>q&8bA zd`0CX+SlLzltg$w%0rv`=namR{gHkOF>jOpV*w~wc>K}XhhK5z+L5u!dzPBrz1V|- zQkqZN6CWtsNSvT@hWgXY{-coaRaFYch>N^xHPdm*2#_R`!VnQBdqZpmo*{_87tT+i z=u7Hi7pz!`vK_W{M2ORc=U`ZC9$dN4(9SYr;Pi#EOojM;deK96BV;` zPb>ZqdGhPfzr*_A>7(C%jCBr+Vj^qrGZ)=gu+;HAbc|~k(F3?5Oi3vW%pj1j9fw-m zN7R(X)y)?rKeELUr9*EQ_GT@nzD(`WMzs0eAuX&bChjHGSxL0v%N-lr3YF;@9|WsG^X+SaSPV)>vXiP|H*sRh13shPq6-5ATC=ecxUF007Ig*}{jcB=U@= zfA_aJDK~KBv3vuQ7Avfv4(xhBvSa#a$*S!2Dl_u8P{(JAX3d-OTWL1DeJ#L&dD?Y+ z_UifBD5Lg#(os34B9ret}MmQ~iq;1W$LL#mCc?3U> zAckyNm0ed%Vyl(9CC%Wvu7UnmP*B>IRJ`RHE>u-3A0#3_rg1dF|YWjm0R{Ijajn)Ff zw~&|BfE{4dxMC2pyn!1AZ=lP`@zKx0#Sa*a+=FDS)RlL}_DCCbc6(@3UwD!h%~gx4 z^;eae)h$2CJcw*q0MCjScvc8U(0**DXuZJKHMHY>3no_Ap|&k?e{$C0r6KKnzvUrgGrwXR5xC@3@h-Hrs9ri@|b^$2#!=h9TN$@3YjpUvy*3(NZKBTZTRy zE?`7TT{O~7fU&j+?5S>>^7;1`t590W?n6D=@?_ z`8tvNeKB#<5dwv2JnE;nlKauWEQ0+L$N?@{U9Ctw0PW%QE|sxvrax-^@rEPSbnqIN zZUYf7Hj;2jmxs7u5pOEGs&75u#x)w@RXJvf`?gRZnF%J(za$-f8TGE^DQJfsd3Tr7 zO9!^a6Hbu%N?zr1b~b!+`!ui3hs4kgT_K||>ed2+3=wjO=!IFgm6z|IV|XvX^kwqa zRRdC&b$!`{iowZuE=HKfiyIk!X&Iycxw& z0(x*DS|~8Z?hQPyZ@snCH*(5l;v>Xcw8ZoA@pfR8htIe7eu}RSgBjf_r?AMU!Vjn$ z=}N+20+%TBP)aFNzyWki#ovOzy%8S3#MDX`7kIS``hY{)6v_{%vUqF~-rfA^ArrHN zrTyL^NZ139;!q++N!<5ZRy0Q7F#5{!HJ~nz{pNzwG2|%-4iwG*97WkX_FnzmU)e2& z6`9F&cUNpSIG5T=&e2am{~gGR3aIE@^+S5}1`a^By(KiAak^S8#wR3|_yE%Dd+8B) zXhFRU$bw8Ok12kD&^TJ>=gpFN(vSJ=vmOgNS-Jy&-#)y{Al|=QfHVBDZni(Spp~s@ zle*Q^cJbLSVA*_ogc_4=al_dyolpFOD5^WLo)LL1yG{ET=j)^n*^&#(`9b+7fBZs3;#+_e!DcFsmNfzgOwqf(V~ryJ z&IB_?2FFs)Qb7E6(MW7VD>;N)qiX&Xk;vjE1ey0zZ-CU{Hh3baI?{_+(X%x6P;1@s zdZ1_!GNA8lwi-zJMZu!2c>CkwjlB2UIlKBKVe7}aKTDsi@_do{^!b`n8TuMC8S@-j zA;9eA)@H125tVkN=7a{*rS@!F4gu1IX6JsL=gM&X3{b4W3yIH z{>;$?FO`NPG8a>12@l~jDyGO_>XMV%fCoiSv{}$U5}ix0x;Om!M8;_zlnGK6&t)GA zyvZAm*>Vnhi2YW91Y49QS_G;(V&(}QP5aRuOL2gPScI-aa5}v0Ffb&cBK;b4h!Z%R z#4Uefno5kTZ}%e+{~gN%nD(L;VG)i~n>Kw*9+VApR4+malc^D;M~YthmAdRq{z&&N zV5j^;0es&cF8 zDOUtK0Bv;7fQ0GwKgI%y+h9dzKW6L@gFjzL4$Gs|WX zq%CYGo0eoskM_o*R7$gHrlceGP)1!qq$wTKm*kC(xcNM-bUyhWd?euwjeV9s|r!;DjnL7@!i%! zgp#3uyFbw)a$|%}wg*W3<_|PEZqWM}^q!5&yvfgs<8Y!-S_go{?f0vi*<6>_Qk7I{ z&)e{AYH1cUQ8=~5wdKQnt)oO|qwkrD*tQpYVP=ZNVS*@^ow<0tnH0z`E{2Z2hwZ?l zCUE5{3qMKWU!U#0?n|80x=x{h^0D>ecj1h}CZmr}D7KE$a~^R%r*QfaD==#&@beCE zzUj+4<#p`)2d${18=<488S-uT-CBhO#VnIvdgTE+a&6>daYAz&?S$`T(H>jLgs_C+f zkarJ0@OEo+45(RgZAU)Cq{7CkmL2z}g-*4V$oR1kKF#+Y^Y9FT?i&~F-L9i@2P$Qw=h)?t6$=oD9 z`?mfgZc>dHO2jP%{8zMhw#d#!+(U*MD9TT=!R$b6bYUJBpl>Rjmx8MpS~9)>o{Q!h zb3c0@vO#w(Vy>E(psFOQ@-e{=ZGWe8RbndY-4=40%b=8-IE$i8I##=e+uU-Lx*Wq1=N;To@3$Oo&vA>S1YK^*pQ9v4{ z8-YzXNK1DLlG5EFAPOQaNH7t^L-GDgSy^z#R&IKM^Q*zjXC5Utq3}d=D`QO zRkNz{nWvA#poGvSeG9j`HAF=b|(VSAUe+yM>cTM!gwd z!S1mT79@0iG`b5g9qo1CrDC@>S0&-*i$0m99MJde)0i@?)S#v6yf?iCv|FA72`n+a zAi#A-;NyW|=T9a-W*jx-*C&9VP*EV@DMfVFU5>!3n;qRuHF=LpGzbP`v(*{ECN4@K zCYUZapps7a9Rdz6y9A9VbZA#YaYN;z3?BGX`Cge0O3d18=n?V%w)Ati$30_kYDCN#mK?% z?P!Y+{ZbK683c?l4dF)Vx>{{86fw+Ji%eiU1{B8@A zf-FeT$rTc)QWM2VDeEelq!KVbJ*Z--219{b84U?n3ktl778y`#<|Uq6a_)LZL0q7oM_R9eY} zftFCY{6K_OYciQzfJiOsOd-x;Zbai^_60mzXiR`)plQls*rn<=SZTjZeK=4ED>K+X zK?4K%q=WboE%~AK*$PUdUX%4kEg-TpFE5_S?)Mi}q<|rMi@g6<+Pbo^O{a(&9+u%DB%~`ERy_|Xq&;6CCv0g{K@n~X95s(@s~!oOfnQ zUD^lgMVN3P5BEcU#BvSAMwoKwCpO|fp^WnOdI5B2V?%ml1JNdsAX^9Oz z{3Z%)kVL5_B+nMZEA6vesY)?u?siMAHt+H1>h?`&KVadik1)}YnBUhDkR*P9V)ros zq_UZNi#owSmUUcIdQHX~6cEsSEPP;w`+?Nms?{zPP(3B0J6GS{^Wlv$jU%Cy4TfQY z%Qgc_fP8j54AN(?J|><7E0tRQgR0Tu8K7ZqI}56MrgX-WCZr5MJA8Bs;_#;QzI>IO z^76};JY7pv)8;MKJT?64K@&xnaz;96K@Ahm*$;|zZEWyw_Dg@X$!rci(0*Qpm2vWC z7=$PwBU(sJ9Sx?_&l?qAw(34~vK&Z>tw{1B`bjQDHk~+6Q~+!l15x&D38C2x}%4RyC(FXaci4 zO#?jBXPOVPenT0aJBx@U&*%AFc2h}Rtcg4NjAW#{Zw=}e;}mbZn!*rT56#CX6yggh*&#-AhPYi3sr(JkH01U;49bLi zI>f7H-L}qkL$w?7COK?3guQ+Nr~B1i&?}bdEVXClYbh|1vIqW1a$o)WMgd7aNif3Q z62KcSfKKfxU-KK_SkY@DU7oJZxdhJqsn2IYBeNO62Y%mmT=n6mOh>3X!)Ftf;i`?s z+ey%ggQ)Crk#l9i`no`N_OS++6DYHN=Y%`CUJ1wcKHnO!U)vSPw|m-jL7i`>Kt=}& z$yDhfv z4@Z5gQNfzO>^m9+N(Vi_FCOK=d8r*acUTqPv$PCIdutGef#V%w=CJURCLV(sf9?8D zx)o-@?qI*VYK&tNBi?UYd&kZ)OP^C7)x3fvk^eMRk{In0mEM_(5@KGC<^If$5g%6V z;g)A-2Jj%CjZfNeGWb{njQJX#Y3h$dJ-nL$3(_9+l=y`KfIf_NJSL4C(aw)+8it<7 z%X}lydT!6si$GD4JQIqapDPnHT0nt%q}qPwN6TP%;V7`8Qto<5%qrc?h%i#mjV z@d(M+v!7kPp6Dk^&pM4NHr>+fkq&BDaLqlAL~CVbCTP*wl^SS!gGV;HxK-BDOb2-N z$?V}jO7#WywqzT?^ynN&7ny4b&;@=#RmxJ&R| zK&i8VHx%ALYC#t{wcs;w>6zUbvjXb9>C}vvs>pC_1Av9TX5X+uTMNwX1y*W7AHIrg zVKBgDoa0^CqR4cLNy}v3SB`-gMAFI&fJ2kK=->vt)?Ht=;&PlPHUTQ;ZfWCgMce;7 z4B--kL;OEMh)0RuJD|y26u0m7zbM2B0K5uAZb@@Cfi3=XY*C3^LL>~Kqo`y77yF9R zGb?CYKiB>@??eN605O6W^kn}PGe&&(4%5#2UH4+Tb%QXybOaOlzJuN%W%ikH#`KL6^ z3jiE_i=ng~xra9Q8JES7NXMvOEP|}`wfk;;{t&*@{X2X?b{=843v(XYnkavv^%ejq z=P!dS%zMw)vm>9z$&uCJRoPARNYN;2?mb^C*aJ+bxc7cF{yBc3W8Ct@Xsv^&Z<)o4 z+0`qcN}(mYNp1cMs^lcRqK*Qaf*21*yMkuR6vqI~1w!(I)+!W)STBENbYiYCytaoT<%_EER^Nno|OqAD2bt{!*8_FH9k&GV<{dE`jcAL=$3SwPccnActhkl`CZ;Ei*SN`?T)VTS*;PpeB=&ia*8*kvg9NxH0Q zxU(#aW>-u{jfgrnHW506A+-9Zdy#GvMIKfeFc z#`Qh9a7^)G&>ST^v8sRKKQKa2QV@rf4psQDlf&oz0J<<9{{iQ*2GwvkW9j=4)BwXm z*TB~|K}Ihj3kmY#(w zeN93{1)4bQ`$b_YdwEm6Sc$puSNwOT6QO60^vs62r!x}I7 zDyTf92sfU2?>|2I^sK+Eyr_`B+7}e1ROY0>Gmc0U$xu-mp;BRRk3GT_;XG8ST#~m_ z>3Srax&xYYR?!=0Gt0s*1D+}8A)Z-CN}v}%RA=x%z=QOCpK|5bk3sUk_LKX&-qJPk zs6HL3AC_r9*0#E0n-I)6u_@!((Wugp7U};5AN0Y;wq@C}=+5-2X#8{y;pz;xy0;2q zw=rmtc<*&hk~$}H!q-XDS~4%jQVT{6D!kTw>^|w2+r-ORKP=jrcijjV9^4De`a=lG zD*6vzAbrTR#%>mQ;Y)z3N9!C%&Vt!QZ_J!yFO7?$C7-XAHMnZJvN`S1Tk1p{-6>CH zfV7fWL3pfh_UY5xj#I~=L2z((&mVhpfB<<>3PuWkvHRYGC1abtw8$dI{Wv}HdZI+5 zP3)9@f&m*0FJ?5q*eC226%}@h`&khykJ?}jh2rStWwMm1_E~5Ws8StgeL1vrHmXLS z9!Br3#zpO>y-dBw<{`8{o?{1SiHw>mUUIbE9Hn??PK$lksQg+ErC{7C^d2P(Mxci+2K3(ba z!0TE+j$@NS%|Ifs7m-K+7|MQFPU6XUMCLrEGP@SORH&9;Q5cd)8Df}=B@@?S9KD6} z^l|GY34Z0TT5iO2C0x!Q3iF74c!|+$t(45x@MOg(2|bV}U?JC<%BPbvLRlzkEr}!X zho7Zla3F9`Glvmb|gw<3hIJ;$M-7$Etn)79WNYNn+i`M|734&PRShm_{kJu^9$*As5t7ho9e3H z8Jre1ub4;MoG8VRo>MF>aBwkm$H+w=CgPrvhfD!`xwUEOw}`g)#kZf!|F`1?R2iMT8MX7z_oRU;)y1U{o8i+?WqMMR&Byu(Fj} z*FcHvG*tic1Hz4E-ci+f7*^xWO#*9W^c9uf%6QSw`Ar}RDwK!6$v0e6;qbrMZEAA{6)7aBh!%k;$TNt zR){)<9es9QK4Sv(YxNYxn4>uOYPAOCRK=%Myw-SWn_$MMHaeOZWgW1lXv{SyrG`&{ zsFl-vNKu!e57vl@7>ut}l~c7R5yit3Oq!QO{zyPVvAEFJMzYu@kyxM}1mhgYjNNTy z)*(t^clKqCFxoc|cWvM{>NCqa(pM}-%dxg@q;qkx*P6oSj^0-#Mq<}j)R=Lw&OWm z6E;KY83uqQvPanh(ORE($0*v%&(3Am$e>b}e1cJCUxoeMMCeue#3MEeJBjNq6ynY|&Pad+R@+^x9uki0bX!#5ZH_vdxRYjbD9| z#OJ2ySR8BaL0!Ky+>Li6%nr76@OtqWocEu^?3D3FGpo` zbif!_@`n}bQbVxeaxxtmH3=PV5Fbj%Vw+#&@LF(HNI(QkUR!`948prY*<@6y%*~Tf z`yPfIkJ!(3U)ZHEMOZiC`KWb%T)`y%_|ece(PLercl_XR2{uSo;?l~6iYdbJIPk#Q z068TJS>7f+;fKtyObK_38os1A5PBvN5Nhi%<+7ta4tMLp?R<)oyE19)?NWl%zVGK} z!p@MXC9C~>%s{g-3t1Ac$t3o(RdWYfGNn~>n1W&2qj^c*je0rZC!6l4-x@!cQPI5| z=S?D~#?HmQv)B zbQ!|Ke^eq=^~H3I<6wk8z=3y6ZEv%jZof{Z#_c@DMr}_*LCAU{?sF!ODhXS_Xq`=A z)SF$+6#w3GWATU1d6W>RI!5RtDc6+!k+7U4Z`Kto@{b+ltS3cT3^DW{mrc>nH6m&@ zupmk2z-L*}o4s!eberbEwSEq6=*>O8)yu#JrMGxKDi!MRTtcZKG7@Ck>P}tl_m;Z* zZq|RCPL8*5x~;&=>2YIqRIBUkNI5{DN7(}#v9L5#*$ShI(TUOgicTb$}a z%oP0Ezfb;xODd)#76<)!qxgL&Qa+R6nxAMc)?0=06q$9VghKRH39YA6X%`9aWrZNY zHR$>cZss3b#^W!w2?q0Wj)jy0a|Qve2?p-K`nmKHD46B}M@xE1MF1+*N2p>+Tjr_p z$kO4!g@?f8go(VL@<1rr$rF6vtfw-O`QB>9VtTd6yFl>ADd`Gxk&y+H#P>V&C*W<2 zv_uwcO&;@Zk}^I!*~`qYn0AyQ5`?Ke$9lceTo{1pD=i99Kg(+N9X?6)MM7yi&}U;$ zQcCGM9}~H1-f}0SyXbv_%!Ll8N=%Z^mRv>sp~6bu^axRnSixLWdl^qnP{9nk5HT4& zJd`RJBJ&;xyqOwvcvJfR@_a1a?ZeZ#Q~8syUTnB%S_hF``XHiT0N;091&FVhknj9FL8CqDJ4d(R?M;lKfqF~;|;tSQ5K?3*$Me+3r2 z!vI7z!5rqeNvsBaWJye9Z-vBz?$d#+7^)sL{;ECCygfUvN|RZI52ZH>+0)DtRrg8J zV8M}bAP!;oPBjTmelz|_81D;Y;oaE`Rb=?tZg}m@wZ1qDGvQ&o#9Cv1XXN$nM~Arl zYmZOM*LxQ`b9(|KQ*`@Z80#K}BYBc1T@uP(eYz~wZ+ty>y_LAH*lg=DQ^UEH7kXBPOBDQws>sGk_ZY%a+I#I1V-P?gZ5AaI?!A2~ z-=RLWysB{M%C7#(+(S&!`X^V{3j5AguQ^Hef_&p`1HK$ovv`Zhds;db25+qMlUa%S40nV9LQk$r7`iPuLknL4Q4TS&^dgRpg)4^M=QATp zakwi>36MOw7O8XA+&zMD%>~r~b|Y_s?LD7s()r7z-47dk@6N?K7q+w%1=VYsBZ==- z^Zp&xU=`h>L|-F$698o4BB;SZ`|+L3lm~k;$~!VwlQtLv#@HFwrxpzQu$u>pTg4xk z;a50D8-nShrzS$FanwjZ5ZTDwQTd<3XGwCX#Km;Nu|Gm+#f4GBW-j7O&5C*x^(I9H znUeuk6`KqH*t7T++#C7GwSG6AGwC2i^7iR37n<+a#3IKcUSolqZSoO5^mJilPplP= zqzm!G1HvvC0iyd<1=$n3&3XQpF(o+zO72O-E&<%Q6wF-PxkLY{SJ-M>ibJ?Kxx5h+&-PWFLUNXr%wBXQI_{^4UIq`BMFEx z9!gV<>F(PTZDqCHTu0=r=h;g$gBMGwY$5V=@WdoO>vO?%x*uBv9I1+~z%O_Efdx!! zcJSDt!>Kv62mS{Zs5EL*7zu|*$=o-T^dK3aD_1v^RO2{rRO=VmPJU)t zP!3)H&_9>^wP67!zMtr8cm)){pT>0+KZTB1&sGtyY|aE5D=8CnR-ofiyVf|PVqg-%cB~RNtHvDoEoB5dz_)e0PXij;Ez9}kf$h{Mw ztZSfnr{uyWcq?9^;f73|`7Hv|N)~>54+fTn&>IO=g-o$0hRs<59fMmQc?=hhGMvT< z$$Qz*b7kDuGX|hlypog2W{>Aw`vwh+V;odbNV9eQMITUMUN@El_>k|=CFjQ#De|1y z5JuMvXQO#rP|ya`LW^o1zRsl zc9$wKPIeit1cE40_i8ro0C_IN1F58>(&8pmf!A7xKO`x_U(^%wW$qpj@vij~Ca79< zN%FlyH|$i{i<5R;<`1Egr}k!hE=?)v<58s}5fpUd{}$Nu!7;T`w!ys^jKd26rnR@w zy=b3I%bO~SRkx;}?Ie|z?va6MIQRQ9$dk@(g>1zwYjme_Ojs3%$k5oS^ahfqwDi43} zm?2USag<~;s@!rEYX9`^74Tf_sTFmg`4O1d+2A)Zz@OXU!6(bT zRp3}MlFuZSKreSv83BKfft?iHjYN|RW;?_XK8I^HR6TfOG7{Z4W;cdg4P!P$b?qdfJnb58b?~ZERZA?tiE7#KvCN*T*8{ZA>Ss3s9#*Gub67qvo*US{ugf>ZF!?QC;8qEwRks zyC|*cq_ewuC&WYF4JO<(F-R+;8nX&Y$tlf!E=1_RmtnBFBEu7kRnGX@BJAbw#dWT* zIkDzI8|B?bZz0YbfhP{r>la}cy2X~!oo_oubGt-QDHL91tZzt0f)x*b)SnVu8vd)% zYG1cNhTXupRoaF}x`d(3ge5ik;j6IOGSj;i&5ea=T}*osUEzvM6XdyEj1KOo015uU z6R9fK)Qu$cf`39n_n8d%F6h6`#5-j1-Qpuulug^LQmw5vE)O1=9xmz&DDTkDA>sf| zNb(SsSE$EV|Er$-trPug$~hIoo<|rvcRLtkIM_^bv4&I)09Ekk?WOnakn_d}%@am_ zDD43s%gE*&a7)*3yoP2<`*=FM1DAU9@!3^Vp&O(Fpq$$l+$JQg`mh5joy&S=Agv*r zhQu@VXW+jcM?y% z-%Pr@{~~bz8hAHjU)we|#+U}3fxh_~m}0p=;Td<}GL#+f%nW8*Eas#1_I0<=E9CyQ z8PFbtS`pI1SGiXAd`n29u<-ZvjCeaMq%U!A9yA~9t6v@ji1&_k7~ujCf~re!Yd-T6 zJ(PayG6?MAf6Ra_zC|6~N|YE{zLJAO)`7V;#$0vG!PV?p|;ft)~qo34W zM=p<#cW~B4?q*dYrY!Fg5k5^WyJU9nWj%lBX0_GuS5nvIXlSeNUEts3V(4{l9&1~& z2r)`Zoqq{A4uh=0k4sTGHUQU zyP6P1I2r-#kRD6DP3P2zXEy> znPpZ|Fm09lkQ02Znj@w*iJv-HKFPQJeIFo%(0VY&8Ds4gB26gA<91{PB%sr-Bi*k* zDDv#vNCq%FK~Gs?Nl~*;hyqg2pzG2I{)o8Mmx5{Tfr3&bP?WNB+jWZ10@?Z}i83Bq zj4CSVF@G1yf>!~3P>PI01}Jgvr4n$B`jAr)zPdLF+F{iKYc+1UY#ivFK;vleSKwTt z3}2C~{qos$G&H*Hmqu1WzEXOcU^S>S(w$cS_m}0Nw~i8X$ox(d-hyLH+C7!f;oZi! zOo_Z4a02{$2a{k!3nLvlFslPaH(p=|V797C@;i$AbI}4Aa8W!MzEVoyU-ChnM8J7- zxn|NNw5~!!_&@j79RfBhjW;%1izB&DW?~rB-p88ENJEdqzh7eX0pFlejwlZ+H|^q| zRSCUYl)4U0&SCXTOuwJ-?%O#sU$pd{=FwW6LV0~mgf=g!}O0AI_{gYHsj zQyi<8pfz4SsJxzG16#4R8t{TR;_`~`j*8!xo==fAC5?camAeM*gJ^77tJzWfU;jG< z0LLEDqBZJE-Kle2`U!d;uY_7p*OW|qUGDVh=Nu6H^8iWgU?iM>oEv)V`zJp#7Oyxd z2xls(Qa#WT`1_3DSA%fC5_&vb{K5d*aZ9(^qn@oA_>S0jk-8MWc%Yv0&xm}}gD#P! zG=rMwiSHgK0Zx>cD#?TUcK_VDj~4Xh;0^X#o`8zj<8G>&Rz#9Iz^*Gih*b{$=aQmr zRNw*D^!tyF&i0o+luUwsZl;&%qwa^d&|v(}YYakwEf3W)Dz>Ku6!7B9tHU8rnh8U1 z&+kp{r<)qGxpybd-Jm=O1n=pd69bxOC48hdP<#JW@;bl~7`r>$@8%&UAPj;_a`;t8 z!-jf#0~6zB4&b5ivT?V;)=pia`rmg>3VIcr7r(Gi#q>20=%gO}2GG@eT;ucFFa@YkJ@KLqis{!sA z;B@$GiCY8w(%+@61153#gnL2IMJ7)KnGnA#(5LKf+z|uH|DAkb=b;Ca3Z%z$8(=B# zg1Wnqp)T+f7=u<<{{9*+&?T9ccaNWWLe1YuxNX!c;@r2(15Jx`K-l!pCI8$UfBhOz zIlKn8Tcu?zt&e~}z34;I$E1G;rUW|SZH2I3d8T$p|fXqNYECM~@5MuQ=Anwxi4+-5(KLJ2L(WbV0Bd4i+boDSkVrw8lnC4{@36`SNy7Y zfmrEKGVc(S-cXJ^1Pla!$}^RWL0Hr{{~ZZ=$R|}_Ne=>iY7VTdVXaFNhtK77p};oe zsVTQY$-k3CUK$!{FVl@o!egiYJ8QwQE&(C19y@Y6B*C#M|7XR5;6)m|RikdFcmMe; zi5$GafwG}-lmEW5Fz`gJQ5%T=`HV{hO!H*J^p72XpBvmUJ)utkZMevJkCGmUkk{0-+LkDC;3g|rHAFS%b;GgI-z6B;sRVT>f;T)_-Z=sDhGIac#AyF76NyH7B7-z z&q}%~8x)%DkHu^R%&@) zrvWzNbyAsL?>wR1wbYdqdlJ&2aQgcky?aITdIKLiBS-}rz&=|CHmb&q8=K)Q|9AI| zp~j?W4ZON02ST9g{J}xp6+~El^2EG9Ur4wB!3b|5wq#(%(kIZCc$n0&9jm9fSCN=$ zIM2+~YtoqcKAGU89Wc0IhzGu)x~KUf*9<(&Y8*p{8I$a3mM8Lmr#A#2-X@7F%Oln6 zVq+KdH9RRYreL|b*eaU=RvWv)OMqmd*Yn7UaFIw34B1Z z3jCvll+;fFJE<(KGrD%g2NjJ-csWX9TV1;rj6fAE_<>rwu!2g!oXL}*FmRc1o?-l0 zyx0s#B~}L^r12b`Od4`{)PGhR#79)|gEZN?pn9S_^O)B76(BJ*(dpD{JZ9tC11HEh zl=*{45k6)Iwuv4_VA{m}dIY&1+_N;S_mn)F8S1X$dVYI%e4c#<{+hj>2R(G4 zJLh#-dQE#^w4gAc^AuVyt3i0i+C0IM7L^$cb9Ym90bxSG$=eJrU-D(n1N|B7_2 zKOt?<>}XAz#BTXr;krAn>QA_==A0^$lru-)5R?gMjMsu8^?{sdT%D7%T50X?iH7Sd zs`y^oV;f?Fe`W0DXWRx1VRy;g)+zS(2-CWFF}PW)TCP^u&?};PApD@kX4MuTaOY7Q z1iOPaiyQ`l#b67qXZTJL4rae=Z@v6O(X(H3@9HEUV7maeTjR!Pz6={pr2EnO0y_UX zpA-!fm&>OBm>Z}2i#QjvlOvft}pt(oaeXI>wv@NBc#@zp@XKtM5ake>i%k5aw+ z&=3Hacc=}D;S$N55lcUSyM{WsPSJL*-cgmZ&JsD&9y>@2L5WI8WEQz$j(rlke;0YI zWCpDqRrF_-#ah4;<7xFr@)|ST2UMlQ<}ggUAUd__ZA%XIOwJ)ePCkUE)LiW_iy$Nm zTy`o!7&q$; z&Dl~ZsK4G27g0?PqzO&q$aQm_ihter=Vmew(5D4-vM-(f?_0EhGIM)sWp~5atV#=!9liC(nN+SfjrsD}=RpRuz=ZJ++uMDqinpa0|gW`l6Qg5)wT5HW05J zioldMY%+>?rWLYcT690!$sPpV9pz{dT7bxF0BP(9)Vn`+V}673fgVC)FrW1T@0`dh zPw3G}x1lm#5yPHV9QDt+u8!#gh&T#Dm0oG*nLrg*_Yjf29eUW}e(kOYZCC1m3G+8n zaD)?G6RE^OYCe`W6uIA=uU+HX|McM<%O%{JX{qN&65 z3_-L=!tYdYIkV@rc6|&YaWs)8yU{s#1hJ~eSg#vUW>si|s2J|Ar3M<9Sg!yFuL><6u{6kLpnDmOf zNPF;xb^ln;dJ}V2DpM5f*C1_!VL?XEu%eDCN5WsQ`)J=kavda;+DEMvINth7V#BP=oJq? zmLdJD&#DXXN7qoOmiMMC(~n2LMG23IdfeY1@3#Os^ni3hLPV$c2NqAxSF8QB%RL7& z&gQ)}6DU;22vn8Nms($Ruhba1u2iyoCmhOu4h6sN4!tN0IBrE^3R*%8%e*2^1pDRD zZ%)?zZ13j-fk$UNgIYx#neVSq!>g}2Z0dOhatTMYE6S2R07VS#`5GIC#h6F?w;!lep|UrWBuQ>xE4i2b_8M1zuvBy)i+lUH!E zL6h6mMplhvmkBdxC8+u5Do|j1dJanw)B}xFr(vH4Oir|mo|@&Rx=m9>Z0rtk^Giat z%+Hm?65Lcl{tRZxswV^-S5O8o->jgiJaO49)we+FH+i}{`qL-E4(b}8P{Uz}d_`I7 z=HbXOKPc9t?R`8E-bE(7$yi8OdN_Im-)p2WE|K)4T0U%Fb*td=@7DkJi#&?dW+P^Z z&S4`ZGQtX)X{%k(eK77W&Old!BTe%!(l6rx|+eQi2|5FT9%)ZXp#>Y+D4I z9m2<4;sadlef1e~{+#pFT0XCDo(d)Z=fCa}aMym*{L7!lD| zZ&7NB6?=Tw3H!*g1bsD?*9BoN>$I~Grzix*kU>8}R)80>uMal{5q=H`9gD{zVIED~~{mj|eG4jKUHLB@&89tNnB z)GGk-7VIEA+98Ee><09R@_&_jP;e^ysihtZwY% zB3|VZIxFU*>yY-4w8$rONhperI`EM{4Lb_G^+;kTVUwHWtE`j?4Nzf?q;kXDDRR zXN}<7M3Et5p00frV8+;9r&1F~W2ucBc}Kp4J`xW1ppZ5GnN3*y$D3Zw-&yb`iI1MV z=}c7T#V+Ew!9STXKr_RE_(5yb=TY^85}Uu94_IqHtM5byF1aS$HRne=eJA~i_dIDS z8|$Y5KR0Fq;}Hq#mFnWLPkr84xp)UhcmvRy;OB$f3Ca(L9dNnP zxlv|+SH7R<4f67VHLi6(`IB7SfAS|k(KgDcP%cKyJmW@#2X~d|-&usH2gsQ^19M*j zWa`i60sSsyWb%{#$AEuRU~z~rJaH1&LC9wlN{6L)ntcEHuMBoft4SJ{H#F1G3}mj! z<1foQyZg>)e3HB>z7zxT=Fx|P7-4MmMJvMV{q-bsMjVe`%} z&)MONc1OKno(`2E@q>AxnN$Inr}h5TJg&Dje=|o>Dv0u74#0>aZb&RGWjwN}HF z_4H2cPiD;+!#tFP&&`nbTeW`VrsOz+rWQ_JB{QfK$E*bv*nP^ShP+24#!|y34CH18)YW)BP@T_wi4dF)aYD zI0XTp`{Ef$$?;y=PE;+UVNH4*4(Nj(3YB@`OO(#!JiwP6czp<}%$PSc+5y47k~^F@(6h-;a|i3_JeApGIkHUPM`foK_o_ezb>uy!exxj0N< z#a@l*V;awv%dBhHe(MWEOlt+S4^QvFct256DsY){LOpO8*wyyXCR67}?%%otBjc(vhE`kaDb$CgpIlIn?<$#yk~*)3<8?HKQY-(myJlQ^zI0>V+cNpK=< zv0H==F>RjaCEIUq$t6QGGuqQFzrTyf1gk)9BuM_AO65GpA=Q17df?!33J5>0-d(>0 zn_UYWGp|?Jyd43Y{6HypTOuL?=&wP8==_+&1z35g**bQb{8XSv3N*u5gZwAMK*S*1 zt^xiOv>jrLAjk6J1;+BU-?t?r$%K9aiv6-q&2#H~!37V%&rX^TYFUq#A)BH`_9L+t z@r-$JX$EUP35%qM{EK(lIU>{ZaDX>0!*SOajrA9-=xfrf?#Ex#d2BG(y|0$Y%d4!R z2szZiV;Vqs$zvFlkF7_jPXQbz(8(|DPH2kxq!Q}7aC!)!$+hmG`|JbUQw~J|f(Z=NC{yBP zLmcwbb7>-JN#!@d`ybD?{dG-6_IC&#rcqEA&U~2I%G^;R>L_;= z9XTML{K4}l0jUF<+xax)|I9%Q_?~EL@C_Y-AT>~}8X3+b9s5!9i$iAy?dIR-IBe3QlwPg3c@d%v0XNuf`dG#8!=q(dg z#ScjC0PApdOVsc{!k=8AAo7U7RrE-uZwD#9MdkMIh86@14b1^Ykq*sIG!5UpJrsos zE7g+F*q`tYpgJzR0~s}=9HN>%Iy$=0k#f34M+n|7khJKcVokbjm3ZcG!SYSrS9Jzt z)i(%1)=F@izi^7<#O8rQ%tl10N4S?t2auBC9GG!#O%m{Tf($SD9giM zwjwHN(nsA)Iapu2)lYyqa-0*z+j)&wSLdjkcSWeTm{yPBZQgTnkjg0gC^8%v)j;0W zxx<(QL17&Rzvx$I{z5>E0QK7#SRd+^ATeo#ny~=*WtQEa#AW`0Geaj7+?7M1hVy?w zX;!oa(yCCmBQv5!{p~uxx26R@ z6vSk9z-S-zJ_@0-4(E~{U9d$nu3~szx^^HEzM6SgxP_vT=Ma$6u&0M~MI$b@A8}c1 znsFK84_o~B79@4V--RjNe{g{G>29R$%o=+3j_-u)HMi{ zB!Sd!=bl_$P3#`hoCCEf6#2 zRIK@TZchxePw<`)tK^r1YFQss^+s`)D|+KZW)fpbA(DTyp0k9^|3}u-jxrKR927~>oHP|CI8r@@j5j)5;QV|e8MrB1 zP%9Ob7I?-|hgA*4)IPtKziwlPk+zuH<$U{gV^L9E6B|Bv-pAh|An#a27+E1sz@{6$MzY5rB!C@K(JJtfU7ho4F+n^)d6gs1VPSwX?}b<~@{!m%6a(9~W_6!BFqRf&Ity2UGJWk8*;l@F|!W`WIu?9bj=`fa4JZRA`JU!|D- zNEan~E@o0hHlkO&A0l>v`t=QH!JP;HT*Y$JpN$@$)z9F$YXczt{0=Y+k&9!LbDGgO zQRLL#H0xZ#XJ&X9GuJ(cHfA@g1eyKWJWfQg)r0R763?iF)O@7#WCO_weGmzEI)3L< zF~}$4M#GWeNXF`Fc6?ugrst=EJcnhx^)Oe0jamL+B zb@n)GH_-=5!H-rKLbLm@qPC8ob$=>1t;#^QQJR$RcXHbl?TrGw1M*^nZ zapopdBqt1^?6#e5vGDSVVw*&j^P#BEduh(Zo|nJy{00EG!EyzR4HSEmC;H+DWd4(0 z$l84Wpi~M(MX!;#6}|MJ<)RO)y!iV{=rz2G451;D`#qlD@MECm=jTmHf5j@ z+LOS|&dX>DuLAQpHa}Ex>sI{vS3m@Kv0}6R@D0wVR`D50`DDkN022EbfRBINj?ZCX z7Rwa{QRfiO;jXOMnXJ*!jA-MTIu@^G_J*&|ZrZ_l@>8_4Kf%QEJn6;Niw7QBk4SQ{ zUXs)V+eRtqVSJ^r`x4cR-i7Bn<$A(SdO2O<_U;VLPi7nDweyr4iS=W=}RN`GkVO03QqBrZh!W*9w2E=aE6 z&B`|)_H?64$O zwP@nYm|VfXC_s(`1lR=d=CJE8IsM&Y?#fpXGWeI#ok{3^!ANi`lz$fSUBaTw2*Ew%?!hNFB#u4v`0R0c=0&WCCYv;m2Yzqg0%Lyi@tv=pfoV;)(s z`s>*99AA81s=1Z;d{sMgL)iueo1tBqSQ}ODZ&^YV(7!}k)1{+3ugcZs|DwPkso-LU ztC!7&GbXOt8h`Yk&)cE3RSzvjy8nCzzDpVYV7l5S;Xg&CMTv||InyI<`~B9ulz$3a zuoT}u|4znApz@*rk&LCy{2$2}%L?g4vB()XHQQ^@DfSdrXJ(_G&(@N9lE12YnoFjc zrIuAJaMXK|38(djZ=A*MJyvD#`S{LBikS1~dn2092J0%ADv1#Z-Q7?GBIxbv`Ag z_ztb(3jkjdq1m3Vy>)84JhA1QTRC8^(DI5LmCjCdXTV}- zy4D3+%WPQ-Wov!`Z024bt`5ASuN>#mdq{|Lb*2Tt;Zq4{728waRmM4wAD^ELl$@Pw zLGF3(;TWt{ZsOl%e6l^ox=YS_M7NU_$q+9LV%plP$V8i^l7rt1A%p!cmx?5n3=gER z0CgGyXy*zcfY;x&KKxIe#vV9}E)>Rib`KBBkniw2Z^pb778JcJ)_hfCxQrSH8hqZB zhdKKPeQZj6n!)#w=YVb24CufymGc;R1hm821Ff`Xmy=R~kyW4o=t>7w@$baYr9d6P zaUN30$dI|_Y=M#!N6F4NuM2vTlen6P(?Cx<)yQkMrRjw$xux0vCgb|7Ac^wMP)G#@hzO%)XX*E+f$dFl zl_|)USU1apUbZ_iwWBNsH<*brDRRiBh?esK6JJmMQk*egn|CH-cO@GZtj?)0XvK!4 zE9L?eq&EJOH5J^GMB&~6-la#34DBQe6s~~9R#!$I4U7q~yPN1sa>R0NXBw(WILv~e zIO0#JaLO*~f^+b38&hSJN{rO6djc0x6^IXrmrGl2+-gC?HYcgrA&&Gt$ z6ZROQFF7p-k5C`KsZ}ay!u0Cg1PWw*^_vE{zwrevG!d8uIjDVq0=s?nxW+56V&do? zL1(u-3B+O}Pn&|(;}f((-(%D}(Ao;RYHW@^iai6?g9A9sjh{i}?tUEfHsybpa@wnP z5Pcd!DM!fFyl4{Yt-m|+gzY#d3lL<`5tviODxmhxGJZUWC`6Bp-qMLeQzSa6yAlpX z!k-k0+6ZBz(X3@eN5-5AqwPheTyZ(tTusxsVeREzReXLvm zCvFfu6oXdu)P@SgqonV*NJjJ-V@hoI(4~WrJq6mh#2qYLsQ5p5I2}twIEaN22g4@s z#nOpkHfx6#Xh7AJo+)J@airi3+%KFtE%;2@gQ$(EvD$4w&b{l>a+#`WQTuNRCzJoB zFqbU#Xic(xL!k?M_p$)tEY6y+{KFN%T^RJb&!Sz?j${1-LP?4pkVFi9LgB!mYJHu^!BF3cH3KH6a+O}6v+r+8d;=QVw#euLA#WXwEz z@}fC^Qf@Q{kvxlV`bNxx!fCrBnRB%DG?ZNf>=~B=k#{7=d8*4N_hF*%IjHe4AgvHr zmPbEuNPiT0t6Vj3M)6@_5mGpH@EuAF2Pck|7xEZ__5B{D6n!&{*9T!2HU2ARRAB{{ z*)ox@q3oWvz4vd4;S`I^tCoNc^w1AW^=P|t=)&462&;%dINo~3^wnW~xeNEOLLt*mYlRmo|fC3Zdy+Wz8{_uAi^j*$^88KWHqWUAgpQ1qR- zIzMbuqOzLS;lYd_TR&7#x`iLnGY8c5(<95^XpV!r!}sy)AqxD%HF72=1G z&Wp><`KwRH$AmxrOY}Eo21Pll0{`aB9p-a5<>@Qol(;dA=%e{eC(Gsl~XgvLG( z3{We=gVu`tk+tILHpV~3r?T4gVbc(*Q1 z(((^zfjnu`1O3~Cfmhmll39W^;p5c-p?gT^3JnxdB7Q%9;J>#i#p5LF*Te|}e*5O` zg!iIG>+TbvdPQZ#9oY1IBlSI*Kb&mw_I4S6rg?r7`cZG?FToK8UgQ7M+m-)A_5I;6 zWy+_9P(v~!Nw(}FVzLt<3HjqI9u>qApMN?* zRPI8o`&ct#EOxFok+%99R80-vr zvSyvp_A_4R^o&|%X;AG?NIKA6G-8@DeAiQrCkKgz-8v#~nZj{(xG`Gq;Abn>bm3#Y z`TRGMFx;zjK~7W#qSmf>mT#p8`gX*MF~EeK&*@=NPHt|#$fx&6y8XY=qpw>!1b`0J z73e!M>)QfM5l!J{7UAtVdwGm1K6>t|2I7NSLHxgnq)YleEhkCWvB;;ad+q;0QL-d| zG*Lx7&YOMCzjs9gWDt~V-s)qxi#KAHwH%)jvQEK-p(e$y)iED{^WkvFWeO= z$XBvBVYUHDClrJo3n24M2b*pJFBy;ARNn%GawbZ}vlPj7GNN)m-9ovG1b2XoPly_< z|7K|HD=gmm4uFP=PxdFyuyU)Bz4V74GM{H{Je1iOYGbV5+EOAB^-3s_aSP?JsqyLu zf1!KBL^rfy>K*#y?$JBe+IBoPM3BYU=*|eE$b%9 zJ^E-f=`zEVJ)+9+zchw8e8e~8%YJ*|oZ0IC>M((-3$3&bcA84=YXb@M76SSMcAQ}j zgSlmtT}1hSOgk0xYX1+s4R^z)MxEuSpBsiF92C80&fmWs^HY-cSP!SY^L@a;W%)ad zMh!655|g_RITS7NcZ~VR?8gNMgJ_q}>vK}UgSmf;9z4buHu5=vJHDswU?*2yo#@xd z`(7tXGhQCiF0Kt1H5dNBAsnFcRTPdjq^G-HVpk%?hTbX5z(x>sI^S*1T+zb8gM&(~ z@(+AaOTb9{sL37g*zYp^PQ#EQX){S-u>O@(Z+XvLwC!8JEP3F*<(}jz=@ai|N|t}( zvl}gQn`*jQK&qOH8YMaI0r9YLbKD+XrBKA}^Eewe;XivV@fdX=%L@p!B}jLcBukz=EN;| zIYjd3JQn(40jy=50jn`*9LWuAPdTLvh*RZ*Omb&|kS00H7+AH&op1;Wzp&lZIRSPb z(-zil}_PM$Wew0w12nd%AFtbH~#_|#S|c#qxLTVO6&B$H0AC*=gpAT)j1^ml#`?qeJKw<95thhzfU_r<_C})44e+YZJ zV@@^K1Sj?YH563I_a6^BJR}Dg9wjx%ZayuQ@z{oAOuVj4@7uJ=!P**ri49=QGvWeD z{5mfA#yHGWrzgpesoQCUDxR zq8_=#)pPDpEHCjG&ofAo+5B=QaO0gG%am^K^GRl<$t9*!RcObWhAfR}Zm+_xg8;Eb zEnT?Uw~qtyshVZ%7MbH_R$f%(Rr<>banZlAFB|W5y7Xf!JsI}=qbX0;dQ_Mug4(9; z0ZqL8AhuKA53K@uR`Z6(=1X151(rm8g<=Xi29MDCTNz_j2NahrDgo$Ojf)Af*sBSr zI|Y-ODOKZn2_8RpIEgJlzb}&ggV@9`H5Ul-$0i!(9{{I3RunCKq9a3v5mI*f#InwX zyKr66mK(VRK>xD8{*W!Ogo48|&gyh4C!z0v&wr(!VM{>v7lfJ{0CjZ-V$x2TRm*Bx z$^h|k^kjEQn%*4XdTSsHtFH{R5}t_>&xN!T-uN4MwT3yL2)nN*T@*9RT>KS640@kR zB6)Fd)9c(*6(JUrCVRqwkIe8R5K@y(HZFtI0R5DN=0Kgh#K3Q9;8qZjH2HJ zY>>Yw<{O%D@|uqLR{%5*WZpd|){>tVTF63%1Z5rLtb7}!?gRBw$F3Mpz%qj;mVwW7 zHQ=f{l-7M0Cw|29iPtOC9HwV7j_3pGbS{<`qif{F003%IDRZTvm?UYrpg!-qu_J0!IIV=9g0jXCim{d<7Ah)`#Si!pj%VA+ZjLlj_{P z8sAAXi^FtBq%$oHwDiX`ne5+cMrX`f0Bx!+Ptb;S(x!Jp1&AzXMZXtPv}H!lPpfz` z6(_huorcE+Ae7r%g=w#l_Tg}|vMV~YZ~-RiS$?IJ`;GF)BS(TW{lKrbZ#T?e^+{d9 z748w#(0ikX{b;HkRwy?Hn=#DOk~}sFvJP`$%oz`rKt|F=DBX=XakHk`Qb2o~tFgUf z)l>K+R0VDJFh@N)>C^Q+tA3koZTDx+JJJ!B#D0)$cQ{e+819OWWv*lxKjPci!maA( zy=@s`-|wk2hbHFR=osI4nPWFy=Vao@YM&t3Vr%d)Ndzlh^8I4q_a*y;;KlD-7Ew*^ z)stDlVpcJFr2e$Lj)3eaMy9#&D`^QGHYMtW46!a*b+3F8HM~=va(XDO6?LG)1*;c-*f4A1w2K@E zNL5_}b(d+UTEY3Fh(pV)*us>XrnBNY;O8;nR4AK7j@#z9wR;6^f8)hQl+rX;?E1le z)vXF=F%(0JQBN+g*%zO0mD8cDvO-!y4C^8dp5@C>TWyx9mM6ub)G)0ml#z^37FSpv zN0#_!kK*k6H%v6ayZdo$Dh4DtYLafj)QF_oSh6tgO>_K_`HS6Zc%2TU&<&J)>x&6x;FNcqJQzpv2=6i=!qSx=y5f3SSrbn|2?FB8t z0ib{RhKS%mtTWSvj`bxIRm}UVc&o-icd^VWf)fEesN4;I4}?TM`&jitz-2Y^wqx=^ zorZ&|lt>F+Hnr8|&C1)Aas-kEoBBKX6X|T^1ZMz^W)5H znSt~4acrFIBU?oj3T2MXd0Ya6GoxMW=?_1c(N)2X%y~$Pw7R$4fA-{5WQ&dof7QxH zPiByMbmO?2aB#u!0C{&++^*yY{w|aF<%NX>&Y&b40fiUrxa#Yry{X39(-)?ka|BA+ ztoB8wOeOF2#o=%%(gjg*%cr8}lW0I4-6<}0ueW@c3*uuV}x|*vU$p=5Vtb6_K|vXBF`Ty7|3o> zL-GvjAsVkN_6^tAd|fn@jNJX^saBEhQZ;STJI~zjnSp+C`|k(uu11HFy=b43A8nxa zB?iBZ!lp*Aewtl5LPrmSQ{o$pb9!W?2Ctr$y9SQIkOCW)_B{?JW1aCU*KPgyF@d|F z6Q@LGcuVXl$?KEXx;sWiy5~KQ4)@kXl*mskO5ZYaDNx_K*utj|3GT3U1+#1lrd$CV z1Ko1#ACLFJ3Aw8K{vN{#EO*&W-QwMNa&gVo;jM)Lqj7}c$cJ5}v1Sgo>E+MmQzkC-QPH^PvRNlT@&ozu4 zrP@zAYI_+<)iHLa!+D2x?$$-GJlr)<=(aOhX>iP`@nUD4Dh@GoR#LAMc((^z#KO$k rEn5)0bGH|P?Ny#j4qQ8fB{VSI8*FTAkgYqu3;b!RT~K|hY!UPya^2Ex literal 0 HcmV?d00001 diff --git a/docs/dial_variables_ticks.png.license b/docs/dial_variables_ticks.png.license new file mode 100644 index 0000000..74baa7b --- /dev/null +++ b/docs/dial_variables_ticks.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Kevin Matocha + +SPDX-License-Identifier: MIT diff --git a/examples/displayio_layout_dial_simpletest.py b/examples/displayio_layout_dial_simpletest.py index 5b26c3e..7611bdc 100644 --- a/examples/displayio_layout_dial_simpletest.py +++ b/examples/displayio_layout_dial_simpletest.py @@ -8,16 +8,13 @@ import time import board import displayio +import terminalio from adafruit_displayio_layout.widgets.dial import Dial from adafruit_bitmap_font import bitmap_font -glyphs = "0123456789" - # Fonts used for the Dial tick labels -tick_font_file = "fonts/BitstreamVeraSans-Bold-16.pcf" -tick_font = bitmap_font.load_font(tick_font_file) -tick_font.load_glyphs(glyphs) +tick_font = terminalio.FONT display = board.DISPLAY # create the display on the PyPortal or Clue (for example) # otherwise change this to setup the display @@ -39,7 +36,8 @@ sweep_angle=240, # total sweep angle of 240 degrees min_value=minimum_value, # set the minimum value shown on the dial max_value=maximum_value, # set the maximum value shown on the dial - tick_label_font=tick_font, # + tick_label_font=tick_font, # the font used for the tick labels + tick_label_scale=2.0, # the scale factor for the tick label font ) my_group = displayio.Group(max_size=1) From 98a90e2f2611977bb4ec17bc46c4e5ff50aaa3fd Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 20:21:10 -0600 Subject: [PATCH 05/11] update simpletest example for pylint --- examples/displayio_layout_dial_simpletest.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/displayio_layout_dial_simpletest.py b/examples/displayio_layout_dial_simpletest.py index 7611bdc..6ec68dc 100644 --- a/examples/displayio_layout_dial_simpletest.py +++ b/examples/displayio_layout_dial_simpletest.py @@ -2,8 +2,9 @@ # # SPDX-License-Identifier: MIT ############################# -# This is a trial of the Dial using Adafruit_DisplayIO_Layout -# +""" +This is a basic demonstration of a Dial widget. +""" import time import board @@ -11,8 +12,6 @@ import terminalio from adafruit_displayio_layout.widgets.dial import Dial -from adafruit_bitmap_font import bitmap_font - # Fonts used for the Dial tick labels tick_font = terminalio.FONT @@ -37,7 +36,7 @@ min_value=minimum_value, # set the minimum value shown on the dial max_value=maximum_value, # set the maximum value shown on the dial tick_label_font=tick_font, # the font used for the tick labels - tick_label_scale=2.0, # the scale factor for the tick label font + tick_label_scale=2.0, # the scale factor for the tick label font ) my_group = displayio.Group(max_size=1) From eb2c8238640e30ebd06d37c8a14aaece83f25272 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 20:25:46 -0600 Subject: [PATCH 06/11] update color default --- adafruit_displayio_layout/widgets/dial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index 57301ec..c5ad3eb 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -169,7 +169,7 @@ def __init__( minor_tick_stroke=1, minor_tick_length=5, tick_label_font=None, - tick_label_color=0x880000, + tick_label_color=0xFFFFFF, rotate_tick_labels=True, tick_label_scale=1.0, background_color=None, From 615dceef7fe63eac2a74ac25716734064750d681 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sat, 13 Mar 2021 21:04:03 -0600 Subject: [PATCH 07/11] remove trailing line in api.rst --- docs/api.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/api.rst b/docs/api.rst index cad476d..8f3cdae 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -33,4 +33,3 @@ .. automodule:: adafruit_displayio_layout.widgets.icon_widget :members: :member-order: bysource - From d9d96eca96b9b92cd4e770267c416de43599fed9 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sun, 14 Mar 2021 17:17:12 -0500 Subject: [PATCH 08/11] updated docstrings, add graphic for clip_needle --- adafruit_displayio_layout/widgets/dial.py | 41 +++++++++++++++---- docs/dial_variables_clip_needle.png | Bin 0 -> 67753 bytes docs/dial_variables_clip_needle.png.license | 3 ++ examples/displayio_layout_dial_simpletest.py | 4 +- 4 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 docs/dial_variables_clip_needle.png create mode 100644 docs/dial_variables_clip_needle.png.license diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index c5ad3eb..cddb222 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -22,7 +22,7 @@ """ # pylint: disable=too-many-lines, too-many-instance-attributes, too-many-arguments -# pylint: disable=too-many-locals +# pylint: disable=too-many-locals, too-many-statements import math @@ -36,6 +36,7 @@ from adafruit_display_text import bitmap_label from adafruit_displayio_layout.widgets.widget import Widget +from terminalio import FONT as terminalio_FONT class Dial(Widget): @@ -44,13 +45,15 @@ class Dial(Widget): :param int x: pixel position :param int y: pixel position - :param int width: requested width in pixels - :param int height: requested height in pixels + :param int width: requested width, in pixels + :param int height: requested height, in pixels :param int padding: keepout padding amount around the border, in pixels :param float sweep_angle: dial rotation, in degrees, maximum value is 360 degrees :param float start_angle: starting angle, in degrees. Defaults - to `None` for symmetry along vertical axis + to `None` for symmetry along vertical axis. Vertical is defined as 0 degrees. + Negative values are counter-clockwise degrees; positive values + are clockwise degrees. :param float min_value: the minimum value displayed on the dial :param float max_value: the maximum value displayed the dial @@ -97,8 +100,6 @@ class Dial(Widget): See file: ``examples/displayio_layout_dial_simpletest.py`` - - .. figure:: dial.gif :scale: 100 % :figwidth: 50% @@ -135,6 +136,22 @@ class Dial(Widget): Diagram showing the various parameters for setting the dial labels and major and minor tick marks. + + .. figure:: dial_variables_clip_needle.png + :scale: 35 % + :figwidth: 70% + :align: center + :alt: Diagram showing the impact of ``clip_needle`` Boolean value. + + Diagram showing the impact of the ``clip_needle`` input parameter, + with the dial's boundary shown. For ``sweep_angle`` values less than + 180 degrees, the needlecan protrude a long way from the dial ticks. By + setting ``clip_needle = True``, the needle graphic will be clipped at the edge + of the dial boundary (see comparison in the graphic above). The left dial is + created with ``clip_needle = False``, meaning that the dial is not clipped. The + right dial is created with ``clip_needle = True`` and the needle is clipped at + the edge of the dial. Use additional ``padding`` to expose more length of + needle, even when clipped. """ # The dial is a subclass of Group->Widget. @@ -143,7 +160,7 @@ def __init__( self, width=100, height=100, - padding=0, # keepout amount around border, in pixels + padding=12, # keepout amount around border, in pixels sweep_angle=90, # maximum value is 180 degrees start_angle=None, clip_needle=False, @@ -198,7 +215,10 @@ def __init__( else: self._value = value - self._value_font = value_font + if value_font is None: + self._value_font = terminalio_FONT + else: + self._value_font = value_font self._value_color = value_color self._display_value = display_value self._value_format_string = value_format_string @@ -230,7 +250,10 @@ def __init__( self._tick_color = tick_color self._tick_label_color = tick_label_color - self._tick_label_font = tick_label_font + if tick_label_font is None: + self._tick_label_font = terminalio_FONT + else: + self._tick_label_font = tick_label_font self._tick_label_scale = tick_label_scale self._rotate_tick_labels = rotate_tick_labels diff --git a/docs/dial_variables_clip_needle.png b/docs/dial_variables_clip_needle.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e1163962b9dca58c7cc218ba413f8652c43e78 GIT binary patch literal 67753 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 Date: Sun, 14 Mar 2021 17:26:52 -0500 Subject: [PATCH 09/11] update import sequence --- adafruit_displayio_layout/widgets/dial.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index cddb222..57aa8da 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -34,9 +34,10 @@ except NameError: pass # utilize the blit_rotate_scale function defined herein + +from terminalio import FONT as terminalio_FONT from adafruit_display_text import bitmap_label from adafruit_displayio_layout.widgets.widget import Widget -from terminalio import FONT as terminalio_FONT class Dial(Widget): From fe60936dbcd56572d3c82f367eb7fd75d0583dc2 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sun, 14 Mar 2021 17:29:21 -0500 Subject: [PATCH 10/11] ran black --- examples/displayio_layout_dial_simpletest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/displayio_layout_dial_simpletest.py b/examples/displayio_layout_dial_simpletest.py index 28d1b5f..8ca487b 100644 --- a/examples/displayio_layout_dial_simpletest.py +++ b/examples/displayio_layout_dial_simpletest.py @@ -29,7 +29,7 @@ x=20, # set x-position of the dial inside of my_group y=20, # set y-position of the dial inside of my_group width=180, # requested width of the dial - height=180, # requested height of the dial + height=180, # requested height of the dial padding=25, # add 25 pixels around the dial to make room for labels start_angle=-120, # left angle position at -120 degrees sweep_angle=240, # total sweep angle of 240 degrees From e155aaa871cb1b465fb7970de2b73ce9fd74c1b8 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Sun, 14 Mar 2021 18:13:42 -0500 Subject: [PATCH 11/11] fix typo in docstring --- adafruit_displayio_layout/widgets/dial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_displayio_layout/widgets/dial.py b/adafruit_displayio_layout/widgets/dial.py index 57aa8da..09e294a 100755 --- a/adafruit_displayio_layout/widgets/dial.py +++ b/adafruit_displayio_layout/widgets/dial.py @@ -146,7 +146,7 @@ class Dial(Widget): Diagram showing the impact of the ``clip_needle`` input parameter, with the dial's boundary shown. For ``sweep_angle`` values less than - 180 degrees, the needlecan protrude a long way from the dial ticks. By + 180 degrees, the needle can protrude a long way from the dial ticks. By setting ``clip_needle = True``, the needle graphic will be clipped at the edge of the dial boundary (see comparison in the graphic above). The left dial is created with ``clip_needle = False``, meaning that the dial is not clipped. The