1ea4f700ac38424954c56df5138ff794def50b019Chris Banes/* 2ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Copyright (C) 2014 The Android Open Source Project 3ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 4ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 5ea4f700ac38424954c56df5138ff794def50b019Chris Banes * you may not use this file except in compliance with the License. 6ea4f700ac38424954c56df5138ff794def50b019Chris Banes * You may obtain a copy of the License at 7ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 8ea4f700ac38424954c56df5138ff794def50b019Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 9ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 10ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Unless required by applicable law or agreed to in writing, software 11ea4f700ac38424954c56df5138ff794def50b019Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 12ea4f700ac38424954c56df5138ff794def50b019Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ea4f700ac38424954c56df5138ff794def50b019Chris Banes * See the License for the specific language governing permissions and 14ea4f700ac38424954c56df5138ff794def50b019Chris Banes * limitations under the License. 15ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 16ea4f700ac38424954c56df5138ff794def50b019Chris Banes 17ea4f700ac38424954c56df5138ff794def50b019Chris Banespackage android.support.v4.view; 18ea4f700ac38424954c56df5138ff794def50b019Chris Banes 19ea4f700ac38424954c56df5138ff794def50b019Chris Banesimport android.graphics.Rect; 20ea4f700ac38424954c56df5138ff794def50b019Chris Banes 21ea4f700ac38424954c56df5138ff794def50b019Chris Banes/** 22ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Describes a set of insets for window content. 23ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 24ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>WindowInsetsCompats are immutable and may be expanded to include more inset types in the 25ea4f700ac38424954c56df5138ff794def50b019Chris Banes * future. To adjust insets, use one of the supplied clone methods to obtain a new 26ea4f700ac38424954c56df5138ff794def50b019Chris Banes * WindowInsetsCompat instance with the adjusted properties.</p> 27ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 28ea4f700ac38424954c56df5138ff794def50b019Chris Banespublic class WindowInsetsCompat { 29ea4f700ac38424954c56df5138ff794def50b019Chris Banes 30ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** Private ctor */ 31ea4f700ac38424954c56df5138ff794def50b019Chris Banes WindowInsetsCompat() {} 32ea4f700ac38424954c56df5138ff794def50b019Chris Banes 33ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 34ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the left system window inset in pixels. 35ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 36ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The system window inset represents the area of a full-screen window that is 37ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the status bar, navigation bar, IME or other system windows. 38ea4f700ac38424954c56df5138ff794def50b019Chris Banes * </p> 39ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 40ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The left system window inset 41ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 42ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getSystemWindowInsetLeft() { 43ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 44ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 45ea4f700ac38424954c56df5138ff794def50b019Chris Banes 46ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 47ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the top system window inset in pixels. 48ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 49ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The system window inset represents the area of a full-screen window that is 50ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the status bar, navigation bar, IME or other system windows. 51ea4f700ac38424954c56df5138ff794def50b019Chris Banes * </p> 52ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 53ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The top system window inset 54ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 55ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getSystemWindowInsetTop() { 56ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 57ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 58ea4f700ac38424954c56df5138ff794def50b019Chris Banes 59ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 60ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the right system window inset in pixels. 61ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 62ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The system window inset represents the area of a full-screen window that is 63ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the status bar, navigation bar, IME or other system windows. 64ea4f700ac38424954c56df5138ff794def50b019Chris Banes * </p> 65ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 66ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The right system window inset 67ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 68ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getSystemWindowInsetRight() { 69ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 70ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 71ea4f700ac38424954c56df5138ff794def50b019Chris Banes 72ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 73ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the bottom system window inset in pixels. 74ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 75ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The system window inset represents the area of a full-screen window that is 76ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the status bar, navigation bar, IME or other system windows. 77ea4f700ac38424954c56df5138ff794def50b019Chris Banes * </p> 78ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 79ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The bottom system window inset 80ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 81ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getSystemWindowInsetBottom() { 82ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 83ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 84ea4f700ac38424954c56df5138ff794def50b019Chris Banes 85ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 86ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns true if this WindowInsets has nonzero system window insets. 87ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 88ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The system window inset represents the area of a full-screen window that is 89ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the status bar, navigation bar, IME or other system windows. 90ea4f700ac38424954c56df5138ff794def50b019Chris Banes * </p> 91ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 92ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return true if any of the system window inset values are nonzero 93ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 94ea4f700ac38424954c56df5138ff794def50b019Chris Banes public boolean hasSystemWindowInsets() { 95ea4f700ac38424954c56df5138ff794def50b019Chris Banes return false; 96ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 97ea4f700ac38424954c56df5138ff794def50b019Chris Banes 98ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 99ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns true if this WindowInsets has any nonzero insets. 100ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 101ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return true if any inset values are nonzero 102ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 103ea4f700ac38424954c56df5138ff794def50b019Chris Banes public boolean hasInsets() { 104ea4f700ac38424954c56df5138ff794def50b019Chris Banes return false; 105ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 106ea4f700ac38424954c56df5138ff794def50b019Chris Banes 107ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 108ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Check if these insets have been fully consumed. 109ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 110ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>Insets are considered "consumed" if the applicable <code>consume*</code> methods 111ea4f700ac38424954c56df5138ff794def50b019Chris Banes * have been called such that all insets have been set to zero. This affects propagation of 112ea4f700ac38424954c56df5138ff794def50b019Chris Banes * insets through the view hierarchy; insets that have not been fully consumed will continue 113ea4f700ac38424954c56df5138ff794def50b019Chris Banes * to propagate down to child views.</p> 114ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 115ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The result of this method is equivalent to the return value of 116ea4f700ac38424954c56df5138ff794def50b019Chris Banes * {@link android.view.View#fitSystemWindows(android.graphics.Rect)}.</p> 117ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 118ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return true if the insets have been fully consumed. 119ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 120ea4f700ac38424954c56df5138ff794def50b019Chris Banes public boolean isConsumed() { 121ea4f700ac38424954c56df5138ff794def50b019Chris Banes return false; 122ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 123ea4f700ac38424954c56df5138ff794def50b019Chris Banes 124ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 125ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns true if the associated window has a round shape. 126ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 127ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>A round window's left, top, right and bottom edges reach all the way to the 128ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated edges of the window but the corners may not be visible. Views responding 129ea4f700ac38424954c56df5138ff794def50b019Chris Banes * to round insets should take care to not lay out critical elements within the corners 130ea4f700ac38424954c56df5138ff794def50b019Chris Banes * where they may not be accessible.</p> 131ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 132ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return True if the window is round 133ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 134ea4f700ac38424954c56df5138ff794def50b019Chris Banes public boolean isRound() { 135ea4f700ac38424954c56df5138ff794def50b019Chris Banes return false; 136ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 137ea4f700ac38424954c56df5138ff794def50b019Chris Banes 138ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 139ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns a copy of this WindowInsets with the system window insets fully consumed. 140ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 141ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return A modified copy of this WindowInsets 142ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 143ea4f700ac38424954c56df5138ff794def50b019Chris Banes public WindowInsetsCompat consumeSystemWindowInsets() { 144ea4f700ac38424954c56df5138ff794def50b019Chris Banes return this; 145ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 146ea4f700ac38424954c56df5138ff794def50b019Chris Banes 147ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 148ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns a copy of this WindowInsets with selected system window insets replaced 149ea4f700ac38424954c56df5138ff794def50b019Chris Banes * with new values. 150ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 151ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @param left New left inset in pixels 152ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @param top New top inset in pixels 153ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @param right New right inset in pixels 154ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @param bottom New bottom inset in pixels 155ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return A modified copy of this WindowInsets 156ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 157ea4f700ac38424954c56df5138ff794def50b019Chris Banes public WindowInsetsCompat replaceSystemWindowInsets(int left, int top, int right, int bottom) { 158ea4f700ac38424954c56df5138ff794def50b019Chris Banes return this; 159ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 160ea4f700ac38424954c56df5138ff794def50b019Chris Banes 161ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 162ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns a copy of this WindowInsets with selected system window insets replaced 163ea4f700ac38424954c56df5138ff794def50b019Chris Banes * with new values. 164ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 165ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @param systemWindowInsets New system window insets. Each field is the inset in pixels 166ea4f700ac38424954c56df5138ff794def50b019Chris Banes * for that edge 167ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return A modified copy of this WindowInsets 168ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 169ea4f700ac38424954c56df5138ff794def50b019Chris Banes public WindowInsetsCompat replaceSystemWindowInsets(Rect systemWindowInsets) { 170ea4f700ac38424954c56df5138ff794def50b019Chris Banes return this; 171ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 172ea4f700ac38424954c56df5138ff794def50b019Chris Banes 173ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 174ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the top stable inset in pixels. 175ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 176ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The stable inset represents the area of a full-screen window that <b>may</b> be 177ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the system UI elements. This value does not change 178ea4f700ac38424954c56df5138ff794def50b019Chris Banes * based on the visibility state of those elements; for example, if the status bar is 179ea4f700ac38424954c56df5138ff794def50b019Chris Banes * normally shown, but temporarily hidden, the stable inset will still provide the inset 180ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated with the status bar being shown.</p> 181ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 182ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The top stable inset 183ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 184ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getStableInsetTop() { 185ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 186ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 187ea4f700ac38424954c56df5138ff794def50b019Chris Banes 188ea4f700ac38424954c56df5138ff794def50b019Chris Banes 189ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 190ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the left stable inset in pixels. 191ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 192ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The stable inset represents the area of a full-screen window that <b>may</b> be 193ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the system UI elements. This value does not change 194ea4f700ac38424954c56df5138ff794def50b019Chris Banes * based on the visibility state of those elements; for example, if the status bar is 195ea4f700ac38424954c56df5138ff794def50b019Chris Banes * normally shown, but temporarily hidden, the stable inset will still provide the inset 196ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated with the status bar being shown.</p> 197ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 198ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The left stable inset 199ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 200ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getStableInsetLeft() { 201ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 202ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 203ea4f700ac38424954c56df5138ff794def50b019Chris Banes 204ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 205ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the right stable inset in pixels. 206ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 207ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The stable inset represents the area of a full-screen window that <b>may</b> be 208ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the system UI elements. This value does not change 209ea4f700ac38424954c56df5138ff794def50b019Chris Banes * based on the visibility state of those elements; for example, if the status bar is 210ea4f700ac38424954c56df5138ff794def50b019Chris Banes * normally shown, but temporarily hidden, the stable inset will still provide the inset 211ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated with the status bar being shown.</p> 212ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 213ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The right stable inset 214ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 215ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getStableInsetRight() { 216ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 217ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 218ea4f700ac38424954c56df5138ff794def50b019Chris Banes 219ea4f700ac38424954c56df5138ff794def50b019Chris Banes 220ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 221ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns the bottom stable inset in pixels. 222ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 223ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The stable inset represents the area of a full-screen window that <b>may</b> be 224ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the system UI elements. This value does not change 225ea4f700ac38424954c56df5138ff794def50b019Chris Banes * based on the visibility state of those elements; for example, if the status bar is 226ea4f700ac38424954c56df5138ff794def50b019Chris Banes * normally shown, but temporarily hidden, the stable inset will still provide the inset 227ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated with the status bar being shown.</p> 228ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 229ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return The bottom stable inset 230ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 231ea4f700ac38424954c56df5138ff794def50b019Chris Banes public int getStableInsetBottom() { 232ea4f700ac38424954c56df5138ff794def50b019Chris Banes return 0; 233ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 234ea4f700ac38424954c56df5138ff794def50b019Chris Banes 235ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 236ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns true if this WindowInsets has nonzero stable insets. 237ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 238ea4f700ac38424954c56df5138ff794def50b019Chris Banes * <p>The stable inset represents the area of a full-screen window that <b>may</b> be 239ea4f700ac38424954c56df5138ff794def50b019Chris Banes * partially or fully obscured by the system UI elements. This value does not change 240ea4f700ac38424954c56df5138ff794def50b019Chris Banes * based on the visibility state of those elements; for example, if the status bar is 241ea4f700ac38424954c56df5138ff794def50b019Chris Banes * normally shown, but temporarily hidden, the stable inset will still provide the inset 242ea4f700ac38424954c56df5138ff794def50b019Chris Banes * associated with the status bar being shown.</p> 243ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 244ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return true if any of the stable inset values are nonzero 245ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 246ea4f700ac38424954c56df5138ff794def50b019Chris Banes public boolean hasStableInsets() { 247ea4f700ac38424954c56df5138ff794def50b019Chris Banes return false; 248ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 249ea4f700ac38424954c56df5138ff794def50b019Chris Banes 250ea4f700ac38424954c56df5138ff794def50b019Chris Banes /** 251ea4f700ac38424954c56df5138ff794def50b019Chris Banes * Returns a copy of this WindowInsets with the stable insets fully consumed. 252ea4f700ac38424954c56df5138ff794def50b019Chris Banes * 253ea4f700ac38424954c56df5138ff794def50b019Chris Banes * @return A modified copy of this WindowInsetsCompat 254ea4f700ac38424954c56df5138ff794def50b019Chris Banes */ 255ea4f700ac38424954c56df5138ff794def50b019Chris Banes public WindowInsetsCompat consumeStableInsets() { 256ea4f700ac38424954c56df5138ff794def50b019Chris Banes return this; 257ea4f700ac38424954c56df5138ff794def50b019Chris Banes } 258ea4f700ac38424954c56df5138ff794def50b019Chris Banes 259ea4f700ac38424954c56df5138ff794def50b019Chris Banes} 260