Files
2026-07-28 01:06:53 +03:00

417 lines
26 KiB
TypeScript

/* Metro module 8859; source: design/components/Tabs/native/Tabs.native.tsx; dependencies: [31, 27, 1949, 33, 4017, 4501, 697, 4577, 7739, 8860, 5321, 477, 2] */
import LocaleStore from '../../../../modules/user_settings/LocaleStore.tsx'; /* Metro dependency 1949 */
import ReanimatedRexport from '../../../../modules/reanimated/ReanimatedRexport.tsx'; /* Metro dependency 4017 */
import * as FileImportTrackerModule from '../../../../by-id/module-00002-FileImportTracker.js'; /* Metro dependency 2 */
import * as ReactNativeModule from '../../../../by-id/module-00027-ReactNative.js'; /* Metro dependency 27 */
import * as ReactModule from '../../../../by-id/module-00031-React.js'; /* Metro dependency 31 */
import * as PlatformUtilsModule from '../../../../utils/PlatformUtils.tsx'; /* Metro dependency 477 */
import * as ReanimatedRexportModule from '../../../../modules/reanimated/ReanimatedRexport.tsx'; /* Metro dependency 4017 */
import * as CreateStylesModule from '../../Styles/native/createStyles.tsx'; /* Metro dependency 4501 */
import * as SpringModule from '../../../animation/reanimated/spring/spring.tsx'; /* Metro dependency 4577 */
import * as TabItemNativeModule from './TabItem.native.tsx'; /* Metro dependency 8860 */
function _fun69053(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#69053, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:6, offset: 0x01c665f0, size: 417 bytes, params: 8, frame: 20
const env0_0 = require;
const closure = function(a0) {
return a0.toLocaleString(LocaleStore.locale);
};
const Object = global.Object;
Object.defineProperty(exports, '__esModule', {value: true});
let value = ReactNativeModule;
const env0_4 = value.View;
const ScrollView = value.ScrollView;
value = require(33) /* metro dependency 33 */;
const env0_6 = value.jsx;
const env0_7 = value.jsxs;
const env0_8 = (ReanimatedRexport).createAnimatedComponent(ScrollView);
const env0_9 = {'mass': 0.3, 'damping': 13, 'stiffness': 100, 'restDisplacementThreshold': 0.001,
'overshootClamping': true};
const env0_10 = (CreateStylesModule).createStyles(_fun69055);
object = {code: 'function TabsNativeTsx1(){const{activeIndex,itemCount}=this.__closure;return Math.round(Math.min(Math.max(activeIndex.get(),0),itemCount-1));}'};
object = {code: 'function TabsNativeTsx2(){const{itemDimensions,clampedActiveIndex}=this.__closure;const activeItem=itemDimensions.get()[clampedActiveIndex.get()];if(activeItem==null)return 0;return activeItem.width;}'};
object = {code: 'function TabsNativeTsx3(){const{itemDimensions,clampedActiveIndex}=this.__closure;var _itemDimensions$get$c,_itemDimensions$get$c2;return(_itemDimensions$get$c=(_itemDimensions$get$c2=itemDimensions.get()[clampedActiveIndex.get()])===null||_itemDimensions$get$c2===void 0?void 0:_itemDimensions$get$c2.x)!==null&&_itemDimensions$get$c!==void 0?_itemDimensions$get$c:0;}'};
object = {code: "function TabsNativeTsx4(){const{indicatorTranslateX,pressedIndex,clampedActiveIndex,PRESSED_TRANSLATE_AMOUNT,indicatorWidth,scrollOverflow,interpolate,SCROLL_OVERFLOW_UPPER_BOUND,SCROLL_OVERFLOW_MAX_SCALE,withSpring,SELECTED_INDICATOR_SPRING}=this.__closure;let translateX=indicatorTranslateX.get();let scaleX=1;if(pressedIndex.get()>=0){if(pressedIndex.get()<clampedActiveIndex.get()){scaleX+=PRESSED_TRANSLATE_AMOUNT;translateX-=indicatorWidth.get()*(PRESSED_TRANSLATE_AMOUNT/2);}else if(pressedIndex.get()>clampedActiveIndex.get()){scaleX+=PRESSED_TRANSLATE_AMOUNT;translateX+=indicatorWidth.get()*(PRESSED_TRANSLATE_AMOUNT/2);}}if(scrollOverflow.get()<0){const scaleFactor=interpolate(scrollOverflow.get(),[-SCROLL_OVERFLOW_UPPER_BOUND,0],[SCROLL_OVERFLOW_MAX_SCALE,1],'clamp');const scaleAmount=indicatorWidth.get()*(1-scaleFactor);scaleX=scaleFactor;translateX+=-scaleAmount/2;}else if(scrollOverflow.get()>0){const scaleFactor=interpolate(scrollOverflow.get(),[SCROLL_OVERFLOW_UPPER_BOUND,0],[SCROLL_OVERFLOW_MAX_SCALE,1],'clamp');const scaleAmount=indicatorWidth.get()*(1-scaleFactor);scaleX=scaleFactor;translateX+=scaleAmount/2;}return{width:withSpring(indicatorWidth.get(),SELECTED_INDICATOR_SPRING),transform:[{translateX:withSpring(translateX,SELECTED_INDICATOR_SPRING)},{scaleX:withSpring(scaleX,SELECTED_INDICATOR_SPRING)}]};}"};
object = {code: 'function TabsNativeTsx5(event){const{scrollOffset,onScrollWorklet}=this.__closure;var _onScrollWorklet;scrollOffset.set(event.contentOffset.x);(_onScrollWorklet=onScrollWorklet)===null||_onScrollWorklet===void 0||_onScrollWorklet(event.contentOffset.x);}'};
object = {code: 'function TabsNativeTsx6(){const{onEndDrag}=this.__closure;var _onEndDrag;(_onEndDrag=onEndDrag)===null||_onEndDrag===void 0||_onEndDrag();}'};
object = {code: 'function TabsNativeTsx7(){const{scrollOffset,activeIndex,itemDimensions}=this.__closure;return{scrollOffset:scrollOffset.get(),activeIndex:activeIndex.get(),itemDimensions:itemDimensions.get()};}'};
object = {code: 'function TabsNativeTsx8(props,prevState){const{cheapWorkletShallowEqual,itemSpacing,pageWidth,runOnJS,scrollToOffset,AUTO_SCROLL_BUFFER}=this.__closure;var _itemDimensions$activ,_itemDimensions$activ2,_itemDimensions$activ3;if(props.activeIndex===(prevState===null||prevState===void 0?void 0:prevState.activeIndex))return;if(cheapWorkletShallowEqual(props,prevState!==null&&prevState!==void 0?prevState:undefined))return;const{scrollOffset:scrollOffset,activeIndex:activeIndex,itemDimensions:itemDimensions}=props;const width=itemDimensions.reduce(function(sum,item){var _item$width;return sum+((_item$width=item===null||item===void 0?void 0:item.width)!==null&&_item$width!==void 0?_item$width:0);},0);const itemOffset=((_itemDimensions$activ=(_itemDimensions$activ2=itemDimensions[activeIndex])===null||_itemDimensions$activ2===void 0?void 0:_itemDimensions$activ2.x)!==null&&_itemDimensions$activ!==void 0?_itemDimensions$activ:0)+(activeIndex-1)*itemSpacing;const itemWidth=(_itemDimensions$activ3=itemDimensions[activeIndex])===null||_itemDimensions$activ3===void 0?void 0:_itemDimensions$activ3.width;if(width===0||itemOffset==null||itemWidth==null)return;if(scrollOffset+pageWidth<itemOffset+itemWidth){runOnJS(scrollToOffset)(itemOffset+AUTO_SCROLL_BUFFER);}else if(itemOffset<scrollOffset){runOnJS(scrollToOffset)(itemOffset-AUTO_SCROLL_BUFFER);}}'};
(FileImportTrackerModule).fileFinishedImporting('design/components/Tabs/native/Tabs.native.tsx');
exports.defaultCountFormatter = closure;
exports.Tabs = Tabs;
function _fun69055(a0, a1) { // fn#69055, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:333, offset: 0x01c667ae, size: 300 bytes, params: 3, frame: 17
const object = {};
const BORDER_SUBTLE = (importDefault(697) /* metro dependency 697: native */).colors.BORDER_SUBTLE;
object.container = {'display': 'flex', 'flexGrow': 1, 'minWidth': '100%', 'flexDirection': 'row',
'alignItems': 'center', 'borderBottomColor': null, 'borderBottomWidth': 1, borderBottomColor: BORDER_SUBTLE};
let PX_16 = (importDefault(697) /* metro dependency 697: native */).space.PX_16;
object.controlsContainer = {marginHorizontal: PX_16, flexDirection: 'row', gap: a0};
PX_16 = (importDefault(697) /* metro dependency 697: native */).space.PX_16;
object.indicatorContainer = {'position': 'absolute', 'width': '100%', 'height': '100%', 'flexDirection': 'row',
'alignItems': 'flex-end', marginLeft: PX_16};
const object4 = {height: 2};
object4.backgroundColor = a1 === 'gradient-background' ? (importDefault(697) /* metro dependency 697: native */).colors.TEXT_STRONG : (importDefault(697) /* metro dependency 697: native */).colors.TEXT_BRAND;
object4.borderTopStartRadius = (importDefault(697) /* metro dependency 697: native */).radii.xs;
object4.borderTopEndRadius = (importDefault(697) /* metro dependency 697: native */).radii.xs;
object.indicator = object4;
return object;
}
function Tabs({state, grow, formatCount = defaultCountFormatter, simultaneousHandlers, onScrollWorklet, onEndDrag, variant}) { // fn#69056, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:5218, offset: 0x01c668da, size: 1462 bytes, params: 2, frame: 45
grow = grow === undefined || grow;
const simultaneousHandlers2 = simultaneousHandlers;
const activeIndex = state.activeIndex;
const scrollOffset = state.scrollOffset;
const scrollOffset2 = scrollOffset;
const scrollOverflow = state.scrollOverflow;
const scrollOverflow2 = scrollOverflow;
const items2 = state.items;
const itemDimensions = state.itemDimensions;
const itemDimensions2 = itemDimensions;
const itemSpacing = state.itemSpacing;
const itemSpacing2 = itemSpacing;
const pageWidth = state.pageWidth;
const pageWidth2 = pageWidth;
const pressedIndex = state.pressedIndex;
const pressedIndex2 = pressedIndex;
const setActiveIndex = state.setActiveIndex;
const setActiveIndex2 = setActiveIndex;
const useReducedMotion = state.useReducedMotion;
const useReducedMotion2 = useReducedMotion;
const styles = useStyles(itemSpacing, variant);
const styles2 = styles;
const value5 = (ReanimatedRexportModule).useSharedValue(pageWidth);
const env0_18 = value5;
const length = items2.length;
let binding = simultaneousHandlers2;
const value6 = binding.useRef(null);
const value7 = binding.useCallback(_fun69057, [value5]);
let useDerivedValue = ReanimatedRexportModule.useDerivedValue;
let closure = function() {
var Math = global.Math;
var Math2 = global.Math;
var Math3 = global.Math;
return Math.round(Math2.min(Math3.max(activeIndex.get(), 0), length - 1));
};
closure.__closure = {activeIndex: activeIndex, itemCount: length};
closure.__workletHash = 3447899396126;
closure.__initData = itemDimensions2;
const value8 = Reflect.apply(useDerivedValue, ReanimatedRexportModule, [closure]);
useDerivedValue = ReanimatedRexportModule.useDerivedValue;
closure = TabsW;
closure.__closure = {itemDimensions: itemDimensions, clampedActiveIndex: value8};
closure.__workletHash = 8603255620075;
closure.__initData = itemSpacing2;
const value9 = Reflect.apply(useDerivedValue, ReanimatedRexportModule, [closure]);
useDerivedValue = ReanimatedRexportModule.useDerivedValue;
closure = TabsN;
closure.__closure = {itemDimensions: itemDimensions, clampedActiveIndex: value8};
closure.__workletHash = 3224400863644;
closure.__initData = pageWidth2;
const value10 = Reflect.apply(useDerivedValue, ReanimatedRexportModule, [closure]);
const useAnimatedStyle = ReanimatedRexportModule.useAnimatedStyle;
closure = Tabs$;
object = {indicatorTranslateX: value10, pressedIndex: pressedIndex, clampedActiveIndex: value8,
PRESSED_TRANSLATE_AMOUNT: 0.04, indicatorWidth: value9, scrollOverflow: scrollOverflow};
object.interpolate = ReanimatedRexportModule.interpolate;
object.SCROLL_OVERFLOW_UPPER_BOUND = 50;
object.SCROLL_OVERFLOW_MAX_SCALE = 0.9;
object.withSpring = (require(4577) /* metro dependency 4577: spring */).withSpring;
object.SELECTED_INDICATOR_SPRING = scrollOverflow2;
closure.__closure = object;
closure.__workletHash = 1794186407627;
closure.__initData = pressedIndex2;
const value11 = Reflect.apply(useAnimatedStyle, ReanimatedRexportModule, [closure]);
const useAnimatedScrollHandler = ReanimatedRexportModule.useAnimatedScrollHandler;
object = {};
closure = function(a0) {
scrollOffset.set(a0.contentOffset.x);
if (onScrollWorklet != null) {
onScrollWorklet(a0.contentOffset.x);
}
};
closure.__closure = {scrollOffset: scrollOffset, onScrollWorklet: onScrollWorklet};
closure.__workletHash = 1586298483424;
closure.__initData = setActiveIndex2;
object.onScroll = closure;
closure = function() {
if (onEndDrag != null) {
onEndDrag();
}
};
closure.__closure = {onEndDrag: onEndDrag};
closure.__workletHash = 6364544472149;
closure.__initData = useReducedMotion2;
object.onEndDrag = closure;
const value12 = Reflect.apply(useAnimatedScrollHandler, ReanimatedRexportModule, [object]);
const value13 = binding.useCallback(_fun69064, [useReducedMotion]);
const useAnimatedReaction = ReanimatedRexportModule.useAnimatedReaction;
closure = function() {
var object = {};
object.scrollOffset = scrollOffset.get();
object.activeIndex = activeIndex.get();
object.itemDimensions = itemDimensions.get();
return object;
};
closure.__closure = {scrollOffset: scrollOffset, activeIndex: activeIndex, itemDimensions: itemDimensions};
closure.__workletHash = 9993285637539;
closure.__initData = styles2;
const TabsX2 = TabsX;
TabsX2.__closure = {cheapWorkletShallowEqual: (require(7739) /* metro dependency 7739: cheapWorkletShallowEqual */).cheapWorkletShallowEqual,
itemSpacing: itemSpacing, pageWidth: pageWidth, runOnJS: ReanimatedRexportModule.runOnJS,
scrollToOffset: value13, AUTO_SCROLL_BUFFER: 16};
TabsX2.__workletHash = 15851319414889;
TabsX2.__initData = env0_18;
Reflect.apply(useAnimatedReaction, ReanimatedRexportModule, [closure, TabsX2]);
const value14 = binding.useMemo(_fun69068, [items2, length, formatCount, state, grow, pressedIndex, activeIndex,
setActiveIndex, styles.controlsContainer, variant]);
const value15 = binding.useMemo(_fun69073, [simultaneousHandlers]);
binding = scrollOffset2;
const r9 = PlatformUtilsModule.isIOS() ? 'tabbar' : undefined;
const View2 = (ReanimatedRexport).View;
const binding2 = ((Component) => <Component ref={value6} accessibilityRole={r9} keyboardShouldPersistTaps="handled" horizontal onScroll={value12} scrollEventThrottle={16} showsHorizontalScrollIndicator={false} contentContainerStyle={styles.container} bounces={false}><View style={styles.indicatorContainer} onLayout={value7}><View2 style={[styles.indicator,
value11]} /></View>{value14}</Component>)(binding);
if (value15 == null) {
return binding2;
} else {
const GestureDetector = (require(5321) /* metro dependency 5321 */).GestureDetector;
return (
<GestureDetector gesture={value15}>
{binding2}
</GestureDetector>
);
}
function _fun69057({nativeEvent}) { // fn#69057, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:5622, offset: 0x01c66e90, size: 41 bytes, params: 2, frame: 11
const binding = env0_18;
binding.set(nativeEvent.layout.width);
}
function TabsW() { // fn#69059, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:5881, owner: Tabs.W, offset: 0x01c66f0c, size: 51 bytes, params: 1, frame: 10
const itemDimensionsBinding = itemDimensions;
let get = itemDimensionsBinding.get;
const value2 = Reflect.apply(get, itemDimensionsBinding, []);
const binding = env0_21;
get = binding.get;
const property = value2[Reflect.apply(get, binding, [])];
return property == null ? 0 : property.width;
}
function TabsN() { // fn#69060, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:6072, owner: Tabs.N, offset: 0x01c66f3f, size: 63 bytes, params: 1, frame: 11
const itemDimensionsBinding = itemDimensions;
let get = itemDimensionsBinding.get;
const value2 = Reflect.apply(get, itemDimensionsBinding, []);
const binding = env0_21;
get = binding.get;
return value2[Reflect.apply(get, binding, [])]?.x ?? 0;
}
function Tabs$() { // fn#69061, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:6283, owner: Tabs.$, offset: 0x01c66f7e, size: 622 bytes, params: 1, frame: 23
var r4;
var r5;
var r3;
var r6;
var r10;
var value5;
var value6;
var value8;
var value11;
var value13;
var moduleValue;
var value15;
var value17;
var value18;
var moduleValue2;
var value20;
var value22;
let binding = env0_23;
let get = binding.get;
const value2 = Reflect.apply(get, binding, []);
const value3 = pressedIndex.get();
const value4 = 1;
if (value3 >= 0) {
value5 = pressedIndex.get();
binding = env0_21;
if (value5 < binding.get()) {
value11 = value2 - 0.02 * env0_22.get();
r4 = 1.04;
r5 = value11;
} else {
value6 = pressedIndex.get();
binding = env0_21;
if (value6 > binding.get()) {
value8 = value2 + 0.02 * env0_22.get();
r4 = 1.04;
r5 = value8;
} else {
r4 = value4;
r5 = value2;
}
}
r3 = r5;
r6 = r4;
} else {
r3 = value2;
r6 = value4;
}
get = scrollOverflow.get;
if (Reflect.apply(get, scrollOverflowBinding, []) < 0) {
value18 = environment.__proto__;
moduleValue2 = require(4017) /* metro dependency 4017: ReanimatedRexport */;
value20 = moduleValue2.interpolate(scrollOverflow.get(), [-50, 0], [0.9, 1], 'clamp');
binding = env0_22;
value22 = r3 + -binding.get() * (value4 - value20) / 2;
r6 = value20;
r10 = value22;
} else {
scrollOverflowBinding = scrollOverflow;
if (scrollOverflowBinding.get() > 0) {
value13 = environment.__proto__;
moduleValue = require(4017) /* metro dependency 4017: ReanimatedRexport */;
value15 = moduleValue.interpolate(scrollOverflow.get(), [50, 0], [0.9, 1], 'clamp');
value17 = r3 + env0_22.get() * (value4 - value15) / 2;
r6 = value15;
r10 = value17;
} else {
r10 = r3;
}
}
const object = {};
const withSpring = SpringModule.withSpring;
const value = env0_22.get();
binding = env1_9;
object.width = Reflect.apply(withSpring, SpringModule, [value, binding]);
const object2 = {};
object2.translateX = SpringModule.withSpring(r10, binding);
const items2 = [object2];
const object3 = {};
object3.scaleX = SpringModule.withSpring(r6, binding);
items2[1] = object3;
object.transform = items2;
return object;
}
function _fun69064(a0) { // fn#69064, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:7408, offset: 0x01c6722f, size: 54 bytes, params: 2, frame: 13
const current = env0_20.current;
if (current != null) {
current.scrollTo({x: a0, animated: !useReducedMotion});
}
}
function TabsX(a0, a1) { // fn#69066, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:7691, owner: Tabs.X, offset: 0x01c672a2, size: 339 bytes, params: 3, frame: 21
var environment;
var width;
var r6;
var value3;
var moduleValue;
var scrollOffset;
var itemDimensions;
var value4;
var property;
var value7;
let value = a1;
const activeIndex2 = a0.activeIndex;
const value2 = undefined;
let activeIndex = value == null ? value2 : value.activeIndex;
if (activeIndex2 !== activeIndex) {
value3 = environment.__proto__;
moduleValue = require(7739) /* metro dependency 7739: cheapWorkletShallowEqual */;
if (!moduleValue.cheapWorkletShallowEqual(a0, value ?? value2)) {
scrollOffset = a0.scrollOffset;
activeIndex = a0.activeIndex;
itemDimensions = a0.itemDimensions;
value = 0;
value4 = itemDimensions.reduce(function(a0, a1) {
return a0 + (a1?.width ?? 0);
}, value);
property = itemDimensions[activeIndex];
value7 = ((property == null ? value2 : property.x) ?? value) + (activeIndex - 1) * itemSpacing;
property = itemDimensions[activeIndex];
width = property == null ? value2 : property.width;
value = value !== value4;
r6 = value && value7 != null;
r6 = r6 && width != null;
if (r6) {
value = scrollOffset + pageWidth;
if (value < value7 + width) {
value = require(4017) /* metro dependency 4017: ReanimatedRexport */;
value = value.runOnJS(env0_24);
value(value7 + 16);
} else if (value7 < scrollOffset) {
value = require(4017) /* metro dependency 4017: ReanimatedRexport */;
value = value.runOnJS(env0_24);
value(value7 - 16);
}
}
}
}
return value2;
}
function _fun69068() { // fn#69068, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:8362, offset: 0x01c6741d, size: 67 bytes, params: 1, frame: 15
return (
<View style={styles.controlsContainer}>
{items.map(_fun69069)}
</View>
);
function _fun69069({label, count, id}, a1) { // fn#69069, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:8413, offset: 0x01c67460, size: 208 bytes, params: 3, frame: 21
var environment;
const env0_0 = a1;
let value = environment.__proto__.__proto__;
value = undefined;
const TabItem = (TabItemNativeModule).TabItem;
const lengthBinding = length;
const r7 = count != null ? env1_2(count) : value;
const stateBinding = state;
const growBinding = grow;
const pressedIndexBinding = pressedIndex;
const activeIndexBinding = activeIndex;
const get = activeIndexBinding.get;
return (
<TabItem
index={a1}
itemCount={lengthBinding}
label={label}
count={r7}
state={stateBinding}
grow={growBinding}
pressed={pressedIndexBinding}
selected={a1 === Reflect.apply(get, activeIndexBinding, [])}
onPress={function() {
setActiveIndex(require);
}}
onPressIn={function() {
pressedIndex.set(require);
}}
onPressOut={function() {
pressedIndex.set(-1);
}}
variant={variant}
key={id}
/>
);
}
}
function _fun69073() { // fn#69073, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:9044:8723, offset: 0x01c6757e, size: 74 bytes, params: 1, frame: 13
var r0;
var value3;
var value4;
const simultaneousHandlersBinding = simultaneousHandlers;
const value2 = null;
if (value2 == simultaneousHandlersBinding) {
r0 = value2;
} else {
value3 = environment.__proto__;
value4 = (require(5321) /* metro dependency 5321 */).Gesture.Native();
r0 = value4.simultaneousWithExternalGesture(simultaneousHandlers);
}
return r0;
}
}
}
global.__d(_fun69053, 8859, [31, 27, 1949, 33, 4017, 4501, 697, 4577, 7739, 8860, 5321, 477,
2]) /* metro module 8859, dependencies: [31, 27, 1949, 33, 4017, 4501, 697, 4577, 7739, 8860, 5321, 477, 2] */;