524 lines
21 KiB
React
524 lines
21 KiB
React
/* Metro module 1679; source: unknown; dependencies: [1669, 1662, 1614, 1651, 1635, 1666, 1680, 1696, 1620, 1697, 1698, 1703] */
|
|
function _fun18352(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#18352, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:6, offset: 0x00e898d0, size: 203 bytes, params: 8, frame: 18
|
|
const env0_0 = require;
|
|
const getRandomDelay = function() {
|
|
var r5;
|
|
var value = 1000;
|
|
r5 = arguments.length > 0 ? arguments[0] === undefined ? value : arguments[0] : value;
|
|
var Math = global.Math;
|
|
var Math2 = global.Math;
|
|
return Math.floor(Math2.random() * (r5 + 1)) / value;
|
|
};
|
|
const getCallbackFromConfig = function(a0) {
|
|
return a0.callbackV === undefined ? null : a0.callbackV;
|
|
};
|
|
const getReversedFromConfig = function(a0) {
|
|
return !!a0.reversed;
|
|
};
|
|
const closure = saveSnapshot;
|
|
const closure2 = setElementAnimation;
|
|
const getElementScrollValue = function(a0) {
|
|
var r2;
|
|
var r3;
|
|
var parentElement;
|
|
var value = a0;
|
|
var object = {'scrollTopOffset': 0, 'scrollLeftOffset': 0};
|
|
if (value) {
|
|
r2 = value;
|
|
while (true) {
|
|
value = r2.scrollTop !== 0;
|
|
r3 = value && object.scrollTopOffset === 0;
|
|
if (!r3) {
|
|
continue;
|
|
}
|
|
object.scrollTopOffset = r2.scrollTop;
|
|
value = r2.scrollLeft !== 0;
|
|
if (!value) {
|
|
r3 = value;
|
|
continue;
|
|
}
|
|
value = object.scrollLeftOffset === 0;
|
|
r3 = value;
|
|
if (!r3) {
|
|
continue;
|
|
}
|
|
object.scrollLeftOffset = r2.scrollLeft;
|
|
parentElement = r2.parentElement;
|
|
if (parentElement) {
|
|
r2 = parentElement;
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return object;
|
|
};
|
|
const Object = global.Object;
|
|
Object.defineProperty(exports, '__esModule', {value: true});
|
|
exports.getReducedMotionFromConfig = getReducedMotionFromConfig;
|
|
exports.getProcessedConfig = function(a0, a1, a2) {
|
|
var object = {animationName: a0, animationType: a1};
|
|
object.duration = getDurationFromConfig(a2, a0);
|
|
object.delay = getDelayFromConfig(a2);
|
|
object.easing = getEasingFromConfig(a2);
|
|
object.callback = getCallbackFromConfig(a2);
|
|
object.reversed = getReversedFromConfig(a2);
|
|
return object;
|
|
};
|
|
exports.maybeModifyStyleForKeyframe = maybeModifyStyleForKeyframe;
|
|
exports.saveSnapshot = closure;
|
|
exports.setElementAnimation = closure2;
|
|
exports.handleLayoutTransition = handleLayoutTransition;
|
|
exports.handleExitingAnimation = handleExitingAnimation;
|
|
}
|
|
|
|
function getEasingFromConfig(a0) { // fn#18353, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:43, offset: 0x00e8999b, size: 233 bytes, params: 2, frame: 18
|
|
var r0;
|
|
var property;
|
|
var value2;
|
|
var moduleValue;
|
|
var maybeGetBezierEasing;
|
|
var value3;
|
|
let easingV = a0.easingV;
|
|
var value;
|
|
if (easingV) {
|
|
easingV = a0.easingV;
|
|
property = easingV[(require(1662) /* metro dependency 1662 */).EasingNameSymbol];
|
|
value2 = property in (require(1669) /* metro dependency 1669 */).WebEasings;
|
|
moduleValue = require(1669) /* metro dependency 1669 */;
|
|
if (value2) {
|
|
return moduleValue.getEasingByName(property);
|
|
}
|
|
maybeGetBezierEasing = moduleValue.maybeGetBezierEasing;
|
|
easingV = a0.easingV;
|
|
value3 = Reflect.apply(maybeGetBezierEasing, moduleValue, [easingV]);
|
|
if (value3) {
|
|
r0 = value3;
|
|
} else {
|
|
(require(1614) /* metro dependency 1614 */).logger.warn('Selected easing is not currently supported on web. Using linear easing instead.');
|
|
value = require(1669) /* metro dependency 1669 */;
|
|
value = value.getEasingByName('linear');
|
|
r0 = value;
|
|
}
|
|
return r0;
|
|
}
|
|
return (require(1669) /* metro dependency 1669 */).getEasingByName('linear');
|
|
}
|
|
|
|
function getDelayFromConfig(a0) { // fn#18355, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:562, offset: 0x00e89ae0, size: 82 bytes, params: 2, frame: 13
|
|
const randomizeDelay = a0.randomizeDelay;
|
|
let r0 = randomizeDelay ? getRandomDelay() : 0;
|
|
r0 = a0.delayV ? randomizeDelay ? getRandomDelay(a0.delayV) : a0.delayV / 1000 : r0;
|
|
return r0;
|
|
}
|
|
|
|
function getDurationFromConfig(a0, a1) { // fn#18356, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:697, offset: 0x00e89b32, size: 114 bytes, params: 3, frame: 15
|
|
const Animations = (require(1666) /* metro dependency 1666 */).Animations;
|
|
return a0.durationV === undefined ? a1 in Animations ? Animations[a1].duration : 0.3 : a0.durationV / 1000;
|
|
}
|
|
|
|
function saveSnapshot(a0) { // fn#18359, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:975, offset: 0x00e89bce, size: 109 bytes, params: 2, frame: 15
|
|
const boundingClientRect = a0.getBoundingClientRect();
|
|
const object2 = {};
|
|
object2.top = boundingClientRect.top;
|
|
object2.left = boundingClientRect.left;
|
|
object2.width = boundingClientRect.width;
|
|
object2.height = boundingClientRect.height;
|
|
object2.scrollOffsets = getElementScrollValue(a0);
|
|
(require(1696) /* metro dependency 1696 */).snapshots.set(a0, object2);
|
|
}
|
|
|
|
function setElementAnimation(a0, a1) { // fn#18360, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1154, offset: 0x00e89c3b, size: 327 bytes, params: 3, frame: 22
|
|
const env0_0 = a0;
|
|
const env0_1 = a1;
|
|
let r2 = arguments.length > 2 && arguments[2] !== undefined && arguments[2];
|
|
value = null;
|
|
r2 = arguments.length > 3 ? arguments[3] === undefined ? value : arguments[3] : value;
|
|
const animationName = a1.animationName;
|
|
const duration = a1.duration;
|
|
const delay = a1.delay;
|
|
const env0_7 = a1.easing;
|
|
const closure = configureAnimation;
|
|
const animationType = a1.animationType;
|
|
const LayoutAnimationType = (require(1635) /* metro dependency 1635 */).LayoutAnimationType;
|
|
const ENTERING = LayoutAnimationType.ENTERING;
|
|
if (animationType === ENTERING) {
|
|
global.requestAnimationFrame(closure);
|
|
} else {
|
|
closure();
|
|
}
|
|
a0.onanimationend = onanimationend;
|
|
a0.onanimationstart = onanimationstart;
|
|
const Animations = (require(1666) /* metro dependency 1666 */).Animations;
|
|
if (!(animationName in Animations)) {
|
|
value = require(1697) /* metro dependency 1697 */;
|
|
value.scheduleAnimationCleanup(animationName, duration + delay, _fun18367);
|
|
}
|
|
}
|
|
|
|
function getReducedMotionFromConfig(a0) { // fn#18369, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:2658, offset: 0x00e8a04f, size: 170 bytes, params: 2, frame: 14
|
|
const ReducedMotionManager = (require(1651) /* metro dependency 1651 */).ReducedMotionManager;
|
|
const ReduceMotion = (require(1635) /* metro dependency 1635 */).ReduceMotion;
|
|
let reduceMotionV = a0.reduceMotionV;
|
|
if (reduceMotionV) {
|
|
reduceMotionV = a0.reduceMotionV;
|
|
if (ReduceMotion.Never === reduceMotionV) {
|
|
return false;
|
|
}
|
|
if (ReduceMotion.Always === reduceMotionV) {
|
|
return true;
|
|
}
|
|
}
|
|
return ReducedMotionManager.jsValue;
|
|
}
|
|
|
|
function maybeModifyStyleForKeyframe(a0, a1) { // fn#18371, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:3211, offset: 0x00e8a15b, size: 168 bytes, params: 3, frame: 17
|
|
var r2;
|
|
var value;
|
|
var Keyframe;
|
|
var style;
|
|
var Object;
|
|
var values;
|
|
var definitions;
|
|
var iterator;
|
|
var iterator2;
|
|
var item;
|
|
var item2;
|
|
var error;
|
|
exceptionSkip13: while (true) {
|
|
exceptionLanding13: while (true) {
|
|
value = environment;
|
|
Keyframe = (require(1680) /* metro dependency 1680 */).Keyframe;
|
|
if (a1 instanceof Keyframe) {
|
|
style = a0.style;
|
|
style.animationFillMode = 'forwards';
|
|
Object = global.Object;
|
|
values = Object.values;
|
|
definitions = a1.definitions;
|
|
iterator = Reflect.apply(values, Object, [definitions])[Symbol.iterator]();
|
|
iterator2 = iterator.next;
|
|
r2 = iterator;
|
|
loopExit2: while (true) {
|
|
item2 = Reflect.apply(iterator2, r2, []);
|
|
item = item2.value;
|
|
item2 = item2.done ? undefined : r2;
|
|
if (item2 === undefined) {
|
|
return undefined;
|
|
}
|
|
try {
|
|
value = 'originX' in item;
|
|
} catch (error) {
|
|
break exceptionLanding13;
|
|
}
|
|
if (value) {
|
|
break loopExit2;
|
|
}
|
|
try {
|
|
value = 'originY' in item;
|
|
} catch (error) {
|
|
break exceptionLanding13;
|
|
}
|
|
if (value) {
|
|
break loopExit2;
|
|
}
|
|
r2 = item2;
|
|
continue;
|
|
}
|
|
try {
|
|
style = a0.style;
|
|
} catch (error) {
|
|
break exceptionLanding13;
|
|
}
|
|
try {
|
|
style.position = 'absolute';
|
|
} catch (error) {
|
|
break exceptionLanding13;
|
|
}
|
|
item2.return();
|
|
return undefined;
|
|
}
|
|
return undefined;
|
|
break exceptionSkip13;
|
|
}
|
|
try {
|
|
item2.return();
|
|
} catch {
|
|
}
|
|
throw error;
|
|
break exceptionSkip13;
|
|
}
|
|
}
|
|
|
|
function handleLayoutTransition(a0, a1, a2) { // fn#18372, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:3535, offset: 0x00e8a203, size: 475 bytes, params: 4, frame: 21
|
|
const TransitionType = (require(1666) /* metro dependency 1666 */).TransitionType;
|
|
var value3;
|
|
const animationName = a1.animationName;
|
|
const r4 = animationName === 'LinearTransition' ? TransitionType.LINEAR : animationName === 'SequencedTransition' ? TransitionType.SEQUENCED : animationName === 'FadingTransition' ? TransitionType.FADING : animationName === 'JumpingTransition' ? TransitionType.JUMPING : animationName === 'CurvedTransition' ? TransitionType.CURVED : animationName !== 'EntryExitTransition' ? TransitionType.LINEAR : TransitionType.ENTRY_EXIT;
|
|
const {transitionKeyframeName,
|
|
dummyTransitionKeyframeName} = (require(1698) /* metro dependency 1698 */).TransitionGenerator(r4, a2);
|
|
a1.animationName = transitionKeyframeName;
|
|
const CURVED = TransitionType.CURVED;
|
|
if (r4 === CURVED) {
|
|
value3 = (require(1703) /* metro dependency 1703 */).prepareCurvedTransition(a0, a1, a2,
|
|
dummyTransitionKeyframeName);
|
|
setElementAnimation(value3.dummy, value3.dummyAnimationConfig);
|
|
}
|
|
setElementAnimation(a0, a1);
|
|
}
|
|
|
|
function handleExitingAnimation(a0, a1) { // fn#18373, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:4293, offset: 0x00e8a3de, size: 391 bytes, params: 3, frame: 21
|
|
var appendChild;
|
|
var top;
|
|
var left;
|
|
const env0_0 = a0;
|
|
const offsetParent = a0.offsetParent;
|
|
const value = a0.cloneNode();
|
|
value.isDummy = true;
|
|
value.style.animationName = '';
|
|
a0.dummyClone = value;
|
|
a0.style.animationName = '';
|
|
const Map = global.Map;
|
|
const map = new Map();
|
|
saveScrollPosition(a0);
|
|
let firstChild = a0.firstChild;
|
|
if (firstChild) {
|
|
reducibleLoop1: while (true) {
|
|
appendChild = value.appendChild;
|
|
firstChild = a0.firstChild;
|
|
Reflect.apply(appendChild, value, [firstChild]);
|
|
firstChild = a0.firstChild;
|
|
if (firstChild) {
|
|
continue reducibleLoop1;
|
|
}
|
|
break reducibleLoop1;
|
|
}
|
|
}
|
|
reducibleJoin4: while (true) {
|
|
if (offsetParent == null) {
|
|
break reducibleJoin4;
|
|
}
|
|
appendChild = offsetParent.appendChild;
|
|
Reflect.apply(appendChild, offsetParent, [value]);
|
|
break reducibleJoin4;
|
|
}
|
|
restoreScrollPosition(value);
|
|
const snapshots = (require(1696) /* metro dependency 1696 */).snapshots;
|
|
const value5 = snapshots.get(a0);
|
|
const elementScrollValue = getElementScrollValue(a0);
|
|
const scrollTopOffset = elementScrollValue.scrollTopOffset;
|
|
const scrollTopOffset2 = value5.scrollOffsets.scrollTopOffset;
|
|
reducibleJoin6: while (true) {
|
|
if (scrollTopOffset === scrollTopOffset2) {
|
|
break reducibleJoin6;
|
|
}
|
|
top = value5.top;
|
|
value5.top = top + (scrollTopOffset2 - scrollTopOffset);
|
|
break reducibleJoin6;
|
|
}
|
|
const scrollLeftOffset = elementScrollValue.scrollLeftOffset;
|
|
const scrollLeftOffset2 = value5.scrollOffsets.scrollLeftOffset;
|
|
reducibleJoin8: while (true) {
|
|
if (scrollLeftOffset === scrollLeftOffset2) {
|
|
break reducibleJoin8;
|
|
}
|
|
left = value5.left;
|
|
value5.left = left + (scrollLeftOffset2 - scrollLeftOffset);
|
|
break reducibleJoin8;
|
|
}
|
|
snapshots.set(value, value5);
|
|
(require(1696) /* metro dependency 1696 */).setElementPosition(value, value5);
|
|
setElementAnimation(value, a1, false, offsetParent);
|
|
}
|
|
|
|
function configureAnimation() { // fn#18361, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1366, owner: setElementAnimation.configureAnimation, offset: 0x00e89d82, size: 119 bytes, params: 1, frame: 17
|
|
const binding = env0_0;
|
|
binding.style.animationName = animationName;
|
|
binding.style.animationDuration = '' + duration + 's';
|
|
binding.style.animationDelay = '' + delay + 's';
|
|
binding.style.animationTimingFunction = easing;
|
|
}
|
|
|
|
function maybeRemoveElement() { // fn#18362, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1610, owner: setElementAnimation.maybeRemoveElement, offset: 0x00e89df9, size: 82 bytes, params: 1, frame: 13
|
|
var binding;
|
|
if (env0_0.isDummy && env0_3 != null && env0_3.contains(env0_0)) {
|
|
binding = env0_0;
|
|
binding.removedAfterAnimation = true;
|
|
env0_3.removeChild(binding);
|
|
}
|
|
}
|
|
|
|
function maybeCallCallback(a0) { // fn#18363, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1729, owner: setElementAnimation.maybeCallCallback, offset: 0x00e89e4b, size: 54 bytes, params: 2, frame: 12
|
|
if (!env0_9 && require.callback) {
|
|
require.callback(a0);
|
|
}
|
|
}
|
|
|
|
function onanimationend() { // fn#18364, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1814, owner: setElementAnimation.onanimationend, offset: 0x00e89e81, size: 77 bytes, params: 1, frame: 14
|
|
var value2;
|
|
if (env0_2) {
|
|
value2 = environment.__proto__;
|
|
saveSnapshot(env0_0);
|
|
}
|
|
maybeRemoveElement();
|
|
maybeCallCallback(true);
|
|
const binding = env0_0;
|
|
binding.removeEventListener('animationcancel', animationCancelHandler);
|
|
}
|
|
|
|
function animationCancelHandler() { // fn#18365, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:1904, owner: setElementAnimation.animationCancelHandler, offset: 0x00e89ece, size: 52 bytes, params: 1, frame: 14
|
|
maybeRemoveElement();
|
|
maybeCallCallback(false);
|
|
const binding = env0_0;
|
|
binding.removeEventListener('animationcancel', animationCancelHandler);
|
|
}
|
|
|
|
function onanimationstart() { // fn#18366, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:2011, owner: setElementAnimation.onanimationstart, offset: 0x00e89f02, size: 129 bytes, params: 1, frame: 15
|
|
const animationType = require.animationType;
|
|
const LayoutAnimationType = (require(1635) /* metro dependency 1635 */).LayoutAnimationType;
|
|
const ENTERING = LayoutAnimationType.ENTERING;
|
|
if (animationType === ENTERING) {
|
|
(require(1620) /* metro dependency 1620 */)._updatePropsJS({visibility: 'initial'}, env0_0);
|
|
}
|
|
const binding = env0_0;
|
|
binding.addEventListener('animationcancel', animationCancelHandler);
|
|
}
|
|
|
|
function _fun18367() { // fn#18367, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:2233, offset: 0x00e89f83, size: 99 bytes, params: 1, frame: 17
|
|
var value2;
|
|
var moduleValue;
|
|
var setElementPosition;
|
|
var binding;
|
|
var snapshots;
|
|
if (env0_2) {
|
|
value2 = environment.__proto__;
|
|
moduleValue = require(1696) /* metro dependency 1696 */;
|
|
setElementPosition = moduleValue.setElementPosition;
|
|
binding = env0_0;
|
|
snapshots = (require(1696) /* metro dependency 1696 */).snapshots;
|
|
Reflect.apply(setElementPosition, moduleValue, [binding, snapshots.get(binding)]);
|
|
}
|
|
maybeRemoveElement();
|
|
maybeCallCallback(false);
|
|
}
|
|
|
|
function saveScrollPosition(a0) { // fn#18374, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:4461, owner: handleExitingAnimation.saveScrollPosition, offset: 0x00e8a565, size: 105 bytes, params: 2, frame: 15
|
|
var saveScrollPositionBinding;
|
|
var error;
|
|
env0_2.set(a0, {top: a0.scrollTop, left: a0.scrollLeft});
|
|
const Array = global.Array;
|
|
const iterator = Array.from(a0.children)[Symbol.iterator]();
|
|
const iterator2 = iterator.next;
|
|
let r2 = iterator;
|
|
let item2 = Reflect.apply(iterator2, r2, []);
|
|
let item = item2.value;
|
|
item2 = item2.done ? undefined : r2;
|
|
reducibleJoin2: while (true) {
|
|
if (item2 === undefined) {
|
|
return undefined;
|
|
}
|
|
break reducibleJoin2;
|
|
}
|
|
reducibleLoop2: while (true) {
|
|
try {
|
|
saveScrollPositionBinding = saveScrollPosition;
|
|
} catch (error) {
|
|
try {
|
|
item2.return();
|
|
} catch {
|
|
}
|
|
throw error;
|
|
}
|
|
try {
|
|
saveScrollPositionBinding(item);
|
|
} catch (error) {
|
|
try {
|
|
item2.return();
|
|
} catch {
|
|
}
|
|
throw error;
|
|
}
|
|
r2 = item2;
|
|
item2 = Reflect.apply(iterator2, r2, []);
|
|
item = item2.value;
|
|
item2 = item2.done ? undefined : r2;
|
|
if (item2 === undefined) {
|
|
break reducibleLoop2;
|
|
}
|
|
continue reducibleLoop2;
|
|
}
|
|
}
|
|
|
|
function restoreScrollPosition(a0) { // fn#18375, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:1806:4663, owner: handleExitingAnimation.restoreScrollPosition, offset: 0x00e8a5ce, size: 122 bytes, params: 2, frame: 14
|
|
var r1;
|
|
var binding2;
|
|
var top;
|
|
var left;
|
|
var restoreScrollPositionBinding;
|
|
var error;
|
|
const value = a0;
|
|
const binding = env0_2;
|
|
const get = binding.get;
|
|
reducibleJoin2: while (true) {
|
|
if (value !== env0_1) {
|
|
r1 = value;
|
|
break reducibleJoin2;
|
|
}
|
|
binding2 = env0_0;
|
|
r1 = binding2;
|
|
break reducibleJoin2;
|
|
}
|
|
const value3 = Reflect.apply(get, binding, [r1]);
|
|
reducibleJoin4: while (true) {
|
|
if (value3) {
|
|
top = value3.top;
|
|
value.scrollTop = top;
|
|
left = value3.left;
|
|
value.scrollLeft = left;
|
|
break reducibleJoin4;
|
|
}
|
|
break reducibleJoin4;
|
|
}
|
|
const Array = global.Array;
|
|
const iterator = Array.from(value.children)[Symbol.iterator]();
|
|
const iterator2 = iterator.next;
|
|
let r2 = iterator;
|
|
let item2 = Reflect.apply(iterator2, r2, []);
|
|
let item = item2.value;
|
|
item2 = item2.done ? undefined : r2;
|
|
reducibleJoin6: while (true) {
|
|
if (item2 === undefined) {
|
|
return undefined;
|
|
}
|
|
break reducibleJoin6;
|
|
}
|
|
reducibleLoop6: while (true) {
|
|
try {
|
|
restoreScrollPositionBinding = restoreScrollPosition;
|
|
} catch (error) {
|
|
try {
|
|
item2.return();
|
|
} catch {
|
|
}
|
|
throw error;
|
|
}
|
|
try {
|
|
restoreScrollPositionBinding(item);
|
|
} catch (error) {
|
|
try {
|
|
item2.return();
|
|
} catch {
|
|
}
|
|
throw error;
|
|
}
|
|
r2 = item2;
|
|
item2 = Reflect.apply(iterator2, r2, []);
|
|
item = item2.value;
|
|
item2 = item2.done ? undefined : r2;
|
|
if (item2 === undefined) {
|
|
break reducibleLoop6;
|
|
}
|
|
continue reducibleLoop6;
|
|
}
|
|
}
|
|
|