ββββββββββββ UDP (6100) ββββββββββββββββββββ TCP (6100) ββββββββββββ
β Agent β βββββββββββββββ β Scouter Server β ββββββββββββββ β Client β
β (Javaλ±) β λ¨λ°©ν₯ λ°μ΄ν° β (Go μλ²) β μλ°©ν₯ ν΅μ β (Eclipse β
ββββββββββββ ββββββββββββββββββββ β /WebApp)β
β β ββββββββββββ
βββ TCP_AGENT (6100) βββββββββββ
μλ²βμμ΄μ νΈ λͺ
λ Ή μ±λ
- UDP 6100: μμ΄μ νΈκ° μλ²λ‘ λ©νΈλ¦/νΈλμμ λ°μ΄ν°λ₯Ό μ μ‘ (λ¨λ°©ν₯)
- TCP 6100: ν΄λΌμ΄μΈνΈ μ°κ²° + μμ΄μ νΈ λͺ λ Ή μ±λ (μλ°©ν₯)
λͺ¨λ ν΅μ μ Big-Endian λ°μ΄λ리 νλ‘ν μ½μ μ¬μ©ν©λλ€.
| νμ | ν¬κΈ° | μ€λͺ |
|---|---|---|
| Byte | 1 | λ¨μΌ λ°μ΄νΈ |
| Boolean | 1 | 0x00/0x01 |
| Int16 | 2 | Big-endian 16λΉνΈ |
| Int32 | 4 | Big-endian 32λΉνΈ |
| Int64 | 8 | Big-endian 64λΉνΈ |
| Int3 | 3 | Big-endian 24λΉνΈ (-8388608 ~ 8388607) |
| Long5 | 5 | Big-endian 40λΉνΈ (-549755813888 ~ 549755813887) |
| Float32 | 4 | IEEE 754 (Int32 λΉνΈ λ³ν) |
| Float64 | 8 | IEEE 754 (Int64 λΉνΈ λ³ν) |
| Text | κ°λ³ | κΈΈμ΄ μ λμ¬ + UTF-8 λ¬Έμμ΄ |
| Blob | κ°λ³ | κΈΈμ΄ μ λμ¬ + λ°μ΄νΈ λ°°μ΄ |
μ μ ν¬κΈ°μ λ°λΌ μλμΌλ‘ λ°μ΄νΈ μλ₯Ό μ΅μ νν©λλ€:
0x00 β κ° = 0 (1λ°μ΄νΈ)
0x01 + int8 β [-128, 127] (2λ°μ΄νΈ)
0x02 + int16 β [-32768, 32767] (3λ°μ΄νΈ)
0x03 + int24 (3λ°μ΄νΈ) β νμ₯ λ²μ (4λ°μ΄νΈ)
0x04 + int32 β 32λΉνΈ μ 체 (5λ°μ΄νΈ)
0x05 + int40 (5λ°μ΄νΈ) β νμ₯ λ²μ (6λ°μ΄νΈ)
0x08 + int64 β 64λΉνΈ μ 체 (9λ°μ΄νΈ)
(internal/protocol/dataoutx.go:155-178, datainx.go:214-251)
0 β λΉ λ¬Έμμ΄
1~253 β 1λ°μ΄νΈ κΈΈμ΄ + λ°μ΄ν°
255 + uint16 β μ΅λ 65535λ°μ΄νΈ
254 + int32 β κ·Έ μ΄μ
| λ§€μ§ | 16μ§μ | μ©λ |
|---|---|---|
CAFE |
0x43414645 |
λ¨μΌ ν© μ μ‘ |
CAFN |
0x4341464E |
볡μ ν© μ μ‘ (Nκ°) |
CAFM |
0x4341464D |
MTU λΆν ν¨ν· |
JAVA |
0x4A415641 |
Java μμ΄μ νΈ νΈν |
JAVN |
0x4A41564E |
Java 볡μ ν© |
JMTU |
0x4A4D5455 |
Java MTU λΆν |
| λ§€μ§ | κ° | μ©λ |
|---|---|---|
| TCP_AGENT | 0xCAFE1001 |
μμ΄μ νΈ TCP μ°κ²° |
| TCP_AGENT_V2 | 0xCAFE1002 |
μμ΄μ νΈ v2 (κΈΈμ΄ μ λμ¬) |
| TCP_AGENT_REQ | 0xCAFE1011 |
μμ΄μ νΈ λͺ λ Ή μμ² |
| TCP_CLIENT | 0xCAFE2001 |
ν΄λΌμ΄μΈνΈ μ°κ²° |
| TCP_SHUTDOWN | 0xCAFE1999 |
μλ² μ’ λ£ μ νΈ |
| TCP_SEND_STACK | 0xEDED0001 |
μ€ν νΈλ μ΄μ€ μ μ‘ |
(internal/protocol/netcafe.go)
ββββββββββββββ¬ββββββββββββ¬βββββββββββββββ
β Magic (4B) β Type (1B) β Pack Data β
β 0x43414645 β β (κ°λ³) β
ββββββββββββββ΄ββββββββββββ΄βββββββββββββββ
ββββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββ¬βββββββββββ¬ββββββββ
β Magic (4B) βCount(2B) βType1(1B) βData1 βType2(1B) βData2 β...
β 0x4341464E β β β β β β
ββββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββ΄βββββββββββ΄ββββββββ
ββββββββββββββ¬ββββββββββββ¬βββββββββββ¬βββββββββββ¬ββββββββββ¬βββββββββββ
β Magic (4B) βObjHash(4B)β PkID(8B) βTotal(2B) βNum(2B) βBlob Data β
β 0x4341464D β κ°μ²΄ ν΄μ βν¨ν· κ³ μ IDβμ΄ λΆν μ βνμ¬ λ²νΈ βλ°μ΄ν° β
ββββββββββββββ΄ββββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββ΄βββββββββββ
- λμΌ
PkIDμ λͺ¨λ λΆν μ΄ λμ°©νλ©΄ μ¬μ‘°λ¦½ - 10μ΄ νμμμ ν λ―Έμμ± λΆν νκΈ°
- μ΅λ 1000κ° λ―Έμμ± ν¨ν· 보κ΄
(internal/netio/udp/processor.go, multipacket.go)
| νλκ·Έ | κ° | μλ―Έ |
|---|---|---|
| FLAG_OK | 0x01 |
μ±κ³΅ |
| FLAG_NOT_OK | 0x02 |
μ€ν¨ |
| FLAG_HAS_NEXT | 0x03 |
μΆκ° λ°μ΄ν° μμ |
| FLAG_NO_NEXT | 0x04 |
μλ΅ μ’ λ£ |
| FLAG_FAIL | 0x05 |
μ€λ₯ |
| FLAG_INVALID_SESSION | 0x44 |
μΈμ λ¬΄ν¨ |
(internal/protocol/tcpflag.go)
CLIENT SERVER
β β
βββββ 0xCAFE2001 (4B) βββββββββββ μ°κ²° μλ³
β β
βββββ cmd="LOGIN" (text) ββββββββ
βββββ session=0 (int64) ββββββββ 첫 μμ²μ μΈμ
μμ
βββββ MapPack {id, pass} βββββββ
β β μΈμ¦ μ²λ¦¬
ββββ FLAG_HAS_NEXT (0x03) ββββββ
ββββ MapPack {session, ...} ββββ μΈμ
ν ν° λ°κΈ
ββββ FLAG_NO_NEXT (0x04) βββββββ μλ΅ μ’
λ£
β β
βββββ cmd="OBJECT_LIST" ββββββββ
βββββ session=<token> (int64) βββ μΈμ
ν ν°μΌλ‘ μΈμ¦
βββββ MapPack (query) ββββββββββ
β β
ββββ FLAG_HAS_NEXT (0x03) ββββββ
ββββ Pack data βββββββββββββββββ
ββββ FLAG_NO_NEXT (0x04) βββββββ μλ΅ μ’
λ£
β β
β ... λ°λ³΅ ... β
LOGIN,SERVER_VERSION,SERVER_TIMEλͺ λ Ήμ μΈμ¦ μμ΄ νΈμΆ κ°λ₯ (FreeCmds)- κ·Έ μΈ λͺ¨λ λͺ λ Ήμ μ ν¨ν μΈμ ν ν°(int64)μ΄ νμ
- μΈμ
μ΄ λ¬΄ν¨νλ©΄
FLAG_INVALID_SESSION (0x44)λ°ν ν μ°κ²° μ’ λ£
(internal/protocol/requestcmd.go:324-329)
func(din *protocol.DataInputX, dout *protocol.DataOutputX, loggedIn bool) {
// μμ² λ°μ΄ν° μ½κΈ°
pk, _ := pack.ReadPack(din)
m := pk.(*pack.MapPack)
// μ²λ¦¬
result := m.GetText("key")
// μλ΅ (FLAG_HAS_NEXT + ν© λ°μ΄ν°)
dout.WriteByte(protocol.FLAG_HAS_NEXT)
pack.WritePack(dout, responsePack)
// FLAG_NO_NEXTλ handleClient()κ° μλ μΆκ°
}| λͺ λ Ή | μ©λ |
|---|---|
LOGIN |
μΈμ¦, μΈμ ν ν° νλ |
GET_XML_COUNTER |
μΉ΄μ΄ν° μ μ XML λ€μ΄λ‘λ |
OBJECT_LIST_REAL_TIME |
μ€μκ° μμ΄μ νΈ λͺ©λ‘ |
COUNTER_REAL_TIME |
μ€μκ° λ©νΈλ¦ μ‘°ν |
GET_TEXT_100 |
ν΄μβν μ€νΈ μλ³ν |
TRANX_REAL_TIME |
μ€μκ° νΈλμμ λ°μ΄ν° |
CLOSE |
μ°κ²° μ’ λ£ |
(internal/netio/tcp/server.go:156-222)
μμ΄μ νΈ TCP μ°κ²°μ λν μμΈ λ΄μ©μ tcp-agent-protocol.mdλ₯Ό μ°Έμ‘°νμΈμ.
| μ½λ | μ΄λ¦ | μ©λ | νμΌ |
|---|---|---|---|
| 10 | MapPack | λ²μ© Key-Value λ§΅ | map_pack.go |
| 21 | XLogPack | νΈλμμ λ‘κ·Έ (40+ νλ) | xlog_pack.go |
| 22 | DroppedXLogPack | λλ‘λ νΈλμμ | dropped_xlog_pack.go |
| 26 | XLogProfilePack | νλ‘νμΌλ§ λ°μ΄ν° | xlog_profile_pack.go |
| 27 | XLogProfilePack2 | νμ₯ νλ‘νμΌλ§ λ°μ΄ν° | xlog_profile_pack2.go |
| 31 | SpanPack | λΆμ° νΈλ μ΄μ± μ€ν¬ | span_pack.go |
| 32 | SpanContainerPack | μ€ν¬ 컨ν μ΄λ | span_container_pack.go |
| 50 | TextPack | ν΄μβν μ€νΈ λ§€ν | text_pack.go |
| 60 | PerfCounterPack | μ±λ₯ λ©νΈλ¦ | perf_counter_pack.go |
| 61 | StatusPack | μν μ 보 | status_pack.go |
| 62 | StackPack | μ€ν νΈλ μ΄μ€ | stack_pack.go |
| 63 | SummaryPack | μμ½ ν΅κ³ | summary_pack.go |
| 64 | BatchPack | λ°°μΉ μμ λ°μ΄ν° | batch_pack.go |
| 65 | InteractionPerfCounterPack | μνΈμμ© λ©νΈλ¦ | interaction_perf_counter_pack.go |
| 70 | AlertPack | μλ¦Ό λ°μ΄ν° | alert_pack.go |
| 80 | ObjectPack | μμ΄μ νΈ ννΈλΉνΈ/λ©νλ°μ΄ν° | object_pack.go |
(internal/protocol/pack/pack.go)
type Pack interface {
PackType() byte
Write(o *DataOutputX)
Read(d *DataInputX) error
}[pack_type: 1λ°μ΄νΈ][pack κ³ μ νλλ€: κ°λ³]
pack.WritePack()μ νμ
μ½λ 1λ°μ΄νΈλ₯Ό λ¨Όμ μ°κ³ , pack.Write()λ‘ νλλ₯Ό μ§λ ¬νν©λλ€.
pack.ReadPack()μ νμ
μ½λλ₯Ό μ½μ΄ CreatePack()μΌλ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν ν pack.Read()λ₯Ό νΈμΆν©λλ€.
(internal/protocol/pack/pack.go:76-99)
κ° Valueλ [type_code:1λ°μ΄νΈ][λ°μ΄ν°] νμμΌλ‘ μ§λ ¬νλ©λλ€.
| μ½λ | νμ | ꡬν체 | μ€λͺ |
|---|---|---|---|
| 0 | NULL | NullValue | null κ° |
| 10 | BOOLEAN | BooleanValue | λΆλ¦¬μΈ |
| 20 | DECIMAL | DecimalValue | κ°λ³κΈΈμ΄ μ μ |
| 30 | FLOAT | FloatValue | 32λΉνΈ λΆλμμμ |
| 40 | DOUBLE | DoubleValue | 64λΉνΈ λΆλμμμ |
| 45 | DOUBLE_SUMMARY | DoubleSummary | ν΅κ³ (min/max/avg/count) |
| 46 | LONG_SUMMARY | LongSummary | μ μ ν΅κ³ |
| 50 | TEXT | TextValue | λ¬Έμμ΄ |
| 51 | TEXT_HASH | TextHashValue | ν΄μλ λ¬Έμμ΄ (Hexa32) |
| 60 | BLOB | BlobValue | λ°μ΄νΈ λ°°μ΄ |
| 61 | IP4ADDR | IP4Value | IPv4 μ£Όμ |
| 70 | LIST | ListValue | Value 리μ€νΈ |
| 71 | ARRAY_INT | IntArray | int λ°°μ΄ |
| 72 | ARRAY_FLOAT | FloatArray | float λ°°μ΄ |
| 73 | ARRAY_TEXT | TextArray | λ¬Έμμ΄ λ°°μ΄ |
| 74 | ARRAY_LONG | LongArray | long λ°°μ΄ |
| 80 | MAP | MapValue | StringβValue λ§΅ |
(internal/protocol/value/value.go)
[count: Decimal(κ°λ³)][key1: Text][value1: type_byte + value_data][key2: Text][value2: type_byte + value_data]...
[ObjType: Text][ObjHash: Decimal][ObjName: Text][Address: Text]
[Version: Text][Alive: Boolean][Wakeup: Decimal][Tags: Value]
(internal/protocol/pack/object_pack.go:26-35)
[Time: Int64][ObjName: Text][TimeType: Byte][Data: Value(MapValue)]
(internal/protocol/pack/perf_counter_pack.go:22-27)
[XType: Text][Hash: Int32][Text: Text]
(internal/protocol/pack/text_pack.go:20-24)
[EndTime: Decimal][ObjHash: Decimal][Service: Decimal][Txid: Int64]
[ThreadNameHash: Int64][Caller: Int64][Gxid: Int64][Elapsed: Decimal]
[Error: Decimal][Cpu: Decimal][SqlCount: Decimal][SqlTime: Decimal]
[IPAddr: Blob][Kbytes: Decimal][Status: Decimal][Userid: Decimal]
[UserAgent: Decimal][Referer: Decimal][Group: Decimal]
[ApicallCount: Decimal][ApicallTime: Decimal][CountryCode: Text]
[City: Decimal][XType: Byte][Login: Decimal][Desc: Decimal]
[WebHash: Decimal][WebTime: Decimal][HasDump: Byte]
[Text1: Text][Text2: Text][QueuingHostHash: Decimal]
[QueuingTime: Decimal][Queuing2ndHostHash: Decimal]
[Queuing2ndTime: Decimal][Text3: Text][Text4: Text][Text5: Text]
[ProfileCount: Decimal][B3Mode: Boolean][ProfileSize: Decimal]
[DiscardType: Byte][IgnoreGlobalConsequentSampling: Boolean]
(internal/protocol/pack/xlog_pack.go:60-140+)
[μμ΄μ νΈ UDP ν¨ν·]
β
βΌ
UDP Server (0.0.0.0:6100)
β λ°μ΄ν°κ·Έλ¨ μμ (μ΅λ 65535 λ°μ΄νΈ)
β λ²νΌ λ³΅μ¬ (UDP κ²½κ³ λ³΄μ‘΄)
βΌ
Magic λ°μ΄νΈ νμ± (4λ°μ΄νΈ)
β
ββ CAFE (0x43414645) β processCafe()
β ββ [type:1B][data] β Pack μμ± β λμ€ν¨μ²
β
ββ CAFN (0x4341464E) β processCafeN()
β ββ [count:2B][type1:1B][data1][type2:1B][data2]...
β β κ° Pack μμ± β λμ€ν¨μ²
β
ββ CAFM (0x4341464D) β processCafeMTU()
β ββ [objHash:4B][pkid:8B][total:2B][num:2B][data]
β β MultiPacketProcessor μ μ μ₯
β β λͺ¨λ λΆν λμ°© μ μ¬μ‘°λ¦½ β λμ€ν¨μ²
β
ββ JAVA β processCafe() (CAFEμ λμΌ μ²λ¦¬)
ββ JAVN β processCafeN() (CAFNμ λμΌ μ²λ¦¬)
ββ JMTU β processCafeMTU() (CAFMμ λμΌ μ²λ¦¬)
(internal/netio/udp/server.go:43-88, processor.go:55-138)
| Pack νμ | νΈλ€λ¬ | λμ |
|---|---|---|
| ObjectPack (80) | AgentManager | μμ΄μ νΈ λ±λ‘/κ°±μ β ObjectCache |
| PerfCounterPack (60) | PerfCountCore | λ©νΈλ¦ μ μ₯ |
| XLogPack (21) | XLogCore | νΈλμμ λ‘κ·Έ μ μ₯ |
| TextPack (50) | TextCore | ν΄μβν μ€νΈ μΊμ + λμ€ν¬ μ μ₯ |
| AlertPack (70) | AlertCore | μλ¦Ό μ²λ¦¬ |
MultiPacketProcessor
βββ pending: map[int64]*multiPacket β pkid β λΆν μ μ₯μ
β
βββ λΆν λμ°© μ:
β ββ pending[pkid] μμΌλ©΄ β μ multiPacket μμ±
β ββ fragments[num] = data μ μ₯
β ββ receivedCount++
β ββ receivedCount == total β μ¬μ‘°λ¦½ μλ£
β ββ λͺ¨λ λΆν μμλλ‘ ν©μΉ¨ β μμ±λ λ°μ΄νΈ λ°°μ΄
β
βββ λ§λ£ μ²λ¦¬:
ββ 10μ΄ κ²½κ³Όν λ―Έμμ± ν¨ν· β νκΈ° (μ΅λ 1000κ° λ³΄κ΄)
(internal/netio/udp/multipacket.go:34-105)
CLIENT SERVER
β β
β ββββ 0xCAFE2001 βββββββββββββββββββββββββ TCP_CLIENT λ§€μ§
β β
β ββ (1) LOGIN ββββββββββββββββββββββββββββ
β cmd="LOGIN", session=0 β
β MapPack {id:"admin", pass:"...", β
β ip:"...", hostname:"...", β
β version:"..."} β
β β μΈμ¦ μ²λ¦¬
β βββ FLAG_HAS_NEXT (0x03) βββββββββββββββ
β βββ MapPack {session:token, β
β server_id:..., β
β timezone:...} β
β βββ FLAG_NO_NEXT (0x04) ββββββββββββββββ
β β
β ββ (2) GET_XML_COUNTER ββββββββββββββββββ μΉ΄μ΄ν° μ μ μμ²
β cmd="GET_XML_COUNTER", session=token β
β β
β βββ FLAG_HAS_NEXT (0x03) βββββββββββββββ
β βββ MapPack {xml: counters.xml λ΄μ©} β
β βββ FLAG_NO_NEXT (0x04) ββββββββββββββββ
β β
β ββ (3) OBJECT_LIST_REAL_TIME ββββββββββββ μμ΄μ νΈ λͺ©λ‘ ν΄λ§
β cmd="OBJECT_LIST_REAL_TIME" β
β session=token β
β β
β βββ FLAG_HAS_NEXT (0x03) βββββββββββββββ
β βββ ObjectPack (μμ΄μ νΈ1) βββββββββββββ
β βββ FLAG_HAS_NEXT (0x03) βββββββββββββββ
β βββ ObjectPack (μμ΄μ νΈ2) βββββββββββββ
β βββ FLAG_NO_NEXT (0x04) ββββββββββββββββ
β β
β ... μ£ΌκΈ°μ ν΄λ§ λ°λ³΅ ... β
β β
β ββ (N) CLOSE ββββββββββββββββββββββββββββ μ°κ²° μ’
λ£
| μ€μ | κΈ°λ³Έκ° | μ€λͺ |
|---|---|---|
net.udp.listen.ip |
0.0.0.0 | UDP λ°μΈλ μ£Όμ |
net.udp.listen.port |
6100 | UDP ν¬νΈ |
net.udp.packet.buffer.size |
65535 | UDP λ²νΌ ν¬κΈ° |
net.udp.so.rcvbuf.size |
8MB | UDP μμΌ μμ λ²νΌ |
net.tcp.listen.ip |
0.0.0.0 | TCP λ°μΈλ μ£Όμ |
net.tcp.listen.port |
6100 | TCP ν¬νΈ |
net.tcp.client.so.timeout.ms |
8000 | ν΄λΌμ΄μΈνΈ μ½κΈ° νμμμ |
net.tcp.agent.keepalive.interval.ms |
60000 | μμ΄μ νΈ Keepalive κ°κ²© |
net.tcp.get.agent.connection.wait.ms |
5000 | μμ΄μ νΈ μ°κ²° λκΈ° μκ° |
[Java Agent]
β
ββ UDP ObjectPack (ννΈλΉνΈ, 30μ΄ μ£ΌκΈ°)
β β dispatcher β AgentManager β ObjectCache
β
ββ UDP PerfCounterPack (λ©νΈλ¦)
β β dispatcher β PerfCountCore β μ μ₯
β
ββ UDP XLogPack (νΈλμμ
)
β β dispatcher β XLogCore β μ μ₯
β
ββ UDP TextPack (λ¬Έμμ΄ ν΄μ)
β β dispatcher β TextCore β textCache + λμ€ν¬
β
ββ TCP_AGENT (λͺ
λ Ή μ±λ)
β μλ²κ° λͺ
λ Ή μ μ‘ (KEEP_ALIVE, THREAD_DUMP λ±)
[Eclipse Client]
β
ββ TCP_CLIENT
ββ LOGIN β μΈμ
ν ν° νλ
ββ GET_XML_COUNTER β μΉ΄μ΄ν° μ μ XML
ββ OBJECT_LIST_REAL_TIME β μμ΄μ νΈ λͺ©λ‘ ν΄λ§
ββ COUNTER_REAL_TIME β μ€μκ° λ©νΈλ¦
ββ GET_TEXT_100 β ν΄μβν
μ€νΈ μλ³ν
ββ ... (200+ 컀맨λ)
| νλͺ© | λ΄μ© |
|---|---|
| νλ‘ν μ½ νμ | λ°μ΄λ리 (ν μ€νΈ κΈ°λ° μλ) |
| μ§λ ¬ν | Big-endian, κ°λ³κΈΈμ΄ μ μ (Decimal) |
| UDP ν¬νΈ | 6100 (μμ΄μ νΈ λ°μ΄ν° μμ ) |
| TCP ν¬νΈ | 6100 (ν΄λΌμ΄μΈνΈ + μμ΄μ νΈ) |
| μ΅λ UDP ν¨ν· | 65535λ°μ΄νΈ (μ΄κ³Ό μ MTU λΆν ) |
| λ§€μ§ λ°μ΄νΈ | 4λ°μ΄νΈ μλͺ (CAFE λ³ν, JAVA λ³ν) |
| Pack νμ | 18μ’ (ObjectPack, XLogPack, PerfCounterPack λ±) |
| Value νμ | 16μ’ (Decimal, Text, TextHash, MapValue, ListValue λ±) |
| μμΆ | κ°λ³κΈΈμ΄ μ μ μΈμ½λ©λ§ μ¬μ© (gzip/deflate μμ) |
| μνΈν | μμ (λ€νΈμν¬ λΆλ¦¬μ μμ‘΄) |
| μΈμ¦ | ID/Password β int64 μΈμ ν ν° |
| Keepalive | TCP_AGENT μ°κ²°μ KEEP_ALIVE λͺ λ Ή (60μ΄ κ°κ²©) |
| MTU λΆν λ§λ£ | 10μ΄ |
| λ°μ΄λ리 νΈν | Java μλ³Έ Scouterμ μμ νΈν |