Jump to content
Korean Random
StranikS_Scan

PjOrion - редактирование, компиляция, декомпиляция, обфускация модов (Версия: 1.3.5 Дата: 11.08.2019)

Пользуетесь ли вы Орионом?  

310 members have voted

You do not have permission to vote in this poll, or see the poll results. Please sign in or register to vote in this poll.

Recommended Posts

@StranikS_Scan, можно как-то избавиться от BOM в начале файла и от возврата каретки при сохранении Орионом файла?

 

От БОМа нинужно избавляться, иначе не понятно что внутри. Каретку гляну

Share this post


Link to post

Short link
Share on other sites

От БОМа нинужно избавляться, иначе не понятно что внутри.

А если его в файле не было изначально, а Орион зачем-то его добавил...

Share this post


Link to post

Short link
Share on other sites

А если его в файле не было изначально, а Орион зачем-то его добавил...

 

Сохраняешь в UTF-8 режиме получаешь БОМ бесплатно.

Share this post


Link to post

Short link
Share on other sites

Сохраняешь в UTF-8 режиме получаешь БОМ бесплатно.

Спасибо, но может тогда новый режим добавишь - UTF-8 without BOM?
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Дяденька сделай, чтобы набранный код восстанавливался в случае завершения работы неожиданного.

А то представь, сижу, себе пишу, а тут неожиданно завершение работы. o_O

Share this post


Link to post

Short link
Share on other sites

Надоело что Uncompyle2 не декомпилит файл strategiccamera.pyc. Решил глянуть в чем там косяк.

 

Оказалось, что в данном модуле одна из пользовательских функций, а именно restoreDefaultsState, скомпилирована со скрытым кодом

         (13) <code object restoreDefaultsState at 01645188, file "scripts/client/AvatarInputHandler/DynamicCameras/StrategicCamera.py", line 154>
            ******************** code beginning (level 2) ********************
            discode[hexcode]:
            | 155           0 LOAD_GLOBAL          [74 00 00]     0 (LOG_ERROR)
            |               3 LOAD_CONST           [64 01 00]     1 (StrategiCamera::restoreDefaultState is obsolete!)
            |               6 CALL_FUNCTION        [83 01 00]     1
            |               9 POP_TOP              [01 -- --]
            | 156          10 LOAD_CONST           [64 00 00]     0 (None)
            |              13 RETURN_VALUE         [53 -- --]
-------------------------------------------------------------------------------------
            | 157          14 LOAD_GLOBAL          [74 01 00]     1 (BigWorld)
            |              17 LOAD_ATTR            [6A 02 00]     2 (player)
            |              20 CALL_FUNCTION        [83 00 00]     0
            |              23 LOAD_ATTR            [6A 03 00]     3 (getOwnVehiclePosition)
            |              26 CALL_FUNCTION        [83 00 00]     0
            |              29 STORE_FAST           [7D 01 00]     1 (vPos)
            | 159          32 LOAD_FAST            [7C 00 00]     0 (self)
            |              35 LOAD_ATTR            [6A 04 00]     4 (_StrategicCamera__cfg)
            |              38 LOAD_CONST           [64 02 00]     2 (camDist)
            |              41 BINARY_SUBSCR        [19 -- --]
            |              42 LOAD_FAST            [7C 00 00]     0 (self)
            |              45 STORE_ATTR           [5F 05 00]     5 (_StrategicCamera__camDist)
            | 160          48 LOAD_CONST           [64 03 00]     3 (0.0)
            |              51 LOAD_FAST            [7C 00 00]     0 (self)
            |              54 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |              57 STORE_ATTR           [5F 07 00]     7 (pivotMaxDist)
            | 161          60 LOAD_CONST           [64 04 00]     4 (0.01)
            |              63 LOAD_FAST            [7C 00 00]     0 (self)
            |              66 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |              69 STORE_ATTR           [5F 08 00]     8 (maxDistHalfLife)
            | 162          72 LOAD_CONST           [64 03 00]     3 (0.0)
            |              75 LOAD_FAST            [7C 00 00]     0 (self)
            |              78 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |              81 STORE_ATTR           [5F 09 00]     9 (movementHalfLife)
            | 163          84 LOAD_CONST           [64 04 00]     4 (0.01)
            |              87 LOAD_FAST            [7C 00 00]     0 (self)
            |              90 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |              93 STORE_ATTR           [5F 0A 00]    10 (turningHalfLife)
            | 164          96 LOAD_GLOBAL          [74 0B 00]    11 (Math)
            |              99 LOAD_ATTR            [6A 0C 00]    12 (Vector3)
            |             102 LOAD_CONST           [64 03 00]     3 (0.0)
            |             105 LOAD_FAST            [7C 00 00]     0 (self)
            |             108 LOAD_ATTR            [6A 05 00]     5 (_StrategicCamera__camDist)
            |             111 LOAD_CONST           [64 03 00]     3 (0.0)
            |             114 CALL_FUNCTION        [83 03 00]     3
            |             117 LOAD_FAST            [7C 00 00]     0 (self)
            |             120 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |             123 STORE_ATTR           [5F 0D 00]    13 (pivotPosition)
            | 167         126 LOAD_GLOBAL          [74 0E 00]    14 (trgMat)
            |             129 LOAD_FAST            [7C 00 00]     0 (self)
            |             132 LOAD_ATTR            [6A 06 00]     6 (_StrategicCamera__cam)
            |             135 STORE_ATTR           [5F 0F 00]    15 (target)
            | 169         138 LOAD_GLOBAL          [74 01 00]     1 (BigWorld)
            |             141 LOAD_ATTR            [6A 02 00]     2 (player)
            |             144 CALL_FUNCTION        [83 00 00]     0
            |             147 LOAD_ATTR            [6A 10 00]    16 (positionControl)
            |             150 LOAD_ATTR            [6A 11 00]    17 (moveTo)
            |             153 LOAD_FAST            [7C 00 00]     0 (self)
            |             156 LOAD_ATTR            [6A 12 00]    18 (_StrategicCamera__totalMove)
            |             159 CALL_FUNCTION        [83 01 00]     1
            |             162 POP_TOP              [01 -- --]
            consts:
               (0) None
               (1) 'StrategiCamera::restoreDefaultState is obsolete!'
               (2) 'camDist'
               (3) 0.0
               (4) 0.01
            ********************** code ending (level 2) *********************

Смотрим на 13-ю позицию, стоит RETURN_VALUE, все что ниже скрытый код. Какая-то кривотень. Короче пофиксю декомпилятор чтоб не вываливался в таких случаях.

Edited by StranikS_Scan
  • Upvote 1

Share this post


Link to post

Short link
Share on other sites

Оказалось, что в данном модуле одна из пользовательских функций, а именно restoreDefaultsState, скомпилирована со скрытым кодом

Хмм... Они ее так из патча в патч компилят... Толи компилятор у них лажает, толи они старательно этот так собирают, тогда возникает вопрос - зачем.

Share this post


Link to post

Short link
Share on other sites

Хмм... Они ее так из патча в патч компилят... Толи компилятор у них лажает, толи они старательно этот так собирают, тогда возникает вопрос - зачем.

 

Просто кто-то там сделал что-то типа вот так:

 

def aaa():

    return 'This is aaa'

    a = 123

    b = a**2

    print b

 

то ли он так комментирует код, то ли хранит чего-то в коде, куски какие-то, то ли тупо забыл что у него там return и код дальше не выполняется... хз

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites
Uncompyle2

пора бы уже и Uncompyle6 добавить ;)

по сути тот-же uncompyle2, но с возможностью частичной декомпиляции (грубо говоря "со смещения XX по YY").

Edited by fecell

Share this post


Link to post

Short link
Share on other sites

пора бы уже и Uncompyle6 добавить ;)

по сути тот-же uncompyle2, но с возможностью частичной декомпиляции (грубо говоря "со смещения XX по YY").

 

Предлагаешь заменить 2 на 6?

Share this post


Link to post

Short link
Share on other sites

Предлагаешь заменить 2 на 6?

не заменить, а добавить :)

Share this post


Link to post

Short link
Share on other sites

не заменить, а добавить :)

 

Не, я уже поглядел, добавлять смысла нет. Только заменить. Новая версия это переработанная старая и там уже пофиксен ряд болезней двойки. Так что 2-ка уже не нужна. Короче я уже заменил 2 на 6. Вот только морока цифры менять )))))

Защибись, заменил на новый, клиент 0.9.13 декомпильнул без проблем. Начал декомпилить 0.9.14 - полезли ошибки EPIC, слов нет :(((

>>> Not decompiled:
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\app_loader\loader.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\app_loader\states.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\battle_control\consumables\equipment_ctrl.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\battle_control\requests\context.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clans\contexts.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clans\states.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clubs\contexts.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clubs\items.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clubs\states.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\clubs\subscriptions.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\context\prb_ctx.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\context\pre_queue_ctx.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\context\unit_ctx.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\context\__init__.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\items\unit_items.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\prb_control\items\__init__.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\cybersport\cybersportmainwindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\fortifications\fortbattleroomwindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\prb_windows\battlesessionlist.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\prb_windows\companieswindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\prb_windows\prebattlewindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\prb_windows\prequeuewindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\scaleform\daapi\view\lobby\prb_windows\squad_window.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\server_events\caches.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\server_events\modifiers.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\shared\fortifications\context.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\shared\fortifications\fort_seqs.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\shared\fortifications\restrictions.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\shared\utils\requesters\abstract.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\shared\view_helpers\usersinfocontroller.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\wgnc\actions.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\wgnc\gui_items.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\gui\wgnc\provider.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\helpers\serversettings.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\gui\scaleform\view\channelsmanagementwindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\gui\scaleform\view\lazychannelwindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\gui\scaleform\view\lobbychannelwindow.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\proto\bw_chat2\admin_chat_cmd.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\proto\entities.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\proto\xmpp\resources.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\messenger\proto\xmpp\wrappers.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\post_processing\__init__.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\client\tutorial\data\conditions.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\common\bwautoimport.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res\scripts\common\unitroster.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\bsddb\dbtables.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\crypto\hash\sha1.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_anon.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_bitfields.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_byteswap.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_callbacks.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_funcptr.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_incomplete.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_internals.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_keeprefs.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_structures.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\test\test_struct_fields.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\ctypes\__init__.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\distutils\tests\test_bdist_msi.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\distutils\tests\test_msvc9compiler.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\functools.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\idlelib\multicall.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\idlelib\pyparse.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\json\tests\__init__.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\lib-tk\test\test_tkinter\test_widgets.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\lib-tk\test\test_ttk\test_widgets.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\logging\config.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\plat-mac\carbon\quicktime.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\plat-mac\macerrors.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\plat-sunos5\stropts.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\pydoc.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\rexec.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\site.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\sqlite3\test\dbapi.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\sqlite3\test\regression.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\sqlite3\test\types.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_assertions.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_break.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_case.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_loader.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_program.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_result.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_runner.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_setups.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_skipping.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\unittest\test\test_suite.pyc'
'C:\Python27\Projects\0.9.14_90_Decompile_WOT\res_bw\scripts\common\lib\xml\sax\saxutils.pyc'

Причем 2-ка декомпилит их без проблем ))))

Edited by StranikS_Scan

Share this post


Link to post

Short link
Share on other sites

И так продолжаем эпопею. В данный момент ковыряю Uncompyle6 с гитхаба. Столкнулся с проблемой декомпиляции описания класса из файла res/scripts/client/gui/app_loader/loader.pyc

 

Оказалось что в коде затесалась странная инструкция, которую логика ункомпила не предусматривает:

...
|             211 LOAD_CONST           [64 10 00]    16 (_GlobalCtx)
|  16         214 LOAD_NAME            [65 19 00]    25 (object)
|             217 BUILD_TUPLE          [66 01 00]     1
|             220 LOAD_CONST           [64 11 00]    17 (<code object _GlobalCtx at 02AA1188, file "scripts/client/gui/app_loader/loader.py", line 15>)
|             223 MAKE_FUNCTION        [84 00 00]     0
|             226 CALL_FUNCTION        [83 00 00]     0
|             229 BUILD_CLASS          [59 -- --]
|             230 CALL_FUNCTION        [83 01 00]     1   <------------------?????????????????
|             233 STORE_NAME           [5A 1A 00]    26 (_GlobalCtx)
......
consts:
   (0) -1
   (1) None
...

Выше приведено описание кривого класса. Не понятно что в коде делает затесавшийся 230 CALL_FUNCTION.

 

А вот ниже прямо по коду идёт пример "правильного" описания класса:

|  36         236 LOAD_CONST           [64 12 00]    18 (_EmptyFactory)
|             239 LOAD_NAME            [65 09 00]     9 (IAppFactory)
|             242 BUILD_TUPLE          [66 01 00]     1
|             245 LOAD_CONST           [64 13 00]    19 (<code object _EmptyFactory at 02AA1EC0, file "scripts/client/gui/app_loader/loader.py", line 36>)
|             248 MAKE_FUNCTION        [84 00 00]     0
|             251 CALL_FUNCTION        [83 00 00]     0
|             254 BUILD_CLASS          [59 -- --]                                    !!!
|             255 STORE_NAME           [5A 1B 00]    27 (_EmptyFactory)              !!!

Пытался скомпилить класс как в пером примере с лишним CALL_FUNCTION так и не понял как его получить.

Share this post


Link to post

Short link
Share on other sites

@StranikS_Scan, super(_GlobalCtx, self).__init__()

так и не понял, зачем это нужно, когда наследования нет.

 

Чего-то не улавливаю связи . То что ты привел идет уже дальше внутри def __init__(self):

         (4) <code object __init__ at 02B22530, file "scripts/client/gui/app_loader/loader.py", line 21>
            ******************** code beginning (level 2) ********************
            discode[hexcode]:
            |  22           0 LOAD_GLOBAL          [74 00 00]     0 (super)
            |               3 LOAD_GLOBAL          [74 01 00]     1 (_GlobalCtx)
            |               6 LOAD_FAST            [7C 00 00]     0 (self)
            |               9 CALL_FUNCTION        [83 02 00]     2
            |              12 LOAD_ATTR            [6A 02 00]     2 (__init__)
            |              15 CALL_FUNCTION        [83 00 00]     0
            |              18 POP_TOP              [01 -- --]

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...