discord-jadx/app/src/main/java/com/discord/widgets/chat/list/InlineMediaView.java

587 lines
26 KiB
Java

package com.discord.widgets.chat.list;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import androidx.cardview.widget.CardView;
import c.a.p.i;
import c.c.a.a0.d;
import c.d.b.a.a;
import com.discord.api.message.attachment.MessageAttachment;
import com.discord.api.message.attachment.MessageAttachmentType;
import com.discord.api.message.embed.EmbedType;
import com.discord.api.message.embed.EmbedVideo;
import com.discord.api.message.embed.MessageEmbed;
import com.discord.app.AppComponent;
import com.discord.databinding.InlineMediaViewBinding;
import com.discord.embed.RenderableEmbedMedia;
import com.discord.player.AppMediaPlayer;
import com.discord.player.MediaSource;
import com.discord.player.MediaType;
import com.discord.stores.StoreStream;
import com.discord.stores.StoreUserSettings;
import com.discord.utilities.embed.EmbedResourceUtils;
import com.discord.utilities.images.MGImages;
import com.discord.utilities.rx.ObservableExtensionsKt;
import com.facebook.drawee.view.SimpleDraweeView;
import com.google.android.exoplayer2.ui.PlayerView;
import d0.z.d.m;
import kotlin.NoWhenBranchMatchedException;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.internal.DefaultConstructorMarker;
import rx.Observable;
import rx.subjects.PublishSubject;
import rx.subjects.Subject;
import rx.subscriptions.CompositeSubscription;
/* compiled from: InlineMediaView.kt */
public final class InlineMediaView extends CardView implements View.OnAttachStateChangeListener, AppComponent {
private AppMediaPlayer appMediaPlayer;
private final InlineMediaViewBinding binding;
private CompositeSubscription compositeSubscription;
private String featureTag;
private final StoreUserSettings storeUserSettings;
private final Subject<Void, Void> unsubscribeSignal;
private ViewParams viewParams;
/* compiled from: InlineMediaView.kt */
public static final class ViewParams {
private final boolean autoPlayGifs;
private final EmbedType embedType;
private final RenderableEmbedMedia previewImage;
private final String progressiveMediaUri;
private final Integer targetHeight;
private final Integer targetWidth;
public ViewParams(RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, boolean z2) {
this.previewImage = renderableEmbedMedia;
this.progressiveMediaUri = str;
this.embedType = embedType;
this.targetWidth = num;
this.targetHeight = num2;
this.autoPlayGifs = z2;
}
public static /* synthetic */ ViewParams copy$default(ViewParams viewParams, RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, boolean z2, int i, Object obj) {
if ((i & 1) != 0) {
renderableEmbedMedia = viewParams.previewImage;
}
if ((i & 2) != 0) {
str = viewParams.progressiveMediaUri;
}
if ((i & 4) != 0) {
embedType = viewParams.embedType;
}
if ((i & 8) != 0) {
num = viewParams.targetWidth;
}
if ((i & 16) != 0) {
num2 = viewParams.targetHeight;
}
if ((i & 32) != 0) {
z2 = viewParams.autoPlayGifs;
}
return viewParams.copy(renderableEmbedMedia, str, embedType, num, num2, z2);
}
public final RenderableEmbedMedia component1() {
return this.previewImage;
}
public final String component2() {
return this.progressiveMediaUri;
}
public final EmbedType component3() {
return this.embedType;
}
public final Integer component4() {
return this.targetWidth;
}
public final Integer component5() {
return this.targetHeight;
}
public final boolean component6() {
return this.autoPlayGifs;
}
public final ViewParams copy(RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, boolean z2) {
return new ViewParams(renderableEmbedMedia, str, embedType, num, num2, z2);
}
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (!(obj instanceof ViewParams)) {
return false;
}
ViewParams viewParams = (ViewParams) obj;
return m.areEqual(this.previewImage, viewParams.previewImage) && m.areEqual(this.progressiveMediaUri, viewParams.progressiveMediaUri) && m.areEqual(this.embedType, viewParams.embedType) && m.areEqual(this.targetWidth, viewParams.targetWidth) && m.areEqual(this.targetHeight, viewParams.targetHeight) && this.autoPlayGifs == viewParams.autoPlayGifs;
}
public final boolean getAutoPlayGifs() {
return this.autoPlayGifs;
}
public final EmbedType getEmbedType() {
return this.embedType;
}
public final RenderableEmbedMedia getPreviewImage() {
return this.previewImage;
}
public final String getProgressiveMediaUri() {
return this.progressiveMediaUri;
}
public final Integer getTargetHeight() {
return this.targetHeight;
}
public final Integer getTargetWidth() {
return this.targetWidth;
}
public int hashCode() {
RenderableEmbedMedia renderableEmbedMedia = this.previewImage;
int i = 0;
int hashCode = (renderableEmbedMedia != null ? renderableEmbedMedia.hashCode() : 0) * 31;
String str = this.progressiveMediaUri;
int hashCode2 = (hashCode + (str != null ? str.hashCode() : 0)) * 31;
EmbedType embedType = this.embedType;
int hashCode3 = (hashCode2 + (embedType != null ? embedType.hashCode() : 0)) * 31;
Integer num = this.targetWidth;
int hashCode4 = (hashCode3 + (num != null ? num.hashCode() : 0)) * 31;
Integer num2 = this.targetHeight;
if (num2 != null) {
i = num2.hashCode();
}
int i2 = (hashCode4 + i) * 31;
boolean z2 = this.autoPlayGifs;
if (z2) {
z2 = true;
}
int i3 = z2 ? 1 : 0;
int i4 = z2 ? 1 : 0;
int i5 = z2 ? 1 : 0;
return i2 + i3;
}
public String toString() {
StringBuilder R = a.R("ViewParams(previewImage=");
R.append(this.previewImage);
R.append(", progressiveMediaUri=");
R.append(this.progressiveMediaUri);
R.append(", embedType=");
R.append(this.embedType);
R.append(", targetWidth=");
R.append(this.targetWidth);
R.append(", targetHeight=");
R.append(this.targetHeight);
R.append(", autoPlayGifs=");
return a.L(R, this.autoPlayGifs, ")");
}
}
public final /* synthetic */ class WhenMappings {
public static final /* synthetic */ int[] $EnumSwitchMapping$0;
static {
MessageAttachmentType.values();
int[] iArr = new int[3];
$EnumSwitchMapping$0 = iArr;
iArr[MessageAttachmentType.VIDEO.ordinal()] = 1;
iArr[MessageAttachmentType.IMAGE.ordinal()] = 2;
iArr[MessageAttachmentType.FILE.ordinal()] = 3;
}
}
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
public InlineMediaView(Context context) {
super(context);
m.checkNotNullParameter(context, "context");
InlineMediaViewBinding a = InlineMediaViewBinding.a(LayoutInflater.from(getContext()), this);
m.checkNotNullExpressionValue(a, "InlineMediaViewBinding.i…ater.from(context), this)");
this.binding = a;
this.storeUserSettings = StoreStream.Companion.getUserSettings();
this.featureTag = "";
this.compositeSubscription = new CompositeSubscription();
addOnAttachStateChangeListener(this);
PublishSubject k0 = PublishSubject.k0();
m.checkNotNullExpressionValue(k0, "PublishSubject.create()");
this.unsubscribeSignal = k0;
}
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
public InlineMediaView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
m.checkNotNullParameter(context, "context");
InlineMediaViewBinding a = InlineMediaViewBinding.a(LayoutInflater.from(getContext()), this);
m.checkNotNullExpressionValue(a, "InlineMediaViewBinding.i…ater.from(context), this)");
this.binding = a;
this.storeUserSettings = StoreStream.Companion.getUserSettings();
this.featureTag = "";
this.compositeSubscription = new CompositeSubscription();
addOnAttachStateChangeListener(this);
PublishSubject k0 = PublishSubject.k0();
m.checkNotNullExpressionValue(k0, "PublishSubject.create()");
this.unsubscribeSignal = k0;
}
/* JADX INFO: super call moved to the top of the method (can break code semantics) */
public InlineMediaView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
m.checkNotNullParameter(context, "context");
InlineMediaViewBinding a = InlineMediaViewBinding.a(LayoutInflater.from(getContext()), this);
m.checkNotNullExpressionValue(a, "InlineMediaViewBinding.i…ater.from(context), this)");
this.binding = a;
this.storeUserSettings = StoreStream.Companion.getUserSettings();
this.featureTag = "";
this.compositeSubscription = new CompositeSubscription();
addOnAttachStateChangeListener(this);
PublishSubject k0 = PublishSubject.k0();
m.checkNotNullExpressionValue(k0, "PublishSubject.create()");
this.unsubscribeSignal = k0;
}
/* JADX INFO: this call moved to the top of the method (can break code semantics) */
public /* synthetic */ InlineMediaView(Context context, AttributeSet attributeSet, int i, int i2, DefaultConstructorMarker defaultConstructorMarker) {
this(context, (i2 & 2) != 0 ? null : attributeSet, (i2 & 4) != 0 ? 0 : i);
}
/* JADX INFO: this call moved to the top of the method (can break code semantics) */
public /* synthetic */ InlineMediaView(Context context, AttributeSet attributeSet, int i, DefaultConstructorMarker defaultConstructorMarker) {
this(context, (i & 2) != 0 ? null : attributeSet);
}
public static final /* synthetic */ AppMediaPlayer access$getAppMediaPlayer$p(InlineMediaView inlineMediaView) {
return inlineMediaView.appMediaPlayer;
}
public static final /* synthetic */ InlineMediaViewBinding access$getBinding$p(InlineMediaView inlineMediaView) {
return inlineMediaView.binding;
}
public static final /* synthetic */ CompositeSubscription access$getCompositeSubscription$p(InlineMediaView inlineMediaView) {
return inlineMediaView.compositeSubscription;
}
public static final /* synthetic */ void access$handlePlayerEvent(InlineMediaView inlineMediaView, AppMediaPlayer.Event event) {
inlineMediaView.handlePlayerEvent(event);
}
public static final /* synthetic */ void access$setAppMediaPlayer$p(InlineMediaView inlineMediaView, AppMediaPlayer appMediaPlayer) {
inlineMediaView.appMediaPlayer = appMediaPlayer;
}
public static final /* synthetic */ void access$setCompositeSubscription$p(InlineMediaView inlineMediaView, CompositeSubscription compositeSubscription) {
inlineMediaView.compositeSubscription = compositeSubscription;
}
private final void clearPlayerAndSubscriptions() {
releasePlayer();
getUnsubscribeSignal().onNext(null);
}
private final void diffViewParamsAndUpdateEmbed(RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, String str2, boolean z2) {
Integer num3;
Integer num4;
Integer num5 = null;
if (num != null) {
num3 = num;
} else {
ViewParams viewParams = this.viewParams;
num3 = viewParams != null ? viewParams.getTargetWidth() : null;
}
if (num2 != null) {
num4 = num2;
} else {
ViewParams viewParams2 = this.viewParams;
if (viewParams2 != null) {
num5 = viewParams2.getTargetHeight();
}
num4 = num5;
}
ViewParams viewParams3 = new ViewParams(renderableEmbedMedia, str, embedType, num3, num4, z2);
if (!m.areEqual(viewParams3, this.viewParams)) {
this.viewParams = viewParams3;
updateUI(renderableEmbedMedia, str, embedType, num, num2, str2);
}
}
public static /* synthetic */ void diffViewParamsAndUpdateEmbed$default(InlineMediaView inlineMediaView, RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, String str2, boolean z2, int i, Object obj) {
inlineMediaView.diffViewParamsAndUpdateEmbed(renderableEmbedMedia, str, embedType, (i & 8) != 0 ? null : num, (i & 16) != 0 ? null : num2, str2, z2);
}
private final void handlePlayerEvent(AppMediaPlayer.Event event) {
boolean z2 = true;
int i = 0;
if (m.areEqual(event, AppMediaPlayer.Event.a.a)) {
SimpleDraweeView simpleDraweeView = this.binding.f1674c;
m.checkNotNullExpressionValue(simpleDraweeView, "binding.inlineMediaImagePreview");
if (!(!shouldAutoPlay())) {
i = 8;
}
simpleDraweeView.setVisibility(i);
ProgressBar progressBar = this.binding.d;
m.checkNotNullExpressionValue(progressBar, "binding.inlineMediaLoadingIndicator");
progressBar.setVisibility(8);
} else if (m.areEqual(event, AppMediaPlayer.Event.f.a)) {
ViewParams viewParams = this.viewParams;
EmbedType embedType = viewParams != null ? viewParams.getEmbedType() : null;
ImageView imageView = this.binding.g;
m.checkNotNullExpressionValue(imageView, "binding.inlineMediaVolumeToggle");
if (!(embedType == EmbedType.VIDEO || embedType == null)) {
z2 = false;
}
if (!z2) {
i = 8;
}
imageView.setVisibility(i);
} else if (m.areEqual(event, AppMediaPlayer.Event.e.a)) {
resetCurrentEmbed();
}
}
private final void releasePlayer() {
AppMediaPlayer appMediaPlayer = this.appMediaPlayer;
if (appMediaPlayer != null) {
appMediaPlayer.c();
}
this.appMediaPlayer = null;
}
private final void resetCurrentEmbed() {
ViewParams viewParams = this.viewParams;
if (viewParams != null) {
updateUI(viewParams.getPreviewImage(), viewParams.getProgressiveMediaUri(), viewParams.getEmbedType(), viewParams.getTargetWidth(), viewParams.getTargetHeight(), this.featureTag);
}
}
private final void resetViews() {
ViewParams viewParams = this.viewParams;
if (viewParams != null) {
SimpleDraweeView simpleDraweeView = this.binding.f1674c;
m.checkNotNullExpressionValue(simpleDraweeView, "binding.inlineMediaImagePreview");
int i = 0;
simpleDraweeView.setVisibility(0);
ImageView imageView = this.binding.b;
m.checkNotNullExpressionValue(imageView, "binding.inlineMediaGifIndicator");
boolean z2 = true;
imageView.setVisibility(shouldAutoPlay() ^ true ? 0 : 8);
PlayerView playerView = this.binding.f;
m.checkNotNullExpressionValue(playerView, "binding.inlineMediaPlayerView");
playerView.setVisibility(8);
ImageView imageView2 = this.binding.g;
m.checkNotNullExpressionValue(imageView2, "binding.inlineMediaVolumeToggle");
imageView2.setVisibility(8);
ImageView imageView3 = this.binding.e;
m.checkNotNullExpressionValue(imageView3, "binding.inlineMediaPlayButton");
if (viewParams.getEmbedType() != EmbedType.VIDEO) {
z2 = false;
}
if (!z2) {
i = 8;
}
imageView3.setVisibility(i);
ProgressBar progressBar = this.binding.d;
m.checkNotNullExpressionValue(progressBar, "binding.inlineMediaLoadingIndicator");
progressBar.setVisibility(8);
ImageView imageView4 = this.binding.g;
m.checkNotNullExpressionValue(imageView4, "binding.inlineMediaVolumeToggle");
imageView4.setVisibility(8);
}
}
private final boolean shouldAutoPlay() {
ViewParams viewParams = this.viewParams;
String str = null;
if ((viewParams != null ? viewParams.getEmbedType() : null) == EmbedType.GIFV && Build.VERSION.SDK_INT > 30) {
return false;
}
EmbedResourceUtils embedResourceUtils = EmbedResourceUtils.INSTANCE;
ViewParams viewParams2 = this.viewParams;
EmbedType embedType = viewParams2 != null ? viewParams2.getEmbedType() : null;
ViewParams viewParams3 = this.viewParams;
if (viewParams3 != null) {
str = viewParams3.getProgressiveMediaUri();
}
if (!embedResourceUtils.isAnimated(embedType, str)) {
return true;
}
ViewParams viewParams4 = this.viewParams;
return viewParams4 != null ? viewParams4.getAutoPlayGifs() : this.storeUserSettings.getIsAutoPlayGifsEnabled();
}
private final void updateUI(RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, String str2) {
resetViews();
this.compositeSubscription.unsubscribe();
if (!(num == null || num2 == null)) {
ViewGroup.LayoutParams layoutParams = getLayoutParams();
if (!(layoutParams.width == num.intValue() && layoutParams.height == num2.intValue())) {
layoutParams.width = num.intValue();
layoutParams.height = num2.intValue();
requestLayout();
}
if ((renderableEmbedMedia != null ? renderableEmbedMedia.a : null) != null) {
SimpleDraweeView simpleDraweeView = this.binding.f1674c;
m.checkNotNullExpressionValue(simpleDraweeView, "binding.inlineMediaImagePreview");
MGImages.setImage$default(simpleDraweeView, EmbedResourceUtils.INSTANCE.getPreviewUrls(renderableEmbedMedia.a, num.intValue(), num2.intValue(), shouldAutoPlay()), 0, 0, false, null, null, null, 252, null);
}
}
if (str != null) {
AppMediaPlayer appMediaPlayer = this.appMediaPlayer;
if (appMediaPlayer == null) {
Context context = getContext();
m.checkNotNullExpressionValue(context, "context");
appMediaPlayer = i.a(context);
}
this.appMediaPlayer = appMediaPlayer;
PlayerView playerView = this.binding.f;
m.checkNotNullExpressionValue(playerView, "binding.inlineMediaPlayerView");
int i = 8;
playerView.setVisibility(shouldAutoPlay() ? 0 : 8);
ImageView imageView = this.binding.b;
m.checkNotNullExpressionValue(imageView, "binding.inlineMediaGifIndicator");
if (!shouldAutoPlay()) {
i = 0;
}
imageView.setVisibility(i);
m.checkNotNullParameter(str, "progressiveMediaUri");
m.checkNotNullParameter(str2, "featureTag");
EmbedType embedType2 = EmbedType.GIFV;
MediaSource O = d.O(embedType == embedType2 ? MediaType.GIFV : MediaType.VIDEO, str, str2);
this.compositeSubscription = new CompositeSubscription();
ObservableExtensionsKt.appSubscribe$default(ObservableExtensionsKt.ui$default(appMediaPlayer.d, this, null, 2, null), InlineMediaView.class, (Context) null, new InlineMediaView$updateUI$1(this), (Function1) null, (Function0) null, (Function0) null, new InlineMediaView$updateUI$2(this, appMediaPlayer), 58, (Object) null);
Observable<AppMediaPlayer.Event> J = appMediaPlayer.a.J();
m.checkNotNullExpressionValue(J, "eventSubject.onBackpressureBuffer()");
ObservableExtensionsKt.appSubscribe$default(ObservableExtensionsKt.ui$default(J, this, null, 2, null), InlineMediaView.class, (Context) null, new InlineMediaView$updateUI$3(this), (Function1) null, (Function0) null, (Function0) null, new InlineMediaView$updateUI$4(this), 58, (Object) null);
if (embedType == embedType2) {
boolean shouldAutoPlay = shouldAutoPlay();
PlayerView playerView2 = this.binding.f;
m.checkNotNullExpressionValue(playerView2, "binding.inlineMediaPlayerView");
AppMediaPlayer.b(appMediaPlayer, O, shouldAutoPlay, true, 0, playerView2, null, 40);
appMediaPlayer.d(0.0f);
} else {
appMediaPlayer.d(1.0f);
}
this.binding.e.setOnClickListener(new InlineMediaView$updateUI$5(this, O));
}
}
public static /* synthetic */ void updateUI$default(InlineMediaView inlineMediaView, RenderableEmbedMedia renderableEmbedMedia, String str, EmbedType embedType, Integer num, Integer num2, String str2, int i, Object obj) {
inlineMediaView.updateUI(renderableEmbedMedia, str, embedType, (i & 8) != 0 ? null : num, (i & 16) != 0 ? null : num2, str2);
}
public static /* synthetic */ void updateUIWithAttachment$default(InlineMediaView inlineMediaView, MessageAttachment messageAttachment, Integer num, Integer num2, boolean z2, int i, Object obj) {
if ((i & 2) != 0) {
num = null;
}
if ((i & 4) != 0) {
num2 = null;
}
inlineMediaView.updateUIWithAttachment(messageAttachment, num, num2, z2);
}
public static /* synthetic */ void updateUIWithEmbed$default(InlineMediaView inlineMediaView, MessageEmbed messageEmbed, Integer num, Integer num2, boolean z2, int i, Object obj) {
if ((i & 2) != 0) {
num = null;
}
if ((i & 4) != 0) {
num2 = null;
}
inlineMediaView.updateUIWithEmbed(messageEmbed, num, num2, z2);
}
@Override // com.discord.app.AppComponent
public Subject<Void, Void> getUnsubscribeSignal() {
return this.unsubscribeSignal;
}
public final void onPause() {
clearPlayerAndSubscriptions();
}
public final void onResume() {
resetCurrentEmbed();
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewAttachedToWindow(View view) {
m.checkNotNullParameter(view, "view");
resetCurrentEmbed();
}
@Override // android.view.View.OnAttachStateChangeListener
public void onViewDetachedFromWindow(View view) {
m.checkNotNullParameter(view, "view");
clearPlayerAndSubscriptions();
}
@Override // android.view.View
public void onVisibilityChanged(View view, int i) {
m.checkNotNullParameter(view, "changedView");
super.onVisibilityChanged(view, i);
if (i == 0) {
resetCurrentEmbed();
} else {
clearPlayerAndSubscriptions();
}
}
public final void updateUIWithAttachment(MessageAttachment messageAttachment, Integer num, Integer num2, boolean z2) {
EmbedType embedType;
m.checkNotNullParameter(messageAttachment, "attachment");
MessageAttachmentType e = messageAttachment.e();
boolean z3 = false;
if ((e == MessageAttachmentType.IMAGE || e == MessageAttachmentType.VIDEO) && this.storeUserSettings.getIsAttachmentMediaInline()) {
RenderableEmbedMedia createRenderableEmbedMediaFromAttachment = EmbedResourceUtils.INSTANCE.createRenderableEmbedMediaFromAttachment(messageAttachment);
this.featureTag = InlineMediaView.class.getSimpleName() + ": attachment";
if (messageAttachment.e() == MessageAttachmentType.VIDEO) {
z3 = true;
}
String c2 = z3 ? messageAttachment.c() : null;
int ordinal = e.ordinal();
if (ordinal == 0) {
embedType = EmbedType.VIDEO;
} else if (ordinal == 1) {
embedType = EmbedType.IMAGE;
} else if (ordinal == 2) {
embedType = EmbedType.FILE;
} else {
throw new NoWhenBranchMatchedException();
}
diffViewParamsAndUpdateEmbed(createRenderableEmbedMediaFromAttachment, c2, embedType, num, num2, this.featureTag, z2);
}
}
public final void updateUIWithEmbed(MessageEmbed messageEmbed, Integer num, Integer num2, boolean z2) {
String str;
m.checkNotNullParameter(messageEmbed, "embed");
EmbedResourceUtils embedResourceUtils = EmbedResourceUtils.INSTANCE;
boolean z3 = true;
if (!(embedResourceUtils.getPreviewImage(messageEmbed) != null) || !this.storeUserSettings.getIsEmbedMediaInlined() || !this.storeUserSettings.getIsRenderEmbedsEnabled()) {
z3 = false;
}
if (z3) {
this.featureTag = InlineMediaView.class.getSimpleName() + ": embed";
EmbedVideo m = messageEmbed.m();
if (m == null || (str = m.b()) == null) {
EmbedVideo m2 = messageEmbed.m();
str = m2 != null ? m2.c() : null;
}
diffViewParamsAndUpdateEmbed(embedResourceUtils.getPreviewImage(messageEmbed), str, messageEmbed.k(), num, num2, this.featureTag, z2);
}
}
}