apkfuckery/com.discord/smali_classes2/kotlinx/coroutines/ao.smali

378 lines
9.7 KiB
Smali
Raw Normal View History

2019-10-03 02:31:26 +00:00
.class public final Lkotlinx/coroutines/ao;
.super Lkotlinx/coroutines/ar;
2019-08-17 08:22:04 +00:00
.source "Dispatched.kt"
2019-07-24 11:27:29 +00:00
2019-10-03 02:31:26 +00:00
# interfaces
.implements Lkotlin/coroutines/Continuation;
.implements Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-07-24 11:27:29 +00:00
2019-08-17 08:22:04 +00:00
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"<T:",
"Ljava/lang/Object;",
">",
2019-10-03 02:31:26 +00:00
"Lkotlinx/coroutines/ar<",
"TT;>;",
"Lkotlin/coroutines/Continuation<",
"TT;>;",
"Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;"
2019-08-17 08:22:04 +00:00
}
.end annotation
2019-07-24 11:27:29 +00:00
2019-08-17 08:22:04 +00:00
# instance fields
2019-10-03 02:31:26 +00:00
.field public _state:Ljava/lang/Object;
2019-07-24 11:27:29 +00:00
2019-10-11 21:55:41 +00:00
.field private final bjP:Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-07-24 11:27:29 +00:00
2019-10-11 21:55:41 +00:00
.field public final bjQ:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
.field public final bjR:Lkotlinx/coroutines/ab;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
.field public final bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
.annotation system Ldalvik/annotation/Signature;
value = {
"Lkotlin/coroutines/Continuation<",
"TT;>;"
}
.end annotation
2019-10-03 02:31:26 +00:00
.end field
2019-07-24 11:27:29 +00:00
2019-10-03 02:31:26 +00:00
# direct methods
.method public constructor <init>(Lkotlinx/coroutines/ab;Lkotlin/coroutines/Continuation;)V
.locals 1
2019-08-17 08:22:04 +00:00
.annotation system Ldalvik/annotation/Signature;
value = {
2019-10-03 02:31:26 +00:00
"(",
"Lkotlinx/coroutines/ab;",
"Lkotlin/coroutines/Continuation<",
"-TT;>;)V"
2019-08-17 08:22:04 +00:00
}
.end annotation
2019-10-03 02:31:26 +00:00
const-string v0, "dispatcher"
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-static {p1, v0}, Lkotlin/jvm/internal/l;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const-string v0, "continuation"
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-static {p2, v0}, Lkotlin/jvm/internal/l;->checkParameterIsNotNull(Ljava/lang/Object;Ljava/lang/String;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v0, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-direct {p0, v0}, Lkotlinx/coroutines/ar;-><init>(I)V
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iput-object p1, p0, Lkotlinx/coroutines/ao;->bjR:Lkotlinx/coroutines/ab;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iput-object p2, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
invoke-static {}, Lkotlinx/coroutines/aq;->DC()Lkotlinx/coroutines/internal/v;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object p1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
iput-object p1, p0, Lkotlinx/coroutines/ao;->_state:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object p1, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
instance-of p2, p1, Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
if-nez p2, :cond_0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 p1, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_0
check-cast p1, Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iput-object p1, p0, Lkotlinx/coroutines/ao;->bjP:Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {p0}, Lkotlinx/coroutines/ao;->getContext()Lkotlin/coroutines/CoroutineContext;
2019-08-17 08:22:04 +00:00
move-result-object p1
2019-10-03 02:31:26 +00:00
invoke-static {p1}, Lkotlinx/coroutines/internal/z;->d(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
move-result-object p1
2019-07-24 11:27:29 +00:00
2019-10-11 21:55:41 +00:00
iput-object p1, p0, Lkotlinx/coroutines/ao;->bjQ:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
return-void
2019-07-24 11:27:29 +00:00
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
# virtual methods
2019-10-11 21:55:41 +00:00
.method public final Dk()Ljava/lang/Object;
2019-10-03 02:31:26 +00:00
.locals 2
iget-object v0, p0, Lkotlinx/coroutines/ao;->_state:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
invoke-static {}, Lkotlinx/coroutines/aq;->DC()Lkotlinx/coroutines/internal/v;
2019-08-17 08:22:04 +00:00
2019-08-30 20:04:20 +00:00
move-result-object v1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
if-eq v0, v1, :cond_0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v1, 0x1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
goto :goto_0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_0
const/4 v1, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:goto_0
if-eqz v1, :cond_1
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
invoke-static {}, Lkotlinx/coroutines/aq;->DC()Lkotlinx/coroutines/internal/v;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
iput-object v1, p0, Lkotlinx/coroutines/ao;->_state:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-object v0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_1
new-instance v0, Ljava/lang/IllegalStateException;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const-string v1, "Check failed."
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v1}, Ljava/lang/Object;->toString()Ljava/lang/String;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
2019-08-30 20:04:20 +00:00
2019-10-03 02:31:26 +00:00
check-cast v0, Ljava/lang/Throwable;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
throw v0
.end method
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
.method public final Do()Lkotlin/coroutines/Continuation;
2019-10-03 02:31:26 +00:00
.locals 1
.annotation system Ldalvik/annotation/Signature;
value = {
"()",
"Lkotlin/coroutines/Continuation<",
"TT;>;"
}
.end annotation
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-object v0, p0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
check-cast v0, Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-object v0
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
.method public final getCallerFrame()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
.locals 1
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v0, p0, Lkotlinx/coroutines/ao;->bjP:Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-object v0
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
.method public final getContext()Lkotlin/coroutines/CoroutineContext;
.locals 1
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v0, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-interface {v0}, Lkotlin/coroutines/Continuation;->getContext()Lkotlin/coroutines/CoroutineContext;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-object v0
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
.method public final getStackTraceElement()Ljava/lang/StackTraceElement;
.locals 1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v0, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-object v0
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
.method public final resumeWith(Ljava/lang/Object;)V
.locals 6
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v0, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-interface {v0}, Lkotlin/coroutines/Continuation;->getContext()Lkotlin/coroutines/CoroutineContext;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v0
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-static {p1}, Lkotlinx/coroutines/u;->aS(Ljava/lang/Object;)Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v1
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v2, p0, Lkotlinx/coroutines/ao;->bjR:Lkotlinx/coroutines/ab;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v2, v0}, Lkotlinx/coroutines/ab;->b(Lkotlin/coroutines/CoroutineContext;)Z
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result v2
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v3, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
if-eqz v2, :cond_0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
iput-object v1, p0, Lkotlinx/coroutines/ao;->_state:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iput v3, p0, Lkotlinx/coroutines/ao;->bjU:I
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object p1, p0, Lkotlinx/coroutines/ao;->bjR:Lkotlinx/coroutines/ab;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-object v1, p0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
check-cast v1, Ljava/lang/Runnable;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {p1, v0, v1}, Lkotlinx/coroutines/ab;->a(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-void
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_0
2019-10-11 21:55:41 +00:00
sget-object v0, Lkotlinx/coroutines/ca;->bkJ:Lkotlinx/coroutines/ca;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
invoke-static {}, Lkotlinx/coroutines/ca;->Eg()Lkotlinx/coroutines/aw;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v0
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
invoke-virtual {v0}, Lkotlinx/coroutines/aw;->DK()Z
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result v2
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
if-eqz v2, :cond_1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
iput-object v1, p0, Lkotlinx/coroutines/ao;->_state:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iput v3, p0, Lkotlinx/coroutines/ao;->bjU:I
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-object p1, p0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
check-cast p1, Lkotlinx/coroutines/ar;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v0, p1}, Lkotlinx/coroutines/aw;->a(Lkotlinx/coroutines/ar;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-void
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_1
move-object v1, p0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
check-cast v1, Lkotlinx/coroutines/ar;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v2, 0x1
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-virtual {v0, v2}, Lkotlinx/coroutines/aw;->V(Z)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:try_start_0
invoke-virtual {p0}, Lkotlinx/coroutines/ao;->getContext()Lkotlin/coroutines/CoroutineContext;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v3
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v4, p0, Lkotlinx/coroutines/ao;->bjQ:Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-static {v3, v4}, Lkotlinx/coroutines/internal/z;->b(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v4
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:try_start_1
2019-10-11 21:55:41 +00:00
iget-object v5, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-interface {v5, p1}, Lkotlin/coroutines/Continuation;->resumeWith(Ljava/lang/Object;)V
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
sget-object p1, Lkotlin/Unit;->bgo:Lkotlin/Unit;
2019-10-03 02:31:26 +00:00
:try_end_1
.catchall {:try_start_1 .. :try_end_1} :catchall_0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:try_start_2
invoke-static {v3, v4}, Lkotlinx/coroutines/internal/z;->a(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:cond_2
2019-10-11 21:55:41 +00:00
invoke-virtual {v0}, Lkotlinx/coroutines/aw;->DJ()Z
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result p1
:try_end_2
.catchall {:try_start_2 .. :try_end_2} :catchall_1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
if-nez p1, :cond_2
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-virtual {v0, v2}, Lkotlinx/coroutines/aw;->W(Z)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
return-void
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:catchall_0
move-exception p1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:try_start_3
invoke-static {v3, v4}, Lkotlinx/coroutines/internal/z;->a(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
throw p1
:try_end_3
.catchall {:try_start_3 .. :try_end_3} :catchall_1
:catchall_1
move-exception p1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const/4 v3, 0x0
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:try_start_4
2019-10-09 23:16:36 +00:00
invoke-virtual {v1, p1, v3}, Lkotlinx/coroutines/ar;->c(Ljava/lang/Throwable;Ljava/lang/Throwable;)V
2019-08-17 08:22:04 +00:00
:try_end_4
2019-08-30 20:04:20 +00:00
.catchall {:try_start_4 .. :try_end_4} :catchall_2
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-virtual {v0, v2}, Lkotlinx/coroutines/aw;->W(Z)V
2019-10-03 02:31:26 +00:00
return-void
2019-08-30 20:04:20 +00:00
:catchall_2
2019-10-03 02:31:26 +00:00
move-exception p1
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-virtual {v0, v2}, Lkotlinx/coroutines/aw;->W(Z)V
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
goto :goto_1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:goto_0
throw p1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
:goto_1
goto :goto_0
.end method
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
.method public final toString()Ljava/lang/String;
.locals 2
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
new-instance v0, Ljava/lang/StringBuilder;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const-string v1, "DispatchedContinuation["
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-direct {v0, v1}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v1, p0, Lkotlinx/coroutines/ao;->bjR:Lkotlinx/coroutines/ab;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
const-string v1, ", "
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
2019-08-17 08:22:04 +00:00
2019-10-11 21:55:41 +00:00
iget-object v1, p0, Lkotlinx/coroutines/ao;->bjS:Lkotlin/coroutines/Continuation;
2019-08-17 08:22:04 +00:00
2019-10-09 23:16:36 +00:00
invoke-static {v1}, Lkotlinx/coroutines/aj;->a(Lkotlin/coroutines/Continuation;)Ljava/lang/String;
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
move-result-object v1
2019-08-17 08:22:04 +00:00
2019-10-03 02:31:26 +00:00
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const/16 v1, 0x5d
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
return-object v0
2019-07-24 11:27:29 +00:00
.end method