/* Metro module 12406; source: lib/VideoQuality.tsx; dependencies: [6, 7, 15, 17, 18, 4303, 12403, 7131, 4406, 7130, 22, 21, 477, 1421, 4479, 2] */ import ClassCallCheck from '../by-id/module-00006-ClassCallCheck.js'; /* Metro dependency 6 */ import CreateClass from '../by-id/module-00007-CreateClass.js'; /* Metro dependency 7 */ import PossibleConstructorReturn from '../by-id/module-00015-PossibleConstructorReturn.js'; /* Metro dependency 15 */ import Module00017 from '../by-id/module-00017.js'; /* Metro dependency 17 */ import Inherits from '../by-id/module-00018-Inherits.js'; /* Metro dependency 18 */ import Module00022 from '../by-id/module-00022.js'; /* Metro dependency 22 */ import TypedEventEmitter from '../external/discord_common/js/shared/utils/TypedEventEmitter.tsx'; /* Metro dependency 4479 */ import NetworkQuality from './NetworkQuality.tsx'; /* Metro dependency 12403 */ import * as FileImportTrackerModule from '../by-id/module-00002-FileImportTracker.js'; /* Metro dependency 2 */ import * as PlatformUtilsModule from '../utils/PlatformUtils.tsx'; /* Metro dependency 477 */ import * as MediaEngineModule from '../external/discord_common/js/packages/media-engine/index.tsx'; /* Metro dependency 4406 */ import * as VideoQualityStatsModule from './VideoQualityStats.tsx'; /* Metro dependency 7130 */ import * as HistogramModule from './Histogram.tsx'; /* Metro dependency 7131 */ function _fun94603(global, require, importDefault, importAll, module, exports, dependencyMap) { // fn#94603, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:6, offset: 0x0211eb3b, size: 267 bytes, params: 8, frame: 19 const env0_0 = require; const _arrayLikeToArray_94606 = function(a0, a1) { var r0; var r1; var r2; var value3; var length; var value5; var value = undefined; var value2 = value == null; reducibleJoin2: while (true) { if (value2) { r0 = value2; break reducibleJoin2; } value3 = value > a0.length; r0 = value3; break reducibleJoin2; } reducibleJoin4: while (true) { if (r0) { length = a0.length; r1 = length; break reducibleJoin4; } r1 = value; break reducibleJoin4; } value = (0, global.Array)(r1); var value4 = 0; if (value4 < r1) { r2 = value4; reducibleLoop5: while (true) { value[r2] = a0[r2]; value5 = typeof r2 === 'bigint' ? r2 + 1n : +r2 + 1; if (value5 < r1) { r2 = value5; continue reducibleLoop5; } break reducibleLoop5; } } return value; }; const round_94610 = function(a0) { var r0; var value = a1; r0 = value !== undefined ? value : 0; r0 = a0 != null ? global.Math.round(a0) : r0; return r0; }; const Object = global.Object; Object.defineProperty(exports, '__esModule', {value: true}); let value = TypedEventEmitter; value = _fun94611(value); (FileImportTrackerModule).fileFinishedImporting('lib/VideoQuality.tsx'); exports.VideoQualityEvent = {FpsUpdate: 'fps-update'}; exports.VideoQuality = value; function _createForOfIteratorHelperLoose_94604(a0, a1) { // fn#94604, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:150, offset: 0x0211ec46, size: 372 bytes, params: 3, frame: 20 var r6; var r9; var r5; var value3; var regexp; const env0_0 = a0; const Symbol = global.Symbol; let value = typeof Symbol !== 'undefined'; let r1 = value && a0[global.Symbol.iterator]; r1 = !r1 ? a0['@@iterator'] : r1; if (r1) { value = r1.call(a0); return value.next.bind(value); } const Array = global.Array; if (Array.isArray(a0)) { if (r1) { } return _fun94605; } value = undefined; if (a0) { if (typeof a0 === 'string') { value = _arrayLikeToArray_94606(a0, value); r5 = value; } else { value3 = ({}).toString.call(a0).slice(8, -1); r6 = value3 === 'Object' && a0.constructor; r9 = r6 ? a0.constructor.name : value3; if (r9 === 'Map') { r6 = global.Array.from(a0); } else if (r9 === 'Set') { r6 = global.Array.from(a0); } else if (r9 === 'Arguments') { value = _arrayLikeToArray_94606(a0, value); r6 = value; } else { regexp = RegExp('^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$', ''); if (regexp.test(r9)) { value = _arrayLikeToArray_94606(a0, value); r6 = value; } else { r6 = value; } } r5 = r6; } } else { r5 = value; } if (r5) { if (r5) { } return _fun94605; } const TypeError = global.TypeError; throw new TypeError('Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.'); function _fun94605() { // fn#94605, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:721, offset: 0x00c39d73, size: 69 bytes, params: 1, frame: 5 return env0_1 >= env0_0.length ? {done: true} : {done: false, value: env0_0[typeof env0_1 === 'bigint' ? env0_1 : +env0_1]}; } } function _isNativeReflectConstruct_94607() { // fn#94607, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:1060, offset: 0x0211edba, size: 98 bytes, params: 1, frame: 18 var Boolean; var prototype; var valueOf; var call; var Reflect; var construct; var closure; var value; var error; try { Boolean = global.Boolean; prototype = Boolean.prototype; valueOf = prototype.valueOf; call = valueOf.call; Reflect = global.Reflect; construct = Reflect.construct; Boolean = global.Boolean; closure = function() { }; value = Reflect.apply(construct, Reflect, [Boolean, [], closure]); value = Reflect.apply(call, valueOf, [value]); var result = !value; } catch (error) { } return (_isNativeReflectConstruct_94607_isNativeReflectConstruct = function() { return !!result; })(); } function _fun94611(a0) { // fn#94611, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:1365, offset: 0x0211ee1c, size: 802 bytes, params: 2, frame: 16 const VideoQuality_946122 = VideoQuality_94612; Inherits(VideoQuality_946122, a0); return CreateClass(VideoQuality_946122, [{key: 'addUserToStatsCollectionPausedSet', value: function(a0) { this.statCollectionPausedUsers.add(a0); }}, {key: 'removeUserFromStatsCollectionPausedSet', value: function(a0) { this.statCollectionPausedUsers.delete(a0); }}, {key: 'start', value: function() { var property = this.timestampProducer; this.streamStart = property.now(); property = this.connection; var Stats = require(dependencyMap[8]).BaseConnectionEvent.Stats; property.on(Stats, this.sampleStats); }}, {key: 'setOutboundSsrc', value: value_94617}, {key: 'getOrCreateInboundStats', value: value_94618}, {key: 'updateCallUserIdsCount', value: function(a0) { this.callUserIdsCount = a0; }}, {key: 'setInboundUser', value: function(a0, a1) { var value = this.getOrCreateInboundStats(a0); var SenderStopped = require(dependencyMap[9]).VideoStoppedReasons.SenderStopped; value.setVideoStopped(a1 === 0, SenderStopped); }}, {key: 'setUserVideoDisabled', value: value_94621}, {key: 'setOcclusionIncomingVideoEnabled', value: function(a0) { this.videoStoppedForOcclusion.value = !a0; }}, {key: 'setWindowOcclusionState', value: function(a0) { var numWindowOcclusionChanges; if (a0 !== this.windowOccluded.value) { numWindowOcclusionChanges = this.numWindowOcclusionChanges; this.numWindowOcclusionChanges = typeof numWindowOcclusionChanges === 'bigint' ? numWindowOcclusionChanges + 1n : +numWindowOcclusionChanges + 1; } this.windowOccluded.value = a0; }}, {key: 'pause', value: value_94624}, {key: 'resume', value: function() { this.updateSendState({paused: false}); }}, {key: 'stop', value: function() { var property = this.connection; var Stats = require(dependencyMap[8]).BaseConnectionEvent.Stats; property.off(Stats, this.sampleStats); this.streamEnd = this.timestampProducer.now(); this.removeAllListeners(); }}, {key: 'setViewedSimulcastQuality', value: function(a0) { var r2; var property; var value = a0 !== this.hqSimulcastStreamWatched.value; if (value) { value = this.hqSimulcastStreamWatched.totalDuration(); value = value > 0; r2 = value || this.lqSimulcastStreamWatched.totalDuration() > 0; } else { r2 = value; } if (r2) { property = this.simulcastQualityChanges; this.simulcastQualityChanges = typeof property === 'bigint' ? property + 1n : +property + 1; } this.hqSimulcastStreamWatched.value = a0; this.lqSimulcastStreamWatched.value = !a0; }}, {key: 'setEligibleSimulcastQuality', value: function(a0) { this.hqSimulcastStreamEligible.value = a0; this.lqSimulcastStreamEligible.value = !a0; }}, {key: 'getNetworkStats', value: function() { return this.networkQuality.getStats(); }}, {key: 'getEncoderUsageStats', value: value_94632}, {key: 'getDecoderUsageStats', value: value_94633}, {key: 'getCodecUsageStats', value: value_94634}, {key: 'getCameraDurationStats', value: value_94635}, {key: 'getOutboundStats', value: value_94636}, {key: 'getInboundStats', value: function(a0) { return this.getStats(this.inboundStats[a0]); }}, {key: 'destroyUser', value: function(a0) { delete this.inboundStats[a0]; }}, {key: 'getInboundParticipants', value: value_94641}, {key: 'updateSendState', value: value_94642}, {key: 'getStats', value: value_94644}, {key: 'receivedStats', value: value_94645}, {key: 'updateSystemResourceStats', value: function() { var propertyName; var property2; var property3; for (propertyName in this.outboundStats) { property2 = this.outboundStats[propertyName]; property2.addSystemResources(); } for (propertyName in this.inboundStats) { property3 = this.inboundStats[propertyName]; property3.addSystemResources(); } }}, {key: 'updateVideoEffectStats', value: function(a0) { var r3; var value = undefined; r3 = a0 == null ? value : a0.rtp.outbound.find(_fun94655); this.videoEffectDuration.value = (r3 == null ? value : r3.type) === 'video' && r3.filter != null; return value; }}]); function VideoQuality_94612(a0) { // fn#94612, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:1377, offset: 0x0211f13e, size: 1201 bytes, params: 2, frame: 22 var environment; let value = a1; const r7 = value !== undefined ? value : (require(4303) /* metro dependency 4303: TimeUtils */).TimeStampProducer; value = environment.__proto__; env1_3(this, VideoQuality_94612); const value3 = env1_6(VideoQuality_94612); const value6 = env1_5(this, _isNativeReflectConstruct_94607() ? global.Reflect.construct(value3, [], env1_6(this).constructor) : value3.apply(this, undefined)); value6.connection = a0; value6.timestampProducer = r7; const defaultImport = NetworkQuality; const value7 = Object.create(defaultImport.prototype, {constructor: {value: defaultImport}}); const defaultImport2 = new defaultImport(); value6.networkQuality = defaultImport2 instanceof Object ? defaultImport2 : value7; value6.pausedCount = 0; value6.simulcastQualityChanges = 0; value6.cameraToggles = 0; value6.callUserIdsCount = 0; value6.numWindowOcclusionChanges = 0; value6.outboundStats = {}; value6.inboundStats = {}; value6.symmetricCodecUpdates = 0; value6.asymmetricCodecUpdates = 0; const Set = global.Set; const value10 = Object.create(Set.prototype, {constructor: {value: Set}}); const set = new Set(); value6.statCollectionPausedUsers = set instanceof Object ? set : value10; value6.sampleStats = sampleStats; const DurationEnabled = (require(4303) /* metro dependency 4303: TimeUtils */).DurationEnabled; value6.paused = new DurationEnabled(false); value6.zeroReceivers = new DurationEnabled(false); value6.videoStopped = new DurationEnabled(false); value6.videoEffectDuration = new DurationEnabled(false); value6.hqSimulcastStreamEncoded = new DurationEnabled(false); value6.lqSimulcastStreamEncoded = new DurationEnabled(false); value6.bothSimulcastStreamsEncoded = new DurationEnabled(false); value6.hqSimulcastStreamWatched = new DurationEnabled(false); value6.lqSimulcastStreamWatched = new DurationEnabled(false); value6.hqSimulcastStreamEligible = new DurationEnabled(false); value6.lqSimulcastStreamEligible = new DurationEnabled(false); value6.windowOccluded = new DurationEnabled(false); value6.videoStoppedForOcclusion = new DurationEnabled(false); value6.bandwidthLimitedFramerate = new DurationEnabled(false); value6.bandwidthLimitedResolution = new DurationEnabled(false); value6.cameraDuration = new DurationEnabled(false); value6.cameraOpportunityDuration = new DurationEnabled(false); value6.cameraSendDuration = new DurationEnabled(false); const Histogram = (HistogramModule).Histogram; value6.videoEntropy = new Histogram(); return value6; function sampleStats(a0) { // fn#94613, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:1938, owner: VideoQuality_94612.sampleStats, offset: 0x0211f5ef, size: 132 bytes, params: 2, frame: 16 var value2; var binding; if (a0 != null) { value2 = env0_0.timestampProducer.now(); env0_0.networkQuality.incrementNetworkStats(value2); binding = env0_0; binding.updateSystemResourceStats(); binding = env0_0; binding.updateVideoEffectStats(a0); if (a0 != null) { env0_0.receivedStats(value2, a0, env0_0.connection.getStreamParameters()); } } } } function value_94617(a0) { // fn#94617, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:3703, offset: 0x0211f6fe, size: 93 bytes, params: 2, frame: 14 var value; var OutboundStats; var timestampProducer; let outboundStats = this.outboundStats; if (outboundStats[a0] == null) { outboundStats = this.outboundStats; value = environment.__proto__; OutboundStats = (require(7130) /* metro dependency 7130: VideoQualityStats */).OutboundStats; timestampProducer = this.timestampProducer; outboundStats[a0] = new OutboundStats(); } } function value_94618(a0) { // fn#94618, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:3859, offset: 0x0211f75b, size: 101 bytes, params: 2, frame: 14 var value; var InboundStats; var timestampProducer; let inboundStats = this.inboundStats; if (inboundStats[a0] == null) { inboundStats = this.inboundStats; value = environment.__proto__; InboundStats = (require(7130) /* metro dependency 7130: VideoQualityStats */).InboundStats; timestampProducer = this.timestampProducer; inboundStats[a0] = new InboundStats(); } return this.inboundStats[a0]; } function value_94621(a0, a1) { // fn#94621, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:4253, offset: 0x0211f81d, size: 143 bytes, params: 3, frame: 16 const orCreateInboundStats = this.getOrCreateInboundStats(a0); const setVideoStopped = orCreateInboundStats.setVideoStopped; const VideoStoppedReasons = (VideoQualityStatsModule).VideoStoppedReasons; const ClientSideDisableVideo = VideoStoppedReasons.ClientSideDisableVideo; Reflect.apply(setVideoStopped, orCreateInboundStats, [a1, ClientSideDisableVideo]); if (!a1 && orCreateInboundStats.statsWindow.length > 0 && orCreateInboundStats.statsWindow[0].packets === 0) { orCreateInboundStats.startTime = this.timestampProducer.now(); } } function value_94624() { // fn#94624, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:4742, offset: 0x0211f8f9, size: 138 bytes, params: 1, frame: 19 var environment; var pausedCount; if (!this.paused.value) { pausedCount = this.pausedCount; this.pausedCount = typeof pausedCount === 'bigint' ? pausedCount + 1n : +pausedCount + 1; } value = environment.__proto__; value = importDefault(22) /* metro dependency 22 */; value.forEach(this.outboundStats, function(a0) { a0.statsWindow = []; }); value = importDefault(22) /* metro dependency 22 */; value.forEach(this.inboundStats, function(a0) { a0.statsWindow = []; }); this.updateSendState({paused: true}); } function value_94632() { // fn#94632, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:5739, offset: 0x0211faae, size: 234 bytes, params: 1, frame: 27 var r10; var r2; var propertyName; var propertyName2; var value3; var value4; var _createForOfIteratorHelperLoose_94604Binding; var outboundStats2; var property; var getCodecsUsed; var value5; var value6; var done; var value7; var toUpperCase; var value8; var set; var round_94610Binding; var outboundStats3; var codecBuckets; var parseInt; var value9; let Map = global.Map; let prototype = Map.prototype; let value = Object.create(prototype, {constructor: {value: Map}}); let map = new Map(); value = map instanceof Object ? map : value; const properties = Object.keys(this.outboundStats); const properties2 = 0; const properties3 = properties.length; if (properties !== undefined) { r10 = properties2; reducibleLoop1: while (true) { propertyName = properties[r10]; propertyName2 = r10 + 1; if (propertyName === undefined) { break reducibleLoop1; } Map = global.Map; prototype = Map.prototype; value3 = Object.create(prototype, {constructor: {value: Map}}); map = new Map(); value4 = map instanceof Object ? map : value3; _createForOfIteratorHelperLoose_94604Binding = _createForOfIteratorHelperLoose_94604; outboundStats2 = this.outboundStats; property = outboundStats2[propertyName]; getCodecsUsed = property.getCodecsUsed; value5 = _createForOfIteratorHelperLoose_94604Binding(Reflect.apply(getCodecsUsed, property, [])); value6 = value5(); done = value6.done; if (done) { r10 = propertyName2; continue reducibleLoop1; } r2 = value6; reducibleLoop3: while (true) { value7 = r2.value; toUpperCase = value7.toUpperCase; value8 = Reflect.apply(toUpperCase, value7, []); set = value4.set; round_94610Binding = round_94610; outboundStats3 = this.outboundStats; codecBuckets = outboundStats3[propertyName].codecBuckets; Reflect.apply(set, value4, [value8, round_94610Binding(codecBuckets[value8])]); set = value.set; parseInt = global.parseInt; Reflect.apply(set, value, [parseInt(propertyName), value4]); value9 = value5(); done = value9.done; if (done) { r10 = propertyName2; continue reducibleLoop1; } r2 = value9; continue reducibleLoop3; } continue reducibleLoop1; } } return value; } function value_94633() { // fn#94633, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:6053, offset: 0x0211fb98, size: 223 bytes, params: 1, frame: 27 var r10; var r2; var propertyName; var propertyName2; var value3; var value4; var _createForOfIteratorHelperLoose_94604Binding; var inboundStats2; var property; var getCodecsUsed; var value5; var value6; var done; var value7; var toUpperCase; var value8; var set; var round_94610Binding; var inboundStats3; var codecBuckets; var value9; let Map = global.Map; let prototype = Map.prototype; let value = Object.create(prototype, {constructor: {value: Map}}); let map = new Map(); value = map instanceof Object ? map : value; const properties = Object.keys(this.inboundStats); const properties2 = 0; const properties3 = properties.length; if (properties !== undefined) { r10 = properties2; reducibleLoop1: while (true) { propertyName = properties[r10]; propertyName2 = r10 + 1; if (propertyName === undefined) { break reducibleLoop1; } Map = global.Map; prototype = Map.prototype; value3 = Object.create(prototype, {constructor: {value: Map}}); map = new Map(); value4 = map instanceof Object ? map : value3; _createForOfIteratorHelperLoose_94604Binding = _createForOfIteratorHelperLoose_94604; inboundStats2 = this.inboundStats; property = inboundStats2[propertyName]; getCodecsUsed = property.getCodecsUsed; value5 = _createForOfIteratorHelperLoose_94604Binding(Reflect.apply(getCodecsUsed, property, [])); value6 = value5(); done = value6.done; if (done) { r10 = propertyName2; continue reducibleLoop1; } r2 = value6; reducibleLoop3: while (true) { value7 = r2.value; toUpperCase = value7.toUpperCase; value8 = Reflect.apply(toUpperCase, value7, []); set = value4.set; round_94610Binding = round_94610; inboundStats3 = this.inboundStats; codecBuckets = inboundStats3[propertyName].codecBuckets; Reflect.apply(set, value4, [value8, round_94610Binding(codecBuckets[value8])]); set = value.set; Reflect.apply(set, value, [propertyName, value4]); value9 = value5(); done = value9.done; if (done) { r10 = propertyName2; continue reducibleLoop1; } r2 = value9; continue reducibleLoop3; } continue reducibleLoop1; } } return value; } function value_94634(a0, a1) { // fn#94634, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:6352, offset: 0x0211fc77, size: 924 bytes, params: 3, frame: 23 var r7; var r4; var get; var object; const CodecTypes = (VideoQualityStatsModule).CodecTypes; var encoderUsageStats; var size; var value13; var value14; let value = this.asymmetricCodecUpdates > this.symmetricCodecUpdates; const Map = global.Map; const map = new Map(); if (a0 === 'sender') { encoderUsageStats = this.getEncoderUsageStats(); size = encoderUsageStats.size; value13 = 0; if (size > value13) { value14 = encoderUsageStats.keys(); object = []; arraySpread(object, value14, value13, undefined); r4 = encoderUsageStats.get(object.sort()[value13]); } else { r4 = map; } object = {codec_asymmetric_session: value}; get = r4.get; value = environment.__proto__; object.codec_h264_encode_duration_sec = Reflect.apply(get, r4, [CodecTypes.H264]) ?? value13; object.codec_h265_encode_duration_sec = r4.get(CodecTypes.H265) ?? value13; object.codec_vp8_encode_duration_sec = r4.get(CodecTypes.VP8) ?? value13; object.codec_vp9_encode_duration_sec = r4.get(CodecTypes.VP9) ?? value13; object.codec_av1_encode_duration_sec = r4.get(CodecTypes.AV1) ?? value13; value = r4.get(CodecTypes.UNKNOWN); object.codec_unknown_encode_duration_sec = value ?? value13; } else { if (a0 === 'streamer') { encoderUsageStats = this.getEncoderUsageStats(); size = encoderUsageStats.size; value13 = 0; if (size > value13) { value14 = encoderUsageStats.keys(); object = []; arraySpread(object, value14, value13, undefined); r4 = encoderUsageStats.get(object.sort()[value13]); } else { r4 = map; } object = {codec_asymmetric_session: value}; get = r4.get; value = environment.__proto__; object.codec_h264_encode_duration_sec = Reflect.apply(get, r4, [CodecTypes.H264]) ?? value13; object.codec_h265_encode_duration_sec = r4.get(CodecTypes.H265) ?? value13; object.codec_vp8_encode_duration_sec = r4.get(CodecTypes.VP8) ?? value13; object.codec_vp9_encode_duration_sec = r4.get(CodecTypes.VP9) ?? value13; object.codec_av1_encode_duration_sec = r4.get(CodecTypes.AV1) ?? value13; value = r4.get(CodecTypes.UNKNOWN); object.codec_unknown_encode_duration_sec = value ?? value13; return object; } var decoderUsageStats = this.getDecoderUsageStats(); r7 = decoderUsageStats.has(a1) ? decoderUsageStats.get(a1) : map; object = {codec_asymmetric_session: value}; get = r7.get; value = environment.__proto__; var value6 = Reflect.apply(get, r7, [CodecTypes.H264]); var value7 = 0; object.codec_h264_decode_duration_sec = value6 ?? value7; get = r7.get; object.codec_h265_decode_duration_sec = Reflect.apply(get, r7, [CodecTypes.H265]) ?? value7; get = r7.get; object.codec_vp8_decode_duration_sec = Reflect.apply(get, r7, [CodecTypes.VP8]) ?? value7; get = r7.get; object.codec_vp9_decode_duration_sec = Reflect.apply(get, r7, [CodecTypes.VP9]) ?? value7; get = r7.get; object.codec_av1_decode_duration_sec = Reflect.apply(get, r7, [CodecTypes.AV1]) ?? value7; value = r7.get(CodecTypes.UNKNOWN); object.codec_unknown_decode_duration_sec = value ?? value7; } return object; } function value_94636() { // fn#94636, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:8022, offset: 0x0212009c, size: 68 bytes, params: 1, frame: 15 var environment; let value = environment.__proto__; value = importDefault(22) /* metro dependency 22 */; value.forEach(this.outboundStats, _fun94637); return []; function _fun94637(a0, a1) { // fn#94637, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:8086, offset: 0x021200e0, size: 3175 bytes, params: 3, frame: 34 const env0_0 = a1; let connection = env0_0.connection; const value2 = null; const value3 = undefined; const r3 = value2 == connection ? value3 : connection.getStreamParameters(); if (r3.length > 1) { r3.forEach(function(a0) { if (global.parseInt(require) === a0.ssrc) { env0_1 = a0.quality ?? 50; } }); } let object = [1, 5, 10, 25, 50, 75]; const items2 = [1, 5, 10, 25, 50, 75, 99]; const report = a0.vmafHistogram.getReport(object); const report2 = a0.psnrHistogram.getReport(object); const report3 = a0.targetBitrateHistogram.getReport(items2); const report4 = a0.outboundBandwidthSurplus.getReport(items2); let binding = env0_0; const report5 = binding.videoEntropy.getReport(items2); const value10 = a0.aggregationDuration / 1000; const screenshareFramesUnique = a0.aggregatedProperties.screenshareFramesUnique; const binding2 = env0_1; const push = binding2.push; object = {}; const getStats = binding.getStats; copyDataProperties(object, Reflect.apply(getStats, binding, [a0]), undefined); const value11 = 0; const value12 = value10 > value11; object['target_fps'] = value12 ? global.Math.round((value2 != a0.targetFrames ? a0.targetFrames : value11) / value10) : value11; connection = env0_0.connection; const context = value2 == connection ? value3 : connection.context; const MediaEngineContextTypes = (MediaEngineModule).MediaEngineContextTypes; const STREAM = MediaEngineContextTypes.STREAM; object['unique_captured_fps'] = context !== STREAM ? value2 : value12 ? screenshareFramesUnique / value10 : value2; object['target_bitrate_network'] = value12 ? global.Math.round(8 * (value2 != a0.targetBytesNetwork ? a0.targetBytesNetwork : value11) / value10) : value11; object['target_bitrate_network_percentile1'] = report3.count > value11 ? report3.percentiles[1] : value2; object['target_bitrate_network_percentile5'] = report3.count > value11 ? report3.percentiles[5] : value2; object['target_bitrate_network_percentile10'] = report3.count > value11 ? report3.percentiles[10] : value2; object['target_bitrate_network_percentile25'] = report3.count > value11 ? report3.percentiles[25] : value2; object['target_bitrate_network_percentile50'] = report3.count > value11 ? report3.percentiles[50] : value2; object['target_bitrate_network_percentile75'] = report3.count > value11 ? report3.percentiles[75] : value2; object['target_bitrate_network_percentile99'] = report3.count > value11 ? report3.percentiles[99] : value2; object['target_bitrate_max'] = value12 ? global.Math.round(8 * (value2 != a0.targetBytesMax ? a0.targetBytesMax : value11) / value10) : value11; object['outbound_bandwidth_estimate'] = value12 ? global.Math.round(8 * (value2 != a0.outboundBytesAvailable ? a0.outboundBytesAvailable : value11) / value10) : value11; object['outbound_bandwidth_surplus_percentile1'] = report4.count > value11 ? report4.percentiles[1] : value2; object['outbound_bandwidth_surplus_percentile5'] = report4.count > value11 ? report4.percentiles[5] : value2; object['outbound_bandwidth_surplus_percentile10'] = report4.count > value11 ? report4.percentiles[10] : value2; object['outbound_bandwidth_surplus_percentile25'] = report4.count > value11 ? report4.percentiles[25] : value2; object['outbound_bandwidth_surplus_percentile50'] = report4.count > value11 ? report4.percentiles[50] : value2; object['outbound_bandwidth_surplus_percentile75'] = report4.count > value11 ? report4.percentiles[75] : value2; object['outbound_bandwidth_surplus_percentile99'] = report4.count > value11 ? report4.percentiles[99] : value2; let round_94610Binding = round_94610; let encoderBuckets = a0.encoderBuckets; const Encoders = (VideoQualityStatsModule).Encoders; const NVIDIA_CUDA = Encoders.NVIDIA_CUDA; object['duration_encoder_nvidia_cuda'] = round_94610Binding(encoderBuckets[NVIDIA_CUDA]); encoderBuckets = a0.encoderBuckets; const NVIDIA_DIRECT_3D = Encoders.NVIDIA_DIRECT_3D; object['duration_encoder_nvidia_direct3d'] = round_94610Binding(encoderBuckets[NVIDIA_DIRECT_3D]); encoderBuckets = a0.encoderBuckets; const NVIDIA_VULKAN = Encoders.NVIDIA_VULKAN; object['duration_encoder_nvidia_vulkan'] = round_94610Binding(encoderBuckets[NVIDIA_VULKAN]); encoderBuckets = a0.encoderBuckets; const OPENH264 = Encoders.OPENH264; object['duration_encoder_openh264'] = round_94610Binding(encoderBuckets[OPENH264]); encoderBuckets = a0.encoderBuckets; const VIDEOTOOLBOX = Encoders.VIDEOTOOLBOX; object['duration_encoder_videotoolbox'] = round_94610Binding(encoderBuckets[VIDEOTOOLBOX]); encoderBuckets = a0.encoderBuckets; const AMD_DIRECT_3D = Encoders.AMD_DIRECT_3D; object['duration_encoder_amd_direct3d'] = round_94610Binding(encoderBuckets[AMD_DIRECT_3D]); encoderBuckets = a0.encoderBuckets; const AMD_VAAPI = Encoders.AMD_VAAPI; object['duration_encoder_amd_vaapi'] = round_94610Binding(encoderBuckets[AMD_VAAPI]); encoderBuckets = a0.encoderBuckets; const INTEL = Encoders.INTEL; object['duration_encoder_intel'] = round_94610Binding(encoderBuckets[INTEL]); encoderBuckets = a0.encoderBuckets; const INTEL_DIRECT_3D = Encoders.INTEL_DIRECT_3D; object['duration_encoder_intel_direct3d'] = round_94610Binding(encoderBuckets[INTEL_DIRECT_3D]); encoderBuckets = a0.encoderBuckets; const INTEL_VAAPI = Encoders.INTEL_VAAPI; object['duration_encoder_intel_vaapi'] = round_94610Binding(encoderBuckets[INTEL_VAAPI]); encoderBuckets = a0.encoderBuckets; const VP8_LIBVPX = Encoders.VP8_LIBVPX; object['duration_encoder_vp8_libvpx'] = round_94610Binding(encoderBuckets[VP8_LIBVPX]); encoderBuckets = a0.encoderBuckets; const UNCATEGORIZED = Encoders.UNCATEGORIZED; object['duration_encoder_uncategorized'] = round_94610Binding(encoderBuckets[UNCATEGORIZED]); encoderBuckets = a0.encoderBuckets; const WMF_CHROME = Encoders.WMF_CHROME; object['duration_encoder_wmf_chrome'] = round_94610Binding(encoderBuckets[WMF_CHROME]); encoderBuckets = a0.encoderBuckets; const UNKNOWN = Encoders.UNKNOWN; object['duration_encoder_unknown'] = round_94610Binding(encoderBuckets[UNKNOWN]); object['quality'] = env0_1; object['average_encode_time_ms'] = a0.averageEncodeTime; object['average_encoder_vmaf_score'] = a0.vmafScoreNum > value11 ? a0.vmafScoreSum / a0.vmafScoreNum : value2; object['encoder_vmaf_score_percentile1'] = report.count > value11 ? report.percentiles[1] : value2; object['encoder_vmaf_score_percentile5'] = report.count > value11 ? report.percentiles[5] : value2; object['encoder_vmaf_score_percentile10'] = report.count > value11 ? report.percentiles[10] : value2; object['encoder_vmaf_score_percentile25'] = report.count > value11 ? report.percentiles[25] : value2; object['encoder_vmaf_score_percentile50'] = report.count > value11 ? report.percentiles[50] : value2; object['encoder_vmaf_score_percentile75'] = report.count > value11 ? report.percentiles[75] : value2; object['average_encoder_psnr_db'] = a0.psnrDbNum > value11 ? a0.psnrDbSum / a0.psnrDbNum : value2; object['encoder_psnr_db_percentile1'] = report2.count > value11 ? report2.percentiles[1] : value2; object['encoder_psnr_db_percentile5'] = report2.count > value11 ? report2.percentiles[5] : value2; object['encoder_psnr_db_percentile10'] = report2.count > value11 ? report2.percentiles[10] : value2; object['encoder_psnr_db_percentile25'] = report2.count > value11 ? report2.percentiles[25] : value2; object['encoder_psnr_db_percentile50'] = report2.count > value11 ? report2.percentiles[50] : value2; object['encoder_psnr_db_percentile75'] = report2.count > value11 ? report2.percentiles[75] : value2; object['average_outbound_want'] = a0.outboundSinkWantNum > value11 ? a0.outboundSinkWantSum / a0.outboundSinkWantNum : value2; object['frames_dropped_rate_limiter'] = a0.framesDroppedRateLimiter; object['frames_dropped_encoder_queue'] = a0.framesDroppedEncoderQueue; object['frames_dropped_congestion_window'] = a0.framesDroppedCongestionWindow; object['frames_dropped_encoder'] = a0.framesDroppedEncoder; round_94610Binding = round_94610; binding = env0_0; const hqSimulcastStreamEncoded = binding.hqSimulcastStreamEncoded; object['duration_hq_simulcast_stream_encoded'] = round_94610Binding(hqSimulcastStreamEncoded.totalDurationSeconds()); const lqSimulcastStreamEncoded = binding.lqSimulcastStreamEncoded; object['duration_lq_simulcast_stream_encoded'] = round_94610Binding(lqSimulcastStreamEncoded.totalDurationSeconds()); const bothSimulcastStreamsEncoded = binding.bothSimulcastStreamsEncoded; object['duration_both_simulcast_streams_encoded'] = round_94610Binding(bothSimulcastStreamsEncoded.totalDurationSeconds()); const bandwidthLimitedFramerate = binding.bandwidthLimitedFramerate; object['duration_fps_bandwidth_limited'] = round_94610Binding(bandwidthLimitedFramerate.totalDurationSeconds()); const bandwidthLimitedResolution = binding.bandwidthLimitedResolution; object['duration_resolution_bandwidth_limited'] = round_94610Binding(bandwidthLimitedResolution.totalDurationSeconds()); object['video_entropy_percentile1'] = report5.count > value11 ? report5.percentiles[1] : value2; object['video_entropy_percentile5'] = report5.count > value11 ? report5.percentiles[5] : value2; object['video_entropy_percentile10'] = report5.count > value11 ? report5.percentiles[10] : value2; object['video_entropy_percentile25'] = report5.count > value11 ? report5.percentiles[25] : value2; object['video_entropy_percentile50'] = report5.count > value11 ? report5.percentiles[50] : value2; object['video_entropy_percentile75'] = report5.count > value11 ? report5.percentiles[75] : value2; object['video_entropy_percentile99'] = report5.count > value11 ? report5.percentiles[99] : value2; round_94610Binding = round_94610; encoderBuckets = a0.encoderBuckets; const EXYNOS = Encoders.EXYNOS; object['duration_encoder_exynos'] = round_94610Binding(encoderBuckets[EXYNOS]); encoderBuckets = a0.encoderBuckets; const QUALCOMM = Encoders.QUALCOMM; object['duration_encoder_qualcomm'] = round_94610Binding(encoderBuckets[QUALCOMM]); encoderBuckets = a0.encoderBuckets; const MEDIATEK = Encoders.MEDIATEK; object['duration_encoder_mediatek'] = round_94610Binding(encoderBuckets[MEDIATEK]); encoderBuckets = a0.encoderBuckets; const WMF_SW = Encoders.WMF_SW; object['duration_encoder_wmf_sw'] = round_94610Binding(encoderBuckets[WMF_SW]); encoderBuckets = a0.encoderBuckets; const WMF_HW = Encoders.WMF_HW; object['duration_encoder_wmf_hw'] = round_94610Binding(encoderBuckets[WMF_HW]); encoderBuckets = a0.encoderBuckets; const WMF_DIRECT_3D = Encoders.WMF_DIRECT_3D; object['duration_encoder_wmf_direct3d'] = round_94610Binding(encoderBuckets[WMF_DIRECT_3D]); Reflect.apply(push, binding2, [object]); return value3; } } function value_94641() { // fn#94641, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:14013, offset: 0x02120db6, size: 46 bytes, params: 1, frame: 11 let value = environment.__proto__; value = importDefault(21) /* metro dependency 21: SnowflakeUtils */; return value.keys(this.inboundStats); } function value_94642(a0) { // fn#94642, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:14095, offset: 0x02120de4, size: 177 bytes, params: 2, frame: 14 var environment; if (a0.paused != null) { this.paused.value = a0.paused; } if (a0.receivers != null) { this.zeroReceivers.value = a0.receivers === 0; } const r2 = this.paused.value || this.zeroReceivers.value; value = this.videoStopped.value; this.videoStopped.value = r2; if (r2 !== value) { value = environment.__proto__; value = importDefault(22) /* metro dependency 22 */; value.forEach(this.outboundStats, function(a0) { var items = []; a0.statsWindow = items; return items; }); } } function value_94644(a0) { // fn#94644, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:14406, offset: 0x02120ea4, size: 3441 bytes, params: 2, frame: 50 const value = null; if (value == a0) { return value; } const Number = global.Number; const value2 = Number(this.streamStart); const r4 = value != this.streamEnd ? this.streamEnd - value2 : this.timestampProducer.now() - value2; let Math = global.Math; const max = Math.max; const aggregationDuration = a0.aggregationDuration; const value5 = 0; const value7 = Reflect.apply(max, Math, [aggregationDuration, value5]) / 1000; let object = [1, 5, 10, 25, 50, 75]; const report = a0.fpsHistogram.getReport(object); const report2 = a0.bitrateHistogram.getReport([1, 5, 10, 25, 50, 75, 99]); const report3 = a0.resolutionHistogram.getReport(object); const report4 = a0.inboundBitrateEstimateHistogram.getReport([1, 5, 10, 25, 50, 75, 99]); const report5 = a0.localWantHistogram.getReport([1, 5, 10, 25, 50, 75, 90, 95]); const stats = a0.systemResources.getStats(); object = {}; Math = global.Math; object.duration = Math.floor(r4 / 1000); let round_94610Binding = round_94610; object.duration_aggregation = round_94610Binding(value7); const videoStoppedDuration = a0.videoStoppedDuration; object.duration_stopped_receiving = round_94610Binding(videoStoppedDuration.asSeconds()); object.duration_stream_under_8mbps = round_94610Binding(a0.bitrateBuckets[8000000]); object.duration_stream_under_7mbps = round_94610Binding(a0.bitrateBuckets[7000000]); object.duration_stream_under_6mbps = round_94610Binding(a0.bitrateBuckets[6000000]); object.duration_stream_under_5mbps = round_94610Binding(a0.bitrateBuckets[5000000]); object.duration_stream_under_4mbps = round_94610Binding(a0.bitrateBuckets[4000000]); object.duration_stream_under_3mbps = round_94610Binding(a0.bitrateBuckets[3000000]); object.duration_stream_under_2mbps = round_94610Binding(a0.bitrateBuckets[2000000]); object.duration_stream_under_1_5mbps = round_94610Binding(a0.bitrateBuckets[1500000]); object.duration_stream_under_1mbps = round_94610Binding(a0.bitrateBuckets[1000000]); object.duration_stream_under_0_5mbps = round_94610Binding(a0.bitrateBuckets[500000]); object.duration_stream_at_0mbps = round_94610Binding(a0.bitrateBuckets[value5]); object.duration_fps_under_60 = round_94610Binding(a0.fpsBuckets[60]); object.duration_fps_under_55 = round_94610Binding(a0.fpsBuckets[55]); object.duration_fps_under_50 = round_94610Binding(a0.fpsBuckets[50]); object.duration_fps_under_45 = round_94610Binding(a0.fpsBuckets[45]); object.duration_fps_under_40 = round_94610Binding(a0.fpsBuckets[40]); object.duration_fps_under_35 = round_94610Binding(a0.fpsBuckets[35]); object.duration_fps_under_30 = round_94610Binding(a0.fpsBuckets[30]); object.duration_fps_under_25 = round_94610Binding(a0.fpsBuckets[25]); object.duration_fps_under_20 = round_94610Binding(a0.fpsBuckets[20]); object.duration_fps_under_15 = round_94610Binding(a0.fpsBuckets[15]); object.duration_fps_under_10 = round_94610Binding(a0.fpsBuckets[10]); object.duration_fps_under_5 = round_94610Binding(a0.fpsBuckets[5]); object.duration_fps_at_0 = round_94610Binding(a0.fpsBuckets[value5]); object.avg_resolution = a0.intervalTotal > value5 ? global.Math.round(a0.resolutionTotal / a0.intervalTotal) : value5; object.avg_minor_resolution = a0.intervalTotal > value5 ? global.Math.round(a0.minorResolutionTotal / a0.intervalTotal) : value5; object.avg_major_resolution = a0.intervalTotal > value5 ? global.Math.round(a0.majorResolutionTotal / a0.intervalTotal) : value5; const minWidth = a0.minWidth; object.min_resolution_width = value != minWidth ? minWidth : value; const minHeight = a0.minHeight; object.min_resolution_height = value != minHeight ? minHeight : value; round_94610Binding = round_94610; object.duration_resolution_under_720 = round_94610Binding(a0.resolutionBuckets[720]); object.duration_resolution_under_480 = round_94610Binding(a0.resolutionBuckets[480]); object.duration_resolution_under_360 = round_94610Binding(a0.resolutionBuckets[360]); object.num_pauses = this.pausedCount; const paused = this.paused; object.duration_paused = round_94610Binding(paused.totalDuration() / 1000); const zeroReceivers = this.zeroReceivers; object.duration_zero_receivers = round_94610Binding(zeroReceivers.totalDuration() / 1000); const videoStopped = this.videoStopped; object.duration_video_stopped = round_94610Binding(videoStopped.totalDuration() / 1000); const hqSimulcastStreamWatched = this.hqSimulcastStreamWatched; object.duration_hq_simulcast_stream_watched = round_94610Binding(hqSimulcastStreamWatched.totalDurationSeconds()); const lqSimulcastStreamWatched = this.lqSimulcastStreamWatched; object.duration_lq_simulcast_stream_watched = round_94610Binding(lqSimulcastStreamWatched.totalDurationSeconds()); const hqSimulcastStreamEligible = this.hqSimulcastStreamEligible; object.duration_hq_simulcast_stream_eligible = round_94610Binding(hqSimulcastStreamEligible.totalDurationSeconds()); const lqSimulcastStreamEligible = this.lqSimulcastStreamEligible; object.duration_lq_simulcast_stream_eligible = round_94610Binding(lqSimulcastStreamEligible.totalDurationSeconds()); object.num_quality_changes = this.simulcastQualityChanges; const windowOccluded = this.windowOccluded; object.duration_window_occluded = round_94610Binding(windowOccluded.totalDurationSeconds()); const videoStoppedForOcclusion = this.videoStoppedForOcclusion; object.duration_incoming_video_stopped_for_occlusion = round_94610Binding(videoStoppedForOcclusion.totalDurationSeconds()); object.num_window_occlusion_changes = this.numWindowOcclusionChanges; object.fps_percentile1 = report.percentiles[1]; object.fps_percentile5 = report.percentiles[5]; object.fps_percentile10 = report.percentiles[10]; object.fps_percentile25 = report.percentiles[25]; object.fps_percentile50 = report.percentiles[50]; object.fps_percentile75 = report.percentiles[75]; object.bitrate_percentile1 = report2.percentiles[1]; object.bitrate_percentile5 = report2.percentiles[5]; object.bitrate_percentile10 = report2.percentiles[10]; object.bitrate_percentile25 = report2.percentiles[25]; object.bitrate_percentile50 = report2.percentiles[50]; object.bitrate_percentile75 = report2.percentiles[75]; object.bitrate_percentile99 = report2.percentiles[99]; object.resolution_percentile1 = report3.percentiles[1]; object.resolution_percentile5 = report3.percentiles[5]; object.resolution_percentile10 = report3.percentiles[10]; object.resolution_percentile25 = report3.percentiles[25]; object.resolution_percentile50 = report3.percentiles[50]; object.resolution_percentile75 = report3.percentiles[75]; object.inbound_bitrate_estimate_percentile1 = report4.percentiles[1]; object.inbound_bitrate_estimate_percentile5 = report4.percentiles[5]; object.inbound_bitrate_estimate_percentile10 = report4.percentiles[10]; object.inbound_bitrate_estimate_percentile25 = report4.percentiles[25]; object.inbound_bitrate_estimate_percentile50 = report4.percentiles[50]; object.inbound_bitrate_estimate_percentile75 = report4.percentiles[75]; object.inbound_bitrate_estimate_percentile99 = report4.percentiles[99]; object.local_want_percentile1 = report5.percentiles[1]; object.local_want_percentile5 = report5.percentiles[5]; object.local_want_percentile10 = report5.percentiles[10]; object.local_want_percentile25 = report5.percentiles[25]; object.local_want_percentile50 = report5.percentiles[50]; object.local_want_percentile75 = report5.percentiles[75]; object.local_want_percentile90 = report5.percentiles[90]; object.local_want_percentile95 = report5.percentiles[95]; object.average_local_want = report5.mean; const videoEffectDuration = this.videoEffectDuration; object.duration_video_effect = round_94610Binding(videoEffectDuration.totalDuration() / 1000); object.cryptor_max_attempts = a0.cryptorMaxAttempts; let decoderBuckets = a0.decoderBuckets; const Decoders = (VideoQualityStatsModule).Decoders; const FFMPEG = Decoders.FFMPEG; object.duration_decoder_ffmpeg = round_94610Binding(decoderBuckets[FFMPEG]); decoderBuckets = a0.decoderBuckets; const DAV1D = Decoders.DAV1D; object.duration_decoder_dav1d = round_94610Binding(decoderBuckets[DAV1D]); decoderBuckets = a0.decoderBuckets; const VP8_LIBVPX = Decoders.VP8_LIBVPX; object.duration_decoder_vp8_libvpx = round_94610Binding(decoderBuckets[VP8_LIBVPX]); decoderBuckets = a0.decoderBuckets; const ELECTRON = Decoders.ELECTRON; object.duration_decoder_electron = round_94610Binding(decoderBuckets[ELECTRON]); decoderBuckets = a0.decoderBuckets; const VIDEOTOOLBOX = Decoders.VIDEOTOOLBOX; object.duration_decoder_videotoolbox = round_94610Binding(decoderBuckets[VIDEOTOOLBOX]); decoderBuckets = a0.decoderBuckets; const UNCATEGORIZED = Decoders.UNCATEGORIZED; object.duration_decoder_uncategorized = round_94610Binding(decoderBuckets[UNCATEGORIZED]); decoderBuckets = a0.decoderBuckets; const UNKNOWN = Decoders.UNKNOWN; object.duration_decoder_unknown = round_94610Binding(decoderBuckets[UNKNOWN]); decoderBuckets = a0.decoderBuckets; const EXYNOS = Decoders.EXYNOS; object.duration_decoder_exynos = round_94610Binding(decoderBuckets[EXYNOS]); decoderBuckets = a0.decoderBuckets; const WEBRTC = Decoders.WEBRTC; object.duration_decoder_webrtc = round_94610Binding(decoderBuckets[WEBRTC]); decoderBuckets = a0.decoderBuckets; const QUALCOMM = Decoders.QUALCOMM; object.duration_decoder_qualcomm = round_94610Binding(decoderBuckets[QUALCOMM]); decoderBuckets = a0.decoderBuckets; const MEDIATEK = Decoders.MEDIATEK; object.duration_decoder_mediatek = round_94610Binding(decoderBuckets[MEDIATEK]); decoderBuckets = a0.decoderBuckets; const D3D11VIDEODECODER = Decoders.D3D11VIDEODECODER; object.duration_decoder_d3d11videodecoder = round_94610Binding(decoderBuckets[D3D11VIDEODECODER]); copyDataProperties(object, stats, undefined); const {bytes, framesDropped, framesCodecError, framesCodec, framesNetwork, packets, packetsLost, nackCount, pliCount, qpSum, pauseCount, freezeCount, totalPausesDuration, totalFreezesDuration, totalFramesDuration, keyframes, passthroughCount, cryptorSuccessCount, cryptorFailureCount, cryptorDuration, cryptorAttempts, cryptorMissingKeyCount, cryptorInvalidNonceCount, qualityDecodeErrors, qualityDecoderReboots, qualityScoreErrors, qualityFrameDrops, qualitySizeMismatches} = a0.aggregatedProperties; const r36 = value != cryptorFailureCount ? cryptorFailureCount : value5; const cryptorFailureBeforeSuccessCount = a0.cryptorFailureBeforeSuccessCount; const value18 = value != cryptorFailureBeforeSuccessCount; const value19 = r36 - (value18 ? cryptorFailureBeforeSuccessCount : value5); const OutboundStats = (VideoQualityStatsModule).OutboundStats; if (a0 instanceof OutboundStats) { object.sender_freeze_count = freezeCount; object.sender_total_freezes_duration = totalFreezesDuration; object.sender_total_frames_duration = totalFramesDuration; object.consecutive_static_color_frames_max = a0.consecutiveStaticColorFramesMax; } else { object.receiver_freeze_count = freezeCount; object.receiver_total_freezes_duration = totalFreezesDuration; object.receiver_total_frames_duration = totalFramesDuration; object.receiver_pause_count = pauseCount; object.receiver_total_pauses_duration = totalPausesDuration; } const object2 = {}; copyDataProperties(object2, object, value18); const value20 = value7 > value5; object2['avg_bitrate'] = value20 ? global.Math.round(8 * (value != bytes ? bytes : value5) / value7) : value5; object2['avg_fps'] = value20 ? global.Math.round((value != framesCodec ? framesCodec : value5) / value7) : value5; object2['num_bytes'] = bytes; object2['num_packets_lost'] = packetsLost; object2['num_packets'] = packets; object2['num_frames'] = framesNetwork; object2['num_frames_codec_error'] = framesCodecError; object2['time_to_first_frame_ms'] = a0.timeToFirstFrame; object2['num_frames_dropped'] = framesDropped; object2['num_nacks'] = nackCount; object2['num_plis'] = pliCount; object2['qp_sum'] = qpSum; object2['num_keyframes'] = keyframes; object2['cryptor_passthrough_count'] = passthroughCount; object2['cryptor_success_count'] = cryptorSuccessCount; object2['cryptor_failure_count'] = cryptorFailureCount; object2['cryptor_duration'] = cryptorDuration; object2['cryptor_attempts'] = cryptorAttempts; object2['cryptor_missing_key_count'] = cryptorMissingKeyCount; object2['cryptor_invalid_nonce_count'] = cryptorInvalidNonceCount; object2['cryptor_failure_after_success_count'] = value19; object2['encoder_quality_decode_errors'] = qualityDecodeErrors; object2['encoder_quality_decoder_reboots'] = qualityDecoderReboots; object2['encoder_quality_score_errors'] = qualityScoreErrors; object2['encoder_quality_frame_drops'] = qualityFrameDrops; object2['encoder_quality_size_mismatches'] = qualitySizeMismatches; return object2; } function value_94645(a0, a1, a2) { // fn#94645, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:21940, offset: 0x02121c15, size: 792 bytes, params: 4, frame: 25 var environment; var cameraToggles; var defaultImport2; var asymmetricCodecUpdates; var symmetricCodecUpdates; const env0_1 = a0; const env0_2 = a1; const env0_3 = a2; const transport = a1.transport; let value = environment.__proto__; const value2 = undefined; const isWeb2 = (PlatformUtilsModule).isWeb(); const value3 = 1; const r11 = isWeb2 ? value3 : (transport.receiverReports == null ? value2 : transport.receiverReports.length) ?? 0; let Set = global.Set; let set = new Set(); Set = global.Set; set = new Set(); this.updateSendState({receivers: r11}); let cameraDuration = this.cameraDuration; const value9 = cameraDuration.value; cameraDuration = this.cameraDuration; let context = this.connection.context; const MediaEngineContextTypes = (MediaEngineModule).MediaEngineContextTypes; let DEFAULT = MediaEngineContextTypes.DEFAULT; cameraDuration.value = context === DEFAULT && a1.camera != null; const cameraOpportunityDuration = this.cameraOpportunityDuration; context = this.connection.context; DEFAULT = MediaEngineContextTypes.DEFAULT; cameraOpportunityDuration.value = context === DEFAULT && a1.camera != null && this.callUserIdsCount > value3; const cameraSendDuration = this.cameraSendDuration; context = this.connection.context; DEFAULT = MediaEngineContextTypes.DEFAULT; cameraSendDuration.value = context === DEFAULT && a1.camera != null && r11 > 0; if (this.cameraDuration.value && !value9) { cameraToggles = this.cameraToggles; this.cameraToggles = typeof cameraToggles === 'bigint' ? cameraToggles + 1n : +cameraToggles + 1; } const defaultImport = Module00022; const env0_7 = defaultImport.max(a2.map(function(a0) { return a0.quality; })); const property = a1.rtp.outbound.filter(function(a0) { var r0; var value = a0.type === 'video'; if (value) { value = undefined; value = (a0 == null ? value : a0.videoEntropy) != null; r0 = value; } else { r0 = value; } return r0; })[0]; const env0_8 = property == null ? value2 : property.videoEntropy; a1.rtp.outbound.filter(function(a0) { return a0.type === 'video'; }).forEach(_fun94649); if (!this.paused.value) { defaultImport2 = defaultImport; defaultImport2.forEach(a1.rtp.inbound, _fun94651); } if (set.size !== 0 && set.size !== 0) { value = require(1421) /* metro dependency 1421: SetUtils */; if (value.areSetsEqual(set, set)) { symmetricCodecUpdates = this.symmetricCodecUpdates; this.symmetricCodecUpdates = typeof symmetricCodecUpdates === 'bigint' ? symmetricCodecUpdates + 1n : +symmetricCodecUpdates + 1; } else { asymmetricCodecUpdates = this.asymmetricCodecUpdates; this.asymmetricCodecUpdates = typeof asymmetricCodecUpdates === 'bigint' ? asymmetricCodecUpdates + 1n : +asymmetricCodecUpdates + 1; } } return value2; function _fun94649(a0) { // fn#94649, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:22787, offset: 0x02121f62, size: 1597 bytes, params: 2, frame: 28 var environment; var r4; var r7; var r5; var r10; var r8; var r12; var r11; var r14; var maxBitrate; var maxFrameRate; var r3; var ssrc; var outboundStats; var property; var value3; var OutboundStats; var binding; var timestampProducer; var Math; var videoEntropy2; var value12; var context; var value13; var value14; const MediaEngineContextTypes = (MediaEngineModule).MediaEngineContextTypes; var remoteVideoSinkWants; var value21; var outboundStats2; var screenshare; var hybridDxgiFramesUnique; var hybridGdiBitBltFramesUnique; var hybridGdiPrintWindowFramesUnique; var hybridVideohookFramesUnique; var hybridGraphicsCaptureFramesUnique; var screenshareFrames; var value25; var videohookFrames; var value26; var quartzFrames; var value27; var screenCaptureKitFrames; var value28; var x11Frames; var value29; var pipewireFrames; var value31; var value32; var value33; var value34; var appendTargetRates; var bitrateTarget; var averageEncodeTime; var framesDroppedRateLimiter; var framesDroppedEncoderQueue; var framesDroppedCongestionWindow; var framesDroppedEncoder; var hqSimulcastStreamEncoded; var hqSimulcastStreamEncoded2; var lqSimulcastStreamEncoded; var lqSimulcastStreamEncoded2; var bothSimulcastStreamsEncoded; var bandwidthLimitedResolution; var bandwidthLimitedResolution2; var bandwidthLimitedFramerate; var bandwidthLimitedFrameRate; let value = null; if (value != a0) { ssrc = a0.ssrc; var ssrc2 = ssrc; outboundStats = ssrc2.outboundStats; property = outboundStats[ssrc]; if (value != property) { r4 = property; } else { value3 = environment.__proto__.__proto__; OutboundStats = (require(7130) /* metro dependency 7130: VideoQualityStats */).OutboundStats; binding = ssrc2; timestampProducer = binding.timestampProducer; outboundStats = new OutboundStats(); outboundStats = binding.outboundStats; outboundStats[ssrc] = outboundStats; r4 = outboundStats; } r5 = value == r4.timeToFirstFrame && (a0.framesEncoded > 0 || (value != a0.frameRateInput ? a0.frameRateInput : 0) > 0); if (r5) { Math = global.Math; r4.timeToFirstFrame = Math.max(0, env0_1 - r4.startTime); } r5 = value != videoEntropy && videoEntropy >= 0; if (r5) { videoEntropy2 = ssrc2.videoEntropy; videoEntropy2.addSample(videoEntropy); } value12 = importDefault.find(function({ssrc}) { return ssrc === ssrc; }); context = ssrc2.connection.context; value13 = environment.__proto__.__proto__; value14 = undefined; if (context !== MediaEngineContextTypes.STREAM) { r8 = true; } else { remoteVideoSinkWants = ssrc2.connection.getRemoteVideoSinkWants(ssrc); r7 = value != remoteVideoSinkWants && remoteVideoSinkWants !== 0; r7 = !r7 ? (value == value12 ? value14 : value12.quality) !== env0_7 : r7; r10 = r7 ? remoteVideoSinkWants : ssrc2.connection.getRemoteVideoSinkWants('any'); value21 = 0; r7 = value != r10 ? r10 : value21; r8 = r7 > value21; } r7 = ssrc2.videoStopped.value || !r8; if (r7 !== r4.isVideoStopped) { r4.setVideoStopped(r7, (require(7130) /* metro dependency 7130: VideoQualityStats */).VideoStoppedReasons.SenderStopped); } if (!r7) { outboundStats2 = (require(7130) /* metro dependency 7130: VideoQualityStats */).RawVideoStats.parseOutboundStats(a0, env0_1); if (ssrc2.connection.context === MediaEngineContextTypes.STREAM) { screenshare = require.screenshare; if (value == screenshare) { r7 = outboundStats2.framesCodec; } else { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; if (value != hybridDxgiFramesUnique) { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; value31 = 0; r14 = value != hybridDxgiFramesUnique ? hybridDxgiFramesUnique : value31; hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; r11 = value != hybridGdiBitBltFramesUnique ? hybridGdiBitBltFramesUnique : value31; value32 = r14 + r11; hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; r11 = value != hybridGdiPrintWindowFramesUnique ? hybridGdiPrintWindowFramesUnique : value31; value33 = value32 + r11; hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; r11 = value != hybridVideohookFramesUnique ? hybridVideohookFramesUnique : value31; value34 = value33 + r11; hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; r10 = value34 + (value != hybridGraphicsCaptureFramesUnique ? hybridGraphicsCaptureFramesUnique : value31); } else { hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; if (value != hybridGdiBitBltFramesUnique) { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; value31 = 0; r14 = value != hybridDxgiFramesUnique ? hybridDxgiFramesUnique : value31; hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; r11 = value != hybridGdiBitBltFramesUnique ? hybridGdiBitBltFramesUnique : value31; value32 = r14 + r11; hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; r11 = value != hybridGdiPrintWindowFramesUnique ? hybridGdiPrintWindowFramesUnique : value31; value33 = value32 + r11; hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; r11 = value != hybridVideohookFramesUnique ? hybridVideohookFramesUnique : value31; value34 = value33 + r11; hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; r10 = value34 + (value != hybridGraphicsCaptureFramesUnique ? hybridGraphicsCaptureFramesUnique : value31); } else { hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; if (value != hybridGdiPrintWindowFramesUnique) { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; value31 = 0; r14 = value != hybridDxgiFramesUnique ? hybridDxgiFramesUnique : value31; hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; r11 = value != hybridGdiBitBltFramesUnique ? hybridGdiBitBltFramesUnique : value31; value32 = r14 + r11; hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; r11 = value != hybridGdiPrintWindowFramesUnique ? hybridGdiPrintWindowFramesUnique : value31; value33 = value32 + r11; hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; r11 = value != hybridVideohookFramesUnique ? hybridVideohookFramesUnique : value31; value34 = value33 + r11; hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; r10 = value34 + (value != hybridGraphicsCaptureFramesUnique ? hybridGraphicsCaptureFramesUnique : value31); } else { hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; if (value != hybridVideohookFramesUnique) { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; value31 = 0; r14 = value != hybridDxgiFramesUnique ? hybridDxgiFramesUnique : value31; hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; r11 = value != hybridGdiBitBltFramesUnique ? hybridGdiBitBltFramesUnique : value31; value32 = r14 + r11; hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; r11 = value != hybridGdiPrintWindowFramesUnique ? hybridGdiPrintWindowFramesUnique : value31; value33 = value32 + r11; hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; r11 = value != hybridVideohookFramesUnique ? hybridVideohookFramesUnique : value31; value34 = value33 + r11; hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; r10 = value34 + (value != hybridGraphicsCaptureFramesUnique ? hybridGraphicsCaptureFramesUnique : value31); } else { hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; if (value != hybridGraphicsCaptureFramesUnique) { hybridDxgiFramesUnique = screenshare.hybridDxgiFramesUnique; value31 = 0; r14 = value != hybridDxgiFramesUnique ? hybridDxgiFramesUnique : value31; hybridGdiBitBltFramesUnique = screenshare.hybridGdiBitBltFramesUnique; r11 = value != hybridGdiBitBltFramesUnique ? hybridGdiBitBltFramesUnique : value31; value32 = r14 + r11; hybridGdiPrintWindowFramesUnique = screenshare.hybridGdiPrintWindowFramesUnique; r11 = value != hybridGdiPrintWindowFramesUnique ? hybridGdiPrintWindowFramesUnique : value31; value33 = value32 + r11; hybridVideohookFramesUnique = screenshare.hybridVideohookFramesUnique; r11 = value != hybridVideohookFramesUnique ? hybridVideohookFramesUnique : value31; value34 = value33 + r11; hybridGraphicsCaptureFramesUnique = screenshare.hybridGraphicsCaptureFramesUnique; r10 = value34 + (value != hybridGraphicsCaptureFramesUnique ? hybridGraphicsCaptureFramesUnique : value31); } else { screenshareFrames = screenshare.screenshareFrames; value25 = 0; r12 = value != screenshareFrames ? screenshareFrames : value25; videohookFrames = screenshare.videohookFrames; r10 = value != videohookFrames ? videohookFrames : value25; value26 = r12 + r10; quartzFrames = screenshare.quartzFrames; r10 = value != quartzFrames ? quartzFrames : value25; value27 = value26 + r10; screenCaptureKitFrames = screenshare.screenCaptureKitFrames; r10 = value != screenCaptureKitFrames ? screenCaptureKitFrames : value25; value28 = value27 + r10; x11Frames = screenshare.x11Frames; r10 = value != x11Frames ? x11Frames : value25; value29 = value28 + r10; pipewireFrames = screenshare.pipewireFrames; r10 = value29 + (value != pipewireFrames ? pipewireFrames : value25); } } } } } r7 = r10; } outboundStats2.screenshareFramesUnique = r7; } r4.appendAndIncrementStats(outboundStats2); r7 = value != a0.minResolutionWidth && a0.minResolutionWidth > 0; r7 = r7 && (value == r4.minWidth || a0.minResolutionWidth < r4.minWidth); if (r7) { r4.minWidth = a0.minResolutionWidth; } r7 = value != a0.minResolutionHeight && a0.minResolutionHeight > 0; r7 = r7 && (value == r4.minHeight || a0.minResolutionHeight < r4.minHeight); if (r7) { r4.minHeight = a0.minResolutionHeight; } if (r4.encoderCodec !== (require(7130) /* metro dependency 7130: VideoQualityStats */).CodecTypes.UNKNOWN) { binding = PossibleConstructorReturn; binding.add(r4.encoderCodec); } maxBitrate = value == value12 ? value14 : value12.maxBitrate; appendTargetRates = r4.appendTargetRates; maxFrameRate = value == value12 ? value14 : value12.maxFrameRate; bitrateTarget = a0.bitrateTarget; Reflect.apply(appendTargetRates, r4, [maxFrameRate, value != bitrateTarget ? bitrateTarget : global.Math.min(value != transport.availableOutgoingBitrate ? transport.availableOutgoingBitrate : 0, value != maxBitrate ? maxBitrate : 0), maxBitrate, transport.availableOutgoingBitrate]); averageEncodeTime = a0.averageEncodeTime; r3 = value != averageEncodeTime ? averageEncodeTime : 0; r4.averageEncodeTime = r3; framesDroppedRateLimiter = a0.framesDroppedRateLimiter; r3 = value != framesDroppedRateLimiter ? framesDroppedRateLimiter : value; r4.framesDroppedRateLimiter = r3; framesDroppedEncoderQueue = a0.framesDroppedEncoderQueue; r3 = value != framesDroppedEncoderQueue ? framesDroppedEncoderQueue : value; r4.framesDroppedEncoderQueue = r3; framesDroppedCongestionWindow = a0.framesDroppedCongestionWindow; r3 = value != framesDroppedCongestionWindow ? framesDroppedCongestionWindow : value; r4.framesDroppedCongestionWindow = r3; framesDroppedEncoder = a0.framesDroppedEncoder; r3 = value != framesDroppedEncoder ? framesDroppedEncoder : value; r4.framesDroppedEncoder = r3; hqSimulcastStreamEncoded = ssrc2.hqSimulcastStreamEncoded; hqSimulcastStreamEncoded2 = a0.hqSimulcastStreamEncoded; r3 = value != hqSimulcastStreamEncoded2 && hqSimulcastStreamEncoded2; hqSimulcastStreamEncoded.value = r3; lqSimulcastStreamEncoded = ssrc2.lqSimulcastStreamEncoded; lqSimulcastStreamEncoded2 = a0.lqSimulcastStreamEncoded; r3 = value != lqSimulcastStreamEncoded2 && lqSimulcastStreamEncoded2; lqSimulcastStreamEncoded.value = r3; binding = ssrc2; bothSimulcastStreamsEncoded = binding.bothSimulcastStreamsEncoded; hqSimulcastStreamEncoded = binding.hqSimulcastStreamEncoded; r3 = hqSimulcastStreamEncoded.value && ssrc2.lqSimulcastStreamEncoded.value; bothSimulcastStreamsEncoded.value = r3; bandwidthLimitedResolution = ssrc2.bandwidthLimitedResolution; bandwidthLimitedResolution2 = a0.bandwidthLimitedResolution; r3 = value != bandwidthLimitedResolution2 && bandwidthLimitedResolution2; bandwidthLimitedResolution.value = r3; bandwidthLimitedFramerate = ssrc2.bandwidthLimitedFramerate; bandwidthLimitedFrameRate = a0.bandwidthLimitedFrameRate; value = value != bandwidthLimitedFrameRate; bandwidthLimitedFramerate.value = value && bandwidthLimitedFrameRate; } } } function _fun94651(a0, a1) { // fn#94651, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:25833, offset: 0x021225b5, size: 543 bytes, params: 3, frame: 25 var environment; var r1; var r4; var inboundStats; var property; var value3; var InboundStats; var binding; var timestampProducer; var value6; var inboundStats2; var statCollectionPausedUsers; const value = a0.find(function(a0) { return a0.type === 'video'; }); if (value != null) { inboundStats = env0_0.inboundStats; property = inboundStats[a1]; if (property != null) { r1 = property; } else { value3 = environment.__proto__.__proto__; InboundStats = (require(7130) /* metro dependency 7130: VideoQualityStats */).InboundStats; binding = env0_0; timestampProducer = binding.timestampProducer; inboundStats = new InboundStats(); inboundStats = binding.inboundStats; inboundStats[a1] = inboundStats; r1 = inboundStats; } value6 = environment.__proto__.__proto__; inboundStats2 = (require(7130) /* metro dependency 7130: VideoQualityStats */).RawVideoStats.parseInboundStats(value, env0_1); statCollectionPausedUsers = env0_0.statCollectionPausedUsers; if (!statCollectionPausedUsers.has(a1)) { r1.appendAndIncrementStats(inboundStats2); r1.appendTransportStats(transport); } r4 = value.minResolutionWidth != null && value.minResolutionWidth > 0; r4 = r4 && (r1.minWidth == null || value.minResolutionWidth < r1.minWidth); if (r4) { r1.minWidth = value.minResolutionWidth; } r4 = value.minResolutionHeight != null && value.minResolutionHeight > 0; r4 = r4 && (r1.minHeight == null || value.minResolutionHeight < r1.minHeight); if (r4) { r1.minHeight = value.minResolutionHeight; } if (inboundStats2.packets > 0) { binding = env0_0; binding.emit(env2_8.FpsUpdate, a1, inboundStats2.framesCodec, inboundStats2.timestamp); } if (r1.decoderCodec !== (require(7130) /* metro dependency 7130: VideoQualityStats */).CodecTypes.UNKNOWN) { binding = Module00017; binding.add(r1.decoderCodec); } if (r1.timeToFirstFrame == null && value.framesDecoded > 0) { r1.timeToFirstFrame = env0_1 - r1.startTime; } } } } function value_94654(a0) { // fn#94654, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:27003, offset: 0x0212283b, size: 99 bytes, params: 2, frame: 14 const value = undefined; const r3 = a0 == null ? value : a0.rtp.outbound.find(function(a0) { return a0.type === 'video'; }); this.videoEffectDuration.value = (r3 == null ? value : r3.type) === 'video' && r3.filter != null; return value; } } } function value_94635() { // fn#94635, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:7672, offset: 0x02120013, size: 137 bytes, params: 1, frame: 15 const object = {}; let Math = global.Math; let round = Math.round; const cameraDuration = this.cameraDuration; object.camera_enabled_duration = Reflect.apply(round, Math, [cameraDuration.totalDurationSeconds()]); Math = global.Math; round = Math.round; const cameraOpportunityDuration = this.cameraOpportunityDuration; object.camera_send_opportunity_duration = Reflect.apply(round, Math, [cameraOpportunityDuration.totalDurationSeconds()]); Math = global.Math; round = Math.round; const cameraSendDuration = this.cameraSendDuration; object.camera_send_duration = Reflect.apply(round, Math, [cameraSendDuration.totalDurationSeconds()]); object.num_camera_on_toggles = this.cameraToggles; return object; } function _fun94655({type}) { // fn#94655, source: /ci/build/discord/discord/discord_android_rn/android/app/src/main/assets/index.android.bundle:12592:27057, offset: 0x01095e97, size: 18 bytes, params: 2, frame: 2 return type === 'video'; } global.__d(_fun94603, 12406, [6, 7, 15, 17, 18, 4303, 12403, 7131, 4406, 7130, 22, 21, 477, 1421, 4479, 2]) /* metro module 12406, dependencies: [6, 7, 15, 17, 18, 4303, 12403, 7131, 4406, 7130, 22, 21, 477, 1421, 4479, 2] */;